From d90abffedf679df11b96e1f4c1e292ef333a9b9f Mon Sep 17 00:00:00 2001 From: ivan-sim Date: Tue, 16 Jan 2024 16:21:36 +0700 Subject: [PATCH] Update Export Excel Alrm Center --- .../Http/Controllers/Api/ClaimController.php | 239 ++++++++++++++++++ Modules/Client/Routes/api.php | 1 + .../client-portal/src/components/Table.tsx | 2 +- .../src/pages/AlarmCenter/List.tsx | 2 +- 4 files changed, 242 insertions(+), 2 deletions(-) diff --git a/Modules/Client/Http/Controllers/Api/ClaimController.php b/Modules/Client/Http/Controllers/Api/ClaimController.php index 0ed4533c..e3221ade 100644 --- a/Modules/Client/Http/Controllers/Api/ClaimController.php +++ b/Modules/Client/Http/Controllers/Api/ClaimController.php @@ -17,6 +17,10 @@ use Modules\Client\Transformers\ClaimShowResource; use PhpOffice\PhpSpreadsheet\Spreadsheet; use Illuminate\Support\Facades\Storage; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; +use Box\Spout\Writer\Common\Creator\WriterEntityFactory; +use Box\Spout\Writer\Common\Creator\Style\StyleBuilder; +use Box\Spout\Common\Entity\Style\CellAlignment; +use Box\Spout\Common\Entity\Style\Color; class ClaimController extends Controller { @@ -261,4 +265,239 @@ class ClaimController extends Controller ]); } } + + public function exportAlrmCenter($corporate_id, $start, $end) + { + $writer = WriterEntityFactory::createXLSXWriter(); + $writer->openToFile(public_path('files/Claim-Data-Corporate-'. date('Y-m-d').'.xlsx')); + $header = [ + 'No', + 'Code', + 'Provider', + 'Member ID (BN)', + 'Member Name', + 'Member Name Principal', + 'Plan ID', + 'Payor ID', + 'Corporate name', + 'Policy Number', + 'Benefit Code', + 'Benefit Desc', + 'Amt Incurred', + 'Amt Approved', + 'Amt Not Approved', + 'Excess Paid', + 'Diagnosis' + ]; + $style = (new StyleBuilder()) + ->setFontBold() + // ->setFontSize(15) + // ->setFontColor(Color::BLUE) + // ->setShouldWrapText() + ->setCellAlignment(CellAlignment::LEFT) + // ->setBackgroundColor(Color::YELLOW) + ->build(); + + $headerRow = WriterEntityFactory::createRowFromArray($header, $style); + $writer->addRow($headerRow); + + $data = DB::table('request_logs') + ->leftJoin('members', 'members.id', '=', 'request_logs.member_id') + ->leftJoin('corporate_employees','corporate_employees.member_id','=','members.id') + ->where('corporate_employees.corporate_id', '=', 1) + ->where('request_logs.submission_date', '>', $start) + ->where('request_logs.submission_date', '<', $end) + ->select( + DB::raw('1 AS no'), + 'request_logs.organization_id', + 'request_logs.id', + 'request_logs.member_id', + 'request_logs.service_code', + 'request_logs.code' + ) + ->get(); + + if (isset($data) && count($data) > 0) + { + $dataRow = array(); + $no = 0; + foreach ($data as $item) + { + //Provider + $dataRumahSakit = DB::table('organizations') + ->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id') + ->where('organizations.id', '=', $item->organization_id) + ->where('addresses.addressable_type', '=', 'App\Models\Organization') + ->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit') + ->first(); + //Data Member + $dataMember = DB::table('members') + ->where('members.id', '=', $item->member_id) + ->select( + 'members.nric', + 'members.id', + 'members.principal_id', + 'members.name', + 'members.birth_date', + 'members.member_id', + 'members.gender', + DB::raw(' + (Select persons.nik FROM persons WHERE persons.id = members.person_id LIMIT 1) AS nik + '), + DB::raw(' + "LinkSehat" AS penjamin + '), + DB::raw(' + (Select corporates.name FROM corporates + LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id + WHERE corporate_employees.member_id = members.id LIMIT 1) AS nama_perusahaan + '), + DB::raw(' + (Select corporates.id FROM corporates + LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id + WHERE corporate_employees.member_id = members.id LIMIT 1) AS id_perusahaan + '), + DB::raw(' + (Select corporates.code FROM corporates + LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id + WHERE corporate_employees.member_id = members.id LIMIT 1) AS code_perusahaan + '), + DB::raw(' + (Select services.name FROM services + WHERE services.code = "'.$item->service_code.'" LIMIT 1) AS jenis_perwatan + '), + DB::raw(' + (Select member_policies.policy_id FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS no_polis + '), + DB::raw(' + (Select member_policies.status FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS status_polis + '), + DB::raw(' + (Select plans.code FROM member_plans + LEFT JOIN plans ON plans.id = member_plans.plan_id + WHERE member_plans.member_id = members.id AND plans.service_code = "'.$item->service_code.'" LIMIT 1) AS code_plan + '), + DB::raw(' + (Select plans.limit_rules FROM member_plans + LEFT JOIN plans ON plans.id = member_plans.plan_id + WHERE member_plans.member_id = members.id LIMIT 1) AS limit_rules + '), + DB::raw(' + "IDR" AS mata_uang + '), + 'members.members_effective_date AS mulai', + 'members.members_expire_date AS akhir' + ) + ->first(); + + //Nama Karyawan + $data['namaKaryawan'] = ''; + if($dataMember->principal_id) + { + $dataNamaKaryawan = DB::table('members') + ->where('members.member_id', '=', $dataMember->principal_id) + ->select('members.name') + ->first(); + $data['namaKaryawan'] = $dataNamaKaryawan->name; + } + else{ + $data['namaKaryawan'] = $dataMember->name; + } + + //Data Benefit + $dataClaimLog = DB::table('request_log_benefits') + ->where('request_log_benefits.request_log_id', '=', $item->id) + ->select( + '*', + DB::raw(' + (Select benefits.description FROM benefits + WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS benfit + '), + DB::raw(' + (Select benefits.code FROM benefits + WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS code + ') + ) + ->get(); + + $check_first_id = 0; + if($check_first_id != $item->id) + { + $no += $item->no; + } + if (isset($dataClaimLog) && count($dataClaimLog) > 0) + { + foreach ($dataClaimLog as $item_benefit) + { + $rowData = [ + $check_first_id != $item->id ? $no : '', + !empty($item->code) ? $item->code : '', + !empty($dataRumahSakit->nama_rumahsakit) ? $dataRumahSakit->nama_rumahsakit : '', + !empty($dataMember->member_id) ? $dataMember->member_id : '', + !empty($dataMember->name) ? $dataMember->name : '', + $data['namaKaryawan'], + !empty($dataMember->code_plan) ? $dataMember->code_plan : '', + 'LinkSehat', + !empty($dataMember->nama_perusahaan) ? $dataMember->nama_perusahaan : '', + !empty($dataMember->no_polis) ? $dataMember->no_polis : '', + !empty($item_benefit->code) ? $item_benefit->code : '', + !empty($item_benefit->benfit) ? $item_benefit->benfit : '', + !empty($item_benefit->amount_incurred) ? $item_benefit->amount_incurred : '', + !empty($item_benefit->amount_approved) ? $item_benefit->amount_approved : '', + !empty($item_benefit->amount_not_approved) ? $item_benefit->amount_not_approved : '', + !empty($item_benefit->excess_paid) ? $item_benefit->excess_paid : '', + !empty($item_benefit->keterangan) ? $item_benefit->keterangan : '', + + ]; + array_push($dataRow,$rowData); + + $check_first_id = $item->id; + } + } + else + { + $rowData = [ + $check_first_id != $item->id ? $no : '', + !empty($item->code) ? $item->code : '', + !empty($dataRumahSakit->nama_rumahsakit) ? $dataRumahSakit->nama_rumahsakit : '', + !empty($dataMember->member_id) ? $dataMember->member_id : '', + !empty($dataMember->name) ? $dataMember->name : '', + $data['namaKaryawan'], + !empty($dataMember->code_plan) ? $dataMember->code_plan : '', + 'LinkSehat', + !empty($dataMember->nama_perusahaan) ? $dataMember->nama_perusahaan : '', + !empty($dataMember->no_polis) ? $dataMember->no_polis : '', + '', + '', + '', + '', + '', + '', + '', + + ]; + array_push($dataRow,$rowData); + + } + } + $style = (new StyleBuilder()) + //->setFontBold() + // ->setFontSize(15) + // ->setFontColor(Color::BLUE) + // ->setShouldWrapText() + ->setCellAlignment(CellAlignment::LEFT) + // ->setBackgroundColor(Color::YELLOW) + ->build(); + foreach ($dataRow as $rowData) { + $row = WriterEntityFactory::createRowFromArray($rowData, $style); + $writer->addRow($row); + } + } + $writer->close(); + + return Helper::responseJson([ + 'file_name' => 'Claim-Data-Corporate-'. date('Y-m-d'), + "file_url" => url('files/Claim-Data-Corporate-'. date('Y-m-d').'.xlsx') + ]); + } } diff --git a/Modules/Client/Routes/api.php b/Modules/Client/Routes/api.php index e7fc76e2..3e4513cc 100644 --- a/Modules/Client/Routes/api.php +++ b/Modules/Client/Routes/api.php @@ -54,6 +54,7 @@ Route::prefix('client')->group(function () { Route::get('claims/status', [ClaimController::class, 'status']); Route::get('claims', [ClaimController::class, 'index']); Route::get('claims/export', [ClaimController::class, 'export']); + Route::get('claims/exportAlrmCenter/{start}/{end}', [ClaimController::class, 'exportAlrmCenter']); Route::get('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'getEncounterData']); Route::get('topup', [TopUpController::class, 'index']); // Route::get('topup', [TopUpController::class, 'get']); diff --git a/frontend/client-portal/src/components/Table.tsx b/frontend/client-portal/src/components/Table.tsx index 75dd41fc..9aa6d58d 100644 --- a/frontend/client-portal/src/components/Table.tsx +++ b/frontend/client-portal/src/components/Table.tsx @@ -311,7 +311,7 @@ export default function Table({