From b5afefd71d649b7d94c9282bf962b2439b7de25f Mon Sep 17 00:00:00 2001 From: ivan-sim Date: Wed, 3 Jan 2024 16:57:22 +0700 Subject: [PATCH] Update Export Members dan Hide client portal --- .../Api/CorporateMemberController.php | 112 +++++++++++++++++- Modules/Client/Routes/api.php | 1 + .../src/pages/Dashboard/Index.tsx | 40 +++---- .../src/pages/EmployeeData/List.tsx | 24 ++++ 4 files changed, 156 insertions(+), 21 deletions(-) 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/frontend/client-portal/src/pages/Dashboard/Index.tsx b/frontend/client-portal/src/pages/Dashboard/Index.tsx index 355d4c97..ae7f9712 100644 --- a/frontend/client-portal/src/pages/Dashboard/Index.tsx +++ b/frontend/client-portal/src/pages/Dashboard/Index.tsx @@ -235,12 +235,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', @@ -292,18 +292,18 @@ export default function Index() { corporateMembers.data.data.map((obj: any) => { return { ...obj, - limit: ( - - - - {fSplit(obj.limit.current)} / {fSplit(obj.limit.total)} - - - ), + // limit: ( + // + // + // + // {fSplit(obj.limit.current)} / {fSplit(obj.limit.total)} + // + // + // ), status: obj.status === 1 ? (