Files
timebank-cc-public/app/Models/Account.php
Ronald Huynen 2547717edb Initial commit
2026-03-23 21:37:59 +01:00

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();
}
}