diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index 09446b1c..7730de53 100644 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -22,6 +22,8 @@ use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Modules\Client\Transformers\EmployeeData\UserProfile\DataMemberResource as EmployeeDataProfileMemberResource; use Modules\Internal\Services\MemberEnrollmentService; use Illuminate\Support\Facades\DB; +use Dompdf\Dompdf; +use Dompdf\Options; class CorporateMemberController extends Controller { @@ -260,7 +262,7 @@ class CorporateMemberController extends Controller public function getDeposit($corporate_id) { $deposit = DB::table('corporate_policies') - ->select('total_premi', + ->select('total_premi', 'minimal_deposit_percentage', 'minimal_deposit_net', 'minimal_alert_percentage', @@ -356,4 +358,49 @@ class CorporateMemberController extends Controller return response()->json($deposit); } + public function downloadEcard($corporate_id, $member_id) + { + $member = Member::with([ + 'currentPlan', + 'currentPolicy', + 'currentCorporate', + 'currentCorporate.files', + // 'currentPlan.corporateBenefits.benefit' + ])->find($member_id); + $dataMember['member'] = $member; + + $pdf = new Dompdf(); + + $options = new Options(); + $options->set('isHtml5ParserEnabled', true); + $options->set('isPhpEnabled', true); + $options->set(['isRemoteEnabled' => true]); + $pdf->setOptions($options); + + $pdf->setPaper('A4', 'portrait'); + + if ($member->currentCorporate->id == 5){ // Vale + $html1 = view('pdf.ecard', $dataMember); + } else { + $html1 = view('pdf.ecard-lms', $dataMember); + } + + // Halaman 2 + // $html2 = view('pdf.req_log_page_2', $data); + + // Gabung konten HTML dari dua tampilan + // $htmlCombined = $html1 . $html2; + $htmlCombined = $html1; + + $pdf->loadHtml($htmlCombined); + $pdf->render(); + + $headers = [ + 'Content-Type' => 'application/pdf', + 'Content-Disposition' => 'inline; filename="file.pdf"', + ]; + + return response($pdf->output(), 200, $headers); + } + } diff --git a/Modules/Client/Routes/api.php b/Modules/Client/Routes/api.php index 090e2cd4..92a0dea0 100644 --- a/Modules/Client/Routes/api.php +++ b/Modules/Client/Routes/api.php @@ -74,6 +74,8 @@ Route::prefix('client')->group(function () { Route::get('get-deposits', [CorporateMemberController::class, 'getDeposit']); Route::get('get-limits/{member_id}', [CorporateMemberController::class, 'getLimits']); + + Route::get('download-ecard/{member_id}', [CorporateMemberController::class, 'downloadEcard']); }); Route::get('claims/{id}', [ClaimController::class, 'show']); diff --git a/frontend/client-portal/src/pages/EmployeeData/List.tsx b/frontend/client-portal/src/pages/EmployeeData/List.tsx index 8b5ed293..f80ea463 100644 --- a/frontend/client-portal/src/pages/EmployeeData/List.tsx +++ b/frontend/client-portal/src/pages/EmployeeData/List.tsx @@ -17,6 +17,8 @@ import Typography from '@mui/material/Typography'; import TableMoreMenu from '../../components/table/TableMoreMenu'; import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'; import Label from '../../components/Label'; + +import DownloadIcon from '@mui/icons-material/Download'; import { enqueueSnackbar } from 'notistack'; export default function List() { @@ -167,6 +169,26 @@ export default function List() { }, ]; /* -------------------------------------------------------------------------- */ + // Download E-Card + async function handleDownloadEcard(member_id: any, fullName:any) { + return axios + .get(corporateValue+`/download-ecard/${member_id}`, { + responseType: 'blob', + }) + .then((response) => { + const namaFile = 'Ecard - '+fullName+".pdf"; + const url = URL.createObjectURL(response.data); + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', namaFile); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }) + .catch((error) => { + enqueueSnackbar(error.message, { variant: 'error' }); + }); + } useEffect(() => { (async () => { @@ -182,7 +204,6 @@ export default function List() { const response = await axios.get(`${corporateValue}/members?type=employee-data`, { params: { ...parameters }, }); - setSearchParams(parameters); setData( response.data.data.map((obj: any) => ({ @@ -205,6 +226,10 @@ export default function List() { View + handleDownloadEcard(obj.id, obj.fullName)}> + + Download E-card + } />