Правки календаря + получение действующего последнего плана

This commit is contained in:
Brusnitsyn
2026-07-06 15:39:21 +00:00
parent c41df06f43
commit 03103627ab
5 changed files with 23 additions and 4 deletions

View File

@@ -34,7 +34,7 @@ class HeadquartersController extends Controller
'isHeadOrAdmin' => $user->isSeniorStaff() || $user->isEconomist(), 'isHeadOrAdmin' => $user->isSeniorStaff() || $user->isEconomist(),
'date' => [ 'date' => [
$dateRange->startDate->getTimestampMs(), $dateRange->startDate->getTimestampMs(),
$dateRange->endDate->getTimestampMs(), $dateRange->displayEnd()->getTimestampMs(),
], ],
'isOneDay' => $isRangeOneDay, 'isOneDay' => $isRangeOneDay,
]); ]);

View File

@@ -45,7 +45,7 @@ class StatisticController extends Controller
'isHeadOrAdmin' => $isHeadOrAdmin, 'isHeadOrAdmin' => $isHeadOrAdmin,
'date' => [ 'date' => [
$dateRange->startDate->getTimestampMs(), $dateRange->startDate->getTimestampMs(),
$dateRange->endDate->getTimestampMs(), $dateRange->displayEnd()->getTimestampMs(),
], ],
'isOneDay' => $isRangeOneDay, 'isOneDay' => $isRangeOneDay,
'recipientPlanOfYear' => $finalData['recipientPlanOfYear'], 'recipientPlanOfYear' => $finalData['recipientPlanOfYear'],

View File

@@ -50,6 +50,7 @@ class Department extends Model
return $this->metrikaDefault() return $this->metrikaDefault()
->where('date_end', '>', $asOf) ->where('date_end', '>', $asOf)
->where('rf_metrika_item_id', 23) ->where('rf_metrika_item_id', 23)
->orderBy('date_end') // если строк несколько — берём ближайшую действующую, а не произвольную
->first(); ->first();
} }
} }

View File

@@ -12,9 +12,21 @@ readonly class DateRange
public Carbon $endDate, public Carbon $endDate,
public string $startDateRaw, public string $startDateRaw,
public string $endDateRaw, 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 * Получить начало диапазона в Carbon
*/ */

View File

@@ -18,12 +18,18 @@ class DateRangeService
$startCarbon = Carbon::parse($startDate)->setTimeZone('Asia/Yakutsk'); $startCarbon = Carbon::parse($startDate)->setTimeZone('Asia/Yakutsk');
$endCarbon = Carbon::parse($endDate)->setTimeZone('Asia/Yakutsk'); $endCarbon = Carbon::parse($endDate)->setTimeZone('Asia/Yakutsk');
// Для календаря в UI показываем ровно то, что выбрал пользователь — без служебного
// сдвига конца периода на +1 сутки (см. getCustomDateRange). Если конец не передан
// явно (дефолтный диапазон) — сдвига и не было, показываем как есть.
$displayEndCarbon = $endAt ? $this->parseDate($endAt) : $endCarbon;
return new DateRange( return new DateRange(
startDate: $startCarbon, startDate: $startCarbon,
endDate: $endCarbon, endDate: $endCarbon,
startDateRaw: $startDate, startDateRaw: $startDate,
endDateRaw: $endDate, endDateRaw: $endDate,
isOneDay: $this->isRangeOneDay($startDate, $endDate) isOneDay: $this->isRangeOneDay($startDate, $endDate),
displayEndDate: $displayEndCarbon,
); );
} }