diff --git a/app/Http/Controllers/Admin/ShipmentController.php b/app/Http/Controllers/Admin/ShipmentController.php index a0f9428..d281059 100644 --- a/app/Http/Controllers/Admin/ShipmentController.php +++ b/app/Http/Controllers/Admin/ShipmentController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\Admin; -use Illuminate\Support\Facades\DB; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\Shipment; @@ -107,9 +106,6 @@ class ShipmentController extends Controller 'order_qty' => $order->qty, 'order_ttl_qty' => $order->ttl_qty, 'order_ttl_amount' => $order->ttl_amount, - 'order_cbm' => $order->cbm, - 'order_ttl_cbm' => $order->ttl_cbm, - 'order_kg' => $order->kg, 'order_ttl_kg' => $order->ttl_kg, ]); } @@ -117,110 +113,22 @@ class ShipmentController extends Controller return redirect()->back()->with('success', "Shipment $newShipmentId created successfully!"); } - public function edit($id) - { - $shipment = Shipment::with('orders')->findOrFail($id); - - return view('admin.shipments.show', [ - 'shipment' => $shipment, - 'orders' => $shipment->orders, - 'isViewMode' => false // This is the edit mode - ]); - } - + /** + * Show shipment details (for modal popup) + */ public function show($id) { - $mode = request()->get('mode', 'view'); - - $shipment = Shipment::with(['items.order'])->findOrFail($id); - - // Get orders from shipment items - $orders = collect(); - foreach ($shipment->items as $item) { - if ($item->order) { - $orders->push($item->order); - } - } - - // Get orders not assigned to any shipment (available orders) - $usedOrderIds = ShipmentItem::pluck('order_id')->toArray(); - $availableOrders = Order::whereNotIn('id', $usedOrderIds)->get(); - - return view('admin.view-shipment', [ - 'shipment' => $shipment, - 'orders' => $orders, - 'mode' => $mode, - 'availableOrders' => $availableOrders - ]); - } - - public function addOrders(Request $request, $id) - { - $request->validate([ - 'order_ids' => 'required|array|min:1' - ]); - $shipment = Shipment::findOrFail($id); - $orderIds = $request->order_ids; - DB::beginTransaction(); - - try { - $orders = Order::whereIn('id', $orderIds)->get(); - $addedOrders = []; + // Load full order data from orders table + $orders = Order::whereIn('id', + ShipmentItem::where('shipment_id', $id)->pluck('order_id') + )->get(); - foreach ($orders as $order) { - // Prevent duplicates - if (ShipmentItem::where('shipment_id', $shipment->id)->where('order_id', $order->id)->exists()) { - continue; - } - - ShipmentItem::create([ - 'shipment_id' => $shipment->id, - 'order_id' => $order->id, - 'order_ctn' => $order->ctn, - 'order_qty' => $order->qty, - 'order_ttl_qty' => $order->ttl_qty, - 'order_ttl_amount' => $order->ttl_amount, - 'order_cbm' => $order->cbm, - 'order_ttl_cbm' => $order->ttl_cbm, - 'order_kg' => $order->kg, - 'order_ttl_kg' => $order->ttl_kg, - ]); - - $addedOrders[] = $order; - } - - // Recalculate totals - $this->recalculateShipmentTotals($shipment->id); - - DB::commit(); - - $shipment->refresh(); - $shipment->load('items.order'); - - // Get updated orders list - $updatedOrders = collect(); - foreach ($shipment->items as $item) { - if ($item->order) { - $updatedOrders->push($item->order); - } - } - - return response()->json([ - 'success' => true, - 'message' => 'Orders added to shipment successfully.', - 'shipment' => $shipment, - 'orders' => $addedOrders - ]); - - } catch (\Exception $e) { - DB::rollBack(); - return response()->json([ - 'success' => false, - 'message' => 'Failed to add orders: ' . $e->getMessage() - ], 500); - } + return response()->json([ + 'shipment' => $shipment, + 'orders' => $orders + ]); } /** @@ -301,77 +209,4 @@ class ShipmentController extends Controller return redirect()->route('admin.shipments') ->with('success', 'Shipment deleted successfully.'); } - - public function removeOrder(Request $request) - { - $request->validate([ - 'shipment_id' => 'required|exists:shipments,id', - 'order_id' => 'required|exists:orders,id' - ]); - - $shipmentId = $request->shipment_id; - $orderId = $request->order_id; - - // Get order data before deletion - $order = Order::findOrFail($orderId); - - // Delete pivot entry - ShipmentItem::where('shipment_id', $shipmentId) - ->where('order_id', $orderId) - ->delete(); - - // Recalculate totals - $shipment = $this->recalculateShipmentTotals($shipmentId); - - if ($request->ajax() || $request->wantsJson()) { - return response()->json([ - 'success' => true, - 'message' => 'Order removed successfully.', - 'order' => $order, - 'shipment' => $shipment - ]); - } - - return back()->with('success', 'Order removed successfully.'); - } - - private function recalculateShipmentTotals($shipmentId) - { - $shipment = Shipment::with('items')->findOrFail($shipmentId); - - // Use the shipment items to calculate totals - $shipment->total_ctn = $shipment->items->sum('order_ctn'); - $shipment->total_qty = $shipment->items->sum('order_qty'); - $shipment->total_ttl_qty = $shipment->items->sum('order_ttl_qty'); - $shipment->total_amount = $shipment->items->sum('order_ttl_amount'); - $shipment->total_cbm = $shipment->items->sum('order_cbm'); - $shipment->total_ttl_cbm = $shipment->items->sum('order_ttl_cbm'); - $shipment->total_kg = $shipment->items->sum('order_kg'); - $shipment->total_ttl_kg = $shipment->items->sum('order_ttl_kg'); - - $shipment->save(); - $shipment->refresh(); // Refresh to get updated data - - return $shipment; - } - - // Helper method to get available orders for a shipment - public function getAvailableOrders($shipmentId) - { - $shipment = Shipment::findOrFail($shipmentId); - - // Get all used order IDs - $usedOrderIds = ShipmentItem::pluck('order_id')->toArray(); - - // Remove orders that are already in this shipment - $shipmentOrderIds = $shipment->items->pluck('order_id')->toArray(); - $availableOrderIds = array_diff($usedOrderIds, $shipmentOrderIds); - - $availableOrders = Order::whereNotIn('id', $availableOrderIds)->get(); - - return response()->json([ - 'success' => true, - 'availableOrders' => $availableOrders - ]); - } } \ No newline at end of file diff --git a/public/invoices/invoice-INV-2025-000030.pdf b/public/invoices/invoice-INV-2025-000030.pdf index fa4b527..605f767 100644 Binary files a/public/invoices/invoice-INV-2025-000030.pdf and b/public/invoices/invoice-INV-2025-000030.pdf differ diff --git a/resources/views/admin/account.blade.php b/resources/views/admin/account.blade.php index 6006b9a..edac580 100644 --- a/resources/views/admin/account.blade.php +++ b/resources/views/admin/account.blade.php @@ -1413,31 +1413,39 @@ tr:hover td{ background:#fbfdff; }