getTable()); $dateFrmtr = function (object $row) { $row->date = Carbon::parse($row->date)->isoFormat('DD/MM/YYYY'); return $row; }; /** @var \Illuminate\Support\Collection */ $participationsPerDay = (clone $query) ->selectRaw('COUNT(*) AS count, DATE(created_at) AS date') ->groupByRaw('DATE(created_at)')->get()->map($dateFrmtr)->keyBy('date'); /** @var \Illuminate\Support\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 \Illuminate\Support\Collection */ $participationsUniquePerCustomer = (clone $query) ->selectRaw("DISTINCT customer_id AS user, COUNT(*) AS count") ->groupBy('user')->orderBy('user')->get(); $participationsTotal = Participation::query()->count(); /** @var \Illuminate\Support\Collection 3 codes EAN les plus utilisés */ $codesEan = (clone $query) ->selectRaw('COUNT(product_id) AS nb_usage, product_id') ->groupBy('product_id') ->orderByDesc('nb_usage')->limit(3)->get(); $participationsUniquePerDay->each(function (object $row) use (&$statsUnique) { 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); } // * Création des tableaux avec toutes les dates depuis le début du jeu // * et le nombre de participations associées pour le graph JS. $start_date = $settings->start_date; $end_date = 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)); return view('back::pages.dashboard.index', compact( 'dates', 'count', 'countUnique', 'participationsTotal', 'avgParticipUser', 'codesEan', 'settings' )); } }