diff --git a/Modules/Internal/Http/Controllers/Api/CorporateServiceController.php b/Modules/Internal/Http/Controllers/Api/CorporateServiceController.php new file mode 100644 index 00000000..6f66d660 --- /dev/null +++ b/Modules/Internal/Http/Controllers/Api/CorporateServiceController.php @@ -0,0 +1,91 @@ +where('corporate_id', $corporate_id)->paginate(); + + return Helper::paginateResources(CorporateServiceConfigResource::collection($services)); + } + + /** + * Show the form for creating a new resource. + * @return Renderable + */ + public function create() + { + return view('internal::create'); + } + + /** + * Store a newly created resource in storage. + * @param Request $request + * @return Renderable + */ + public function store(Request $request) + { + // + } + + /** + * Show the specified resource. + * @param int $id + * @return Renderable + */ + public function show($id) + { + return view('internal::show'); + } + + /** + * Show the form for editing the specified resource. + * @param int $id + * @return Renderable + */ + public function edit($id) + { + return view('internal::edit'); + } + + /** + * Update the specified resource in storage. + * @param Request $request + * @param int $id + * @return Renderable + */ + public function update(Request $request, $corporate_id) + { + $corporateService = CorporateService::where('corporate_id', $corporate_id)->where('service_code', $request->service_code)->first(); + $corporateServiceConfig = $corporateService->configs()->updateOrCreate([ + 'name' => $request->config_name, + 'value' => $request->config_value + ]); + + return $corporateServiceConfig; + } + + /** + * Remove the specified resource from storage. + * @param int $id + * @return Renderable + */ + public function destroy($id) + { + // + } +} diff --git a/Modules/Internal/Http/Controllers/Api/DiagnosisExclusionController.php b/Modules/Internal/Http/Controllers/Api/DiagnosisExclusionController.php index 79caefb5..8c1f690f 100644 --- a/Modules/Internal/Http/Controllers/Api/DiagnosisExclusionController.php +++ b/Modules/Internal/Http/Controllers/Api/DiagnosisExclusionController.php @@ -32,7 +32,6 @@ class DiagnosisExclusionController extends Controller ->paginate(); // return $exclusions; return Helper::paginateResources(DiagnosisExclusionResource::collection($exclusions)); - return response()->json(DiagnosisExclusionResource::collection($exclusions)->response()->getData(true)); } /** diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index 4ffe50e9..10dff1ad 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -6,6 +6,7 @@ use Modules\Internal\Http\Controllers\Api\BenefitController; use Modules\Internal\Http\Controllers\Api\CorporateBenefitController; use Modules\Internal\Http\Controllers\Api\CorporateController; use Modules\Internal\Http\Controllers\Api\CorporatePlanController; +use Modules\Internal\Http\Controllers\Api\CorporateServiceController; use Modules\Internal\Http\Controllers\Api\DiagnosisController; use Modules\Internal\Http\Controllers\Api\DiagnosisExclusionController; use Modules\Internal\Http\Controllers\Api\DivisionController; @@ -68,6 +69,9 @@ Route::prefix('internal')->group(function () { Route::get('corporates/{corporate_id}/diagnosis-exclusions', [DiagnosisExclusionController::class, 'index']); Route::post('corporates/{corporate_id}/diagnosis-exclusions/import', [DiagnosisExclusionController::class, 'import']); + Route::get('corporates/{corporate_id}/services', [CorporateServiceController::class, 'index']); + Route::put('corporates/{corporate_id}/services', [CorporateServiceController::class, 'update']); + // Route::get('corporates/{corporate_id}/diagnosis-exclusions', [DiagnosisExclusionController::class, 'index']); // Route::get('corporates/{corporate_id}/diagnosis-exclusions/import', [DiagnosisExclusionController::class, 'import']); diff --git a/Modules/Internal/Transformers/CorporateServiceConfigResource.php b/Modules/Internal/Transformers/CorporateServiceConfigResource.php new file mode 100644 index 00000000..fd3fa62b --- /dev/null +++ b/Modules/Internal/Transformers/CorporateServiceConfigResource.php @@ -0,0 +1,28 @@ + $this->id, + 'corporate_id' => $this->corporate_id, + 'service_code' => $this->service_code, + 'status' => $this->status, + 'name' => $this->service->name, + 'description' => $this->service->description, + 'configurations' => $this->configs->pluck('value', 'name') + ]; + } +} diff --git a/app/Models/Corporate.php b/app/Models/Corporate.php index c1a02146..51b35a1f 100644 --- a/app/Models/Corporate.php +++ b/app/Models/Corporate.php @@ -67,4 +67,14 @@ class Corporate extends Model { return $this->morphMany(ImportLog::class, 'importable'); } + + public function services() + { + return $this->hasManyThrough(CorporateService::class, Service::class, 'corporate_id', 'service_code', 'id', 'service_code'); + } + + public function corporateServices() + { + return $this->hasMany(CorporateService::class, 'corporate_id'); + } } diff --git a/app/Models/CorporateService.php b/app/Models/CorporateService.php new file mode 100644 index 00000000..df53c8a1 --- /dev/null +++ b/app/Models/CorporateService.php @@ -0,0 +1,34 @@ +belongsTo(Corporate::class); + } + + public function configs() + { + return $this->hasMany(CorporateServiceConfig::class, 'corporate_service_id'); + } + + public function service() + { + return $this->hasOne(Service::class, 'code', 'service_code'); + } +} diff --git a/app/Models/CorporateServiceConfig.php b/app/Models/CorporateServiceConfig.php new file mode 100644 index 00000000..8b596391 --- /dev/null +++ b/app/Models/CorporateServiceConfig.php @@ -0,0 +1,24 @@ +belongsTo(CorporateService::class, 'corporate_service_id'); + } +} diff --git a/app/Models/Services.php b/app/Models/Service.php similarity index 55% rename from app/Models/Services.php rename to app/Models/Service.php index fa63b8c7..e9988237 100644 --- a/app/Models/Services.php +++ b/app/Models/Service.php @@ -5,7 +5,13 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -class Services extends Model +class Service extends Model { use HasFactory; + + protected $fillable = [ + 'code', + 'name', + 'description', + ]; } diff --git a/database/migrations/2022_08_05_035511_create_corporate_services_table.php b/database/migrations/2022_08_05_035511_create_corporate_services_table.php new file mode 100644 index 00000000..1448545d --- /dev/null +++ b/database/migrations/2022_08_05_035511_create_corporate_services_table.php @@ -0,0 +1,42 @@ +id(); + $table->foreignId('corporate_id')->index(); + $table->string('service_code')->index(); + $table->string('status')->default('active'); + + $table->timestamps(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + + $table->index(['corporate_id', 'service_code']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('corporate_services'); + } +}; diff --git a/database/migrations/2022_08_08_042246_create_corporate_service_configs_table.php b/database/migrations/2022_08_08_042246_create_corporate_service_configs_table.php new file mode 100644 index 00000000..1315a962 --- /dev/null +++ b/database/migrations/2022_08_08_042246_create_corporate_service_configs_table.php @@ -0,0 +1,40 @@ +id(); + $table->foreignId('corporate_service_id')->index(); + $table->string('name'); + $table->text('value'); + + $table->timestamps(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('corporate_service_configs'); + } +}; diff --git a/database/seeders/ServiceSeeder.php b/database/seeders/ServiceSeeder.php new file mode 100644 index 00000000..b66ba331 --- /dev/null +++ b/database/seeders/ServiceSeeder.php @@ -0,0 +1,129 @@ + 1, + 'name' => 'Out Patient', + 'code' => 'OP', + 'description' => 'Out Patient', + ], + [ + 'id' => 2, + 'name' => 'Inpatient', + 'code' => 'IP', + 'description' => 'Inpatient', + ], + [ + 'id' => 3, + 'name' => 'Dental', + 'code' => 'DE', + 'description' => 'Dental', + ], + [ + 'id' => 4, + 'name' => 'Maternal', + 'code' => 'MA', + 'description' => 'Maternal', + ], + [ + 'id' => 5, + 'name' => 'Optical', + 'code' => 'OPT', + 'description' => 'Optical', + ], + ]; + + + $corporates = Corporate::get(); + + foreach ($services as $service) { + $service = Service::updateOrCreate(['id' => $service['id']], $service); + + foreach ($corporates as $corporate) { + $corporateService = $corporate->corporateServices()->create([ + 'service_code' => $service->code, + 'status' => 'active' + ]); + + $corporateService->configs()->insert([ + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'gp_external_doctor_online', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'gp_external_doctor_offline', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'gp_internal_doctor_online', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'gp_internal_doctor_offline', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'sp_external_doctor_online', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'sp_external_doctor_offline', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'sp_internal_doctor_online', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'sp_internal_doctor_offline', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'vitamins', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'delivery_fee', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'general_practitioner_fee', + 'value' => false, + ], + [ + 'corporate_service_id' => $corporateService->id, + 'name' => 'specialist_practitioner_fee', + 'value' => false, + ], + ]); + } + } + } +} diff --git a/frontend/dashboard/src/layouts/dashboard/navbar/NavConfig.tsx b/frontend/dashboard/src/layouts/dashboard/navbar/NavConfig.tsx index b2373d81..ba8539f4 100644 --- a/frontend/dashboard/src/layouts/dashboard/navbar/NavConfig.tsx +++ b/frontend/dashboard/src/layouts/dashboard/navbar/NavConfig.tsx @@ -55,7 +55,7 @@ const navConfig = [ { title: 'Corporate', path: '/corporates' }, { title: 'Corporate Create', path: '/corporates/create' }, { title: 'Formularium', path: '/formularium' }, - { title: 'Diagnosis Library (ICD-X)', path: '/master/diagnosis' }, + { title: 'Diagnosis Library (ICD-X)', path: '/masterdiagnosis' }, { title: 'Hospitals', path: '/hospitals' }, ], }, diff --git a/frontend/dashboard/src/pages/Corporates/CorporateTabNavigations.tsx b/frontend/dashboard/src/pages/Corporates/CorporateTabNavigations.tsx index 788da2e3..28c3207d 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporateTabNavigations.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporateTabNavigations.tsx @@ -23,6 +23,10 @@ export default function CorporateTabNavigations({ position }: Props) { // 'path' : 'corporate-plans', // 'label': 'Corporate Plan', // }, + { + 'path' : 'services', + 'label': 'Services', + }, { 'path' : 'plans', 'label': 'Plans', diff --git a/frontend/dashboard/src/pages/Corporates/Services/Create.tsx b/frontend/dashboard/src/pages/Corporates/Services/Create.tsx new file mode 100644 index 00000000..5e9fccdf --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/Services/Create.tsx @@ -0,0 +1,241 @@ +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 Divisions() { + const { themeStretch } = useSettings(); + + const { corporate_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 ( + + + + + + + + + + + + Benefit 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/Services/Index.tsx b/frontend/dashboard/src/pages/Corporates/Services/Index.tsx new file mode 100644 index 00000000..0db72eaa --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/Services/Index.tsx @@ -0,0 +1,46 @@ +import { Card, Grid } from "@mui/material"; +import { useParams } from "react-router-dom"; +import HeaderBreadcrumbs from "../../../components/HeaderBreadcrumbs"; +import Page from "../../../components/Page"; +import useSettings from "../../../hooks/useSettings"; +import CorporateTabNavigations from "../CorporateTabNavigations"; +import List from "./List"; + + + +export default function Divisions() { + const { themeStretch } = useSettings(); + + const { corporate_id } = useParams(); + + const pageTitle = 'Services'; + return ( + + + + + + + + + + + + ); +} diff --git a/frontend/dashboard/src/pages/Corporates/Services/List.tsx b/frontend/dashboard/src/pages/Corporates/Services/List.tsx new file mode 100644 index 00000000..d744efc8 --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/Services/List.tsx @@ -0,0 +1,463 @@ +import * as Yup from 'yup'; +// @mui +import { Box, Button, Card, Collapse, IconButton, InputLabel, MenuItem, OutlinedInput, Paper, Select, SelectChangeEvent, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField, Typography, Badge, Tab, Tabs, CardHeader, Stack, Menu, ButtonGroup, Checkbox, FormControlLabel } from '@mui/material'; +import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; +import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight'; +import AddIcon from '@mui/icons-material/Add'; +import UploadIcon from '@mui/icons-material/Upload'; +import CancelIcon from '@mui/icons-material/Cancel'; +// hooks +import React, { ChangeEvent, Component, useEffect, useMemo, useRef, useState } from 'react'; +import useSettings from '../../../hooks/useSettings'; +import { useParams, useSearchParams } from 'react-router-dom'; +// components +import axios from '../../../utils/axios'; +import { LaravelPaginatedData } from '../../../@types/paginated-data'; +import { Icd } from '../../../@types/diagnosis'; +import BasePagination from '../../../components/BasePagination'; +import { useForm } from 'react-hook-form'; +import { yupResolver } from '@hookform/resolvers/yup'; +import { RHFCheckbox } from '../../../components/hook-form'; +import { CheckBox } from '@mui/icons-material'; + +export default function List() { + const { themeStretch } = useSettings(); + const { corporate_id } = useParams(); + const [searchParams, setSearchParams] = useSearchParams(); + const [importResult, setImportResult] = useState(null); + + function SearchInput(props: any) { + // SEARCH + const searchInput = useRef(null); + const [searchText, setSearchText] = useState(""); + + const handleSearchChange = (event: any) => { + const newSearchText = event.target.value ?? '' + setSearchText(newSearchText); + } + + const handleSearchSubmit = (event: any) => { + event.preventDefault(); + props.onSearch(searchText); // Trigger to Parent + } + + useEffect(() => { // Trigger First Search + setSearchText(searchParams.get('search') ?? ''); + }, [searchParams]) + + return ( +
+ + + ); + } + + function SearchForm(props: any) { + // Create Button Menu + const [anchorEl, setAnchorEl] = React.useState(null); + + const handleClose = () => { + setAnchorEl(null); + }; + + return ( + + + + ); + } + + // Called on every row to map the data to the columns + function createData( icd: Icd ): Icd { + return { + ...icd, + } + } + + // Generate the every row of the table + function Row(props: { row: ReturnType }) { + const { row } = props; + const [open, setOpen] = React.useState(false); + + const handleConfigChange = (event: ChangeEvent, service: any) => { + console.log( event.target.name ,event.target.checked, service); + + axios.put(`/corporates/${corporate_id}/services/`, { + service_code: service.service_code, + config_name: event.target.name, + config_value: event.target.checked + }) + } + + return ( + + *': { borderBottom: 'unset' } }}> + + setOpen(!open)} + > + {open ? : } + + + {row.name} + + + + + {/* COLLAPSIBLE ROW */} + + + + + + + + + + + General Practitioner + + + + + External Doctor + Internal Doctor + + + + {handleConfigChange(event, row)}} name="gp_external_doctor_online" />} label="Online" /> + + + {handleConfigChange(event, row)}} name="gp_external_doctor_offline" />} label="Offline" /> + + + {handleConfigChange(event, row)}} name="gp_internal_doctor_online" />} label="Online" /> + + + {handleConfigChange(event, row)}} name="gp_internal_doctor_offline" />} label="Offline" /> + + + +
+
+ + + + + + Specialist Practitioner + + + + + External Doctor + Internal Doctor + + + + {handleConfigChange(event, row)}} name="sp_external_doctor_online" />} label="Online" /> + + + {handleConfigChange(event, row)}} name="sp_external_doctor_offline" />} label="Offline" /> + + + {handleConfigChange(event, row)}} name="sp_internal_doctor_online" />} label="Online" /> + + + {handleConfigChange(event, row)}} name="sp_internal_doctor_offline" />} label="Offline" /> + + + +
+
+ + + + + + Medicine + + + + + + {handleConfigChange(event, row)}} name="vitamins" />} label="Vitamins" /> + + + {handleConfigChange(event, row)}} name="delivery_fee" />} label="Delivery Fee" /> + + + + + +
+
+ + + + + + Free Admin Fee + + + + + + {handleConfigChange(event, row)}} name="general_practitioner_fee" />} label="General Practitioner" /> + + + {handleConfigChange(event, row)}} name="specialist_practitioner_fee" />} label="Specialist Practitioner" /> + + + + + +
+
+ + +
+
+
+
+
+
+ ); + } + + // Dummy Default Data + const [dataTableIsLoading, setDataTableLoading] = useState(true); + const [dataTableLastRequest, setDataTableLastRequest] = useState(0); + const [dataTableResponseState, setDataTableResponseState] = useState('idle'); + const [dataTableData, setDataTableData] = useState({ + current_page: 1, + data: [], + path: "", + first_page_url: "", + last_page: 1, + last_page_url: "", + next_page_url: "", + prev_page_url: "", + per_page: 10, + from: 0, + to: 0, + total: 0 + }); + + const loadDataTableData = async (appliedFilter : any | null = null) => { + setDataTableLoading(true); + const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]); + const response = await axios.get('/corporates/'+corporate_id+'/services', { params: filter }); + setDataTableLoading(false); + + // const service = [ + // { + // 'id' : 1, + // 'code' : 'OP', + // 'name' : 'Out Patient', + // 'description' : 'Out Patient', + // 'configurations' : [ + // { + // 'gp_external_doctor_online' : false, + // 'gp_external_doctor_offline' : false, + // 'gp_internal_doctor_online' : false, + // 'gp_internal_doctor_offline' : false, + // 'sp_external_doctor_online' : false, + // 'sp_external_doctor_offline' : false, + // 'sp_internal_doctor_online' : false, + // 'sp_internal_doctor_offline' : false, + // 'vitamins': false, + // 'delivery_fee': false, + // 'general_practitioner_fee': false, + // 'specialist_practitioner_fee': false, + // }, + // ] + // }, + // { + // 'id' : 2, + // 'code' : 'IP', + // 'name' : 'In Patient', + // 'description' : 'In Patient', + // 'configurations' : [ + // { + // 'gp_external_doctor_online' : false, + // 'gp_external_doctor_offline' : false, + // 'gp_internal_doctor_online' : false, + // 'gp_internal_doctor_offline' : false, + // 'sp_external_doctor_online' : false, + // 'sp_external_doctor_offline' : false, + // 'sp_internal_doctor_online' : false, + // 'sp_internal_doctor_offline' : false, + // 'vitamins': false, + // 'delivery_fee': false, + // 'general_practitioner_fee': false, + // 'specialist_practitioner_fee': false, + // }, + // ] + // }, + // { + // 'id' : 3, + // 'code' : 'DE', + // 'name' : 'Dental', + // 'description' : 'Dental', + // 'configurations' : [ + // { + // 'gp_external_doctor_online' : false, + // 'gp_external_doctor_offline' : false, + // 'gp_internal_doctor_online' : false, + // 'gp_internal_doctor_offline' : false, + // 'sp_external_doctor_online' : false, + // 'sp_external_doctor_offline' : false, + // 'sp_internal_doctor_online' : false, + // 'sp_internal_doctor_offline' : false, + // 'vitamins': false, + // 'delivery_fee': false, + // 'general_practitioner_fee': false, + // 'specialist_practitioner_fee': false, + // }, + // ] + // }, + // { + // 'id' : 4, + // 'code' : 'Optical', + // 'name' : 'Optical', + // 'description' : 'Optical', + // 'configurations' : [ + // { + // 'gp_external_doctor_online' : false, + // 'gp_external_doctor_offline' : false, + // 'gp_internal_doctor_online' : false, + // 'gp_internal_doctor_offline' : false, + // 'sp_external_doctor_online' : false, + // 'sp_external_doctor_offline' : false, + // 'sp_internal_doctor_online' : false, + // 'sp_internal_doctor_offline' : false, + // 'vitamins': false, + // 'delivery_fee': false, + // 'general_practitioner_fee': false, + // 'specialist_practitioner_fee': false, + // }, + // ] + // }, + // { + // 'id' : 5, + // 'code' : 'MA', + // 'name' : 'Matternity', + // 'description' : 'Matternity', + // 'configurations' : [ + // { + // 'gp_external_doctor_online' : false, + // 'gp_external_doctor_offline' : false, + // 'gp_internal_doctor_online' : false, + // 'gp_internal_doctor_offline' : false, + // 'sp_external_doctor_online' : false, + // 'sp_external_doctor_offline' : false, + // 'sp_internal_doctor_online' : false, + // 'sp_internal_doctor_offline' : false, + // 'vitamins': false, + // 'delivery_fee': false, + // 'general_practitioner_fee': false, + // 'specialist_practitioner_fee': false, + // }, + // ] + // }, + // { + // 'id' : 6, + // 'code' : 'SP', + // 'name' : 'Special Benefit', + // 'description' : 'Special Benefit', + // 'configurations' : [ + // { + // 'gp_external_doctor_online' : false, + // 'gp_external_doctor_offline' : false, + // 'gp_internal_doctor_online' : false, + // 'gp_internal_doctor_offline' : false, + // 'sp_external_doctor_online' : false, + // 'sp_external_doctor_offline' : false, + // 'sp_internal_doctor_online' : false, + // 'sp_internal_doctor_offline' : false, + // 'vitamins': false, + // 'delivery_fee': false, + // 'general_practitioner_fee': false, + // 'specialist_practitioner_fee': false, + // }, + // ] + // } + // ]; + + // console.log('asdasd', service); + // let x = response.data; + // x.data = service; + + setDataTableData(response.data); + } + + const headStyle = { + fontWeight: 'bold', + }; + + const applyFilter = async (searchFilter: any) => { + await loadDataTableData({ "search" : searchFilter }); + setSearchParams({ "search" : searchFilter }); + } + + const handlePageChange = (event : ChangeEvent, value: number) => { + const filter = Object.fromEntries([...searchParams.entries(), ["page", value]]); + loadDataTableData(filter); + setSearchParams(filter); + } + + useEffect(() => { + loadDataTableData(); + }, []) + + return ( + + + + + {/* The Main Table */} + + + + + + Service + + Status + Action + + + {dataTableIsLoading ? + ( + + + Loading + + + ) : ( + dataTableData.data.length == 0 ? + ( + + + No Data + + + ) : ( + + {dataTableData.data.map(row => ( + + ))} + + ) + )} +
+
+ + +
+
+ ); +} diff --git a/frontend/dashboard/src/routes/index.tsx b/frontend/dashboard/src/routes/index.tsx index 4d68c2cc..26a78ff7 100644 --- a/frontend/dashboard/src/routes/index.tsx +++ b/frontend/dashboard/src/routes/index.tsx @@ -114,6 +114,11 @@ export default function Router() { element: , }, + { + path: 'corporates/:corporate_id/services', + element: , + }, + { path: 'corporates/:corporate_id/plans/create', element: , @@ -236,3 +241,5 @@ const Plans = Loadable(lazy(() => import('../pages/Corporates/Plan/Index'))); const DiagnosisExclusions = Loadable(lazy(() => import('../pages/Corporates/DiagnosisExclusion/Index'))); const MasterDiagnosis = Loadable(lazy(() => import('../pages/Master/Diagnosis/Index'))); + +const CorporateServices = Loadable(lazy(() => import('../pages/Corporates/Services/Index')));