78 lines
2.2 KiB
PHP
78 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Models\Transaction;
|
|
use App\Traits\AccountInfoTrait;
|
|
use App\Traits\ActiveStatesTrait;
|
|
use App\Traits\ProfilePermissionTrait;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class Account extends Model
|
|
{
|
|
use HasFactory;
|
|
use AccountInfoTrait;
|
|
use ActiveStatesTrait;
|
|
use ProfilePermissionTrait;
|
|
|
|
|
|
protected $fillable = [];
|
|
protected $table = 'accounts';
|
|
|
|
/**
|
|
* Accessor for balance attribute.
|
|
* Calculates the balance by calling getBalance() method from AccountInfoTrait.
|
|
*
|
|
* @return float|int
|
|
*/
|
|
public function getBalanceAttribute()
|
|
{
|
|
return $this->getBalance($this->id);
|
|
}
|
|
|
|
// Get all of the owning accountable tables: users and organizations
|
|
// One-to-many polymorphic
|
|
public function accountable()
|
|
{
|
|
return $this->morphTo();
|
|
}
|
|
|
|
// Define the relationship for transactions where the account is the sender
|
|
public function transactionsFrom()
|
|
{
|
|
return $this->hasMany(Transaction::class, 'from_account_id');
|
|
}
|
|
|
|
// Define the relationship for transactions where the account is the receiver
|
|
public function transactionsTo()
|
|
{
|
|
return $this->hasMany(Transaction::class, 'to_account_id');
|
|
}
|
|
|
|
// Define a combined relationship for all transactions involving the account
|
|
public function transactions()
|
|
{
|
|
return $this->transactionsFrom()->union($this->transactionsTo());
|
|
}
|
|
|
|
public static function accountsCyclosMember($cyclos_id)
|
|
{
|
|
return Account::with('accountable')
|
|
->whereHas('accountable', function ($query) use ($cyclos_id) {
|
|
$query->where('cyclos_id', $cyclos_id)
|
|
->whereNull('inactive_at');
|
|
})
|
|
->pluck('name', 'id');
|
|
|
|
}
|
|
|
|
//get all accounts owned by the same accountable
|
|
public function getAccountsBySameAccountable()
|
|
{
|
|
return Account::where('accountable_id', $this->accountable_id)
|
|
->where('accountable_type', $this->accountable_type)
|
|
->get();
|
|
}
|
|
}
|