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