invoiceRepository->filter( $request->merge(['page' => $request->get('page') ?? 1])->all(), [ 'payment', 'customer' ] ); $title = 'List all invoices'; return view('admin.invoice.index', compact('title', 'invoices')); } public function edit(int $id = 0) { $invoice = $this->invoiceRepository->findWithRelationships($id, ['payment', 'invoiceItem', 'customer']); if (!$invoice) { return back()->withErrors("Can't find Invoice by ID #" . $id); } $title = "View invoice #" . $id; return view("admin.invoice.edit", compact('title', 'invoice')); } public function update(InvoiceRequest $request, int $id = 0) { $invoice = $this->invoiceRepository->find($id); if (!$invoice) { return back()->withErrors("Invalid request"); } $request->validated(); $status = match (strtolower($request->get('action'))) { "paid" => 1, "cancel" => 2, default => 0 }; DB::beginTransaction(); try { $this->invoiceRepository->update($id, [ 'status' => $status, 'date_paid' => $status === 1 ? time() : null ]); DB::commit(); } catch (\Exception $error) { DB::rollBack(); return back()->withErrors($error->getMessage()); } return back()->with('success', "Updated Successfully"); } public function destroy(int $id = 0) { $invoice = $this->invoiceRepository->find($id); if (!$invoice) { return back()->withErrors("Invalid request"); } DB::beginTransaction(); try { $this->orderRepository->updateBy('invoice_id', $id, ['invoice_id' => 0]); $this->invoiceRepository->delete($id); DB::commit(); } catch (\Exception $error) { DB::rollBack(); return back()->withErrors($error->getMessage()); } return redirect()->route('admin.invoice.index')->with('success', 'Invoice deleted successfully'); } }