Добавлен метод получения статистики для 1 отделения
This commit is contained in:
@@ -376,7 +376,7 @@ class DutyReportController extends Controller
|
|||||||
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($startDate, $endDate);
|
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($startDate, $endDate);
|
||||||
$department = Department::find($queryDepartmentId);
|
$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');
|
return Excel::download(new DutyReportExport($finalData['data'], [$startDate, $endDate], $user, $department), 'statistics.xlsx');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,10 +50,34 @@ class StatisticsService
|
|||||||
|
|
||||||
public function getStatisticsData(User $user, string $startDate, string $endDate, bool $isRangeOneDay): array
|
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()) {
|
if ($departments->isEmpty()) {
|
||||||
return $this->emptyResponse();
|
return $this->emptyResponse();
|
||||||
|
|||||||
Reference in New Issue
Block a user