From 59b43fa2584b90d531adb3b049cee043df552d49 Mon Sep 17 00:00:00 2001 From: Martin Chevignard Date: Tue, 15 Oct 2024 17:55:56 +0200 Subject: [PATCH] Public Invoice View fix --- .../V1/Admin/Invoice/InvoicesController.php | 5 +- app/Models/Invoice.php | 47 +++++++------------ .../scripts/admin/views/estimates/Index.vue | 4 ++ .../scripts/admin/views/invoices/Index.vue | 7 +++ .../components/base/base-table/BaseTable.vue | 17 ++++--- 5 files changed, 37 insertions(+), 43 deletions(-) diff --git a/app/Http/Controllers/V1/Admin/Invoice/InvoicesController.php b/app/Http/Controllers/V1/Admin/Invoice/InvoicesController.php index 91a186ef..0749ce48 100644 --- a/app/Http/Controllers/V1/Admin/Invoice/InvoicesController.php +++ b/app/Http/Controllers/V1/Admin/Invoice/InvoicesController.php @@ -21,12 +21,11 @@ class InvoicesController extends Controller { $this->authorize('viewAny', Invoice::class); - $limit = $request->has('limit') ? $request->limit : 10; + $limit = $request->input('limit', 10); $invoices = Invoice::whereCompany() - ->join('customers', 'customers.id', '=', 'invoices.customer_id') ->applyFilters($request->all()) - ->select('invoices.*', 'customers.name') + ->with('customer') ->latest() ->paginateData($limit); diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index ad2fa9db..1d9657d8 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -248,49 +248,34 @@ class Invoice extends Model implements HasMedia public function scopeApplyFilters($query, array $filters) { - $filters = collect($filters); + $filters = collect($filters)->filter()->all(); - $query->when($filters->get('search'), function ($query, $search) { + return $query->when($filters['search'] ?? null, function ($query, $search) { $query->whereSearch($search); - }); - - $query->when($filters->get('status'), function ($query, $status) { + })->when($filters['status'] ?? null, function ($query, $status) { match ($status) { self::STATUS_UNPAID, self::STATUS_PARTIALLY_PAID, self::STATUS_PAID => $query->wherePaidStatus($status), 'DUE' => $query->whereDueStatus($status), default => $query->whereStatus($status), }; - }); - - $query->when($filters->get('paid_status'), function ($query, $status) { - $query->wherePaidStatus($status); - }); - - $query->when($filters->get('invoice_id'), function ($query, $invoiceId) { + })->when($filters['paid_status'] ?? null, function ($query, $paidStatus) { + $query->wherePaidStatus($paidStatus); + })->when($filters['invoice_id'] ?? null, function ($query, $invoiceId) { $query->whereInvoice($invoiceId); - }); - - $query->when($filters->get('invoice_number'), function ($query, $invoiceNumber) { + })->when($filters['invoice_number'] ?? null, function ($query, $invoiceNumber) { $query->whereInvoiceNumber($invoiceNumber); - }); - - $query->when($filters->get('from_date') && $filters->get('to_date'), function ($query) use ($filters) { - $start = Carbon::parse($filters->get('from_date')); - $end = Carbon::parse($filters->get('to_date')); + })->when(($filters['from_date'] ?? null) && ($filters['to_date'] ?? null), function ($query) use ($filters) { + $start = Carbon::parse($filters['from_date']); + $end = Carbon::parse($filters['to_date']); $query->invoicesBetween($start, $end); - }); - - $query->when($filters->get('customer_id'), function ($query, $customerId) { + })->when($filters['customer_id'] ?? null, function ($query, $customerId) { $query->where('customer_id', $customerId); + })->when($filters['orderByField'] ?? null, function ($query, $orderByField) use ($filters) { + $orderBy = $filters['orderBy'] ?? 'desc'; + $query->orderBy($orderByField, $orderBy); + }, function ($query) { + $query->orderBy('sequence_number', 'desc'); }); - - $query->when($filters->get('orderByField') || $filters->get('orderBy'), function ($query) use ($filters) { - $field = $filters->get('orderByField', 'sequence_number'); - $orderBy = $filters->get('orderBy', 'desc'); - $query->orderBy($field, $orderBy); - }); - - return $query; } public function scopeWhereInvoice($query, $invoice_id) diff --git a/resources/scripts/admin/views/estimates/Index.vue b/resources/scripts/admin/views/estimates/Index.vue index 1ebe7dc0..8aebb666 100644 --- a/resources/scripts/admin/views/estimates/Index.vue +++ b/resources/scripts/admin/views/estimates/Index.vue @@ -174,6 +174,7 @@ :data="fetchData" :columns="estimateColumns" :placeholder-count="estimateStore.totalEstimateCount >= 20 ? 10 : 5" + :key="tableKey" class="mt-10" >