diff --git a/Modules/Internal/Http/Controllers/Api/PrimayanMedicareController.php b/Modules/Internal/Http/Controllers/Api/PrimayanMedicareController.php index 21be051b..79895c7f 100644 --- a/Modules/Internal/Http/Controllers/Api/PrimayanMedicareController.php +++ b/Modules/Internal/Http/Controllers/Api/PrimayanMedicareController.php @@ -7,11 +7,9 @@ use App\Models\Corporate; use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\DB; -use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Illuminate\Support\Facades\Storage; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; -use PhpOffice\PhpSpreadsheet\Style\NumberFormat; use PhpOffice\PhpSpreadsheet\Style\Alignment; use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\Style\Fill; @@ -62,6 +60,8 @@ class PrimayanMedicareController extends Controller $query->orWhere('members.name', 'like', "%" . $search . "%") ->orWhere('members.member_id', 'like', "%" . $search . "%") ->orWhere('claim_requests.code', 'like', "%" . $search . "%") + ->orWhere('request_logs.code', 'like', "%" . $search . "%") + ->orWhere('claims.code', 'like', "%" . $search . "%") ->orWhere('corporate_employees.nik', 'like', "%" . $search . "%"); }); }) @@ -173,6 +173,8 @@ class PrimayanMedicareController extends Controller $query->orWhere('members.name', 'like', "%" . $search . "%") ->orWhere('members.member_id', 'like', "%" . $search . "%") ->orWhere('claim_requests.code', 'like', "%" . $search . "%") + ->orWhere('request_logs.code', 'like', "%" . $search . "%") + ->orWhere('claims.code', 'like', "%" . $search . "%") ->orWhere('corporate_employees.nik', 'like', "%" . $search . "%"); }); }) @@ -226,8 +228,8 @@ class PrimayanMedicareController extends Controller mkdir(storage_path('app/public/temp'), 0755, true); } - $writer = WriterEntityFactory::createXLSXWriter(); - $writer->openToFile($filePath); + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); $serviceCodeMap = [ 'OP' => 'Outpatient', @@ -258,40 +260,55 @@ class PrimayanMedicareController extends Controller 'Excess Paid', 'Status', ]; - $headerRow = WriterEntityFactory::createRowFromArray($headers); - $writer->addRow($headerRow); + $sheet->fromArray($headers, null, 'A1'); + $sheet->getStyle('A1:Q1')->applyFromArray([ + 'font' => [ + 'bold' => true, + ], + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, + ] + ]); + + $rowIndex = 2; $no = 1; - foreach ($results as $row) { - $serviceCode = $row->service_code ?? '-'; + foreach ($results as $item) { + $serviceCode = $item->service_code ?? '-'; $serviceName = $serviceCodeMap[$serviceCode] ?? $serviceCode; $rowData = [ $no++, - ($row->claim_code && $row->log_code) - ? $row->claim_code . ' / ' . $row->log_code - : ($row->claim_code ?? $row->log_code ?? $row->request_code ?? '-'), - $row->member_name ?? '-', - $row->member_number ?? '-', - $row->nik ?? '-', - $row->birth_date ?? '-', - $row->gender ?? '-', - $row->plan_code ?? '-', - $row->benefit_name ?? $row->benefit_desc ?? '-', + ($item->claim_code && $item->log_code) + ? $item->claim_code . ' / ' . $item->log_code + : ($item->claim_code ?? $item->log_code ?? $item->request_code ?? '-'), + $item->member_name ?? '-', + $item->member_number ?? '-', + $item->nik ?? '-', + $item->birth_date ?? '-', + $item->gender ?? '-', + $item->plan_code ?? '-', + $item->benefit_name ?? $item->benefit_desc ?? '-', $serviceName, - $row->provider_name ?? '-', - $row->request_date ?? '-', - $row->amount_incurred ?? 0, - $row->amount_approved ?? 0, - $row->amount_not_approved ?? 0, - $row->excess_paid ?? 0, - $row->status ?? '-', + $item->provider_name ?? '-', + $item->request_date ?? '-', + $item->amount_incurred ?? 0, + $item->amount_approved ?? 0, + $item->amount_not_approved ?? 0, + $item->excess_paid ?? 0, + $item->status ?? '-', ]; - $dataRow = WriterEntityFactory::createRowFromArray($rowData); - $writer->addRow($dataRow); + + $sheet->fromArray($rowData, null, 'A' . $rowIndex); + $rowIndex++; } - $writer->close(); + foreach (range('A', 'Q') as $col) { + $sheet->getColumnDimension($col)->setAutoSize(true); + } + + $writer = new Xlsx($spreadsheet); + $writer->save($filePath); return Helper::responseJson([ 'file_name' => 'Primayan Medicare List ' . now()->format('Y-m-d H:i:s'), @@ -333,8 +350,15 @@ class PrimayanMedicareController extends Controller // Header Date Range (Row 1) $dateRange = now()->startOfMonth()->format('j F') . ' - ' . now()->format('j F Y'); $sheet->setCellValue('A1', strtoupper($dateRange)); - $sheet->mergeCells('A1:G1'); - $sheet->getStyle('A1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); + $sheet->mergeCells('A1:B1'); + $sheet->getStyle('A1')->applyFromArray([ + 'font' => [ + 'bold' => true, + ], + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, + ] + ]); // Table Headers (Row 3) $headers = ['Code RS', 'Branch Code', 'Total Benefit', 'Deposit 10%', 'Pemakaian Benefit Obat & Rujukan', 'Pemakaian Telekonsultasi', 'Sisa Deposit']; @@ -353,6 +377,9 @@ class PrimayanMedicareController extends Controller 'allBorders' => [ 'borderStyle' => Border::BORDER_THIN, ] + ], + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, ] ]); diff --git a/frontend/dashboard/src/pages/Report/PrimayanMedicare/List.tsx b/frontend/dashboard/src/pages/Report/PrimayanMedicare/List.tsx index de95bd07..586551b1 100644 --- a/frontend/dashboard/src/pages/Report/PrimayanMedicare/List.tsx +++ b/frontend/dashboard/src/pages/Report/PrimayanMedicare/List.tsx @@ -90,8 +90,8 @@ export default function List() { return (
- - + + - + Status - + - + - + } - sx={{ p: 1.8 }} + fullWidth + sx={{ height: '56px' }} onClick={handleExportClick} loading={exportLoading} >