From 20fa3fbc020e3ed783d4c75e7b10874e3ec9b098 Mon Sep 17 00:00:00 2001 From: ivan-sim Date: Tue, 31 Mar 2026 11:43:34 +0700 Subject: [PATCH] update Hide Approve dan Persetujuan --- .../Http/Controllers/Api/MemberController.php | 73 ++++++++++++++++--- .../dashboard/Components/DialogBenefit.tsx | 8 +- .../Components/DialogEditBenefit.tsx | 32 ++++---- .../src/sections/dashboard/DialogMember.tsx | 30 +++++--- 4 files changed, 101 insertions(+), 42 deletions(-) diff --git a/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php b/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php index 8992f346..83d72587 100755 --- a/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php @@ -10,6 +10,9 @@ use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Validator; use Modules\HospitalPortal\Helpers\ApiResponse; use Illuminate\Support\Facades\DB; +use App\Models\CorporateBenefit; +use App\Models\MemberPlan; +use App\Models\Plan; class MemberController extends Controller { @@ -134,26 +137,74 @@ class MemberController extends Controller $res_data['companies'] = $companies; - $corporateEmployeePremi = DB::table('corporate_employees') - ->leftJoin('corporates', 'corporates.id', '=', 'corporate_employees.corporate_id') - ->leftJoin('corporate_policies', 'corporate_policies.corporate_id', '=', 'corporates.id') - ->where('corporate_employees.status', 'ACTIVE') - ->where('corporates.active', 1) - ->where('corporate_policies.active', 1) - ->where('corporate_employees.member_id', $members->id) - ->value('corporate_policies.total_premi'); + $corporateEmployee = DB::table('corporate_employees') + ->leftJoin('corporates', 'corporates.id', '=', 'corporate_employees.corporate_id') + ->leftJoin('corporate_policies', 'corporate_policies.corporate_id', '=', 'corporates.id') + // ->where('corporate_employees.status', 'ACTIVE') + ->where('corporates.active', 1) + ->where('corporate_policies.active', 1) + ->where('corporate_employees.member_id', $members->id) + ->select( + 'corporate_policies.total_premi', + 'corporate_employees.corporate_id' + ) + ->first(); - $res_data['total_premi'] = $corporateEmployeePremi ?? 0; + $res_data['total_premi'] = $corporateEmployee ?? 0; $limitRules = DB::table('member_plans') ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') ->where('member_plans.member_id', $members->id) ->where('member_plans.status', 'active') ->where('plans.active', 1) - ->value('plans.limit_rules'); + ->value('plans.limit_rules'); $res_data['limit_rules'] = $limitRules ?? 0; - + + $planMember = MemberPlan::where('member_id', $members->id)->get('plan_id'); + + $planId = Plan::whereIn('id', $planMember)->where('service_code', 'OP')->first(); + $benefit = CorporateBenefit::with(['benefit', 'plan'])->where('plan_id', $planId->id)->get()->toArray(); + $benefitData = []; + if (count($benefit)){ + foreach($benefit as $data){ + $data['benefit']['plan_id'] = $data['plan_id']; + $data['benefit']['limit_amount'] = $data['limit_amount']; + $data['benefit']['family_plan'] = $planId->family_plan; + $data['benefit']['max_frequency_period'] = $data['max_frequency_period']; + $data['benefit']['limit_amount_plan'] = $data['plan']['limit_rules']; + $data['benefit']['family_plan_plans'] = $data['plan']['family_plan']; + array_push($benefitData, $data['benefit']); + } + } + $memberUsage = Helper::getUsageMember($corporateEmployee->corporate_id, $members->id, $benefitData);; + + $res_data['used_limit'] = json_decode($memberUsage); + + $usedLimit = json_decode($memberUsage, true); // jadi array + + $totalUsed = 0; + + if (is_array($usedLimit)) { + foreach ($usedLimit as $value) { + $totalUsed += (int) $value; + } + } + + $limitRules = (int) $limitRules; + + // hitung sisa + $remainingLimit = $limitRules - $totalUsed; + + // biar gak minus + if ($remainingLimit < 0) { + $remainingLimit = 0; + } + + // set ke response + $res_data['remaining_limit'] = $remainingLimit; + $res_data['total_used_limit'] = $totalUsed; + // specialities $specialities = DB::table('specialities') ->select( diff --git a/frontend/hospital-portal/src/sections/dashboard/Components/DialogBenefit.tsx b/frontend/hospital-portal/src/sections/dashboard/Components/DialogBenefit.tsx index b19297c3..460de048 100644 --- a/frontend/hospital-portal/src/sections/dashboard/Components/DialogBenefit.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/Components/DialogBenefit.tsx @@ -415,7 +415,7 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl - + @@ -440,7 +440,7 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl - + @@ -464,7 +464,7 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl - + @@ -484,7 +484,7 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl - + diff --git a/frontend/hospital-portal/src/sections/dashboard/Components/DialogEditBenefit.tsx b/frontend/hospital-portal/src/sections/dashboard/Components/DialogEditBenefit.tsx index 8af53a7e..372e753a 100644 --- a/frontend/hospital-portal/src/sections/dashboard/Components/DialogEditBenefit.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/Components/DialogEditBenefit.tsx @@ -26,7 +26,7 @@ type DialogDeleteType = { openDialog: boolean; setOpenDialog: any; onSubmit?: void; - data: BenefitConfigurationListType|undefined; + data: BenefitConfigurationListType|undefined; id: number|undefined; total: any } @@ -39,7 +39,7 @@ type BenefitSelected = { limit_amount: number, } -export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, onSubmit, total} : DialogDeleteType ) { +export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, onSubmit, total} : DialogDeleteType ) { const handleCloseDialog = () => { setOpenDialog(false); } @@ -79,7 +79,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, const amountApproved = parseFloat(watch('amount_approved')); const amountNotApproved = parseFloat(watch('amount_not_approved')); const excessPaid = parseFloat(watch('excess_paid')); - + // Hitung total baru const totalAmountIncurred = total.totalAmountIncurred - data?.amount_incurred + amountIncurred; const totalAmountApproved = total.totalAmountApproved - data?.amount_approved + amountApproved; @@ -104,8 +104,8 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, // Konversi nilai ke angka dengan aman let limitAmount = Number(benefitData.limit_amount) || 0; let limitAmountPlan = Number(benefitData.limit_amount_plan) || 0; - - if (limitAmountPlan != 999999999){ + + if (limitAmountPlan != 999999999){ let realTimeUsage = totalAll().totalAmountApproved; console.log(limitAmountPlan, 'test') if (limitAmountPlan < realTimeUsage) { @@ -162,11 +162,11 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, // // alert('Total Incurred tidak sama dengan Total Approve + Total Not Approve') // // setValue('amount_approved', data?.amount_approved) // } - + // Submit Form // ===================================== const submitHandler = async (data: BenefitConfigurationListType) => { - + const response = await postEditBenefit(id, data); if (response == true) { @@ -191,19 +191,19 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, setValue('keterangan', data?.keterangan) setValue('reason', data?.reason) }, [data]) - - + + const getContent = () => ( {/* */} - + {data?.benefit?.description} - + @@ -213,7 +213,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, - - + @@ -252,7 +252,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, - + @@ -276,7 +276,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, - + @@ -296,7 +296,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, - + diff --git a/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx b/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx index ac449934..91161033 100755 --- a/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx @@ -1,14 +1,14 @@ // mui import { styled } from '@mui/material/styles'; import { LoadingButton, TabPanel } from "@mui/lab"; -import { - Button, - Card, - Divider, - Grid, - LinearProgress, - linearProgressClasses, - Typography, +import { + Button, + Card, + Divider, + Grid, + LinearProgress, + linearProgressClasses, + Typography, Paper, Table, TableBody, @@ -34,7 +34,7 @@ import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight'; export default function DialogMember(member:any, handleSubmitSuccess:() => void) { const { localeData }: any = useContext(LanguageContext); const [currentTab, setCurrentTab] = useState('request'); - + // ---------------------------------------------------------------------- useEffect(() => { @@ -77,7 +77,7 @@ export default function DialogMember(member:any, handleSubmitSuccess:() => void) ); } - + const [openRows, setOpenRows] = useState({}); const handleRowToggle = (index:number) => { @@ -120,6 +120,14 @@ export default function DialogMember(member:any, handleSubmitSuccess:() => void) Limit Peserta { member?.limit_rules ? fCurrency(member?.limit_rules) : '-'} + + Limit Terpakai + { member?.total_used_limit ? fCurrency(member?.total_used_limit) : '-'} + + + Sisa Limit + { member?.remaining_limit ? fCurrency(member?.remaining_limit) : '-'} + NRIC {member?.members.nik ?? '-'} @@ -193,7 +201,7 @@ export default function DialogMember(member:any, handleSubmitSuccess:() => void) ))} - +