Files
onboard/app/Http/Controllers/Web/StatisticController.php
brusnitsyn 739168d427 Обновлен стартовый экран
Переписаны запросы для статистики, отчетов
Добавлена интеграция отчета сестры
2026-05-28 22:10:00 +09:00

69 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers\Web;
use App\Exports\StatisticsExport;
use App\Http\Controllers\Controller;
use App\Services\DateRangeService;
use App\Services\StatisticsService;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Maatwebsite\Excel\Facades\Excel;
class StatisticController extends Controller
{
public function __construct(
protected DateRangeService $dateService,
protected StatisticsService $statisticsService
) {}
public function index(Request $request)
{
$user = $request->user();
$queryStartDate = $request->query('startAt');
$queryEndDate = $request->query('endAt');
$dateRange = $this->dateService->getDateRangeFromRequest($request, $user);
$isRangeOneDay = $this->dateService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
// Генерируем ключ кэша на основе параметров запроса
// $cacheKey = $this->generateCacheKey($user, $startDate, $endDate, $isRangeOneDay);
// Получаем данные из кэша или вычисляем
$finalData = $this->statisticsService->getStatisticsData($user, $dateRange->startDate, $dateRange->endDate, $isRangeOneDay);
$isHeadOrAdmin = $user->isSeniorStaff();
// $date = $isHeadOrAdmin ? [
// $this->dateService->parseDate($isRangeOneDay ? $dateRange->endDate : $dateRange->startDate)->getTimestampMs(),
// $this->dateService->parseDate($dateRange->endDate)->getTimestampMs(),
// ] : $this->dateService->parseDate($dateRange->endDate)->getTimestampMs();
return Inertia::render('Statistic/Index', [
'data' => $finalData['data'],
'totalsByType' => $finalData['totalsByType'],
'grandTotals' => $finalData['grandTotals'],
'isHeadOrAdmin' => $isHeadOrAdmin,
'date' => [
$dateRange->startDate->getTimestampMs(),
$dateRange->endDate->getTimestampMs(),
],
'isOneDay' => $isRangeOneDay,
'recipientPlanOfYear' => $finalData['recipientPlanOfYear'],
]);
}
public function report(Request $request)
{
$user = $request->user();
$queryStartDate = $request->query('startAt');
$queryEndDate = $request->query('endAt');
[$startDate, $endDate] = $this->dateService->getStatisticsDateRange($user, $queryStartDate, $queryEndDate);
$isRangeOneDay = $this->dateService->isRangeOneDay($startDate, $endDate);
$finalData = $this->statisticsService->getStatisticsData($user, $startDate, $endDate, $isRangeOneDay);
return Excel::download(new StatisticsExport($finalData['data'], [$startDate, $endDate]), 'statistics.xlsx');
}
}