getTable()); $dateFrmtr = function (object $row): object { $row->date = Date::parse($row->date)->isoFormat('DD/MM/YYYY'); return $row; }; /** @var Collection */ $participationsPerDay = (clone $query) ->selectRaw('COUNT(*) AS count, DATE(created_at) AS date') ->groupByRaw('DATE(created_at)')->get()->map($dateFrmtr)->keyBy('date'); /** @var Collection */ $participationsUniquePerDay = (clone $query) ->selectRaw('DISTINCT customer_id AS user, COUNT(*) AS count, DATE(created_at) AS date') ->groupByRaw('DATE(created_at), user')->get()->map($dateFrmtr); /** @var Collection */ $participationsUniquePerCustomer = (clone $query) ->selectRaw('DISTINCT customer_id AS user, COUNT(*) AS count') ->groupBy('user')->orderBy('user')->get(); $participationsTotal = Participation::query()->count(); /** @var Collection 3 codes EAN les plus utilisés */ $codesEan = (clone $query) ->selectRaw('COUNT(product_id) AS nb_usage, product_id, ean_code') ->join('products', 'product_id', '=', 'products.id') ->groupBy('product_id', 'ean_code') ->orderByDesc('nb_usage')->limit(3)->get(); $participationsUniquePerDay->each(function (object $row) use (&$statsUnique): void { Arr::set($statsUnique, $row->date, (Arr::get($statsUnique, $row->date) ?? 0) + 1); }); // * Calcul participation moyenne par utilisateur. if ($participationsUniquePerCustomer->count() > 0) { $avgParticipUser = round($participationsTotal / $participationsUniquePerCustomer->count(), 1); } now()->lt($settings->end_date) ? now() : $settings->end_date; $dates = $participationsPerDay->keys(); $count = $participationsPerDay->pluck('count'); $countUnique = $dates->map(fn (string $formated_date) => Arr::get($statsUnique, $formated_date, 0)); /** @var view-string $view */ $view = 'back::pages.dashboard.index'; return view($view, [ 'dates' => $dates, 'count' => $count, 'countUnique' => $countUnique, 'participationsTotal' => $participationsTotal, 'avgParticipUser' => $avgParticipUser, 'codesEan' => $codesEan, 'settings' => $settings, ]); } }