public function reportDetailed(Request $request) { $from_date = Carbon::parse($request->get('from_date'))->startOfDay(); $to_date = Carbon::parse($request->get('to_date'))->endOfDay(); $inventory = Inventory::with(['stock' => function ($query) use($from_date, $to_date) { $query->whereBetween('stock.created_at', [$from_date, $to_date])->orderBy('stock.created_at'); }])->get(); foreach ($inventory as $item) { $total_changes = array_sum($item->stock->pluck('quantity')->toArray()); $starting_quantity = $item->quantity - $total_changes; foreach ($item->stock as $stock) { $stock->previous_quantity = number_format($starting_quantity, 1); $stock->updated_quantity = number_format($starting_quantity += $stock->quantity, 1); } } return $inventory; }