$member, ]); } public function store(Request $request, Member $member) { $validated = $request->validate([ 'paid_at' => ['required', 'date'], 'amount' => ['required', 'numeric', 'min:0'], 'method' => ['nullable', 'string', 'max:255'], 'reference' => ['nullable', 'string', 'max:255'], ]); $payment = $member->payments()->create($validated); AuditLogger::log('payment.created', $payment, $validated); return redirect() ->route('admin.members.show', $member) ->with('status', __('Payment recorded successfully.')); } public function edit(Member $member, MembershipPayment $payment) { return view('admin.payments.edit', [ 'member' => $member, 'payment' => $payment, ]); } public function update(Request $request, Member $member, MembershipPayment $payment) { $validated = $request->validate([ 'paid_at' => ['required', 'date'], 'amount' => ['required', 'numeric', 'min:0'], 'method' => ['nullable', 'string', 'max:255'], 'reference' => ['nullable', 'string', 'max:255'], ]); $payment->update($validated); AuditLogger::log('payment.updated', $payment, $validated); return redirect() ->route('admin.members.show', $member) ->with('status', __('Payment updated successfully.')); } public function destroy(Member $member, MembershipPayment $payment) { $payment->delete(); AuditLogger::log('payment.deleted', $payment); return redirect() ->route('admin.members.show', $member) ->with('status', __('Payment deleted.')); } public function receipt(Member $member, MembershipPayment $payment) { // Verify the payment belongs to the member if ($payment->member_id !== $member->id) { abort(404); } $pdf = Pdf::loadView('admin.payments.receipt', [ 'member' => $member, 'payment' => $payment, ]); $filename = 'receipt-' . $payment->id . '-' . now()->format('Ymd') . '.pdf'; return $pdf->download($filename); } }