diff --git a/app/Http/Controllers/Web/StatisticController.php b/app/Http/Controllers/Web/StatisticController.php index 3b32157..3ca67c8 100644 --- a/app/Http/Controllers/Web/StatisticController.php +++ b/app/Http/Controllers/Web/StatisticController.php @@ -23,15 +23,18 @@ class StatisticController extends Controller $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, $isRangeOneDay); + $finalData = $this->statisticsService->getStatisticsData($user, $dateRange->startDate, $dateRange->endDate, $isRangeOneDayQuery); $isHeadOrAdmin = $user->isSeniorStaff() || $user->isEconomist(); // $date = $isHeadOrAdmin ? [ @@ -46,7 +49,7 @@ class StatisticController extends Controller 'isHeadOrAdmin' => $isHeadOrAdmin, 'date' => [ $dateRange->startDate->getTimestampMs(), - $dateRange->displayEnd()->getTimestampMs(), + $isRangeOneDayQuery ? $dateRange->endDate->getTimestampMs() : $dateRange->displayEnd()->getTimestampMs(), ], 'isOneDay' => $isRangeOneDay, 'recipientPlanOfYear' => $finalData['recipientPlanOfYear'], diff --git a/app/Services/DateRangeService.php b/app/Services/DateRangeService.php index 9e1e852..73a4ea4 100644 --- a/app/Services/DateRangeService.php +++ b/app/Services/DateRangeService.php @@ -138,9 +138,9 @@ class DateRangeService $endAlreadyResolved = $endDate->format('H:i:s') === '09:00:00'; if ($startDate->isSameDay($endDate)) { - $startDate = $startDate->subDay()->setTime(9, 0); - $endDate = $endDate->setTime(9, 0); - } else { + $startDate = $startDate->setTime(9, 0); + $endDate = $endDate->addDay()->setTime(9, 0); + } else { $startDate = $startDate->setTime(9, 0); // Смена длится сутки и "принадлежит" дню, в который начинается (см. currentShiftBoundaries). // Поэтому смена последнего выбранного дня захватывает следующие календарные сутки — @@ -159,7 +159,10 @@ class DateRangeService private function getDefaultDateRange($user): array { - [$startDate, $endDate] = $this->currentShiftBoundaries(); + $requestPath = request()->path(); + $switchToday = $requestPath === 'report'; + + [$startDate, $endDate] = $this->currentShiftBoundaries($switchToday); return [ $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'); $todayAt9 = $now->copy()->setTime(9, 0, 0); - if ($now->gte($todayAt9)) { + if ($switchToday && $now->gte($todayAt9)) { return [$todayAt9, $todayAt9->copy()->addDay()]; } diff --git a/app/Services/NurseReportService.php b/app/Services/NurseReportService.php index 3fe4f6b..2506740 100644 --- a/app/Services/NurseReportService.php +++ b/app/Services/NurseReportService.php @@ -50,9 +50,11 @@ class NurseReportService 'rf_user_id' => $user->id, ]; - $existsReport = ReportNurse::where('period_start', $data['period_start']) - ->where('period_end', $data['period_end']) - ->exists(); + $existsReport = ReportNurse::where('report_date', $data['report_date']) + ->where('period_start', $data['period_start']) + ->where('period_end', $data['period_end']) + ->where('rf_department_id', $data['rf_department_id']) + ->exists(); // if ($existsReport) unset($data['rf_lpudoctor_id']); diff --git a/app/Services/StatisticsService.php b/app/Services/StatisticsService.php index 5e69e7d..95bec9c 100644 --- a/app/Services/StatisticsService.php +++ b/app/Services/StatisticsService.php @@ -255,6 +255,8 @@ class StatisticsService $departmentName = $dept->user_name ?? $dept->name_short; + $isReportToday = $lastReport ? Carbon::parse($lastReport->period_end)->isSameDay($endDate) && $lastReport->rf_lpudoctor_id !== 0 : null; + $data = [ 'department' => $departmentName, 'department_id' => $deptId, @@ -305,7 +307,7 @@ class StatisticsService 'lethality' => $lethality, 'type' => $typeName, 'isDepartment' => true, - 'isReportToday' => $lastReport ? Carbon::parse($lastReport->period_end)->isSameDay($endDate) : null, + 'isReportToday' => $isReportToday, ]; $groupedData[$typeName][] = $data;