Files
onboard/app/Console/Commands/FillReportsFromDate.php
brusnitsyn 741781dcb3 Несколько отделений для врачей
Поправил подсчет операций
Закончил функцию наполнения отчетов
2026-02-06 15:15:03 +09:00

102 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Console\Commands;
use App\Models\Department;
use App\Models\User;
use App\Services\AutoReportService;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
class FillReportsFromDate extends Command
{
protected $signature = 'reports:fill
{--date= : Дата начала в формате YYYY-MM-DD}
{--end-date= : Дата окончания (по умолчанию сегодня)}
{--department= : ID отделения (опционально)}
{--user= : ID пользователя для отчета (опционально)}
{--force : Перезаписать существующие отчеты}';
protected $description = 'Автоматически заполнить отчеты с указанной даты';
public function __construct(
protected AutoReportService $autoReportService
) {
parent::__construct();
}
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');
$departmentId = $this->option('department');
$userId = $this->option('user');
$force = $this->option('force');
$this->info("Заполнение отчетов с {$startDate} по {$endDate}");
// Получаем отделения
$departments = $departmentId
? Department::where('department_id', $departmentId)->get()
: Department::all();
if ($departments->isEmpty()) {
$this->error('Отделения не найдены');
return 1;
}
$totalReports = 0;
$totalErrors = 0;
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);
if ($users->isEmpty()) {
$this->warn("В отделении {$department->name} нет пользователей");
continue;
}
foreach ($users as $user) {
try {
$created = $this->autoReportService->fillReportsForUser(
$user,
$startDate,
$endDate,
$departmentId,
$force,
);
$totalReports += $created;
$this->info("Для пользователя {$user->name} создано {$created} отчетов");
} catch (\Exception $e) {
$totalErrors++;
$this->error("Ошибка для пользователя {$user->name}: {$e->getMessage()}");
}
}
}
$this->info("Готово! Создано отчетов: {$totalReports}, ошибок: {$totalErrors}");
return 0;
}
private function getDepartmentUsers(Department $department)
{
// Получаем пользователей, которые могут создавать отчеты
return User::where('rf_department_id', $department->department_id)
->where(function ($query) {
$query->where('role', 'doctor')
->orWhere('role', 'head_of_department');
})
->where('is_active', true)
->get();
}
}