/ app / Exports / MilestoneExport.php
MilestoneExport.php
 1  <?php
 2  
 3  namespace App\Exports;
 4  
 5  use App\Enums\StatusEnum;
 6  use App\Enums\ValidationStatusEnum;
 7  use App\Models\Dossier;
 8  use Illuminate\Database\Eloquent\Collection;
 9  use Maatwebsite\Excel\Concerns\ShouldAutoSize;
10  use Illuminate\Contracts\View\View;
11  use Maatwebsite\Excel\Concerns\FromView;
12  
13  class MilestoneExport implements FromView, ShouldAutoSize
14  {
15  
16      public function __construct(public Dossier $dossier, public Collection $milestones)
17      {
18          $milestones->map(function ($milestone) {
19              $milestone->bgColor = $this->getBgColor($milestone);
20          });
21      }
22  
23      private function getBgColor($milestone): string
24      {
25          $isFinished = $milestone->task_status_id === StatusEnum::finished()->value;
26          if (!$isFinished) {
27              return '';
28          }
29  
30          $validationStatusId = $milestone->milestoneValidation->validation_status_id ?? null;
31          return match ($validationStatusId) {
32              ValidationStatusEnum::no_pass()->value => "background-color:#ffc7ce;",
33              default => "background-color:#c6efce;",
34          };
35      }
36  
37      public function headings(): array
38      {
39          return [
40              __('tasks.task.panel.form.title'),
41              __('tasks.task.panel.form.end_date'),
42              __('tasks.task.panel.form.status'),
43          ];
44      }
45  
46      public function view(): View
47      {
48          return view('exports.milestones', [
49              'headings' => $this->headings(),
50              'dossierCode' => $this->dossier->code,
51              'milestones' => $this->milestones
52          ]);
53      }
54  }