update kalkulator, edit benefit item, dan delete benefit item

This commit is contained in:
2024-02-22 15:28:32 +07:00
parent dcf1eead2d
commit 0e7d9467ce
17 changed files with 808 additions and 178 deletions

View File

@@ -68,11 +68,11 @@ export default function FormEdit({ isEdit, currentClaim }: Props) {
() => ({
id: currentClaim?.id || '-',
code: currentClaim?.code || '-',
member_name: currentClaim?.member?.name || '-',
member_name: currentClaim?.name || '-',
date: currentClaim?.submission_date ? fDateTimesecond(currentClaim?.submission_date) : '-',
claim_method: currentClaim?.payment_type || '-',
service_type: currentClaim?.service_code || '-',
organization_id: currentClaim?.organization?.code || '-',
claim_method: currentClaim?.claim_method || '-',
service_type: currentClaim?.service_type || '-',
organization_id: currentClaim?.provider_code || '-',
}),
[currentClaim]
);
@@ -197,7 +197,7 @@ export default function FormEdit({ isEdit, currentClaim }: Props) {
</Stack>
<Stack direction='row' spacing={2} sx={marginBottom1}>
<Typography variant='subtitle2' sx={style1} gutterBottom>Name</Typography>
<Typography variant='subtitle2' sx={style2} gutterBottom>{currentClaim?.member?.name}</Typography>
<Typography variant='subtitle2' sx={style2} gutterBottom>{currentClaim?.name}</Typography>
</Stack>
<Stack direction='row' spacing={2} sx={marginBottom1}>
<Typography variant='subtitle2' sx={style1} gutterBottom>Date of Submission</Typography>
@@ -205,15 +205,15 @@ export default function FormEdit({ isEdit, currentClaim }: Props) {
</Stack>
<Stack direction='row' spacing={2} sx={marginBottom1}>
<Typography variant='subtitle2' sx={style1} gutterBottom>Claim Method</Typography>
<Typography variant='subtitle2' sx={style2} gutterBottom>{currentClaim?.payment_type}</Typography>
<Typography variant='subtitle2' sx={style2} gutterBottom>{currentClaim?.claim_method}</Typography>
</Stack>
<Stack direction='row' spacing={2} sx={marginBottom1}>
<Typography variant='subtitle2' sx={style1} gutterBottom>Service Type</Typography>
<Typography variant='subtitle2' sx={style2} gutterBottom>{currentClaim?.service_name || '-'}</Typography>
<Typography variant='subtitle2' sx={style2} gutterBottom>{currentClaim?.service_type || '-'}</Typography>
</Stack>
<Stack direction='row' spacing={2} sx={marginBottom1}>
<Typography variant='subtitle2' sx={style1} gutterBottom>Code Provider</Typography>
<Typography variant='subtitle2' sx={style2} gutterBottom>{currentClaim?.organization?.code || '-'}</Typography>
<Typography variant='subtitle2' sx={style2} gutterBottom>{currentClaim?.provider_code || '-'}</Typography>
</Stack>
</Card>
<Card sx={{padding:2, marginTop:2}} >

View File

@@ -28,13 +28,17 @@ import { fDateTimesecond } from '@/utils/formatTime';
import { makeFormData } from '@/utils/jsonToFormData';
import { enqueueSnackbar } from 'notistack';
import { DetailClaimRequest } from './Model/Types';
import { BenefitData, DetailClaimRequest } from './Model/Types';
import { Delete, EditOutlined } from '@mui/icons-material';
import { fNumber } from '@/utils/formatNumber';
import palette from '@/theme/palette';
import MoreMenu from '@/components/MoreMenu';
import DialogUploadFileFinalLog from './Components/DialogUploadFileFinalLog';
import DialogDeleteFileLog from './Components/DialogDeleteFileLog';
import DialogBenefit from '../CustomerService/FinalLog/Components/DialogBenefit';
import DialogDeleteBenefit from '../CustomerService/FinalLog/Components/DialogDeleteBenefit';
import DialogEditBenefit from '../CustomerService/FinalLog/Components/DialogEditBenefit';
// ----------------------------------------------------------------------
@@ -80,10 +84,10 @@ export default function Detail() {
marginBottom: 1,
}
const [openDialogSubmit, setOpenDialogSubmit] = useState(false);
const handleCloseDialogSubmit = () => {
setOpenDialogSubmit(false);
}
// Handle Add Benefit
const [openDialogBenefit, setDialogBenefit] = useState(false);
const [approve, setApprove] = useState('');
// Handle Delete File LOG
@@ -94,19 +98,28 @@ export default function Detail() {
const [dialogUploadFileLog, setDialogUploadFileLog] = useState(false)
// Buat total data
const totalAmountIncurred = (claimRequests?.benefit_data || []).reduce((accumulator, item) => {
return accumulator + (item.amount_incurred || 0);
}, 0);
const totalAmountApprove = (claimRequests?.benefit_data || []).reduce((accumulator, item) => {
return accumulator + (item.amount_approved || 0);
}, 0);
const totalAmountNotApprove = (claimRequests?.benefit_data || []).reduce((accumulator, item) => {
return accumulator + (item.amount_not_approved || 0);
}, 0);
const totalExcessPaid = (claimRequests?.benefit_data || []).reduce((accumulator, item) => {
return accumulator + (item.excess_paid || 0);
}, 0);
// const totalAmountIncurred = (claimRequests?.benefit_data || []).reduce((accumulator, item) => {
// return accumulator + (item.amount_incurred || 0);
// }, 0);
const totalAmountIncurred = claimRequests?.request_log?.total_amount_incurred;
const totalAmountApproved = claimRequests?.request_log?.total_amount_approved;
const totalAmountNotApproved = claimRequests?.request_log?.total_amount_not_approved
const totalExcessPaid = claimRequests?.request_log?.total_excess_paid
// Handle Delete Detail Benefit
const [idBenefitData, setIdBenefitData] = useState<number>();
const [openDialogDeleteBenefit, setDialogDeleteBenefit] = useState(false)
// Handle Edit Detail Benefit
const [openDialogEditBenefit, setDialogEditBenefit] = useState(false)
const [BenefitConfigurationData, setBenefitConfigurationData] = useState<BenefitData>();
const total = {
totalAmountIncurred : totalAmountIncurred,
totalAmountApproved : totalAmountApproved,
totalAmountNotApproved : totalAmountNotApproved,
totalExcessPaid : totalExcessPaid,
}
return (
<Page title='Detail'>
<Container maxWidth={themeStretch ? false : 'xl'}>
@@ -269,14 +282,14 @@ export default function Detail() {
<Stack direction="row" alignItems="center" sx={{marginBottom: 4}}>
<Typography variant='subtitle1' sx={{color: '#19BBBB'}} gutterBottom>Benefit</Typography>
<Button variant="outlined" startIcon={<AddIcon/>} sx={{marginLeft: 'auto'}} onClick={() => {
// setDialogBenefit(true);
setDialogBenefit(true);
}} >
<Typography variant="button" display="block">Benefit</Typography>
</Button>
</Stack>
<Box sx={{ border: '1px solid rgba(0,0,0,0.125)', px: '24px', py: '20px', marginBottom: '24px', borderRadius: '12px'}}>
{claimRequests?.benefit_data?.map((item, index) => (
{claimRequests?.request_log?.benefit_data?.map((item, index) => (
<Grid container spacing={2}>
<Grid item xs={12}>
<Grid container >
@@ -289,17 +302,17 @@ export default function Detail() {
<MoreMenu actions={
<>
<MenuItem onClick={() => {
// setDialogEditBenefit(true)
// setIdBenefitData(item.id)
// setBenefitConfigurationData(item)
setDialogEditBenefit(true)
setIdBenefitData(item.id)
setBenefitConfigurationData(item)
}}
>
<EditOutlined />
Edit
</MenuItem>
<MenuItem onClick={() => {
// setIdBenefitData(item.id)
// setDialogDeleteBenefit(true)
setIdBenefitData(item.id)
setDialogDeleteBenefit(true)
}}
>
<Delete color='error'/>
@@ -367,7 +380,7 @@ export default function Detail() {
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Excess Paid*
Excess Paid
</Typography>
</Grid>
<Grid item xs={12}>
@@ -383,7 +396,7 @@ export default function Detail() {
<Grid container>
<Grid item xs={12}>
<Typography variant="caption">
Keterangan*
Keterangan
</Typography>
</Grid>
<Grid item xs={12}>
@@ -402,95 +415,95 @@ export default function Detail() {
))}
<hr />
<br />
{claimRequests?.benefit_data && claimRequests.benefit_data.length > 0 ? (
<Grid container spacing={2}>
<Grid item xs={12}>
<Grid container spacing={2}>
<Grid item xs={6}>
<Typography variant="body2" sx={{ fontWeight: 'bold'}}>
Total Benefit
</Typography>
{claimRequests?.request_log?.benefit_data && claimRequests?.request_log?.benefit_data.length > 0 ? (
<Grid container spacing={2}>
<Grid item xs={12}>
<Grid container spacing={2}>
<Grid item xs={6}>
<Typography variant="body2" sx={{ fontWeight: 'bold'}}>
Total Benefit
</Typography>
</Grid>
</Grid>
</Grid>
<Grid item xs={12}>
<Box sx={{ py: '8px', px: '12px', background: palette.light.grey[50012], borderRadius: '6px'}}>
<Grid container spacing={1}>
{/* Amount Incurred */}
<Grid item xs={2}>
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Amount Incurred
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption" sx={{ fontWeight: 'bold' }}>
{totalAmountIncurred ? fNumber(totalAmountIncurred) : '0'}
</Typography>
</Grid>
</Grid>
</Grid>
{/* Amount Approved */}
<Grid item xs={2}>
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Amount Approved
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption" sx={{ fontWeight: 'bold' }}>
{totalAmountApproved ? fNumber(totalAmountApproved) : '0'}
</Typography>
</Grid>
</Grid>
</Grid>
{/* Amount Not Approved */}
<Grid item xs={3}>
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Amount Not Approved
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption" sx={{ fontWeight: 'bold' }}>
{totalAmountNotApproved ? fNumber(totalAmountNotApproved) : 0}
</Typography>
</Grid>
</Grid>
</Grid>
{/* Excess Paid* */}
<Grid item xs={2}>
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Excess Paid
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption" sx={{ fontWeight: 'bold' }}>
{totalExcessPaid ? fNumber(totalExcessPaid) : 0}
</Typography>
</Grid>
</Grid>
</Grid>
</Grid>
</Box>
</Grid>
</Grid>
<Grid item xs={12}>
<Box sx={{ py: '8px', px: '12px', background: palette.light.grey[50012], borderRadius: '6px'}}>
<Grid container spacing={1}>
{/* Amount Incurred */}
<Grid item xs={2}>
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Amount Incurred
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption" sx={{ fontWeight: 'bold' }}>
{fNumber(totalAmountIncurred)}
</Typography>
</Grid>
</Grid>
</Grid>
{/* Amount Approved */}
<Grid item xs={2}>
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Amount Approved
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption" sx={{ fontWeight: 'bold' }}>
{fNumber(totalAmountApprove)}
</Typography>
</Grid>
</Grid>
</Grid>
{/* Amount Not Approved */}
<Grid item xs={3}>
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Amount Not Approved
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption" sx={{ fontWeight: 'bold' }}>
{fNumber(totalAmountNotApprove)}
</Typography>
</Grid>
</Grid>
</Grid>
{/* Excess Paid* */}
<Grid item xs={2}>
<Grid container sx={{ borderRight: `0.5px solid ${palette.light.grey[400]}` }}>
<Grid item xs={12}>
<Typography variant="caption">
Excess Paid
</Typography>
</Grid>
<Grid item xs={12}>
<Typography variant="caption" sx={{ fontWeight: 'bold' }}>
{fNumber(totalExcessPaid)}
</Typography>
</Grid>
</Grid>
</Grid>
</Grid>
</Box>
</Grid>
</Grid>
)
: (
null
)}
)
: (
null
)}
</Box>
</Card>
@@ -500,26 +513,28 @@ export default function Detail() {
>
</CardBenefit> */}
{/* <DialogBenefit
requestLog={requestLog}
<DialogBenefit
requestLog={claimRequests?.request_log}
openDialog={openDialogBenefit}
setOpenDialog={setDialogBenefit}
claimInput={true}
/>
{/* Dialog Edit */}
{/* <DialogEditBenefit
<DialogEditBenefit
id={idBenefitData}
data={BenefitConfigurationData}
openDialog={openDialogEditBenefit}
setOpenDialog={setDialogEditBenefit}
/> */}
total={total}
/>
{/* Dialog Delete */}
{/* <DialogDeleteBenfit
<DialogDeleteBenefit
id={idBenefitData}
openDialog={openDialogDeleteBenefit}
setOpenDialog={setDialogDeleteBenefit}
/> */}
/>
{/* Dialog Edit Detai; */}
{/* <DialogEditFinalLOG

View File

@@ -2,6 +2,7 @@ import axios from '@/utils/axios';
import { enqueueSnackbar } from 'notistack';
import { MemberListType } from './Types';
import { makeFormData } from '@/utils/jsonToFormData';
import { BenefitConfigurationListType } from '@/pages/CustomerService/FinalLog/Model/Types';
/**
* Listing Member
@@ -77,3 +78,76 @@ export const addClaimRequest = async ( data: MemberListType[] ): Promise<boolean
return response;
};
/**
* Add Benefit
*/
export const postAddBenefit = async (data: BenefitConfigurationListType):Promise<boolean> => {
const response = await axios.post(`customer-service/request/insert-benefit`, {
...data
})
.then((res) =>{
enqueueSnackbar(res.data.message, {
variant: 'success',
});
return true;
})
.catch((res) => {
if (res.response.status == 400) {
let arr_message = res.response.data.message;
// for (const key in arr_message) {
enqueueSnackbar(arr_message, {
variant: 'warning',
});
// }
}
else {
enqueueSnackbar("server error !", {
variant: 'error',
});
}
return false;
});
return response;
}
/**
* Edit Benefit
*/
export const postEditBenefit = async (id:number|undefined, data: BenefitConfigurationListType):Promise<boolean> => {
const response = await axios.put(`customer-service/request/benefit_data/${id}`, {
...data
})
.then((res) =>{
enqueueSnackbar(res.data.message, {
variant: 'success',
});
return true;
})
.catch((res) => {
if (res.response.status == 400) {
let arr_message = res.response.data.message;
// for (const key in arr_message) {
enqueueSnackbar(arr_message, {
variant: 'warning',
});
// }
}
else {
enqueueSnackbar("server error !", {
variant: 'error',
});
}
return false;
});
return response;
}

View File

@@ -1,3 +1,5 @@
import { Member } from "@/@types/member"
/**
* Search Type
*/
@@ -48,6 +50,45 @@ export type DetailClaimRequest = {
files : file[],
benefit_data : BenefitData[],
diagnosis : Diagnosis[],
request_log : RequestLogType | undefined,
}
export type RequestLogType = {
id : number,
code : string,
member : Member,
submission_date : string,
admission_date : string,
service_name : string,
provider : string,
member_name : string,
payment_type_name : string,
status_final_log : string,
status : string,
files_by_type : files_by_type,
total_amount_incurred : number | undefined,
total_amount_approved : number | undefined,
total_amount_not_approved : number | undefined,
total_excess_paid : number | undefined,
benefit_data : benefit_data[] | undefined
}
export type benefit_data = {
benefit : {
description : string
},
id : number,
amount_incurred : number,
amount_approved : number,
amount_not_approved : number,
excess_paid : number,
keterangan : string,
}
export type files_by_type = {
claim_diagnosis : file[],
claim_kondisi : file[],
claim_result : file[],
}
export type Benefit = {