From a3123a2bf2320ed9125cf22abc0205c18e32fb2d Mon Sep 17 00:00:00 2001 From: Corentin Huet Date: Mon, 9 Feb 2026 09:39:24 +0100 Subject: [PATCH] feat: :sparkles: add awaiting signature/invoicing filters and auto-set archived status on accounting sent date --- app/Enums/Invoices/InvoiceStatusEnum.php | 12 ++++++++---- app/Http/Controllers/Bo/InvoiceController.php | 19 +++++++++++++++---- app/Models/Invoice.php | 4 ++++ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/Enums/Invoices/InvoiceStatusEnum.php b/app/Enums/Invoices/InvoiceStatusEnum.php index f9e0163..117fb38 100644 --- a/app/Enums/Invoices/InvoiceStatusEnum.php +++ b/app/Enums/Invoices/InvoiceStatusEnum.php @@ -8,10 +8,12 @@ enum InvoiceStatusEnum: int { use BaseEnum; - case opened = 1; - case refused = 2; - case canceled = 3; - case archived = 4; + case opened = 1; + case refused = 2; + case canceled = 3; + case archived = 4; + case awaiting_signature = 5; + case awaiting_invoicing = 6; /** * Optionnal labels definition. @@ -21,5 +23,7 @@ enum InvoiceStatusEnum: int self::refused->name => "Refusé (par le client ou aucune réponse de sa part)", self::canceled->name => "Annulé (supprimé)", self::archived->name => "Archivé (validé et envoyé à la comptabilité)", + self::awaiting_signature->name => "En attente de signature", + self::awaiting_invoicing->name => "En attente de facturation", ]; } diff --git a/app/Http/Controllers/Bo/InvoiceController.php b/app/Http/Controllers/Bo/InvoiceController.php index fee33fa..a8d8f81 100644 --- a/app/Http/Controllers/Bo/InvoiceController.php +++ b/app/Http/Controllers/Bo/InvoiceController.php @@ -31,10 +31,21 @@ class InvoiceController extends Controller ? Invoice::query()->orderByDesc('created_at') : Invoice::query(); - $status = intval($request->status); - $invoiceModels = $invoiceModels->when($status, function ($query) use ($status) { - $query->where('status', $status); - }); + $status = intval($request->status); + + switch ($status) { + case InvoiceStatusEnum::awaiting_signature->value: + $invoiceModels->whereNotNull('sent_client_date')->whereNull('signed_date'); + break; + case InvoiceStatusEnum::awaiting_invoicing->value: + $invoiceModels->whereNotNull('sent_client_date')->whereNotNull('signed_date')->whereNull('sent_accounting_date'); + break; + default: + if ($status !== 0) { + $invoiceModels->where('status', $status); + } + break; + } /** @var string $search Search field */ $search = $request->search; diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 80e4285..6cf2c8f 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -111,6 +111,10 @@ class Invoice extends Model ->reduce(function ($previous, array $task) { return \floatval($task['amount']) + \floatval($previous); }); + + if($model->sent_accounting_date && $model->status !== InvoiceStatusEnum::archived->value) { + $model->status = InvoiceStatusEnum::archived; + } }); static::deleting(function () { throw new \Error('Action impossible');