// mui import { Container, Grid, Stack, Typography, Card, TextField, Divider, ButtonBase, Box, IconButton } 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 DetailTimeline from '../../pages/ClaimRequests/DetailTimeline'; import DetailStepper from '../../pages/ClaimRequests/DetailStepper'; 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 RemoveIcon from '@mui/icons-material/Remove'; import { DatePicker, LocalizationProvider } from '@mui/x-date-pickers'; import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; import Iconify from '@/components/Iconify'; import { fPostFormat } from '@/utils/formatTime'; import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile'; import DownloadIcon from '@mui/icons-material/Download'; import { Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import { fDateTimesecond } from '@/utils/formatTime'; import { makeFormData } from '@/utils/jsonToFormData'; import { enqueueSnackbar } from 'notistack'; // ---------------------------------------------------------------------- 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 [data, setData] = useState(); const [dataDialog, setDataDialog] = useState(); const { id } = useParams(); useEffect(() => { axios .get('/claim-requests/detail/'+id) .then((response) => { setData(response.data); setDataDialog(response.data.data.dialog_submits); }) .catch((error) => { console.error(error); }); }, []); const [isInvoiceVisible, setInvoiceVisibility] = useState(false); const handleInvoice = () => { setInvoiceVisibility(!isInvoiceVisible); } const currentDate = new Date(); const formattedCurrentDate = format(currentDate, 'dd MMM yyyy'); const [dateInvoice, setDateInvoice] = useState(currentDate); const fileInvoiceInput = useRef(null); const [fileInvoices, setFileInvoices] = useState([]); const handleInvoiceInputChange = (event) => { if (event.target.files[0]) { console.log('ok'); setFileInvoices([...fileInvoices, ...event.target.files]); } else { console.log('NO FILE'); } }; const removeInvoiceFiles = (filesState, index) => { setFileInvoices( filesState.filter((file, fileIndex) => { return fileIndex != index; }) ); }; const date = dateInvoice ? fPostFormat(dateInvoice, 'yyyy-MM-dd') : null; const [openDialogSubmit, setOpenDialogSubmit] = useState(false); const handleCloseDialogSubmit = () => { setOpenDialogSubmit(false); } const handleSubmitData = () => { if(fileInvoices.length > 0) { //submit data axios .post('claim-requests/'+id+'/approve') .then((response) => { enqueueSnackbar('Success Submit Claim Request', { variant: 'success' }); setOpenDialogSubmit(false); }) .catch(({ response }) => { enqueueSnackbar(response.data.message ?? 'Something went wrong!', { variant: 'error' }); }); //Upload file invoices const formData = makeFormData({ date:date, invoice_files: fileInvoices, }); axios .post('claim-requests/'+id+'/invoice-files', formData) .then((response) => { enqueueSnackbar(response.data.message ?? 'Success upload invoice', { variant: 'success' }); }) .catch(({ response }) => { enqueueSnackbar(response.data.message ?? 'Something Went Wrong', { variant: 'error' }); }); } else { enqueueSnackbar('Please upload file invoice, before submit', { variant: 'warning' }); } setTimeout(() => { window.location.reload(); }, 5000); }; return ( navigate(-1)} sx={{cursor:'pointer'}}/> {(data && data.data) ? data.data.status.code : ''} {data ? ( Submission Date {(data && data.data) ? format(new Date(data.data.status.submission_date), "d MMM yyyy") : ''} ) : ''} {data ? ( Format Claim Request Claim { setDateInvoice(newValue); }} inputFormat="dd MMM yyyy" renderInput={(params) => } /> } spacing={1} sx={{ marginY: 2 }} > {fileInvoices && fileInvoices.map((file, index) => ( {file.name ? file.name : '-'} { removeInvoiceFiles(fileInvoices, index); }} sx={{cursor: 'pointer'}} > ))} fileInvoiceInput.current?.click()}> Upload Invoice {dataDialog && dataDialog.status === 'requested' ? ( <> ) : ''} {/* Dialog Submits */} Confirmation {dataDialog ? ( Are you sure to submit this claim ? Code {dataDialog.code} Name {dataDialog.name} Date Submission {fDateTimesecond(dataDialog.submission_date)} Claim Method Service Type Service Type {dataDialog.service_code === 'IP' ? 'Inpatient' : 'Outpatient'} ) : ''} ) : ''} ); }