69 lines
2.7 KiB
PHP
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');
|
|
}
|
|
}
|