* добавил получение выбывших * фильтрация выбывших по результатам лечения * добавил подсказку при наведении на операции * добавил вывод причины наблюдения * добавил вкладки для выбывших * изменил связь и сохранение пациентов на контроле * добавил возможность редактирования причины контроля * полное изменение окна с нежелательными событиями * исправил просмотр причины контроля * работа над окном редактирования причины контроля в таблице * визуальное выделение умерших и проведенных операций * добавил выбор даты для роли врач * центрирование блоков статистики * разделение выполненных операций на срочность * поправил метод определения текущего дня для роли врач * функция блокировки при выборе другой даты для роли врач
71 lines
1.9 KiB
PHP
71 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);
|
|
}
|
|
|
|
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
|
|
{
|
|
if ($user->isHeadOfDepartment() || $user->isAdmin()) {
|
|
$startDate = Carbon::now('Asia/Yakutsk')
|
|
->firstOfMonth()
|
|
->setTime(6, 0);
|
|
|
|
$endDate = Carbon::now('Asia/Yakutsk')
|
|
->setTime(6, 0);
|
|
} else {
|
|
$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')
|
|
];
|
|
}
|
|
|
|
private function parseDate($dateInput): Carbon
|
|
{
|
|
if (is_numeric($dateInput)) {
|
|
return Carbon::createFromTimestampMs($dateInput)
|
|
->setTimezone('Asia/Yakutsk');
|
|
}
|
|
|
|
return Carbon::parse($dateInput, 'Asia/Yakutsk');
|
|
}
|
|
}
|