ajax()) { $query = Stock::with(['dealer', 'product']) ->when($request->dealer_id, function($q) use ($request) { return $q->where('dealer_id', $request->dealer_id); }) ->when($request->product_id, function($q) use ($request) { return $q->where('product_id', $request->product_id); }); return datatables()->of($query) ->addColumn('dealer_name', function($stock) { return $stock->dealer->name; }) ->addColumn('product_name', function($stock) { return $stock->product->name; }) ->addColumn('action', function($stock) { return view('warehouse_management.stocks._action', compact('stock')); }) ->toJson(); } $dealers = Dealer::all(); $products = Product::where('active', true)->get(); return view('warehouse_management.stocks.index', compact('dealers', 'products')); } public function adjust(Request $request) { $request->validate([ 'stock_id' => 'required|exists:stocks,id', 'type' => 'required|in:add,reduce', 'quantity' => 'required|numeric|min:0.01', 'note' => 'required|string|max:255' ]); try { DB::beginTransaction(); $stock = Stock::findOrFail($request->stock_id); $oldQuantity = $stock->quantity; // Calculate new quantity $change = $request->type === 'add' ? $request->quantity : -$request->quantity; $newQuantity = $oldQuantity + $change; // Update stock $stock->update(['quantity' => $newQuantity]); // Log the change StockLog::create([ 'stock_id' => $stock->id, 'user_id' => Auth::id(), 'old_quantity' => $oldQuantity, 'new_quantity' => $newQuantity, 'change' => $change, 'note' => $request->note, 'reference_type' => 'manual_adjustment' ]); DB::commit(); return response()->json([ 'success' => true, 'message' => 'Stok berhasil diadjust' ]); } catch (\Exception $e) { DB::rollBack(); return response()->json([ 'success' => false, 'message' => 'Gagal mengadjust stok: ' . $e->getMessage() ], 500); } } public function history(Request $request) { $request->validate([ 'stock_id' => 'required|exists:stocks,id' ]); $logs = StockLog::with('user') ->where('stock_id', $request->stock_id) ->orderBy('created_at', 'desc') ->get() ->map(function($log) { return [ 'date' => $log->created_at->format('d/m/Y H:i'), 'user' => $log->user->name, 'change' => $log->change > 0 ? '+' . $log->change : $log->change, 'old_quantity' => $log->old_quantity, 'new_quantity' => $log->new_quantity, 'note' => $log->note ]; }); return response()->json(['logs' => $logs]); } }