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}
/>
);