From e18c55e38dcec5a9ac54342634f1e0bf1cf87961 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Fri, 19 Dec 2025 09:41:41 +0530 Subject: [PATCH] invoice no : GWM --- app/Controllers/InvoiceController.php | 32 ++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/app/Controllers/InvoiceController.php b/app/Controllers/InvoiceController.php index f77b30b..179288b 100644 --- a/app/Controllers/InvoiceController.php +++ b/app/Controllers/InvoiceController.php @@ -99,7 +99,6 @@ class InvoiceController extends ResourceController // Basic invoice data $invoiceData = [ - 'invoice_no' => $input['invoice_no'] ?? '', 'invoice_amount' => $input['invoice_amount'] ?? 0, 'broker_id' => $input['broker_id'] ?? 0, 'pos_id' => $input['pos_id'] ?? 0, @@ -115,6 +114,9 @@ class InvoiceController extends ResourceController if (!$invoiceId) { + // Generate invoice number only for CREATE + $invoiceData['invoice_no'] = $this->generateInvoiceNo(); + $invoiceData['created_at'] = date('Y-m-d H:i:s'); $invoiceData['created_by'] = $input['created_by'] ?? 0; @@ -123,6 +125,10 @@ class InvoiceController extends ResourceController if (!$invoiceId) { throw new DataException("Failed to create invoice"); } } else { + + // Invoice number should NOT change on update + unset($invoiceData['invoice_no']); + $this->InvoiceModel->update($invoiceId, $invoiceData); } @@ -175,6 +181,30 @@ class InvoiceController extends ResourceController } } + private function generateInvoiceNo() + { + $year = date('Y'); + $prefix = "INV/$year/"; + + // Get last invoice of current year + $lastInvoice = $this->InvoiceModel + ->select('invoice_no') + ->like('invoice_no', $prefix, 'after') + ->orderBy('id', 'DESC') + ->first(); + + if ($lastInvoice && isset($lastInvoice['invoice_no'])) { + // Extract numeric part + $lastNumber = intval(substr($lastInvoice['invoice_no'], -5)); + $nextNumber = $lastNumber + 1; + } else { + $nextNumber = 1; + } + + return $prefix . str_pad($nextNumber, 5, '0', STR_PAD_LEFT); + } + + public function deleteInvoice() { try {