¨4.0.1¨

This commit is contained in:
¨NW¨
2023-12-03 14:07:47 +00:00
parent c08b36d1b6
commit f35052522d
1112 changed files with 43019 additions and 24987 deletions

View File

@@ -11,14 +11,6 @@ abstract class Report
protected $groups = ['years', 'months', 'weeks', 'days'];
protected $date = 'created_at';
abstract protected function view();
abstract protected function query();
protected function data()
{
return [];
}
public function render($request)
{
@@ -30,6 +22,7 @@ abstract class Report
->with(array_merge(compact('report'), $this->data()));
}
public function report($request)
{
$this->query = $this->query();
@@ -41,28 +34,45 @@ abstract class Report
return $this->query;
}
abstract protected function query();
abstract protected function view();
protected function data()
{
return [];
}
private function filters($request)
{
return array_filter($request->query(), function ($value, $name) {
return ! is_null($value) && in_array($name, $this->filters);
return !is_null($value) && in_array($name, $this->filters);
}, ARRAY_FILTER_USE_BOTH);
}
private function from($date)
{
$this->query->whereDate($this->date, '>=', Carbon::parse($date));
}
private function to($date)
{
$this->query->whereDate($this->date, '<=', Carbon::parse($date));
}
private function status($status)
{
$this->query->where('orders.status', $status);
}
private function group($group)
{
if (in_array($group, $this->groups)) {
@@ -70,31 +80,12 @@ abstract class Report
}
}
private function groupByYears()
{
$this->groupAndOrderBy('YEAR');
}
private function groupByMonths()
{
$this->groupAndOrderBy('YEAR')
->groupAndOrderBy('MONTH');
}
private function groupByWeeks()
{
$this->groupAndOrderBy('YEAR')
->groupAndOrderBy('MONTH')
->groupAndOrderBy('WEEK');
}
private function groupByDays()
{
$this->groupAndOrderBy('YEAR')
->groupAndOrderBy('MONTH')
->groupAndOrderBy('WEEK')
->groupAndOrderBy('DAY');
}
private function groupAndOrderBy($part)
{
@@ -104,4 +95,28 @@ abstract class Report
return $this;
}
private function groupByMonths()
{
$this->groupAndOrderBy('YEAR')
->groupAndOrderBy('MONTH');
}
private function groupByWeeks()
{
$this->groupAndOrderBy('YEAR')
->groupAndOrderBy('MONTH')
->groupAndOrderBy('WEEK');
}
private function groupByDays()
{
$this->groupAndOrderBy('YEAR')
->groupAndOrderBy('MONTH')
->groupAndOrderBy('WEEK')
->groupAndOrderBy('DAY');
}
}