* вывод данных из отчетов для ролей адм и зав * поправил ширину стобцов ввода * добавил календарь на страницу статистики * переделал календарь у заведующего на странице отчета * добавил и привязал метрики в статистику
74 lines
1.9 KiB
PHP
74 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Illuminate\Support\Carbon;
|
|
|
|
class DateRangeService
|
|
{
|
|
public function getDateRangeForUser($user, $startAt = null, $endAt = null): array
|
|
{
|
|
if ($startAt && $endAt) {
|
|
return $this->getCustomDateRange($startAt, $endAt, $user);
|
|
}
|
|
|
|
return $this->getDefaultDateRange($user);
|
|
}
|
|
|
|
public function isRangeOneDay($startAt = null, $endAt = null): bool
|
|
{
|
|
if (!$startAt || !$endAt) return false;
|
|
|
|
$startDate = $this->parseDate($startAt);
|
|
$endDate = $this->parseDate($endAt);
|
|
|
|
if ($startDate->diffInDays($endDate) === 1.0) return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
private function getCustomDateRange($startAt, $endAt, $user): array
|
|
{
|
|
$startDate = $this->parseDate($startAt);
|
|
$endDate = $this->parseDate($endAt);
|
|
|
|
if ($startDate->isSameDay($endDate)) {
|
|
$startDate = $startDate->subDay()->setTime(6, 0);
|
|
$endDate = $endDate->setTime(6, 0);
|
|
} else {
|
|
$startDate = $startDate->setTime(6, 0);
|
|
$endDate = $endDate->setTime(6, 0);
|
|
}
|
|
|
|
return [
|
|
$startDate->format('Y-m-d H:i:s'),
|
|
$endDate->format('Y-m-d H:i:s')
|
|
];
|
|
}
|
|
|
|
private function getDefaultDateRange($user): array
|
|
{
|
|
$startDate = Carbon::now('Asia/Yakutsk')
|
|
->subDay()
|
|
->setTime(6, 0);
|
|
|
|
$endDate = Carbon::now('Asia/Yakutsk')
|
|
->setTime(6, 0);
|
|
|
|
return [
|
|
$startDate->format('Y-m-d H:i:s'),
|
|
$endDate->format('Y-m-d H:i:s')
|
|
];
|
|
}
|
|
|
|
public function parseDate($dateInput): Carbon
|
|
{
|
|
if (is_numeric($dateInput)) {
|
|
return Carbon::createFromTimestampMs($dateInput)
|
|
->setTimezone('Asia/Yakutsk');
|
|
}
|
|
|
|
return Carbon::parse($dateInput, 'Asia/Yakutsk');
|
|
}
|
|
}
|