modified: .gitignore

This commit is contained in:
brusnitsyn
2026-04-21 10:08:14 +09:00
parent 0e8b6f61b4
commit 2041ab54ea
74 changed files with 7533 additions and 1544 deletions

View File

@@ -27,12 +27,25 @@ class FillReportsFromDate extends Command
public function handle()
{
$startDate = $this->option('date') ?? Carbon::now()->subDays(7)->format('Y-m-d');
$endDate = $this->option('end-date') ?? Carbon::now()->format('Y-m-d');
$startDate = $this->option('date') ?? Carbon::now('Asia/Yakutsk')->subDays(7)->format('Y-m-d');
$endDate = $this->option('end-date') ?? Carbon::now('Asia/Yakutsk')->format('Y-m-d');
$departmentId = $this->option('department');
$userId = $this->option('user');
$force = $this->option('force');
try {
$start = Carbon::createFromFormat('Y-m-d', $startDate, 'Asia/Yakutsk')->startOfDay();
$end = Carbon::createFromFormat('Y-m-d', $endDate, 'Asia/Yakutsk')->startOfDay();
} catch (\Throwable) {
$this->error('Неверный формат даты. Используйте YYYY-MM-DD.');
return 1;
}
if ($start->gt($end)) {
$this->error('Дата начала больше даты окончания.');
return 1;
}
$this->info("Заполнение отчетов с {$startDate} по {$endDate}");
// Получаем отделения
@@ -51,34 +64,27 @@ class FillReportsFromDate extends Command
foreach ($departments as $department) {
$this->info("Обработка отделения: {$department->name_short}");
// Получаем пользователей отделения
$users = $userId
? User::where('id', $userId)->whereHas('departments', function ($query) use ($department) {
$query->where('rf_department_id', $department->department_id);
})->get()
: $this->getDepartmentUsers($department);
$user = $this->resolveResponsibleUser($department, $userId);
if ($users->isEmpty()) {
$this->warn("В отделении {$department->name} нет пользователей");
if (!$user) {
$this->warn("В отделении {$department->name_short} нет подходящего пользователя для автозаполнения");
continue;
}
foreach ($users as $user) {
try {
$created = $this->autoReportService->fillReportsForUser(
$user,
$startDate,
$endDate,
$departmentId,
$force,
);
try {
$created = $this->autoReportService->fillReportsForUser(
$user,
$startDate,
$endDate,
$department,
$force,
);
$totalReports += $created;
$this->info("Для пользователя {$user->name} создано {$created} отчетов");
} catch (\Exception $e) {
$totalErrors++;
$this->error("Ошибка для пользователя {$user->name}: {$e->getMessage()}");
}
$totalReports += $created;
$this->info("Для пользователя {$user->name} создано {$created} отчетов");
} catch (\Exception $e) {
$totalErrors++;
$this->error("Ошибка для пользователя {$user->name}: {$e->getMessage()}");
}
}
@@ -87,15 +93,37 @@ class FillReportsFromDate extends Command
return 0;
}
private function getDepartmentUsers(Department $department)
private function resolveResponsibleUser(Department $department, ?string $userId): ?User
{
// Получаем пользователей, которые могут создавать отчеты
return User::where('rf_department_id', $department->department_id)
->where(function ($query) {
$query->where('role', 'doctor')
->orWhere('role', 'head_of_department');
})
$query = User::query()
->where('is_active', true)
->get();
->whereHas('departments', function ($departmentQuery) use ($department) {
$departmentQuery->where('rf_department_id', $department->department_id);
})
->whereHas('roles', function ($roleQuery) {
$roleQuery->where('slug', 'doctor');
})
->with(['roles', 'departments']);
if ($userId) {
return $query->where('id', $userId)->first();
}
return $query->get()
->sortBy(function (User $user) use ($department) {
$departmentLink = $user->departments->firstWhere('rf_department_id', $department->department_id);
$isDoctor = $user->roles->contains('slug', 'doctor');
$isFavorite = (bool) optional($departmentLink)->is_favorite;
$order = optional($departmentLink)->order ?? PHP_INT_MAX;
return sprintf(
'%d-%d-%010d-%010d',
$isDoctor ? 0 : 1,
$isFavorite ? 0 : 1,
$order,
$user->id
);
})
->first();
}
}