periode_id = $periode_id; $this->kriteria = Kriteria::orderBy('kode')->get(); } private function getKeteranganNilai($kode_kriteria, $nilai) { if (!$nilai) return 0; $keterangan = [ 'C1' => [ 1 => '1 - Tidak bekerja / Buruh harian lepas', 2 => '2 - Petani kecil / Nelayan kecil', 3 => '3 - Pedagang kecil / Wiraswasta kecil', 4 => '4 - Karyawan swasta / PNS Golongan rendah', 5 => '5 - PNS / Profesional / Pengusaha', ], 'C2' => [ 1 => '1 - 1 orang', 2 => '2 - 2 orang', 3 => '3 - 3 orang', 4 => '4 - 4 orang', 5 => '5 - > 4 orang', ], 'C3' => [ 1 => '1 - Sehat, usia produktif', 2 => '2 - Sehat, lanjut usia', 3 => '3 - Sering sakit ringan / Lansia tunggal', 4 => '4 - Sakit menahun / Disabilitas ringan', 5 => '5 - Sakit kronis parah / Disabilitas berat', ], 'C4' => [ 1 => '1 - 20 - 30 tahun', 2 => '2 - 31 - 40 tahun', 3 => '3 - 41 - 50 tahun', 4 => '4 - 51 - 60 tahun', 5 => '5 - > 60 tahun', ], 'C5' => [ 1 => '1 - Belum pernah menerima bantuan', 2 => '2 - Pernah menerima (> 2 tahun lalu)', 3 => '3 - Pernah menerima (1 - 2 tahun lalu)', 4 => '4 - Aktif menerima 1 jenis bantuan', 5 => '5 - Aktif menerima banyak jenis bantuan', ] ]; $nilaiInt = (int) $nilai; return isset($keterangan[$kode_kriteria][$nilaiInt]) ? $keterangan[$kode_kriteria][$nilaiInt] : $nilai; } public function collection() { $wargaDinilai = DB::table('penilaian_warga') ->where('periode_id', $this->periode_id) ->distinct() ->pluck('warga_id'); $penilaian = PenilaianWarga::where('periode_id', $this->periode_id) ->get() ->groupBy('warga_id'); $warga = Warga::whereIn('id', $wargaDinilai)->orderBy('nama')->get(); $data = new Collection(); foreach ($warga as $w) { $row = [ 'nik' => $w->nik, 'nama' => $w->nama, ]; $penilaianWarga = $penilaian->get($w->id)?->keyBy('kriteria_id') ?? collect(); foreach ($this->kriteria as $k) { $nilaiAngka = isset($penilaianWarga[$k->id]) ? $penilaianWarga[$k->id]->nilai : 0; $row[$k->kode] = $this->getKeteranganNilai($k->kode, $nilaiAngka); } $data->push($row); } return $data; } public function headings(): array { $headers = ['NIK', 'Nama Lengkap']; foreach ($this->kriteria as $k) { $headers[] = $k->kode; } return $headers; } public function startCell(): string { return 'A9'; } public function registerEvents(): array { return [ AfterSheet::class => function(AfterSheet $event) { $sheet = $event->sheet->getDelegate(); $sheet->setCellValue('A1', 'PEMERINTAH KABUPATEN MOJOKERTO'); $sheet->setCellValue('A2', 'KECAMATAN PUNGGING'); $sheet->setCellValue('A3', 'DESA PUNGGING'); $sheet->setCellValue('A4', 'Jalan Raya Pungging No. 27 Pungging, Mojokerto, Jawa Timur'); $sheet->setCellValue('A5', 'Kode Pos 61384 Telp. (0321) 532733'); $sheet->setCellValue('A7', 'DATA PENILAIAN WARGA BLT-DD'); $lastColumn = $sheet->getHighestColumn(); for ($i = 1; $i <= 7; $i++) { $sheet->mergeCells("A{$i}:{$lastColumn}{$i}"); } $sheet->getStyle("A1:A7")->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $sheet->getStyle("A1:A3")->getFont()->setBold(true)->setSize(14); $sheet->getStyle("A7")->getFont()->setBold(true)->setSize(12); $sheet->getStyle("A9:{$lastColumn}9")->getFont()->setBold(true); $sheet->getStyle("A9:{$lastColumn}9")->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); foreach (range('A', $lastColumn) as $col) { $sheet->getColumnDimension($col)->setAutoSize(true); } }, ]; } }