Исправление календаря в отчетах
This commit is contained in:
@@ -48,7 +48,7 @@ class DutyReportController extends Controller
|
|||||||
$department = Department::where('department_id', $departmentId)->firstOrFail();
|
$department = Department::where('department_id', $departmentId)->firstOrFail();
|
||||||
$bedsInDepartment = DepartmentMetrikaDefault::where('rf_department_id', $departmentId)
|
$bedsInDepartment = DepartmentMetrikaDefault::where('rf_department_id', $departmentId)
|
||||||
->where('rf_metrika_item_id', 1)->first()->value ?? 0;
|
->where('rf_metrika_item_id', 1)->first()->value ?? 0;
|
||||||
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user, extendRangeEnd: false);
|
||||||
|
|
||||||
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
|
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
|
||||||
$isPastPeriod = $this->dateRangeService->isPastPeriod($dateRange);
|
$isPastPeriod = $this->dateRangeService->isPastPeriod($dateRange);
|
||||||
@@ -331,7 +331,7 @@ class DutyReportController extends Controller
|
|||||||
$selectedDepartmentId = $request->get('departmentId') ? (int) $request->get('departmentId') : null;
|
$selectedDepartmentId = $request->get('departmentId') ? (int) $request->get('departmentId') : null;
|
||||||
$staff = (int) $request->get('staff', 0);
|
$staff = (int) $request->get('staff', 0);
|
||||||
|
|
||||||
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user, extendRangeEnd: false);
|
||||||
$report = $this->dutyReportService->saveReport($dateRange, null, $selectedUserId, $selectedDepartmentId);
|
$report = $this->dutyReportService->saveReport($dateRange, null, $selectedUserId, $selectedDepartmentId);
|
||||||
$stats = $this->dutyReportService->saveSnapshot($dateRange, $report, null, auth()->id());
|
$stats = $this->dutyReportService->saveSnapshot($dateRange, $report, null, auth()->id());
|
||||||
$this->dutyReportService->saveObservables($observables, $report);
|
$this->dutyReportService->saveObservables($observables, $report);
|
||||||
@@ -345,7 +345,7 @@ class DutyReportController extends Controller
|
|||||||
public function closeObservation(Request $request)
|
public function closeObservation(Request $request)
|
||||||
{
|
{
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user, extendRangeEnd: false);
|
||||||
|
|
||||||
$observable = $request->get('observable');
|
$observable = $request->get('observable');
|
||||||
$observableId = $observable['id'] ?? null;
|
$observableId = $observable['id'] ?? null;
|
||||||
@@ -369,7 +369,7 @@ class DutyReportController extends Controller
|
|||||||
$queryDepartmentId = $request->query('departmentId', $user->department->department_id);
|
$queryDepartmentId = $request->query('departmentId', $user->department->department_id);
|
||||||
$department = Department::findOrFail($queryDepartmentId);
|
$department = Department::findOrFail($queryDepartmentId);
|
||||||
|
|
||||||
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user, extendRangeEnd: false);
|
||||||
|
|
||||||
$reportDutyIds = ReportDuty::where('rf_department_id', $department->department_id)
|
$reportDutyIds = ReportDuty::where('rf_department_id', $department->department_id)
|
||||||
->where('period_start', '>=', $dateRange->startSql())
|
->where('period_start', '>=', $dateRange->startSql())
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class NurseReportController extends Controller
|
|||||||
$selectedUserId = $request->query('userId') ? (int) $request->query('userId') : null;
|
$selectedUserId = $request->query('userId') ? (int) $request->query('userId') : null;
|
||||||
$departmentId = $request->query('departmentId') ? (int) $request->query('departmentId') : null;
|
$departmentId = $request->query('departmentId') ? (int) $request->query('departmentId') : null;
|
||||||
$department = Department::where('department_id', $departmentId)->firstOrFail();
|
$department = Department::where('department_id', $departmentId)->firstOrFail();
|
||||||
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user, extendRangeEnd: false);
|
||||||
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
|
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
|
||||||
|
|
||||||
// Проверяем, есть ли отчет за этот период
|
// Проверяем, есть ли отчет за этот период
|
||||||
@@ -117,7 +117,7 @@ class NurseReportController extends Controller
|
|||||||
$selectedUserId = $request->input('userId') ? (int) $request->input('userId') : null;
|
$selectedUserId = $request->input('userId') ? (int) $request->input('userId') : null;
|
||||||
$departmentId = $request->input('departmentId') ? (int) $request->input('departmentId') : null;
|
$departmentId = $request->input('departmentId') ? (int) $request->input('departmentId') : null;
|
||||||
|
|
||||||
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user, extendRangeEnd: false);
|
||||||
$report = $this->nurseReportService->saveReport($dateRange, null, $selectedUserId, $departmentId);
|
$report = $this->nurseReportService->saveReport($dateRange, null, $selectedUserId, $departmentId);
|
||||||
$this->nurseReportService->saveSnapshot($dateRange, $report, null, auth()->id());
|
$this->nurseReportService->saveSnapshot($dateRange, $report, null, auth()->id());
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ class DateRangeService
|
|||||||
/**
|
/**
|
||||||
* Получить унифицированный объект диапазона дат
|
* Получить унифицированный объект диапазона дат
|
||||||
*/
|
*/
|
||||||
public function getNormalizedDateRange(User $user, ?string $startAt = null, ?string $endAt = null): DateRange
|
public function getNormalizedDateRange(User $user, ?string $startAt = null, ?string $endAt = null, bool $extendRangeEnd = true): DateRange
|
||||||
{
|
{
|
||||||
[$startDate, $endDate] = $this->getDateRangeForUser($user, $startAt, $endAt);
|
[$startDate, $endDate] = $this->getDateRangeForUser($user, $startAt, $endAt, $extendRangeEnd);
|
||||||
|
|
||||||
$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');
|
||||||
@@ -35,13 +35,19 @@ class DateRangeService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Получить диапазон дат из запроса
|
* Получить диапазон дат из запроса
|
||||||
|
*
|
||||||
|
* @param bool $extendRangeEnd Сдвигать конец многодневного диапазона на +1 сутки,
|
||||||
|
* чтобы захватить смену, начинающуюся в последний выбранный день (нужно для
|
||||||
|
* агрегированной статистики за период; для отчёта дежурного по конкретной
|
||||||
|
* смене/сменам — не нужно, там диапазон должен быть ровно тем, что выбрали).
|
||||||
*/
|
*/
|
||||||
public function getDateRangeFromRequest(Request $request, User $user): DateRange
|
public function getDateRangeFromRequest(Request $request, User $user, bool $extendRangeEnd = true): DateRange
|
||||||
{
|
{
|
||||||
return $this->getNormalizedDateRange(
|
return $this->getNormalizedDateRange(
|
||||||
$user,
|
$user,
|
||||||
$request->query('startAt', $request->get('startAt')),
|
$request->query('startAt', $request->get('startAt')),
|
||||||
$request->query('endAt', $request->get('endAt'))
|
$request->query('endAt', $request->get('endAt')),
|
||||||
|
$extendRangeEnd
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,10 +106,10 @@ class DateRangeService
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDateRangeForUser($user, $startAt = null, $endAt = null): array
|
public function getDateRangeForUser($user, $startAt = null, $endAt = null, bool $extendRangeEnd = true): array
|
||||||
{
|
{
|
||||||
if ($startAt && $endAt) {
|
if ($startAt && $endAt) {
|
||||||
return $this->getCustomDateRange($startAt, $endAt, $user);
|
return $this->getCustomDateRange($startAt, $endAt, $user, $extendRangeEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->getDefaultDateRange($user);
|
return $this->getDefaultDateRange($user);
|
||||||
@@ -121,7 +127,7 @@ class DateRangeService
|
|||||||
return $startDate->isSameDay($endDate) || $startDate->diffInDays($endDate) === 1.0;
|
return $startDate->isSameDay($endDate) || $startDate->diffInDays($endDate) === 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getCustomDateRange($startAt, $endAt, $user): array
|
private function getCustomDateRange($startAt, $endAt, $user, bool $extendRangeEnd = true): array
|
||||||
{
|
{
|
||||||
$startDate = $this->parseDate($startAt);
|
$startDate = $this->parseDate($startAt);
|
||||||
$endDate = $this->parseDate($endAt);
|
$endDate = $this->parseDate($endAt);
|
||||||
@@ -137,8 +143,12 @@ class DateRangeService
|
|||||||
} else {
|
} else {
|
||||||
$startDate = $startDate->setTime(9, 0);
|
$startDate = $startDate->setTime(9, 0);
|
||||||
// Смена длится сутки и "принадлежит" дню, в который начинается (см. currentShiftBoundaries).
|
// Смена длится сутки и "принадлежит" дню, в который начинается (см. currentShiftBoundaries).
|
||||||
// Поэтому смена последнего выбранного дня захватывает следующие календарные сутки.
|
// Поэтому смена последнего выбранного дня захватывает следующие календарные сутки —
|
||||||
$endDate = $endAlreadyResolved ? $endDate : $endDate->addDay()->setTime(9, 0);
|
// но только там, где нужен захват целиком (агрегированная статистика за период,
|
||||||
|
// $extendRangeEnd = true). Для конкретной смены/отчёта диапазон должен быть ровно тем,
|
||||||
|
// что выбрали.
|
||||||
|
$shouldExtend = $extendRangeEnd && ! $endAlreadyResolved;
|
||||||
|
$endDate = $shouldExtend ? $endDate->addDay()->setTime(9, 0) : $endDate->setTime(9, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|||||||
Reference in New Issue
Block a user