70 lines
1.8 KiB
PHP
70 lines
1.8 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);
|
|
}
|
|
}
|