Upadate filters with laravel best practices

This commit is contained in:
Martin Chevignard
2024-10-15 16:20:04 +02:00
parent 022769ba38
commit 168b741936
2 changed files with 34 additions and 38 deletions

View File

@@ -250,51 +250,47 @@ class Invoice extends Model implements HasMedia
{ {
$filters = collect($filters); $filters = collect($filters);
if ($filters->get('search')) { $query->when($filters->get('search'), function ($query, $search) {
$query->whereSearch($filters->get('search')); $query->whereSearch($search);
} });
if ($filters->get('status')) { $query->when($filters->get('status'), function ($query, $status) {
if ( match ($status) {
$filters->get('status') == self::STATUS_UNPAID || self::STATUS_UNPAID, self::STATUS_PARTIALLY_PAID, self::STATUS_PAID => $query->wherePaidStatus($status),
$filters->get('status') == self::STATUS_PARTIALLY_PAID || 'DUE' => $query->whereDueStatus($status),
$filters->get('status') == self::STATUS_PAID default => $query->whereStatus($status),
) { };
$query->wherePaidStatus($filters->get('status')); });
} elseif ($filters->get('status') == 'DUE') {
$query->whereDueStatus($filters->get('status'));
} else {
$query->whereStatus($filters->get('status'));
}
}
if ($filters->get('paid_status')) { $query->when($filters->get('paid_status'), function ($query, $status) {
$query->wherePaidStatus($filters->get('status')); $query->wherePaidStatus($status);
} });
if ($filters->get('invoice_id')) { $query->when($filters->get('invoice_id'), function ($query, $invoiceId) {
$query->whereInvoice($filters->get('invoice_id')); $query->whereInvoice($invoiceId);
} });
if ($filters->get('invoice_number')) { $query->when($filters->get('invoice_number'), function ($query, $invoiceNumber) {
$query->whereInvoiceNumber($filters->get('invoice_number')); $query->whereInvoiceNumber($invoiceNumber);
} });
if ($filters->get('from_date') && $filters->get('to_date')) { $query->when($filters->get('from_date') && $filters->get('to_date'), function ($query) use ($filters) {
$start = Carbon::createFromFormat('Y-m-d', $filters->get('from_date')); $start = Carbon::parse($filters->get('from_date'));
$end = Carbon::createFromFormat('Y-m-d', $filters->get('to_date')); $end = Carbon::parse($filters->get('to_date'));
$query->invoicesBetween($start, $end); $query->invoicesBetween($start, $end);
} });
if ($filters->get('customer_id')) { $query->when($filters->get('customer_id'), function ($query, $customerId) {
$query->whereCustomer($filters->get('customer_id')); $query->where('customer_id', $customerId);
} });
if ($filters->get('orderByField') || $filters->get('orderBy')) { $query->when($filters->get('orderByField') || $filters->get('orderBy'), function ($query) use ($filters) {
$field = $filters->get('orderByField') ? $filters->get('orderByField') : 'sequence_number'; $field = $filters->get('orderByField', 'sequence_number');
$orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'desc'; $orderBy = $filters->get('orderBy', 'desc');
$query->whereOrder($field, $orderBy); $query->orderBy($field, $orderBy);
} });
return $query;
} }
public function scopeWhereInvoice($query, $invoice_id) public function scopeWhereInvoice($query, $invoice_id)

View File

@@ -2,7 +2,7 @@
"private": true, "private": true,
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite --host", "dev": "vite",
"build": "vite build", "build": "vite build",
"serve": "vite preview", "serve": "vite preview",
"test": "eslint ./resources/scripts --ext .js,.vue" "test": "eslint ./resources/scripts --ext .js,.vue"