tracker; if (! $tracker) { return response()->json([]); } return response()->json($tracker->entries()->orderBy('date', 'desc')->get()); } public function store(Request $request): RedirectResponse { $validated = $request->validate([ 'date' => 'required|date|before_or_equal:today', 'quantity' => 'required|numeric|min:0.000001', 'unit_price' => 'nullable|numeric|min:0.01', 'total_cost' => 'nullable|numeric|min:0.01', ]); $tracker = User::default()->tracker; if (! $tracker) { return back()->withErrors(['tracker' => 'No tracker found. Please complete onboarding first.']); } // If unit_price and total_cost provided, verify the calculation if (isset($validated['unit_price'], $validated['total_cost'])) { $calculatedTotal = $validated['quantity'] * $validated['unit_price']; if (abs($calculatedTotal - $validated['total_cost']) > 0.01) { return back()->withErrors([ 'total_cost' => 'Total cost does not match quantity × unit price.', ]); } } $tracker->entries()->create($validated); return back()->with('success', 'Entry added successfully!'); } public function summary(): JsonResponse { $tracker = User::default()->tracker; if (! $tracker) { return response()->json([ 'total_quantity' => 0, 'total_cost' => 0, 'average_cost_per_unit' => 0, ]); } return response()->json([ 'total_quantity' => Entry::totalQuantity($tracker->id), 'total_cost' => Entry::totalCost($tracker->id), 'average_cost_per_unit' => Entry::averageCostPerUnit($tracker->id), ]); } public function destroy(Entry $entry): JsonResponse { $tracker = User::default()->tracker; if (! $tracker || $entry->tracker_id !== $tracker->id) { return response()->json(['error' => 'Entry not found.'], 404); } $entry->delete(); return response()->json([ 'success' => true, 'message' => 'Entry deleted successfully!', ]); } }