From d6a84ce9f27f09e55df8b867f46738e29f170c61 Mon Sep 17 00:00:00 2001 From: ivan-sim Date: Thu, 13 Feb 2025 13:41:57 +0700 Subject: [PATCH 01/12] Add Spesialis & DPPJ --- .../Http/Controllers/Api/MemberController.php | 26 +++++-- .../Controllers/Api/RequestLogController.php | 26 ++++--- .../Controllers/Api/RequestLogController.php | 12 ++- .../Transformers/RequestLogShowResource.php | 13 +++- app/Models/RequestLog.php | 4 +- app/Services/RequestLogService.php | 24 +++--- ...column_specialities_id_to_request_logs.php | 36 +++++++++ ...105939_add_column_dppj_to_request_logs.php | 36 +++++++++ .../pages/CustomerService/FinalLog/Detail.tsx | 8 ++ .../CustomerService/FinalLog/Model/Types.tsx | 2 + .../pages/CustomerService/Request/Detail.tsx | 24 ++++-- .../CustomerService/Request/Model/Types.tsx | 4 +- frontend/hospital-portal/src/lang/en-US.json | 4 +- frontend/hospital-portal/src/lang/id-ID.json | 4 +- .../src/sections/dashboard/FormRequestLog.tsx | 77 +++++++++++++++---- 15 files changed, 239 insertions(+), 61 deletions(-) create mode 100644 database/migrations/2025_02_13_102948_add_column_specialities_id_to_request_logs.php create mode 100644 database/migrations/2025_02_13_105939_add_column_dppj_to_request_logs.php diff --git a/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php b/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php index 8f95823b..f38a6f1c 100755 --- a/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php @@ -44,12 +44,12 @@ class MemberController extends Controller ->select( 'members.id', 'members.name', - 'members.member_id', + 'members.member_id', 'member_policies.policy_id', - 'persons.nik', - 'members.email', - 'members.birth_date', - 'members.gender', + 'persons.nik', + 'members.email', + 'members.birth_date', + 'members.gender', 'members.marital_status', 'members.language', 'members.race', @@ -119,14 +119,26 @@ class MemberController extends Controller $res_data['companies'] = $companies; - + + // specialities + $specialities = DB::table('specialities') + ->select( + 'specialities.id', + 'specialities.name' + ) + ->orderBy('specialities.name','asc') + ->get(); + + $res_data['specialities'] = $specialities; + + return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200); } else { return ApiResponse::apiResponse("Data Not Found", $data, trans('Message.not_found'), 404); } - + } } } diff --git a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php index 44c9e01e..f50be414 100755 --- a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php @@ -36,6 +36,8 @@ class RequestLogController extends Controller 'address_provider' => !empty($request->address_provider) ? $request->address_provider : null, 'submission_date' => $request->submission_date, 'corporate_id_partner' => !empty($request->corporate_id_partner) ? $request->corporate_id_partner : [], + 'specialities_id' => $request->specialities_id, + 'dppj' => $request->dppj ]; $validator = Validator::make($request->all(), [ 'member_id' => 'required', @@ -119,7 +121,7 @@ class RequestLogController extends Controller $requestLogControllerInstance = new PrimeCenterRequestLog(); try { $response = $requestLogControllerInstance->createNew($request); - + if($response->original['statusCode'] == 200) { //send email @@ -361,7 +363,7 @@ class RequestLogController extends Controller ->update([ 'status_final_log' => 'requested', 'final_log' => 1, - 'discharge_date' => $request->discharge_date, + 'discharge_date' => $request->discharge_date, 'created_final_by'=> auth()->user()->id, 'created_final_at'=> date('Y-m-d H:i:s'), ]); @@ -785,7 +787,7 @@ class RequestLogController extends Controller $dataDiagnosis = []; if($dataRequestLog->diagnosis) { - $dataDiagnosiCodes = explode(',', $dataRequestLog->diagnosis); + $dataDiagnosiCodes = explode(',', $dataRequestLog->diagnosis); foreach ($dataDiagnosiCodes as $diagnosisCode) { $diagnoisis = DB::table('icd') @@ -796,8 +798,8 @@ class RequestLogController extends Controller } } - $data['dataDiagnosis'] = $dataDiagnosis; - + $data['dataDiagnosis'] = $dataDiagnosis; + $pdf = new Dompdf(); @@ -848,7 +850,7 @@ class RequestLogController extends Controller ->where('id', '=', $request_logs_id) ->select('id', 'member_id', 'service_code') ->first(); - + $check_claim_requests = DB::table('claim_requests') ->where('claim_requests.request_log_id', '=', $request_logs_id) ->first(); @@ -860,12 +862,12 @@ class RequestLogController extends Controller $requestLogData = RequestLog::where('id',$request_logs_id)->first(); $organization = Organization::where(['id' => $requestLogData->organization_id, 'type' => 'hospital'])->first('code'); $provideCode = $organization ? $organization->code : ''; - + $newClaimRequest = ClaimRequestService::storeClaimRequest( - row: [], - code: $code, - member: $member, - paymentType: 'cashless', + row: [], + code: $code, + member: $member, + paymentType: 'cashless', serviceCode: $data_req_logs->service_code, requestLogID: $request_logs_id, organization_code: $provideCode, @@ -877,7 +879,7 @@ class RequestLogController extends Controller 'type' => 'info', 'system_origin' => 'hospital-portal' ]); - + // Claim Log DB::table('claim_logs') ->insert([ diff --git a/Modules/Internal/Http/Controllers/Api/RequestLogController.php b/Modules/Internal/Http/Controllers/Api/RequestLogController.php index 09d5b923..328ef515 100755 --- a/Modules/Internal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/Internal/Http/Controllers/Api/RequestLogController.php @@ -149,7 +149,9 @@ class RequestLogController extends Controller // status: 'approved', status: 'requested', // di nonaktifkan dulu auto approved organization_id: $request->organization_id, - source: $request->source + source: $request->source, + specialities_id: $request->specialities_id, + dppj: $request->dppj ); DB::commit(); @@ -171,7 +173,9 @@ class RequestLogController extends Controller submissionDate: $request->submission_date, status: 'requested', organization_id: $request->organization_id, - source: $request->source + source: $request->source, + specialities_id: $request->specialities_id, + dppj: $request->dppj ); DB::commit(); @@ -489,11 +493,11 @@ class RequestLogController extends Controller if (!empty($request->reason)) { $requestLog->reason_final = $request->reason; } - + if (!empty($request->type_of_member)){ $requestLog->type_of_member = $request->type_of_member; } - + $requestLog->final_log = 1; $requestLog->approved_final_log_by = auth()->user()->id; $requestLog->approved_final_log_at = Carbon::now(); diff --git a/Modules/Internal/Transformers/RequestLogShowResource.php b/Modules/Internal/Transformers/RequestLogShowResource.php index 8aa77dfb..a785e51c 100755 --- a/Modules/Internal/Transformers/RequestLogShowResource.php +++ b/Modules/Internal/Transformers/RequestLogShowResource.php @@ -13,6 +13,7 @@ use App\Models\Benefit; use App\Models\Exclusion; use App\Models\ClaimRequest; use App\Models\Icd; +use App\Models\Speciality; use App\Helpers\Helper; use App\Models\CorporatePolicy; use Illuminate\Http\Resources\Json\JsonResource; @@ -117,12 +118,20 @@ class RequestLogShowResource extends JsonResource } $memberUsage = Helper::getUsageMember($corporateId, $requestLog['member']['id'], $benefitData); - // dd($memberLimitUsage); + if($requestLog['specialities_id']) + { + $spesialis = Speciality::query() + ->where('id', $requestLog['specialities_id']) + ->select('name') + ->first(); + } $data = [ 'id' => $requestLog['id'], 'code' => $requestLog['code'], 'invoice_no' => $requestLog['invoice_no'], 'billing_no' => $requestLog['billing_no'], + 'specialities_id' => $spesialis['name'], + 'dppj' => $requestLog['dppj'], 'code' => $requestLog['code'], 'code_claim' => $claimCode, 'member_id' => $requestLog['member']['member_id'], @@ -161,7 +170,7 @@ class RequestLogShowResource extends JsonResource 'reason' => $requestLog['reason'], 'diagnosis' => $icd, 'is_reversal' => $isReversal, // untuk penjagaan, jika true tidak bisa di edit/hapus lagi - + ]; diff --git a/app/Models/RequestLog.php b/app/Models/RequestLog.php index 08e45eb7..bd180522 100755 --- a/app/Models/RequestLog.php +++ b/app/Models/RequestLog.php @@ -51,6 +51,8 @@ class RequestLog extends Model 'approved_final_log_at', 'created_final_at', 'created_final_by', + 'specialities_id', + 'dppj', 'type_of_member' ]; @@ -82,7 +84,7 @@ class RequestLog extends Model "Keterangan IGL" => "keterangan", "Catatan FGL" => "catatan", "QC 1" => "status_final_log", - "Ingestion Code" => "ingestion_code", + "Ingestion Code" => "ingestion_code", "Ingestion Status" => "ingestion_status", ]; diff --git a/app/Services/RequestLogService.php b/app/Services/RequestLogService.php index 415a7ed2..1b821865 100755 --- a/app/Services/RequestLogService.php +++ b/app/Services/RequestLogService.php @@ -21,14 +21,16 @@ use Str; class RequestLogService{ public static function storeRequestLog( - $row = null, - $code, - $member, - $paymentType, - $serviceCode, - $submissionDate, - $status, $organization_id = null, - $source + $row = null, + $code, + $member, + $paymentType, + $serviceCode, + $submissionDate, + $status, $organization_id = null, + $source, + $specialities_id, + $dppj ) { try { @@ -55,6 +57,8 @@ class RequestLogService{ 'policy_id' => $member->currentPolicy->id ?? null, 'organization_id' => $organization ? $organization->id : 0, 'source' => $source, + 'specialities_id' => $specialities_id, + 'dppj' => $dppj ]; $requestLog = RequestLog::create($requestLogData); @@ -109,7 +113,7 @@ class RequestLogService{ DB::commit(); return $claimManagement; - + } catch (\Exception $error) { DB::rollBack(); @@ -168,4 +172,4 @@ class RequestLogService{ } } -} \ No newline at end of file +} diff --git a/database/migrations/2025_02_13_102948_add_column_specialities_id_to_request_logs.php b/database/migrations/2025_02_13_102948_add_column_specialities_id_to_request_logs.php new file mode 100644 index 00000000..bbf14e00 --- /dev/null +++ b/database/migrations/2025_02_13_102948_add_column_specialities_id_to_request_logs.php @@ -0,0 +1,36 @@ +bigInteger('specialities_id')->after('created_final_by')->nullable(); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if(!Schema::hasColumn('request_logs', 'specialities_id')) { + Schema::table('request_logs', function (Blueprint $table) { + $table->dropColumn('specialities_id'); + }); + } + } +}; diff --git a/database/migrations/2025_02_13_105939_add_column_dppj_to_request_logs.php b/database/migrations/2025_02_13_105939_add_column_dppj_to_request_logs.php new file mode 100644 index 00000000..0e8447da --- /dev/null +++ b/database/migrations/2025_02_13_105939_add_column_dppj_to_request_logs.php @@ -0,0 +1,36 @@ +string('dppj', '255')->after('specialities_id')->nullable(); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if(!Schema::hasColumn('request_logs', 'dppj')) { + Schema::table('request_logs', function (Blueprint $table) { + $table->dropColumn('dppj'); + }); + } + } +}; diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx index 902e9272..86952c26 100755 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx @@ -250,6 +250,14 @@ export default function Detail() { Penempatan Kamar {requestLog?.penempatan_kamar ? requestLog?.penempatan_kamar : '-'} + + Spesialis + {requestLog?.specialities_id ? requestLog?.specialities_id : '-'} + + + DPPJ + {requestLog?.dppj ? requestLog?.dppj : '-'} + Catatan {requestLog?.catatan ? requestLog?.catatan : '-'} diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx index 6401a2b4..be8ac1ba 100755 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx @@ -24,6 +24,8 @@ export type FinalLogType = { provider : string, status : string, files_by_type : files_by_type, + specialities_id : number, + dppj: string } diff --git a/frontend/dashboard/src/pages/CustomerService/Request/Detail.tsx b/frontend/dashboard/src/pages/CustomerService/Request/Detail.tsx index 6ba7f378..d192b013 100755 --- a/frontend/dashboard/src/pages/CustomerService/Request/Detail.tsx +++ b/frontend/dashboard/src/pages/CustomerService/Request/Detail.tsx @@ -34,7 +34,7 @@ export default function Detail() { const navigate = useNavigate(); const { themeStretch } = useSettings(); const [requestLog, setRequestLog] = useState(); - + const { id } = useParams(); @@ -70,9 +70,9 @@ export default function Detail() { const handleCloseDialogSubmit = () => { setOpenDialogSubmit(false); } - + const [approve, setApprove] = useState('') - + const [openDialogEdit, setOpenDialogEdit] = useState(false); return ( @@ -84,7 +84,7 @@ export default function Detail() { - + Detail @@ -106,7 +106,7 @@ export default function Detail() { /> ) : null} - + Provider Name @@ -157,6 +157,14 @@ export default function Detail() { Penempatan Kamar {requestLog?.penempatan_kamar ? requestLog?.penempatan_kamar : '-'} + + Spesialis + {requestLog?.specialities_id ? requestLog?.specialities_id : '-'} + + + DPPJ + {requestLog?.dppj ? requestLog?.dppj : '-'} + @@ -217,13 +225,13 @@ export default function Detail() { openDialog={openDialogSubmit} approve={approve} > - + ) : null} - - + diff --git a/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx b/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx index 209fab3a..a446cbcf 100755 --- a/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx +++ b/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx @@ -57,7 +57,9 @@ export type DetailRequestLogType = { benefit : Benefit[], reason : string, type_of_member : string, - corporate_id : number + corporate_id : number, + specialities_id : number, + dppj: string } export type Benefit = { diff --git a/frontend/hospital-portal/src/lang/en-US.json b/frontend/hospital-portal/src/lang/en-US.json index 88f5da3a..2de517d8 100755 --- a/frontend/hospital-portal/src/lang/en-US.json +++ b/frontend/hospital-portal/src/lang/en-US.json @@ -138,7 +138,9 @@ "txtButtonClose": "Close", "txtLabelFailed": "Failed", "txtAttention": "Attention", - "txtAttentionInfo": "There are pending orders that require approval." + "txtAttentionInfo": "There are pending orders that require approval.", + "txtDPPJ": "DPPJ", + "txtSpecialist": "Specialist" } diff --git a/frontend/hospital-portal/src/lang/id-ID.json b/frontend/hospital-portal/src/lang/id-ID.json index ac3e7f70..2b6edfce 100755 --- a/frontend/hospital-portal/src/lang/id-ID.json +++ b/frontend/hospital-portal/src/lang/id-ID.json @@ -138,5 +138,7 @@ "txtButtonClose": "Tutup", "txtLabelFailed": "Gagal Pengiriman", "txtAttention": "Perhatian", - "txtAttentionInfo": "Terdapat pesanan pending mohon untuk segera di approve." + "txtAttentionInfo": "Terdapat pesanan pending mohon untuk segera di approve.", + "txtDPPJ": "DPPJ", + "txtSpecialist": "Spesialis" } diff --git a/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx b/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx index 70bb881a..3858fa54 100755 --- a/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx @@ -1,18 +1,18 @@ import { LoadingButton } from '@mui/lab'; -import -{ +import +{ Avatar, FormControl, InputLabel, Select, FormHelperText, - MenuItem + MenuItem } from '@mui/material'; import { Card } from '@mui/material'; import { Stack, Typography } from '@mui/material'; import axios from '@/utils/axios'; import { enqueueSnackbar } from 'notistack'; -import { useRef, useState, useContext, useEffect } from 'react'; +import React, { useRef, useState, useContext, useEffect } from 'react'; import { makeFormData } from '@/utils/jsonToFormData'; import { format } from 'date-fns'; import { LanguageContext } from '@/contexts/LanguageContext'; @@ -28,6 +28,7 @@ interface MemberType { services: any; providers:any; companies:any; + specialities:any; } interface FormRequestClaimProps { member: MemberType; @@ -37,6 +38,8 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe const { localeData }: any = useContext(LanguageContext); const [serviceCode, setServiceCode] = useState(''); const [idProvider, setIdProvider] = useState(0); + const [idSpecialities, setIdSpecialities] = useState(0); + const [inputDppj, setInputDppj] = useState(''); //Submission date const [submissionDate, setSubmissionDate] = useState(format(new Date(), "yyyy MMM d HH:mm:ss")); @@ -47,7 +50,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe setCorporateIdPartner(member?.companies?.map((item: { id: any; name: any; }) => ({ value: item.id, label: item.name }))); }, []); const [selectedCorporatID, setSelectedCorporateID] = useState([]); - + const handleSelectChangePatner = (event:any, selectedOptions:any) => { const selectedValues = selectedOptions.map((option: { value: any; }) => option.value); setSelectedCorporateID(selectedValues); @@ -77,24 +80,26 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe organization_name : name, address_provider: alamat, submission_date: fPostFormat(submissionDate, 'yyyy-MM-dd HH:mm:ss'), - corporate_id_partner: selectedCorporatID + corporate_id_partner: selectedCorporatID, + specialities_id: idSpecialities, + dppj: inputDppj }; axios .post('/request-log', formData) .then((response) => { if (response && response.data && response.data.meta) { - setTimeout(() => { - window.location.reload(); - }, 1500); + // setTimeout(() => { + // window.location.reload(); + // }, 1500); enqueueSnackbar(response.data.meta.message, { variant: 'success' }); handleSubmitSuccess(); - - } + + } }) .catch(({ response }) => { if (response && response.data && response.data.meta) { enqueueSnackbar(response.data.meta.message, { variant: 'error' }); - } + } }) .then(() => { setSubmitLoading(false); @@ -111,6 +116,11 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe name: string; } + interface Specialities { + id: number; + name: string; + } + const [showAddNewForm, setShowAddNewForm] = useState(false); const [name, setName] = useState(''); const [alamat, setAlamat] = useState(''); @@ -191,7 +201,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe - + {localeData.txtDialogMember1} * @@ -215,6 +225,45 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe + {/* Specialist */} + + + {localeData.txtSpecialist} + option.name || ''} + value={member?.specialities.find((item: Specialities) => item.id === idSpecialities) || null} + onChange={(event: React.ChangeEvent<{}>, newValue : Specialities | null) => { + setIdSpecialities(newValue?.id || 0); + }} + renderInput={(params) => ( + + )} + /> + + + + + + + { localeData.txtDPPJ } + { + setInputDppj(event.target.value); + }} + fullWidth + /> + + + {localeData.txtDialogMember5} * @@ -226,7 +275,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe setSubmissionDate( (newValue)); }} inputFormat="dd-MM-yyyy HH:mm" - renderInput={(params) => } + renderInput={(params) => } /> From ffaef03945c286e210361da8f0b4585822542333 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Tue, 18 Feb 2025 11:07:55 +0700 Subject: [PATCH 02/12] view, search dan tambah daily monitoring --- .../Api/DailyMonitoringController.php | 208 +++++++++++- .../Controllers/Api/RequestLogController.php | 19 ++ Modules/Internal/Routes/api.php | 2 + .../Transformers/DailyMonitoringResource.php | 13 +- app/Models/RequestDailyMonitoring.php | 7 + ..._to_request_log_daily_monitoring_table.php | 44 +++ .../Components/DailyMonitoringList.tsx | 321 +++++++++++++++--- .../Components/DailyMonitoringListRow.tsx | 51 ++- .../Components/DetailMonitoringForm.tsx | 207 +++++++++-- .../Components/DetailMonitoringList.tsx | 14 +- .../DailyMonitoring/Model/Functions.ts | 2 +- .../DailyMonitoring/Model/Types.ts | 27 +- frontend/dashboard/src/routes/index.tsx | 4 + 13 files changed, 823 insertions(+), 96 deletions(-) create mode 100644 database/migrations/2025_02_12_153942_add_column_to_request_log_daily_monitoring_table.php diff --git a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php index 488ededf..df8fdd1e 100755 --- a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php +++ b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php @@ -13,6 +13,7 @@ use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\File as Files; use Modules\Internal\Transformers\DailyMonitoringResource; use App\Models\File; +use Carbon\Carbon; /** @@ -38,11 +39,27 @@ class DailyMonitoringController extends Controller public function GetMemberList(Request $request) { - $memberList = DB::table('request_logs') + $startDate = $request->start_date ? Carbon::parse($request->start_date) : Carbon::today(); + $endDate = $request->end_date ? Carbon::parse($request->end_date)->addDay() : Carbon::today()->addDay(); + + $memberList = DB::table('request_log_daily_monitorings') + ->leftJoin('request_logs', 'request_log_daily_monitorings.request_log_id', '=', 'request_logs.id') ->leftJoin('members', 'request_logs.member_id', '=', 'members.id') ->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id') - ->select('members.member_id','members.name','members.members_effective_date AS startdate','members.members_expire_date AS enddate', 'request_logs.submission_date as addmision_date', 'organizations.name as provider', 'request_logs.organization_id' ) - ->where('request_logs.service_code', 'IP') + ->select( + 'members.member_id', + 'members.name', + 'members.birth_date', + 'members.record_type as member_type', + 'members.members_effective_date AS startdate', + 'members.members_expire_date AS enddate', + 'request_logs.submission_date as addmision_date', + 'organizations.name as provider', + 'request_logs.organization_id', + 'request_logs.code', + 'request_log_daily_monitorings.*' + ) + // ->where('request_logs.service_code', 'IP') ->where('request_logs.deleted_at', null) ->when($request->search, function ($q, $search) { $q->where(function ($subQ) use ($search) { @@ -50,13 +67,17 @@ class DailyMonitoringController extends Controller $subQ->orWhere('members.name','LIKE',"%".$search."%"); }); }) + ->when($startDate, function ($q) use ($startDate) { + $q->where('request_log_daily_monitorings.submission_date', '>=', $startDate); + }) + ->when($endDate, function ($q) use ($endDate) { + $q->where('request_log_daily_monitorings.submission_date', '<=', Carbon::parse($endDate)->addDay()); + }) // ->where('request_logs.status_final_log', 'approved') - ->groupBy('request_logs.member_id', 'request_logs.organization_id') + // ->groupBy('request_logs.member_id', 'request_logs.organization_id') ->orderBy('request_logs.created_at', 'desc') // ->get() ->paginate(); - - return Helper::paginateResources(DailyMonitoringResource::collection($memberList)); } @@ -620,6 +641,181 @@ class DailyMonitoringController extends Controller } } + public function AddListRequestLog(Request $request) + { + // validation rule + $validator = Validator::make($request->all(),[ + 'log_code' => 'required|exists:request_logs,id', + 'subject' => 'required', + 'submission_date' => 'required', + 'body_temperature' => 'required', + 'sistole' => 'required', + 'diastole' => 'required', + 'respiration_rate' => 'required', + 'analysis' => 'required', + 'medical_plan' => 'required', + 'non_medikamentosa_plan' => 'required', + ],$this->messages()); + + // validation error + if ($validator->fails()) { + return response()->json([ + 'error' => true, + 'message' => $validator->getMessageBag() + ],400); + } + + // get claim request + $request_log = DB::table('request_logs') + ->select('id') + ->where('id', $request->log_code) + ->first(); + DB::beginTransaction(); + try { + // insert claim daily monitoring + $db_response = RequestDailyMonitoring::create([ + 'request_log_id' => $request->log_code, + 'submission_date' => $request->submission_date, + 'doctor_1' => $request->doctor_1, + 'doctor_2' => $request->doctor_2, + 'temp_diagnosis' => $request->temp_diagnosis, + 'final_diagnosis' => $request->final_diagnosis, + 'approval_pendamping' => $request->approval_pendamping, + 'description' => $request->keterangan, + 'note' => $request->catatan, + 'subject' => $request->subject, + 'object' => $request->objective, + 'sistole' => $request->sistole, + 'diastole' => $request->diastole, + 'body_temperature' => $request->body_temperature, + 'respiration_rate' => $request->respiration_rate, + 'analysis' => $request->analysis, + 'lab_date' => $request->lab_date, + 'provider' => $request->provider, + 'examination' => $request->examination, + 'created_by' => auth()->user()->id, + ]); + + + // cek medical plan + $num_medical_plan = 0; + foreach ($request->medical_plan as $row) { + if ($row['medical_plan_str']) { + $num_medical_plan++; + } + } + + if ($num_medical_plan == 0) { + DB::rollBack(); + return response()->json([ + 'error' => true, + 'message' => [ + 'medical_plan' => ['medical plan harus diisi'] + ], + 'data' => [] + ],400); + } + + // insert medical plan + foreach ($request->medical_plan as $row) { + DB::table('request_log_medical_plan')->insert([ + 'request_log_daily_monitoring_id' => $db_response->id, + 'plan' => $row['medical_plan_str'], + 'type' => 1, + 'created_at' => date('Y-m-d'), + ]); + } + + // insert non medical plan + foreach ($request->non_medikamentosa_plan as $row) { + DB::table('request_log_medical_plan')->insert([ + 'request_log_daily_monitoring_id' => $db_response->id, + 'plan' => $row['non_medikamentosa_plan_str'], + 'type' => 2, + 'created_at' => date('Y-m-d'), + ]); + } + + // insert file result + if ($request->confirmation_medical_leter){ + foreach ($request->confirmation_medical_leter as $file) { + $name = 'labresult-' . uniqid(); + $extension= $file->getClientOriginalExtension(); + $fileName = $name . '.' . $extension; + $orignalName = $file->getClientOriginalName(); + $path = $file->storeAs($this->path_for_store, $fileName); + File::create([ + 'fileable_type' => 'App\Models\LaboratoriumResult', + 'fileable_id' => $db_response->id, + 'type' => 'confirmation-medical-letter', + 'name' => $name, + 'original_name' => $orignalName, + 'extension' => $extension, + 'path' => $path, + ]); + + } + } + if ($request->medical_action_letter){ + foreach ($request->medical_action_letter as $file) { + $name = 'labresult-' . uniqid(); + $extension= $file->getClientOriginalExtension(); + $fileName = $name . '.' . $extension; + $orignalName = $file->getClientOriginalName(); + $path = $file->storeAs($this->path_for_store, $fileName); + File::create([ + 'fileable_type' => 'App\Models\LaboratoriumResult', + 'fileable_id' => $db_response->id, + 'type' => 'medical-action-letter', + 'name' => $name, + 'original_name' => $orignalName, + 'extension' => $extension, + 'path' => $path, + ]); + + // $file->storeAs($this->path_for_store, $fileName); + } + } + if ($request->result){ + foreach ($request->result as $file) { + $name = 'labresult-' . uniqid(); + $extension= $file->getClientOriginalExtension(); + $orignalName = $file->getClientOriginalName(); + $fileName = $name . '.' . $extension; + $path = $file->storeAs($this->path_for_store, $fileName); + File::create([ + 'fileable_type' => 'App\Models\LaboratoriumResult', + 'fileable_id' => $db_response->id, + 'type' => 'laboratorium-result', + 'name' => $name, + 'original_name' => $orignalName, + 'extension' => $extension, + 'path' => $path, + ]); + + // $file->storeAs($this->path_for_store, $fileName); + } + } + + + DB::commit(); + + return response()->json([ + 'error' => false, + 'message' => "success", + 'data' => [] + ],200); + } + catch (Exception $e) { + DB::rollBack(); + return response()->json([ + 'error' => true, + 'message' => $e->getMessage(), + 'data' => [] + ],500); + } + } + /** * Delete Listing Daily Monitoring */ diff --git a/Modules/Internal/Http/Controllers/Api/RequestLogController.php b/Modules/Internal/Http/Controllers/Api/RequestLogController.php index 09d5b923..a5c259e3 100755 --- a/Modules/Internal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/Internal/Http/Controllers/Api/RequestLogController.php @@ -236,6 +236,25 @@ class RequestLogController extends Controller return Helper::responseJson(data: $manipulatedIcds); } + public function codeLog(Request $request){ + $codeLogs = RequestLog::with(['member'])->when($request->search, function ($q, $search) { + $q->where('code', 'LIKE', "%".$search."%"); + $q->orWhereHas('member', function ($subQuery) use ($search) { + $subQuery->where('name', 'LIKE', "%".$search."%"); + }); + }) + ->paginate(); + + $manipulatedIcds = $codeLogs->map(function ($codeLog) { + // Contoh manipulasi, tambahkan atau ubah properti sesuai kebutuhan + return [ + 'value' => $codeLog->id, // Ganti dengan properti yang sesuai dari model Icd + 'label' => $codeLog->code . ' - ' .$codeLog->member->name, // Ganti dengan properti yang sesuai dari model Icd + ]; + }); + return Helper::responseJson(data: $manipulatedIcds); + } + public function hospitals(){ $organizations = Organization::query() ->where([ diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index 3fde67d7..61abb29d 100755 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -82,6 +82,7 @@ Route::prefix('internal')->group(function () { Route::get('diagnosis', [RequestLogController::class, 'diagnosis']); + Route::get('codeLog', [RequestLogController::class, 'codeLog']); Route::get('drugs', [AutocompleteController::class, 'drugList']); Route::get('units', [AutocompleteController::class, 'unitList']); @@ -207,6 +208,7 @@ Route::prefix('internal')->group(function () { Route::post('detail/update-request', [DailyMonitoringController::class, 'UpdateDetailMonitoringbyID']); Route::post('detail/{claim_code}/add', [DailyMonitoringController::class, 'AddDetailMonitoringList']); Route::post('detail/{claim_code}/add-request', [DailyMonitoringController::class, 'AddDetailMonitoringListRequestLog']); + Route::post('add-request', [DailyMonitoringController::class, 'AddListRequestLog']); Route::post('detail/{claim_code}/update-status', [DailyMonitoringController::class, 'UpdateListRequestLog']); Route::get('detail/{id}/delete', [DailyMonitoringController::class, 'deleteDetailMonitoringListRequestLog']); Route::get('detail/{id}/delete-file', [DailyMonitoringController::class, 'deleteFileDetailMonitoringListRequestLog']); diff --git a/Modules/Internal/Transformers/DailyMonitoringResource.php b/Modules/Internal/Transformers/DailyMonitoringResource.php index e1090d92..422bd144 100755 --- a/Modules/Internal/Transformers/DailyMonitoringResource.php +++ b/Modules/Internal/Transformers/DailyMonitoringResource.php @@ -14,15 +14,26 @@ class DailyMonitoringResource extends JsonResource */ public function toArray($request) { - $data = [ + 'code' => $this->code, + 'id' => $this->id, 'member_id' => $this->member_id, + 'member_type' => $this->member_type, + 'birth_date' => $this->birth_date, 'name' => $this->name, 'start_date' => $this->startdate, 'end_date' => $this->enddate, 'addmision_date' => $this->addmision_date, 'provider' => $this->provider, 'organization_id' => $this->organization_id, + 'doctor_1' => $this->doctor_1, + 'doctor_2' => $this->doctor_2, + 'temp_diagnosis' => $this->temp_diagnosis, + 'final_diagnosis' => $this->final_diagnosis, + 'approval_pendamping' => $this->approval_pendamping, + 'status' => $this->status, + 'description' => strip_tags($this->description), + 'note' => strip_tags($this->note), ]; return $data; diff --git a/app/Models/RequestDailyMonitoring.php b/app/Models/RequestDailyMonitoring.php index 83b9aa16..06757c77 100755 --- a/app/Models/RequestDailyMonitoring.php +++ b/app/Models/RequestDailyMonitoring.php @@ -16,6 +16,13 @@ class RequestDailyMonitoring extends Model protected $fillable = [ 'request_log_id', + 'doctor_1', + 'doctor_2', + 'temp_diagnosis', + 'final_diagnosis', + 'approval_pendamping', + 'description', + 'note', 'subject', 'object', 'submission_date', diff --git a/database/migrations/2025_02_12_153942_add_column_to_request_log_daily_monitoring_table.php b/database/migrations/2025_02_12_153942_add_column_to_request_log_daily_monitoring_table.php new file mode 100644 index 00000000..a6bc899e --- /dev/null +++ b/database/migrations/2025_02_12_153942_add_column_to_request_log_daily_monitoring_table.php @@ -0,0 +1,44 @@ +string('doctor_1')->after('examination')->nullable(); + $table->string('doctor_2')->after('doctor_1')->nullable(); + $table->string('approval_pendamping')->after('doctor_2')->nullable(); + $table->text('description')->after('approval_pendamping')->nullable(); + $table->text('note')->after('description')->nullable(); + $table->string('temp_diagnosis')->after('note')->nullable(); + $table->string('final_diagnosis')->after('temp_diagnosis')->nullable(); + $table->string('status')->after('final_diagnosis')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('request_log_daily_monitorings', function (Blueprint $table) { + $table->dropColumn('doctor_1'); + $table->dropColumn('doctor_2'); + $table->dropColumn('description'); + $table->dropColumn('note'); + $table->dropColumn('temp_diagnosis'); + $table->dropColumn('final_diagnosis'); + }); + } +}; diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx index 30b755c1..6b3a49c3 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx @@ -3,7 +3,7 @@ * ============================================ */ import React, { ChangeEvent, useEffect, useRef, useState } from "react"; -import { Box, Paper, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Stack, TextField, Button, Menu, } from "@mui/material"; +import { Box, Paper, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Stack, TextField, Button, Menu, Typography, ButtonGroup, } from "@mui/material"; /** * Types & Functions @@ -15,9 +15,18 @@ import DailyMonitoringListRow from "./DailyMonitoringListRow"; import { LaravelPaginatedData, LaravelPaginatedDataDefault } from "@/@types/paginated-data"; import { Grid } from "@mui/material"; import DataTable from '../../../../components/LaravelTable'; +import DownloadIcon from '@mui/icons-material/Download'; +import CancelIcon from '@mui/icons-material/Cancel'; +import UploadIcon from '@mui/icons-material/Upload'; import { MenuItem } from "@mui/material"; -import { useSearchParams } from "react-router-dom"; +import { useNavigate, useSearchParams } from "react-router-dom"; import axios from "@/utils/axios"; +import { DesktopDatePicker, LocalizationProvider } from "@mui/x-date-pickers"; +import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; +import { fDateOnly } from "@/utils/formatTime"; +import { LoadingButton } from "@mui/lab"; +import { Import } from "@/@types/claims"; +import { HeadCell, Order } from '@/@types/table'; export default function DailyMonitoringList() { const [searchParams, setSearchParams] = useSearchParams(); @@ -34,8 +43,7 @@ export default function DailyMonitoringList() { fontWeight: 'bold', }; - - + const [importResult, setImportResult] = useState(null); // Load Data // ------------------- const loadDataTableData = async (appliedFilter: any | null = null) => { @@ -57,46 +65,156 @@ export default function DailyMonitoringList() { loadDataTableData(filter); setSearchParams(filter); }; + + + /* ------------------------------ handle params ----------------------------- */ + const [appliedParams, setAppliedParams] = useState({}); + + const params = { + searchParams: searchParams, + setSearchParams: setSearchParams, + appliedParams: appliedParams, + setAppliedParams: setAppliedParams, + }; + + /* ------------------------------ handle order ------------------------------ */ + const [order, setOrder] = useState('desc'); + const [orderBy, setOrderBy] = useState('submission_date'); + + const orders = { + order: order, + setOrder: setOrder, + orderBy: orderBy, + setOrderBy: setOrderBy, + }; + + /* ------------------------------- handle sort ------------------------------ */ + const handleRequestSort = async (event: React.MouseEvent, property: string) => { + const isAsc = orders?.orderBy === property && orders?.order === 'asc'; + + orders?.setOrder(isAsc ? 'desc' : 'asc'); + orders?.setOrderBy(property); + const parameters = Object.fromEntries([ + ...(params?.searchParams.entries() as IterableIterator<[string, string]>), + ['order', isAsc ? 'desc' : 'asc'], + ['orderBy', property], + ]); + params?.setAppliedParams(parameters); + }; useEffect(() => { loadDataTableData(); - }, []) + }, [appliedParams, searchParams, order, orderBy, setSearchParams]) function SearchInput(props: any) { // SEARCH const searchInput = useRef(null); const [searchText, setSearchText] = useState(''); - + // Start Date + // con + const handleSearchChange = (event: any) => { const newSearchText = event.target.value ?? ''; setSearchText(newSearchText); }; - - const handleSearchSubmit = (event: any) => { - event.preventDefault(); - props.onSearch({ search: searchText }); // Trigger to Parent - }; - + + + const today = new Date(); // Default ke hari ini + + const [startDate, setStartDate] = useState(today); + const [endDate, setEndDate] = useState(today); + + useEffect(() => { + // Set nilai default saat pertama kali load jika searchParams kosong + const paramStartDate = searchParams.get('start_date'); + const paramEndDate = searchParams.get('end_date'); + + if (paramStartDate) { + setStartDate(new Date(paramStartDate)); + } + if (paramEndDate) { + setEndDate(new Date(paramEndDate)); + } + }, []); + useEffect(() => { // Trigger First Search setSearchText(searchParams.get('search') ?? ''); }, []); - + return ( -
- + + + + { + if (event.key === 'Enter') { + // handleSearchSubmit(event); + + const filter = Object.fromEntries([ + ...searchParams.entries(), + ['search', searchText], + ]); + setSearchParams(filter); + loadDataTableData(filter); + } + }} + value={searchText} + placeholder='Search Code or Name...' + /> + + {/* Start Date */} + + + { + if (value) { + setStartDate(value); + const dateStr = fDateOnly(value); + const filter = Object.fromEntries([...searchParams.entries(), ['start_date', dateStr]]); + setSearchParams(filter); + loadDataTableData(filter); + } + }} + renderInput={(params) => } + /> + + + + {/* End Date */} + + + { + if (value) { + setEndDate(value); + const dateStr = fDateOnly(value); + const filter = Object.fromEntries([...searchParams.entries(), ['end_date', dateStr]]); + setSearchParams(filter); + loadDataTableData(filter); + } + }} + renderInput={(params) => } + /> + + + + ); - } + } function ImportForm(props: any) { // IMPORT @@ -110,6 +228,7 @@ export default function DailyMonitoringList() { const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; + const handleClose = () => { setAnchorEl(null); }; @@ -124,7 +243,8 @@ export default function DailyMonitoringList() { }; const handleCancelImportButton = () => { - + importForm.current.value = ''; + importForm.current.dispatchEvent(new Event('change', { bubbles: true })); }; const handleImportChange = (event: any) => { @@ -136,32 +256,146 @@ export default function DailyMonitoringList() { }; const handleUpload = () => { - + if (importForm.current?.files.length) { + const formData = new FormData(); + formData.append('file', importForm.current?.files[0]); + + setImportLoading(true); + axios + .post(`customer-service/request/import`, formData) + .then((response) => { + handleCancelImportButton(); + loadDataTableData(); + setImportResult(response.data); + // alert('Succesfully read '+ response.data.total_successed_row + ' with ' + response.data.total_failed_row + ' failed rows'); + setImportLoading(false); + }) + .catch((response) => { + enqueueSnackbar( + 'Looks like something went wrong. Please check your data and try again. ' + + response.message, + { variant: 'error' } + ); + setImportLoading(false); + }); + } else { + enqueueSnackbar('No File Selected', { variant: 'warning' }); + } }; const handleGetTemplate = (type :string) => { - + axios.get('corporates/import-document-example/' + type) + .then((response) => { + const link = document.createElement('a'); + link.href = response.data.data.file_url; + link.setAttribute('download', response.data.data.file_name); + document.body.appendChild(link); + link.click(); + handleClose(); + }) } const handleGetData = (type :string) => { } + const navigate = useNavigate() + return (
+ {!currentImportFileName && ( - {/* */} + + + + Import + + { + handleGetTemplate('member'); + }} + > + Download Template + + navigate(`/case_management/daily_monitoring/add_monitoring`)}> + Tambah + + + + )} + + {currentImportFileName && ( + + + + + + + } + sx={{ p: 1.8 }} + onClick={handleUpload} + loading={importLoading} + > + Upload + + + )} + + {importResult && ( + + + Last Import Result :{' '} + + {importResult.total_success_row ?? 0} + {' '} + Row Processed,{' '} + + {importResult.total_failed_row} + {' '} + Failed, Report :{' '} + + {importResult.result_file?.name ?? '-'} + + )}
@@ -175,12 +409,19 @@ export default function DailyMonitoringList() { + Admission Date Member ID Name - Start Date - End Date - Admission Date - Provider + Tanggal Lahir + Member Type + Dokter 1 + Dokter 2 + Temp Diagnosa + Diagnosa Akhir + Approval Pendamping + Keterangan + Penjaminan + Catatan diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx index 087a9b4b..9272ecc5 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx @@ -21,6 +21,7 @@ import TableMoreMenu from '@/components/table/TableMoreMenu'; */ import { fDate } from "@/utils/formatTime"; import { DailyMonitoringListType } from "../Model/Types"; +import { Edit } from "@mui/icons-material"; type Props = { row: DailyMonitoringListType, @@ -29,12 +30,20 @@ type Props = { export default function DailyMonitoringListRow ({ ...props }: Props) { const navigate = useNavigate() - + return ( td': { borderBottom: '1' } }}> + + + {props.row.member_id} {props.row.name} @@ -42,34 +51,44 @@ export default function DailyMonitoringListRow ({ ...props }: Props) { variant="ghost" color="default" > - {fDate(props.row.start_date)} + {props.row.birth_date ? fDate(props.row.birth_date) : '-'} - + {props.row.member_type} + {props.row.doctor_1} + {props.row.doctor_2} + {props.row.temp_diagnosis} + {props.row.final_diagnosis} + {props.row.approval_pendamping} - + {props.row.description + ? props.row.description.length > 130 + ? props.row.description.substring(0, 130) + "..." + : props.row.description + : "-"} + + {props.row.provider || "-"} + + {props.row.note + ? props.row.note.length > 130 + ? props.row.note.substring(0, 130) + "..." + : props.row.note + : "-"} - {props.row.provider} e.stopPropagation()}> - navigate(`/case_management/daily_monitoring/${props.row.member_id}/${props.row.organization_id}/claims`)}> + navigate(`/case_management/daily_monitoring/${props.row.member_id}/claims/${props.row.code}/list_monitoring`)}> View + navigate(`/case_management/daily_monitoring/${props.row.member_id}/claims/${props.row.code}/${props.row.id}`)}> + + Edit + } /> diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx index 6a6af022..fa7f3bd2 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx @@ -4,7 +4,7 @@ */ import { useFieldArray, useForm } from 'react-hook-form'; import { useNavigate, useParams } from 'react-router-dom'; -import { Box, IconButton, Typography, Grid, Card, Button, ButtonBase, Stack, Autocomplete } from '@mui/material'; +import { Box, IconButton, Typography, Grid, Card, Button, ButtonBase, Stack, Autocomplete, CircularProgress } from '@mui/material'; import { LoadingButton } from "@mui/lab"; /** @@ -28,41 +28,41 @@ import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile'; * Utils, Types, Functions * ============================================ */ -import { AddMonitoringDetail, UpdateMonitoringDetail, getMonitoringDetailById, getMonitoringDetailList, getMonitorungDetailById, getOrganizationId } from '../Model/Functions'; +import { AddMonitoringDetail, UpdateMonitoringDetail, getMonitoringDetailById, getOrganizationId } from '../Model/Functions'; import { DetailMonitoringListType} from '../Model/Types'; import FormCreateFilesUpload from '@/pages/CustomerService/FinalLog/Components/FormCreateFilesUpload'; import MultiFilePreview from '@/components/upload/MultiFilePreview'; import Iconify from '@/components/Iconify'; import { useEffect, useMemo, useRef, useState } from 'react'; import { TextField } from '@mui/material'; +import axios from "@/utils/axios"; type Detail = { row : DetailMonitoringListType|undefined } export default function DetailMonitoringList() { - const { member_id, claim_code, id} = useParams(); + const { member_id, id} = useParams(); const [organizationId, setOrganizationId] = useState(); const [isEdit, setIsEdit] = useState(false); const [data, setData] = useState(); const navigate = useNavigate() - const pageTitle = claim_code??'_ _ _ _'; const fileInput1 = useRef(null); const fileInput2 = useRef(null); const fileInput3 = useRef(null); - const loadOrganizationID = async () => { - const organization_id = await getOrganizationId(claim_code??''); - setOrganizationId(organization_id); - } + // const loadOrganizationID = async () => { + // const organization_id = await getOrganizationId(''); + // setOrganizationId(organization_id); + // } const loadDetailDailyMonitoring = async () => { - const monitoring = await getMonitoringDetailById(id??'') + const monitoring = await getMonitoringDetailById('') setData(monitoring) } useEffect(() => { - loadOrganizationID(); + // loadOrganizationID(); if (id){ loadDetailDailyMonitoring(); setIsEdit(true) @@ -75,7 +75,15 @@ export default function DetailMonitoringList() { const defaultValues = useMemo( () => ({ id : data?.id ??'', - claim_code : data?.claim_code ?? '', + // claim_code : data?.claim_code ?? '', + log_code : data?.log_code ?? '', + doctor_1 : data?.doctor_1 ?? '', + doctor_2 : data?.doctor_2 ?? '', + temp_diagnosis : data?.temp_diagnosis ?? '', + final_diagnosis : data?.final_diagnosis ?? '', + approval_pendamping : data?.approval_pendamping ?? '', + keterangan : data?.keterangan ?? '', + catatan : data?.catatan ?? '', claim_id : data?.claim_id ?? '', subject : data?.subject ?? '', objective : data?.object ?? '', @@ -188,7 +196,6 @@ export default function DetailMonitoringList() { arr_result.push(event.target.files[0]); setValue('result', arr_result) - console.log('test3') } else { console.log('NO FILE'); @@ -230,35 +237,70 @@ export default function DetailMonitoringList() { // ===================================== const submitHandler = async (data: DetailMonitoringListType) => { - const response = isEdit ? await UpdateMonitoringDetail(data) : await AddMonitoringDetail(claim_code??'', data); + const response = isEdit ? await UpdateMonitoringDetail(data) : await AddMonitoringDetail('', data); if (response == true) { reset(); if (isEdit) { - navigate('/case_management/daily_monitoring/'+member_id+'/claims/'+claim_code+'/list_monitoring', { replace: true }); + navigate('/case_management/daily_monitoring', { replace: true }); } else { - navigate('/case_management/daily_monitoring/'+member_id+'/'+organizationId+'/claims', { replace: true }); + navigate('/case_management/daily_monitoring', { replace: true }); } // window.location.reload() } } const [selectedReason, setSelectedReason] = useState({value:'-', label:''}); + const [selectedCode, setSelectedCode] = useState({value:'-', label:''}); const reasons = [ { value: 'Wrong Setting', label: 'Wrong Setting' }, { value: 'Hospital Request', label: 'Hospital Request' } ]; + + const [codes, setCodes] = useState([{ value: '-', label: '-' }]); // Data hasil pencarian + const [searchTerm, setSearchTerm] = useState(''); // Nilai input pencarian + + + useEffect(() => { + // Ambil data dari API dan atur opsi ICD + axios.get('codeLog') + .then((response) => { + setCodes(response.data.data); + }) + .catch((error) => { + console.error('Error fetching Code LOG options:', error); + }); + + }, []); // useEffect dijalankan hanya sekali saat komponen dimount + useEffect(() => { + const fetchCodes = async () => { + if (searchTerm.length > 2) { // Hanya fetch jika input lebih dari 2 karakter + try { + const response = await axios.get(`codeLog?search=${searchTerm}`); + setCodes(response.data.data); + } catch (error) { + console.error('Error fetching codes:', error); + setCodes([]); + } + } + }; + + const debounceFetch = setTimeout(fetchCodes, 500); // Debounce 500ms + return () => clearTimeout(debounceFetch); + }, [searchTerm]); + const [searchCode, setSearchCode] = useState(''); + const [error, setError] = useState(true); return ( - + - navigate(`/case_management/daily_monitoring/${member_id}/${organizationId}/claims`)} > + navigate(`/case_management/daily_monitoring`)} > - {pageTitle} + Tambah Daily Monitoring @@ -269,6 +311,43 @@ export default function DetailMonitoringList() { {/* Date */} + + + Code Letter of Guarantee* : + + + + option.label} + fullWidth + value={selectedCode} + onChange={(event, newValue) => { + setSelectedCode(newValue); + setValue('log_code',newValue?.value) + // Validasi jika newValue adalah null + if (!newValue) { + setError('Please select a code'); + } else { + setError(''); + } + }} + onInputChange={(event, newInputValue) => { + setSearchTerm(newInputValue); // Set nilai pencarian untuk fetch data + }} + renderInput={(params) => ( + + )} + /> + Date* : @@ -285,6 +364,72 @@ export default function DetailMonitoringList() { + {/* Doctor 1 */} + + + + + Dokter 1 + + + + + + + + Dokter 2 + + + + + + + + Temp Diagnosis + + + + + + + + Final Diagnosis + + + + + + + + Approval Pendamping + + + + + + + + {/* Subject */} @@ -562,6 +707,28 @@ export default function DetailMonitoringList() { + {/* Keterangan dan Catatan */} + + + + + Keterangan + + + + + + + + Catatan + + + + + + + + {/* Confirmation Medical Letter */} @@ -673,7 +840,7 @@ export default function DetailMonitoringList() { - + {/* Laboratorium */} @@ -823,7 +990,7 @@ export default function DetailMonitoringList() { - diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringList.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringList.tsx index e01f2f54..c75e8815 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringList.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringList.tsx @@ -56,7 +56,7 @@ export default function DetailMonitoringList() { // Use Effect // -------------------- useEffect(() => { - loadDataTableData(); + // loadDataTableData(); }, []) // Dialog @@ -165,13 +165,13 @@ export default function DetailMonitoringList() { // Load Data // ------------------- - const loadDataTableData = async () => { - const response = await getMonitoringDetailList(claim_code??''); - const organization_id = await getOrganizationId(claim_code??''); + // const loadDataTableData = async () => { + // const response = await getMonitoringDetailList(claim_code??''); + // const organization_id = await getOrganizationId(claim_code??''); - setDetailMonitoringList(response); - setOrganizationId(organization_id); - } + // setDetailMonitoringList(response); + // setOrganizationId(organization_id); + // } const renderHTML = (data:string) => { return ( diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Functions.ts b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Functions.ts index 6f493f90..af73e53d 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Functions.ts +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Functions.ts @@ -51,7 +51,7 @@ export const AddMonitoringDetail = async ( claim_code: string,data: DetailMonito const formData = makeFormData({...data}); - const response = await axios.post(`/case_management/daily_monitoring/detail/${claim_code}/add-request`, formData) + const response = await axios.post(`/case_management/daily_monitoring/add-request`, formData) .then((res) =>{ enqueueSnackbar(res.data.message, { variant: 'success', diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts index 90cdf1d9..e8543e26 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts @@ -3,12 +3,21 @@ */ export type DailyMonitoringListType = { member_id : string, + member_type : string, + birth_date : string, name : string, - start_date : string, - end_date : string, - addmision_date : string, - provider : string, - organization_id : number, + start_date : string, + end_date : string, + description : string, + doctor_1 : string, + doctor_2 : string, + temp_diagnosis : string, + final_diagnosis : string, + approval_pendamping : string, + note : string, + addmision_date : string, + provider : string, + organization_id : number, } /** @@ -50,7 +59,15 @@ export type ClaimListType = { export type DetailMonitoringListType = { id : number|null, claim_id : string|null, + log_code : string|null, claim_code : string|undefined, + doctor_1 : string|undefined, + doctor_2 : string|undefined, + temp_diagnosis : string|undefined, + final_diagnosis : string|undefined, + approval_pendamping : string|undefined, + keterangan : string|undefined, + catatan : string|undefined, subject : string|undefined, object : string|undefined, objective : string|undefined, diff --git a/frontend/dashboard/src/routes/index.tsx b/frontend/dashboard/src/routes/index.tsx index c29ee22d..f743a09f 100755 --- a/frontend/dashboard/src/routes/index.tsx +++ b/frontend/dashboard/src/routes/index.tsx @@ -233,6 +233,10 @@ export default function Router() { path: 'daily_monitoring/:member_id/claims/:claim_code/add_monitoring', element: }, + { + path: 'daily_monitoring/add_monitoring', + element: + }, { path: 'daily_monitoring/:member_id/claims/:claim_code/:id', element: From e56910e0c1ddae8818b021fbf7e6c2bf88b7db78 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Thu, 20 Feb 2025 08:26:40 +0700 Subject: [PATCH 03/12] update --- .../Api/DailyMonitoringController.php | 39 ++-- .../Transformers/DailyMonitoringResource.php | 1 + .../Components/DailyMonitoringList.tsx | 9 +- .../Components/DailyMonitoringListRow.tsx | 24 +-- .../Components/DetailMonitoringForm.tsx | 179 +++++++++--------- .../Components/DetailMonitoringList.tsx | 27 ++- .../DailyMonitoring/Model/Types.ts | 3 + .../Components/DialogEditFinalLOG.tsx | 4 +- frontend/dashboard/src/routes/index.tsx | 4 + 9 files changed, 146 insertions(+), 144 deletions(-) diff --git a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php index df8fdd1e..20826fb7 100755 --- a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php +++ b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php @@ -146,29 +146,34 @@ class DailyMonitoringController extends Controller { $detail = RequestDailyMonitoring::where('id', $id) - ->orderBy("created_at", "desc") - ->first(); + ->orderBy("created_at", "desc") + ->first(); + + if ($detail) { + // Ubah menjadi array agar bisa dimodifikasi + $detailArray = $detail->toArray(); + + // Ubah nama key dari request_log_id menjadi log_id + $detailArray['log_code'] = $detailArray['request_log_id']; + unset($detailArray['request_log_id']); + } else { + $detailArray = null; + } + return response()->json([ 'error' => false, 'message' => "success", - 'data' => $detail, - ],200); + 'data' => $detailArray, + ], 200); + } public function UpdateDetailMonitoringbyID(Request $request) { // validation rule $validator = Validator::make($request->all(),[ - 'subject' => 'required', - 'submission_date' => 'required', - 'body_temperature' => 'required', - 'sistole' => 'required', - 'diastole' => 'required', - 'respiration_rate' => 'required', - 'analysis' => 'required', - 'medical_plan' => 'required', + 'log_code' => 'required', 'reason' => 'required', - 'non_medikamentosa_plan' => 'required', ],$this->messages()); // validation error @@ -182,6 +187,7 @@ class DailyMonitoringController extends Controller // insert claim daily monitoring $db_response = RequestDailyMonitoring::where('id', $request->id) ->update([ + 'request_log_id' => $request->log_code, 'submission_date' => $request->submission_date, 'subject' => $request->subject, 'object' => $request->objective, @@ -193,6 +199,13 @@ class DailyMonitoringController extends Controller 'lab_date' => $request->lab_date, 'provider' => $request->provider, 'examination' => $request->examination, + 'doctor_1' => $request->doctor_1, + 'doctor_2' => $request->doctor_2, + 'temp_diagnosis' => $request->temp_diagnosis, + 'final_diagnosis' => $request->final_diagnosis, + 'approval_pendamping' => $request->approval_pendamping, + 'description' => $request->keterangan, + 'note' => $request->catatan, 'reason' => $request->reason, 'created_by' => auth()->user()->id, ]); diff --git a/Modules/Internal/Transformers/DailyMonitoringResource.php b/Modules/Internal/Transformers/DailyMonitoringResource.php index 422bd144..5c53a31c 100755 --- a/Modules/Internal/Transformers/DailyMonitoringResource.php +++ b/Modules/Internal/Transformers/DailyMonitoringResource.php @@ -24,6 +24,7 @@ class DailyMonitoringResource extends JsonResource 'start_date' => $this->startdate, 'end_date' => $this->enddate, 'addmision_date' => $this->addmision_date, + 'submission_date' => $this->submission_date, 'provider' => $this->provider, 'organization_id' => $this->organization_id, 'doctor_1' => $this->doctor_1, diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx index 6b3a49c3..a95dd202 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx @@ -409,19 +409,12 @@ export default function DailyMonitoringList() { + Code Admission Date Member ID Name Tanggal Lahir Member Type - Dokter 1 - Dokter 2 - Temp Diagnosa - Diagnosa Akhir - Approval Pendamping - Keterangan - Penjaminan - Catatan diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx index 9272ecc5..cbeb6643 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx @@ -36,6 +36,7 @@ export default function DailyMonitoringListRow ({ ...props }: Props) { td': { borderBottom: '1' } }}> + {props.row.code} - {props.row.doctor_1} - {props.row.doctor_2} - {props.row.temp_diagnosis} - {props.row.final_diagnosis} - {props.row.approval_pendamping} - - {props.row.description - ? props.row.description.length > 130 - ? props.row.description.substring(0, 130) + "..." - : props.row.description - : "-"} - - {props.row.provider || "-"} - - {props.row.note - ? props.row.note.length > 130 - ? props.row.note.substring(0, 130) + "..." - : props.row.note - : "-"} - + e.stopPropagation()}> View - navigate(`/case_management/daily_monitoring/${props.row.member_id}/claims/${props.row.code}/${props.row.id}`)}> + navigate(`/case_management/daily_monitoring/${props.row.id}/edit`)}> Edit diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx index fa7f3bd2..8c660f6f 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx @@ -57,7 +57,7 @@ export default function DetailMonitoringList() { // setOrganizationId(organization_id); // } const loadDetailDailyMonitoring = async () => { - const monitoring = await getMonitoringDetailById('') + const monitoring = await getMonitoringDetailById(id) setData(monitoring) } @@ -74,41 +74,41 @@ export default function DetailMonitoringList() { // ==================================== const defaultValues = useMemo( () => ({ - id : data?.id ??'', - // claim_code : data?.claim_code ?? '', - log_code : data?.log_code ?? '', - doctor_1 : data?.doctor_1 ?? '', - doctor_2 : data?.doctor_2 ?? '', - temp_diagnosis : data?.temp_diagnosis ?? '', - final_diagnosis : data?.final_diagnosis ?? '', - approval_pendamping : data?.approval_pendamping ?? '', - keterangan : data?.keterangan ?? '', - catatan : data?.catatan ?? '', - claim_id : data?.claim_id ?? '', - subject : data?.subject ?? '', - objective : data?.object ?? '', - submission_date : data?.submission_date ?? '', - body_temperature: data?.body_temperature ?? '', - sistole : data?.sistole ?? '', - diastole : data?.diastole ??'', - respiration_rate: data?.respiration_rate ??'', - complaints : data?.complaints ?? '', - analysis : data?.analysis ?? '', - medical_plan : data?.medical_plan ?? [{ - medical_plan_str: '' - }], - non_medikamentosa_plan : data?.non_medikamentosa_plan ?? [{ - non_medikamentosa_plan_str: '' - }], - confirmation_medical_leter : [], - medical_action_letter : [], - // result : data?.laboratorium_result ?? [], - result : [], - created_at : data?.created_at ?? '', - lab_date : data?.lab_date ?? '', - provider : data?.provider ?? '', - examination : data?.examination ?? '', - reason : '', + id : data?.id ??'', + // claim_code : data?.claim_code ?? '', + log_code : data?.log_code ?? '', + doctor_1 : data?.doctor_1 ?? '', + doctor_2 : data?.doctor_2 ?? '', + temp_diagnosis : data?.temp_diagnosis ?? '', + final_diagnosis : data?.final_diagnosis ?? '', + approval_pendamping : data?.approval_pendamping ?? '', + keterangan : data?.keterangan ?? '', + catatan : data?.catatan ?? '', + claim_id : data?.claim_id ?? '', + subject : data?.subject ?? '', + objective : data?.object ?? '', + submission_date : data?.submission_date ?? '', + body_temperature: data?.body_temperature ?? '', + sistole : data?.sistole ?? '', + diastole : data?.diastole ??'', + respiration_rate: data?.respiration_rate ??'', + complaints : data?.complaints ?? '', + analysis : data?.analysis ?? '', + medical_plan : data?.medical_plan ?? [{ + medical_plan_str: '' + }], + non_medikamentosa_plan : data?.non_medikamentosa_plan ?? [{ + non_medikamentosa_plan_str: '' + }], + confirmation_medical_leter : [], + medical_action_letter : [], + // result : data?.laboratorium_result ?? [], + result : [], + created_at : data?.created_at ?? '', + lab_date : data?.lab_date ?? '', + provider : data?.provider ?? '', + examination : data?.examination ?? '', + reason : '', }), [data] ); @@ -262,19 +262,26 @@ export default function DetailMonitoringList() { useEffect(() => { - // Ambil data dari API dan atur opsi ICD - axios.get('codeLog') - .then((response) => { - setCodes(response.data.data); - }) - .catch((error) => { - console.error('Error fetching Code LOG options:', error); - }); - - }, []); // useEffect dijalankan hanya sekali saat komponen dimount + axios.get('codeLog') + .then((response) => { + const fetchedCodes = response.data.data; + setCodes(fetchedCodes); + // Set nilai default jika data tersedia + console.log(defaultValues, 'test') + if (defaultValues?.log_code) { + const defaultValueLOG = fetchedCodes.find((item) => item.value === defaultValues?.log_code); + setSelectedCode(defaultValueLOG || null); + } + }) + .catch((error) => { + console.error('Error fetching Code LOG options:', error); + }); + }, [isEdit, defaultValues]); // Tambahkan dependency agar dijalankan ulang jika log_code berubah + + useEffect(() => { const fetchCodes = async () => { - if (searchTerm.length > 2) { // Hanya fetch jika input lebih dari 2 karakter + if (searchTerm.length > 3) { // Hanya fetch jika input lebih dari 2 karakter try { const response = await axios.get(`codeLog?search=${searchTerm}`); setCodes(response.data.data); @@ -300,7 +307,7 @@ export default function DetailMonitoringList() { - Tambah Daily Monitoring + {isEdit ? "Update " : "Tambah "} Daily Monitoring @@ -317,36 +324,36 @@ export default function DetailMonitoringList() { - option.label} - fullWidth - value={selectedCode} - onChange={(event, newValue) => { - setSelectedCode(newValue); - setValue('log_code',newValue?.value) - // Validasi jika newValue adalah null - if (!newValue) { - setError('Please select a code'); - } else { - setError(''); - } - }} - onInputChange={(event, newInputValue) => { - setSearchTerm(newInputValue); // Set nilai pencarian untuk fetch data - }} - renderInput={(params) => ( - - )} + option.label} + fullWidth + value={selectedCode} + onChange={(event, newValue) => { + setSelectedCode(newValue); + setValue('log_code', newValue?.value); + if (!newValue) { + setError('Please select a code'); + } else { + setError(''); + } + }} + onInputChange={(event, newInputValue) => { + setSearchTerm(newInputValue); // Set nilai pencarian untuk fetch data + }} + renderInput={(params) => ( + + )} /> + @@ -365,7 +372,7 @@ export default function DetailMonitoringList() { {/* Doctor 1 */} - + {/* @@ -428,10 +435,10 @@ export default function DetailMonitoringList() { /> - + */} - {/* Subject */} - + {/* Subject */} + @@ -707,8 +714,8 @@ export default function DetailMonitoringList() { - {/* Keterangan dan Catatan */} - + {/* Keterangan dan Catatan */} + @@ -728,9 +735,9 @@ export default function DetailMonitoringList() { - - {/* Confirmation Medical Letter */} - + + {/* Confirmation Medical Letter */} + diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringList.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringList.tsx index c75e8815..382c356a 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringList.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringList.tsx @@ -56,7 +56,7 @@ export default function DetailMonitoringList() { // Use Effect // -------------------- useEffect(() => { - // loadDataTableData(); + loadDataTableData(); }, []) // Dialog @@ -165,19 +165,18 @@ export default function DetailMonitoringList() { // Load Data // ------------------- - // const loadDataTableData = async () => { - // const response = await getMonitoringDetailList(claim_code??''); - // const organization_id = await getOrganizationId(claim_code??''); + const loadDataTableData = async () => { + const response = await getMonitoringDetailList(claim_code??''); + const organization_id = await getOrganizationId(claim_code??''); - // setDetailMonitoringList(response); - // setOrganizationId(organization_id); - // } + setDetailMonitoringList(response); + setOrganizationId(organization_id); + } - const renderHTML = (data:string) => { + function renderHTML(data: string) { return ( -
+
); } @@ -187,7 +186,7 @@ export default function DetailMonitoringList() { {/* back button */} - navigate(`/case_management/daily_monitoring/${member_id}/${organizationId}/claims`)} > + navigate(`/case_management/daily_monitoring`)} > @@ -241,10 +240,10 @@ export default function DetailMonitoringList() { {/* Menempatkan TableMoreMenu di sebelah kanan */} - {handleEdit(row.id);}}> + {/* {handleEdit(row.id);}}> Edit - + */} {setOpenDialog(true); setId(row.id); setIdFile(null)}}> Delete diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts index e8543e26..51654232 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts @@ -60,6 +60,7 @@ export type DetailMonitoringListType = { id : number|null, claim_id : string|null, log_code : string|null, + request_log_id : string|null, claim_code : string|undefined, doctor_1 : string|undefined, doctor_2 : string|undefined, @@ -68,6 +69,8 @@ export type DetailMonitoringListType = { approval_pendamping : string|undefined, keterangan : string|undefined, catatan : string|undefined, + description : string|undefined, + note : string|undefined, subject : string|undefined, object : string|undefined, objective : string|undefined, diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditFinalLOG.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditFinalLOG.tsx index 6b87f2c9..ab8e60fd 100755 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditFinalLOG.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditFinalLOG.tsx @@ -194,9 +194,9 @@ export default function DialogEditFinalLOG({requestLog, setOpenDialog, openDialo - Invoice Number + Invoice Provider }, + { + path: 'daily_monitoring/:id/edit', + element: + }, { path: 'daily_monitoring/:member_id/claims/:claim_code/list_monitoring', element: From a0a7c3b735b8d5910c83497b57f2fb05f339741f Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Thu, 20 Feb 2025 16:17:05 +0700 Subject: [PATCH 04/12] maping drugs --- app/Models/Drug.php | 4 ++ ...02_20_140739_add_column_to_drugs_table.php | 38 +++++++++++++++++++ .../Components/DetailMonitoringForm.tsx | 8 ++-- 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 database/migrations/2025_02_20_140739_add_column_to_drugs_table.php diff --git a/app/Models/Drug.php b/app/Models/Drug.php index 1d6d77f0..8b8c1dad 100755 --- a/app/Models/Drug.php +++ b/app/Models/Drug.php @@ -15,6 +15,10 @@ class Drug extends Model 'name', 'generic_name', 'code', + 'id_setara', + 'code_setara', + 'nama_setara', + 'multiply_jual', 'description', 'brand_id', 'mims_class', diff --git a/database/migrations/2025_02_20_140739_add_column_to_drugs_table.php b/database/migrations/2025_02_20_140739_add_column_to_drugs_table.php new file mode 100644 index 00000000..54b4f2c8 --- /dev/null +++ b/database/migrations/2025_02_20_140739_add_column_to_drugs_table.php @@ -0,0 +1,38 @@ +string('id_setara')->nullable()->after('code'); + $table->string('code_setara')->nullable()->after('id_setara'); + $table->string('nama_setara')->nullable()->after('code_setara'); + $table->integer('multiply_jual')->nullable()->after('nama_setara'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('drugs', function (Blueprint $table) { + $table->dropColumn('id_setara'); + $table->dropColumn('nama_setara'); + $table->dropColumn('code_setara '); + $table->dropColumn('multiply_jual'); + }); + } +}; diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx index 8c660f6f..21f24d6e 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DetailMonitoringForm.tsx @@ -715,7 +715,7 @@ export default function DetailMonitoringList() { {/* Keterangan dan Catatan */} - + {/* @@ -734,10 +734,10 @@ export default function DetailMonitoringList() { - + */} - {/* Confirmation Medical Letter */} - + {/* Confirmation Medical Letter */} + From cfab2f37ea43d25a6f5eb397ce50514b6cf43f39 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Thu, 20 Feb 2025 16:17:32 +0700 Subject: [PATCH 05/12] update --- Modules/Internal/Http/Controllers/Api/DrugController.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Modules/Internal/Http/Controllers/Api/DrugController.php b/Modules/Internal/Http/Controllers/Api/DrugController.php index 8d46018e..6372c770 100755 --- a/Modules/Internal/Http/Controllers/Api/DrugController.php +++ b/Modules/Internal/Http/Controllers/Api/DrugController.php @@ -165,6 +165,10 @@ class DrugController extends Controller [ 'name' => $row['name'], 'code' => $row['code'], + 'id_setara' => $row['id_setara'], + 'code_setara' => $row['code_setara'], + 'nama_setara' => $row['nama_setara'], + 'multiply_jual' => $row['multiply_jual'], 'generic_name' => $row['generic_name'], 'description' => $row['description'], 'mims_class' => $row['mims_class'], @@ -175,7 +179,7 @@ class DrugController extends Controller 'dosage' => $row['dosage'], 'remark' => $row['remark'], // 'price' => $row['price'], - 'unit' => $row['unit'], + // 'unit' => $row['unit'], ] ); $importedRows++; From 1a90cefb040252cdc2d8b0eb621d05baba9f4adb Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Thu, 20 Feb 2025 16:57:47 +0700 Subject: [PATCH 06/12] update --- Modules/Internal/Http/Controllers/Api/RequestLogController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Internal/Http/Controllers/Api/RequestLogController.php b/Modules/Internal/Http/Controllers/Api/RequestLogController.php index 6834eca1..97a49ba5 100755 --- a/Modules/Internal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/Internal/Http/Controllers/Api/RequestLogController.php @@ -247,7 +247,7 @@ class RequestLogController extends Controller $subQuery->where('name', 'LIKE', "%".$search."%"); }); }) - ->paginate(); + ->get(); $manipulatedIcds = $codeLogs->map(function ($codeLog) { // Contoh manipulasi, tambahkan atau ubah properti sesuai kebutuhan From 74acd90709d4fbc027fb34682f6d489988f9e49a Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Thu, 20 Feb 2025 17:09:45 +0700 Subject: [PATCH 07/12] bugs fix --- .../Controllers/Api/RequestLogController.php | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Modules/Internal/Http/Controllers/Api/RequestLogController.php b/Modules/Internal/Http/Controllers/Api/RequestLogController.php index 97a49ba5..6ac93193 100755 --- a/Modules/Internal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/Internal/Http/Controllers/Api/RequestLogController.php @@ -240,25 +240,31 @@ class RequestLogController extends Controller return Helper::responseJson(data: $manipulatedIcds); } - public function codeLog(Request $request){ - $codeLogs = RequestLog::with(['member'])->when($request->search, function ($q, $search) { - $q->where('code', 'LIKE', "%".$search."%"); - $q->orWhereHas('member', function ($subQuery) use ($search) { - $subQuery->where('name', 'LIKE', "%".$search."%"); - }); - }) - ->get(); + public function codeLog(Request $request) + { + $codeLogs = RequestLog::with(['member']) + ->when($request->search, function ($q) use ($request) { + $q->where('code', 'LIKE', "%{$request->search}%") + ->orWhereHas('member', function ($subQuery) use ($request) { + $subQuery->where('name', 'LIKE', "%{$request->search}%"); + }); + }) + ->whereHas('member', function ($subQuery) { + $subQuery->whereNull('deleted_at'); + }) + ->get(); $manipulatedIcds = $codeLogs->map(function ($codeLog) { - // Contoh manipulasi, tambahkan atau ubah properti sesuai kebutuhan return [ - 'value' => $codeLog->id, // Ganti dengan properti yang sesuai dari model Icd - 'label' => $codeLog->code . ' - ' .$codeLog->member->name, // Ganti dengan properti yang sesuai dari model Icd + 'value' => $codeLog->id, + 'label' => $codeLog->code . ' - ' . ($codeLog->member->name ?? 'Unknown'), ]; }); + return Helper::responseJson(data: $manipulatedIcds); } + public function hospitals(){ $organizations = Organization::query() ->where([ From 8ed6700339e9c7fa2b85aa528513de2692d1823c Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Mon, 24 Feb 2025 09:20:23 +0700 Subject: [PATCH 08/12] bugs fix approve --- .../FinalLog/Components/DialogConfirmation.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogConfirmation.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogConfirmation.tsx index c4c3f9b7..7b4d47f4 100755 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogConfirmation.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogConfirmation.tsx @@ -25,8 +25,9 @@ export default function DialogConfirmation({requestLog, setOpenDialog, openDialo id: requestLog?.id, status: approve || '', catatan: '', - type_of_member: '' , - icdCodes: requestLog?.diagnosis.length ? requestLog.diagnosis.map(diagnosis => ({ value: diagnosis.id, label: diagnosis.name })) : [] + type_of_member: requestLog?.type_of_member, + // icdCodes: requestLog?.diagnosis.length ? requestLog.diagnosis.map(diagnosis => ({ value: diagnosis.id, label: diagnosis.name })) : [] + icdCodes: requestLog?.diagnosis }); const [error, setError] = useState(false); @@ -197,7 +198,7 @@ export default function DialogConfirmation({requestLog, setOpenDialog, openDialo variant="outlined" displayEmpty required - error={error} + error={error} > Type Member From ce2c41704571151cb8dc8eaec784c46a7cba9fc6 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Mon, 24 Feb 2025 10:18:38 +0700 Subject: [PATCH 09/12] update --- .../Api/DailyMonitoringController.php | 69 +++++++++---------- .../Transformers/DailyMonitoringResource.php | 2 + .../DailyMonitoring/Model/Types.ts | 2 + .../views/pdf/final_log_page_1.blade.php | 2 +- 4 files changed, 39 insertions(+), 36 deletions(-) mode change 100644 => 100755 resources/views/pdf/final_log_page_1.blade.php diff --git a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php index 20826fb7..4465a747 100755 --- a/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php +++ b/Modules/Internal/Http/Controllers/Api/DailyMonitoringController.php @@ -43,41 +43,40 @@ class DailyMonitoringController extends Controller $endDate = $request->end_date ? Carbon::parse($request->end_date)->addDay() : Carbon::today()->addDay(); $memberList = DB::table('request_log_daily_monitorings') - ->leftJoin('request_logs', 'request_log_daily_monitorings.request_log_id', '=', 'request_logs.id') - ->leftJoin('members', 'request_logs.member_id', '=', 'members.id') - ->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id') - ->select( - 'members.member_id', - 'members.name', - 'members.birth_date', - 'members.record_type as member_type', - 'members.members_effective_date AS startdate', - 'members.members_expire_date AS enddate', - 'request_logs.submission_date as addmision_date', - 'organizations.name as provider', - 'request_logs.organization_id', - 'request_logs.code', - 'request_log_daily_monitorings.*' - ) - // ->where('request_logs.service_code', 'IP') - ->where('request_logs.deleted_at', null) - ->when($request->search, function ($q, $search) { - $q->where(function ($subQ) use ($search) { - $subQ->where('members.member_id', 'LIKE', "%".$search."%"); - $subQ->orWhere('members.name','LIKE',"%".$search."%"); - }); - }) - ->when($startDate, function ($q) use ($startDate) { - $q->where('request_log_daily_monitorings.submission_date', '>=', $startDate); - }) - ->when($endDate, function ($q) use ($endDate) { - $q->where('request_log_daily_monitorings.submission_date', '<=', Carbon::parse($endDate)->addDay()); - }) - // ->where('request_logs.status_final_log', 'approved') - // ->groupBy('request_logs.member_id', 'request_logs.organization_id') - ->orderBy('request_logs.created_at', 'desc') - // ->get() - ->paginate(); + ->leftJoin('request_logs', 'request_log_daily_monitorings.request_log_id', '=', 'request_logs.id') + ->leftJoin('members', 'request_logs.member_id', '=', 'members.id') + ->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id') + ->select( + 'members.member_id', + 'members.name', + 'members.birth_date', + 'request_logs.type_of_member as member_type', + 'members.members_effective_date AS startdate', + 'members.members_expire_date AS enddate', + 'request_logs.submission_date as addmision_date', + 'organizations.name as provider', + 'request_logs.organization_id', + 'request_logs.code', + // Using a subquery to fetch medical_plan + DB::raw('(SELECT plan FROM request_log_medical_plan rdm WHERE rdm.request_log_daily_monitoring_id = request_log_daily_monitorings.id AND type = 1 LIMIT 1) as medical_plan'), + DB::raw('(SELECT plan FROM request_log_medical_plan rdm WHERE rdm.request_log_daily_monitoring_id = request_log_daily_monitorings.id AND type = 2 LIMIT 1) as non_medical_plan'), + 'request_log_daily_monitorings.*' + ) + ->whereNull('request_logs.deleted_at') // Use whereNull() for checking NULL + ->when($request->search, function ($q, $search) { + $q->where(function ($subQ) use ($search) { + $subQ->where('members.member_id', 'LIKE', "%{$search}%"); + $subQ->orWhere('members.name', 'LIKE', "%{$search}%"); + }); + }) + ->when($startDate, function ($q) use ($startDate) { + $q->where('request_log_daily_monitorings.submission_date', '>=', $startDate); + }) + ->when($endDate, function ($q) use ($endDate) { + $q->where('request_log_daily_monitorings.submission_date', '<=', Carbon::parse($endDate)->addDay()); + }) + ->orderBy('request_logs.created_at', 'desc') + ->paginate(); return Helper::paginateResources(DailyMonitoringResource::collection($memberList)); } diff --git a/Modules/Internal/Transformers/DailyMonitoringResource.php b/Modules/Internal/Transformers/DailyMonitoringResource.php index 5c53a31c..1a0f65d1 100755 --- a/Modules/Internal/Transformers/DailyMonitoringResource.php +++ b/Modules/Internal/Transformers/DailyMonitoringResource.php @@ -35,6 +35,8 @@ class DailyMonitoringResource extends JsonResource 'status' => $this->status, 'description' => strip_tags($this->description), 'note' => strip_tags($this->note), + 'medical_plan' => strip_tags($this->medical_plan), + 'non_medical_plan' => strip_tags($this->non_medical_plan), ]; return $data; diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts index 51654232..30560d16 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Model/Types.ts @@ -18,6 +18,8 @@ export type DailyMonitoringListType = { addmision_date : string, provider : string, organization_id : number, + medical_plan : string, + non_medical_plan : string, } /** diff --git a/resources/views/pdf/final_log_page_1.blade.php b/resources/views/pdf/final_log_page_1.blade.php old mode 100644 new mode 100755 index 656245fc..d3cb93a7 --- a/resources/views/pdf/final_log_page_1.blade.php +++ b/resources/views/pdf/final_log_page_1.blade.php @@ -242,7 +242,7 @@ {{ wordwrap($request_logs->code,15,"
\n")}} Tanggal : - {{ \Carbon\Carbon::parse($request_logs->created_at)->format('d M Y') }} + {{ \Carbon\Carbon::parse($request_logs->approved_at)->format('d M Y') }} Kepada From 9810a28774e6aca8760d79e929878af1c17298a9 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Mon, 24 Feb 2025 10:33:57 +0700 Subject: [PATCH 10/12] update --- .../DailyMonitoring/Components/DailyMonitoringList.tsx | 2 ++ .../DailyMonitoring/Components/DailyMonitoringListRow.tsx | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx index a95dd202..3b9c600f 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringList.tsx @@ -415,6 +415,8 @@ export default function DailyMonitoringList() { Name Tanggal Lahir Member Type + Medical Plan + Non Medical Plan diff --git a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx index cbeb6643..32282606 100755 --- a/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx +++ b/frontend/dashboard/src/pages/CaseManagement/DailyMonitoring/Components/DailyMonitoringListRow.tsx @@ -58,6 +58,12 @@ export default function DailyMonitoringListRow ({ ...props }: Props) { {props.row.member_type} + + {props.row.medical_plan} + + + {props.row.non_medical_plan} + e.stopPropagation()}> From 51ce8554082b51bb638115e091cdee947407dfae Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Mon, 24 Feb 2025 15:28:44 +0700 Subject: [PATCH 11/12] Update --- .../Controllers/Api/RequestLogController.php | 5 ++ .../Transformers/RequestLogShowResource.php | 15 +++- .../Api/AutocompleteController.php | 17 ++++ .../src/sections/dashboard/DialogFinalLog.tsx | 80 ++++++++++++++----- .../src/sections/dashboard/FormRequestLog.tsx | 28 +++---- .../sections/dashboard/TableListReqLog.tsx | 15 +++- 6 files changed, 119 insertions(+), 41 deletions(-) diff --git a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php index f50be414..38b65ff2 100755 --- a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php @@ -242,6 +242,8 @@ class RequestLogController extends Controller 'request_logs.submission_date', 'request_logs.approved_at') ->paginate($limit); + + return response()->json(Helper::paginateResources($results)); } @@ -340,12 +342,14 @@ class RequestLogController extends Controller $validator = Validator::make($request->all(), [ 'request_logs_id' => 'required', 'discharge_date' => 'required', + 'service_code' => 'required', 'result_files.*' => 'sometimes|file|max:10000', 'diagnosa_files.*' => 'sometimes|file|max:10000', 'kondisi_files.*' => 'sometimes|file|max:10000', ], [ 'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Logs ID']), 'discharge_date.required' => trans('Validation.required',['attribute' => 'Discharge Date']), + 'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']), 'result_files.*.max' => trans('Validation.max.file', ['attribute' => 'Result Files', 'max' => '10 MB' ]), 'diagnosa_files.*.max' => trans('Validation.max.file', ['attribute' => 'Diagnosis Files', 'max' => '10 MB' ]), 'kondisi_files.*.max' => trans('Validation.max.file', ['attribute' => 'Condition Files', 'max' => '10 MB' ]), @@ -363,6 +367,7 @@ class RequestLogController extends Controller ->update([ 'status_final_log' => 'requested', 'final_log' => 1, + 'service_code' =>$request->service_code, 'discharge_date' => $request->discharge_date, 'created_final_by'=> auth()->user()->id, 'created_final_at'=> date('Y-m-d H:i:s'), diff --git a/Modules/Internal/Transformers/RequestLogShowResource.php b/Modules/Internal/Transformers/RequestLogShowResource.php index a785e51c..d1c9d509 100755 --- a/Modules/Internal/Transformers/RequestLogShowResource.php +++ b/Modules/Internal/Transformers/RequestLogShowResource.php @@ -118,20 +118,29 @@ class RequestLogShowResource extends JsonResource } $memberUsage = Helper::getUsageMember($corporateId, $requestLog['member']['id'], $benefitData); - if($requestLog['specialities_id']) + if(isset($requestLog['specialities_id'])) { $spesialis = Speciality::query() ->where('id', $requestLog['specialities_id']) ->select('name') ->first(); + $name = $spesialis['name']; + } else { + $name = '-'; + } + + if (isset($requestLog['specialities_id'])){ + $dppj = $requestLog['dppj']; + } else { + $dppj = '-'; } $data = [ 'id' => $requestLog['id'], 'code' => $requestLog['code'], 'invoice_no' => $requestLog['invoice_no'], 'billing_no' => $requestLog['billing_no'], - 'specialities_id' => $spesialis['name'], - 'dppj' => $requestLog['dppj'], + 'specialities_id' => $name, + 'dppj' => $dppj, 'code' => $requestLog['code'], 'code_claim' => $claimCode, 'member_id' => $requestLog['member']['member_id'], diff --git a/Modules/Linksehat/Http/Controllers/Api/AutocompleteController.php b/Modules/Linksehat/Http/Controllers/Api/AutocompleteController.php index 1cc18e34..7eff0681 100755 --- a/Modules/Linksehat/Http/Controllers/Api/AutocompleteController.php +++ b/Modules/Linksehat/Http/Controllers/Api/AutocompleteController.php @@ -6,6 +6,7 @@ use App\Models\OLDLMS\User; use App\Models\Icd; use App\Models\Drug; use App\Models\Unit; +use App\Models\MemberPlan; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; @@ -179,6 +180,22 @@ class AutocompleteController extends Controller { return Helper::responseJson(['message' => 'Signa added successfully']); } + public function serviceCode(Request $request, $id) + { + $plans = MemberPlan::with('plan', 'plan.service') + ->where('member_id', $id) + ->get(); + + $manipulatedPlan = $plans->map(function ($plan) { + return [ + 'value' => optional($plan->plan)->service_code ?? '-', + 'label' => optional($plan->plan->service)->name ?? 'Unknown' + ]; + }); + + return response()->json($manipulatedPlan); + } + } diff --git a/frontend/hospital-portal/src/sections/dashboard/DialogFinalLog.tsx b/frontend/hospital-portal/src/sections/dashboard/DialogFinalLog.tsx index 79fe4de6..4f375236 100755 --- a/frontend/hospital-portal/src/sections/dashboard/DialogFinalLog.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/DialogFinalLog.tsx @@ -2,13 +2,13 @@ import { styled } from '@mui/material/styles'; import Iconify from '@/components/Iconify'; import { fCurrency } from '@/utils/formatNumber'; import { LoadingButton } from '@mui/lab'; -import { Avatar, Button, Divider, LinearProgress, linearProgressClasses, ButtonBase, Box } from '@mui/material'; +import { Avatar, Button, Divider, LinearProgress, linearProgressClasses, ButtonBase, Box, Autocomplete, FormHelperText } from '@mui/material'; import { Card } from '@mui/material'; import { Stack, Typography } from '@mui/material'; import { fPostFormat } from '@/utils/formatTime'; import axios from '@/utils/axios'; import { enqueueSnackbar } from 'notistack'; -import { useRef, useState, useContext } from 'react'; +import { useRef, useState, useContext, useEffect } from 'react'; import { makeFormData } from '@/utils/jsonToFormData'; import { format } from 'date-fns'; import { LanguageContext } from '@/contexts/LanguageContext'; @@ -17,10 +17,10 @@ import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; import TextField from '@mui/material/TextField'; export default function DialogFinalLog({ member, getData, onClose, handleSubmitSuccess }: any) { - const { localeData }: any = useContext(LanguageContext); - //Submission date - const [dischargeDate, setDischargeDate] = useState(format(new Date(), "yyyy MMM d HH:mm:ss")); - + const { localeData }: any = useContext(LanguageContext); + //Submission date + const [dischargeDate, setDischargeDate] = useState(format(new Date(), "yyyy MMM d HH:mm:ss")); + const [serviceCode, setServiceCode] = useState(''); // ---------------------------------------------------------------------- // Files Diagnosa @@ -101,6 +101,7 @@ export default function DialogFinalLog({ member, getData, onClose, handleSubmitS diagnosa_files: fileDiagnosas, kondisi_files: fileKondisis, discharge_date: fPostFormat(dischargeDate, 'yyyy-MM-dd HH:mm:ss'), + service_code: serviceCode, }); axios .post('/request-final-log', formData) @@ -117,6 +118,22 @@ export default function DialogFinalLog({ member, getData, onClose, handleSubmitS }); } + const [serviceOptions, setServiceOptions] = useState([ + { value: '-', label: '-' } + ]); + + useEffect(() => { + axios.get('service-member/'+member.member_id) + .then((response) => { + setServiceOptions(response.data); + }).catch((error) => { + console.error('Error fetching ICD options:', error); + }); + + }, []); + + console.log(serviceOptions, member, 'test') + return ( @@ -324,23 +341,44 @@ export default function DialogFinalLog({ member, getData, onClose, handleSubmitS - - - {localeData.txtDischargeDate} * - - { - setDischargeDate( (newValue)); - }} - inputFormat="dd-MM-yyyy HH:mm" - renderInput={(params) => } - /> - - + + {/* Kolom Tanggal Discharge */} + + {localeData.txtDischargeDate} * + + { + setDischargeDate(newValue); + }} + inputFormat="dd-MM-yyyy HH:mm" + renderInput={(params) => } + /> + + {/* Kolom Service Type */} + + {localeData.txtDialogMember1} * + option.label || ""} + value={serviceOptions.find((opt) => opt.value == member.service_code) || null} + onChange={(event, newValue) => { + setServiceCode(newValue?.value || ""); + }} + renderInput={(params) => ( + + )} + /> + + + + + + {localeData.txtDialogMember1} * option.name || ''} - value={member?.services.find((item: MemberService) => item.service_code === serviceCode) || null} - onChange={(event: React.ChangeEvent<{}>, newValue: MemberService | null) => { - setServiceCode(newValue?.service_code || ''); - }} - renderInput={(params) => ( - - )} + id="service_type" + options={member?.services || []} + getOptionLabel={(option: MemberService) => option.name || ''} + value={member?.services.find((item: MemberService) => item.service_code === serviceCode) || null} + onChange={(event: React.ChangeEvent<{}>, newValue: MemberService | null) => { + setServiceCode(newValue?.service_code || ''); + }} + renderInput={(params) => ( + + )} /> diff --git a/frontend/hospital-portal/src/sections/dashboard/TableListReqLog.tsx b/frontend/hospital-portal/src/sections/dashboard/TableListReqLog.tsx index 42f78be3..96fc724d 100755 --- a/frontend/hospital-portal/src/sections/dashboard/TableListReqLog.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/TableListReqLog.tsx @@ -348,14 +348,23 @@ export default function TableList() { - function handleRequestFinalLog(id:any, full_name:any, no_polis:any, submission_date:any) + function handleRequestFinalLog( + id:any, + full_name:any, + no_polis:any, + submission_date:any, + service_code:any, + member_id:any, + ) { setOpenDialogFinalLog(true); const datas_view = { 'id' : id, 'full_name' : full_name, 'no_polis' : no_polis, - 'submission_date' : submission_date + 'submission_date' : submission_date, + 'service_code' : service_code, + 'member_id' : member_id, }; setDataViewFinalDialog(datas_view); } @@ -427,7 +436,7 @@ export default function TableList() {
):''} {obj.final_log === 0 && obj.status === 'approved' ? ( - handleRequestFinalLog(obj.id, obj.full_name, obj.no_polis, obj.submission_date) }> + handleRequestFinalLog(obj.id, obj.full_name, obj.no_polis, obj.submission_date, obj.service_code, obj.member_id) }> Request Final LOG From ccd39e4d77651f5c5766f1ef1e8a83f8ea6fb4de Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Mon, 24 Feb 2025 15:54:03 +0700 Subject: [PATCH 12/12] update --- Modules/HospitalPortal/Routes/api.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Modules/HospitalPortal/Routes/api.php b/Modules/HospitalPortal/Routes/api.php index d7f4fd37..94f74d27 100755 --- a/Modules/HospitalPortal/Routes/api.php +++ b/Modules/HospitalPortal/Routes/api.php @@ -11,6 +11,7 @@ use Modules\HospitalPortal\Http\Controllers\ApotekController; use Modules\HospitalPortal\Http\Middleware\Authentication; use Modules\HospitalPortal\Http\Middleware\Authorization; use Modules\Internal\Http\Controllers\Api\NavigationController; +use Modules\Linksehat\Http\Controllers\Api\AutocompleteController; /* |-------------------------------------------------------------------------- @@ -34,7 +35,8 @@ Route::prefix('v1')->group(function() { Route::post('forget-password', [AuthController::class, 'forgetPassword']); Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email'); Route::post('verify-code', [AuthController::class, 'verifCode']); - + + Route::get('service-member/{id}', [AutocompleteController::class, 'serviceCode']); Route::middleware('auth:sanctum')->group(function () { @@ -92,5 +94,7 @@ Route::prefix('v1')->group(function() { Route::get('detail-claim-requests/{id}', [ClaimRequestController::class, 'detail_claim_requests'])->name('claim-requests.detail_claim_requests'); Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']); }); + + }); });