66 lines
2.6 KiB
PHP
66 lines
2.6 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');
|
|
[$startDate, $endDate] = $this->dateService->getStatisticsDateRange($user, $queryStartDate, $queryEndDate);
|
|
$isRangeOneDay = $this->dateService->isRangeOneDay($startDate, $endDate);
|
|
|
|
// Генерируем ключ кэша на основе параметров запроса
|
|
// $cacheKey = $this->generateCacheKey($user, $startDate, $endDate, $isRangeOneDay);
|
|
|
|
// Получаем данные из кэша или вычисляем
|
|
$finalData = $this->statisticsService->getStatisticsData($user, $startDate, $endDate, $isRangeOneDay);
|
|
|
|
$isHeadOrAdmin = $user->isAdmin() || $user->isHeadOfDepartment();
|
|
$date = $isHeadOrAdmin ? [
|
|
$this->dateService->parseDate($isRangeOneDay ? $endDate : $startDate)->getTimestampMs(),
|
|
$this->dateService->parseDate($endDate)->getTimestampMs(),
|
|
] : $this->dateService->parseDate($endDate)->getTimestampMs();
|
|
|
|
return Inertia::render('Statistic/Index', [
|
|
'data' => $finalData['data'],
|
|
'totalsByType' => $finalData['totalsByType'],
|
|
'grandTotals' => $finalData['grandTotals'],
|
|
'isHeadOrAdmin' => $isHeadOrAdmin,
|
|
'date' => $date,
|
|
'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');
|
|
}
|
|
}
|