data = $data; $this->isTemplate = $data['isTemplate']; $this->titleExcel = $data['titleExcel']; $this->inventoryYear = $data['inventoryYear']; } public function collection() { // Fetch necessary data $data = $this->data; $lands = $data['lands']; // $unitsMap = $data['unitsMap']; $activityFormDetails = $data['activityFormDetails']; $excelData = collect(); if (!$this->isTemplate) { // Add title row $titleRow = [$this->titleExcel]; $excelData->push($titleRow); $excelData->push(['']); // Add print date row $tanggalCetakRow = ['Tanggal Cetak: ' . now()->format('Y-m-d')]; $excelData->push($tanggalCetakRow); $excelData->push(['']); $excelData->push([$data['inventoryYear'] - 1]); } // Add header row $header = $this->isTemplate ? [''] : [$data['inventoryYear'] - 2]; foreach ($lands as $land) { $header[] = $land; } $excelData->push($header); // Add data rows foreach ($lands as $land1) { $row = [$land1]; foreach ($lands as $land2) { $activityValue = isset($activityFormDetails) ? optional( $activityFormDetails ->where('activity_code', strtolower($land1 . '_' . $land2)) ->first(), )->activity_value : ''; $row[] = $activityValue; } $excelData->push($row); } return $excelData; } public function title(): string { return 'Template'; // Sheet name } public function registerEvents(): array { return [ AfterSheet::class => function (AfterSheet $event) { // Set page properties $event->sheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE); $event->sheet->getPageSetup()->setFitToWidth(1); $event->sheet->getPageSetup()->setFitToHeight(0); $event->sheet->getPageMargins()->setTop(0.5); $event->sheet->getPageMargins()->setBottom(0.5); $event->sheet->getPageMargins()->setLeft(0.5); $event->sheet->getPageMargins()->setRight(0.5); $event->sheet->getPageSetup()->setPaperSize(PageSetup::PAPERSIZE_A4); $event->sheet->getPageSetup()->setHorizontalCentered(true); $event->sheet->getPageSetup()->setVerticalCentered(true); if (!$this->isTemplate) { // Merge cells for title and print date $event->sheet->mergeCells('A1:' . $event->sheet->getHighestColumn() . '1'); $event->sheet->mergeCells('A3:' . $event->sheet->getHighestColumn() . '3'); $event->sheet->mergeCells('A5:' . $event->sheet->getHighestColumn() . '5'); // Set A5 center and bold $event->sheet->getStyle('A5')->applyFromArray([ 'font' => [ 'bold' => true, ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER, ], ]); } // Set alignment and make header row bold and centered $headerRow = $this->isTemplate == 1 ? 'A1' : 'A5'; $valueRow = $this->isTemplate == 1 ? 1 : 6; $event->sheet->getStyle($headerRow . ':' . $event->sheet->getHighestColumn() . $valueRow) ->applyFromArray([ 'font' => [ 'bold' => true, ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER, 'wrapText' => true, // Ensure wrap text is enabled for newlines ], ]); // Apply borders to the table $event->sheet->getDelegate()->getStyle($headerRow . ':' . $event->sheet->getDelegate()->getHighestColumn() . $event->sheet->getDelegate()->getHighestRow()) ->applyFromArray([ 'borders' => [ 'allBorders' => [ 'borderStyle' => Border::BORDER_THIN, 'color' => ['argb' => 'FF000000'], ], ], ]); // Auto size columns starting from A onwards foreach (range('A', $event->sheet->getDelegate()->getHighestColumn()) as $column) { $event->sheet->getDelegate()->getColumnDimension($column)->setAutoSize(true); } // Apply number format to data columns (B onwards) $dataColumns = range('B', $event->sheet->getDelegate()->getHighestColumn()); $valueRow = $this->isTemplate == 1 ? '2' : '7'; foreach ($dataColumns as $column) { $highestRow = $event->sheet->getDelegate()->getHighestRow($column); for ($row = $valueRow; $row <= $highestRow; $row++) { $cellValue = $event->sheet->getCell($column . $row)->getValue(); $formatCode = NumberFormat::FORMAT_GENERAL; if (!$this->isTemplate) { if (is_numeric($cellValue)) { $formatCode = floor($cellValue) != $cellValue ? '#,##0.0###############' : '#,##0'; } } $event->sheet->getStyle($column . $row)->getNumberFormat()->setFormatCode($formatCode); } } $event->sheet->getStyle('A' . $valueRow . ':A' . $event->sheet->getDelegate()->getHighestRow()) ->applyFromArray([ 'font' => [ 'bold' => true, ], ]); if ($this->isTemplate) { foreach ($dataColumns as $column) { $event->sheet->getStyle($column . '2:' . $column . $event->sheet->getDelegate()->getHighestRow()) ->applyFromArray([ 'fill' => [ 'fillType' => Fill::FILL_SOLID, 'color' => ['argb' => 'FFFFFF00'], ], ]); } } }, ]; } }