// mui import { Container, Grid, Stack, Typography, Card, TextField, Divider, ButtonBase, Box, IconButton, FormControl, InputLabel, Select, FormHelperText, MenuItem, } from '@mui/material'; // components import Page from '../../components/Page'; // utils import useSettings from '../../hooks/useSettings'; // react import { useNavigate, useParams, useLocation } from 'react-router-dom'; import { useEffect, useState, useRef } from 'react'; import axios from '../../utils/axios'; // pages import { format } from 'date-fns'; import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'; import Button from '@mui/material/Button'; import AddIcon from '@mui/icons-material/Add'; import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile'; import { Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import FormGroup from '@mui/material/FormGroup'; import FormControlLabel from '@mui/material/FormControlLabel'; import Checkbox from '@mui/material/Checkbox'; import { DatePicker, LocalizationProvider } from '@mui/x-date-pickers'; import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; import { fPostFormat } from '@/utils/formatTime'; import { fDate, fDateTime } from '../../utils/formatTime'; import ListItemText from '@mui/material/ListItemText'; import EditOutlinedIcon from '@mui/icons-material/EditOutlined'; import TableMoreMenu from '@/components/table/TableMoreMenu'; import { enqueueSnackbar } from 'notistack'; import BenefitConfigurationList from './components/BenefitConfigurationList'; import { map } from 'lodash'; // ---------------------------------------------------------------------- export default function Detail() { const location = useLocation(); const queryParams = new URLSearchParams(location.search); const code = queryParams.get('code'); const navigate = useNavigate(); const { themeStretch } = useSettings(); const [customerData, setCustomerData] = useState(null); const [documentData, setDocumentData] = useState(null); const [requestDocumentData, setRequestDocumentData] = useState(null); const [serviceData, setServiceData] = useState(null); const [serviceBenefitData, setServiceBenefitData] = useState(null); const { id } = useParams(); useEffect(() => { axios .get('/claims/detail/'+id) .then((response) => { setCustomerData(response.data.data.customer_data); setDocumentData(response.data.data.documents); setRequestDocumentData(response.data.data.request_documents); setServiceData(response.data.data.claim_services); setServiceBenefitData(response.data.data.claim_service_benefits); }) .catch((error) => { console.error(error); }); getService(); }, []); function toTitleCase(str) { return str.replace(/\w\S*/g, function(txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); } const style1 = { color: '#919EAB', width: '30%' } const style2 = { width: '70%' } const marginBottom1 = { marginBottom: 1, } //Request const [openDialogRequest, setOpenDialogRequest] = useState(false); const handleCloseDialogRequest = () => { setOpenDialogRequest(false); } const [conditionChecked, setConditionChecked] = useState(true); const [diagnosisChecked, setDiagnosisChecked] = useState(false); const [supportingResultChecked, setSupportingResultChecked] = useState(false); const handleConditionChange = (event) => { setConditionChecked(event.target.checked); }; const handleDiagnosisChange = (event) => { setDiagnosisChecked(event.target.checked); }; const handleSupportingResultChange = (event) => { setSupportingResultChecked(event.target.checked); }; const [noteField, setNoteField] = useState(''); const [noteFieldError, setNoteFieldError] = useState(''); const isRequiredFieldsFilled = () => { return noteField.trim() !== ''; }; const handelRequestDocument = () => { const dataForm = { claim_id: id, condition: conditionChecked, diagnosis: diagnosisChecked, result: supportingResultChecked, note: noteField, } axios .post('/claims/request-documents', dataForm) .then((response) => { enqueueSnackbar('Success Request Document', { variant: 'success' }); setOpenDialogRequest(false); window.location.reload(); }) .catch((error) => { enqueueSnackbar('Something Went Wrong', { variant: 'error' }); }) } //Service const [openDialogService, setOpenDialogService] = useState(false); const handleCloseDialogService = () => { setOpenDialogService(false); } const handleConditionChangeService = (event) => { const selectedItem = event.target.value; if (valBenefitNames.includes(selectedItem)) { // Item is already selected, remove it setValBenefitNames(valBenefitNames.filter(item => item !== selectedItem)); } else { // Item is not selected, add it setValBenefitNames([...valBenefitNames, selectedItem]); } }; //Data const [serviceTypeData, setServiceTypeData] = useState(null); const [benefitNameData, setBenefitNameData] = useState(null); const [hospitalData, setHospitalData] = useState(null); //Field const currentDate = new Date(); const formattedCurrentDate = format(currentDate, 'dd MMM yyyy'); //Date Addmissions const [dateAd, setDateAd] = useState(currentDate); //Date Discharge const [dateDis, setDateDis] = useState(currentDate); //Service Type const [valServiceType, setValServiceType] = useState(''); const [valServiceTypeError, setValServiceTypeError] = useState(''); //Benefit Name const [valBenefitNames, setValBenefitNames] = useState([]); const [valBenefitNameError, setValBenefitNameError] = useState(''); //Hospital const [valHospital, setValHospital] = useState(''); const [valHospitalError, setValHospitalError] = useState(''); //txt name const [txtName, setTxtName] = useState('Add Service'); //flag add or edit service const [flagAddService, setFlagAddService] = useState('add'); //id claim_services const [idService, setIdService] = useState(null); const isRequiredFieldsServiceType = () => { return dateAd !== '' && dateDis !== '' && valServiceType !== '' && valBenefitNames.length > 0 && valHospital !== ''; }; const getService = async () => { try { const response = await axios.get('/claims/get-services/' + id); setServiceTypeData(response.data.data.service_type); setBenefitNameData(response.data.data.benefit_name); setHospitalData(response.data.data.hospital); await Promise.all([ setServiceTypeData(response.data.data.service_type), setBenefitNameData(response.data.data.benefit_name), setHospitalData(response.data.data.hospital), ]); } catch (error) { } } const handleAddService = async () => { setTxtName('Add Service'); setFlagAddService('add'); setOpenDialogService(true); } const handleEditService = async () => { setDateAd(serviceData.addmission_date); setDateDis(serviceData.discharge_date); setIdService(serviceData.id); setOpenDialogService(true); setTxtName('Edit Service'); setFlagAddService('edit'); if (serviceTypeData) { setValServiceType(serviceData.service_id); setValHospital(serviceData.hospital_id); setValBenefitNames(serviceBenefitData.benefit_id); } } const handelSaveServiceType = () => { const dateAdd = dateAd ? fPostFormat(dateAd, 'yyyy-MM-dd') : null; const dateDisc = dateDis ? fPostFormat(dateDis, 'yyyy-MM-dd') : null; const data = { flagAddService : flagAddService, idService: idService, claim_request_id: id, dateAdd : dateAdd, dateDisc : dateDisc, serviceType : valServiceType, benefitName : valBenefitNames, hospital : valHospital }; axios .post('/claims/save-services', data) .then((response) => { enqueueSnackbar('Success '+(flagAddService == 'add' ? 'Add' : 'Edit')+' Service', { variant: 'success' }); handleCloseDialogService(); window.location.reload(); }) .catch((error) => { enqueueSnackbar('Something Went Wrong', { variant: 'error' }); }) } return ( navigate(-1)} sx={{cursor:'pointer'}}/> {(customerData && customerData.code ? customerData.code : '')} {customerData ? ( Status {(customerData && customerData.status) ? toTitleCase(customerData.status) : ''} Submission Date {(customerData && customerData.submission_date) ? format(new Date(customerData.submission_date), "d MMM yyyy") : ''} ) : ''} {customerData ? ( Summary of Customer Data Full Name {customerData.name} Policy Number {customerData.payor_id} Member ID {customerData.member_id} Claim Type {toTitleCase(customerData.payment_type)} Corporate Name {toTitleCase(customerData.coporate_name)} ) : ''} {documentData ? ( Additional Documents {documentData?.map((documentType, index) => ( {documentType.type === 'claim-diagnosis' ? 'Diagnosis' : documentType.type === 'claim-kondisi' ? 'Condition' : documentType.type === 'claim-result' ? 'Supporting Result' : documentType.type === 'claim-invoice' ? 'Invoice' : ''} {documentType.original_name ? documentType.original_name : '-'} ))} {requestDocumentData && requestDocumentData.length > 0 ? ( Request Documents ) : ''} {requestDocumentData?.map((documentType, index) => ( {documentType.type === 'claim-diagnosis' ? 'Diagnosis' : documentType.type === 'claim-kondisi' ? 'Condition' : documentType.type === 'claim-result' ? 'Supporting Result' : documentType.type === 'claim-invoice' ? 'Invoice' : ''} ))} {/* Dialog Request Documents */} Request Document } label="Condition Document" /> } label="Diagnosis Document" /> } label="Supporting Result Document" /> Notes* { setNoteField(e.target.value); setNoteFieldError(e.target.value.trim() === '' ? 'This field is required' : ''); }} fullWidth inputProps={{ maxLength: 50 }} error={!!noteFieldError} helperText={noteFieldError} /> ): ''} History of Hospital Care Diagnostic History Diagnosis Summary Service {!serviceData ? ( ) : ( handleEditService()}> Edit } /> )} {serviceData ? ( <> Admission Date {serviceData && serviceData.addmission_date ? fDateTime(serviceData.addmission_date) : ''} Discharge Date {serviceData && serviceData.discharge_date ? fDateTime(serviceData.discharge_date) : ''} Serice Type {serviceData && serviceData.name_services ? serviceData.name_services : ''} Benefit Name {serviceBenefitData && serviceBenefitData.name_benefits ? serviceBenefitData.name_benefits : ''} Hospital {serviceData && serviceData.name_hospitals ? serviceData.name_hospitals : ''} ): ''} {/* Dialog Service */} {txtName} Admission Date* { setDateAd(newValue); }} inputFormat="dd MMM yyyy" renderInput={(params) => } /> Discharge Date* { setDateDis(newValue); }} inputFormat="dd MMM yyyy" renderInput={(params) => } /> Service Type* Service Type {valServiceTypeError} Benefit Name* Benefit Name {valBenefitNameError} Hospital* Hospital {valHospitalError} {/* title */} Client Benefit Configuration {/* no benefit selected */} { false ? ( Tidak ada benefit yang dipilih ) : ( ) } <> ); }