json(Payment::whereBetween('payment_date', [$from, $end])->with(['invoice'])->orderBy('payment_date', 'desc')->get()); } public function index(Invoice $invoice): JsonResponse { return response()->json($invoice->payments); } /** * Store a newly created resource in storage. */ public function store(Request $request, Invoice $invoice): JsonResponse { $paymentData = $request->validate([ 'invoice_id' => 'required|integer|exists:invoices,id', 'paid_amount' => 'required|numeric', 'payment_date' => 'required|date', 'payment_method' => 'nullable|string', 'status' => 'required|string|in:full,partial', ]); if ($paymentData['status'] == 'full') { $invoice->update(['status' => 'paid']); } return response()->json($invoice->payments()->create($request->all())); } /** * Display the specified resource. */ public function show(Payment $payment) { // } /** * Update the specified resource in storage. */ public function update(Request $request, Payment $payment): JsonResponse { $paymentData = $request->validate([ 'invoice_id' => 'required|integer|exists:invoices,id', 'paid_amount' => 'required|numeric', 'payment_date' => 'required|date', 'payment_method' => 'nullable|string', 'status' => 'required|string|in:full,partial', ]); $payment->update($paymentData); if ($payment->invoice->payments->where('status', 'full')->count() === 0) { $payment->invoice->update(['status' => 'sent']); } return response()->json($payment); } /** * Remove the specified resource from storage. */ public function destroy(Payment $payment) { // } }