diff --git a/app/Filters/ClientFilters.php b/app/Filters/ClientFilters.php index 559ef41c9cd4..a3504cce4e45 100644 --- a/app/Filters/ClientFilters.php +++ b/app/Filters/ClientFilters.php @@ -165,6 +165,11 @@ class ClientFilters extends QueryFilters $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if($sort_col[0] == 'number') + { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + return $this->builder->orderBy($sort_col[0], $dir); } diff --git a/app/Filters/CreditFilters.php b/app/Filters/CreditFilters.php index 8848318066e3..cee9b9b8d358 100644 --- a/app/Filters/CreditFilters.php +++ b/app/Filters/CreditFilters.php @@ -146,6 +146,11 @@ class CreditFilters extends QueryFilters ->whereColumn('clients.id', 'credits.client_id'), $dir); } + + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + return $this->builder->orderBy($sort_col[0], $dir); } diff --git a/app/Filters/ExpenseFilters.php b/app/Filters/ExpenseFilters.php index c9cddb8dc793..040fd375ace2 100644 --- a/app/Filters/ExpenseFilters.php +++ b/app/Filters/ExpenseFilters.php @@ -172,6 +172,8 @@ class ExpenseFilters extends QueryFilters return $this->builder; } + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if ($sort_col[0] == 'client_id' && in_array($sort_col[1], ['asc', 'desc'])) { return $this->builder ->orderByRaw('ISNULL(client_id), client_id '. $sort_col[1]) @@ -194,6 +196,10 @@ class ExpenseFilters extends QueryFilters ->whereColumn('expense_categories.id', 'expenses.category_id'), $sort_col[1]); } + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + if (is_array($sort_col) && in_array($sort_col[1], ['asc', 'desc']) && in_array($sort_col[0], ['public_notes', 'date', 'id_number', 'custom_value1', 'custom_value2', 'custom_value3', 'custom_value4'])) { return $this->builder->orderBy($sort_col[0], $sort_col[1]); } diff --git a/app/Filters/InvoiceFilters.php b/app/Filters/InvoiceFilters.php index f7c11e369f54..aa0c51f0defc 100644 --- a/app/Filters/InvoiceFilters.php +++ b/app/Filters/InvoiceFilters.php @@ -318,11 +318,16 @@ class InvoiceFilters extends QueryFilters if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') + return $this->builder->orderBy(\App\Models\Client::select ('name') ->whereColumn('clients.id', 'invoices.client_id'), $dir); } + if($sort_col[0] == 'number') + { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + return $this->builder->orderBy($sort_col[0], $dir); } diff --git a/app/Filters/PaymentFilters.php b/app/Filters/PaymentFilters.php index edef4df47329..038bc114375c 100644 --- a/app/Filters/PaymentFilters.php +++ b/app/Filters/PaymentFilters.php @@ -167,14 +167,18 @@ class PaymentFilters 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', 'payments.client_id'), $sort_col[1]); + ->whereColumn('clients.id', 'payments.client_id'), $dir); } + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + return $this->builder->orderBy($sort_col[0], $dir); } public function date_range(string $date_range = ''): Builder diff --git a/app/Filters/ProjectFilters.php b/app/Filters/ProjectFilters.php index fdf778aa49af..cd4015596903 100644 --- a/app/Filters/ProjectFilters.php +++ b/app/Filters/ProjectFilters.php @@ -59,21 +59,24 @@ class ProjectFilters extends QueryFilters public function sort(string $sort = ''): Builder { $sort_col = explode('|', $sort); - - if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') - ->whereColumn('clients.id', 'projects.client_id'), $sort_col[1]); - } - + if (!is_array($sort_col) || count($sort_col) != 2) { return $this->builder; } - if (is_array($sort_col) && in_array($sort_col[1], ['asc','desc'])) { - return $this->builder->orderBy($sort_col[0], $sort_col[1]); + $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', 'projects.client_id'), $dir); } - return $this->builder; + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + + return $this->builder->orderBy($sort_col[0], $dir); + } /** diff --git a/app/Filters/PurchaseOrderFilters.php b/app/Filters/PurchaseOrderFilters.php index 952e1514631d..5c1c1b460e4c 100644 --- a/app/Filters/PurchaseOrderFilters.php +++ b/app/Filters/PurchaseOrderFilters.php @@ -130,6 +130,10 @@ class PurchaseOrderFilters extends QueryFilters ->whereColumn('vendors.id', 'purchase_orders.vendor_id'), $dir); } + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + return $this->builder->orderBy($sort_col[0], $dir); } diff --git a/app/Filters/QuoteFilters.php b/app/Filters/QuoteFilters.php index e06562ee5eb0..db1985b6918a 100644 --- a/app/Filters/QuoteFilters.php +++ b/app/Filters/QuoteFilters.php @@ -155,6 +155,10 @@ class QuoteFilters extends QueryFilters } + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + if ($sort_col[0] == 'valid_until') { $sort_col[0] = 'due_date'; } diff --git a/app/Filters/RecurringExpenseFilters.php b/app/Filters/RecurringExpenseFilters.php index b8f3825dc5e3..c342625379fc 100644 --- a/app/Filters/RecurringExpenseFilters.php +++ b/app/Filters/RecurringExpenseFilters.php @@ -140,6 +140,8 @@ class RecurringExpenseFilters extends QueryFilters return $this->builder; } + $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if ($sort_col[0] == 'client_id' && in_array($sort_col[1], ['asc', 'desc'])) { return $this->builder ->orderByRaw('ISNULL(client_id), client_id '. $sort_col[1]) @@ -162,6 +164,10 @@ class RecurringExpenseFilters extends QueryFilters ->whereColumn('expense_categories.id', 'expenses.category_id'), $sort_col[1]); } + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + if (is_array($sort_col) && in_array($sort_col[1], ['asc', 'desc']) && in_array($sort_col[0], ['public_notes', 'date', 'id_number', 'custom_value1', 'custom_value2', 'custom_value3', 'custom_value4'])) { return $this->builder->orderBy($sort_col[0], $sort_col[1]); } diff --git a/app/Filters/TaskFilters.php b/app/Filters/TaskFilters.php index 9743fc63ca49..09cac473e009 100644 --- a/app/Filters/TaskFilters.php +++ b/app/Filters/TaskFilters.php @@ -143,6 +143,10 @@ class TaskFilters extends QueryFilters ->whereColumn('users.id', 'tasks.user_id'), $dir); } + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + return $this->builder->orderBy($sort_col[0], $dir); } diff --git a/app/Filters/VendorFilters.php b/app/Filters/VendorFilters.php index e1a8eedacf91..ffb428dbf1c3 100644 --- a/app/Filters/VendorFilters.php +++ b/app/Filters/VendorFilters.php @@ -71,6 +71,10 @@ class VendorFilters extends QueryFilters $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; + if($sort_col[0] == 'number') { + return $this->builder->orderByRaw('ABS(number) ' . $dir); + } + return $this->builder->orderBy($sort_col[0], $dir); }