diff --git a/app/Http/Controllers/Admin/AdminOrderController.php b/app/Http/Controllers/Admin/AdminOrderController.php index 95afaf4..f116b96 100644 --- a/app/Http/Controllers/Admin/AdminOrderController.php +++ b/app/Http/Controllers/Admin/AdminOrderController.php @@ -13,6 +13,11 @@ use App\Models\User; use PDF; use Maatwebsite\Excel\Facades\Excel; use App\Exports\OrdersExport; +use App\Imports\OrderItemsPreviewImport; + + +use Illuminate\Validation\ValidationException; + class AdminOrderController extends Controller { @@ -36,44 +41,6 @@ class AdminOrderController extends Controller return view('admin.orders_create', compact('markList')); } - // public function store(Request $request) - // { - // $data = $request->validate([ - // 'mark_no' => 'required|string', - // 'origin' => 'nullable|string', - // 'destination' => 'nullable|string', - // 'ctn' => 'nullable|numeric', - // 'qty' => 'nullable|numeric', - // 'ttl_qty' => 'nullable|numeric', - // 'ttl_amount' => 'nullable|numeric', - // 'cbm' => 'nullable|numeric', - // 'ttl_cbm' => 'nullable|numeric', - // 'kg' => 'nullable|numeric', - // 'ttl_kg' => 'nullable|numeric', - // ]); - - // $order = Order::create([ - // 'order_id' => $this->generateOrderId(), - // 'mark_no' => $data['mark_no'], - // 'origin' => $data['origin'] ?? null, - // 'destination'=> $data['destination'] ?? null, - // 'ctn' => $data['ctn'] ?? 0, - // 'qty' => $data['qty'] ?? 0, - // 'ttl_qty' => $data['ttl_qty'] ?? 0, - // 'ttl_amount' => $data['ttl_amount'] ?? 0, - // 'cbm' => $data['cbm'] ?? 0, - // 'ttl_cbm' => $data['ttl_cbm'] ?? 0, - // 'kg' => $data['kg'] ?? 0, - // 'ttl_kg' => $data['ttl_kg'] ?? 0, - // 'status' => 'pending', - // ]); - - // $this->createInvoice($order); - - // return redirect()->route('admin.orders.show', $order->id) - // ->with('success', 'Order created successfully.'); - // } - /* --------------------------- * SHOW / POPUP * ---------------------------*/ @@ -723,4 +690,36 @@ class AdminOrderController extends Controller ]); } } + + + +public function uploadExcelPreview(Request $request) +{ + try { + $request->validate([ + 'excel' => 'required|file|mimes:xlsx,xls' + ]); + + $import = new OrderItemsPreviewImport(); + Excel::import($import, $request->file('excel')); + + return response()->json([ + 'success' => true, + 'items' => $import->rows + ]); + } catch (ValidationException $e) { + return response()->json([ + 'success' => false, + 'message' => 'Invalid Excel file format' + ], 422); + } catch (\Throwable $e) { + \Log::error($e); + return response()->json([ + 'success' => false, + 'message' => 'Server error' + ], 500); + } +} + + } diff --git a/app/Imports/OrderItemsPreviewImport.php b/app/Imports/OrderItemsPreviewImport.php new file mode 100644 index 0000000..0865b6f --- /dev/null +++ b/app/Imports/OrderItemsPreviewImport.php @@ -0,0 +1,26 @@ +first()->map(fn ($h) => strtolower(trim($h)))->toArray(); + + foreach ($collection->skip(1) as $row) { + $item = []; + foreach ($header as $i => $key) { + $item[$key] = $row[$i] ?? null; + } + + if (!empty($item['description'])) { + $this->rows[] = $item; + } + } + } +} diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index 11fd2ea..2f8e362 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -1214,6 +1214,7 @@ body, .container-fluid {