Files
onboard/app/Http/Controllers/Web/StatisticController.php
brusnitsyn 27fefb7e54 Исправил индиктор заполнения отчета в статистике
Добавил вывод прошедшего отчета в статистике
Исправил выбор дат в календаре статистики
2026-07-17 13:22:11 +09:00

77 lines
3.4 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');
$queryDateRange = $this->dateService->getDateRangeFromRequest($request, $user, false);
$isRangeOneDayQuery = $this->dateService->isRangeOneDay($queryDateRange->startDate, $queryDateRange->endDate);
$dateRange = $this->dateService->getDateRangeFromRequest($request, $user);
$isRangeOneDay = $this->dateService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
$queryStartOfDateRange = $dateRange->start()->copy()->startOfYear();
// Генерируем ключ кэша на основе параметров запроса
// $cacheKey = $this->generateCacheKey($user, $startDate, $endDate, $isRangeOneDay);
// Получаем данные из кэша или вычисляем
$finalData = $this->statisticsService->getStatisticsData($user, $dateRange->startDate, $dateRange->endDate, $isRangeOneDayQuery);
$isHeadOrAdmin = $user->isSeniorStaff() || $user->isEconomist();
// $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(),
$isRangeOneDayQuery ? $dateRange->endDate->getTimestampMs() : $dateRange->displayEnd()->getTimestampMs(),
],
'isOneDay' => $isRangeOneDay,
'recipientPlanOfYear' => $finalData['recipientPlanOfYear'],
'startOfYear' => $queryStartOfDateRange->format('d.m.Y')
]);
}
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);
$profitTypeData = $user->isEconomist()
? $this->statisticsService->getProfitTypeBreakdown($user, $startDate, $endDate)
: [];
return Excel::download(new StatisticsExport($finalData['data'], [$startDate, $endDate], $user, $profitTypeData), 'statistics.xlsx');
}
}