Edit Final LOG

This commit is contained in:
ivan-sim
2026-04-09 14:20:29 +07:00
parent e4a6a58e17
commit 63de17a98f
6 changed files with 89 additions and 19 deletions

View File

@@ -16,6 +16,7 @@ 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;
use Modules\Primaya\Http\Controllers\Api\MasterController;
/*
|--------------------------------------------------------------------------
@@ -128,6 +129,8 @@ Route::prefix('v1')->group(function() {
Route::get('get-claim-requests', [ClaimRequestController::class, 'get_claim_requests'])->name('claim-requests.get_claim_requests');
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']);
Route::get('organizations', [MasterController::class, 'organizations']);
});

View File

@@ -129,7 +129,7 @@ class RequestLogController extends Controller
if ($request->member_id){
try {
$code = !empty($this->getNextCode($request)) ? $this->getNextCode($request) : null;
$member = Member::find($request->member_id);
$memberValid = false;
if ($member){
@@ -349,7 +349,7 @@ class RequestLogController extends Controller
if ($request->status_approval){
$requestLog->status_approval = $request->status_approval;
$requestLog->approval_nominal_by = auth()->user()->id;
}
}
$requestLog->save();
@@ -529,6 +529,10 @@ class RequestLogController extends Controller
$requestLog->type_of_member = $request->type_of_member;
}
if (!empty($request->organization_id)){
$requestLog->organization_id = $request->organization_id;
}
$requestLog->final_log = 1;
$requestLog->approved_final_log_by = auth()->user()->id;
$requestLog->approved_final_log_at = Carbon::now();
@@ -1138,8 +1142,8 @@ class RequestLogController extends Controller
$organization = Organization::where(['id' => $request->organization_id, 'type' => 'hospital'])->first('code');
$provideCode = $organization ? $organization->code : '';
$member = Member::with(['currentCorporate','currentPolicy' ])->where(['id' => $request->member_id])->first();
$data = [
'source' => $source,
'provideCode' => $provideCode,
@@ -1148,7 +1152,7 @@ class RequestLogController extends Controller
'member_code' => $member->member_id,
];
$last_numeric_code = RequestLog::select(DB::raw('MAX(CAST(SUBSTRING_INDEX(code, ".", -1) AS SIGNED)) as max_numeric_code'))
->whereRaw('SUBSTRING_INDEX(code, ".", -1) REGEXP "^[0-9]+$"')
@@ -1307,7 +1311,7 @@ class RequestLogController extends Controller
{
// Ambil data file dari database
$file = File::where('path', $request->path)->first();
// Tentukan disk berdasarkan source
$disk = $file->source === 's3' ? 's3' : 'local';
@@ -1317,7 +1321,7 @@ class RequestLogController extends Controller
// Hapus file dari storage (cek dulu ada atau tidak)
if (Storage::disk($disk)->exists($path)) {
Storage::disk($disk)->delete($path);
// Update status file di DB (soft delete + reason)
$file->update([
'deleted_at' => Carbon::now(),
@@ -1355,5 +1359,5 @@ class RequestLogController extends Controller
phpinfo();
}
}

View File

@@ -174,6 +174,7 @@ class RequestLogShowResource extends JsonResource
'medicine' => $medicineData,
'files' => $requestLog['files'],
'provider' => $providerName,
'organization_id' => $requestLog['organization_id'],
'no_identitas' => $requestLog['member']['nric'],
'keterangan' => $requestLog['keterangan'],
'hak_kamar_pasien' => $requestLog['hak_kamar_pasien'],

View File

@@ -29,6 +29,7 @@ export default function DialogEditFinalLOG({requestLog, setOpenDialog, openDialo
icdCodes: requestLog?.diagnosis,
reason: requestLog?.reason,
type_of_member: requestLog?.type_of_member,
organization_id: requestLog?.organization_id || 0,
status: 'requested',
});
@@ -62,8 +63,10 @@ export default function DialogEditFinalLOG({requestLog, setOpenDialog, openDialo
icdCodes: requestLog?.diagnosis|| [],
reason: requestLog?.reason|| '',
type_of_member: requestLog?.type_of_member|| '',
organization_id: requestLog?.organization_id || 0,
status: 'requested',
});
setIdProvider(requestLog?.organization_id || 0); // ✅ sekalian sync UI
}, [requestLog]);
@@ -144,6 +147,7 @@ export default function DialogEditFinalLOG({requestLog, setOpenDialog, openDialo
icdCodes: requestLog?.diagnosis ?? [],
reason: requestLog?.reason ?? '',
type_of_member: requestLog?.type_of_member ?? '',
organization_id: requestLog?.organization_id || 0,
status: 'requested'
});
};
@@ -162,6 +166,24 @@ export default function DialogEditFinalLOG({requestLog, setOpenDialog, openDialo
// Add more options as needed
];
const [providers, setProviders] = useState([]);
const [idProvider, setIdProvider] = useState(0);
useEffect(() => {
axios
.get('/organizations')
.then((res) => {
setProviders(res.data.data || []);
})
.catch((err) => console.error(err));
}, []);
useEffect(() => {
if (requestLog?.organization_id) {
setIdProvider(requestLog.organization_id);
}
}, [requestLog]);
// console.log(formData.type_of_member)
const getContent = () => (
@@ -196,6 +218,26 @@ export default function DialogEditFinalLOG({requestLog, setOpenDialog, openDialo
</Card>
<Card sx={{padding:2, marginTop:2}} >
<Stack direction="row" spacing={2} sx={marginBottom2}>
<Typography variant="subtitle2" sx={style1} gutterBottom>
Provider
</Typography>
<Autocomplete
options={providers}
getOptionLabel={(option) => option.name?.trim() || '-'}
value={providers.find((item) => item.id == idProvider) || null}
onChange={(event, newValue) => {
const id = newValue?.id || 0;
setIdProvider(id);
handleChange('organization_id', id);
}}
renderInput={(params) => (
<TextField {...params} label="Provider" fullWidth />
)}
fullWidth
/>
</Stack>
<Stack direction='row' spacing={2} sx={marginBottom2}>
<Typography variant='subtitle2' sx={style1} gutterBottom>Invoice Provider</Typography>
<TextField

View File

@@ -356,7 +356,7 @@ export default function DetailRequestFinalLog() {
}
setSubmitLoading(true);
const formData = makeFormData({
request_logs_id: Log_id,
request_logs_id: requestLog?.id,
// result_files: fileHasilPenunjangs,
// diagnosa_files: fileDiagnosas,
// kondisi_files: fileKondisis,
@@ -424,7 +424,7 @@ export default function DetailRequestFinalLog() {
Detail
</Typography>
</Grid>
{requestLog?.status_final_log != 'requested' ? (
{requestLog?.status_final_log != 'approved' ? (
<Grid item xs={6} sx={{ display: 'flex', placeContent: 'end' }}>
<MoreMenu
actions={
@@ -1316,7 +1316,7 @@ export default function DetailRequestFinalLog() {
setOpenDialogSubmit(true);
}}
>
Request Final LOG
{requestLog?.status_final_log == 'requested' ? 'Edit' : ''} Request Final LOG
</Button>
</div>
@@ -1330,7 +1330,6 @@ export default function DetailRequestFinalLog() {
</Stack>
</Grid>
) : null}
</Grid>
</Container>
</Page>

View File

@@ -188,7 +188,7 @@ export default function TableListFinalLog() {
// enqueueSnackbar('Mohon isi alasan', { variant: 'warning' });
// return false;
// }
axios.post('/submit-claims', {
axios.post('/submit-claims', {
selectedRows: selectedRows
})
.then((response) => {
@@ -202,7 +202,7 @@ export default function TableListFinalLog() {
enqueueSnackbar(response.data.meta.message, {variant : "error"});
}
getData();
setSelectedRows([]);
setSelectedRows([]);
})
.catch(({response}) => {
enqueueSnackbar(response.data.errors ? response.data.errors[0] : (response.data ? response.data.meta.message : 'Opps, Something went Wrong!'), {variant : "error"})
@@ -365,8 +365,8 @@ export default function TableListFinalLog() {
];
function handleSearchMember(noPolis:any, birthDate:any) {
setLoadingClaim(false)
axios.post('/search-member', {
no_polis: noPolis,
axios.post('/search-member', {
no_polis: noPolis,
birth_date: birthDate ? fPostFormat(birthDate, 'yyyy-MM-dd') : null,
type: 'view'
})
@@ -466,6 +466,27 @@ export default function TableListFinalLog() {
<Iconify icon="eva:eye-fill" />
View
</MenuItem>
{obj.status !== 'approved' ? (
<MenuItem
onClick={() =>
navigate('/detail-request-final-log/'+obj.id, {
state: {
Log_id: obj.id,
full_name: obj.full_name,
no_polis: obj.no_polis,
submission_date: obj.submission_date,
service_code: obj.service_code,
member_id: obj.member_id,
specialities_id: obj.specialities_id,
dppj: obj.dppj,
},
})
}
>
<Iconify icon="fa:file-text" />
Edit Request Final LOG
</MenuItem>
):''}
{obj.status === 'approved' ? (
<MenuItem onClick={() => handleDownloadLog(obj.id, obj.service_code, obj.no_polis, obj.full_name, obj.provider, obj.approved_final_log_at)}>
<Iconify icon="eva:download-fill" />
@@ -542,7 +563,7 @@ export default function TableListFinalLog() {
DialogMember(currentMember, () => setOpenDialogBenefit(false))
}
maxWidth="sm"
/>
/>
<MuiDialog
title={{name: dataViewClaimSubmit?.full_name}}
openDialog={openDialogClaimSubmit}
@@ -573,7 +594,7 @@ export default function TableListFinalLog() {
</Stack>
</DialogTitle>
<DialogContent>
<Stack spacing={2} padding={2}>
<Typography variant='body1'>{localeData.txtDialogConfirmation}</Typography>
{valDialog == "decline" ? (
@@ -596,7 +617,7 @@ export default function TableListFinalLog() {
<Button variant="outlined" sx={{color: '#212B36', borderColor: '#919EAB52'}} onClick={handleCloseDialogSubmit}>{localeData.txtCancel}</Button>
<Button sx={{backgroundColor: (valDialog === 'decline' ? '' : '#19BBBB'), color: (valDialog === 'decline' ? '#FF4842' : ''), borderColor: '#FF4842'}} onClick={handleSubmitData} variant={(valDialog === 'decline' ? 'outlined' : 'contained')}>{(valDialog === "decline" ? localeData.txtDeclaine : 'Submit')}</Button>
</DialogActions>
</Dialog>
</Dialog>
</>
);
}