import * as Yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; import { Autocomplete, Button, Card, Collapse, Divider, Grid, 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'; export default function ClaimsCreate() { const navigate = useNavigate(); const [member, setMember] = useState(); const selectedMemberDisplay = useRef(null); const NewClaimSchema = Yup.object().shape({ member_id: Yup.string().required('Please select Member'), total_claim: Yup.number().typeError('Claim should be a number').min(1, 'Claim cannot 0').required('Total Claim is required'), diagnosis: Yup.object().required('Choose Diagnosis'), benefit: Yup.object().required('Please Select Benefit') }); const defaultValues = useMemo( () => ({ member_id: null, benefit_id: null, diagnosis_id: null, total_claim: 0, benefit: null }), [] ); const methods = useForm({ resolver: yupResolver(NewClaimSchema), defaultValues, }); const { reset, watch, control, setValue, getValues, setError, handleSubmit, formState: { isSubmitting }, } = methods; const onSubmit = async (data: any) => { axios.post('claims', getValues()) .then(function(res) { console.log('SUCCESS', res) enqueueSnackbar('Success Creating Claim', { variant: 'success' }) navigate('/claims'); }) .catch(function (err) { console.log('ERROR CUK', err.data) enqueueSnackbar('Failed Creating Claim', { variant: 'error' }) }) }; const [memberBenefits, setMemberBenefits] = useState([]); const getMemberBenefits = (member) => { axios.get(`members/${member.id}/benefits`) .then( (res) => { setMemberBenefits(res.data); }) .catch( (err) => { enqueueSnackbar('Failed getting member benefits', { variant: 'error' }) }) } const [isMemberDialogOpen, setIsMemberDialogOpen] = useState(false); const memberSelected = (selectedMember: any) => { // Reset Selected Benefit setMemberBenefits([]); setValue('benefit_id', null); setValue('benefit', null); setMember(selectedMember); setValue('member_id', selectedMember.id) getMemberBenefits(selectedMember) }; const [diagnosis, setDiagnosis] = useState([]); const searchDiagnosis = (search) => { axios.get('master/diagnosis/search', {params: {search}}) .then(function(res) { setDiagnosis(res.data); }) } useEffect(() => { // Trigger First Search axios.get('master/diagnosis/search') .then(function(res) { setDiagnosis(res.data); }) }, []) const [isEligible, setIsEligible] = useState(null) const [isCheckingLimit, setIsCheckingLimit] = useState(false) const checkLimit = (event) => { event.preventDefault(); console.log(getValues('diagnosis_id')) if (!member || !getValues('diagnosis_id')) { enqueueSnackbar('Please Check the Data', { variant: 'error' }) return false; } setIsCheckingLimit(true) axios.post('check-limit', { 'member_id' : member.id, 'diagnosis' : getValues('diagnosis_id'), 'total_claim' : getValues('total_claim') }) .then((res) => { setIsEligible(true) }) .catch((err) => { enqueueSnackbar('Failed Checking Limit : ' + err.message ?? '', { variant: 'error' }) }) .then(() => { setIsCheckingLimit(false) }) } const headStyle = { fontWeight: 'bold' }; return ( Member {setIsMemberDialogOpen(true)}} /> {/* */} { member && ( Name {member.full_name} DOB {member.birth_date} ({member.age + ' years'}) Marital Status {member.marital_status} Record Type {member.record_type} Principal ID {member.principal_id} ({member.relation_with_principal})
Plan {member.current_plan.code} Active {member.current_plan.start} - {member.current_plan.end} (Active) Corporate Limit {fCurrency(0)} / {fCurrency(member.current_plan.limit_rules)} Plan Usage {fCurrency(0)} / {fCurrency(member.current_plan.limit_rules)}
)} ( option ? `#${option.id} (${option.code}) ${option.description}` : '' } value={value || ''} onChange={(event: any, newValue: any) => { setValue('benefit_id', newValue?.id) onChange(newValue); }} renderInput={(params) => ( { // if (event.key === 'Enter') // searchDiagnosis(event.target.value) // }} /> )} /> )} /> ( option ? `(${option.code}) ${option.name}` : '' } value={value || ''} onChange={(event: any, newValue: any) => { setValue('diagnosis_id', newValue?.id) // setValue('diagnosis', newValue) onChange(newValue); }} renderInput={(params) => ( { if (event.key === 'Enter') searchDiagnosis(event.target.value) }} /> )} /> )} /> { isCheckingLimit && ( {/* Checking */} Please Wait, Checking Eligibilty )} { false && isCheckingLimit == false && isEligible == null && ( {/* No Data Selected */} Please Select Diagnosis ! )} { (!isCheckingLimit && isEligible !== null) && isEligible && ( {/* Eligible */} Diagnosis is Eligible 125.000.000 / 125.000.000 )} { (!isCheckingLimit && isEligible !== null) && !isEligible && ( {/* Not Eligible */} Not Eligible 125.000.000 / 125.000.000 )} Create Claim { isEligible === true ? ( Create Claim ) : ( Check Limit )}
); }