has('service')) { /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\ServiceStat> */ $stats = ServiceStat::query() ->with('service') ->whereDate('date', '>=', $request->start) ->whereDate('date', '<=', $request->end) ->whereHas('service', fn (Builder $q) => $q->where('id', $request->service)) ->get(); } return view('bo.pages.stats.view-stats-by-services', \compact('stats')); } /** * Exports stats by service as a csv file. * * @param \App\Http\Requests\Bo\StatsByServiceRequest $request * @return \Illuminate\Http\Response */ public function exportByBrandCsv(StatsByServiceRequest $request): Response { /** @var \App\Models\Service */ $service = Service::query()->findOrFail($request->service); /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\ServiceStat> */ $stats = ServiceStat::query() ->with('service.arcadiaBrand') ->whereDate('date', '>=', $request->start) ->whereDate('date', '<=', $request->end) ->whereHas('service', fn (Builder $q) => $q->where('id', $request->service)) ->get(); $columns = Schema::getColumnListing((new ServiceStat())->getTable()); $columns = Arr::where($columns, fn ($value) => !in_array($value, ['date', 'service_id'])); /** @var array $columns */ $header = '"date";"service";' . implode(';', $columns); $w = Writer::createFromString($header . PHP_EOL); $w->setDelimiter(';'); $w->setEnclosure('"'); $w->setOutputBOM(Writer::BOM_UTF8); /** @var \App\Models\ServiceStat $stat */ foreach ($stats as $stat) { /** @var array $cols */ $cols = [ $stat->date->isoFormat('YYYY-MM-DD'), $service->label ]; foreach ($columns as $colname) { $cols[] = $stat->{$colname}; } $w->insertOne($cols); } return response((string)$w, 200, [ 'Content-Encoding' => 'none', 'Content-Type' => 'text/csv; charset=UTF-8', // phpcs:ignore Generic.Files.LineLength.TooLong 'Content-Disposition' => "attachment; filename=\"Statistiques du {$request->start} au {$request->end} pour {$service->name}.csv\"", 'Content-Description' => 'File Transfer', ]); } }