78 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class PurchaseOrder extends Model
{
use HasFactory;
protected static function booted()
{
static::creating(function ($purchaseOrder) {
// Auto-generate PO number if not provided
if (empty($purchaseOrder->po_number)) {
$prefix = 'CMD-' . now()->format('Ym') . '-';
$lastOrder = self::where('po_number', 'like', $prefix . '%')
->orderBy('po_number', 'desc')
->first();
if ($lastOrder) {
$lastNumber = intval(substr($lastOrder->po_number, -4));
$newNumber = $lastNumber + 1;
} else {
$newNumber = 1;
}
$purchaseOrder->po_number = $prefix . str_pad((string) $newNumber, 4, '0', STR_PAD_LEFT);
}
});
}
protected $fillable = [
'fournisseur_id',
'po_number',
'status',
'order_date',
'expected_date',
'currency',
'total_ht',
'total_tva',
'total_ttc',
'notes',
'delivery_address',
];
protected $casts = [
'order_date' => 'date',
'expected_date' => 'date',
'total_ht' => 'decimal:2',
'total_tva' => 'decimal:2',
'total_ttc' => 'decimal:2',
];
public function fournisseur(): BelongsTo
{
return $this->belongsTo(Fournisseur::class);
}
public function lines(): HasMany
{
return $this->hasMany(PurchaseOrderLine::class);
}
/**
* Get the goods receipts for this purchase order.
*/
public function goodsReceipts(): HasMany
{
return $this->hasMany(GoodsReceipt::class);
}
}