Allow filtering on multiple date ranges for invoices

This commit is contained in:
David Bomba 2024-01-21 13:00:33 +11:00
parent e8ffad5f0e
commit c17a65e7a0

View File

@ -247,24 +247,25 @@ class InvoiceFilters extends QueryFilters
return $this->builder->where('due_date', '>=', $date); return $this->builder->where('due_date', '>=', $date);
} }
/**
* Filter by date range
*
* @param string $date_range
* @return Builder
*/
public function date_range(string $date_range = ''): Builder public function date_range(string $date_range = ''): Builder
{ {
$parts = explode(",", $date_range); $parts = explode(",", $date_range);
if (count($parts) != 3) { if (count($parts) != 2) {
return $this->builder; return $this->builder;
} }
if(!in_array($parts[0], ['date','due_date'])) {
return $this->builder;
}
try { try {
$start_date = Carbon::parse($parts[1]); $start_date = Carbon::parse($parts[0]);
$end_date = Carbon::parse($parts[2]); $end_date = Carbon::parse($parts[1]);
return $this->builder->whereBetween($parts[0], [$start_date, $end_date]); return $this->builder->whereBetween('date', [$start_date, $end_date]);
} catch(\Exception $e) { } catch(\Exception $e) {
return $this->builder; return $this->builder;
} }
@ -272,6 +273,33 @@ class InvoiceFilters extends QueryFilters
return $this->builder; return $this->builder;
} }
/**
* Filter by due date range
*
* @param string $date_range
* @return Builder
*/
public function due_date_range(string $date_range = ''): Builder
{
$parts = explode(",", $date_range);
if (count($parts) != 2) {
return $this->builder;
}
try {
$start_date = Carbon::parse($parts[0]);
$end_date = Carbon::parse($parts[1]);
return $this->builder->whereBetween('date', [$start_date, $end_date]);
} catch(\Exception $e) {
return $this->builder;
}
return $this->builder;
}
/** /**
* Sorts the list based on $sort. * Sorts the list based on $sort.
* *