ResolutionExport.php
1 <?php 2 3 namespace App\Exports; 4 5 use Illuminate\Database\Eloquent\Collection; 6 use Maatwebsite\Excel\Concerns\FromCollection; 7 use Maatwebsite\Excel\Concerns\ShouldAutoSize; 8 use Maatwebsite\Excel\Concerns\WithEvents; 9 use Maatwebsite\Excel\Concerns\WithHeadings; 10 use Maatwebsite\Excel\Concerns\WithMapping; 11 use Maatwebsite\Excel\Concerns\WithProperties; 12 use Maatwebsite\Excel\Events\AfterSheet; 13 14 class ResolutionExport implements ShouldAutoSize, WithMapping, FromCollection, WithHeadings, WithEvents, WithProperties 15 { 16 public function __construct(public Collection $resolutions) 17 { 18 } 19 20 /** 21 * @return \Illuminate\Support\Collection 22 */ 23 public function collection() 24 { 25 return $this->resolutions; 26 } 27 28 public function headings(): array 29 { 30 return [ 31 __('resolutions.table.resolution_number'), 32 __('resolutions.table.approve'), 33 __('resolutions.table.resolution_date'), 34 __('resolutions.table.dossier_code'), 35 __('resolutions.table.certification_report'), 36 __('resolutions.table.resolution_proposal'), 37 __('resolutions.table.BOE_code'), 38 __('resolutions.table.publication_date'), 39 __('resolutions.table.certificate_date'), 40 __('resolutions.table.created_at'), 41 ]; 42 } 43 44 public function map($resolution): array 45 { 46 $approved = match ($resolution->approved) { 47 true => __('resolutions.panel.status.approved'), 48 false => __('resolutions.panel.status.rejected'), 49 default => 'N/A' 50 }; 51 52 $boeCode = match (true) { 53 $resolution->approved === true && $resolution->BOE_code => $resolution->BOE_code, 54 $resolution->BOE_code && ! $resolution->approved => __('resolutions.panel.status.not_applicable'), 55 default => 'N/A' 56 }; 57 58 return [ 59 $resolution->resolutionNumber, 60 $approved, 61 $resolution->resolution_date?->format('d/m/Y H:m:s') ?? 'N/A', 62 $resolution->dossier->code, 63 $resolution->inforCert?->name ?? 'N/A', 64 $resolution->resolvedDoc?->name ?? 'N/A', 65 $boeCode, 66 $resolution->publication_date?->format('d/m/Y H:m:s') ?? 'N/A', 67 $resolution->certification_date?->format('d/m/Y H:m:s') ?? 'N/A', 68 $resolution->created_at->format('d/m/Y H:m:s'), 69 ]; 70 } 71 72 public function registerEvents(): array 73 { 74 return [ 75 AfterSheet::class => function (AfterSheet $event) { 76 $event->sheet->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE); 77 $event->sheet->setPaperSize(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::PAPERSIZE_A4); 78 $event->sheet->setFitToPage(true); 79 }, 80 ]; 81 } 82 83 public function properties(): array 84 { 85 return [ 86 'creator' => 'OC', 87 'lastModifiedBy' => 'OC', 88 'title' => 'Lista de Resoluciones', 89 'description' => 'Lista de Resoluciones', 90 'subject' => 'Resoluciones', 91 'keywords' => 'resoluciones,export,lista', 92 'category' => 'Resoluciones', 93 'company' => 'OC', 94 ]; 95 } 96 }