company = auth()->user()->currentCompany; $this->fiscalYearStartDate = $this->company->locale->fiscalYearStartDate(); $this->fiscalYearEndDate = $this->company->locale->fiscalYearEndDate(); $this->dateRange = $this->getDefaultDateRange(); $this->setDateRange(Carbon::parse($this->fiscalYearStartDate), Carbon::parse($this->fiscalYearEndDate)); $this->options = ['showAccountCode']; $this->loadReportData(); } abstract public function loadReportData(): void; abstract public function exportCSV(): StreamedResponse; abstract public function exportPDF(): StreamedResponse; public function getDefaultDateRange(): string { return 'FY-' . now()->year; } public function setDateRange(Carbon $start, Carbon $end): void { $this->startDate = $start->format('Y-m-d'); $this->endDate = $end->isFuture() ? now()->format('Y-m-d') : $end->format('Y-m-d'); } protected function getHeaderActions(): array { return [ ActionGroup::make([ Action::make('exportCSV') ->label('CSV') ->action(fn () => $this->exportCSV()), Action::make('exportPDF') ->label('PDF') ->action(fn () => $this->exportPDF()), ]) ->label('Export') ->button() ->outlined() ->dropdownWidth('max-w-[7rem]') ->dropdownPlacement('bottom-end') ->icon('heroicon-c-chevron-down') ->iconSize(IconSize::Small) ->iconPosition(IconPosition::After), ]; } protected function getDateRangeFormComponent(): Component { return DateRangeSelect::make('dateRange') ->label('Date Range') ->selectablePlaceholder(false) ->startDateField('startDate') ->endDateField('endDate'); } protected function getStartDateFormComponent(): Component { return DatePicker::make('startDate') ->label('Start Date') ->displayFormat('Y-m-d') ->afterStateUpdated(static function (Set $set) { $set('dateRange', 'Custom'); }); } protected function getEndDateFormComponent(): Component { return DatePicker::make('endDate') ->label('End Date') ->displayFormat('Y-m-d') ->afterStateUpdated(static function (Set $set) { $set('dateRange', 'Custom'); }); } }