diff --git a/Modules/Internal/Transformers/RequestLogShowResource.php b/Modules/Internal/Transformers/RequestLogShowResource.php index aab394a3..ca22d642 100644 --- a/Modules/Internal/Transformers/RequestLogShowResource.php +++ b/Modules/Internal/Transformers/RequestLogShowResource.php @@ -34,7 +34,7 @@ class RequestLogShowResource extends JsonResource $planMember = MemberPlan::where('member_id', $member_id)->get('plan_id'); $planId = Plan::whereIn('id', $planMember)->where('service_code', $requestLog['service_code'])->first(); - $benefit = CorporateBenefit::with('benefit')->where('plan_id', $planId->id)->get()->toArray(); + $benefit = CorporateBenefit::with(['benefit', 'plan'])->where('plan_id', $planId->id)->get()->toArray(); $benefitDetailLog = RequestLogBenefit::with('benefit')->where('request_log_id', $requestLog['id'])->get()->toArray(); $medicineDetailLog = RequestLogMedicine::where('request_log_id', $requestLog['id'])->get()->toArray(); $provider = Organization::where('id', $requestLog['organization_id'])->first(); @@ -66,8 +66,12 @@ class RequestLogShowResource extends JsonResource $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']); } } @@ -111,8 +115,9 @@ class RequestLogShowResource extends JsonResource ->select('code', 'name') ->get(); } + $memberUsage = Helper::getUsageMember($corporateId, $requestLog['member']['id'], $benefitData); - $memberLimit = Helper::getLimitMember($corporateId, $requestLog['member']['id'], $benefitData); + // dd($memberLimitUsage); $data = [ 'id' => $requestLog['id'], 'code' => $requestLog['code'], @@ -128,7 +133,7 @@ class RequestLogShowResource extends JsonResource 'gender' => $requestLog['member']['gender'], 'marital_status' => $requestLog['member']['status_marital'], 'member_type' => Helper::memberType($requestLog['member']['record_type']), - 'member_usage' => json_decode($memberLimit), + 'member_usage_benefit' => json_decode($memberUsage), 'principal_id' => $requestLog['member']['principal_id'] ? $requestLog['member']['principal_id'] : '-', 'principal_name' => $requestLog['member']['principal_id'] ? Helper::principalName($requestLog['member']['principal_id']) : '-', 'relation_with_principal' => Helper::relationWithPrincipal($requestLog['member']['relation_with_principal']), diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index c2bb21a3..7a80148c 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -536,32 +536,106 @@ class Helper } } - public static function getLimitMember($corporateId, $id, $benefitData) { + public static function getUsageMember($corporateId, $id, $benefitData) { // Menghitung jumlah total approved dan mengkategorikan berdasarkan benefit_id $amountApprovedByBenefit = []; foreach($benefitData as $benefit) { - if ($benefit['family_plan'] == 'S' || $benefit['family_plan'] == 'F'){ // Menghitung usage per family - $memberFamilys = Helper::getMemberFamily($id); - $usageLogs = RequestLogBenefit::query() - ->whereHas('requestLog', function ($query) use ($benefit, $memberFamilys) { - $query->where('benefit_id', $benefit['id']) - ->whereIn('member_id', $memberFamilys); - }) - ->sum('amount_approved'); - - // Mengkategorikan sum berdasarkan benefit_id - $amountApprovedByBenefit[$benefit['id']] = $usageLogs; - } else { // Menghitung usage permember - $usageLog = RequestLogBenefit::query() - ->whereHas('requestLog', function ($query) use ($benefit, $id) { - $query->where('benefit_id', $benefit['id']) - ->where('member_id', $id); - }) - ->sum('amount_approved'); - - // Mengkategorikan sum berdasarkan benefit_id - $amountApprovedByBenefit[$benefit['id']] = $usageLog; - } + if ($benefit['limit_amount'] != 999999999) { + if ($benefit['family_plan'] == 'S' || $benefit['family_plan'] == 'F'){ // Menghitung usage per family + $memberFamilys = Helper::getMemberFamily($id); + $usageLogs = 0; + + $today = date('Y-m-d'); + $periods = [ + 0 => [ + 'start' => '2024-01-05', + 'end' => '2025-01-05' + ], + 1 => [ + 'start' => $today, + 'end' => $today + ] + // Tambahkan kondisi lainnya jika diperlukan + ]; + + if (array_key_exists($benefit['max_frequency_period'], $periods)) { + $usageLogs = RequestLogBenefit::query() + ->whereHas('requestLog', function ($query) use ($benefit, $memberFamilys, $periods) { + $period = $periods[$benefit['max_frequency_period']]; + $query->where('benefit_id', $benefit['id']) + // ->where('submission_date', '>=', $period['start']) + // ->where('submission_date', '<=', $period['end']) + ->whereIn('member_id', $memberFamilys); + }) + ->sum('amount_approved'); + } + // Mengkategorikan sum berdasarkan benefit_id + $amountApprovedByBenefit[$benefit['id']] = $usageLogs; + } else { // Menghitung usage permember + $usageLog = RequestLogBenefit::query() + ->whereHas('requestLog', function ($query) use ($benefit, $id) { + $query->where('benefit_id', $benefit['id']) + ->where('member_id', $id); + }) + ->sum('amount_approved'); + + // Mengkategorikan sum berdasarkan benefit_id + $amountApprovedByBenefit[$benefit['id']] = $usageLog; + } + } + } + + return json_encode($amountApprovedByBenefit); + + } + + public static function getLimitMemberService($corporateId, $id, $benefitData) { + // Menghitung jumlah total approved dan mengkategorikan berdasarkan benefit_id + $amountApprovedByBenefit = []; + foreach($benefitData as $benefit) { + if ($benefit['limit_amount'] != 999999999) { + if ($benefit['family_plan'] == 'S' || $benefit['family_plan'] == 'F'){ // Menghitung usage per family + $memberFamilys = Helper::getMemberFamily($id); + $usageLogs = 0; + + $today = date('Y-m-d'); + $periods = [ + 0 => [ + 'start' => '2024-01-05', + 'end' => '2025-01-05' + ], + 1 => [ + 'start' => $today, + 'end' => $today + ] + // Tambahkan kondisi lainnya jika diperlukan + ]; + + if (array_key_exists($benefit['max_frequency_period'], $periods)) { + $usageLogs = RequestLogBenefit::query() + ->whereHas('requestLog', function ($query) use ($benefit, $memberFamilys, $periods) { + $period = $periods[$benefit['max_frequency_period']]; + $query->where('benefit_id', $benefit['id']) + // ->where('submission_date', '>=', $period['start']) + // ->where('submission_date', '<=', $period['end']) + ->whereIn('member_id', $memberFamilys); + }) + ->sum('amount_approved'); + } + // Mengkategorikan sum berdasarkan benefit_id + $amountApprovedByBenefit[$benefit['id']] = $usageLogs; + } else { // Menghitung usage permember + $usageLog = RequestLogBenefit::query() + ->whereHas('requestLog', function ($query) use ($benefit, $id) { + $query->where('benefit_id', $benefit['id']) + ->where('member_id', $id); + }) + ->sum('amount_approved'); + + // Mengkategorikan sum berdasarkan benefit_id + $amountApprovedByBenefit[$benefit['id']] = $usageLog; + } + } } return json_encode($amountApprovedByBenefit); diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogBenefit.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogBenefit.tsx index c4d527a2..48c027b7 100644 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogBenefit.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogBenefit.tsx @@ -41,7 +41,10 @@ type BenefitSelected = { description: string, benefit_id: number, family_plan: string, + family_plan_plans: string, limit_amount: number, + limit_amount_plan: number, + max_frequency_period: number, } @@ -189,30 +192,52 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl } const handleOnChangeNominal = (key) => { - if (benefitSelected[key].family_plan == 'S' || benefitSelected[key].family_plan == 'F'){ - if (requestLog?.member_usage && benefitSelected[key] && benefitData[key]) { - // Konversi nilai ke angka dengan aman - let memberUsage = Number(requestLog.member_usage[benefitSelected[key].id]) || 0; - let amountApproved = Number(benefitData[key].amount_approved) || 0; + if (requestLog?.member_usage_benefit && benefitSelected[key] && benefitData[key]) { let limitAmount = Number(benefitSelected[key].limit_amount) || 0; - - // Hitung penggunaan waktu nyata - let realTimeUsage = memberUsage + amountApproved; - - // Periksa apakah limitAmount lebih besar dari realTimeUsage - if (limitAmount < realTimeUsage) { - setError(`benefit_data.${key}.amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmount) } , silakan isikan di Amount Excess` }); - } else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) { - setError(`benefit_data.${key}.amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' }); + let limitAmountPlan = Number(benefitSelected[key].limit_amount_plan) || 0; + // Periksa apakah limitAmount Benefit lebih besar dari realTimeUsage + if (limitAmountPlan != 999999999){ + let realTimeUsage = 0; + for (let key in requestLog?.member_usage_benefit) { + if (requestLog?.member_usage_benefit.hasOwnProperty(key)) { + realTimeUsage += requestLog?.member_usage_benefit[key]; + } + } + let amountApproved = Number(benefitData[key].amount_approved) || 0; + // Hitung penggunaan waktu nyata + realTimeUsage += amountApproved; + if (limitAmountPlan < realTimeUsage) { + setError(`benefit_data.${key}.amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmountPlan) } , silakan isikan di Amount Excess` }); + } else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) { + setError(`benefit_data.${key}.amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' }); + } else { + clearErrors(`benefit_data.${key}.amount_approved`); + } + } else if (limitAmount != 999999999) { // Periksa apakah limitAmount Benefit lebih besar dari realTimeUsage + // Konversi nilai ke angka dengan aman + let memberUsage = Number(requestLog.member_usage_benefit[benefitSelected[key].id]) || 0; + let amountApproved = Number(benefitData[key].amount_approved) || 0; + // Hitung penggunaan waktu nyata + let realTimeUsage = memberUsage + amountApproved; + + if (limitAmount < realTimeUsage) { + setError(`benefit_data.${key}.amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmount) } , silakan isikan di Amount Excess` }); + } else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) { + setError(`benefit_data.${key}.amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' }); + } else { + clearErrors(`benefit_data.${key}.amount_approved`); + } } else { - clearErrors(`benefit_data.${key}.amount_approved`); + if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) { + setError(`benefit_data.${key}.amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' }); + } else { + clearErrors(`benefit_data.${key}.amount_approved`); + } } } - } else { if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){ - // setValue(`benefit_data.${key}.amount_approved`, 0); setError(`benefit_data.${key}.amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'}); } else { clearErrors(`benefit_data.${key}.amount_approved`); @@ -220,6 +245,13 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl } } + const handleOnChangeNotApprove = (key, value) => { + setValue(`benefit_data.${key}.excess_paid`, value); + if (totalAll().totalAmountApproved + totalAll().totalAmountNotApproved === totalAll().totalAmountIncurred) { + clearErrors(`benefit_data.${key}.amount_approved`); + } + }; + // Submit Form // ===================================== const submitHandler = async (data: BenefitConfigurationListType) => { @@ -363,6 +395,10 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl name={`benefit_data.${index}.amount_not_approved`} placeholder='Amount Not Approved' required + onChange={(event) => { + setValue(`benefit_data.${index}.amount_not_approved`, event.target.value) + handleOnChangeNotApprove(index, event.target.value)} + } /> diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditBenefit.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditBenefit.tsx index deb87abd..8af53a7e 100644 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditBenefit.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditBenefit.tsx @@ -102,25 +102,42 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, let benefitData = findItemById(data?.benefit_id) if (benefitData.family_plan == 'S' || benefitData.family_plan == 'F'){ // Konversi nilai ke angka dengan aman - let memberUsage = Number(total.totalLimit[benefitData.id]) || 0; - let amountApproved = Number(parseFloat(watch('amount_approved'))) || 0; let limitAmount = Number(benefitData.limit_amount) || 0; - // Hitung penggunaan waktu nyata - let realTimeUsage = memberUsage + amountApproved; - console.log(limitAmount, realTimeUsage) - // Periksa apakah limitAmount lebih besar dari realTimeUsage - if (limitAmount < realTimeUsage) { - setError(`amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmount) } , silakan isikan di Amount Excess` }); - } else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){ - // setValue(`benefit_data.${key}.amount_approved`, 0); - setError(`amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'}); + let limitAmountPlan = Number(benefitData.limit_amount_plan) || 0; + + if (limitAmountPlan != 999999999){ + let realTimeUsage = totalAll().totalAmountApproved; + console.log(limitAmountPlan, 'test') + if (limitAmountPlan < realTimeUsage) { + setError(`amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmountPlan) } , silakan isikan di Amount Excess` }); + } else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) { + setError(`amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' }); + } else { + clearErrors(`amount_approved`); + } + } else if (limitAmount != 999999999) { + let memberUsage = Number(total.totalLimit[benefitData.id]) || 0; + let amountApproved = Number(parseFloat(watch('amount_approved'))) || 0; + // Hitung penggunaan waktu nyata + let realTimeUsage = memberUsage + amountApproved; + // Periksa apakah limitAmount lebih besar dari realTimeUsage + if (limitAmount < realTimeUsage) { + setError(`amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmount) } , silakan isikan di Amount Excess` }); + } else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){ + // setValue(`benefit_data.${key}.amount_approved`, 0); + setError(`amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'}); + } else { + clearErrors(`amount_approved`); + } } else { - clearErrors(`amount_approved`); + if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) { + setError(`amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' }); + } else { + clearErrors(`amount_approved`); + } } - } else { if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){ - // setValue(`benefit_data.${key}.amount_approved`, 0); setError(`amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'}); } else { clearErrors(`amount_approved`); @@ -128,6 +145,19 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, } } + const handleOnChangeNotApprove = (key, value) => { + let amountApproved = Number(parseFloat(watch('amount_approved'))) || 0; + let amountNotApproved = Number(parseFloat(watch('amount_not_approved'))) || 0; + let amountIncurred = Number(parseFloat(watch('amount_incurred'))) || 0; + setValue(`excess_paid`, value); + console.log(amountApproved + amountNotApproved, amountIncurred, 'test') + if ((amountApproved + amountNotApproved) !== amountIncurred) { + setError(`amount_not_approved`, {message: 'Amount Not Approve tidak sama dengan total Amount Incurred'}); + } else { + clearErrors(`amount_not_approved`); + } + }; + // if (totalAmountIncurred !== (totalAmountApproved+totalAmountNotApproved)){ // // alert('Total Incurred tidak sama dengan Total Approve + Total Not Approve') // // setValue('amount_approved', data?.amount_approved) @@ -237,6 +267,10 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, name={`amount_not_approved`} placeholder='Amount Not Approved' required + onChange={(event) => { + setValue(`amount_not_approved`, event.target.value) + handleOnChangeNotApprove(id, event.target.value)} + } /> diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx index c736f907..2f3e0cd9 100644 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx @@ -140,7 +140,7 @@ export default function Detail() { totalAmountApproved : totalAmountApprove, totalAmountNotApproved : totalAmountNotApprove, totalExcessPaid : totalExcessPaid, - totalLimit : requestLog?.member_usage, + totalLimit : requestLog?.member_usage_benefit, benefit : requestLog?.benefit, } // Handle Delete File LOG diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx index 74c027f7..4e245e17 100644 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx @@ -60,7 +60,7 @@ export type DetailFinalLogType = { exclusion : Exclusion[], medicine : Medicine[], files : file[], - member_usage : number + member_usage_benefit : number } export type Diagnosis = {