[WIP] Fix Rename to Coroporate
This commit is contained in:
@@ -103,6 +103,15 @@ export type Plan = {
|
||||
max_surgery_periode_days: string;
|
||||
}
|
||||
|
||||
export type CorporateBenefit = {
|
||||
id: number;
|
||||
corporate_id: number;
|
||||
code: string;
|
||||
name: string;
|
||||
description: string | null;
|
||||
active: boolean | number;
|
||||
}
|
||||
|
||||
export type Benefit = {
|
||||
service_code : string;
|
||||
plan_code : string;
|
||||
|
||||
@@ -26,11 +26,11 @@ export default function Divisions() {
|
||||
},
|
||||
{
|
||||
name: 'Corporate Name',
|
||||
href: '/corporates/'+id,
|
||||
href: '/corporates/'+corporate_id,
|
||||
},
|
||||
{
|
||||
name: 'Benefit',
|
||||
href: '/corporates/'+id+'/benefits',
|
||||
href: '/corporates/'+corporate_id+'/benefits',
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
@@ -11,7 +11,6 @@ import useSettings from '../../../hooks/useSettings';
|
||||
import { useParams, useSearchParams } from 'react-router-dom';
|
||||
// components
|
||||
import axios from '../../../utils/axios';
|
||||
import { MemberBenefit } from '../../../@types/corporates';
|
||||
import { LaravelPaginatedData } from '../../../@types/paginated-data';
|
||||
|
||||
export default function PlanList() {
|
||||
@@ -88,7 +87,7 @@ export default function PlanList() {
|
||||
if (importPlan.current?.files.length) {
|
||||
const formData = new FormData();
|
||||
formData.append("file", importPlan.current?.files[0])
|
||||
axios.post(`corporates/${id}/benefits/import`, formData )
|
||||
axios.post(`corporates/${corporate_id}/benefits/import`, formData )
|
||||
.then(response => {
|
||||
handleCancelImportButton();
|
||||
loadDataTableData();
|
||||
@@ -155,9 +154,9 @@ export default function PlanList() {
|
||||
}
|
||||
|
||||
// Called on every row to map the data to the columns
|
||||
function createData( memberBenefit: MemberBenefit ): MemberBenefit {
|
||||
function createData( benefit: Benefit ): Benefit {
|
||||
return {
|
||||
...memberBenefit,
|
||||
...benefit,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,7 +305,7 @@ export default function PlanList() {
|
||||
const loadDataTableData = async (appliedFilter = null) => {
|
||||
setDataTableLoading(true);
|
||||
const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]);
|
||||
const response = await axios.get('/corporates/'+id+'/benefits', { params: filter });
|
||||
const response = await axios.get('/corporates/'+corporate_id+'/benefits', { params: filter });
|
||||
// console.log(response.data);
|
||||
setDataTableLoading(false);
|
||||
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
|
||||
import { useNavigate, useParams } from "react-router-dom";
|
||||
import HeaderBreadcrumbs from "../../../components/HeaderBreadcrumbs";
|
||||
import Page from "../../../components/Page";
|
||||
import useSettings from "../../../hooks/useSettings";
|
||||
import { useEffect, useMemo, useState } from 'react';
|
||||
import axios from '../../../utils/axios';
|
||||
import { useSnackbar } from 'notistack';
|
||||
import CorporatePlanForm from './Form';
|
||||
import { CorporatePlan } from '../../../@types/corporates';
|
||||
|
||||
|
||||
|
||||
export default function PlanCreate() {
|
||||
const { themeStretch } = useSettings();
|
||||
const { corporate_id, id } = useParams();
|
||||
const [ currentCorporateBenefit, setCurrentCorporateBenefit ] = useState<CorporatePlan>();
|
||||
const navigate = useNavigate();
|
||||
|
||||
const isEdit = !!id;
|
||||
|
||||
useEffect(() => {
|
||||
if (isEdit) {
|
||||
axios.get('/corporates/'+corporate_id+'/corporate-benefits/'+id+'/edit')
|
||||
.then((res) => {
|
||||
setCurrentCorporateBenefit(res.data);
|
||||
})
|
||||
.catch((err) => {
|
||||
if (err.response.status === 404) {
|
||||
navigate('/404');
|
||||
}
|
||||
})
|
||||
}
|
||||
}, [corporate_id, id]);
|
||||
|
||||
|
||||
return (
|
||||
<Page title="Create Corporate Benefit">
|
||||
<HeaderBreadcrumbs
|
||||
heading={'Create Corporate Benefit'}
|
||||
links={[
|
||||
{
|
||||
name: 'Corporates',
|
||||
href: '/corporates',
|
||||
},
|
||||
{
|
||||
name: 'Corporate Name',
|
||||
href: '/corporates/'+corporate_id,
|
||||
},
|
||||
{
|
||||
name: 'Corporate Benefits',
|
||||
href: '/corporates/'+corporate_id+'/corporate-benefits',
|
||||
},
|
||||
{
|
||||
name: !isEdit ? 'Create' : 'Edit',
|
||||
href: '/corporates/'+corporate_id+'/corporate-benefits/'+id,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
<CorporatePlanForm isEdit={isEdit} currentCorporateBenefit={currentCorporateBenefit}/>
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
import * as Yup from 'yup';
|
||||
import { LoadingButton } from "@mui/lab";
|
||||
import { Card, Grid, Stack, Typography } from "@mui/material";
|
||||
import { CorporateBenefit } from "../../../@types/corporates";
|
||||
import { FormProvider, RHFSwitch, RHFTextField } from "../../../components/hook-form";
|
||||
import { useEffect, useMemo } from 'react';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { yupResolver } from '@hookform/resolvers/yup';
|
||||
import { useSnackbar } from 'notistack';
|
||||
import { useNavigate, useParams } from 'react-router-dom';
|
||||
import axios from '../../../utils/axios';
|
||||
|
||||
type Props = {
|
||||
isEdit: boolean;
|
||||
currentCorporateBenefit?: CorporateBenefit;
|
||||
};
|
||||
|
||||
export default function CorporatePlanForm({ isEdit, currentCorporateBenefit }: Props) {
|
||||
|
||||
const { enqueueSnackbar } = useSnackbar();
|
||||
const navigate = useNavigate();
|
||||
const { corporate_id } = useParams();
|
||||
|
||||
const NewCorporatePlanSchema = Yup.object().shape({
|
||||
name: Yup.string().required('Name is required'),
|
||||
code: Yup.string().required('Corporate Code is required'),
|
||||
});
|
||||
|
||||
const defaultValues = useMemo(
|
||||
() => ({
|
||||
name: currentCorporateBenefit?.name || '',
|
||||
code: currentCorporateBenefit?.code || '',
|
||||
active: currentCorporateBenefit?.active === 1 ? true : false,
|
||||
}),
|
||||
[currentCorporateBenefit]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (isEdit && currentCorporateBenefit) {
|
||||
reset(defaultValues);
|
||||
}
|
||||
if (!isEdit) {
|
||||
reset(defaultValues);
|
||||
}
|
||||
}, [isEdit, currentCorporateBenefit]);
|
||||
|
||||
const methods = useForm({
|
||||
resolver: yupResolver(NewCorporatePlanSchema),
|
||||
defaultValues,
|
||||
});
|
||||
|
||||
const {
|
||||
reset,
|
||||
watch,
|
||||
control,
|
||||
setValue,
|
||||
getValues,
|
||||
setError,
|
||||
handleSubmit,
|
||||
formState: { isSubmitting },
|
||||
} = methods;
|
||||
|
||||
|
||||
const onSubmit = async (data: any) => {
|
||||
if (!isEdit) {
|
||||
await axios
|
||||
.post('/corporates/' + corporate_id + '/corporate-benefits', data)
|
||||
.then((res) => {
|
||||
enqueueSnackbar('Corporate Plan created successfully', { variant: 'success' });
|
||||
})
|
||||
.then((res) => {
|
||||
navigate('/corporates/' + corporate_id + '/corporate-benefits', { replace: true });
|
||||
})
|
||||
.catch(({ response }) => {
|
||||
if (response.status === 422) {
|
||||
for (const [key, value] of Object.entries(response.data.errors)) {
|
||||
setError(key, { message: value[0] });
|
||||
enqueueSnackbar(value[0] ?? 'Failed Processing Request', { variant: 'error' });
|
||||
}
|
||||
}
|
||||
else {
|
||||
enqueueSnackbar('Create Failed : '+ response.data.message, { variant: 'error' });
|
||||
}
|
||||
});
|
||||
} else {
|
||||
await axios
|
||||
.put('/corporates/' + corporate_id + '/corporate-benefits/' + currentCorporateBenefit?.id , data)
|
||||
.then((res) => {
|
||||
enqueueSnackbar('Corporate Benefit updated successfully', { variant: 'success' });
|
||||
})
|
||||
.then((res) => {
|
||||
navigate('/corporates/' + corporate_id + '/corporate-benefits/' , { replace: true });
|
||||
})
|
||||
.catch(({ response }) => {
|
||||
enqueueSnackbar('Update Failed : '+ response.data.message, { variant: 'error' });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<FormProvider methods={methods} onSubmit={handleSubmit(onSubmit)}>
|
||||
<Grid container spacing={2}>
|
||||
<Grid item xs={8}>
|
||||
<Card sx={{ p: 2 }}>
|
||||
<Stack spacing={3}>
|
||||
|
||||
<Typography variant="h6">Corporate Benefit Detail</Typography>
|
||||
|
||||
<RHFTextField name="name" label="Name" />
|
||||
|
||||
<RHFTextField name="code" label="Code" />
|
||||
|
||||
<LoadingButton type="submit" variant="contained" size="large" fullWidth={true} loading={isSubmitting}>
|
||||
{isEdit ? 'Update' : 'Create'}
|
||||
</LoadingButton>
|
||||
|
||||
</Stack>
|
||||
</Card>
|
||||
</Grid>
|
||||
<Grid item xs={4}>
|
||||
<Card sx={{ p:2 }}>
|
||||
|
||||
<RHFSwitch name="active" label="Active" />
|
||||
</Card>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</FormProvider>
|
||||
);
|
||||
}
|
||||
@@ -26,11 +26,11 @@ export default function Divisions() {
|
||||
},
|
||||
{
|
||||
name: 'Corporate Name',
|
||||
href: '/corporates/'+id,
|
||||
href: '/corporates/'+corporate_id,
|
||||
},
|
||||
{
|
||||
name: 'Corporate Benefit',
|
||||
href: '/corporates/'+id+'/benefits',
|
||||
href: '/corporates/'+corporate_id+'/benefits',
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
@@ -8,10 +8,9 @@ import CancelIcon from '@mui/icons-material/Cancel';
|
||||
// hooks
|
||||
import React, { Component, useEffect, useRef, useState } from 'react';
|
||||
import useSettings from '../../../hooks/useSettings';
|
||||
import { useParams, useSearchParams } from 'react-router-dom';
|
||||
import { Link, useParams, useSearchParams } from 'react-router-dom';
|
||||
// components
|
||||
import axios from '../../../utils/axios';
|
||||
import { MemberBenefit } from '../../../@types/corporates';
|
||||
import { LaravelPaginatedData } from '../../../@types/paginated-data';
|
||||
|
||||
export default function PlanList() {
|
||||
@@ -47,7 +46,7 @@ export default function PlanList() {
|
||||
}
|
||||
|
||||
// Called on every row to map the data to the columns
|
||||
function createData( benefit: Benefit ): Benefit {
|
||||
function createData( benefit: CorporateBenefit ): CorporateBenefit {
|
||||
return {
|
||||
...benefit,
|
||||
}
|
||||
@@ -74,7 +73,7 @@ export default function PlanList() {
|
||||
<TableCell align="left">{row.name}</TableCell>
|
||||
|
||||
<TableCell align="right"><Button variant="outlined" color="success" size="small">Active</Button></TableCell>
|
||||
<TableCell align="right"><Button variant="outlined" color="success" size="small">Edit</Button></TableCell>
|
||||
<TableCell align="right"><Link to={`/corporates/${row.corporate_id}/corporate-benefits/${row.id}/edit`}><Button variant="outlined" color="success" size="small">Edit</Button></Link></TableCell>
|
||||
</TableRow>
|
||||
{/* COLLAPSIBLE ROW */}
|
||||
<TableRow>
|
||||
@@ -143,7 +142,7 @@ export default function PlanList() {
|
||||
const loadDataTableData = async (appliedFilter = null) => {
|
||||
setDataTableLoading(true);
|
||||
const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]);
|
||||
const response = await axios.get('/corporates/'+id+'/corporate-benefits', { params: filter });
|
||||
const response = await axios.get('/corporates/'+corporate_id+'/corporate-benefits', { params: filter });
|
||||
// console.log(response.data);
|
||||
setDataTableLoading(false);
|
||||
|
||||
@@ -167,13 +166,15 @@ export default function PlanList() {
|
||||
<Stack>
|
||||
<Stack direction={'row'} spacing={2} sx={{ p: 2 }}>
|
||||
<SearchInput onSearch={applyFilter}/>
|
||||
<Button
|
||||
id="upload-button"
|
||||
variant='outlined'
|
||||
startIcon={<AddIcon />} sx={{ p: 1.8 }}
|
||||
>
|
||||
Create
|
||||
</Button>
|
||||
<Link to={`/corporates/${corporate_id}/corporate-benefits/create`}>
|
||||
<Button
|
||||
id="upload-button"
|
||||
variant='outlined'
|
||||
startIcon={<AddIcon />} sx={{ p: 1.8 }}
|
||||
>
|
||||
Create
|
||||
</Button>
|
||||
</Link>
|
||||
</Stack>
|
||||
|
||||
<Card>
|
||||
|
||||
@@ -62,7 +62,6 @@ export default function CorporatePlanForm({ isEdit, currentCorporatePlan }: Prop
|
||||
|
||||
|
||||
const onSubmit = async (data: any) => {
|
||||
console.log('IS EDIT', isEdit);
|
||||
if (!isEdit) {
|
||||
await axios
|
||||
.post('/corporates/' + corporate_id + '/corporate-plans', data)
|
||||
@@ -84,18 +83,17 @@ export default function CorporatePlanForm({ isEdit, currentCorporatePlan }: Prop
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log('EDITING')
|
||||
await axios
|
||||
.put('/corporates/' + corporate_id + '/corporate-plans/' + currentCorporatePlan?.id , data)
|
||||
.then((res) => {
|
||||
enqueueSnackbar('Corporate Plan created successfully', { variant: 'success' });
|
||||
})
|
||||
.then((res) => {
|
||||
navigate('/corporates/' + corporate_id + '/corporate-plans/' + currentCorporatePlan?.id , { replace: true });
|
||||
})
|
||||
.catch(({ response }) => {
|
||||
enqueueSnackbar('Update Failed : '+ response.data.message, { variant: 'error' });
|
||||
});
|
||||
.put('/corporates/' + corporate_id + '/corporate-plans/' + currentCorporatePlan?.id , data)
|
||||
.then((res) => {
|
||||
enqueueSnackbar('Corporate Plan updated successfully', { variant: 'success' });
|
||||
})
|
||||
.then((res) => {
|
||||
navigate('/corporates/' + corporate_id + '/corporate-plans/' , { replace: true });
|
||||
})
|
||||
.catch(({ response }) => {
|
||||
enqueueSnackbar('Update Failed : '+ response.data.message, { variant: 'error' });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -170,14 +170,15 @@ export default function PlanList() {
|
||||
<Stack direction={'row'} spacing={2} sx={{ p: 2 }}>
|
||||
<SearchInput onSearch={applyFilter}/>
|
||||
<Link to={`/corporates/${corporate_id}/corporate-plans/create`}>
|
||||
<Button
|
||||
component="button"
|
||||
id="upload-button"
|
||||
variant='outlined'
|
||||
startIcon={<AddIcon />} sx={{ p: 1.8 }}
|
||||
>
|
||||
Create
|
||||
</Button></Link>
|
||||
<Button
|
||||
component="button"
|
||||
id="upload-button"
|
||||
variant='outlined'
|
||||
startIcon={<AddIcon />} sx={{ p: 1.8 }}
|
||||
>
|
||||
Create
|
||||
</Button>
|
||||
</Link>
|
||||
</Stack>
|
||||
|
||||
<Card>
|
||||
|
||||
@@ -25,11 +25,11 @@ export default function Divisions() {
|
||||
},
|
||||
{
|
||||
name: 'Corporate Name',
|
||||
href: '/corporates/'+id,
|
||||
href: '/corporates/'+corporate_id,
|
||||
},
|
||||
{
|
||||
name: 'Plan',
|
||||
href: '/corporates/'+id+'/plans',
|
||||
href: '/corporates/'+corporate_id+'/plans',
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
@@ -88,7 +88,7 @@ export default function CorporatePlanList() {
|
||||
if (importPlan.current?.files.length) {
|
||||
const formData = new FormData();
|
||||
formData.append("file", importPlan.current?.files[0])
|
||||
axios.post(`corporates/${id}/plans/import`, formData )
|
||||
axios.post(`corporates/${corporate_id}/plans/import`, formData )
|
||||
.then(response => {
|
||||
handleCancelImportButton();
|
||||
loadDataTableData();
|
||||
@@ -296,7 +296,7 @@ export default function CorporatePlanList() {
|
||||
const loadDataTableData = async (appliedFilter = null) => {
|
||||
setDataTableLoading(true);
|
||||
const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]);
|
||||
const response = await axios.get('/corporates/'+id+'/plans', { params: filter });
|
||||
const response = await axios.get('/corporates/'+corporate_id+'/plans', { params: filter });
|
||||
// console.log(response.data);
|
||||
setDataTableLoading(false);
|
||||
|
||||
|
||||
@@ -135,10 +135,18 @@ export default function Router() {
|
||||
path: 'corporates/:corporate_id/benefits',
|
||||
element: <Benefits />,
|
||||
},
|
||||
{
|
||||
path: 'corporates/:corporate_id/corporate-benefits/create',
|
||||
element: <CorporateBenefitsCreate />,
|
||||
},
|
||||
{
|
||||
path: 'corporates/:corporate_id/corporate-benefits',
|
||||
element: <CorporateBenefits />,
|
||||
},
|
||||
{
|
||||
path: 'corporates/:corporate_id/corporate-benefits/:id/edit',
|
||||
element: <CorporateBenefitsCreate />,
|
||||
},
|
||||
]
|
||||
},
|
||||
// {
|
||||
@@ -193,11 +201,11 @@ const CorporateDivisionsCreate = Loadable(lazy(() => import('../pages/Corporates
|
||||
|
||||
const CorporateMembers = Loadable(lazy(() => import('../pages/Corporates/Member/Index')));
|
||||
|
||||
const BenefitCreate = Loadable(lazy(() => import('../pages/Corporates/CorporateBenefit/Create')));
|
||||
const Benefits = Loadable(lazy(() => import('../pages/Corporates/CorporateBenefit/Index')));
|
||||
const BenefitCreate = Loadable(lazy(() => import('../pages/Corporates/Benefit/Create')));
|
||||
const Benefits = Loadable(lazy(() => import('../pages/Corporates/Benefit/Index')));
|
||||
|
||||
const CorporateBenefitsCreate = Loadable(lazy(() => import('../pages/Corporates/Benefit/Create')));
|
||||
const CorporateBenefits = Loadable(lazy(() => import('../pages/Corporates/Benefit/Index')));
|
||||
const CorporateBenefitsCreate = Loadable(lazy(() => import('../pages/Corporates/CorporateBenefit/CreateUpdate')));
|
||||
const CorporateBenefits = Loadable(lazy(() => import('../pages/Corporates/CorporateBenefit/Index')));
|
||||
|
||||
const CorporatePlanCreate = Loadable(lazy(() => import('../pages/Corporates/CorporatePlan/CreateUpdate')));
|
||||
const CorporatePlans = Loadable(lazy(() => import('../pages/Corporates/CorporatePlan/Index')));
|
||||
|
||||
Reference in New Issue
Block a user