Добавлен метод получения статистики для 1 отделения

This commit is contained in:
Brusnitsyn
2026-07-06 06:37:09 +00:00
parent 2b0221ed36
commit 1d9fbb362e
2 changed files with 28 additions and 4 deletions

View File

@@ -376,7 +376,7 @@ class DutyReportController extends Controller
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($startDate, $endDate);
$department = Department::find($queryDepartmentId);
$finalData = $this->statisticsService->getStatisticsData($user, $startDate, $endDate, $isRangeOneDay, $department->department_id);
$finalData = $this->statisticsService->getStatisticsDataForDepartment($department->department_id, $startDate, $endDate, $isRangeOneDay);
return Excel::download(new DutyReportExport($finalData['data'], [$startDate, $endDate], $user, $department), 'statistics.xlsx');
}

View File

@@ -50,10 +50,34 @@ class StatisticsService
public function getStatisticsData(User $user, string $startDate, string $endDate, bool $isRangeOneDay): array
{
$this->bedDayService->clearMemoryCache();
return $this->buildStatisticsData($this->resolveUserDepartments($user), $startDate, $endDate, $isRangeOneDay);
}
// 1. Получаем отделения
$departments = $this->resolveUserDepartments($user);
/**
* Статистика по одному конкретному отделению (для отчёта дежурного).
* В отличие от getStatisticsData не привязана к списку отделений пользователя.
*/
public function getStatisticsDataForDepartment(int $departmentId, string $startDate, string $endDate, bool $isRangeOneDay): array
{
return $this->buildStatisticsData($this->resolveSingleDepartment($departmentId), $startDate, $endDate, $isRangeOneDay);
}
/**
* Одно конкретное отделение в том же формате, что и resolveUserDepartments
* сгруппировано по типу отделения.
*/
private function resolveSingleDepartment(int $departmentId)
{
return Department::select('department_id', 'name_short', 'rf_department_type')
->with('departmentType')
->where('department_id', $departmentId)
->get()
->groupBy('departmentType.name_full');
}
private function buildStatisticsData($departments, string $startDate, string $endDate, bool $isRangeOneDay): array
{
$this->bedDayService->clearMemoryCache();
if ($departments->isEmpty()) {
return $this->emptyResponse();