diff --git a/app/Filters/CreditFilters.php b/app/Filters/CreditFilters.php index d9f71a42b8..83f61c9bed 100644 --- a/app/Filters/CreditFilters.php +++ b/app/Filters/CreditFilters.php @@ -150,7 +150,8 @@ class CreditFilters extends QueryFilters $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') + return $this->builder->orderByRaw('ISNULL(client_id), client_id '. $dir) + ->orderBy(\App\Models\Client::select('name') ->whereColumn('clients.id', 'credits.client_id'), $dir); } diff --git a/app/Filters/InvoiceFilters.php b/app/Filters/InvoiceFilters.php index 465a8efb93..8c9d5c11e1 100644 --- a/app/Filters/InvoiceFilters.php +++ b/app/Filters/InvoiceFilters.php @@ -287,11 +287,20 @@ class InvoiceFilters extends QueryFilters if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') + return $this->builder->orderByRaw('ISNULL(client_id), client_id '. $dir) + ->orderBy(\App\Models\Client::select('name') ->whereColumn('clients.id', 'invoices.client_id'), $dir); } + if ($sort_col[0] == 'project_id') { + + return $this->builder->orderByRaw('ISNULL(project_id), project_id '. $dir) + ->orderBy(\App\Models\Project::select('name') + ->whereColumn('projects.id', 'invoices.project_id'), $dir); + + } + if ($sort_col[0] == 'number') { return $this->builder->orderByRaw("REGEXP_REPLACE(invoices.number,'[^0-9]+','')+0 " . $dir); } diff --git a/app/Filters/PaymentFilters.php b/app/Filters/PaymentFilters.php index a3a99b7198..a639484071 100644 --- a/app/Filters/PaymentFilters.php +++ b/app/Filters/PaymentFilters.php @@ -172,7 +172,8 @@ class PaymentFilters extends QueryFilters $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') + return $this->builder->orderByRaw('ISNULL(client_id), client_id '. $dir) + ->orderBy(\App\Models\Client::select('name') ->whereColumn('clients.id', 'payments.client_id'), $dir); } diff --git a/app/Filters/ProjectFilters.php b/app/Filters/ProjectFilters.php index 4a31991063..6c71cc6937 100644 --- a/app/Filters/ProjectFilters.php +++ b/app/Filters/ProjectFilters.php @@ -68,7 +68,8 @@ class ProjectFilters extends QueryFilters $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') + return $this->builder->orderByRaw('ISNULL(client_id), client_id '. $dir) + ->orderBy(\App\Models\Client::select('name') ->whereColumn('clients.id', 'projects.client_id'), $dir); } diff --git a/app/Filters/QuoteFilters.php b/app/Filters/QuoteFilters.php index 268a1656d2..e7e5f7352b 100644 --- a/app/Filters/QuoteFilters.php +++ b/app/Filters/QuoteFilters.php @@ -173,7 +173,8 @@ class QuoteFilters extends QueryFilters } if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') + return $this->builder->orderByRaw('ISNULL(client_id), client_id '. $dir) + ->orderBy(\App\Models\Client::select('name') ->whereColumn('clients.id', 'quotes.client_id'), $dir); } diff --git a/app/Filters/RecurringInvoiceFilters.php b/app/Filters/RecurringInvoiceFilters.php index 7ff19f1b01..9cbfe8231a 100644 --- a/app/Filters/RecurringInvoiceFilters.php +++ b/app/Filters/RecurringInvoiceFilters.php @@ -141,7 +141,8 @@ class RecurringInvoiceFilters extends QueryFilters $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') + return $this->builder->orderByRaw('ISNULL(client_id), client_id '. $dir) + ->orderBy(\App\Models\Client::select('name') ->whereColumn('clients.id', 'recurring_invoices.client_id'), $dir); } diff --git a/app/Filters/TaskFilters.php b/app/Filters/TaskFilters.php index 3519ff2d88..b5a32d211f 100644 --- a/app/Filters/TaskFilters.php +++ b/app/Filters/TaskFilters.php @@ -138,12 +138,14 @@ class TaskFilters extends QueryFilters $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; if ($sort_col[0] == 'client_id') { - return $this->builder->orderBy(\App\Models\Client::select('name') + return $this->builder->orderByRaw('ISNULL(client_id), client_id '. $dir) + ->orderBy(\App\Models\Client::select('name') ->whereColumn('clients.id', 'tasks.client_id'), $dir); } if ($sort_col[0] == 'user_id') { - return $this->builder->orderBy(\App\Models\User::select('first_name') + return $this->builder->orderByRaw('ISNULL(user_id), user_id '. $dir) + ->orderBy(\App\Models\User::select('first_name') ->whereColumn('users.id', 'tasks.user_id'), $dir); } diff --git a/app/Transformers/InvoiceTransformer.php b/app/Transformers/InvoiceTransformer.php index c8bd748899..60d724f50e 100644 --- a/app/Transformers/InvoiceTransformer.php +++ b/app/Transformers/InvoiceTransformer.php @@ -12,15 +12,16 @@ namespace App\Transformers; -use App\Models\Activity; use App\Models\Backup; use App\Models\Client; use App\Models\Credit; -use App\Models\Document; use App\Models\Invoice; -use App\Models\InvoiceInvitation; use App\Models\Payment; +use App\Models\Project; +use App\Models\Activity; +use App\Models\Document; use App\Utils\Traits\MakesHash; +use App\Models\InvoiceInvitation; class InvoiceTransformer extends EntityTransformer { @@ -36,6 +37,7 @@ class InvoiceTransformer extends EntityTransformer 'client', 'activities', 'location', + 'project', ]; public function includeLocation(Invoice $invoice) @@ -70,6 +72,17 @@ class InvoiceTransformer extends EntityTransformer return $this->includeItem($invoice->client, $transformer, Client::class); } + public function includeProject(Invoice $invoice) + { + $transformer = new ProjectTransformer($this->serializer); + + if (!$invoice->project) { + return null; + } + + return $this->includeItem($invoice->project, $transformer, Project::class); + } + public function includePayments(Invoice $invoice) { $transformer = new PaymentTransformer($this->serializer);