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')));