diff --git a/app/Http/Controllers/Admin/AdminOrderController.php b/app/Http/Controllers/Admin/AdminOrderController.php index e918249..ce48927 100644 --- a/app/Http/Controllers/Admin/AdminOrderController.php +++ b/app/Http/Controllers/Admin/AdminOrderController.php @@ -91,8 +91,8 @@ class AdminOrderController extends Controller 'status' => 'pending', ]); - // If you want to auto-create an invoice at order creation, uncomment: - // $this->createInvoice($order); + //If you want to auto-create an invoice at order creation, uncomment: + $this->createInvoice($order); return redirect()->route('admin.orders.show', $order->id) ->with('success', 'Order created successfully.'); @@ -500,84 +500,170 @@ public function addTempItem(Request $request) session()->push('temp_order_items', $item); return redirect()->to(route('admin.orders.index') . '#createOrderForm') - ->with('success', 'Item added.'); + + ->with('success', 'Item added.'); } -public function finishOrder(Request $request) - { - $request->validate([ - 'mark_no' => 'required', - 'origin' => 'required', - 'destination' => 'required', - ]); + // ------------------------------------------------------------------------- + // STEP 3 : FINISH ORDER + // ------------------------------------------------------------------------- - $items = session('temp_order_items', []); + public function finishOrder(Request $request) +{ + $request->validate([ + 'mark_no' => 'required', + 'origin' => 'required', + 'destination' => 'required', + ]); - if (empty($items)) { - return redirect()->to(route('admin.orders.index') . '#createOrderForm') - ->with('error', 'Add at least one item before finishing.'); - } + $items = session('temp_order_items', []); - // 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.'); +} + + } diff --git a/app/Http/Controllers/user/UserProfileController.php b/app/Http/Controllers/user/UserProfileController.php index ca42ab2..d8b9673 100644 --- a/app/Http/Controllers/user/UserProfileController.php +++ b/app/Http/Controllers/user/UserProfileController.php @@ -84,11 +84,25 @@ class UserProfileController extends Controller $user->profile_image = $folder . $filename; $user->save(); - return response()->json([ - 'success' => true, - 'message' => 'Profile image updated successfully', - 'profile_image' => url($user->profile_image), - ]); + return response()->json([ + 'success' => true, + 'message' => 'Profile image updated successfully', + 'data' => [ + 'customer_id' => $user->customer_id, + 'customer_name' => $user->customer_name, + 'company_name' => $user->company_name, + 'designation' => $user->designation, + 'email' => $user->email, + 'mobile' => $user->mobile_no, + 'address' => $user->address, + 'pincode' => $user->pincode, + 'status' => $user->status, + 'customer_type' => $user->customer_type, + 'profile_image' => url($user->profile_image), + 'date' => $user->date, + ] +]); + } diff --git a/public/invoices/invoice-INV-2025-000024.pdf b/public/invoices/invoice-INV-2025-000024.pdf index d02fe9e..68bc8aa 100644 Binary files a/public/invoices/invoice-INV-2025-000024.pdf and b/public/invoices/invoice-INV-2025-000024.pdf differ diff --git a/public/invoices/invoice-INV-2025-000025.pdf b/public/invoices/invoice-INV-2025-000025.pdf index 29b973e..b7d7a56 100644 Binary files a/public/invoices/invoice-INV-2025-000025.pdf and b/public/invoices/invoice-INV-2025-000025.pdf differ diff --git a/public/profile_upload/profile_1764568863.jpg b/public/profile_upload/profile_1764568863.jpg deleted file mode 100644 index bdd8e39..0000000 Binary files a/public/profile_upload/profile_1764568863.jpg and /dev/null differ diff --git a/public/profile_upload/profile_1764743106.jpg b/public/profile_upload/profile_1764743106.jpg new file mode 100644 index 0000000..1a7aaaf Binary files /dev/null and b/public/profile_upload/profile_1764743106.jpg differ