From 03103627abf73edcfa8655cecfda52c83ae55c26 Mon Sep 17 00:00:00 2001 From: Brusnitsyn Date: Mon, 6 Jul 2026 15:39:21 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=B4=D0=B0=D1=80=D1=8F=20+=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B5=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD=D0=B5=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Web/HeadquartersController.php | 2 +- app/Http/Controllers/Web/StatisticController.php | 2 +- app/Models/Department.php | 1 + app/Services/DateRange.php | 14 +++++++++++++- app/Services/DateRangeService.php | 8 +++++++- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Web/HeadquartersController.php b/app/Http/Controllers/Web/HeadquartersController.php index 2e52f58..b227cff 100644 --- a/app/Http/Controllers/Web/HeadquartersController.php +++ b/app/Http/Controllers/Web/HeadquartersController.php @@ -34,7 +34,7 @@ class HeadquartersController extends Controller 'isHeadOrAdmin' => $user->isSeniorStaff() || $user->isEconomist(), 'date' => [ $dateRange->startDate->getTimestampMs(), - $dateRange->endDate->getTimestampMs(), + $dateRange->displayEnd()->getTimestampMs(), ], 'isOneDay' => $isRangeOneDay, ]); diff --git a/app/Http/Controllers/Web/StatisticController.php b/app/Http/Controllers/Web/StatisticController.php index 94ca6a4..d057afe 100644 --- a/app/Http/Controllers/Web/StatisticController.php +++ b/app/Http/Controllers/Web/StatisticController.php @@ -45,7 +45,7 @@ class StatisticController extends Controller 'isHeadOrAdmin' => $isHeadOrAdmin, 'date' => [ $dateRange->startDate->getTimestampMs(), - $dateRange->endDate->getTimestampMs(), + $dateRange->displayEnd()->getTimestampMs(), ], 'isOneDay' => $isRangeOneDay, 'recipientPlanOfYear' => $finalData['recipientPlanOfYear'], diff --git a/app/Models/Department.php b/app/Models/Department.php index 7565c26..76efe4a 100644 --- a/app/Models/Department.php +++ b/app/Models/Department.php @@ -50,6 +50,7 @@ class Department extends Model return $this->metrikaDefault() ->where('date_end', '>', $asOf) ->where('rf_metrika_item_id', 23) + ->orderBy('date_end') // если строк несколько — берём ближайшую действующую, а не произвольную ->first(); } } diff --git a/app/Services/DateRange.php b/app/Services/DateRange.php index 5e15c8c..e72183e 100644 --- a/app/Services/DateRange.php +++ b/app/Services/DateRange.php @@ -12,9 +12,21 @@ readonly class DateRange public Carbon $endDate, public string $startDateRaw, public string $endDateRaw, - public bool $isOneDay + public bool $isOneDay, + // То, что реально выбрал пользователь в календаре — без служебного сдвига + // конца периода на +1 сутки (см. DateRangeService::getCustomDateRange). + // Используется только для отображения в UI, а не для запросов в БД. + public ?Carbon $displayEndDate = null, ) {} + /** + * Конец периода для отображения в календаре (без служебного сдвига на +1 сутки) + */ + public function displayEnd(): Carbon + { + return $this->displayEndDate ?? $this->endDate; + } + /** * Получить начало диапазона в Carbon */ diff --git a/app/Services/DateRangeService.php b/app/Services/DateRangeService.php index aedf2f0..022303c 100644 --- a/app/Services/DateRangeService.php +++ b/app/Services/DateRangeService.php @@ -18,12 +18,18 @@ class DateRangeService $startCarbon = Carbon::parse($startDate)->setTimeZone('Asia/Yakutsk'); $endCarbon = Carbon::parse($endDate)->setTimeZone('Asia/Yakutsk'); + // Для календаря в UI показываем ровно то, что выбрал пользователь — без служебного + // сдвига конца периода на +1 сутки (см. getCustomDateRange). Если конец не передан + // явно (дефолтный диапазон) — сдвига и не было, показываем как есть. + $displayEndCarbon = $endAt ? $this->parseDate($endAt) : $endCarbon; + return new DateRange( startDate: $startCarbon, endDate: $endCarbon, startDateRaw: $startDate, endDateRaw: $endDate, - isOneDay: $this->isRangeOneDay($startDate, $endDate) + isOneDay: $this->isRangeOneDay($startDate, $endDate), + displayEndDate: $displayEndCarbon, ); }