first(); if($request->ajax()){ $data = Opname::with('user','dealer'); return DataTables::of($data) ->addColumn('user_name', function ($row){ return $row->user ? $row->user->name : '-'; }) ->addColumn('dealer_name', function ($row){ return $row->dealer ? $row->dealer->name : '-'; }) ->editColumn('opname_date', function ($row){ return $row->opname_date ? Carbon::parse($row->opname_date)->format('d M Y') : '-'; }) ->addColumn('action', function ($row) use ($menu) { $btn = '
'; $btn .= 'Detail'; $btn .= '
'; return $btn; }) ->rawColumns(['action']) ->make(true); } return view('warehouse_management.opnames.index'); } public function create(){ try{ $dealers = Dealer::all(); $products = Product::all(); return view('warehouse_management.opnames.create', compact('dealers','products')); }catch(\Exception $ex){ Log::error($ex->getMessage()); } } public function store(Request $request){ try{ $request->validate([ 'dealer' => 'required|exists:dealers,id', 'product' => 'required|array', 'product.*' => 'nullable|exists:products,id', 'system_quantity' => 'required|array', 'physical_quantity' => 'required|array', ]); // 1. Create Opname master record $opname = Opname::create([ 'dealer_id' => $request->dealer, 'opname_date' => now(), // or $request->opname_date if you provide it 'user_id' => auth()->id(), // assuming the user is logged in 'note' => null, // or $request->note if needed ]); // 2. Loop over products to create OpnameDetails foreach ($request->product as $index => $productId) { if (!$productId) continue; // Skip empty rows $system = $request->system_quantity[$index] ?? 0; $physical = $request->physical_quantity[$index] ?? 0; OpnameDetail::create([ 'opname_id' => $opname->id, 'product_id' => $productId, 'system_stock' => $system, 'physical_stock' => $physical, 'difference' => $physical - $system, 'note' => null, // or include from input ]); } return redirect()->route('opnames.index') ->with('success', 'Opname berhasil disimpan.'); }catch(\Exception $ex){ Log::error($ex->getMessage()); } } public function show(Request $request, $id) { try { $opname = Opname::with('details.product', 'user')->findOrFail($id); if ($request->ajax()) { return DataTables::of($opname->details) ->addIndexColumn() ->addColumn('opname_date', function () use ($opname) { return $opname->opname_date->format('d M Y'); }) ->addColumn('user_name', function () use ($opname) { return $opname->user ? $opname->user->name : '-'; }) ->addColumn('product_name', function ($detail) { return $detail->product->name ?? '-'; }) ->addColumn('system_stock', function ($detail) { return $detail->system_stock; }) ->addColumn('physical_stock', function ($detail) { return $detail->physical_stock; }) ->addColumn('difference', function ($detail) { return $detail->difference; }) ->make(true); } return view('warehouse_management.opnames.detail', compact('opname')); } catch (\Exception $ex) { Log::error($ex->getMessage()); abort(500, 'Something went wrong'); } } }