From 93d36abe4c3c01a59d9e314943fdb3d9923e0921 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 20 Dec 2023 14:10:45 +1100 Subject: [PATCH] Improve sort filters --- app/Filters/BankIntegrationFilters.php | 4 +++- app/Filters/BankTransactionFilters.php | 10 ++++++---- app/Filters/BankTransactionRuleFilters.php | 4 +++- app/Filters/ClientFilters.php | 4 +++- app/Filters/CompanyGatewayFilters.php | 4 +++- app/Filters/CreditFilters.php | 6 ++++-- app/Filters/DesignFilters.php | 4 +++- app/Filters/DocumentFilters.php | 5 ++++- app/Filters/ExpenseCategoryFilters.php | 2 +- app/Filters/GroupSettingFilters.php | 4 +++- app/Filters/InvoiceFilters.php | 6 ++++-- app/Filters/ProjectFilters.php | 4 +++- app/Filters/PurchaseOrderFilters.php | 6 ++++-- app/Filters/QuoteFilters.php | 6 ++++-- app/Filters/RecurringExpenseFilters.php | 4 +++- app/Filters/RecurringQuoteFilters.php | 4 +++- app/Filters/SchedulerFilters.php | 4 +++- app/Filters/SubscriptionFilters.php | 4 +++- app/Filters/SystemLogFilters.php | 4 +++- app/Filters/TaskFilters.php | 8 +++++--- app/Filters/TaskStatusFilters.php | 4 +++- app/Filters/TaxRateFilters.php | 4 +++- app/Filters/TokenFilters.php | 4 +++- app/Filters/UserFilters.php | 4 +++- app/Filters/VendorFilters.php | 4 +++- app/Filters/WebhookFilters.php | 4 +++- 26 files changed, 86 insertions(+), 35 deletions(-) diff --git a/app/Filters/BankIntegrationFilters.php b/app/Filters/BankIntegrationFilters.php index f637afd9cdf5..c2ed8cc16bbf 100644 --- a/app/Filters/BankIntegrationFilters.php +++ b/app/Filters/BankIntegrationFilters.php @@ -97,7 +97,9 @@ class BankIntegrationFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/BankTransactionFilters.php b/app/Filters/BankTransactionFilters.php index 11d27df79025..815a42402bbb 100644 --- a/app/Filters/BankTransactionFilters.php +++ b/app/Filters/BankTransactionFilters.php @@ -128,13 +128,15 @@ class BankTransactionFilters extends QueryFilters if (!is_array($sort_col) || count($sort_col) != 2) { return $this->builder; } - + + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if ($sort_col[0] == 'deposit') { - return $this->builder->where('base_type', 'CREDIT')->orderBy('amount', $sort_col[1]); + return $this->builder->where('base_type', 'CREDIT')->orderBy('amount', $dir); } if ($sort_col[0] == 'withdrawal') { - return $this->builder->where('base_type', 'DEBIT')->orderBy('amount', $sort_col[1]); + return $this->builder->where('base_type', 'DEBIT')->orderBy('amount', $dir); } if ($sort_col[0] == 'status') { @@ -145,7 +147,7 @@ class BankTransactionFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/BankTransactionRuleFilters.php b/app/Filters/BankTransactionRuleFilters.php index d7c4a83bb387..4e788ebfb314 100644 --- a/app/Filters/BankTransactionRuleFilters.php +++ b/app/Filters/BankTransactionRuleFilters.php @@ -65,7 +65,9 @@ class BankTransactionRuleFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/ClientFilters.php b/app/Filters/ClientFilters.php index b1c7964de383..b2462be0f12a 100644 --- a/app/Filters/ClientFilters.php +++ b/app/Filters/ClientFilters.php @@ -161,8 +161,10 @@ class ClientFilters extends QueryFilters if ($sort_col[0] == 'display_name') { $sort_col[0] = 'name'; } + + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/CompanyGatewayFilters.php b/app/Filters/CompanyGatewayFilters.php index e41d61fac4ff..879e1a5d1e3d 100644 --- a/app/Filters/CompanyGatewayFilters.php +++ b/app/Filters/CompanyGatewayFilters.php @@ -49,8 +49,10 @@ class CompanyGatewayFilters extends QueryFilters if (!is_array($sort_col) || count($sort_col) != 2) { return $this->builder; } + + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/CreditFilters.php b/app/Filters/CreditFilters.php index 482e5376a3ef..2aea5eedeba2 100644 --- a/app/Filters/CreditFilters.php +++ b/app/Filters/CreditFilters.php @@ -139,12 +139,14 @@ class CreditFilters extends QueryFilters return $this->builder; } + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if ($sort_col[0] == 'client_id') { return $this->builder->orderBy(\App\Models\Client::select('name') - ->whereColumn('clients.id', 'credits.client_id'), $sort_col[1]); + ->whereColumn('clients.id', 'credits.client_id'), $dir); } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/DesignFilters.php b/app/Filters/DesignFilters.php index 1526dcc7e5a6..69c6cf60df55 100644 --- a/app/Filters/DesignFilters.php +++ b/app/Filters/DesignFilters.php @@ -51,7 +51,9 @@ class DesignFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } public function entities(string $entities = ''): Builder diff --git a/app/Filters/DocumentFilters.php b/app/Filters/DocumentFilters.php index 73f9b4a0b2d1..4599021c08de 100644 --- a/app/Filters/DocumentFilters.php +++ b/app/Filters/DocumentFilters.php @@ -12,6 +12,7 @@ namespace App\Filters; use App\Models\Company; +use App\Filters\QueryFilters; use Illuminate\Database\Eloquent\Builder; /** @@ -63,7 +64,9 @@ class DocumentFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } diff --git a/app/Filters/ExpenseCategoryFilters.php b/app/Filters/ExpenseCategoryFilters.php index 6e8edaa0c3a5..bba89392e769 100644 --- a/app/Filters/ExpenseCategoryFilters.php +++ b/app/Filters/ExpenseCategoryFilters.php @@ -47,7 +47,7 @@ class ExpenseCategoryFilters extends QueryFilters if (!is_array($sort_col) || count($sort_col) != 2) { return $this->builder; } - + if (is_array($sort_col) && in_array($sort_col[1], ['asc', 'desc']) && in_array($sort_col[0], ['name'])) { return $this->builder->orderBy($sort_col[0], $sort_col[1]); } diff --git a/app/Filters/GroupSettingFilters.php b/app/Filters/GroupSettingFilters.php index 8123e6abda85..9a1b1753794d 100644 --- a/app/Filters/GroupSettingFilters.php +++ b/app/Filters/GroupSettingFilters.php @@ -64,8 +64,10 @@ class GroupSettingFilters extends QueryFilters if (!is_array($sort_col) || count($sort_col) != 2) { return $this->builder; } + + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/InvoiceFilters.php b/app/Filters/InvoiceFilters.php index df04af1d072a..5e872807079f 100644 --- a/app/Filters/InvoiceFilters.php +++ b/app/Filters/InvoiceFilters.php @@ -286,14 +286,16 @@ class InvoiceFilters extends QueryFilters return $this->builder; } + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if ($sort_col[0] == 'client_id') { return $this->builder->orderBy(\App\Models\Client::select('name') - ->whereColumn('clients.id', 'invoices.client_id'), $sort_col[1]); + ->whereColumn('clients.id', 'invoices.client_id'), $dir); } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/ProjectFilters.php b/app/Filters/ProjectFilters.php index 653b44053377..2da35693dcb8 100644 --- a/app/Filters/ProjectFilters.php +++ b/app/Filters/ProjectFilters.php @@ -69,9 +69,11 @@ class ProjectFilters extends QueryFilters return $this->builder; } - if (is_array($sort_col)) { + if (is_array($sort_col) && in_array($sort_col[1], ['asc','desc'])) { return $this->builder->orderBy($sort_col[0], $sort_col[1]); } + + return $this->builder; } /** diff --git a/app/Filters/PurchaseOrderFilters.php b/app/Filters/PurchaseOrderFilters.php index 0d5c1244987a..5ea22cdfbd8c 100644 --- a/app/Filters/PurchaseOrderFilters.php +++ b/app/Filters/PurchaseOrderFilters.php @@ -123,12 +123,14 @@ class PurchaseOrderFilters extends QueryFilters return $this->builder; } + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if ($sort_col[0] == 'vendor_id') { return $this->builder->orderBy(\App\Models\Vendor::select('name') - ->whereColumn('vendors.id', 'purchase_orders.vendor_id'), $sort_col[1]); + ->whereColumn('vendors.id', 'purchase_orders.vendor_id'), $dir); } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/QuoteFilters.php b/app/Filters/QuoteFilters.php index c28d0450cbfd..42a30d63f80f 100644 --- a/app/Filters/QuoteFilters.php +++ b/app/Filters/QuoteFilters.php @@ -146,10 +146,12 @@ class QuoteFilters extends QueryFilters return $this->builder; } + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if($sort_col[0] == 'client_id') { return $this->builder->orderBy(\App\Models\Client::select('name') - ->whereColumn('clients.id', 'quotes.client_id'), $sort_col[1]); + ->whereColumn('clients.id', 'quotes.client_id'), $dir); } @@ -157,7 +159,7 @@ class QuoteFilters extends QueryFilters $sort_col[0] = 'due_date'; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/RecurringExpenseFilters.php b/app/Filters/RecurringExpenseFilters.php index 35d2afd0c99a..5342d98ec2e0 100644 --- a/app/Filters/RecurringExpenseFilters.php +++ b/app/Filters/RecurringExpenseFilters.php @@ -63,7 +63,9 @@ class RecurringExpenseFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/RecurringQuoteFilters.php b/app/Filters/RecurringQuoteFilters.php index 2ac2a170d2e1..55ba0831c13c 100644 --- a/app/Filters/RecurringQuoteFilters.php +++ b/app/Filters/RecurringQuoteFilters.php @@ -62,7 +62,9 @@ class RecurringQuoteFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/SchedulerFilters.php b/app/Filters/SchedulerFilters.php index 8368b34be09f..397db7b12f17 100644 --- a/app/Filters/SchedulerFilters.php +++ b/app/Filters/SchedulerFilters.php @@ -50,7 +50,9 @@ class SchedulerFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/SubscriptionFilters.php b/app/Filters/SubscriptionFilters.php index b32f692acf16..ef75c6072812 100644 --- a/app/Filters/SubscriptionFilters.php +++ b/app/Filters/SubscriptionFilters.php @@ -50,7 +50,9 @@ class SubscriptionFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/SystemLogFilters.php b/app/Filters/SystemLogFilters.php index 62b63f8b76fa..2c735ac18903 100644 --- a/app/Filters/SystemLogFilters.php +++ b/app/Filters/SystemLogFilters.php @@ -75,7 +75,9 @@ class SystemLogFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/TaskFilters.php b/app/Filters/TaskFilters.php index d6db490b2698..0e47e6953cab 100644 --- a/app/Filters/TaskFilters.php +++ b/app/Filters/TaskFilters.php @@ -131,17 +131,19 @@ class TaskFilters extends QueryFilters return $this->builder; } + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if ($sort_col[0] == 'client_id') { return $this->builder->orderBy(\App\Models\Client::select('name') - ->whereColumn('clients.id', 'tasks.client_id'), $sort_col[1]); + ->whereColumn('clients.id', 'tasks.client_id'), $dir); } if ($sort_col[0] == 'user_id') { return $this->builder->orderBy(\App\Models\User::select('first_name') - ->whereColumn('users.id', 'tasks.user_id'), $sort_col[1]); + ->whereColumn('users.id', 'tasks.user_id'), $dir); } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } public function task_status(string $value = ''): Builder diff --git a/app/Filters/TaskStatusFilters.php b/app/Filters/TaskStatusFilters.php index 2487a9f5a94a..d8e97ba80611 100644 --- a/app/Filters/TaskStatusFilters.php +++ b/app/Filters/TaskStatusFilters.php @@ -50,7 +50,9 @@ class TaskStatusFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/TaxRateFilters.php b/app/Filters/TaxRateFilters.php index ada581887fc0..a43bc2b63154 100644 --- a/app/Filters/TaxRateFilters.php +++ b/app/Filters/TaxRateFilters.php @@ -50,7 +50,9 @@ class TaxRateFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/TokenFilters.php b/app/Filters/TokenFilters.php index 0093ac4f4183..807016aacaa6 100644 --- a/app/Filters/TokenFilters.php +++ b/app/Filters/TokenFilters.php @@ -56,7 +56,9 @@ class TokenFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/UserFilters.php b/app/Filters/UserFilters.php index 7034dd0cf490..87475f25636f 100644 --- a/app/Filters/UserFilters.php +++ b/app/Filters/UserFilters.php @@ -54,7 +54,9 @@ class UserFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/VendorFilters.php b/app/Filters/VendorFilters.php index 1f3adf6d4d50..e1a8eedacf91 100644 --- a/app/Filters/VendorFilters.php +++ b/app/Filters/VendorFilters.php @@ -69,7 +69,9 @@ class VendorFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /** diff --git a/app/Filters/WebhookFilters.php b/app/Filters/WebhookFilters.php index 1401b3ad1bf1..0619b22bfaaf 100644 --- a/app/Filters/WebhookFilters.php +++ b/app/Filters/WebhookFilters.php @@ -50,7 +50,9 @@ class WebhookFilters extends QueryFilters return $this->builder; } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + + return $this->builder->orderBy($sort_col[0], $dir); } /**