Правки календаря + получение действующего последнего плана
This commit is contained in:
@@ -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,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -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'],
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user