From df89031d369b9c097bc511074e14a94145b6d58b87fce079e32abb7b7166487b Mon Sep 17 00:00:00 2001 From: Abhishek Mali Date: Mon, 17 Nov 2025 10:33:11 +0530 Subject: [PATCH] invoice update --- .../Admin/AdminInvoiceController.php | 122 +++++ .../Admin/AdminOrderController.php | 225 +++++++--- app/Models/Invoice.php | 77 ++++ app/Models/InvoiceItem.php | 40 ++ composer.json | 1 + composer.lock | 417 +++++++++++++++--- ...025_11_15_120418_create_invoices_table.php | 70 +++ ...1_15_120425_create_invoice_items_table.php | 52 +++ public/invoices/invoice-INV-2025-000002.pdf | Bin 0 -> 31306 bytes public/invoices/invoice-INV-2025-000003.pdf | Bin 0 -> 58448 bytes resources/views/admin/invoice.blade.php | 106 ++++- resources/views/admin/invoice_edit.blade.php | 89 ++++ resources/views/admin/layouts/app.blade.php | 6 +- resources/views/admin/pdf/invoice.blade.php | 169 +++++++ resources/views/admin/popup_invoice.blade.php | 73 +++ routes/web.php | 22 +- 16 files changed, 1330 insertions(+), 139 deletions(-) create mode 100644 app/Http/Controllers/Admin/AdminInvoiceController.php create mode 100644 app/Models/Invoice.php create mode 100644 app/Models/InvoiceItem.php create mode 100644 database/migrations/2025_11_15_120418_create_invoices_table.php create mode 100644 database/migrations/2025_11_15_120425_create_invoice_items_table.php create mode 100644 public/invoices/invoice-INV-2025-000002.pdf create mode 100644 public/invoices/invoice-INV-2025-000003.pdf create mode 100644 resources/views/admin/invoice_edit.blade.php create mode 100644 resources/views/admin/pdf/invoice.blade.php create mode 100644 resources/views/admin/popup_invoice.blade.php diff --git a/app/Http/Controllers/Admin/AdminInvoiceController.php b/app/Http/Controllers/Admin/AdminInvoiceController.php new file mode 100644 index 0000000..94ac645 --- /dev/null +++ b/app/Http/Controllers/Admin/AdminInvoiceController.php @@ -0,0 +1,122 @@ +get(); + return view('admin.invoice', compact('invoices')); + } + + // ------------------------------------------------------------- + // POPUP VIEW (AJAX) + // ------------------------------------------------------------- + public function popup($id) + { + $invoice = Invoice::with('items')->findOrFail($id); + return view('admin.popup_invoice', compact('invoice')); + } + + // ------------------------------------------------------------- + // EDIT INVOICE PAGE + // ------------------------------------------------------------- + public function edit($id) + { + $invoice = Invoice::findOrFail($id); + return view('admin.invoice_edit', compact('invoice')); + } + + // ------------------------------------------------------------- + // UPDATE INVOICE + // ------------------------------------------------------------- + public function update(Request $request, $id) + { + $invoice = Invoice::findOrFail($id); + + // Validate editable fields + $data = $request->validate([ + 'invoice_date' => 'required|date', + 'due_date' => 'required|date|after_or_equal:invoice_date', + 'payment_method' => 'nullable|string', + 'reference_no' => 'nullable|string|max:255', + 'final_amount' => 'required|numeric|min:0', + 'gst_percent' => 'required|numeric|min:0|max:28', + 'status' => 'required|in:pending,paid,overdue', + 'notes' => 'nullable|string', + ]); + + // Auto-calc + $gst_amount = ($data['final_amount'] * $data['gst_percent']) / 100; + $final_amount_with_gst = $data['final_amount'] + $gst_amount; + + $data['gst_amount'] = $gst_amount; + $data['final_amount_with_gst'] = $final_amount_with_gst; + + // Update DB + $invoice->update($data); + + // Generate PDF + $this->generateInvoicePDF($invoice); + + return redirect() + ->route('admin.invoices.index') + ->with('success', 'Invoice updated & PDF generated successfully.'); + } + + // ------------------------------------------------------------- + // PDF GENERATION USING mPDF + // ------------------------------------------------------------- + public function generateInvoicePDF($invoice) + { + // PDF Name + $fileName = 'invoice-' . $invoice->invoice_number . '.pdf'; + + // Save directly in /public/invoices + $folder = public_path('invoices/'); + + // Create folder if not exists + if (!file_exists($folder)) { + mkdir($folder, 0777, true); + } + + // Full path + $filePath = $folder . $fileName; + + // Delete old file + if (file_exists($filePath)) { + unlink($filePath); + } + + // Initialize mPDF + $mpdf = new Mpdf([ + 'mode' => 'utf-8', + 'format' => 'A4', + 'default_font' => 'sans-serif' + ]); + + // Load HTML view + $html = view('admin.pdf.invoice', compact('invoice'))->render(); + + // Generate + $mpdf->WriteHTML($html); + + // Save to public/invoices + $mpdf->Output($filePath, 'F'); + + // Save path in DB + $invoice->update([ + 'pdf_path' => 'invoices/' . $fileName + ]); + } +} diff --git a/app/Http/Controllers/Admin/AdminOrderController.php b/app/Http/Controllers/Admin/AdminOrderController.php index 05a2446..6dadb27 100644 --- a/app/Http/Controllers/Admin/AdminOrderController.php +++ b/app/Http/Controllers/Admin/AdminOrderController.php @@ -99,82 +99,163 @@ class AdminOrderController extends Controller // ------------------------------------------------------------------------- public function finishOrder(Request $request) - { - $request->validate([ - 'mark_no' => 'required', - 'origin' => 'required', - 'destination' => 'required', - ]); +{ + $request->validate([ + 'mark_no' => 'required', + 'origin' => 'required', + 'destination' => 'required', + ]); - $items = session('temp_order_items', []); + $items = session('temp_order_items', []); - if (empty($items)) { - return redirect()->to(route('admin.orders.index') . '#createOrderForm') - ->with('error', 'Add at least one item before finishing.'); - } - - // Generate Order ID - $year = date('y'); - $prefix = "KNT-$year-"; - - $lastOrder = Order::latest('id')->first(); - $nextNumber = $lastOrder ? intval(substr($lastOrder->order_id, -8)) + 1 : 1; - - $orderId = $prefix . str_pad($nextNumber, 8, '0', STR_PAD_LEFT); - - // TOTAL SUMS - $total_ctn = array_sum(array_column($items, 'ctn')); - $total_qty = array_sum(array_column($items, 'qty')); - $total_ttl_qty = array_sum(array_column($items, 'ttl_qty')); - $total_amount = array_sum(array_column($items, 'ttl_amount')); - $total_cbm = array_sum(array_column($items, 'cbm')); - $total_ttl_cbm = array_sum(array_column($items, 'ttl_cbm')); - $total_kg = array_sum(array_column($items, 'kg')); - $total_ttl_kg = array_sum(array_column($items, 'ttl_kg')); - - // CREATE ORDER - $order = Order::create([ - 'order_id' => $orderId, - 'mark_no' => $request->mark_no, - 'origin' => $request->origin, - 'destination' => $request->destination, - 'ctn' => $total_ctn, - 'qty' => $total_qty, - 'ttl_qty' => $total_ttl_qty, - 'ttl_amount' => $total_amount, - 'cbm' => $total_cbm, - 'ttl_cbm' => $total_ttl_cbm, - 'kg' => $total_kg, - 'ttl_kg' => $total_ttl_kg, - 'status' => 'pending', - ]); - - // SAVE ALL SUB-ITEMS - foreach ($items as $item) { - OrderItem::create([ - 'order_id' => $order->id, - 'description' => $item['description'], - 'ctn' => $item['ctn'], - 'qty' => $item['qty'], - 'ttl_qty' => $item['ttl_qty'], - 'unit' => $item['unit'], - 'price' => $item['price'], - 'ttl_amount' => $item['ttl_amount'], - 'cbm' => $item['cbm'], - 'ttl_cbm' => $item['ttl_cbm'], - 'kg' => $item['kg'], - 'ttl_kg' => $item['ttl_kg'], - 'shop_no' => $item['shop_no'], - ]); - } - - // CLEAR TEMP DATA - session()->forget(['temp_order_items', 'mark_no', 'origin', 'destination']); - - return redirect()->route('admin.orders.index') - ->with('success', 'Order saved successfully.'); + if (empty($items)) { + return redirect()->to(route('admin.orders.index') . '#createOrderForm') + ->with('error', 'Add at least one item before finishing.'); } + // ======================= + // GENERATE ORDER ID + // ======================= + $year = date('y'); + $prefix = "KNT-$year-"; + + $lastOrder = Order::latest('id')->first(); + $nextNumber = $lastOrder ? intval(substr($lastOrder->order_id, -8)) + 1 : 1; + + $orderId = $prefix . str_pad($nextNumber, 8, '0', STR_PAD_LEFT); + + // ======================= + // TOTAL SUMS + // ======================= + $total_ctn = array_sum(array_column($items, 'ctn')); + $total_qty = array_sum(array_column($items, 'qty')); + $total_ttl_qty = array_sum(array_column($items, 'ttl_qty')); + $total_amount = array_sum(array_column($items, 'ttl_amount')); + $total_cbm = array_sum(array_column($items, 'cbm')); + $total_ttl_cbm = array_sum(array_column($items, 'ttl_cbm')); + $total_kg = array_sum(array_column($items, 'kg')); + $total_ttl_kg = array_sum(array_column($items, 'ttl_kg')); + + // ======================= + // CREATE ORDER + // ======================= + $order = Order::create([ + 'order_id' => $orderId, + 'mark_no' => $request->mark_no, + 'origin' => $request->origin, + 'destination' => $request->destination, + 'ctn' => $total_ctn, + 'qty' => $total_qty, + 'ttl_qty' => $total_ttl_qty, + 'ttl_amount' => $total_amount, + 'cbm' => $total_cbm, + 'ttl_cbm' => $total_ttl_cbm, + 'kg' => $total_kg, + 'ttl_kg' => $total_ttl_kg, + 'status' => 'pending', + ]); + + // SAVE ORDER ITEMS + foreach ($items as $item) { + OrderItem::create([ + 'order_id' => $order->id, + 'description' => $item['description'], + 'ctn' => $item['ctn'], + 'qty' => $item['qty'], + 'ttl_qty' => $item['ttl_qty'], + 'unit' => $item['unit'], + 'price' => $item['price'], + 'ttl_amount' => $item['ttl_amount'], + 'cbm' => $item['cbm'], + 'ttl_cbm' => $item['ttl_cbm'], + 'kg' => $item['kg'], + 'ttl_kg' => $item['ttl_kg'], + 'shop_no' => $item['shop_no'], + ]); + } + + // ======================= + // INVOICE CREATION START + // ======================= + + // 1. Auto-generate invoice number + $lastInvoice = \App\Models\Invoice::latest()->first(); + $nextInvoice = $lastInvoice ? $lastInvoice->id + 1 : 1; + $invoiceNumber = 'INV-' . date('Y') . '-' . str_pad($nextInvoice, 6, '0', STR_PAD_LEFT); + + // 2. Fetch customer (using mark list → customer_id) + $markList = MarkList::where('mark_no', $order->mark_no)->first(); + $customer = null; + + if ($markList && $markList->customer_id) { + $customer = \App\Models\User::where('customer_id', $markList->customer_id)->first(); + } + + // 3. Create Invoice Record + $invoice = \App\Models\Invoice::create([ + 'order_id' => $order->id, + 'customer_id' => $customer->id ?? null, + 'mark_no' => $order->mark_no, + + 'invoice_number' => $invoiceNumber, + 'invoice_date' => now(), + 'due_date' => now()->addDays(10), + + 'payment_method' => null, + 'reference_no' => null, + 'status' => 'pending', + + 'final_amount' => $total_amount, + 'gst_percent' => 0, + 'gst_amount' => 0, + 'final_amount_with_gst' => $total_amount, + + // snapshot customer fields + 'customer_name' => $customer->customer_name ?? null, + 'company_name' => $customer->company_name ?? null, + 'customer_email' => $customer->email ?? null, + 'customer_mobile' => $customer->mobile_no ?? null, + 'customer_address' => $customer->address ?? null, + 'pincode' => $customer->pincode ?? null, + + 'notes' => null, + ]); + + // 4. Clone order items into invoice_items + foreach ($order->items as $item) { + \App\Models\InvoiceItem::create([ + 'invoice_id' => $invoice->id, + 'description' => $item->description, + 'ctn' => $item->ctn, + 'qty' => $item->qty, + 'ttl_qty' => $item->ttl_qty, + 'unit' => $item->unit, + 'price' => $item->price, + 'ttl_amount' => $item->ttl_amount, + 'cbm' => $item->cbm, + 'ttl_cbm' => $item->ttl_cbm, + 'kg' => $item->kg, + 'ttl_kg' => $item->ttl_kg, + 'shop_no' => $item->shop_no, + ]); + } + + // 5. TODO: PDF generation (I will add this later) + $invoice->pdf_path = null; // placeholder for now + $invoice->save(); + + // ======================= + // END INVOICE CREATION + // ======================= + + // CLEAR TEMP DATA + session()->forget(['temp_order_items', 'mark_no', 'origin', 'destination']); + + return redirect()->route('admin.orders.index') + ->with('success', 'Order + Invoice created successfully.'); +} + + // ------------------------------------------------------------------------- // ORDER SHOW PAGE // ------------------------------------------------------------------------- diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php new file mode 100644 index 0000000..e8c5739 --- /dev/null +++ b/app/Models/Invoice.php @@ -0,0 +1,77 @@ +hasMany(InvoiceItem::class)->orderBy('id', 'ASC'); + } + + public function order() + { + return $this->belongsTo(Order::class); + } + + public function customer() + { + return $this->belongsTo(User::class, 'customer_id'); + } + + /**************************** + * Helper Functions + ****************************/ + + // Auto calculate GST fields (you can call this in controller before saving) + public function calculateTotals() + { + $gst = ($this->final_amount * $this->gst_percent) / 100; + $this->gst_amount = $gst; + $this->final_amount_with_gst = $this->final_amount + $gst; + } + + // Check overdue status condition + public function isOverdue() + { + return $this->status === 'pending' && now()->gt($this->due_date); + } +} diff --git a/app/Models/InvoiceItem.php b/app/Models/InvoiceItem.php new file mode 100644 index 0000000..9e3a6ff --- /dev/null +++ b/app/Models/InvoiceItem.php @@ -0,0 +1,40 @@ +belongsTo(Invoice::class); + } +} diff --git a/composer.json b/composer.json index a7e83bc..ebdc485 100644 --- a/composer.json +++ b/composer.json @@ -9,6 +9,7 @@ "php": "^8.2", "laravel/framework": "^12.0", "laravel/tinker": "^2.10.1", + "mpdf/mpdf": "^8.2", "php-open-source-saver/jwt-auth": "2.8" }, "require-dev": { diff --git a/composer.lock b/composer.lock index b7a52c5..9785bd2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dc4cd5d2076c08406e2d0bd4db2cd741", + "content-hash": "fa680e1e8b3550d710849bbd820e3626", "packages": [ { "name": "brick/math", @@ -2184,6 +2184,239 @@ ], "time": "2025-03-24T10:02:05+00:00" }, + { + "name": "mpdf/mpdf", + "version": "v8.2.6", + "source": { + "type": "git", + "url": "https://github.com/mpdf/mpdf.git", + "reference": "dd30e3b01061cf8dfe65e7041ab4cc46d8ebdd44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/dd30e3b01061cf8dfe65e7041ab4cc46d8ebdd44", + "reference": "dd30e3b01061cf8dfe65e7041ab4cc46d8ebdd44", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "ext-mbstring": "*", + "mpdf/psr-http-message-shim": "^1.0 || ^2.0", + "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", + "myclabs/deep-copy": "^1.7", + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "setasign/fpdi": "^2.1" + }, + "require-dev": { + "mockery/mockery": "^1.3.0", + "mpdf/qrcode": "^1.1.0", + "squizlabs/php_codesniffer": "^3.5.0", + "tracy/tracy": "~2.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-bcmath": "Needed for generation of some types of barcodes", + "ext-xml": "Needed mainly for SVG manipulation", + "ext-zlib": "Needed for compression of embedded resources, such as fonts" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Mpdf\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-only" + ], + "authors": [ + { + "name": "Matěj Humpál", + "role": "Developer, maintainer" + }, + { + "name": "Ian Back", + "role": "Developer (retired)" + } + ], + "description": "PHP library generating PDF files from UTF-8 encoded HTML", + "homepage": "https://mpdf.github.io", + "keywords": [ + "pdf", + "php", + "utf-8" + ], + "support": { + "docs": "https://mpdf.github.io", + "issues": "https://github.com/mpdf/mpdf/issues", + "source": "https://github.com/mpdf/mpdf" + }, + "funding": [ + { + "url": "https://www.paypal.me/mpdf", + "type": "custom" + } + ], + "time": "2025-08-18T08:51:51+00:00" + }, + { + "name": "mpdf/psr-http-message-shim", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/mpdf/psr-http-message-shim.git", + "reference": "f25a0153d645e234f9db42e5433b16d9b113920f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/psr-http-message-shim/zipball/f25a0153d645e234f9db42e5433b16d9b113920f", + "reference": "f25a0153d645e234f9db42e5433b16d9b113920f", + "shasum": "" + }, + "require": { + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\PsrHttpMessageShim\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Dorison", + "email": "mark@chromatichq.com" + }, + { + "name": "Kristofer Widholm", + "email": "kristofer@chromatichq.com" + }, + { + "name": "Nigel Cunningham", + "email": "nigel.cunningham@technocrat.com.au" + } + ], + "description": "Shim to allow support of different psr/message versions.", + "support": { + "issues": "https://github.com/mpdf/psr-http-message-shim/issues", + "source": "https://github.com/mpdf/psr-http-message-shim/tree/v2.0.1" + }, + "time": "2023-10-02T14:34:03+00:00" + }, + { + "name": "mpdf/psr-log-aware-trait", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/mpdf/psr-log-aware-trait.git", + "reference": "a633da6065e946cc491e1c962850344bb0bf3e78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/psr-log-aware-trait/zipball/a633da6065e946cc491e1c962850344bb0bf3e78", + "reference": "a633da6065e946cc491e1c962850344bb0bf3e78", + "shasum": "" + }, + "require": { + "psr/log": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\PsrLogAwareTrait\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Dorison", + "email": "mark@chromatichq.com" + }, + { + "name": "Kristofer Widholm", + "email": "kristofer@chromatichq.com" + } + ], + "description": "Trait to allow support of different psr/log versions.", + "support": { + "issues": "https://github.com/mpdf/psr-log-aware-trait/issues", + "source": "https://github.com/mpdf/psr-log-aware-trait/tree/v3.0.0" + }, + "time": "2023-05-03T06:19:36+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, { "name": "namshi/jose", "version": "7.2.3", @@ -2655,6 +2888,56 @@ ], "time": "2025-10-18T11:10:27+00:00" }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, { "name": "php-open-source-saver/jwt-auth", "version": "2.8.0", @@ -3515,6 +3798,78 @@ }, "time": "2025-09-04T20:59:21+00:00" }, + { + "name": "setasign/fpdi", + "version": "v2.6.4", + "source": { + "type": "git", + "url": "https://github.com/Setasign/FPDI.git", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada", + "shasum": "" + }, + "require": { + "ext-zlib": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "setasign/tfpdf": "<1.31" + }, + "require-dev": { + "phpunit/phpunit": "^7", + "setasign/fpdf": "~1.8.6", + "setasign/tfpdf": "~1.33", + "squizlabs/php_codesniffer": "^3.5", + "tecnickcom/tcpdf": "^6.8" + }, + "suggest": { + "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." + }, + "type": "library", + "autoload": { + "psr-4": { + "setasign\\Fpdi\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Slabon", + "email": "jan.slabon@setasign.com", + "homepage": "https://www.setasign.com" + }, + { + "name": "Maximilian Kresse", + "email": "maximilian.kresse@setasign.com", + "homepage": "https://www.setasign.com" + } + ], + "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.", + "homepage": "https://www.setasign.com/fpdi", + "keywords": [ + "fpdf", + "fpdi", + "pdf" + ], + "support": { + "issues": "https://github.com/Setasign/FPDI/issues", + "source": "https://github.com/Setasign/FPDI/tree/v2.6.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", + "type": "tidelift" + } + ], + "time": "2025-08-05T09:57:14+00:00" + }, { "name": "symfony/clock", "version": "v7.3.0", @@ -6751,66 +7106,6 @@ }, "time": "2024-05-16T03:13:13+00:00" }, - { - "name": "myclabs/deep-copy", - "version": "1.13.4", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-08-01T08:46:24+00:00" - }, { "name": "nunomaduro/collision", "version": "v8.8.2", diff --git a/database/migrations/2025_11_15_120418_create_invoices_table.php b/database/migrations/2025_11_15_120418_create_invoices_table.php new file mode 100644 index 0000000..163a9f1 --- /dev/null +++ b/database/migrations/2025_11_15_120418_create_invoices_table.php @@ -0,0 +1,70 @@ +id(); + + // Links + $table->unsignedBigInteger('order_id')->index(); + $table->unsignedBigInteger('customer_id')->nullable()->index(); // snapshot link if available + $table->string('mark_no')->nullable()->index(); + + // Invoice identity + $table->string('invoice_number')->unique(); + $table->date('invoice_date')->nullable(); + $table->date('due_date')->nullable(); + + // Payment / status + $table->string('payment_method')->nullable(); + $table->string('reference_no')->nullable(); + $table->enum('status', ['pending','paid','overdue'])->default('pending'); + + // Amounts + $table->decimal('final_amount', 14, 2)->default(0.00); // editable by user + $table->decimal('gst_percent', 5, 2)->default(0.00); // editable by user + $table->decimal('gst_amount', 14, 2)->default(0.00); // auto-calculated + $table->decimal('final_amount_with_gst', 14, 2)->default(0.00); // auto-calculated + + // Customer snapshot (immutable fields) + $table->string('customer_name')->nullable(); + $table->string('company_name')->nullable(); + $table->string('customer_email')->nullable(); + $table->string('customer_mobile')->nullable(); + $table->text('customer_address')->nullable(); + $table->string('pincode')->nullable(); + + // PDF / notes + $table->string('pdf_path')->nullable(); + $table->text('notes')->nullable(); + + $table->timestamps(); + + // Foreign keys (optional — adjust table names/namespaces if yours are different) + $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade'); + // customer_id may reference users table, keep nullable to avoid migration order issues + $table->foreign('customer_id')->references('id')->on('users')->onDelete('set null'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('invoices', function (Blueprint $table) { + $table->dropForeign(['order_id']); + $table->dropForeign(['customer_id']); + }); + Schema::dropIfExists('invoices'); + } +} diff --git a/database/migrations/2025_11_15_120425_create_invoice_items_table.php b/database/migrations/2025_11_15_120425_create_invoice_items_table.php new file mode 100644 index 0000000..cc4da76 --- /dev/null +++ b/database/migrations/2025_11_15_120425_create_invoice_items_table.php @@ -0,0 +1,52 @@ +id(); + $table->unsignedBigInteger('invoice_id')->index(); + + // Snapshot of order item fields (not editable) + $table->text('description')->nullable(); + $table->integer('ctn')->default(0); + $table->integer('qty')->default(0); + $table->integer('ttl_qty')->default(0); + $table->string('unit')->nullable(); + $table->decimal('price', 14, 2)->default(0.00); + $table->decimal('ttl_amount', 14, 2)->default(0.00); + + $table->decimal('cbm', 12, 3)->default(0.000); + $table->decimal('ttl_cbm', 12, 3)->default(0.000); + + $table->decimal('kg', 12, 3)->default(0.000); + $table->decimal('ttl_kg', 12, 3)->default(0.000); + + $table->string('shop_no')->nullable(); + + $table->timestamps(); + + // FK + $table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('invoice_items', function (Blueprint $table) { + $table->dropForeign(['invoice_id']); + }); + Schema::dropIfExists('invoice_items'); + } +} diff --git a/public/invoices/invoice-INV-2025-000002.pdf b/public/invoices/invoice-INV-2025-000002.pdf new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..841155b15f1740c6ff50b21e5c984deff5a5dbb9f65ee6fbb720f7a259a1a56a GIT binary patch literal 31306 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

gX!!d@dB)AuDCtOwk_ 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 -

+ +{{-- POPUP MODAL --}} + + + + @endsection diff --git a/resources/views/admin/invoice_edit.blade.php b/resources/views/admin/invoice_edit.blade.php new file mode 100644 index 0000000..837273d --- /dev/null +++ b/resources/views/admin/invoice_edit.blade.php @@ -0,0 +1,89 @@ +@extends('admin.layouts.app') + +@section('page-title', 'Edit Invoice') + +@section('content') + +
+
+

Edit Invoice

+
+ +
+ +
+ @csrf + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+
+ +@endsection diff --git a/resources/views/admin/layouts/app.blade.php b/resources/views/admin/layouts/app.blade.php index c557b5d..77a67ae 100644 --- a/resources/views/admin/layouts/app.blade.php +++ b/resources/views/admin/layouts/app.blade.php @@ -176,7 +176,11 @@
Dashboard Shipments - Invoice + + Invoice + + Customers Reports Chat Support diff --git a/resources/views/admin/pdf/invoice.blade.php b/resources/views/admin/pdf/invoice.blade.php new file mode 100644 index 0000000..cbb182a --- /dev/null +++ b/resources/views/admin/pdf/invoice.blade.php @@ -0,0 +1,169 @@ + + + + + {{ $invoice->invoice_number }} + + + + + + + +
+ + + + +
KENT LOGISTICS
+
Official Invoice
+
+ + +
+ Invoice No: {{ $invoice->invoice_number }}
+ Invoice Date: {{ $invoice->invoice_date }}
+ Due Date: {{ $invoice->due_date }}
+ Status: {{ ucfirst($invoice->status) }} +
+ + +
Customer Details
+
+ {{ $invoice->customer_name }}
+ {{ $invoice->company_name }}
+ {{ $invoice->customer_mobile }}
+ {{ $invoice->customer_email }}
+ {{ $invoice->customer_address }} +
+ + +
Invoice Items
+ + + + + + + + + + + + + + + + + + + + + + @foreach($invoice->items as $i => $item) + + + + + + + + + + + + + + + + @endforeach + +
#DescriptionCTNQTYTTL/QTYUnitPriceTTL AmountCBMTTL CBMKGTTL KGShop No
{{ $i + 1 }}{{ $item->description }}{{ $item->ctn }}{{ $item->qty }}{{ $item->ttl_qty }}{{ $item->unit }}{{ number_format($item->price, 2) }}{{ number_format($item->ttl_amount, 2) }}{{ $item->cbm }}{{ $item->ttl_cbm }}{{ $item->kg }}{{ $item->ttl_kg }}{{ $item->shop_no }}
+ + +
Totals
+ +
+ Amount: ₹{{ number_format($invoice->final_amount, 2) }}
+ GST ({{ $invoice->gst_percent }}%): ₹{{ number_format($invoice->gst_amount, 2) }}
+ Total With GST: ₹{{ number_format($invoice->final_amount_with_gst, 2) }} +
+ + + diff --git a/resources/views/admin/popup_invoice.blade.php b/resources/views/admin/popup_invoice.blade.php new file mode 100644 index 0000000..03c8da1 --- /dev/null +++ b/resources/views/admin/popup_invoice.blade.php @@ -0,0 +1,73 @@ +
+

+ Invoice: {{ $invoice->invoice_number }} +

+ +

Invoice Date: {{ $invoice->invoice_date }}

+

Due Date: {{ $invoice->due_date }}

+ +
+ +
Customer Details
+

+ {{ $invoice->customer_name }}
+ {{ $invoice->company_name }}
+ {{ $invoice->customer_mobile }}
+ {{ $invoice->customer_email }}
+ {{ $invoice->customer_address }} +

+ +
+ +
Invoice Items
+
+ + + + + + + + + + + + + + + + + + + + + @foreach($invoice->items as $i => $item) + + + + + + + + + + + + + + + + @endforeach + +
#DescriptionCTNQTYTTL/QTYUnitPriceTTL AmountCBMTTL CBMKGTTL KGShop No
{{ $i+1 }}{{ $item->description }}{{ $item->ctn }}{{ $item->qty }}{{ $item->ttl_qty }}{{ $item->unit }}{{ number_format($item->price,2) }}{{ number_format($item->ttl_amount,2) }}{{ $item->cbm }}{{ $item->ttl_cbm }}{{ $item->kg }}{{ $item->ttl_kg }}{{ $item->shop_no }}
+
+ +
+ +
Final Summary
+

Amount: ₹{{ number_format($invoice->final_amount,2) }}

+

GST ({{ $invoice->gst_percent }}%): ₹{{ number_format($invoice->gst_amount,2) }}

+

Total With GST: ₹{{ number_format($invoice->final_amount_with_gst,2) }}

+ +

Status: {{ ucfirst($invoice->status) }}

+
diff --git a/routes/web.php b/routes/web.php index d134454..2c24096 100644 --- a/routes/web.php +++ b/routes/web.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Admin\UserRequestController; use App\Http\Controllers\Admin\AdminMarkListController; use App\Http\Controllers\Admin\AdminOrderController; use App\Http\Controllers\Admin\ShipmentController; +use App\Http\Controllers\Admin\AdminInvoiceController; // ------------------------- // Default Front Page @@ -31,7 +32,7 @@ Route::prefix('admin')->middleware('auth:admin')->group(function () { // Route::get('/dashboard', fn() => view('admin.dashboard'))->name('admin.dashboard'); Route::get('/dashboard', [AdminOrderController::class, 'index'])->name('admin.dashboard'); //Route::get('/shipments', fn() => view('admin.shipments'))->name('admin.shipments'); - Route::get('/invoice', fn() => view('admin.invoice'))->name('admin.invoice'); + //Route::get('/invoice', fn() => view('admin.invoice'))->name('admin.invoice'); Route::get('/customers', fn() => view('admin.customers'))->name('admin.customers'); Route::get('/reports', fn() => view('admin.reports'))->name('admin.reports'); Route::get('/chat-support', fn() => view('admin.chat_support'))->name('admin.chat_support'); @@ -95,4 +96,23 @@ Route::prefix('admin')->middleware('auth:admin')->group(function () { Route::get('/shipments/{id}', [ShipmentController::class, 'show']) ->name('admin.shipments.show'); + + // Invoice list page + Route::get('/invoices', [AdminInvoiceController::class, 'index']) + ->name('admin.invoices.index'); + + // Popup data + Route::get('/invoices/{id}/popup', [AdminInvoiceController::class, 'popup']) + ->name('admin.invoices.popup'); + + // Edit invoice + Route::get('/invoices/{id}/edit', [AdminInvoiceController::class, 'edit']) + ->name('admin.invoices.edit'); + + // Update invoice + Route::post('/invoices/{id}/update', [AdminInvoiceController::class, 'update']) + ->name('admin.invoices.update'); + + + });