diff --git a/frontend/dashboard/pnpm-lock.yaml b/frontend/dashboard/pnpm-lock.yaml index 08c39a63..d718dbbc 100644 --- a/frontend/dashboard/pnpm-lock.yaml +++ b/frontend/dashboard/pnpm-lock.yaml @@ -229,6 +229,7 @@ devDependencies: packages: +<<<<<<< Updated upstream <<<<<<< HEAD /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} @@ -237,16 +238,21 @@ packages: ======= >>>>>>> a54708abb5d46d7d7319730306a528d33d910895 +======= +>>>>>>> Stashed changes /@ajoelp/json-to-formdata@1.5.0: resolution: {integrity: sha512-nrlfeTSL0X0dtx5r2KpzPiqLSIQquiiJjUKsQAKzWaCmO2QoYZCyb5ENZwF3YoffKronOCJr25mxaD8JRJmK8w==} dependencies: lodash: 4.17.21 dev: false +<<<<<<< Updated upstream <<<<<<< HEAD /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} ======= +======= +>>>>>>> Stashed changes /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} >>>>>>> a54708abb5d46d7d7319730306a528d33d910895 @@ -1769,6 +1775,7 @@ packages: /@emotion/memoize@0.7.4: resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + requiresBuild: true dev: false optional: true diff --git a/frontend/dashboard/src/components/hook-form/RHFDatepicker.tsx b/frontend/dashboard/src/components/hook-form/RHFDatepicker.tsx index b99bccac..0b00d37c 100644 --- a/frontend/dashboard/src/components/hook-form/RHFDatepicker.tsx +++ b/frontend/dashboard/src/components/hook-form/RHFDatepicker.tsx @@ -60,8 +60,8 @@ export default function RHFDatepicker({ name, ...other }: IProps & TextFieldProp { field.onChange(value); }} diff --git a/frontend/dashboard/src/pages/Corporates/Form.tsx b/frontend/dashboard/src/pages/Corporates/Form.tsx index 33e2e0af..a82b3a90 100644 --- a/frontend/dashboard/src/pages/Corporates/Form.tsx +++ b/frontend/dashboard/src/pages/Corporates/Form.tsx @@ -62,7 +62,6 @@ type Props = { }; export default function CorporateForm({ isEdit, currentCorporate }: Props) { - const navigate = useNavigate(); const [corporate_groups, setCorporateGroups] = useState([]); @@ -70,7 +69,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { const { enqueueSnackbar } = useSnackbar(); let NewCorporateSchema = null; - if (isEdit){ + if (isEdit) { NewCorporateSchema = Yup.object().shape({ isEdited: Yup.boolean(), name: Yup.string().required('Name is required'), @@ -81,36 +80,35 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { help_text: Yup.string().required('Help Text is required'), // policy_code: Yup.string().required('Policy Code is required'), policy_start: Yup.date().required('Start Date is required'), - policy_end: Yup.date().required('End Date is required').min(Yup.ref('policy_start'), "end date can't be before start date"), + policy_end: Yup.date() + .required('End Date is required') + .min(Yup.ref('policy_start'), "end date can't be before start date"), policy_total_premi: Yup.number().required('Deposit Initial Fund is required').min(0), // linking_rules: Yup.string().required('Link Rules is required'), - policy_minimal_deposit_percentage: - Yup.number() - .typeError("Please enter a valid number") - .required('Percentage Deposit is required') - .min(0, "Minimum atleast 0") - .max(100, "Allowed maximum is 100"), - policy_minimal_alert_percentage: - Yup.number() - .typeError("Please enter a valid number") - .required('Percentage Alert is required') - .min(0, "Minimum atleast 0") - .max(100, "Allowed maximum is 100"), - policy_stop_service_percentage: - Yup.number() - .typeError("Please enter a valid number") - .min(0, "Minimum atleast 0") - .required('Percentage Stop is required') - .test("max", "Total should not exceed 100 %", function(value) { - const { policy_minimal_alert_percentage } = this.parent; - const { policy_minimal_deposit_percentage } = this.parent; - return value == 100 - policy_minimal_alert_percentage- policy_minimal_deposit_percentage; - }), + policy_minimal_deposit_percentage: Yup.number() + .typeError('Please enter a valid number') + .required('Percentage Deposit is required') + .min(0, 'Minimum atleast 0') + .max(100, 'Allowed maximum is 100'), + policy_minimal_alert_percentage: Yup.number() + .typeError('Please enter a valid number') + .required('Percentage Alert is required') + .min(0, 'Minimum atleast 0') + .max(100, 'Allowed maximum is 100'), + policy_stop_service_percentage: Yup.number() + .typeError('Please enter a valid number') + .min(0, 'Minimum atleast 0') + .required('Percentage Stop is required') + .test('max', 'Total should not exceed 100 %', function (value) { + const { policy_minimal_alert_percentage } = this.parent; + const { policy_minimal_deposit_percentage } = this.parent; + return value == 100 - policy_minimal_alert_percentage - policy_minimal_deposit_percentage; + }), parent_id: Yup.string().when('type', { is: 'subcorporate', then: Yup.string().required('Corporate is required because type is Sub Corporate'), }), - + reason: Yup.string().required('Reason for update is required when editing data'), }); } else { @@ -118,108 +116,104 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { NewCorporateSchema = Yup.object().shape({ isEdited: Yup.boolean(), name: Yup.string().required('Name is required'), - code: Yup.string().required('Corporate Code is required').test( - 'unique-code', - 'Code must be unique', - async function (value) { + code: Yup.string() + .required('Corporate Code is required') + .test('unique-code', 'Code must be unique', async function (value) { const existingCodes = await getExistingCodes(); return !existingCodes.includes(value); - } - ), + }), active: Yup.boolean().required('Corporate Status is required'), type: Yup.string().required('Type is required'), welcome_message: Yup.string().required('Welcome Message is required'), help_text: Yup.string().required('Help Text is required'), // policy_code: Yup.string().required('Policy Code is required'), policy_start: Yup.date().required('Start Date is required'), - policy_end: Yup.date().required('End Date is required').min(Yup.ref('policy_start'), "end date can't be before start date"), + policy_end: Yup.date() + .required('End Date is required') + .min(Yup.ref('policy_start'), "end date can't be before start date"), policy_total_premi: Yup.number().required('Deposit Initial Fund is required').min(0), // linking_rules: Yup.string().required('Link Rules is required'), - policy_minimal_deposit_percentage: - Yup.number() - .typeError("Please enter a valid number") - .required('Percentage Deposit is required') - .min(0, "Minimum atleast 0") - .max(100, "Allowed maximum is 100"), - policy_minimal_alert_percentage: - Yup.number() - .typeError("Please enter a valid number") - .required('Percentage Alert is required') - .min(0, "Minimum atleast 0") - .max(100, "Allowed maximum is 100"), - policy_stop_service_percentage: - Yup.number() - .typeError("Please enter a valid number") - .min(0, "Minimum atleast 0") - .required('Percentage Stop is required') - .test("max", "Total should not exceed 100 %", function(value) { - const { policy_minimal_alert_percentage } = this.parent; - const { policy_minimal_deposit_percentage } = this.parent; - return value == 100 - policy_minimal_alert_percentage- policy_minimal_deposit_percentage; - }), + policy_minimal_deposit_percentage: Yup.number() + .typeError('Please enter a valid number') + .required('Percentage Deposit is required') + .min(0, 'Minimum atleast 0') + .max(100, 'Allowed maximum is 100'), + policy_minimal_alert_percentage: Yup.number() + .typeError('Please enter a valid number') + .required('Percentage Alert is required') + .min(0, 'Minimum atleast 0') + .max(100, 'Allowed maximum is 100'), + policy_stop_service_percentage: Yup.number() + .typeError('Please enter a valid number') + .min(0, 'Minimum atleast 0') + .required('Percentage Stop is required'), + // .test('max', 'Total should not exceed 100 %', function (value) { + // const { policy_minimal_alert_percentage } = this.parent; + // const { policy_minimal_deposit_percentage } = this.parent; + // return value == 100 - policy_minimal_alert_percentage - policy_minimal_deposit_percentage; + // }), parent_id: Yup.string().when('type', { is: 'subcorporate', then: Yup.string().required('Corporate is required because type is Sub Corporate'), }), }); } - async function getExistingCodes() { // axios - // .get('/corporates/create') - // .then((res) => { - // setCorporateGroups(res.data.corporate_groups); - // }) - // .catch((err) => { - // enqueueSnackbar('Opps, failed to get Corporate Group List', { variant: 'error' }); - // }); + // .get('/corporates/create') + // .then((res) => { + // setCorporateGroups(res.data.corporate_groups); + // }) + // .catch((err) => { + // enqueueSnackbar('Opps, failed to get Corporate Group List', { variant: 'error' }); + // }); - try { - let response = await axios.get('/corporates/1/code'); // get data all corporate - let codeCurrent = "" - if (isEdit){ - let responseCodeCurrent = await axios.get(`/corporates/${currentCorporate?.id}/edit`); // get data current corporate - codeCurrent = responseCodeCurrent.data.code; // get data code corporate current - } - // console.log(response.data); - let existingCodes = response.data.map(item => item); // get data code corporate all - - let filteredArray = existingCodes.filter(e => e != codeCurrent) - return filteredArray; - } catch (error) { - console.error(error); - enqueueSnackbar('Failed to fetch existing codes', { variant: 'error' }); + try { + let response = await axios.get('/corporates/1/code'); // get data all corporate + let codeCurrent = ''; + if (isEdit) { + let responseCodeCurrent = await axios.get(`/corporates/${currentCorporate?.id}/edit`); // get data current corporate + codeCurrent = responseCodeCurrent.data.code; // get data code corporate current } + // console.log(response.data); + let existingCodes = response.data.map((item) => item); // get data code corporate all + + let filteredArray = existingCodes.filter((e) => e != codeCurrent); + return filteredArray; + } catch (error) { + console.error(error); + enqueueSnackbar('Failed to fetch existing codes', { variant: 'error' }); + } } async function getExistingPayorId() { // axios - // .get('/corporates/create') - // .then((res) => { - // setCorporateGroups(res.data.corporate_groups); - // }) - // .catch((err) => { - // enqueueSnackbar('Opps, failed to get Corporate Group List', { variant: 'error' }); - // }); + // .get('/corporates/create') + // .then((res) => { + // setCorporateGroups(res.data.corporate_groups); + // }) + // .catch((err) => { + // enqueueSnackbar('Opps, failed to get Corporate Group List', { variant: 'error' }); + // }); - try { - let response = await axios.get('/corporates/1/code'); // get data all corporate - let codeCurrent = "" - if (isEdit){ - let responseCodeCurrent = await axios.get(`/corporates/${currentCorporate?.id}/edit`); // get data current corporate - codeCurrent = responseCodeCurrent.data.payor_id; // get data code corporate current - } - // console.log(response.data); - let existingCodes = response.data.map(item => item); // get data code corporate all - - let filteredArray = existingCodes.filter(e => e != codeCurrent) - console.log(filteredArray); - return filteredArray; - } catch (error) { - console.error(error); - enqueueSnackbar('Failed to fetch existing codes', { variant: 'error' }); + try { + let response = await axios.get('/corporates/1/code'); // get data all corporate + let codeCurrent = ''; + if (isEdit) { + let responseCodeCurrent = await axios.get(`/corporates/${currentCorporate?.id}/edit`); // get data current corporate + codeCurrent = responseCodeCurrent.data.payor_id; // get data code corporate current } + // console.log(response.data); + let existingCodes = response.data.map((item) => item); // get data code corporate all + + let filteredArray = existingCodes.filter((e) => e != codeCurrent); + console.log(filteredArray); + return filteredArray; + } catch (error) { + console.error(error); + enqueueSnackbar('Failed to fetch existing codes', { variant: 'error' }); + } } const defaultValues = useMemo( @@ -323,7 +317,6 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { formData.append('policy_end', fPostFormat(data.policy_end)); formData.append('linking_rules', data.linking_rules); - // console.log('MOTHERFUCKER', data.linking_rules) if (!isEdit) { @@ -479,7 +472,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { id: 'Lilili', }, ]; - const [isDisabled, setIsDisabled] = useState(isEdit); + const [isDisabled, setIsDisabled] = useState(isEdit); const handleTypeChange = (event: SelectChangeEvent) => { setValue('type', event.target.value); }; @@ -520,19 +513,16 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { ))} - )} + )} - + {isEdit && ( // - + @@ -575,13 +565,10 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { - {JSON.stringify(values.active)} - - {JSON.stringify(values.automatic_linking)} - - - Company Logo - {/* + + Company Logo + {/* */} - + + + + + Company Active + + + + Company Automatic Linking + + + @@ -598,7 +600,6 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { Linking Rules - {JSON.stringify(getValues('linking_rules'))} @@ -611,14 +612,12 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { {/* Policy Detail */} - - Policy Detail - + Policy Detail - + {!currentCorporate?.id && ( Will be generated if empty )} @@ -627,10 +626,10 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { {/* Minimal Deposit Policy Level */} - + - + @@ -639,11 +638,13 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { label={'Deposit Intial Fund (' + fCurrency(values.policy_total_premi) + ')'} /> - - - Minimal Deposit Policy Level - - + + + + + Minimal Deposit Policy Level + + - + - - - Minimal Alert Level - - + + + + + Minimal Alert Level + + - + - - - Stop Service Level - - + + + + + Stop Service Level + + - + diff --git a/frontend/dashboard/src/pages/Report/Livechat/Index.tsx b/frontend/dashboard/src/pages/Report/Livechat/Index.tsx index f246bfd9..df2f3cf0 100644 --- a/frontend/dashboard/src/pages/Report/Livechat/Index.tsx +++ b/frontend/dashboard/src/pages/Report/Livechat/Index.tsx @@ -27,7 +27,6 @@ export default function Doctor() { }, ]} /> - diff --git a/frontend/dashboard/src/pages/Report/Livechat/List.tsx b/frontend/dashboard/src/pages/Report/Livechat/List.tsx index c5b56840..61aed2f6 100644 --- a/frontend/dashboard/src/pages/Report/Livechat/List.tsx +++ b/frontend/dashboard/src/pages/Report/Livechat/List.tsx @@ -53,10 +53,14 @@ import { Controller } from 'react-hook-form'; import SvgIconStyle from '../../../components/SvgIconStyle'; import { GridSearchIcon } from '@mui/x-data-grid'; -import { Search } from '@mui/icons-material'; +import { Add, Search } from '@mui/icons-material'; import { Icon } from '@iconify/react'; import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight'; +import { RHFDatepicker } from '@/components/hook-form'; +import { DesktopDatePicker, LocalizationProvider } from '@mui/x-date-pickers'; +import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; +import { fPostFormat } from '@/utils/formatTime'; // ---------------------------------------------------------------------- @@ -103,7 +107,7 @@ export default function List() { return (
- + + + + { + try { + if (value && !!Date.parse(value)) { + const date = value ? fPostFormat(value) : ''; + var entries = [...searchParams.entries(), ['startDate', date ?? '']]; + if (!searchParams.get('endDate')) { + entries = [...entries, ['endDate', date ?? '']]; + } + const filter = Object.fromEntries(entries); + + setSearchParams(filter); + loadDataTableData(filter); + } + } catch (e) {} + }} + renderInput={(params) => } + /> + + + + + { + try { + if (value && !!Date.parse(value)) { + const date = fPostFormat(value); + var entries = [...searchParams.entries(), ['endDate', date ?? '']]; + if (!searchParams.get('startDate')) { + entries = [...entries, ['startDate', date ?? '']]; + } + const filter = Object.fromEntries(entries); + + setSearchParams(filter); + loadDataTableData(filter); + } + } catch (e) {} + }} + renderInput={(params) => ( + + )} + /> + + + + + );