diff --git a/Modules/Internal/Http/Controllers/Api/BenefitController.php b/Modules/Internal/Http/Controllers/Api/BenefitController.php index f50ab213..0d7b6f36 100644 --- a/Modules/Internal/Http/Controllers/Api/BenefitController.php +++ b/Modules/Internal/Http/Controllers/Api/BenefitController.php @@ -18,7 +18,7 @@ class BenefitController extends Controller */ public function index(Request $request, $corporate_id) { - $benefits = MemberBenefit::query() + $benefits = Benefit::query() ->filter($request->all()) ->where('corporate_id', $corporate_id) ->paginate(0) @@ -98,7 +98,7 @@ class BenefitController extends Controller $reader = ReaderEntityFactory::createReaderFromFile(Storage::path('temp/'.$file_name)); $reader->open(Storage::path('temp/'.$file_name)); - $headers_map_to_table_fields = MemberBenefit::$doc_headers_to_field_map; + $headers_map_to_table_fields = Benefit::$doc_headers_to_field_map; $imported_benefit_data = 0; $failed_benefit_data = []; @@ -119,7 +119,7 @@ class BenefitController extends Controller // Create Directly $new_benefit_data['corporate_id'] = $corporate_id; try { - MemberBenefit::updateOrCreate([ + Benefit::updateOrCreate([ 'corporate_id' => $corporate_id, 'code' => $new_benefit_data['code'] ], $new_benefit_data); diff --git a/Modules/Internal/Http/Controllers/Api/CorporateBenefitController.php b/Modules/Internal/Http/Controllers/Api/CorporateBenefitController.php index fe07e0da..b4d2f592 100644 --- a/Modules/Internal/Http/Controllers/Api/CorporateBenefitController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateBenefitController.php @@ -3,9 +3,11 @@ namespace Modules\Internal\Http\Controllers\Api; use App\Models\Benefit; +use App\Models\CorporateBenefit; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; +use Illuminate\Validation\Rule; class CorporateBenefitController extends Controller { @@ -15,7 +17,7 @@ class CorporateBenefitController extends Controller */ public function index(Request $request, $corporate_id) { - $benefits = Benefit::query() + $benefits = CorporateBenefit::query() ->filter($request->all()) ->where('corporate_id', $corporate_id) ->paginate(0) @@ -38,9 +40,23 @@ class CorporateBenefitController 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_benefits')->where('corporate_id', $corporate_id) + ], + 'name' => 'required' + ]); + + $newCorporatePlan = CorporateBenefit::create([ + 'corporate_id' => $corporate_id, + 'code' => $request->code, + 'name' => $request->name, + ]); + + return $newCorporatePlan; } /** @@ -58,9 +74,11 @@ class CorporateBenefitController extends Controller * @param int $id * @return Renderable */ - public function edit($id) + public function edit($corporate_id, $id) { - return view('internal::edit'); + $benefit = CorporateBenefit::findOrFail($id); + + return $benefit; } /** @@ -69,9 +87,25 @@ class CorporateBenefitController extends Controller * @param int $id * @return Renderable */ - public function update(Request $request, $id) + public function update(Request $request, $corporate_id, $id) { - // + + $corporateBenefit = CorporateBenefit::findOrFail($id); + $request->validate([ + 'code' => [ + 'required', + Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporateBenefit->id) + ], + 'name' => 'required' + ]); + + $corporateBenefit->fill([ + 'code' => $request->code, + 'name' => $request->name, + 'active' => $request->active, + ])->save(); + + return $corporateBenefit; } /** diff --git a/Modules/Internal/Http/Controllers/Api/CorporatePlanController.php b/Modules/Internal/Http/Controllers/Api/CorporatePlanController.php index 8a8fc56b..fcc23c3e 100644 --- a/Modules/Internal/Http/Controllers/Api/CorporatePlanController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporatePlanController.php @@ -86,9 +86,24 @@ class CorporatePlanController extends Controller * @param int $id * @return Renderable */ - public function update(Request $request, $id) + public function update(Request $request, $corporate_id, $id) { - // + $corporatePlan = CorporatePlan::findOrFail($id); + $request->validate([ + 'code' => [ + 'required', + Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id) + ], + 'name' => 'required' + ]); + + $corporatePlan->fill([ + 'code' => $request->code, + 'name' => $request->name, + 'active' => $request->active, + ])->save(); + + return $corporatePlan; } /** diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index 3dc90efa..c34f691c 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -35,16 +35,21 @@ Route::prefix('internal')->group(function () { }); Route::resource('corporates', CorporateController::class); - Route::get('corporates/{corporate_id}/plans', [PlanController::class, 'index']); - Route::post('corporates/{corporate_id}/plans/import', [PlanController::class, 'planImport']); - - Route::get('corporates/{corporate_id}/benefits', [BenefitController::class, 'index']); - 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::put('corporates/{corporate_id}/corporate-plans/{id}', [CorporatePlanController::class, 'update']); + + Route::get('corporates/{corporate_id}/plans', [PlanController::class, 'index']); + Route::post('corporates/{corporate_id}/plans/import', [PlanController::class, 'planImport']); Route::get('corporates/{corporate_id}/corporate-benefits', [CorporateBenefitController::class, 'index']); + Route::post('corporates/{corporate_id}/corporate-benefits', [CorporateBenefitController::class, 'store']); + Route::get('corporates/{corporate_id}/corporate-benefits/{id}/edit', [CorporateBenefitController::class, 'edit']); + Route::put('corporates/{corporate_id}/corporate-benefits/{id}', [CorporateBenefitController::class, 'update']); + + Route::get('corporates/{corporate_id}/benefits', [BenefitController::class, 'index']); + Route::post('corporates/{corporate_id}/benefits/import', [BenefitController::class, 'memberBenefitImport']); }); }); diff --git a/app/Models/Benefit.php b/app/Models/Benefit.php index a103d1ad..fbb08e82 100644 --- a/app/Models/Benefit.php +++ b/app/Models/Benefit.php @@ -10,19 +10,155 @@ class Benefit extends Model use HasFactory; protected $fillable = [ - "corporate_id", - "code", - "name", - "description" + 'corporate_id', + 'service_code', + 'plan_code', + 'benefit_code', + 'code', + 'description', + 'budget', + 'budget_conditions', + 'budget_code', + 'primary_benefit_code', + 'benefit_mode', + 'room_class_coverage', + 'max_bed_coverage', + 'tolerance_parameter', + 'max_room_class', + 'limit_amount', + 'area_limit', + 'shared_benefit', + 'shared_benefit_type', + 'msc', + 'genders', + 'min_age', + 'max_age', + 'max_frequency_period', + 'daily_frequency', + 'weekly_frequency', + 'monthly_frequency', + 'yearly_frequency', + 'custom_frequency_days', + 'custom_duration_value', + 'allowed_transaction_types', + 'high_plan_factor', + 'pre_post_treatment', + 'pre_treatment_days', + 'post_treatment_days', + 'layer_type_1', + 'layer_value_1', + 'layer_type_2', + 'layer_value_2', + 'cashless_percentage', + 'reimbursement_percentage', + 'digital_percentage', + 'co_share_m_percentage', + 'co_share_s_percentage', + 'co_share_c_percentage', + 'cashless_deductible', + 'reimbursement_deductible', + 'digital_deductible', + 'co_share_m_deductible', + 'co_share_s_deductible', + 'co_share_c_deductible', + 'prorate_type', + 'prorate_lookup', + 'max_days_for_disability', + 'max_period_for_disability', + 'currency', + 'show_benefit_item', + 'show_benefit_value', ]; + public static $doc_headers_to_field_map = [ + "Service" => 'service_code', + "Plan" => 'plan_code', + "Benefit Code" => 'benefit_code', + "Customer Benefit Code" => 'code', + "Detail Benefit" => 'description', + "ASO/Budget" => 'budget', + "Budget Condition" => 'budget_conditions', + "Budget Code" => 'budget_code', + "Primary benefit" => 'primary_benefit_code', + "Benefit Mode" => 'benefit_mode', + "Room Class" => 'room_class_coverage', + "Max Bed" => 'max_bed_coverage', + "Tolerance Paramater" => 'tolerance_parameter', + "Max. Room Class" => 'max_room_class', + "Limit Value" => 'limit_amount', + "Area" => 'area_limit', + "Shared Benefit With" => 'shared_benefit', + "Shared Benefit Type" => 'shared_benefit_type', + "MSC" => 'msc', + "Gender" => 'genders', + "Min Age" => 'min_age', + "Max Age" => 'max_age', + "Freq. Period" => 'max_frequency_period', + "Daily Frequency" => 'daily_frequency', + "Weekly Frequency" => 'weekly_frequency', + "Monthly Frequency" => 'monthly_frequency', + "Yearly Frequency" => 'yearly_frequency', + "Custom Duration" => 'custom_frequency_days', + "Custom Duration Value" => 'custom_duration_value', + "Cashless, Reimbursement" => 'allowed_transaction_types', + "High Plan Factor" => 'high_plan_factor', + "Pre Post Treatment" => 'pre_post_treatment', + "Pre Treatment" => 'pre_treatment_days', + "Post Treatment" => 'post_treatment_days', + "Layer Type 1" => 'layer_type_1', + "Layer Value 1" => 'layer_value_1', + "Layer Type 2" => 'layer_type_2', + "Layer Value 2" => 'layer_value_2', + "Cashless (%)" => 'cashless_percentage', + "Reimburse (%)" => 'reimbursement_percentage', + "Digital (%)" => 'digital_percentage', + "CoShareM (%)" => 'co_share_m_percentage', + "CoShareS (%)" => 'co_share_s_percentage', + "CoShareC (%)" => 'co_share_c_percentage', + "Cashless Deductible" => 'cashless_deductible', + "Reimbursement Deductible" => 'reimbursement_deductible', + "Digital Deductible" => 'digital_deductible', + "DeductibleM" => 'co_share_m_deductible', + "DeductibleS" => 'co_share_s_deductible', + "DeductibleC" => 'co_share_c_deductible', + "Prorate Type" => 'prorate_type', + "Prorate Lookup" => 'prorate_lookup', + "Max Days for Disability" => 'max_days_for_disability', + "Max Periode of Disability" => 'max_period_for_disability', + "Currency" => 'currency', + "Show Benefit Item" => 'show_benefit_item', + "Show Benefit Value" => 'show_benefit_value', + ]; + + public function setPrePostTreatmentAttribute($value) + { + return empty($value) ? null : ($value == 'Y'); + } + + public function getPrePostTreatmentAttribute($value) + { + return empty($value) ? null : ($value ? 'Y' : 'N'); + } + public function scopeFilter($query, array $filters) { $query->when($filters['search'] ?? false, function ($query, $search) { return $query - ->where('code', 'like', "%" . $search . "%") - ->orWhere('name', 'like', "%" . $search . "%") - ->orWhere('description', 'like', "%" . $search . "%"); + ->where('service_code', 'like', "%" . $search . "%") + ->orWhere('code', 'like', "%" . $search . "%") + ->orWhereHas('plan', function ($query) use ($search) { + $query->where('code', 'like', "%" . $search . "%"); + }); }); } + + public function benefit() + { + return $this->belongsTo(Benefit::class, 'benefit_code', 'code'); + } + + public function plan() + { + return $this->belongsTo(Plan::class, 'plan_code', 'code'); + } } diff --git a/app/Models/CorporateBenefit.php b/app/Models/CorporateBenefit.php index 4e5e42d0..c96d38c5 100644 --- a/app/Models/CorporateBenefit.php +++ b/app/Models/CorporateBenefit.php @@ -8,4 +8,26 @@ use Illuminate\Database\Eloquent\Model; class CorporateBenefit extends Model { use HasFactory; + + protected $fillable = [ + 'corporate_id', + 'code', + 'name', + 'description', + 'active', + ]; + + public function corporate() + { + return $this->belongsTo(Corporate::class); + } + + public function scopeFilter($query, array $filters) + { + $query->when($filters['search'] ?? false, function ($query, $search) { + return $query + ->where('code', 'like', "%" . $search . "%") + ->orWhere('name', 'like', "%" . $search . "%"); + }); + } } diff --git a/app/Models/MemberBenefit.php b/app/Models/MemberBenefit.php deleted file mode 100644 index bcab54ff..00000000 --- a/app/Models/MemberBenefit.php +++ /dev/null @@ -1,164 +0,0 @@ - 'service_code', - "Plan" => 'plan_code', - "Benefit Code" => 'benefit_code', - "Customer Benefit Code" => 'code', - "Detail Benefit" => 'description', - "ASO/Budget" => 'budget', - "Budget Condition" => 'budget_conditions', - "Budget Code" => 'budget_code', - "Primary benefit" => 'primary_benefit_code', - "Benefit Mode" => 'benefit_mode', - "Room Class" => 'room_class_coverage', - "Max Bed" => 'max_bed_coverage', - "Tolerance Paramater" => 'tolerance_parameter', - "Max. Room Class" => 'max_room_class', - "Limit Value" => 'limit_amount', - "Area" => 'area_limit', - "Shared Benefit With" => 'shared_benefit', - "Shared Benefit Type" => 'shared_benefit_type', - "MSC" => 'msc', - "Gender" => 'genders', - "Min Age" => 'min_age', - "Max Age" => 'max_age', - "Freq. Period" => 'max_frequency_period', - "Daily Frequency" => 'daily_frequency', - "Weekly Frequency" => 'weekly_frequency', - "Monthly Frequency" => 'monthly_frequency', - "Yearly Frequency" => 'yearly_frequency', - "Custom Duration" => 'custom_frequency_days', - "Custom Duration Value" => 'custom_duration_value', - "Cashless, Reimbursement" => 'allowed_transaction_types', - "High Plan Factor" => 'high_plan_factor', - "Pre Post Treatment" => 'pre_post_treatment', - "Pre Treatment" => 'pre_treatment_days', - "Post Treatment" => 'post_treatment_days', - "Layer Type 1" => 'layer_type_1', - "Layer Value 1" => 'layer_value_1', - "Layer Type 2" => 'layer_type_2', - "Layer Value 2" => 'layer_value_2', - "Cashless (%)" => 'cashless_percentage', - "Reimburse (%)" => 'reimbursement_percentage', - "Digital (%)" => 'digital_percentage', - "CoShareM (%)" => 'co_share_m_percentage', - "CoShareS (%)" => 'co_share_s_percentage', - "CoShareC (%)" => 'co_share_c_percentage', - "Cashless Deductible" => 'cashless_deductible', - "Reimbursement Deductible" => 'reimbursement_deductible', - "Digital Deductible" => 'digital_deductible', - "DeductibleM" => 'co_share_m_deductible', - "DeductibleS" => 'co_share_s_deductible', - "DeductibleC" => 'co_share_c_deductible', - "Prorate Type" => 'prorate_type', - "Prorate Lookup" => 'prorate_lookup', - "Max Days for Disability" => 'max_days_for_disability', - "Max Periode of Disability" => 'max_period_for_disability', - "Currency" => 'currency', - "Show Benefit Item" => 'show_benefit_item', - "Show Benefit Value" => 'show_benefit_value', - ]; - - public function setPrePostTreatmentAttribute($value) - { - return empty($value) ? null : ($value == 'Y'); - } - - public function getPrePostTreatmentAttribute($value) - { - return empty($value) ? null : ($value ? 'Y' : 'N'); - } - - public function scopeFilter($query, array $filters) - { - $query->when($filters['search'] ?? false, function ($query, $search) { - return $query - ->where('service_code', 'like', "%" . $search . "%") - ->orWhere('code', 'like', "%" . $search . "%") - ->orWhereHas('plan', function ($query) use ($search) { - $query->where('code', 'like', "%" . $search . "%"); - }); - }); - } - - public function benefit() - { - return $this->belongsTo(Benefit::class, 'benefit_code', 'code'); - } - - public function plan() - { - return $this->belongsTo(Plan::class, 'plan_code', 'code'); - } -} diff --git a/database/migrations/2022_07_12_025440_create_corporate_benefits_table.php b/database/migrations/2022_07_12_025440_create_corporate_benefits_table.php index 8e732c69..80809681 100644 --- a/database/migrations/2022_07_12_025440_create_corporate_benefits_table.php +++ b/database/migrations/2022_07_12_025440_create_corporate_benefits_table.php @@ -19,6 +19,7 @@ return new class extends Migration $table->string('code')->index(); $table->string('name')->nullable(); $table->text('description')->nullable(); + $table->boolean('active')->default(true); $table->timestamps(); $table->softDeletes(); diff --git a/frontend/dashboard/src/@types/corporates.ts b/frontend/dashboard/src/@types/corporates.ts index fab0b11d..5279366b 100644 --- a/frontend/dashboard/src/@types/corporates.ts +++ b/frontend/dashboard/src/@types/corporates.ts @@ -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; diff --git a/frontend/dashboard/src/pages/Corporates/Benefit/Index.tsx b/frontend/dashboard/src/pages/Corporates/Benefit/Index.tsx index 196d4266..67f09c84 100644 --- a/frontend/dashboard/src/pages/Corporates/Benefit/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/Benefit/Index.tsx @@ -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', }, ]} /> diff --git a/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx b/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx index b7ff4f38..024313ed 100644 --- a/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Benefit/List.tsx @@ -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); diff --git a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/CreateUpdate.tsx b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/CreateUpdate.tsx new file mode 100644 index 00000000..84e7d8bb --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/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 [ currentCorporateBenefit, setCurrentCorporateBenefit ] = useState(); + 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 ( + + + + + + ); +} diff --git a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Form.tsx b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Form.tsx new file mode 100644 index 00000000..6f1c583a --- /dev/null +++ b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Form.tsx @@ -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 ( + + + + + + + Corporate Benefit Detail + + + + + + + {isEdit ? 'Update' : 'Create'} + + + + + + + + + + + + + + ); +} diff --git a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Index.tsx b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Index.tsx index 7fa19c6c..abcd87cc 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/Index.tsx @@ -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', }, ]} /> diff --git a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/List.tsx b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/List.tsx index 74d5601e..857e7d84 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporateBenefit/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporateBenefit/List.tsx @@ -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() { {row.name} - + {/* COLLAPSIBLE ROW */} @@ -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() { - + + + diff --git a/frontend/dashboard/src/pages/Corporates/CorporatePlan/Form.tsx b/frontend/dashboard/src/pages/Corporates/CorporatePlan/Form.tsx index a82d55d3..ce294d42 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporatePlan/Form.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporatePlan/Form.tsx @@ -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' }); + }); } }; diff --git a/frontend/dashboard/src/pages/Corporates/CorporatePlan/List.tsx b/frontend/dashboard/src/pages/Corporates/CorporatePlan/List.tsx index 2989a58c..77cc4e34 100644 --- a/frontend/dashboard/src/pages/Corporates/CorporatePlan/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/CorporatePlan/List.tsx @@ -170,14 +170,15 @@ export default function PlanList() { - + + diff --git a/frontend/dashboard/src/pages/Corporates/Plan/Index.tsx b/frontend/dashboard/src/pages/Corporates/Plan/Index.tsx index 2724ca1a..f8d8b78c 100644 --- a/frontend/dashboard/src/pages/Corporates/Plan/Index.tsx +++ b/frontend/dashboard/src/pages/Corporates/Plan/Index.tsx @@ -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', }, ]} /> diff --git a/frontend/dashboard/src/pages/Corporates/Plan/List.tsx b/frontend/dashboard/src/pages/Corporates/Plan/List.tsx index d4900438..1428332a 100644 --- a/frontend/dashboard/src/pages/Corporates/Plan/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Plan/List.tsx @@ -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); diff --git a/frontend/dashboard/src/routes/index.tsx b/frontend/dashboard/src/routes/index.tsx index 0ca87586..7beffe3f 100644 --- a/frontend/dashboard/src/routes/index.tsx +++ b/frontend/dashboard/src/routes/index.tsx @@ -135,10 +135,18 @@ export default function Router() { path: 'corporates/:corporate_id/benefits', element: , }, + { + path: 'corporates/:corporate_id/corporate-benefits/create', + element: , + }, { path: 'corporates/:corporate_id/corporate-benefits', element: , }, + { + path: 'corporates/:corporate_id/corporate-benefits/:id/edit', + element: , + }, ] }, // { @@ -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')));