127 lines
5.2 KiB
PHP
127 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Web;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Department;
|
|
use App\Models\ReportNurse;
|
|
use App\Services\DateRangeService;
|
|
use App\Services\NurseMedicalHistoryService;
|
|
use App\Services\NurseReportService;
|
|
use App\Services\UnifiedMedicalHistoryService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Inertia\Inertia;
|
|
|
|
class NurseReportController extends Controller
|
|
{
|
|
public function __construct(
|
|
protected DateRangeService $dateRangeService,
|
|
protected UnifiedMedicalHistoryService $unifiedMedicalHistoryService,
|
|
protected NurseReportService $nurseReportService,
|
|
protected NurseMedicalHistoryService $nurseMedicalHistoryService
|
|
)
|
|
{}
|
|
|
|
/**
|
|
* Получение базовой информации для заполнения отчета от роли мед. сестра
|
|
* @param Request $request
|
|
* @return \Inertia\Response
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$user = Auth::user();
|
|
$selectedUserId = $request->query('userId') ? (int) $request->query('userId') : null;
|
|
$departmentId = $request->query('departmentId') ? (int) $request->query('departmentId') : null;
|
|
$department = Department::where('department_id', $departmentId)->firstOrFail();
|
|
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
|
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
|
|
|
|
// Проверяем, есть ли отчет за этот период
|
|
$isPastPeriod = $this->dateRangeService->isPastPeriod($dateRange);
|
|
$existsReport = ReportNurse::where('rf_department_id', $departmentId)
|
|
->where('period_end', '>', $dateRange->startSql())
|
|
->where('period_end', '<=', $dateRange->endSql())
|
|
->exists();
|
|
|
|
$isCurrentPeriod = !$isPastPeriod;
|
|
|
|
$reportsNurse = ReportNurse::where('rf_department_id', $departmentId)
|
|
->where('period_start', '>=', $dateRange->startSql())
|
|
->where('period_end', '<=', $dateRange->endSql())
|
|
->where('rf_lpudoctor_id', $selectedUserId)
|
|
->orderBy('period_end', 'desc')
|
|
->with(['doctor'])
|
|
->get();
|
|
|
|
$hasNurseReport = $reportsNurse->count() > 0;
|
|
$reportNurseIds = $reportsNurse->pluck('id')->toArray();
|
|
|
|
// Получаем пациентов (источник зависит от периода)
|
|
if ($isCurrentPeriod) {
|
|
// Для текущего периода - пациенты из МИС
|
|
$patients = $this->unifiedMedicalHistoryService->getGroupedHistories(
|
|
$dateRange,
|
|
$department->rf_mis_department_id,
|
|
);
|
|
|
|
$latestReport = $reportsNurse->first();
|
|
} else {
|
|
// Для прошедшего периода - данные из отчета
|
|
$patients = $hasNurseReport
|
|
? $this->nurseMedicalHistoryService->getGroupedHistories(
|
|
$dateRange,
|
|
$department->rf_mis_department_id,
|
|
$reportNurseIds
|
|
)
|
|
: [];
|
|
|
|
$latestReport = $reportsNurse->first();
|
|
}
|
|
|
|
//$data = $this->unifiedMedicalHistoryService->getGroupedHistories($dateRange, $department->rf_mis_department_id);
|
|
|
|
$currentReport = ReportNurse::where('rf_department_id', $departmentId)
|
|
->where('period_start', '>=', $dateRange->startSql())
|
|
->where('period_end', '<=', $dateRange->endSql())
|
|
->orderBy('period_end', 'desc')
|
|
->first();
|
|
|
|
$isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate);
|
|
|
|
return Inertia::render('Nurse/Report/Index', [
|
|
'patients' => $patients,
|
|
'latestReport' => $latestReport ?? null,
|
|
'reportNurseId' => $currentReport?->id,
|
|
'canSaveReport' => $isRangeOneDay && $user->currentRoleCan('nurse.report.create'),
|
|
'canEditPastReport' => $user->currentRoleCan('nurse.report.edit.past'),
|
|
'department' => $department,
|
|
'selectedUserId' => $selectedUserId,
|
|
'selectedDepartmentId' => $departmentId,
|
|
'dates' => [
|
|
$dateRange->startDate->getTimestampMs(),
|
|
$dateRange->endDate->getTimestampMs(),
|
|
]
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Сохранение отчета от роли мед. сестра
|
|
* @return \Illuminate\Http\RedirectResponse
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
abort_if(!auth()->user()->currentRoleCan('nurse.report.create'), 403);
|
|
|
|
$user = auth()->user();
|
|
$selectedUserId = $request->input('userId') ? (int) $request->input('userId') : null;
|
|
$departmentId = $request->input('departmentId') ? (int) $request->input('departmentId') : null;
|
|
|
|
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
|
$report = $this->nurseReportService->saveReport($dateRange, null, $selectedUserId, $departmentId);
|
|
$this->nurseReportService->saveSnapshot($dateRange, $report, null, auth()->id());
|
|
|
|
return redirect()->back();
|
|
}
|
|
}
|