152 lines
4.7 KiB
PHP
152 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Resources\Mis\FormattedPatientResource;
|
|
use App\Models\MetrikaGroup;
|
|
use App\Models\MetrikaResult;
|
|
use App\Models\MisMedicalHistory;
|
|
use App\Models\ObservationPatient;
|
|
use App\Models\Report;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Str;
|
|
use Inertia\Inertia;
|
|
|
|
class ReportController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$user = $request->user();
|
|
$department = $user->department;
|
|
|
|
$beds = (int)$department->metrikaDefault()->where('rf_metrika_item_id', 1)->first()->value;
|
|
$occupiedBeds = optional(Report::where('rf_department_id', $user->rf_department_id)
|
|
->join('metrika_results', 'reports.report_id', '=', 'metrika_results.rf_report_id')
|
|
->where('metrika_results.rf_metrika_item_id', 8)
|
|
->orderBy('sent_at', 'desc')->first())->value ?? 0;
|
|
|
|
$percentLoadedBeds = intval($occupiedBeds) * 100 / $beds;
|
|
|
|
$metrikaGroup = MetrikaGroup::whereMetrikaGroupId(2)->first();
|
|
$metrikaItems = $metrikaGroup->metrikaItems;
|
|
|
|
return response()->json([
|
|
'department' => [
|
|
'beds' => $beds,
|
|
'percentLoadedBeds' => $percentLoadedBeds,
|
|
],
|
|
'metrikaItems' => $metrikaItems
|
|
]);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$data = $request->validate([
|
|
'metrics' => 'required',
|
|
'observationPatients' => 'nullable',
|
|
'departmentId' => 'required|integer',
|
|
]);
|
|
|
|
$metrics = $data['metrics'];
|
|
$observationPatients = $data['observationPatients'];
|
|
|
|
$metriks = [];
|
|
foreach ($metrics as $key => $value) {
|
|
$metrika = new MetrikaResult;
|
|
$metrikaId = (int)Str::replace('metrika_item_', '', $key);
|
|
$metrika->rf_metrika_item_id = $metrikaId;
|
|
$metrika->value = $value;
|
|
|
|
$metriks[] = $metrika;
|
|
}
|
|
|
|
\DB::beginTransaction();
|
|
|
|
$report = Report::create([
|
|
'rf_department_id' => $data['departmentId'],
|
|
'rf_user_id' => Auth::user()->id,
|
|
'created_at' => now(),
|
|
'sent_at' => now()
|
|
]);
|
|
|
|
foreach ($metriks as $metrika) {
|
|
$metrika->rf_report_id = $report->report_id;
|
|
$metrika->save();
|
|
}
|
|
|
|
foreach ($observationPatients as $observationPatient) {
|
|
ObservationPatient::create([
|
|
'rf_department_id' => $data['departmentId'],
|
|
'rf_report_id' => $report->report_id,
|
|
'rf_medicalhistory_id' => $observationPatient['id'],
|
|
'rf_mkab_id' => null
|
|
]);
|
|
}
|
|
|
|
\DB::commit();
|
|
|
|
return response()->json([
|
|
'message' => 'success'
|
|
]);
|
|
}
|
|
|
|
public function getPatients(Request $request)
|
|
{
|
|
$data = $request->validate([
|
|
'status' => 'required|string', // plan emergency
|
|
]);
|
|
|
|
$status = $data['status'];
|
|
|
|
$model = new MisMedicalHistory();
|
|
if ($status === 'plan') {
|
|
$patients = MisMedicalHistory::select(
|
|
[
|
|
...$model->getFillable(),
|
|
DB::raw('ROW_NUMBER() OVER (ORDER BY "DateRecipient" DESC) as num')
|
|
])
|
|
->where('rf_EmerSignID', 1)
|
|
->orderBy('DateRecipient', 'DESC')
|
|
->get();
|
|
} else if ($status === 'emergency') {
|
|
$patients = MisMedicalHistory::select(
|
|
[
|
|
...$model->getFillable(),
|
|
DB::raw('ROW_NUMBER() OVER (ORDER BY "DateRecipient" DESC) as num')
|
|
])
|
|
->where('rf_EmerSignID', 2)
|
|
->orderBy('DateRecipient', 'DESC')
|
|
->get();
|
|
}
|
|
|
|
return response()->json(FormattedPatientResource::collection($patients));
|
|
}
|
|
|
|
public function getPatientsCount(Request $request)
|
|
{
|
|
$data = $request->validate([
|
|
'status' => 'required|string', // plan emergency
|
|
]);
|
|
|
|
$status = $data['status'];
|
|
|
|
$model = new MisMedicalHistory();
|
|
if ($status === 'plan') {
|
|
$count = MisMedicalHistory::select($model->getFillable())
|
|
->where('rf_EmerSignID', 1)
|
|
->orderBy('DateRecipient', 'DESC')
|
|
->count();
|
|
} else if ($status === 'emergency') {
|
|
$count = MisMedicalHistory::select($model->getFillable())
|
|
->where('rf_EmerSignID', 2)
|
|
->orderBy('DateRecipient', 'DESC')
|
|
->count();
|
|
}
|
|
|
|
return response()->json($count);
|
|
}
|
|
}
|