Files
MKM/app/Models/Client.php
Jp 5d427cdea4 feat: add discount management and PDF export for transmittals
- Create Discount model, migration, and Filament resource with relation to Client
- Add PDF export functionality for transmittals using DomPDF
- Include discount type selection in sales transactions
- Fix account filtering logic in expense resource
- Update export job to generate PDF instead of Excel
2026-02-18 01:42:44 +08:00

87 lines
2.0 KiB
PHP

<?php
namespace App\Models;
use App\Observers\ClientObserver;
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
#[ObservedBy([ClientObserver::class])]
class Client extends Model
{
use HasFactory;
protected $guarded = [];
protected $appends = ['vatable'];
public function getFullNameAttribute()
{
return $this->lname.', '.$this->fname.' '.$this->mname;
}
public function getVatableAttribute(): bool
{
return $this->type->type == 'Vatable';
}
/**
* Get all the branches for the Client
*/
public function branches(): HasMany
{
return $this->hasMany(Branch::class);
}
/**
* Get the type associated with the Client
*/
public function type(): BelongsTo
{
return $this->belongsTo(ClientType::class);
}
public function accounts(): HasMany
{
return $this->hasMany(Account::class);
}
/**
* The users that belong to the Client
*/
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class);
}
public function transmittals(): HasMany
{
return $this->hasMany(Transmittal::class);
}
public function sales(): HasManyThrough
{
return $this->hasManyThrough(Sale::class, Branch::class);
}
public function expenses(): HasManyThrough
{
return $this->hasManyThrough(Expense::class, Branch::class);
}
public function journals(): HasManyThrough
{
return $this->hasManyThrough(Journal::class, Branch::class);
}
public function discounts(): HasMany
{
return $this->hasMany(Discount::class);
}
}