Add cast ABS when sorting lists by number

This commit is contained in:
David Bomba 2024-02-13 13:57:04 +11:00
parent 2a33bb31e2
commit 169c1074f2
11 changed files with 62 additions and 12 deletions

View File

@ -165,6 +165,11 @@ class ClientFilters extends QueryFilters
$dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; $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); return $this->builder->orderBy($sort_col[0], $dir);
} }

View File

@ -146,6 +146,11 @@ class CreditFilters extends QueryFilters
->whereColumn('clients.id', 'credits.client_id'), $dir); ->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); return $this->builder->orderBy($sort_col[0], $dir);
} }

View File

@ -172,6 +172,8 @@ class ExpenseFilters extends QueryFilters
return $this->builder; return $this->builder;
} }
$dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc';
if ($sort_col[0] == 'client_id' && in_array($sort_col[1], ['asc', 'desc'])) { if ($sort_col[0] == 'client_id' && in_array($sort_col[1], ['asc', 'desc'])) {
return $this->builder return $this->builder
->orderByRaw('ISNULL(client_id), client_id '. $sort_col[1]) ->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]); ->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'])) { 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]); return $this->builder->orderBy($sort_col[0], $sort_col[1]);
} }

View File

@ -323,6 +323,11 @@ class InvoiceFilters extends QueryFilters
} }
if($sort_col[0] == 'number')
{
return $this->builder->orderByRaw('ABS(number) ' . $dir);
}
return $this->builder->orderBy($sort_col[0], $dir); return $this->builder->orderBy($sort_col[0], $dir);
} }

View File

@ -167,14 +167,18 @@ class PaymentFilters extends QueryFilters
return $this->builder; return $this->builder;
} }
$dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc';
if ($sort_col[0] == 'client_id') { 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', '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 public function date_range(string $date_range = ''): Builder

View File

@ -60,20 +60,23 @@ class ProjectFilters extends QueryFilters
{ {
$sort_col = explode('|', $sort); $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) { if (!is_array($sort_col) || count($sort_col) != 2) {
return $this->builder; return $this->builder;
} }
if (is_array($sort_col) && in_array($sort_col[1], ['asc','desc'])) { $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc';
return $this->builder->orderBy($sort_col[0], $sort_col[1]);
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);
} }
/** /**

View File

@ -130,6 +130,10 @@ class PurchaseOrderFilters extends QueryFilters
->whereColumn('vendors.id', 'purchase_orders.vendor_id'), $dir); ->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); return $this->builder->orderBy($sort_col[0], $dir);
} }

View File

@ -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') { if ($sort_col[0] == 'valid_until') {
$sort_col[0] = 'due_date'; $sort_col[0] = 'due_date';
} }

View File

@ -140,6 +140,8 @@ class RecurringExpenseFilters extends QueryFilters
return $this->builder; return $this->builder;
} }
$dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc';
if ($sort_col[0] == 'client_id' && in_array($sort_col[1], ['asc', 'desc'])) { if ($sort_col[0] == 'client_id' && in_array($sort_col[1], ['asc', 'desc'])) {
return $this->builder return $this->builder
->orderByRaw('ISNULL(client_id), client_id '. $sort_col[1]) ->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]); ->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'])) { 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]); return $this->builder->orderBy($sort_col[0], $sort_col[1]);
} }

View File

@ -143,6 +143,10 @@ class TaskFilters extends QueryFilters
->whereColumn('users.id', 'tasks.user_id'), $dir); ->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); return $this->builder->orderBy($sort_col[0], $dir);
} }

View File

@ -71,6 +71,10 @@ class VendorFilters extends QueryFilters
$dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; $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); return $this->builder->orderBy($sort_col[0], $dir);
} }