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');
}
}
}