feat: add Devis and BesoinInformatique modules

- Devis: CRUD complet, génération PDF (dompdf), paramètres (DevisSetting)
- BesoinInformatique: CRUD complet avec gestion matériels/licences
- Migrations pour les 3 nouvelles tables
- Navigation mise à jour dans AuthenticatedLayout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mrKamoo
2026-06-19 14:46:16 +02:00
co-authored by Claude Sonnet 4.6
parent 030d76af53
commit 7312c7640b
24 changed files with 2887 additions and 4 deletions
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class BesoinInformatique extends Model
{
protected $guarded = [];
protected $casts = [
'materiels_support' => 'array',
'licences_bureautique' => 'array',
'licences_projets' => 'array',
'date_validation' => 'date',
];
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Devis extends Model
{
protected $guarded = [];
protected $casts = [
'items' => 'array',
'date_devis' => 'date',
'total_ht' => 'decimal:2',
'total_ttc' => 'decimal:2',
'tva_rate' => 'decimal:2',
];
protected static function booted()
{
static::creating(function ($devis) {
if (empty($devis->number)) {
$year = date('Y');
$prefix = sprintf('DEV-%s-', $year);
$last = static::where('number', 'like', $prefix . '%')
->max('number');
$next = $last ? (intval(substr($last, strlen($prefix))) + 1) : 1;
$devis->number = $prefix . sprintf('%04d', $next);
}
});
}
}
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class DevisSetting extends Model
{
protected $guarded = [];
}