Исправил индиктор заполнения отчета в статистике

Добавил вывод прошедшего отчета в статистике
Исправил выбор дат в календаре статистики
This commit is contained in:
brusnitsyn
2026-07-17 13:22:11 +09:00
parent 70ceecd966
commit 27fefb7e54
4 changed files with 22 additions and 12 deletions

View File

@@ -23,15 +23,18 @@ class StatisticController extends Controller
$queryStartDate = $request->query('startAt'); $queryStartDate = $request->query('startAt');
$queryEndDate = $request->query('endAt'); $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); $dateRange = $this->dateService->getDateRangeFromRequest($request, $user);
$isRangeOneDay = $this->dateService->isRangeOneDay($dateRange->startDate, $dateRange->endDate); $isRangeOneDay = $this->dateService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
$queryStartOfDateRange = $dateRange->start()->copy()->startOfYear(); $queryStartOfDateRange = $dateRange->start()->copy()->startOfYear();
// Генерируем ключ кэша на основе параметров запроса // Генерируем ключ кэша на основе параметров запроса
// $cacheKey = $this->generateCacheKey($user, $startDate, $endDate, $isRangeOneDay); // $cacheKey = $this->generateCacheKey($user, $startDate, $endDate, $isRangeOneDay);
// Получаем данные из кэша или вычисляем // Получаем данные из кэша или вычисляем
$finalData = $this->statisticsService->getStatisticsData($user, $dateRange->startDate, $dateRange->endDate, $isRangeOneDay); $finalData = $this->statisticsService->getStatisticsData($user, $dateRange->startDate, $dateRange->endDate, $isRangeOneDayQuery);
$isHeadOrAdmin = $user->isSeniorStaff() || $user->isEconomist(); $isHeadOrAdmin = $user->isSeniorStaff() || $user->isEconomist();
// $date = $isHeadOrAdmin ? [ // $date = $isHeadOrAdmin ? [
@@ -46,7 +49,7 @@ class StatisticController extends Controller
'isHeadOrAdmin' => $isHeadOrAdmin, 'isHeadOrAdmin' => $isHeadOrAdmin,
'date' => [ 'date' => [
$dateRange->startDate->getTimestampMs(), $dateRange->startDate->getTimestampMs(),
$dateRange->displayEnd()->getTimestampMs(), $isRangeOneDayQuery ? $dateRange->endDate->getTimestampMs() : $dateRange->displayEnd()->getTimestampMs(),
], ],
'isOneDay' => $isRangeOneDay, 'isOneDay' => $isRangeOneDay,
'recipientPlanOfYear' => $finalData['recipientPlanOfYear'], 'recipientPlanOfYear' => $finalData['recipientPlanOfYear'],

View File

@@ -138,9 +138,9 @@ class DateRangeService
$endAlreadyResolved = $endDate->format('H:i:s') === '09:00:00'; $endAlreadyResolved = $endDate->format('H:i:s') === '09:00:00';
if ($startDate->isSameDay($endDate)) { if ($startDate->isSameDay($endDate)) {
$startDate = $startDate->subDay()->setTime(9, 0); $startDate = $startDate->setTime(9, 0);
$endDate = $endDate->setTime(9, 0); $endDate = $endDate->addDay()->setTime(9, 0);
} else { } else {
$startDate = $startDate->setTime(9, 0); $startDate = $startDate->setTime(9, 0);
// Смена длится сутки и "принадлежит" дню, в который начинается (см. currentShiftBoundaries). // Смена длится сутки и "принадлежит" дню, в который начинается (см. currentShiftBoundaries).
// Поэтому смена последнего выбранного дня захватывает следующие календарные сутки — // Поэтому смена последнего выбранного дня захватывает следующие календарные сутки —
@@ -159,7 +159,10 @@ class DateRangeService
private function getDefaultDateRange($user): array private function getDefaultDateRange($user): array
{ {
[$startDate, $endDate] = $this->currentShiftBoundaries(); $requestPath = request()->path();
$switchToday = $requestPath === 'report';
[$startDate, $endDate] = $this->currentShiftBoundaries($switchToday);
return [ return [
$startDate->format('Y-m-d H:i:s'), $startDate->format('Y-m-d H:i:s'),
@@ -167,12 +170,12 @@ class DateRangeService
]; ];
} }
private function currentShiftBoundaries(): array private function currentShiftBoundaries(bool $switchToday = false): array
{ {
$now = Carbon::now('Asia/Yakutsk'); $now = Carbon::now('Asia/Yakutsk');
$todayAt9 = $now->copy()->setTime(9, 0, 0); $todayAt9 = $now->copy()->setTime(9, 0, 0);
if ($now->gte($todayAt9)) { if ($switchToday && $now->gte($todayAt9)) {
return [$todayAt9, $todayAt9->copy()->addDay()]; return [$todayAt9, $todayAt9->copy()->addDay()];
} }

View File

@@ -50,9 +50,11 @@ class NurseReportService
'rf_user_id' => $user->id, 'rf_user_id' => $user->id,
]; ];
$existsReport = ReportNurse::where('period_start', $data['period_start']) $existsReport = ReportNurse::where('report_date', $data['report_date'])
->where('period_end', $data['period_end']) ->where('period_start', $data['period_start'])
->exists(); ->where('period_end', $data['period_end'])
->where('rf_department_id', $data['rf_department_id'])
->exists();
// if ($existsReport) unset($data['rf_lpudoctor_id']); // if ($existsReport) unset($data['rf_lpudoctor_id']);

View File

@@ -255,6 +255,8 @@ class StatisticsService
$departmentName = $dept->user_name ?? $dept->name_short; $departmentName = $dept->user_name ?? $dept->name_short;
$isReportToday = $lastReport ? Carbon::parse($lastReport->period_end)->isSameDay($endDate) && $lastReport->rf_lpudoctor_id !== 0 : null;
$data = [ $data = [
'department' => $departmentName, 'department' => $departmentName,
'department_id' => $deptId, 'department_id' => $deptId,
@@ -305,7 +307,7 @@ class StatisticsService
'lethality' => $lethality, 'lethality' => $lethality,
'type' => $typeName, 'type' => $typeName,
'isDepartment' => true, 'isDepartment' => true,
'isReportToday' => $lastReport ? Carbon::parse($lastReport->period_end)->isSameDay($endDate) : null, 'isReportToday' => $isReportToday,
]; ];
$groupedData[$typeName][] = $data; $groupedData[$typeName][] = $data;