74 lines
1.7 KiB
PHP
74 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class Quote extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $fillable = [
|
|
'client_id',
|
|
'group_id',
|
|
'reference',
|
|
'status',
|
|
'quote_date',
|
|
'valid_until',
|
|
'currency',
|
|
'total_ht',
|
|
'total_tva',
|
|
'total_ttc',
|
|
];
|
|
|
|
protected static function booted()
|
|
{
|
|
static::creating(function ($quote) {
|
|
$prefix = 'DEV-' . now()->format('Ym') . '-';
|
|
$lastQuote = self::where('reference', 'like', $prefix . '%')
|
|
->orderBy('reference', 'desc')
|
|
->first();
|
|
|
|
if ($lastQuote) {
|
|
$lastNumber = intval(substr($lastQuote->reference, -4));
|
|
$newNumber = $lastNumber + 1;
|
|
} else {
|
|
$newNumber = 1;
|
|
}
|
|
|
|
$quote->reference = $prefix . str_pad((string)$newNumber, 4, '0', STR_PAD_LEFT);
|
|
});
|
|
}
|
|
|
|
protected $casts = [
|
|
'quote_date' => 'date',
|
|
'valid_until' => 'date',
|
|
'total_ht' => 'decimal:2',
|
|
'total_tva' => 'decimal:2',
|
|
'total_ttc' => 'decimal:2',
|
|
];
|
|
|
|
public function client()
|
|
{
|
|
return $this->belongsTo(Client::class);
|
|
}
|
|
|
|
public function group()
|
|
{
|
|
return $this->belongsTo(ClientGroup::class);
|
|
}
|
|
|
|
public function lines()
|
|
{
|
|
return $this->hasMany(QuoteLine::class);
|
|
}
|
|
|
|
public function history()
|
|
{
|
|
return $this->hasMany(DocumentStatusHistory::class, 'document_id')
|
|
->where('document_type', 'quote')
|
|
->orderBy('changed_at', 'desc');
|
|
}
|
|
}
|