diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index 5ea7b0e7..83fa13e3 100644 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -21,10 +21,15 @@ use Modules\Client\Transformers\Dashboard\MemberEmployeeDataResources as Dashboa use Modules\Client\Transformers\DataMemberResource; use Illuminate\Support\Facades\DB; +use Box\Spout\Reader\Common\Creator\ReaderEntityFactory; +use Box\Spout\Writer\Common\Creator\WriterEntityFactory; +use Modules\Internal\Services\MemberEnrollmentService; + class CorporateMemberController extends Controller { - public function __construct(public CorporateMemberService $corporateMemberService) + public function __construct(public CorporateMemberService $corporateMemberService, MemberEnrollmentService $memberEnrollmentService) { + $this->memberEnrollmentService = $memberEnrollmentService; } /** @@ -106,6 +111,111 @@ class CorporateMemberController extends Controller } + public function generateMemberList($corporate_id){ + // Mendapatkan data yang akan diekspor (misalnya, dari database) + $data = Member::with(['currentPlan', 'currentCorporate', 'division', 'employeds', 'currentPolicy']) + // ->filter($request->all()) + // ->where('corporate_id', $corporate_id) + ->whereHas('employeds', function ($employeds) use ($corporate_id) { + $employeds->where('corporate_id', $corporate_id); + })->get()->toArray(); + // Membuat penulis entitas Spout + $writer = WriterEntityFactory::createXLSXWriter(); + + // Membuka penulis untuk menulis ke file + $writer->openToFile(public_path('files/CorporateMembershipList.xlsx')); + // Menulis header kolom + $headers_map_to_table_fields = $this->memberEnrollmentService->listing_doc_headers; + $headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields); + + $writer->addRow($headerRow); + // dd('test'); + // Menulis data + if (!empty($data)) { + foreach ($data as $item) { + $rowData = [ $item['record_mode'], // Recode Mode + $item['record_type'], // Recode Type + $item['payor_id'], // Payor ID + $item['member_id'], // Member ID + $item['principal_id'], // Mapping ID + NULL, // Link Medis Member ID + $item['current_corporate']['code'] ?? null, // Corporate ID + $item['employeds'][0]['nik'] ?? null, // NIK + $item['division']['code'] ?? null, // Devision + $item['employeds'][0]['branch_code'] ?? null, // Branch Code + $item['bank_info'], // Bank Info + $item['language'], // Language + null, // Type of Work + $item['race'], // Race + $item['current_policy']['code'] ?? null, // Policy Number + $item['marital_status'], // Marital Status + $item['relation_with_principal'], // Relationship + str_replace('-', '',$item['members_effective_date']), // Member effective date + str_replace('-', '',$item['members_expire_date']), // Member expiry date + NULL, // Faskes FKTP (First Level Provider) or Individual preferred provider + NULL, // Faskes FKRTL (Next Level Provider) or Individual group preferred provider + $item['bpjs_class'], // The Right Classes Room of BPJS Participants + NULL, // Name of Faskes + NULL, // Rule BPJSK + NULL, // Internal Use + $item['full_name'], // Member Name + $item['address1'], // Address1 + $item['address2'], // Address2 + $item['address3'], // Address3 + $item['address4'], // Address4 + $item['city'], // City + NULL, // State + $item['postal_code'], // Post Code + NULL, // Telephone - Mobile + NULL, // Telephone - Res + NULL, // Telephone - Office + $item['nric'], // NRIC + $item['passport_no'], // Passport No + $item['passport_country'], // Passport Country + $item['email'], // Email + $item['identification_code'], // Identification Code + $item['birth_date'], // Date of Birth + $item['gender_code'], // Sex + NULL, // Internal Use + $item['current_plan']['code'] ?? null, // Plan-ID + NULL, // Employment-Status + NULL, // Internal Use + NULL, // Internal Use + NULL,// Internal Use + str_replace('-', '',$item['terminated_date']), // Date Terminated + $item['pre_existing'], // Pre Existing + $item['bpjs_id'], // BPJS ID + $item['endorsement_date'], // Endorsement Date + $item['remarks'], // Remarks + NULL, // Internal Use + NULL,// Member Since + NULL,// Internal Use + $item['policy_in_force'], // Policy Inforce + NULL, // Member Suspended + str_replace('-', '',$item['activation_date']), // Activation Date + NULL, // Internal Use + $item['start_no_claim'], // StartNoClaim + $item['end_no_claim'], // EndNoClaim + NULL, // Option Mode + ]; + $row = WriterEntityFactory::createRowFromArray($rowData); + $writer->addRow($row); + } + } + + // Menutup penulis + $writer->close(); + // dd('test'); + // Mengembalikan response untuk mengunduh file + $filePath = public_path('files/CorporateMembershipList.xlsx'); + // dd($filePath); + // Mengembalikan response untuk mengunduh file + return Helper::responseJson([ + 'file_name' => "Corporate Plan & Benefit List " . date('Y-m-d h:i:s'), + "file_url" => url('files/CorporateMembershipList.xlsx') + ]); + } + public function showPerMember($corporate_id, $member_id){ $data = ClaimRequest::where(['member_id' => $member_id]) ->whereNotNull('claim_id') diff --git a/Modules/Client/Routes/api.php b/Modules/Client/Routes/api.php index 43b08350..28b28bcf 100644 --- a/Modules/Client/Routes/api.php +++ b/Modules/Client/Routes/api.php @@ -48,6 +48,7 @@ Route::prefix('client')->group(function () { Route::get('division', [CorporateDivisionController::class, 'index']); Route::get('members', [CorporateMemberController::class, 'index']); Route::get('members/{id}', [CorporateMemberController::class, 'show']); + Route::get('export-members/list', [CorporateMemberController::class, 'generateMemberList']); Route::get('alarm-center-members/{id}', [CorporateMemberController::class, 'showPerMember']); Route::get('service-monitoring/{id}', [CorporateMemberController::class, 'serviceMonitoring']); Route::get('claims/status', [ClaimController::class, 'status']); diff --git a/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php b/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php index 0c2e75d5..80ac3983 100644 --- a/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateMemberController.php @@ -457,16 +457,11 @@ class CorporateMemberController extends Controller // 'currentPlan.corporateBenefits.benefit' ])->find($member_id); - if ($member->currentCorporate->id == 5) { // vale - + if ($member->currentCorporate->id == 5){ // Vale $pdf = PDF::loadView('pdf.ecard', compact('member'))->setPaper('A5', 'portrait'); - return $pdf->download('Ecard - '.$member->full_name.'.pdf'); } else { $pdf = PDF::loadView('pdf.ecard-lms', compact('member'))->setPaper('A5', 'portrait'); - return $pdf->download('Ecard - '.$member->full_name.'.pdf'); } - - $pdf = PDF::loadView('pdf.ecard', compact('member'))->setPaper('A5', 'portrait'); return $pdf->download('Ecard - '.$member->full_name.'.pdf'); } diff --git a/frontend/client-portal/src/pages/ClaimSubmit/Index.tsx b/frontend/client-portal/src/pages/ClaimSubmit/Index.tsx index 93b8b99b..5b813534 100644 --- a/frontend/client-portal/src/pages/ClaimSubmit/Index.tsx +++ b/frontend/client-portal/src/pages/ClaimSubmit/Index.tsx @@ -219,14 +219,14 @@ export default function Drugs() { ? appliedParams : Object.fromEntries([...searchParams.entries()]); - // const claim = await axios.get(`${corporateValue}/members`, { - // params: { ...parameters, type: 'claim-report' }, - // }); + // const claim = await axios.get(`${corporateValue}/members`, { + // params: { ...parameters, type: 'claim-report' }, + // }); setSearchParams(parameters); // setListAllMemberByClaimStatus(claim.data.data.allMembersByClaimStatus.data); - // setPaginationTable(claim.data.data.allMembersByClaimStatus); + // setPaginationTable(claim.data.data.allMembersByClaimStatus); setIsLoading(false); })(); diff --git a/frontend/client-portal/src/pages/Dashboard/Index.tsx b/frontend/client-portal/src/pages/Dashboard/Index.tsx index 56963e33..37c273a4 100644 --- a/frontend/client-portal/src/pages/Dashboard/Index.tsx +++ b/frontend/client-portal/src/pages/Dashboard/Index.tsx @@ -227,12 +227,12 @@ export default function Index() { label: 'Divisi', isSort: true, }, - { - id: 'limit', - align: 'center', - label: 'Limit', - isSort: false, - }, + // { + // id: 'limit', + // align: 'center', + // label: 'Limit', + // isSort: false, + // }, { id: 'status', align: 'center', @@ -280,56 +280,58 @@ export default function Index() { }); setDivisionData(corporateDivision.data); setMemberData( - corporateMembers.data.data.map((obj: any) => ({ - ...obj, - limit: ( - - - - {fSplit(obj.limit.current)} / {fSplit(obj.limit.total)} - - - ), - status: - obj.status === 1 ? ( - - ) : ( - - ), - /* action: ( - - - - ), */ - })) + corporateMembers.data.data.map((obj: any) => { + return { + ...obj, + // limit: ( + // + // + // + // {fSplit(obj.limit.current)} / {fSplit(obj.limit.total)} + // + // + // ), + status: + obj.status === 1 ? ( + + ) : ( + + ), + /* action: ( + + + + ), */ + }; + }) ); setPaginationTable(corporateMembers.data); setRowsPerPage(corporateMembers.data.per_page); @@ -362,11 +364,11 @@ export default function Index() { {/* - - */} - - + + + + */} { + axios.get(corporateValue + '/export-members/list').then((response) => { + const link = document.createElement('a'); + link.href = response.data.data.file_url; + link.setAttribute('download', response.data.data.file_name); + document.body.appendChild(link); + link.click(); + // handleClose(); + }); +} + const exportReport = { + useExport: true, + startDate: startDateValue, + endDate: endDateValue, + status: statusValue, + handleExportReport: handleExportReport + } /* -------------------------------- headCell -------------------------------- */ const headCells: HeadCell[] = [ @@ -222,6 +242,7 @@ export default function List() { params={params} searchs={searchs} // filters={filters} + exportReport={exportReport} /> );