import * as Yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; import { Autocomplete, Box, Button, Card, Collapse, Container, Divider, Grid, InputAdornment, Paper, Stack, Table, TableBody, TableCell, TableRow, TextField, Typography, } from '@mui/material'; import { Controller, useForm } from 'react-hook-form'; import { useParams, useNavigate } from 'react-router-dom'; import HeaderBreadcrumbs from '../../components/HeaderBreadcrumbs'; import { FormProvider, RHFCheckbox, RHFSelect, RHFTextField } from '../../components/hook-form'; import Page from '../../components/Page'; import useSettings from '../../hooks/useSettings'; import { useEffect, useMemo, useRef, useState } from 'react'; // import MemberSelectDialog from '../../components/dialogs/MemberSelectDialog'; import { styled } from '@mui/system'; import axios from '../../utils/axios'; import { enqueueSnackbar } from 'notistack'; import { LoadingButton } from '@mui/lab'; import { fCurrency } from '../../utils/formatNumber'; import Iconify from '../../components/Iconify'; import Form from './Form'; import Documents from './components/Documents'; import DiagnosisHistory from './components/DiagnosisHistory'; import ClaimItems from './components/ClaimItems'; import DialogMemberBenefit from './components/DialogMemberBenefit'; // import AutocompleteDiagnosis from '../../components/autocomplete/AutocompleteDiagnosis'; export default function ClaimsCreateUpdate() { const { themeStretch } = useSettings(); const { id } = useParams(); const isEdit = id ? true : false; const [currentClaim, setCurrentClaim] = useState(); const [documents, setDocuments] = useState([]); const Item = styled(Paper)(({ theme }) => ({ backgroundColor: theme.palette.mode === 'dark' ? '#1A2027' : '#fff', ...theme.typography.body2, padding: theme.spacing(1), textAlign: 'center', color: theme.palette.text.secondary, })); // -------------------------------------------------------------- // Claim Item const [claimItems, setClaimItems] = useState([]); const [dialogAddClaimItemOpen, setDialogAddClaimItemOpen] = useState(false); const [loadingClaimItems, setLoadingClaimItems] = useState(false); const handleAddClaimItems = (items) => { setClaimItems([...claimItems, ...items]); }; const handleSaveClaimItems = () => { console.log('Storing ', claimItems); setLoadingClaimItems(true); axios .post(`claims/${id}/update-items`, { benefit_items: claimItems.map((benefit) => ({ id: benefit.id, biaya_diajukan: benefit.biaya_diajukan, biaya_disetujui: benefit.biaya_disetujui, })), }) .then((res) => { enqueueSnackbar(res.data.message, { variant: 'success' }); }) .catch((err) => { setLoadingClaimItems(false); enqueueSnackbar(err.response?.data?.message ?? err?.message, { variant: 'error' }); }) .then(() => { setLoadingClaimItems(false); }); }; // -------------------------------------------------------------- // Diagnosis const [primaryDiagnosis, setPrimaryDiagnosis] = useState(null); const [secondaryDiagnosis, setSecondaryDiagnosis] = useState(null); const [loadingDiagnosis, setLoadingDiagnosis] = useState(false); const handlePrimaryDiagnosisChange = ({ title, value }) => { setPrimaryDiagnosis(value); }; const handleSecondaryDiagnosisChange = ({ title, value }) => { setSecondaryDiagnosis(value); }; const handleSaveDiagnosis = () => { setLoadingDiagnosis(true); axios .post(`claims/${id}/update-diagnosis`, { primary: [primaryDiagnosis], secondary: [secondaryDiagnosis], }) .then((res) => { enqueueSnackbar(res.data.message, { variant: 'success' }); }) .catch((err) => { setLoadingDiagnosis(false); enqueueSnackbar(err.response?.data?.message ?? err?.message, { variant: 'error' }); }) .then(() => { setLoadingDiagnosis(false); }); }; const handleDecline = () => { axios .post(`claims/${id}/decline`) .then((res) => { enqueueSnackbar(res.data.message, { variant: 'success' }); setCurrentClaim({ ...currentClaim, status: 'declined' }); }) .catch((err) => { // setLoadingDiagnosis(false) enqueueSnackbar(err.response?.data?.message ?? err?.message, { variant: 'error' }); }) .then(() => { // setLoadingDiagnosis(false) }); }; const handleApprove = () => { axios .post(`claims/${id}/approve`) .then((res) => { enqueueSnackbar(res.data.message, { variant: 'success' }); setCurrentClaim({ ...currentClaim, status: 'approved' }); }) .catch((err) => { // setLoadingDiagnosis(false) enqueueSnackbar(err.response?.data?.message ?? err?.message, { variant: 'error' }); }) .then(() => { // setLoadingDiagnosis(false) }); }; const handleReOpen = () => { axios .post(`claims/${id}/re-open`) .then((res) => { enqueueSnackbar(res.data.message, { variant: 'success' }); setCurrentClaim({ ...currentClaim, status: 'received' }); }) .catch((err) => { // setLoadingDiagnosis(false) enqueueSnackbar(err.response?.data?.message ?? err?.message, { variant: 'error' }); }) .then(() => { // setLoadingDiagnosis(false) }); }; // --------------------------------------------------------------- // Initial LOG const [loadingLog, setLoadingLog] = useState(false); const handleDownloadLog = (claim_id) => { setLoadingLog(true); axios .post(`generate-log/${claim_id}`, { responseType: 'blob', }) .then((response) => { window.open(URL.createObjectURL(response.data)); setLoadingLog(false); setOpenDialog(false); }) .catch((response) => { enqueueSnackbar(response.message, { variant: 'error' }); setLoadingLog(false); }); }; // ------------------------------------------------- // Final LOG const [loadingFinalLog, setLoadingFinalLog] = useState(false); const handleDownloadFinalLog = (claim_id) => { setLoadingFinalLog(true); axios .get(`final-log/${claim_id}`, { responseType: 'blob', }) .then((response) => { window.open(URL.createObjectURL(response.data)); setLoadingFinalLog(false); }) .catch((response) => { enqueueSnackbar(response.message, { variant: 'error' }); setLoadingFinalLog(false); }); }; useEffect(() => { axios.get('/claims/' + id).then(({ data }) => { const claim = data.data; const allFiles = [...(claim.claim_request ? claim.claim_request.files : []), ...claim.files]; setCurrentClaim(claim); setDocuments(allFiles); setClaimItems(claim.benefit_items); }); }, [id]); return ( {/* Action Button */} {(currentClaim?.status == 'requested' || currentClaim?.status == 'received') && ( <> { handleDecline(); }} > Decline { handleApprove(); }} > Approve )} {(currentClaim?.status == 'declined' || currentClaim?.status == 'approved') && ( { handleReOpen(); }} > Re-Open )} Status : {currentClaim?.status} {currentClaim?.status === 'approved' && ( { handleDownloadFinalLog(currentClaim.id); }} > Download Final LOG )} {/* Dokumen Tambahan */} {/* Riwayat Diagnosa */} {/* Ringkasan Data Member */} Ringkasan Data Nasabah Nama Lengkap {currentClaim?.member?.full_name} Nomor Polis {currentClaim?.member?.full_name} Member ID {currentClaim?.member?.member_id} Tipe Claim {currentClaim?.claim_request?.payment_type_name} Tipe Nasabah {currentClaim?.member?.current_corporate?.name} {/* Diagnosis */} {/* */} {(currentClaim?.status == 'requested' || currentClaim?.status == 'received') && ( { handleSaveDiagnosis(); }} > Simpan Claim Item )} Client Benefit Configuration { setDialogAddClaimItemOpen(true); }} > + Add Benefit {(currentClaim?.status == 'requested' || currentClaim?.status == 'received') && ( { handleSaveClaimItems(); }} > Simpan Claim Item )} ); }