This commit is contained in:
2025-02-24 15:28:44 +07:00
parent 9810a28774
commit 51ce855408
6 changed files with 119 additions and 41 deletions

View File

@@ -242,6 +242,8 @@ class RequestLogController extends Controller
'request_logs.submission_date', 'request_logs.submission_date',
'request_logs.approved_at') 'request_logs.approved_at')
->paginate($limit); ->paginate($limit);
return response()->json(Helper::paginateResources($results)); return response()->json(Helper::paginateResources($results));
} }
@@ -340,12 +342,14 @@ class RequestLogController extends Controller
$validator = Validator::make($request->all(), [ $validator = Validator::make($request->all(), [
'request_logs_id' => 'required', 'request_logs_id' => 'required',
'discharge_date' => 'required', 'discharge_date' => 'required',
'service_code' => 'required',
'result_files.*' => 'sometimes|file|max:10000', 'result_files.*' => 'sometimes|file|max:10000',
'diagnosa_files.*' => 'sometimes|file|max:10000', 'diagnosa_files.*' => 'sometimes|file|max:10000',
'kondisi_files.*' => 'sometimes|file|max:10000', 'kondisi_files.*' => 'sometimes|file|max:10000',
], [ ], [
'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Logs ID']), 'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Logs ID']),
'discharge_date.required' => trans('Validation.required',['attribute' => 'Discharge Date']), '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' ]), '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' ]), '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' ]), 'kondisi_files.*.max' => trans('Validation.max.file', ['attribute' => 'Condition Files', 'max' => '10 MB' ]),
@@ -363,6 +367,7 @@ class RequestLogController extends Controller
->update([ ->update([
'status_final_log' => 'requested', 'status_final_log' => 'requested',
'final_log' => 1, 'final_log' => 1,
'service_code' =>$request->service_code,
'discharge_date' => $request->discharge_date, 'discharge_date' => $request->discharge_date,
'created_final_by'=> auth()->user()->id, 'created_final_by'=> auth()->user()->id,
'created_final_at'=> date('Y-m-d H:i:s'), 'created_final_at'=> date('Y-m-d H:i:s'),

View File

@@ -118,20 +118,29 @@ class RequestLogShowResource extends JsonResource
} }
$memberUsage = Helper::getUsageMember($corporateId, $requestLog['member']['id'], $benefitData); $memberUsage = Helper::getUsageMember($corporateId, $requestLog['member']['id'], $benefitData);
if($requestLog['specialities_id']) if(isset($requestLog['specialities_id']))
{ {
$spesialis = Speciality::query() $spesialis = Speciality::query()
->where('id', $requestLog['specialities_id']) ->where('id', $requestLog['specialities_id'])
->select('name') ->select('name')
->first(); ->first();
$name = $spesialis['name'];
} else {
$name = '-';
}
if (isset($requestLog['specialities_id'])){
$dppj = $requestLog['dppj'];
} else {
$dppj = '-';
} }
$data = [ $data = [
'id' => $requestLog['id'], 'id' => $requestLog['id'],
'code' => $requestLog['code'], 'code' => $requestLog['code'],
'invoice_no' => $requestLog['invoice_no'], 'invoice_no' => $requestLog['invoice_no'],
'billing_no' => $requestLog['billing_no'], 'billing_no' => $requestLog['billing_no'],
'specialities_id' => $spesialis['name'], 'specialities_id' => $name,
'dppj' => $requestLog['dppj'], 'dppj' => $dppj,
'code' => $requestLog['code'], 'code' => $requestLog['code'],
'code_claim' => $claimCode, 'code_claim' => $claimCode,
'member_id' => $requestLog['member']['member_id'], 'member_id' => $requestLog['member']['member_id'],

View File

@@ -6,6 +6,7 @@ use App\Models\OLDLMS\User;
use App\Models\Icd; use App\Models\Icd;
use App\Models\Drug; use App\Models\Drug;
use App\Models\Unit; use App\Models\Unit;
use App\Models\MemberPlan;
use Illuminate\Contracts\Support\Renderable; use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
@@ -179,6 +180,22 @@ class AutocompleteController extends Controller {
return Helper::responseJson(['message' => 'Signa added successfully']); 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);
}
} }

View File

@@ -2,13 +2,13 @@ import { styled } from '@mui/material/styles';
import Iconify from '@/components/Iconify'; import Iconify from '@/components/Iconify';
import { fCurrency } from '@/utils/formatNumber'; import { fCurrency } from '@/utils/formatNumber';
import { LoadingButton } from '@mui/lab'; 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 { Card } from '@mui/material';
import { Stack, Typography } from '@mui/material'; import { Stack, Typography } from '@mui/material';
import { fPostFormat } from '@/utils/formatTime'; import { fPostFormat } from '@/utils/formatTime';
import axios from '@/utils/axios'; import axios from '@/utils/axios';
import { enqueueSnackbar } from 'notistack'; import { enqueueSnackbar } from 'notistack';
import { useRef, useState, useContext } from 'react'; import { useRef, useState, useContext, useEffect } from 'react';
import { makeFormData } from '@/utils/jsonToFormData'; import { makeFormData } from '@/utils/jsonToFormData';
import { format } from 'date-fns'; import { format } from 'date-fns';
import { LanguageContext } from '@/contexts/LanguageContext'; import { LanguageContext } from '@/contexts/LanguageContext';
@@ -17,10 +17,10 @@ import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
import TextField from '@mui/material/TextField'; import TextField from '@mui/material/TextField';
export default function DialogFinalLog({ member, getData, onClose, handleSubmitSuccess }: any) { export default function DialogFinalLog({ member, getData, onClose, handleSubmitSuccess }: any) {
const { localeData }: any = useContext(LanguageContext); const { localeData }: any = useContext(LanguageContext);
//Submission date //Submission date
const [dischargeDate, setDischargeDate] = useState<string>(format(new Date(), "yyyy MMM d HH:mm:ss")); const [dischargeDate, setDischargeDate] = useState<string>(format(new Date(), "yyyy MMM d HH:mm:ss"));
const [serviceCode, setServiceCode] = useState<string>('');
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// Files Diagnosa // Files Diagnosa
@@ -101,6 +101,7 @@ export default function DialogFinalLog({ member, getData, onClose, handleSubmitS
diagnosa_files: fileDiagnosas, diagnosa_files: fileDiagnosas,
kondisi_files: fileKondisis, kondisi_files: fileKondisis,
discharge_date: fPostFormat(dischargeDate, 'yyyy-MM-dd HH:mm:ss'), discharge_date: fPostFormat(dischargeDate, 'yyyy-MM-dd HH:mm:ss'),
service_code: serviceCode,
}); });
axios axios
.post('/request-final-log', formData) .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 ( return (
<Stack> <Stack>
<Stack direction="row" justifyContent={'end'} sx={{ marginBottom: 2, marginTop: 2 }} spacing={2}> <Stack direction="row" justifyContent={'end'} sx={{ marginBottom: 2, marginTop: 2 }} spacing={2}>
@@ -324,23 +341,44 @@ export default function DialogFinalLog({ member, getData, onClose, handleSubmitS
</Stack> </Stack>
</Stack> </Stack>
<Stack direction="row" spacing={2}> <Stack direction="row" spacing={2} sx={{ width: '100%' }}>
<Stack spacing={2} sx={{ width: '100%' }}> {/* Kolom Tanggal Discharge */}
<Typography variant='subtitle1'>{localeData.txtDischargeDate} *</Typography> <Stack spacing={2} sx={{ flex: 1 }}>
<LocalizationProvider dateAdapter={AdapterDateFns}> <Typography variant="subtitle1">{localeData.txtDischargeDate} *</Typography>
<DatePicker <LocalizationProvider dateAdapter={AdapterDateFns}>
label={localeData.txtDischargeDate} <DatePicker
value={dischargeDate} label={localeData.txtDischargeDate}
onChange={(newValue:any) => { value={dischargeDate}
setDischargeDate( (newValue)); onChange={(newValue: any) => {
}} setDischargeDate(newValue);
inputFormat="dd-MM-yyyy HH:mm" }}
renderInput={(params) => <TextField sx={{width:'40%'}} {...params} required/>} inputFormat="dd-MM-yyyy HH:mm"
/> renderInput={(params) => <TextField {...params} fullWidth required />}
</LocalizationProvider> />
</Stack> </LocalizationProvider>
</Stack> </Stack>
{/* Kolom Service Type */}
<Stack spacing={2} sx={{ flex: 1 }}>
<Typography variant="subtitle1">{localeData.txtDialogMember1} *</Typography>
<Autocomplete
id="service_type"
options={serviceOptions}
getOptionLabel={(option) => option.label || ""}
value={serviceOptions.find((opt) => opt.value == member.service_code) || null}
onChange={(event, newValue) => {
setServiceCode(newValue?.value || "");
}}
renderInput={(params) => (
<TextField {...params} label={localeData.txtDialogMember1} fullWidth />
)}
/>
<FormHelperText style={{ color: "red" }}></FormHelperText>
</Stack>
</Stack>
<LoadingButton <LoadingButton
variant="contained" variant="contained"
sx={{ marginTop: 2, p: 2, backgroundColor: '#19BBBB' }} sx={{ marginTop: 2, p: 2, backgroundColor: '#19BBBB' }}

View File

@@ -206,20 +206,20 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe
<Stack spacing={2} sx={{ width: '100%' }}> <Stack spacing={2} sx={{ width: '100%' }}>
<Typography variant='subtitle1'>{localeData.txtDialogMember1} *</Typography> <Typography variant='subtitle1'>{localeData.txtDialogMember1} *</Typography>
<Autocomplete <Autocomplete
id="service_type" id="service_type"
options={member?.services || []} options={member?.services || []}
getOptionLabel={(option: MemberService) => option.name || ''} getOptionLabel={(option: MemberService) => option.name || ''}
value={member?.services.find((item: MemberService) => item.service_code === serviceCode) || null} value={member?.services.find((item: MemberService) => item.service_code === serviceCode) || null}
onChange={(event: React.ChangeEvent<{}>, newValue: MemberService | null) => { onChange={(event: React.ChangeEvent<{}>, newValue: MemberService | null) => {
setServiceCode(newValue?.service_code || ''); setServiceCode(newValue?.service_code || '');
}} }}
renderInput={(params) => ( renderInput={(params) => (
<TextField <TextField
{...params} {...params}
label={localeData.txtDialogMember1} label={localeData.txtDialogMember1}
fullWidth fullWidth
/> />
)} )}
/> />
<FormHelperText style={{ color: 'red' }}></FormHelperText> <FormHelperText style={{ color: 'red' }}></FormHelperText>
</Stack> </Stack>

View File

@@ -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); setOpenDialogFinalLog(true);
const datas_view = { const datas_view = {
'id' : id, 'id' : id,
'full_name' : full_name, 'full_name' : full_name,
'no_polis' : no_polis, 'no_polis' : no_polis,
'submission_date' : submission_date 'submission_date' : submission_date,
'service_code' : service_code,
'member_id' : member_id,
}; };
setDataViewFinalDialog(datas_view); setDataViewFinalDialog(datas_view);
} }
@@ -427,7 +436,7 @@ export default function TableList() {
</MenuItem> </MenuItem>
):''} ):''}
{obj.final_log === 0 && obj.status === 'approved' ? ( {obj.final_log === 0 && obj.status === 'approved' ? (
<MenuItem onClick={() => handleRequestFinalLog(obj.id, obj.full_name, obj.no_polis, obj.submission_date) }> <MenuItem onClick={() => handleRequestFinalLog(obj.id, obj.full_name, obj.no_polis, obj.submission_date, obj.service_code, obj.member_id) }>
<Iconify icon="fa:file-text" /> <Iconify icon="fa:file-text" />
Request Final LOG Request Final LOG
</MenuItem> </MenuItem>