diff --git a/app/Http/Controllers/Api/NurseController.php b/app/Http/Controllers/Api/NurseController.php index af60a59..24ed24b 100644 --- a/app/Http/Controllers/Api/NurseController.php +++ b/app/Http/Controllers/Api/NurseController.php @@ -26,7 +26,13 @@ class NurseController extends Controller { public function getPatient($id, Request $request) { - return Cache::remember("nurse_patient:{$id}", 120, function () use ($id, $request) { + $patientSource = $request->query('patient_source', 'manual'); + if ($patientSource === 'manual') { + return Cache::remember("nurse_patient:manual:{$id}", 120, function () use ($id, $request) { + return UnifiedMedicalHistory::where('id', $id)->first(); + }); + } + return Cache::remember("nurse_patient:mis:{$id}", 120, function () use ($id, $request) { return MisMKSB::where('MedicalHistoryID', $id)->select(MisMKSB::workColumns())->first(); }); } @@ -202,6 +208,11 @@ class NurseController extends Controller $reportNurseId = $request->input('report_nurse_id'); $this->syncNurseSnapshot($originalId, $data, $migrationData, $departmentId, $reportNurseId); + if (Cache::has("nurse_patient:manual:{$id}")) + Cache::forget("nurse_patient:manual:{$id}"); + if (Cache::has("nurse_patient:mis:{$id}")) + Cache::forget("nurse_patient:mis:{$id}"); + return response()->json([ 'data' => $historyCorrection, ], 201); diff --git a/app/Http/Controllers/Web/NurseReportController.php b/app/Http/Controllers/Web/NurseReportController.php index e12ccde..ce69bc7 100644 --- a/app/Http/Controllers/Web/NurseReportController.php +++ b/app/Http/Controllers/Web/NurseReportController.php @@ -35,6 +35,7 @@ class NurseReportController extends Controller $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); @@ -43,9 +44,42 @@ class NurseReportController extends Controller ->where('period_end', '<=', $dateRange->endSql()) ->exists(); - $hasReport = $existsReport && $isPastPeriod; + $isCurrentPeriod = !$isPastPeriod; - $data = $this->unifiedMedicalHistoryService->getGroupedHistories($dateRange, $department->rf_mis_department_id); + $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()) @@ -56,7 +90,8 @@ class NurseReportController extends Controller $isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate); return Inertia::render('Nurse/Report/Index', [ - 'patients' => $data, + 'patients' => $patients, + 'latestReport' => $latestReport ?? null, 'reportNurseId' => $currentReport?->id, 'canSaveReport' => $isRangeOneDay && $user->currentRoleCan('nurse.report.create'), 'canEditPastReport' => $user->currentRoleCan('nurse.report.edit.past'), diff --git a/app/Models/ReportNurse.php b/app/Models/ReportNurse.php index a6e7b2e..206a054 100644 --- a/app/Models/ReportNurse.php +++ b/app/Models/ReportNurse.php @@ -39,4 +39,9 @@ class ReportNurse extends Model { return $this->belongsTo(ReportStatus::class); } + + public function doctor() + { + return $this->belongsTo(MisLpuDoctor::class, 'rf_lpudoctor_id', 'LPUDoctorID'); + } } diff --git a/app/Services/NurseReportService.php b/app/Services/NurseReportService.php index 13e34d0..e1ce24e 100644 --- a/app/Services/NurseReportService.php +++ b/app/Services/NurseReportService.php @@ -50,6 +50,12 @@ class NurseReportService 'rf_user_id' => $user->id, ]; + $existsReport = ReportNurse::where('period_start', $data['period_start']) + ->where('period_end', $data['period_end']) + ->exists(); + + if ($existsReport) unset($data['rf_lpudoctor_id']); + $report = ReportNurse::updateOrCreate( [ 'report_date' => $data['report_date'], diff --git a/resources/js/Pages/Nurse/Components/ActionsColumnDataTable.vue b/resources/js/Pages/Nurse/Components/ActionsColumnDataTable.vue index e4c9fe0..17da6c0 100644 --- a/resources/js/Pages/Nurse/Components/ActionsColumnDataTable.vue +++ b/resources/js/Pages/Nurse/Components/ActionsColumnDataTable.vue @@ -14,7 +14,7 @@ const props = defineProps({ const emits = defineEmits(['clickEdit', 'clickDelete']) const onClickEdit = () => { - emits('clickEdit', props.row.id) + emits('clickEdit', props.row) } const onClickDelete = () => { emits('clickDelete', props.row.id) diff --git a/resources/js/Pages/Nurse/Components/AddMedicalHistoryModal.vue b/resources/js/Pages/Nurse/Components/AddMedicalHistoryModal.vue index ba3ee7e..ce3def0 100644 --- a/resources/js/Pages/Nurse/Components/AddMedicalHistoryModal.vue +++ b/resources/js/Pages/Nurse/Components/AddMedicalHistoryModal.vue @@ -168,7 +168,7 @@ const search = (search) => { const onChangeSearch = (historyId) => { loadingChangeSelect.value = true - axios.get(`/api/nurse/patients/${historyId}`).then(res => { + axios.get(`/api/nurse/patients/${historyId}?patient_source=mis`).then(res => { form.value.medical_card_number = res.data.medical_card_number form.value.full_name = res.data.full_name form.value.urgency_id = res.data.urgency_id diff --git a/resources/js/Pages/Nurse/Components/EditMedicalHistoryModal.vue b/resources/js/Pages/Nurse/Components/EditMedicalHistoryModal.vue index 5d61cff..4abcce5 100644 --- a/resources/js/Pages/Nurse/Components/EditMedicalHistoryModal.vue +++ b/resources/js/Pages/Nurse/Components/EditMedicalHistoryModal.vue @@ -27,6 +27,10 @@ const props = defineProps({ reportNurseId: { type: Number, default: null + }, + patientSource: { + type: String, + default: 'manual' } }) @@ -126,7 +130,7 @@ const submit = async () => { const fetchPatient = async (historyId) => { loading.value = true - await axios.get(`/api/nurse/patients/${historyId}`) + await axios.get(`/api/nurse/patients/${historyId}?patient_source=${props.patientSource}`) .then(res => { form.value.patient_source = res.data.source_type form.value.patient_id = historyId diff --git a/resources/js/Pages/Nurse/Report/Index.vue b/resources/js/Pages/Nurse/Report/Index.vue index 4202955..e2c8f98 100644 --- a/resources/js/Pages/Nurse/Report/Index.vue +++ b/resources/js/Pages/Nurse/Report/Index.vue @@ -1,6 +1,6 @@