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/dashboard/.env.development b/frontend/dashboard/.env.development index 0ceb2721..f210d357 100644 --- a/frontend/dashboard/.env.development +++ b/frontend/dashboard/.env.development @@ -5,4 +5,6 @@ PORT=8000 REACT_APP_HOST_API_URL="http://lms.test" # VITE_API_URL="https://aso-api.linksehat.dev/api/internal" -VITE_API_URL="https://primecenter-api.linksehat.com/api/internal" +# VITE_API_URL="https://primecenter-api.linksehat.com/api/internal" +VITE_API_URL="http://localhost:8000/api/internal" + diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx index f6af3b8b..821e9c3d 100644 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx @@ -86,6 +86,77 @@ import { format } from 'date-fns'; export default function Detail() { + //dari hospital portal + const [dischargeDate, setDischargeDate] = useState(format(new Date(), "yyyy MMM d HH:mm:ss")); + const [serviceOptions, setServiceOptions] = useState([ + { value: '-', label: '-' } +]); +const [specialisOptions, setSpecialisOptions] = useState([ + { value: '-', label: '-' } +]); +useEffect(() => { + axios.get('service-member/'+1) + .then((response) => { + setServiceOptions(response.data); + }).catch((error) => { + console.error('Error fetching ICD options:', error); + }); + + axios.get('specialis') + .then((response) => { + setSpecialisOptions(response.data); + }).catch((error) => { + console.error('Error fetching ICD options:', error); + }); + + }, []); +const [serviceCode, setServiceCode] = useState(""); +const [idSpecialities, setIdSpecialities] = useState(""); +const [inputDppj, setInputDppj] = useState(""); +function submitRequestFinalLog() { + if(dischargeDate == '') + { + enqueueSnackbar('Tanggal Keluar', { variant: 'warning' }); + return false; + } + //cek spesialis + if(!idSpecialities) + { + enqueueSnackbar('Spesialis', { variant: 'warning' }); + return false; + } + //cek dpjp + if(!inputDppj) + { + enqueueSnackbar('DPPJ', { variant: 'warning' }); + return false; + } + setSubmitLoading(true); + const formData = makeFormData({ + // request_logs_id: member.id, + // result_files: fileHasilPenunjangs, + // diagnosa_files: fileDiagnosas, + // kondisi_files: fileKondisis, + discharge_date: fPostFormat(dischargeDate, 'yyyy-MM-dd HH:mm:ss'), + service_code: serviceCode, + spescialis_id: idSpecialities, + dppj: inputDppj, + }); + axios + .post('/request-final-log', formData) + .then((response) => { + enqueueSnackbar(response.data.meta.message ?? 'Berhasil membuat data', { variant: 'success' }); + // handleSubmitSuccess(); + // onClose({ someData: 'example data' }, getData); + }) + .catch(({ response }) => { + enqueueSnackbar(response.data.meta.message ?? 'Something Went Wrong', { variant: 'error' }); + }) + .then(() => { + setSubmitLoading(false); + }); + } +//end dari hospital portal const location = useLocation(); @@ -553,17 +624,17 @@ function submitRequestFinalLog() { Tipe Service o.label} - isOptionEqualToValue={(o, v) => o.value === v.value} - onChange={(_, v) => setServiceCode(v?.value ?? '')} + getOptionLabel={(option) => option.label || ""} + value={serviceOptions.find((opt) => opt.value == serviceCode) || null} + onChange={(event, newValue) => { + setServiceCode(newValue?.value || ""); + }} renderInput={(params) => ( - + )} - /> - - + /> diff --git a/frontend/hospital-portal/src/sections/dashboard/Components/DialogBenefit.tsx b/frontend/hospital-portal/src/sections/dashboard/Components/DialogBenefit.tsx index b19297c3..741b7b85 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 - + @@ -679,4 +679,4 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl maxWidth="xl" /> ); -} \ No newline at end of file +} diff --git a/frontend/hospital-portal/src/sections/dashboard/Components/DialogEditBenefit.tsx b/frontend/hospital-portal/src/sections/dashboard/Components/DialogEditBenefit.tsx index 8af53a7e..5f6a48b7 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,6 @@ 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 +103,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 +161,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 +190,18 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, setValue('keterangan', data?.keterangan) setValue('reason', data?.reason) }, [data]) - - + + const getContent = () => ( {/* */} - + {data?.benefit?.description} - @@ -213,7 +211,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, - - + @@ -252,7 +250,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, - + @@ -276,7 +274,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, - + @@ -296,7 +294,7 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, - + @@ -445,4 +443,4 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog, maxWidth="xl" /> ); -} \ No newline at end of file +} diff --git a/frontend/hospital-portal/src/sections/dashboard/DetailRequestFinalLog.tsx b/frontend/hospital-portal/src/sections/dashboard/DetailRequestFinalLog.tsx index 9647505f..4149596b 100644 --- a/frontend/hospital-portal/src/sections/dashboard/DetailRequestFinalLog.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/DetailRequestFinalLog.tsx @@ -296,10 +296,10 @@ export default function DetailRequestFinalLog() { >([]) useEffect(() => { - if (!requestLog?.id_member) return + if (!requestLog?.id && !Log_id) return axios - .get('service-member/' + (requestLog?.id_member ?? null)) + .get('service-member/' + (requestLog?.id ?? Log_id)) .then((res) => setServiceOptions(res.data)) .catch(console.error) @@ -307,7 +307,7 @@ export default function DetailRequestFinalLog() { .get('specialis') .then((res) => setSpecialisOptions(res.data)) .catch(console.error) - }, [requestLog?.id_member]) + }, [requestLog?.id, Log_id]) const [serviceCode, setServiceCode] = useState('') @@ -666,7 +666,8 @@ export default function DetailRequestFinalLog() { {/* Surat persetujuan Tindakan */} - + diff --git a/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx b/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx index ac449934..91161033 100644 --- 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) ))} - +