You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BaseReportPage.php 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace App\Filament\Company\Pages\Reports;
  3. use App\Filament\Forms\Components\DateRangeSelect;
  4. use App\Models\Company;
  5. use Filament\Forms\Components\DatePicker;
  6. use Filament\Forms\Components\Split;
  7. use Filament\Forms\Form;
  8. use Filament\Forms\Set;
  9. use Filament\Pages\Page;
  10. use Illuminate\Support\Carbon;
  11. abstract class BaseReportPage extends Page
  12. {
  13. public string $startDate = '';
  14. public string $endDate = '';
  15. public string $dateRange = '';
  16. public string $fiscalYearStartDate = '';
  17. public string $fiscalYearEndDate = '';
  18. public Company $company;
  19. public function mount(): void
  20. {
  21. $this->company = auth()->user()->currentCompany;
  22. $this->fiscalYearStartDate = $this->company->locale->fiscalYearStartDate();
  23. $this->fiscalYearEndDate = $this->company->locale->fiscalYearEndDate();
  24. $this->dateRange = $this->getDefaultDateRange();
  25. $this->setDateRange(Carbon::parse($this->fiscalYearStartDate), Carbon::parse($this->fiscalYearEndDate));
  26. $this->loadReportData();
  27. }
  28. abstract protected function loadReportData(): void;
  29. public function getDefaultDateRange(): string
  30. {
  31. return 'FY-' . now()->year;
  32. }
  33. public function form(Form $form): Form
  34. {
  35. return $form
  36. ->schema([
  37. Split::make([
  38. DateRangeSelect::make('dateRange')
  39. ->label('Date Range')
  40. ->selectablePlaceholder(false)
  41. ->startDateField('startDate')
  42. ->endDateField('endDate'),
  43. DatePicker::make('startDate')
  44. ->label('Start Date')
  45. ->displayFormat('Y-m-d')
  46. ->afterStateUpdated(static function (Set $set) {
  47. $set('dateRange', 'Custom');
  48. }),
  49. DatePicker::make('endDate')
  50. ->label('End Date')
  51. ->displayFormat('Y-m-d')
  52. ->afterStateUpdated(static function (Set $set) {
  53. $set('dateRange', 'Custom');
  54. }),
  55. ])->live(),
  56. ]);
  57. }
  58. public function setDateRange(Carbon $start, Carbon $end): void
  59. {
  60. $this->startDate = $start->format('Y-m-d');
  61. $this->endDate = $end->isFuture() ? now()->format('Y-m-d') : $end->format('Y-m-d');
  62. }
  63. }