diff --git a/Modules/Internal/Http/Controllers/Api/CorporatePlanController.php b/Modules/Internal/Http/Controllers/Api/CorporatePlanController.php index 1e872c4f..8a8fc56b 100644 --- a/Modules/Internal/Http/Controllers/Api/CorporatePlanController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporatePlanController.php @@ -6,6 +6,7 @@ use App\Models\CorporatePlan; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; +use Illuminate\Validation\Rule; class CorporatePlanController extends Controller { @@ -38,9 +39,23 @@ class CorporatePlanController extends Controller * @param Request $request * @return Renderable */ - public function store(Request $request) + public function store(Request $request, $corporate_id) { - // + $request->validate([ + 'code' => [ + 'required', + Rule::unique('corporate_plans')->where('corporate_id', $corporate_id) + ], + 'name' => 'required' + ]); + + $newCorporatePlan = CorporatePlan::create([ + 'corporate_id' => $corporate_id, + 'code' => $request->code, + 'name' => $request->name, + ]); + + return $newCorporatePlan; } /** @@ -58,9 +73,11 @@ class CorporatePlanController extends Controller * @param int $id * @return Renderable */ - public function edit($id) + public function edit($corporate_id, $id) { - return view('internal::edit'); + $corporatePlan = CorporatePlan::findOrFail($id); + + return $corporatePlan; } /** diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index 177a798a..3dc90efa 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -42,7 +42,9 @@ Route::prefix('internal')->group(function () { Route::post('corporates/{corporate_id}/benefits/import', [BenefitController::class, 'memberBenefitImport']); Route::get('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'index']); - + Route::post('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'store']); + Route::get('corporates/{corporate_id}/corporate-plans/{id}/edit', [CorporatePlanController::class, 'edit']); + Route::get('corporates/{corporate_id}/corporate-benefits', [CorporateBenefitController::class, 'index']); }); }); diff --git a/app/Models/CorporatePlan.php b/app/Models/CorporatePlan.php index 40635c4e..8295a8d7 100644 --- a/app/Models/CorporatePlan.php +++ b/app/Models/CorporatePlan.php @@ -13,6 +13,8 @@ class CorporatePlan extends Model 'corporate_id', 'code', 'name', + 'description', + 'active', ]; public function corporate() diff --git a/database/migrations/2022_07_07_040543_create_corporate_plans_table.php b/database/migrations/2022_07_07_040543_create_corporate_plans_table.php index 75dd4b8c..7042d877 100644 --- a/database/migrations/2022_07_07_040543_create_corporate_plans_table.php +++ b/database/migrations/2022_07_07_040543_create_corporate_plans_table.php @@ -18,12 +18,16 @@ return new class extends Migration $table->foreignId('corporate_id')->nullable()->index(); $table->string('code')->index(); $table->string('name')->nullable(); + $table->text('description')->nullable(); + $table->boolean('active')->default(true); $table->timestamps(); $table->softDeletes(); $table->foreignId('created_by')->nullable()->index(); $table->foreignId('updated_by')->nullable()->index(); $table->foreignId('deleted_by')->nullable()->index(); + + $table->unique(["corporate_id", "code"], 'corporate_plans_unique'); }); } diff --git a/frontend/dashboard/package.json b/frontend/dashboard/package.json index e0e0ae2e..240bac62 100644 --- a/frontend/dashboard/package.json +++ b/frontend/dashboard/package.json @@ -56,7 +56,7 @@ "history": "^5.3.0", "jsx-runtime": "^1.2.0", "lodash": "^4.17.21", - "notistack": "^2.0.4", + "notistack": "^3.0.0-alpha.7", "nprogress": "^0.2.0", "numeral": "^2.0.6", "react": "^17.0.2", diff --git a/frontend/dashboard/pnpm-lock.yaml b/frontend/dashboard/pnpm-lock.yaml index 494f457d..b93d9012 100644 --- a/frontend/dashboard/pnpm-lock.yaml +++ b/frontend/dashboard/pnpm-lock.yaml @@ -44,7 +44,7 @@ specifiers: history: ^5.3.0 jsx-runtime: ^1.2.0 lodash: ^4.17.21 - notistack: ^2.0.4 + notistack: ^3.0.0-alpha.7 nprogress: ^0.2.0 numeral: ^2.0.6 prettier: ^2.6.2 @@ -88,7 +88,7 @@ dependencies: history: 5.3.0 jsx-runtime: 1.2.0 lodash: 4.17.21 - notistack: 2.0.5_k22khpnjqxywh7vt4mxfep5lqy + notistack: 3.0.0-alpha.7_sfoxds7t5ydpegc3knd667wn6m nprogress: 0.2.0 numeral: 2.0.6 react: 17.0.2 @@ -4030,6 +4030,12 @@ packages: slash: 3.0.0 dev: true + /goober/2.1.10: + resolution: {integrity: sha512-7PpuQMH10jaTWm33sQgBQvz45pHR8N4l3Cu3WMGEWmHShAcTuuP7I+5/DwKo39fwti5A80WAjvqgz6SSlgWmGA==} + peerDependencies: + csstype: ^3.0.10 + dev: false + /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true @@ -4532,27 +4538,19 @@ packages: /node-releases/2.0.4: resolution: {integrity: sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==} - /notistack/2.0.5_k22khpnjqxywh7vt4mxfep5lqy: - resolution: {integrity: sha512-Ig2T1Muqkc1PaSQcEDrK7diKv6cBxw02Iq6uv074ySfgq524TV5lK41diAb6OSsaiWfp3aRt+T3+0MF8m2EcJQ==} + /notistack/3.0.0-alpha.7_sfoxds7t5ydpegc3knd667wn6m: + resolution: {integrity: sha512-H/L/MyDBlpa0+9+4mp4p10WScDobpPkvWy6naBtAVDgSlCynaSGLitQZ0xHxtN7G7+dCyOBDqy1frCOPQHvOig==} + engines: {node: '>=12.0.0', npm: '>=6.0.0'} peerDependencies: - '@emotion/react': ^11.4.1 - '@emotion/styled': ^11.3.0 - '@mui/material': ^5.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true dependencies: - '@emotion/react': 11.9.0_citxzijaigt45he3z6kuy2ivbq - '@emotion/styled': 11.8.1_3mkbovqfrbpc53bljqhapolzfu - '@mui/material': 5.8.0_zdaquy43folvhsznh4trclztdq clsx: 1.1.1 - hoist-non-react-statics: 3.3.2 + goober: 2.1.10 react: 17.0.2 react-dom: 17.0.2_react@17.0.2 + transitivePeerDependencies: + - csstype dev: false /nprogress/0.2.0: diff --git a/frontend/dashboard/src/@types/corporates.ts b/frontend/dashboard/src/@types/corporates.ts index 827121ea..fab0b11d 100644 --- a/frontend/dashboard/src/@types/corporates.ts +++ b/frontend/dashboard/src/@types/corporates.ts @@ -41,16 +41,18 @@ export type Policy = { end: string | Date; } -export type Plan = { +export type CorporatePlan = { id: number; corporate_id: number; code: string; name: string; + description: string | null; + active: boolean | number; } -export type PlanConfig = { +export type Plan = { id: number; - corporate_plan: Plan | null; + corporate_plan: CorporatePlan | null; service_code: string; corporate_plan_id: string; code: string; @@ -101,7 +103,7 @@ export type PlanConfig = { max_surgery_periode_days: string; } -export type MemberBenefit = { +export type Benefit = { service_code : string; plan_code : string; benefit_code : string; diff --git a/frontend/dashboard/src/pages/Corporates/Benefit/Create.tsx b/frontend/dashboard/src/pages/Corporates/Benefit/Create.tsx index 093e9aba..5e9fccdf 100644 --- a/frontend/dashboard/src/pages/Corporates/Benefit/Create.tsx +++ b/frontend/dashboard/src/pages/Corporates/Benefit/Create.tsx @@ -16,7 +16,7 @@ import { useMemo, useState } from 'react'; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const NewDivisionSchema = Yup.object().shape({ name: Yup.string().required('Name is required'), diff --git a/frontend/dashboard/src/pages/Corporates/Benefit/Index.tsx b/frontend/dashboard/src/pages/Corporates/Benefit/Index.tsx index de7aca6a..196d4266 100644 --- a/frontend/dashboard/src/pages/Corporates/Benefit/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/Benefit/Index.tsx @@ -11,7 +11,7 @@ import DivisionsList from "./List"; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const pageTitle = 'Benefit'; return ( diff --git a/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx b/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx index 2eb48f23..b7ff4f38 100644 --- a/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx @@ -16,7 +16,7 @@ import { LaravelPaginatedData } from '../../../@types/paginated-data'; export default function PlanList() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const [searchParams, setSearchParams] = useSearchParams(); function SearchInput(props: any) { diff --git a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Create.tsx b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Create.tsx index 093e9aba..5e9fccdf 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Create.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Create.tsx @@ -16,7 +16,7 @@ import { useMemo, useState } from 'react'; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const NewDivisionSchema = Yup.object().shape({ name: Yup.string().required('Name is required'), diff --git a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Index.tsx b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Index.tsx index 57245523..7fa19c6c 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Index.tsx @@ -11,7 +11,7 @@ import DivisionsList from "./List"; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const pageTitle = 'Corporate Benefit'; return ( diff --git a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/List.tsx b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/List.tsx index 4b49d9ac..74d5601e 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/List.tsx @@ -16,7 +16,7 @@ import { LaravelPaginatedData } from '../../../@types/paginated-data'; export default function PlanList() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const [searchParams, setSearchParams] = useSearchParams(); function SearchInput(props: any) { diff --git a/frontend/dashboard/src/pages/Corporates/CorporatePlan/Create.tsx b/frontend/dashboard/src/pages/Corporates/CorporatePlan/Create.tsx deleted file mode 100644 index d1d40617..00000000 --- a/frontend/dashboard/src/pages/Corporates/CorporatePlan/Create.tsx +++ /dev/null @@ -1,247 +0,0 @@ -import * as Yup from 'yup'; -import { yupResolver } from "@hookform/resolvers/yup"; -import { Card, Collapse, Divider, Grid, Stack, Typography } from "@mui/material"; -import { useForm } from "react-hook-form"; -import { useParams } 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 CorporateTabNavigations from "../CorporateTabNavigations"; -import DivisionsList from "./List"; -import { useMemo, useState } from 'react'; - - - -export default function PlanCreate() { - const { themeStretch } = useSettings(); - - const { id } = useParams(); - - const NewDivisionSchema = Yup.object().shape({ - name: Yup.string().required('Name is required'), - code: Yup.string().required('Corporate Code is required'), - active: Yup.boolean().required('Corporate Status is required'), - }); - - const defaultValues = useMemo( - () => ({ - code: '', - }), - [] - ); - - const methods = useForm({ - resolver: yupResolver(NewDivisionSchema), - defaultValues, - }); - - const { - reset, - watch, - control, - setValue, - getValues, - setError, - handleSubmit, - formState: { isSubmitting }, - } = methods; - - const onSubmit = async (data: any) => { - console.log(data); - }; - - const [open, setOpen] = useState(false); - - const benefits = [ - { - 'category' : 'General Practitioner', - 'childs' : [ - { - 'name' : 'External Doctor Online', - 'code' : 'gp-external-doctor-online' - }, - { - 'name' : 'External Doctor Offline', - 'code' : 'gp-external-doctor-offline' - }, - { - 'name' : 'Internal Doctor Online', - 'code' : 'gp-internal-doctor-online' - }, - { - 'name' : 'Internal Doctor Offline', - 'code' : 'gp-internal-doctor-offline' - }, - ] - }, - { - 'category' : 'Specialist', - 'childs' : [ - { - 'name' : 'External Doctor Online', - 'code' : 'sp-external-doctor-online' - }, - { - 'name' : 'External Doctor Offline', - 'code' : 'sp-external-doctor-offline' - }, - { - 'name' : 'Internal Doctor Online', - 'code' : 'sp-internal-doctor-online' - }, - { - 'name' : 'Internal Doctor Offline', - 'code' : 'sp-internal-doctor-offline' - }, - ] - }, - { - 'category' : 'Medicines', - 'childs' : [ - { - 'name' : 'Vitamins', - 'code' : 'medicines-vitamins' - }, - { - 'name' : 'Delivery Fee', - 'code' : 'medicines-delivery-fee' - }, - ] - }, - ]; - - const products = [ - { - 'name' : 'Inpatient', - 'code' : 'IP', - }, - { - 'name' : 'Outpatient', - 'code' : 'OP', - }, - { - 'name' : 'Dental', - 'code' : 'DT', - }, - { - 'name' : 'Dental', - 'code' : 'DTL', - }, - { - 'name' : 'Matternity', - 'code' : 'MT', - }, - { - 'name' : 'Special Benefit', - 'code' : 'SB', - }, - ]; - - return ( - - - - - - - - - - - - Plan Detail - - - - - - - - - - - - Benefit Configuration - - - }> - - - {benefits.map(row => ( - - {row.category} - - {row.childs.map(benefit => ( - - - - ))} - - - ))} - Admin Fee - - {benefits.map(row => ( - - - - ))} - - - - - - - {benefits.map(row => ( - - {row.category} - - {row.childs.map(benefit => ( - - - - ))} - - - ))} - Admin Fee - - {benefits.map(row => ( - - - - ))} - - - - - - - - - - - ); -} diff --git a/frontend/dashboard/src/pages/Corporates/CorporatePlan/CreateUpdate.tsx b/frontend/dashboard/src/pages/Corporates/CorporatePlan/CreateUpdate.tsx new file mode 100644 index 00000000..8768616f --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/CorporatePlan/CreateUpdate.tsx @@ -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 [ currentCorporatePlan, setCurrentCorporatePlan ] = useState(); + const navigate = useNavigate(); + + const isEdit = !!id; + + useEffect(() => { + if (isEdit) { + axios.get('/corporates/'+corporate_id+'/corporate-plans/'+id+'/edit') + .then((res) => { + setCurrentCorporatePlan(res.data); + }) + .catch((err) => { + if (err.response.status === 404) { + navigate('/404'); + } + }) + } + }, [corporate_id, id]); + + + return ( + + + + + + ); +} diff --git a/frontend/dashboard/src/pages/Corporates/CorporatePlan/Form.tsx b/frontend/dashboard/src/pages/Corporates/CorporatePlan/Form.tsx new file mode 100644 index 00000000..a82d55d3 --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/CorporatePlan/Form.tsx @@ -0,0 +1,131 @@ +import * as Yup from 'yup'; +import { LoadingButton } from "@mui/lab"; +import { Card, Grid, Stack, Typography } from "@mui/material"; +import { CorporatePlan } 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; + currentCorporatePlan?: CorporatePlan; +}; + +export default function CorporatePlanForm({ isEdit, currentCorporatePlan }: 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: currentCorporatePlan?.name || '', + code: currentCorporatePlan?.code || '', + active: currentCorporatePlan?.active === 1 ? true : false, + }), + [currentCorporatePlan] + ); + + useEffect(() => { + if (isEdit && currentCorporatePlan) { + reset(defaultValues); + } + if (!isEdit) { + reset(defaultValues); + } + }, [isEdit, currentCorporatePlan]); + + const methods = useForm({ + resolver: yupResolver(NewCorporatePlanSchema), + defaultValues, + }); + + const { + reset, + watch, + control, + setValue, + getValues, + setError, + handleSubmit, + formState: { isSubmitting }, + } = methods; + + + const onSubmit = async (data: any) => { + console.log('IS EDIT', isEdit); + if (!isEdit) { + await axios + .post('/corporates/' + corporate_id + '/corporate-plans', data) + .then((res) => { + enqueueSnackbar('Corporate Plan created successfully', { variant: 'success' }); + }) + .then((res) => { + navigate('/corporates/' + corporate_id + '/corporate-plans', { 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 { + 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' }); + }); + } + }; + + return ( + + + + + + + Corporate Plan Detail + + + + + + + Create Corporate Plan + + + + + + + + + + + + + + ); +} diff --git a/frontend/dashboard/src/pages/Corporates/CorporatePlan/Index.tsx b/frontend/dashboard/src/pages/Corporates/CorporatePlan/Index.tsx index 7c3c8907..e02925b8 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporatePlan/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporatePlan/Index.tsx @@ -11,7 +11,7 @@ import DivisionsList from "./List"; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); return ( @@ -25,11 +25,11 @@ export default function Divisions() { }, { name: 'Corporate Name', - href: '/corporates/'+id, + href: '/corporates/'+corporate_id, }, { name: 'Corporate Plan', - href: '/corporates/'+id+'/divisions', + href: '/corporates/'+corporate_id+'/corporate-plans', }, ]} /> diff --git a/frontend/dashboard/src/pages/Corporates/CorporatePlan/List.tsx b/frontend/dashboard/src/pages/Corporates/CorporatePlan/List.tsx index 1dbf6db6..2989a58c 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporatePlan/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporatePlan/List.tsx @@ -8,16 +8,17 @@ 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, useNavigate, useParams, useSearchParams } from 'react-router-dom'; // components import axios from '../../../utils/axios'; -import { Plan } from '../../../@types/corporates'; +import { CorporatePlan } from '../../../@types/corporates'; import { LaravelPaginatedData } from '../../../@types/paginated-data'; export default function PlanList() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const [searchParams, setSearchParams] = useSearchParams(); + const navigate = useNavigate(); function SearchInput(props: any) { // SEARCH @@ -47,7 +48,7 @@ export default function PlanList() { } // Called on every row to map the data to the columns - function createData( plan: Plan ): Plan { + function createData( plan: CorporatePlan ): CorporatePlan { return { ...plan, } @@ -75,7 +76,7 @@ export default function PlanList() { {row.name} {row.description} - + {/* COLLAPSIBLE ROW */} @@ -144,7 +145,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-plans', { params: filter }); + const response = await axios.get('/corporates/'+corporate_id+'/corporate-plans', { params: filter }); // console.log(response.data); setDataTableLoading(false); @@ -168,13 +169,15 @@ export default function PlanList() { + + diff --git a/frontend/dashboard/src/pages/Corporates/CorporateTabNavigations.tsx b/frontend/dashboard/src/pages/Corporates/CorporateTabNavigations.tsx index 104560c1..c41c776e 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporateTabNavigations.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporateTabNavigations.tsx @@ -10,7 +10,7 @@ type Props = { export default function CorporateTabNavigations({ position }: Props) { const theme = useTheme(); - const { id } = useParams(); + const { corporate_id } = useParams(); const [currentTab, setCurrentTab] = React.useState(0); @@ -71,7 +71,7 @@ export default function CorporateTabNavigations({ position }: Props) { allowScrollButtonsMobile aria-label="scrollable force tabs example" > - {mainTabItems.map((tabItem, index) => ({tabItem.label})} />))} + {mainTabItems.map((tabItem, index) => ({tabItem.label})} />))} ) } diff --git a/frontend/dashboard/src/pages/Corporates/Create.tsx b/frontend/dashboard/src/pages/Corporates/CreateUpdate.tsx similarity index 86% rename from frontend/dashboard/src/pages/Corporates/Create.tsx rename to frontend/dashboard/src/pages/Corporates/CreateUpdate.tsx index b0853fbc..d20351cb 100644 --- a/frontend/dashboard/src/pages/Corporates/Create.tsx +++ b/frontend/dashboard/src/pages/Corporates/CreateUpdate.tsx @@ -14,25 +14,20 @@ import { Corporate } from '../../@types/corporates'; export default function Create() { const { themeStretch } = useSettings(); + const { corporate_id } = useParams(); - const { id } = useParams(); - - const isEdit = id ? true : false; - - // const corporates = [{ id: 1, name: 'Product 1', code: 'Code' }]; + const isEdit = corporate_id ? true : false; const [ currentCorporate, setCurrentCorporate ] = useState(); - // const name = "Henlooooo"; - useEffect(() => { if (isEdit) { - axios.get('/corporates/'+id+'/edit') + axios.get('/corporates/'+corporate_id+'/edit') .then((res) => { setCurrentCorporate(res.data); }) } - }, [id]); + }, [corporate_id]); return ( diff --git a/frontend/dashboard/src/pages/Corporates/Division/Create.tsx b/frontend/dashboard/src/pages/Corporates/Division/Create.tsx index b524bd2c..be6d220d 100644 --- a/frontend/dashboard/src/pages/Corporates/Division/Create.tsx +++ b/frontend/dashboard/src/pages/Corporates/Division/Create.tsx @@ -16,7 +16,7 @@ import { useMemo, useState } from 'react'; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const NewDivisionSchema = Yup.object().shape({ name: Yup.string().required('Name is required'), diff --git a/frontend/dashboard/src/pages/Corporates/Division/Index.tsx b/frontend/dashboard/src/pages/Corporates/Division/Index.tsx index 261b464e..59755fb1 100644 --- a/frontend/dashboard/src/pages/Corporates/Division/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/Division/Index.tsx @@ -11,7 +11,7 @@ import DivisionsList from "./List"; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); return ( diff --git a/frontend/dashboard/src/pages/Corporates/Division/List.tsx b/frontend/dashboard/src/pages/Corporates/Division/List.tsx index d741bd7e..ff879e31 100644 --- a/frontend/dashboard/src/pages/Corporates/Division/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Division/List.tsx @@ -190,7 +190,7 @@ export default function DivisionsList() { alert('No file selected') } - const { id } = useParams(); + const { corporate_id } = useParams(); return ( diff --git a/frontend/dashboard/src/pages/Corporates/Member/Index.tsx b/frontend/dashboard/src/pages/Corporates/Member/Index.tsx index 261b464e..59755fb1 100644 --- a/frontend/dashboard/src/pages/Corporates/Member/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/Member/Index.tsx @@ -11,7 +11,7 @@ import DivisionsList from "./List"; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); return ( diff --git a/frontend/dashboard/src/pages/Corporates/Member/List.tsx b/frontend/dashboard/src/pages/Corporates/Member/List.tsx index d741bd7e..ff879e31 100644 --- a/frontend/dashboard/src/pages/Corporates/Member/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Member/List.tsx @@ -190,7 +190,7 @@ export default function DivisionsList() { alert('No file selected') } - const { id } = useParams(); + const { corporate_id } = useParams(); return ( diff --git a/frontend/dashboard/src/pages/Corporates/Plan/Create.tsx b/frontend/dashboard/src/pages/Corporates/Plan/Create.tsx index d1d40617..c6a6250a 100644 --- a/frontend/dashboard/src/pages/Corporates/Plan/Create.tsx +++ b/frontend/dashboard/src/pages/Corporates/Plan/Create.tsx @@ -16,7 +16,7 @@ import { useMemo, useState } from 'react'; export default function PlanCreate() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const NewDivisionSchema = Yup.object().shape({ name: Yup.string().required('Name is required'), diff --git a/frontend/dashboard/src/pages/Corporates/Plan/Index.tsx b/frontend/dashboard/src/pages/Corporates/Plan/Index.tsx index e3ef1774..2724ca1a 100644 --- a/frontend/dashboard/src/pages/Corporates/Plan/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/Plan/Index.tsx @@ -11,7 +11,7 @@ import DivisionsList from "./List"; export default function Divisions() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); return ( diff --git a/frontend/dashboard/src/pages/Corporates/Plan/List.tsx b/frontend/dashboard/src/pages/Corporates/Plan/List.tsx index 44871c93..d4900438 100644 --- a/frontend/dashboard/src/pages/Corporates/Plan/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Plan/List.tsx @@ -16,7 +16,7 @@ import { LaravelPaginatedData } from '../../../@types/paginated-data'; export default function CorporatePlanList() { const { themeStretch } = useSettings(); - const { id } = useParams(); + const { corporate_id } = useParams(); const [searchParams, setSearchParams] = useSearchParams(); function SearchInput(props: any) { diff --git a/frontend/dashboard/src/routes/index.tsx b/frontend/dashboard/src/routes/index.tsx index 09559e82..0ca87586 100644 --- a/frontend/dashboard/src/routes/index.tsx +++ b/frontend/dashboard/src/routes/index.tsx @@ -88,47 +88,55 @@ export default function Router() { element: , }, { - path: 'corporates/:id', + path: 'corporates/:corporate_id', element: , }, { - path: 'corporates/:id/edit', + path: 'corporates/:corporate_id/edit', element: , }, { - path: 'corporates/:id/divisions', + path: 'corporates/:corporate_id/divisions', element: , }, { - path: 'corporates/:id/divisions/create', + path: 'corporates/:corporate_id/divisions/create', element: , }, { - path: 'corporates/:id/members', + path: 'corporates/:corporate_id/members', element: , }, { - path: 'corporates/:id/plans/create', + path: 'corporates/:corporate_id/plans/create', element: , }, { - path: 'corporates/:id/plans', + path: 'corporates/:corporate_id/plans', element: , }, { - path: 'corporates/:id/corporate-plans', + path: 'corporates/:corporate_id/corporate-plans/create', + element: , + }, + { + path: 'corporates/:corporate_id/corporate-plans/:id/edit', + element: , + }, + { + path: 'corporates/:corporate_id/corporate-plans', element: , }, { - path: 'corporates/:id/benefits/create', + path: 'corporates/:corporate_id/benefits/create', element: , }, { - path: 'corporates/:id/benefits', + path: 'corporates/:corporate_id/benefits', element: , }, { - path: 'corporates/:id/corporate-benefits', + path: 'corporates/:corporate_id/corporate-benefits', element: , }, ] @@ -177,7 +185,7 @@ const Members = Loadable(lazy(() => import('../pages/Members/Index'))); const MedicinesCreate = Loadable(lazy(() => import('../pages/Medicines/Create'))); const Corporate = Loadable(lazy(() => import('../pages/Corporates/Index'))); -const CorporateCreate = Loadable(lazy(() => import('../pages/Corporates/Create'))); +const CorporateCreate = Loadable(lazy(() => import('../pages/Corporates/CreateUpdate'))); const CorporateShow = Loadable(lazy(() => import('../pages/Corporates/Show'))); const CorporateDivisions = Loadable(lazy(() => import('../pages/Corporates/Division/Index'))); @@ -185,13 +193,13 @@ const CorporateDivisionsCreate = Loadable(lazy(() => import('../pages/Corporates const CorporateMembers = Loadable(lazy(() => import('../pages/Corporates/Member/Index'))); -const BenefitCreate = Loadable(lazy(() => import('../pages/Corporates/Benefit/Create'))); -const Benefits = Loadable(lazy(() => import('../pages/Corporates/Benefit/Index'))); +const BenefitCreate = Loadable(lazy(() => import('../pages/Corporates/CorporateBenefit/Create'))); +const Benefits = Loadable(lazy(() => import('../pages/Corporates/CorporateBenefit/Index'))); -const CorporateBenefitsCreate = Loadable(lazy(() => import('../pages/Corporates/CorporateBenefit/Create'))); -const CorporateBenefits = Loadable(lazy(() => import('../pages/Corporates/CorporateBenefit/Index'))); +const CorporateBenefitsCreate = Loadable(lazy(() => import('../pages/Corporates/Benefit/Create'))); +const CorporateBenefits = Loadable(lazy(() => import('../pages/Corporates/Benefit/Index'))); -// const PlanCreate = Loadable(lazy(() => import('../pages/Corporates/CorporatePlan/Create'))); +const CorporatePlanCreate = Loadable(lazy(() => import('../pages/Corporates/CorporatePlan/CreateUpdate'))); const CorporatePlans = Loadable(lazy(() => import('../pages/Corporates/CorporatePlan/Index'))); const PlanCreate = Loadable(lazy(() => import('../pages/Corporates/Plan/Create')));