* работа над функционалом автоматического заполнения
* исправил фантомный сдвиг даты * переделал получение ФИО врачей из отделений * добавил возможность поиска врача * переписал сохранение отчета
This commit is contained in:
98
app/Console/Commands/FillReportsFromDate.php
Normal file
98
app/Console/Commands/FillReportsFromDate.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?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}");
|
||||
|
||||
// Получаем пользователей отделения
|
||||
$users = $userId
|
||||
? User::where('id', $userId)->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,
|
||||
$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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user