diff --git a/app/Domain/Registration/UserRegistrations.php b/app/Domain/Registration/UserRegistrations.php index 57c5ea778..bc3a9f9ea 100644 --- a/app/Domain/Registration/UserRegistrations.php +++ b/app/Domain/Registration/UserRegistrations.php @@ -13,21 +13,26 @@ public function __construct() } public function inRange(HistoryRange $range): array + { + return $this->inRangeColumn($range, 'created_at'); + } + + public function inRangeColumn(HistoryRange $range, string $column): array { return \array_merge( $this->arrayFrom( keys:$this->uniformDates->inRange($range), value:0), - $this->fetchRegistrationsByPeriod($range->startDate(), $range->endDate(), $range->period), + $this->fetchRegistrationsByPeriod($column, $range->startDate(), $range->endDate(), $range->period), ); } - private function fetchRegistrationsByPeriod(string $from, string $to, Period $period): array + private function fetchRegistrationsByPeriod(string $column, string $from, string $to, Period $period): array { - $dateTruncSqlField = $this->dateTruncSqlField($period); + $dateTruncSqlField = $this->dateTruncSqlField($column, $period); return User::withTrashed() - ->where('created_at', '>=', "$from 00:00:00") - ->where('created_at', '<', "$to 24:00:00") + ->where($column, '>=', "$from 00:00:00") + ->where($column, '<', "$to 24:00:00") ->selectRaw("$dateTruncSqlField as created_at_group, Count(*) AS count") ->groupByRaw($dateTruncSqlField) ->get() @@ -35,12 +40,12 @@ private function fetchRegistrationsByPeriod(string $from, string $to, Period $pe ->toArray(); } - private function dateTruncSqlField(Period $period): string + private function dateTruncSqlField(string $column, Period $period): string { return match ($period) { - Period::Week => "date_trunc('week', created_at)::date", - Period::Month => "date_trunc('month', created_at)::date", - Period::Year => "date_trunc('year', created_at)::date", + Period::Week => "date_trunc('week', $column)::date", + Period::Month => "date_trunc('month', $column)::date", + Period::Year => "date_trunc('year', $column)::date", }; } diff --git a/app/Http/Controllers/Adm/DashboardController.php b/app/Http/Controllers/Adm/DashboardController.php index 602a87b8c..de0d872fb 100644 --- a/app/Http/Controllers/Adm/DashboardController.php +++ b/app/Http/Controllers/Adm/DashboardController.php @@ -32,24 +32,33 @@ public function index(UserRegistrations $registrations): View ], ], - 'registrationsChartWeeks' => $this->historyChartHtml($registrations, Period::Week), - 'registrationsChartMonths' => $this->historyChartHtml($registrations, Period::Month), - 'registrationsChartYears' => $this->historyChartHtml($registrations, Period::Year), + 'registrationsChartWeeks' => $this->historyChartHtml($registrations, Period::Week, 'created_at'), + 'registrationsChartMonths' => $this->historyChartHtml($registrations, Period::Month, 'created_at'), + 'registrationsChartYears' => $this->historyChartHtml($registrations, Period::Year, 'created_at'), + + 'leaveChartWeeks' => $this->historyChartHtml($registrations, Period::Week, 'visited_at'), + 'leaveChartMonths' => $this->historyChartHtml($registrations, Period::Month, 'visited_at'), + 'leaveChartYears' => $this->historyChartHtml($registrations, Period::Year, 'visited_at'), ]); } - private function historyChartHtml(UserRegistrations $registrations, Period $period): StringHtml + private function historyChartHtml(UserRegistrations $registrations, Period $period, string $column): StringHtml { return new StringHtml($this->view('adm.registrations-chart', [ - 'chart' => $this->registrationsChart($registrations, $period), + 'chart' => $this->registrationsChart($registrations, $period, $column), 'chartLibrarySource' => Chart::librarySourceHtml(), + 'title' => $column === 'created_at' ? 'Historia rejestracji' : 'Ostatnia wizyta użytkownika', ])); } - private function registrationsChart(UserRegistrations $registrations, Period $period): Chart + private function registrationsChart(UserRegistrations $registrations, Period $period, string $column): Chart { $range = new HistoryRange($this->dateNow(), $period, 30); - return $this->chart($period->name, $registrations->inRange($range)); + return $this->chart( + "$period->name.$column", + $registrations->inRangeColumn($range, $column), + $column === 'created_at', + ); } private function dateNow(): string @@ -57,12 +66,12 @@ private function dateNow(): string return Carbon::now()->toDateString(); } - private function chart(string $chartId, array $registeredUsers): Chart + private function chart(string $chartId, array $registeredUsers, bool $positive): Chart { return new Chart( \array_keys($registeredUsers), \array_values($registeredUsers), - ['#ff9f40'], + [$positive ? '#ff9f40' : '#ff0000'], "registration-history-chart-$chartId", ); } diff --git a/resources/views/adm/dashboard.twig b/resources/views/adm/dashboard.twig index 931b444a5..4115c6901 100644 --- a/resources/views/adm/dashboard.twig +++ b/resources/views/adm/dashboard.twig @@ -40,4 +40,26 @@ {{ registrationsChartYears }} + +
+
+ {{ leaveChartWeeks }} +
+
+ {{ leaveChartMonths }} +
+
+ {{ leaveChartYears }} +
+
{% endblock %} diff --git a/resources/views/adm/registrations-chart.twig b/resources/views/adm/registrations-chart.twig index b2acb2ca7..cc69fe7ad 100644 --- a/resources/views/adm/registrations-chart.twig +++ b/resources/views/adm/registrations-chart.twig @@ -1,7 +1,7 @@ {{ chartLibrarySource }}
- Historia rejestracji + {{ title }}
{{ chart }}