topnotch_ordersystem/app/Models/InvoiceReport.php
2024-12-16 15:00:59 -08:00

66 lines
1.7 KiB
PHP

<?php
namespace App\Models;
use App\Enums\InvoiceStatus;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class InvoiceReport extends Model
{
use HasFactory;
protected $fillable = [
'internal_id',
'customer_id',
'date_start',
'date_end',
'filter_paid',
'subtotal',
'pst',
'gst',
'total',
];
public static function boot(): void
{
parent::boot();
static::created(function (InvoiceReport $model) {
// Set ID after creation
$model->attributes['internal_id'] = 'TN-INR-'.$model->id;
// Associate all relevant invoices
$invoices = Invoice::whereBetween('date', [$model->date_start, $model->date_end])
->where('customer_id', $model->customer_id)
->when($model->filter_paid, function ($query) {
$query->whereNot('status', InvoiceStatus::PAID);
});
$model->invoices()->sync($invoices->pluck('id')->toArray());
$model->total = $model->invoices()->sum('total');
// Finally, save
$model->save();
});
}
public function customer(): BelongsTo
{
return $this->belongsTo(Customer::class);
}
public function invoices(): BelongsToMany
{
return $this->BelongsToMany(Invoice::class);
}
public function orders()
{
return $this->invoices()->with('orders')->get()->pluck('orders')->flatten()->unique('id');
}
}