Обновлен стартовый экран
Переписаны запросы для статистики, отчетов Добавлена интеграция отчета сестры
This commit is contained in:
@@ -47,16 +47,14 @@ class DateRangeService
|
||||
{
|
||||
$endAtInput = $request->query('endAt', $request->get('endAt'));
|
||||
$startAtInput = $request->query('startAt', $request->get('startAt'));
|
||||
$endDate = $endAtInput
|
||||
? $this->parseDate($endAtInput)
|
||||
: Carbon::now('Asia/Yakutsk');
|
||||
|
||||
$startDate = $startAtInput
|
||||
? $this->parseDate($startAtInput)
|
||||
: Carbon::now('Asia/Yakutsk');
|
||||
|
||||
$endDate = $endDate->copy()->setTime(9, 0);
|
||||
$startDate = $startDate->copy()->subDay()->setTime(9, 0);
|
||||
if (!$endAtInput && !$startAtInput) {
|
||||
[$startDate, $endDate] = $this->currentShiftBoundaries();
|
||||
} else {
|
||||
$endDate = ($endAtInput ? $this->parseDate($endAtInput) : Carbon::now('Asia/Yakutsk'))
|
||||
->copy()->setTime(9, 0);
|
||||
$startDate = ($startAtInput ? $this->parseDate($startAtInput) : Carbon::now('Asia/Yakutsk'))
|
||||
->copy()->subDay()->setTime(9, 0);
|
||||
}
|
||||
|
||||
return new DateRange(
|
||||
startDate: $startDate,
|
||||
@@ -138,12 +136,7 @@ class DateRangeService
|
||||
|
||||
private function getDefaultDateRange($user): array
|
||||
{
|
||||
$startDate = Carbon::now('Asia/Yakutsk')
|
||||
->subDay()
|
||||
->setTime(9, 0);
|
||||
|
||||
$endDate = Carbon::now('Asia/Yakutsk')
|
||||
->setTime(9, 0);
|
||||
[$startDate, $endDate] = $this->currentShiftBoundaries();
|
||||
|
||||
return [
|
||||
$startDate->format('Y-m-d H:i:s'),
|
||||
@@ -151,6 +144,18 @@ class DateRangeService
|
||||
];
|
||||
}
|
||||
|
||||
private function currentShiftBoundaries(): array
|
||||
{
|
||||
$now = Carbon::now('Asia/Yakutsk');
|
||||
$todayAt9 = $now->copy()->setTime(9, 0, 0);
|
||||
|
||||
if ($now->gte($todayAt9)) {
|
||||
return [$todayAt9, $todayAt9->copy()->addDay()];
|
||||
}
|
||||
|
||||
return [$todayAt9->copy()->subDay(), $todayAt9];
|
||||
}
|
||||
|
||||
public function parseDate($dateInput): Carbon
|
||||
{
|
||||
if (is_numeric($dateInput)) {
|
||||
@@ -214,7 +219,26 @@ class DateRangeService
|
||||
*/
|
||||
public function isPastPeriod(DateRange $dateRange): bool
|
||||
{
|
||||
// Период считается "прошлым", если его конец строго раньше начала текущих суток
|
||||
return $dateRange->end()->lt(now()->startOfDay());
|
||||
$periodStart = $dateRange->start();
|
||||
$now = now();
|
||||
|
||||
// Получаем начало текущей смены (сегодня 09:00)
|
||||
$currentShiftStart = $now->copy()->setTime(9, 0, 0);
|
||||
if ($now->lt($currentShiftStart)) {
|
||||
$currentShiftStart->subDay();
|
||||
}
|
||||
|
||||
// Если период начался ДО начала текущей смены - он прошедший
|
||||
// (даже если формально он еще не закончился)
|
||||
return $periodStart->lt($currentShiftStart);
|
||||
}
|
||||
|
||||
public function dateInPeriod(Carbon|string|null $date, DateRange $dateRange): bool
|
||||
{
|
||||
$date = self::toCarbon($date);
|
||||
|
||||
return $date
|
||||
&& $date->gt($dateRange->startDate)
|
||||
&& $date->lte($dateRange->endDate);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user