diff --git a/Modules/Client/Transformers/Dashboard/MemberResources.php b/Modules/Client/Transformers/Dashboard/MemberResources.php index b5fbd836..d53d88ea 100644 --- a/Modules/Client/Transformers/Dashboard/MemberResources.php +++ b/Modules/Client/Transformers/Dashboard/MemberResources.php @@ -14,6 +14,7 @@ class MemberResources extends JsonResource */ public function toArray($request) { + // dd($this->currentPlans); return [ 'id' => $this->id, 'memberId' => $this->member_id, @@ -25,6 +26,7 @@ class MemberResources extends JsonResource 'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->claims_sum_total_claim / $this->currentPlan->limit_rules) * 100) : 0 ], 'status' => $this->active, + 'service_type' => $this->currentPlans, ]; } } diff --git a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php index 3a607540..8d37763a 100644 --- a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php @@ -201,12 +201,21 @@ class ClaimRequestController extends Controller { $claimRequest = ClaimRequest::findOrFail($claim_request_id); + $service_code = $claimRequest->service_code; if ($claimRequest->status != 'approved') { throw new Exception("Belum Teverifikasi", 1); } $member = Member::findOrFail($claimRequest->member_id) - ->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']); + ->load([ + // 'currentPlan', + 'currentPlan' => function ($plan) use ($claim_request_id, $service_code) { + $plan->where('plans.service_code', $service_code); + }, + 'currentPolicy', + 'currentPlan.corporateBenefits', + 'currentPlan.corporateBenefits.benefit' + ]); $pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'claimRequest')); return $pdf->download('Guaranted Letter - '.$member->full_name.'.pdf'); diff --git a/Modules/Internal/Http/Controllers/Api/ClaimController.php b/Modules/Internal/Http/Controllers/Api/ClaimController.php index 1efbc506..eb300347 100644 --- a/Modules/Internal/Http/Controllers/Api/ClaimController.php +++ b/Modules/Internal/Http/Controllers/Api/ClaimController.php @@ -33,11 +33,17 @@ class ClaimController extends Controller */ public function index(Request $request) { + $serviceCode = 'IP'; $claims = Claim::with([ 'member', 'member.currentCorporate', 'member.currentCorporate.currentPolicy', - 'member.currentPlan', + // 'member.currentPlan' => function($memberPlan) use ($serviceCode) { + // $memberPlan->where('plans.service_code', $serviceCode); + // }, + 'member.currentPlan' => function($memberPlan) { + $memberPlan->join('claim_requests', 'claim_requests.service_code', '=', 'plans.service_code'); + }, 'diagnoses' => function ($diagnosis) { $diagnosis->where('type', 'primary'); }, diff --git a/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php b/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php index 69c7f0fa..20376706 100644 --- a/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php +++ b/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php @@ -380,7 +380,7 @@ class ClaimRequestController extends Controller ]); } catch (\Exception $e) { - return $e->getMessage();; + return $e->getMessage(); } return $claimRequest; @@ -643,20 +643,47 @@ class ClaimRequestController extends Controller $memberList = DB::table('members') ->select('id','member_id','name') ->where("name", "like", "%$keyword%") + ->orWhere("member_id", "like", "%$keyword%") ->orderBy('created_at', 'asc') ->offset($offset) ->limit($limit) ->get(); + + $data = []; + if(count($memberList)>0){ + $temp = []; + foreach($memberList as $d){ + $serviceType = $this->getServiceMember($d->id); + $temp['id'] = $d->id; + $temp['member_id'] = $d->member_id; + $temp['name'] = $d->name; + $temp['service_type'] = $serviceType; + + array_push($data, $temp); + } + + } return response()->json([ 'error' => false, 'message' => "success", 'data' => [ - 'member_list'=> $memberList, + 'member_list'=> $data, ] ],200); } + public function getServiceMember($id){ + $service = DB::table('member_plans') + ->select('plans.service_code as code', 'services.name') + ->join('plans', 'member_plans.plan_id', '=', 'plans.id') + ->join('services', 'plans.service_code', '=', 'services.code') + ->where('member_id', $id) + ->get() + ->toArray(); + return $service; + } + public static function getNextCode() { // $last_number = ClaimRequest::max('code'); diff --git a/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php b/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php index 25f1a833..19fc5583 100644 --- a/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php @@ -31,7 +31,7 @@ class CorporateMemberController extends Controller * Display a listing of the resource. * @return Renderable */ - public function index(Request $request, $corporate_id) + public function index(Request $request, $corporate_id ) { $members = Member::query() ->joinCorporateEmployees('left') @@ -44,7 +44,13 @@ class CorporateMemberController extends Controller // return $claim->whereBetween('requested_at', [now()->startOfYear(), now()->endOfYear()]); // return $claim->used(now()->startOfYear(), now()->endOfYear()); }, + 'currentPlans', 'currentPlan', + // 'currentPlan' => function ($currentPlan) use ($service_code){ + // return $currentPlan->where([ + // 'plans.service_code' => $service_code + // ]); + // }, 'currentPlan.benefits' => function ($benefit) use ($corporate_id){ return $benefit->where([ 'corporate_benefits.active' => 1, diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index 43365856..39c74d75 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -273,6 +273,10 @@ Route::prefix('internal')->group(function () { Route::get('claim-requests/detail/{id}', [ClaimRequestController::class, 'claimRequestDetail']); Route::post('claim-requests/{id}/invoice-files', [ClaimRequestController::class, 'invoiceFiles']); Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']); + + Route::get('claim-requests/service/{id}', [ClaimRequestController::class, 'getServiceMember']); + + }); Route::get('province', [ProvinceController::class, 'index']); diff --git a/Modules/Internal/Services/MemberEnrollmentService.php b/Modules/Internal/Services/MemberEnrollmentService.php index 2a57f484..a42dbd15 100644 --- a/Modules/Internal/Services/MemberEnrollmentService.php +++ b/Modules/Internal/Services/MemberEnrollmentService.php @@ -732,12 +732,25 @@ class MemberEnrollmentService // Validate If Plan Exist // TODO validate corporate plan - $plan = Plan::query() - ->where('code', $row['plan_id']) - ->where('corporate_id', $corporate->id) - ->first(); - if (!$plan) { - throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row); + $plans = explode(",",$row['plan_id']); + if (count($plans) > 0) { + foreach($plans as $d){ + $plan = Plan::query() + ->where('code', $d) + ->where('corporate_id', $corporate->id) + ->first(); + if (!$plan) { + throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row); + } + } + } else { + $plan = Plan::query() + ->where('code', $row['plan_id']) + ->where('corporate_id', $corporate->id) + ->first(); + if (!$plan) { + throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row); + } } try { @@ -788,12 +801,40 @@ class MemberEnrollmentService 'status' => $row['employment_status'] ]); // Bisa disini penyebab data dobel - $member->memberPlans()->create([ - 'plan_id' => $plan->id, - 'status' => 'active', - 'start' => $this->dateParser($row['member_effective_date']), - 'end' => $this->dateParser($row['member_expiry_date']), - ]); + + $plans = explode(",",$row['plan_id']); + if (count($plans) > 0) { + foreach($plans as $d){ + $plan = Plan::query() + ->where('code', $d) + ->where('corporate_id', $corporate->id) + ->first(); + if (!$plan) { + throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row); + } + $member->memberPlans()->create([ + 'plan_id' => $plan->id, + 'status' => 'active', + 'start' => $this->dateParser($row['member_effective_date']), + 'end' => $this->dateParser($row['member_expiry_date']), + ]); + } + } else { + $plan = Plan::query() + ->where('code', $row['plan_id']) + ->where('corporate_id', $corporate->id) + ->first(); + if (!$plan) { + throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row); + } + $member->memberPlans()->create([ + 'plan_id' => $plan->id, + 'status' => 'active', + 'start' => $this->dateParser($row['member_effective_date']), + 'end' => $this->dateParser($row['member_expiry_date']), + ]); + } + } DB::commit(); } catch (\Exception $e) { diff --git a/app/Models/Member.php b/app/Models/Member.php index 6e8cba42..5b5363ed 100644 --- a/app/Models/Member.php +++ b/app/Models/Member.php @@ -148,18 +148,35 @@ class Member extends Model return $this->hasManyThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id'); } - public function currentPlan() + public function currentPlans() { return $this->hasManyThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id'); // ->latest(); // TODO Fix This } + public function currentPlan() + { + return $this->hasOneThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id', ) + ->latest(); + // ->where('plans.service_code', $this->claimRequest->service_code); // TODO Fix This + } + // public function currentPlan() // { - // return $this->hasOneThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id') - // ->latest(); // TODO Fix This + // return $this->hasOneThrough( + // Plan::class, + // MemberPlan::class, + // 'member_id', + // 'id', + // 'id', + // 'plan_id' + // ) + // ->join('claim_requests', 'claim_requests.service_code', '=', 'plans.service_code') + // ->latest('claim_requests.created_at') // Atau sesuaikan dengan kolom timestamp yang sesuai + // ->select('plans.*'); // } + public function currentEmployeds() { return $this->hasOneThrough(CorporateEmployee::class, Person::class, 'nik', 'id', 'id', 'nik') diff --git a/app/Services/CorporateMemberService.php b/app/Services/CorporateMemberService.php index e026124a..1a7c65c7 100644 --- a/app/Services/CorporateMemberService.php +++ b/app/Services/CorporateMemberService.php @@ -95,7 +95,7 @@ class CorporateMemberService // ->joinClaimRequests('right') ->joinCorporateEmployees('left') ->joinCorporateDivisions('left') - ->with('currentPlan') + ->with('currentPlans') ->withSum('claims', 'total_claim') ->whereHas('employeds', function (Builder $corporateEmployee) use ($corporateId) { $corporateEmployee->where('corporate_id', $corporateId); @@ -125,7 +125,7 @@ class CorporateMemberService } }) // ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active', 'claim_requests.id', 'claim_requests.member_id', 'claim_requests.submission_date']) - ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active']) + ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active', ]) ->paginate($limit); } @@ -174,7 +174,7 @@ class CorporateMemberService $query->getQuery()->orderBy($orderBy, $request->order); }) - ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'member_plans.start AS start_date', 'member_plans.end AS end_date', 'plans.active', 'plans.service_code']) + ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'members.members_effective_date AS start_date', 'members.members_expire_date AS end_date', 'plans.active', 'plans.service_code']) ->selectRaw("(select sum(`claims`.`total_claim`) from `claims` where `members`.`id` = `claims`.`member_id` AND `claims`.`deleted_at` IS NULL) AS `claims_sum_total_claim`") ->paginate($limit); } diff --git a/frontend/client-portal/src/pages/ClaimSubmit/DialogDetailClaim.tsx b/frontend/client-portal/src/pages/ClaimSubmit/DialogDetailClaim.tsx index a11e85d7..12941722 100644 --- a/frontend/client-portal/src/pages/ClaimSubmit/DialogDetailClaim.tsx +++ b/frontend/client-portal/src/pages/ClaimSubmit/DialogDetailClaim.tsx @@ -116,6 +116,7 @@ const DialogDetailClaim = ({ title, openDialog, setOpenDialog, data }: MuiDialog personID: item.memberId, personName: item.fullName, typePatient: 'IP', + service_type: item.service_type, anotherDocument: [], fileRealInvoice: [], laboratoryResult: [], @@ -275,71 +276,46 @@ const DialogDetailClaim = ({ title, openDialog, setOpenDialog, data }: MuiDialog + - - - - - - - - - - {row.personName} - - {row.personID} - + {row.service_type.map((r, i) => { + return( + + + ) + })} + {/* */} - {/* - - Total Limit - - - - {fCurrency(8000000)} / {fCurrency(100000)} - - */} - - - - + {/* REAL INVOICE */} diff --git a/frontend/client-portal/src/sections/alarm-center/user-profile/CardFamilyInformation.tsx b/frontend/client-portal/src/sections/alarm-center/user-profile/CardFamilyInformation.tsx index a0803051..57b85db2 100644 --- a/frontend/client-portal/src/sections/alarm-center/user-profile/CardFamilyInformation.tsx +++ b/frontend/client-portal/src/sections/alarm-center/user-profile/CardFamilyInformation.tsx @@ -168,7 +168,7 @@ export default function CardFamilyInformation({ data }) { Date of Birth - {familyMember?.birth_date ? fDate(familyMember?.birth_date) : ''} + {familyMember?.birth_date != '0000-00-00' ? fDate(familyMember?.birth_date) : '-'} { if (row.patien_type == undefined) { return true @@ -251,34 +253,26 @@ export default function FormCreate() { - {/* Patien Type */} - - - - - - + {row.service_type.map((r,i) => { + const code = r.code + return ( + + + + ) + })} diff --git a/frontend/dashboard/src/pages/ClaimRequests/Components/FormCreateBtnUpload.tsx b/frontend/dashboard/src/pages/ClaimRequests/Components/FormCreateBtnUpload.tsx index ac40b098..23df5ed5 100644 --- a/frontend/dashboard/src/pages/ClaimRequests/Components/FormCreateBtnUpload.tsx +++ b/frontend/dashboard/src/pages/ClaimRequests/Components/FormCreateBtnUpload.tsx @@ -32,7 +32,7 @@ export default function FormCreateBtnUpload ({handleChangeInputProp}: Props) { style={{ display: 'none' }} multiple onChange={(event) => handleChangeInputProp(event.target.files ? event.target.files[0] : {})} - accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf" + accept="application/pdf" /> ) diff --git a/frontend/dashboard/src/pages/ClaimRequests/Detail.tsx b/frontend/dashboard/src/pages/ClaimRequests/Detail.tsx index 6b4cac54..39aa66ab 100644 --- a/frontend/dashboard/src/pages/ClaimRequests/Detail.tsx +++ b/frontend/dashboard/src/pages/ClaimRequests/Detail.tsx @@ -92,17 +92,17 @@ export default function Detail() { setOpenDialogSubmit(false); } const handleSubmitData = () => { - if(fileInvoices.length > 0) - { + // if(fileInvoices.length > 0) + // { //submit data axios .post('claim-requests/'+id+'/approve') .then((response) => { - enqueueSnackbar('Success Submit Claim Request', { variant: 'success' }); - setOpenDialogSubmit(false); + enqueueSnackbar('Success Submit Claim Request', { variant: 'success' }); + setOpenDialogSubmit(false); }) .catch(({ response }) => { - enqueueSnackbar(response.data.message ?? 'Something went wrong!', { variant: 'error' }); + enqueueSnackbar(response.data.message ?? 'Something went wrong!', { variant: 'error' }); }); //Upload file invoices const formData = makeFormData({ @@ -117,11 +117,11 @@ export default function Detail() { .catch(({ response }) => { enqueueSnackbar(response.data.message ?? 'Something Went Wrong', { variant: 'error' }); }); - } - else - { - enqueueSnackbar('Please upload file invoice, before submit', { variant: 'warning' }); - } + // } + // else + // { + // enqueueSnackbar('Please upload file invoice, before submit', { variant: 'warning' }); + // } setTimeout(() => { @@ -158,7 +158,7 @@ export default function Detail() { - {!check_invoice ? ( + {check_invoice ? ( Request Claim @@ -231,7 +231,7 @@ export default function Detail() { style={{ display: 'none' }} multiple onChange={handleInvoiceInputChange} - accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf" + accept="application/pdf" /> diff --git a/frontend/dashboard/src/pages/ClaimRequests/Model/Types.tsx b/frontend/dashboard/src/pages/ClaimRequests/Model/Types.tsx index 41b4d18c..81b7da49 100644 --- a/frontend/dashboard/src/pages/ClaimRequests/Model/Types.tsx +++ b/frontend/dashboard/src/pages/ClaimRequests/Model/Types.tsx @@ -12,8 +12,14 @@ export type MemberListType = { id : string, member_id : string, name : string, + service_type : ServiceType[], patien_type? : string, file_kondisi? : any[], file_diagnosa? : any[], - file_penunjang? : any[] + file_penunjang? : any[], +} + +export type ServiceType = { + code : string + name : string } diff --git a/frontend/dashboard/src/pages/Claims/Detail.tsx b/frontend/dashboard/src/pages/Claims/Detail.tsx index d4913a06..64af0228 100644 --- a/frontend/dashboard/src/pages/Claims/Detail.tsx +++ b/frontend/dashboard/src/pages/Claims/Detail.tsx @@ -353,7 +353,7 @@ export default function Detail() { const defaultValues = useMemo( () => ({ - service_code: 'OP', + service_code: claim?.service_code, secondary_diagnosis_id: [{ value: { name: "", diff --git a/frontend/dashboard/src/pages/Corporates/Member/List.tsx b/frontend/dashboard/src/pages/Corporates/Member/List.tsx index 9b6114ec..b2e0c17e 100644 --- a/frontend/dashboard/src/pages/Corporates/Member/List.tsx +++ b/frontend/dashboard/src/pages/Corporates/Member/List.tsx @@ -484,7 +484,18 @@ export default function CorporatePlanList({handleSubmitSuccess}) { {row.name ? row.name : '-'} - {row.current_plan?.code} + + {/* {row.current_plan?.code} */} + {row.current_plans + ? row.current_plans.map((plan, index) => ( + <> + {plan.code} + {index < row.current_plans.length - 1 && ', '} + + )) + : '-'} + + {row.activation_date ? row.activation_date : '-'}