diff --git a/app/Http/Controllers/Admin/AdminOrderController.php b/app/Http/Controllers/Admin/AdminOrderController.php index f116b96..8d887ff 100644 --- a/app/Http/Controllers/Admin/AdminOrderController.php +++ b/app/Http/Controllers/Admin/AdminOrderController.php @@ -68,33 +68,42 @@ class AdminOrderController extends Controller * ORDER ITEM MANAGEMENT (existing orders) * ---------------------------*/ public function addItem(Request $request, $orderId) - { - $order = Order::findOrFail($orderId); +{ + $order = Order::findOrFail($orderId); - $data = $request->validate([ - 'description' => 'required|string', - 'ctn' => 'nullable|numeric', - 'qty' => 'nullable|numeric', - 'ttl_qty' => 'nullable|numeric', - 'unit' => 'nullable|string', - 'price' => 'nullable|numeric', - 'ttl_amount' => 'nullable|numeric', - 'cbm' => 'nullable|numeric', - 'ttl_cbm' => 'nullable|numeric', - 'kg' => 'nullable|numeric', - 'ttl_kg' => 'nullable|numeric', - 'shop_no' => 'nullable|string', - ]); + $data = $request->validate([ + 'description' => 'required|string', + 'ctn' => 'nullable|numeric', + 'qty' => 'nullable|numeric', + 'unit' => 'nullable|string', + 'price' => 'nullable|numeric', + 'cbm' => 'nullable|numeric', + 'kg' => 'nullable|numeric', + 'shop_no' => 'nullable|string', + ]); - $data['order_id'] = $order->id; + // ✅ BACKEND CALCULATION + $ctn = (float) ($data['ctn'] ?? 0); + $qty = (float) ($data['qty'] ?? 0); + $price = (float) ($data['price'] ?? 0); + $cbm = (float) ($data['cbm'] ?? 0); + $kg = (float) ($data['kg'] ?? 0); - OrderItem::create($data); + $data['ttl_qty'] = $ctn * $qty; + $data['ttl_amount'] = $data['ttl_qty'] * $price; + $data['ttl_cbm'] = $cbm * $ctn; + $data['ttl_kg'] = $ctn * $kg; - $this->recalcTotals($order); - $this->updateInvoiceFromOrder($order); + $data['order_id'] = $order->id; + + OrderItem::create($data); + + $this->recalcTotals($order); + $this->updateInvoiceFromOrder($order); + + return redirect()->back()->with('success', 'Item added and totals updated.'); +} - return redirect()->back()->with('success', 'Item added and totals updated.'); - } public function deleteItem($id) { @@ -500,14 +509,14 @@ class AdminOrderController extends Controller 'items.*.description' => 'required|string', 'items.*.ctn' => 'nullable|numeric', 'items.*.qty' => 'nullable|numeric', - 'items.*.ttl_qty' => 'nullable|numeric', + 'items.*.unit' => 'nullable|string', 'items.*.price' => 'nullable|numeric', - 'items.*.ttl_amount' => 'nullable|numeric', + 'items.*.cbm' => 'nullable|numeric', - 'items.*.ttl_cbm' => 'nullable|numeric', + 'items.*.kg' => 'nullable|numeric', - 'items.*.ttl_kg' => 'nullable|numeric', + 'items.*.shop_no' => 'nullable|string', ])['items']; @@ -520,6 +529,24 @@ class AdminOrderController extends Controller return back()->with('error', 'Add at least one item.'); } + // ✅ BACKEND CALCULATION (DO NOT TRUST FRONTEND) + foreach ($items as &$item) { + + $ctn = (float) ($item['ctn'] ?? 0); + $qty = (float) ($item['qty'] ?? 0); + $price = (float) ($item['price'] ?? 0); + $cbm = (float) ($item['cbm'] ?? 0); + $kg = (float) ($item['kg'] ?? 0); + + // Calculated fields + $item['ttl_qty'] = $ctn * $qty; + $item['ttl_amount'] = $item['ttl_qty'] * $price; + $item['ttl_cbm'] = $cbm * $ctn; + $item['ttl_kg'] = $ctn * $kg; + } + unset($item); // VERY IMPORTANT + + // 3) totals $total_ctn = array_sum(array_column($items, 'ctn')); $total_qty = array_sum(array_column($items, 'qty')); @@ -631,30 +658,49 @@ class AdminOrderController extends Controller * UPDATE ORDER ITEM (existing orders) * ---------------------------*/ public function updateItem(Request $request, $id) - { - $item = OrderItem::findOrFail($id); - $order = $item->order; +{ + $item = OrderItem::findOrFail($id); + $order = $item->order; - $item->update([ - 'description' => $request->description, - 'ctn' => $request->ctn, - 'qty' => $request->qty, - 'ttl_qty' => $request->ttl_qty, - 'unit' => $request->unit, - 'price' => $request->price, - 'ttl_amount' => $request->ttl_amount, - 'cbm' => $request->cbm, - 'ttl_cbm' => $request->ttl_cbm, - 'kg' => $request->kg, - 'ttl_kg' => $request->ttl_kg, - 'shop_no' => $request->shop_no, - ]); + $request->validate([ + 'description' => 'required|string', + 'ctn' => 'nullable|numeric', + 'qty' => 'nullable|numeric', + 'unit' => 'nullable|string', + 'price' => 'nullable|numeric', + 'cbm' => 'nullable|numeric', + 'kg' => 'nullable|numeric', + 'shop_no' => 'nullable|string', + ]); - $this->recalcTotals($order); - $this->updateInvoiceFromOrder($order); + // ✅ BACKEND CALCULATION + $ctn = (float) ($request->ctn ?? 0); + $qty = (float) ($request->qty ?? 0); + $price = (float) ($request->price ?? 0); + $cbm = (float) ($request->cbm ?? 0); + $kg = (float) ($request->kg ?? 0); + + $item->update([ + 'description' => $request->description, + 'ctn' => $ctn, + 'qty' => $qty, + 'ttl_qty' => $ctn * $qty, + 'unit' => $request->unit, + 'price' => $price, + 'ttl_amount' => ($ctn * $qty) * $price, + 'cbm' => $cbm, + 'ttl_cbm' => $cbm * $ctn, + 'kg' => $kg, + 'ttl_kg' => $ctn * $kg, + 'shop_no' => $request->shop_no, + ]); + + $this->recalcTotals($order); + $this->updateInvoiceFromOrder($order); + + return back()->with('success', 'Item updated successfully'); +} - return back()->with('success', 'Item updated successfully'); - } private function updateInvoiceFromOrder(Order $order) { diff --git a/public/invoices/invoice-INV-2025-000048.pdf b/public/invoices/invoice-INV-2025-000048.pdf new file mode 100644 index 0000000..6bce3a0 Binary files /dev/null and b/public/invoices/invoice-INV-2025-000048.pdf differ diff --git a/public/invoices/invoice-INV-2025-000051.pdf b/public/invoices/invoice-INV-2025-000051.pdf new file mode 100644 index 0000000..82b3fa7 Binary files /dev/null and b/public/invoices/invoice-INV-2025-000051.pdf differ diff --git a/resources/views/admin/account.blade.php b/resources/views/admin/account.blade.php index 5446a56..c5f765d 100644 --- a/resources/views/admin/account.blade.php +++ b/resources/views/admin/account.blade.php @@ -315,15 +315,6 @@ tr:hover td{ background:#fbfdff; } border-top: 1px solid #eef3fb; /* margin-right:550px; */ } -.pagination-container { - display: flex; - justify-content: space-between; - align-items: center; - margin-top: 15px; - padding: 12px 0; - border-top: 1px solid #eef3fb; - margin-right:550px; -} .pagination-info { font-size: 13px; @@ -2793,85 +2784,76 @@ async function submitEditEntry(e) { } -function openEntryOrdersModal(entryNo) { - // header la entry no show kar - document.getElementById('entryOrdersEntryNo-span').textContent = `(${entryNo})`; + function openEntryOrdersModal(entryNo) { + document.getElementById('entryOrdersEntryNo-span').textContent = `(${entryNo})`; - // table clean / loading state - const tbody = document.getElementById('entryOrdersTableBody'); - tbody.innerHTML = ` -
Detailed view of this shipment order
+{{ $user->company_name ?? 'N/A' }}
-{{ $user->email ?? '' }}
-{{ $user->mobile_no ?? '' }}
+ + +{{ $user->address ?? '' }}
- {{ $user->pincode ?? '' }} + {{-- ACTION BUTTONS --}} +Order ID
-{{ $user->company_name ?? 'N/A' }}
+{{ $user->email ?? '' }}
+{{ $user->mobile_no ?? '' }}
+Mark No
-Total Items
-Status
- {{ ucfirst($order->status) }} +{{ $user->address ?? '' }}
+ {{ $user->pincode ?? '' }} +Origin
-Order ID
+Mark No
+Total Items
+Status
+ {{ ucfirst($order->status) }} +Destination
-Origin
+Destination
+| # | -Description | -CTN | -QTY | -TTL/QTY | -Unit | -Price | -Total Amount | -CBM | -TTL CBM | -KG | -TTL KG | -Shop No | -Actions | -||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ $index + 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 }} | - -
- @if($status === 'pending')
- {{-- EDIT BUTTON --}}
+ {{-- ITEMS TABLE --}}
+
+
+
-
-
- @foreach($order->items as $item)
-
-
-
+ @endif
+
+ |
+