/ app / Exports / ResolutionExport.php
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  }