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
+
>
}
/>