template->id; } public function label(): string { return $this->template->name; } public function requiredPermissions(): array { return $this->template->required_permissions ?? []; } public function build(Department $department, DateRange $dateRange): ReportPayload { $sections = []; foreach ($this->template->sections ?? [] as $sectionConfig) { $source = $this->sources->get($sectionConfig['source']); $sections[] = $source->toSection( $department, $dateRange, $sectionConfig['columns'] ?? null, $sectionConfig['filters'] ?? [], $sectionConfig['title'] ?? null, ); } return new ReportPayload( title: $this->template->name, meta: [ 'Отделение' => $department->name_full ?? $department->name_short, 'Период' => $dateRange->start()->format('d.m.Y H:i').' — '.$dateRange->end()->format('d.m.Y H:i'), 'Сформирован' => now('Asia/Yakutsk')->format('d.m.Y H:i'), ], sections: $sections, ); } }