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.

BalanceSheet.php 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Filament\Company\Pages\Reports;
  3. use App\Contracts\ExportableReport;
  4. use App\DTO\ReportDTO;
  5. use App\Filament\Company\Pages\Concerns\HasReportTabs;
  6. use App\Filament\Forms\Components\DateRangeSelect;
  7. use App\Services\ExportService;
  8. use App\Services\ReportService;
  9. use App\Support\Column;
  10. use App\Transformers\BalanceSheetReportTransformer;
  11. use Filament\Forms\Form;
  12. use Filament\Support\Enums\Alignment;
  13. use Symfony\Component\HttpFoundation\StreamedResponse;
  14. class BalanceSheet extends BaseReportPage
  15. {
  16. use HasReportTabs;
  17. protected static string $view = 'filament.company.pages.reports.balance-sheet';
  18. protected ReportService $reportService;
  19. protected ExportService $exportService;
  20. public function boot(ReportService $reportService, ExportService $exportService): void
  21. {
  22. $this->reportService = $reportService;
  23. $this->exportService = $exportService;
  24. }
  25. public function getTable(): array
  26. {
  27. return [
  28. Column::make('account_code')
  29. ->label('ACCOUNT CODE')
  30. ->toggleable(isToggledHiddenByDefault: true)
  31. ->alignment(Alignment::Left),
  32. Column::make('account_name')
  33. ->label('ACCOUNTS')
  34. ->alignment(Alignment::Left),
  35. Column::make('ending_balance')
  36. ->label($this->getDisplayAsOfDate())
  37. ->alignment(Alignment::Right),
  38. ];
  39. }
  40. public function filtersForm(Form $form): Form
  41. {
  42. return $form
  43. ->inlineLabel()
  44. ->columns(3)
  45. ->schema([
  46. DateRangeSelect::make('dateRange')
  47. ->label('As of')
  48. ->selectablePlaceholder(false)
  49. ->endDateField('asOfDate'),
  50. $this->getAsOfDateFormComponent()
  51. ->hiddenLabel()
  52. ->extraFieldWrapperAttributes([]),
  53. ]);
  54. }
  55. protected function buildReport(array $columns): ReportDTO
  56. {
  57. return $this->reportService->buildBalanceSheetReport($this->getFormattedAsOfDate(), $columns);
  58. }
  59. protected function getTransformer(ReportDTO $reportDTO): ExportableReport
  60. {
  61. return new BalanceSheetReportTransformer($reportDTO);
  62. }
  63. public function exportCSV(): StreamedResponse
  64. {
  65. return $this->exportService->exportToCsv($this->company, $this->report, endDate: $this->getFilterState('asOfDate'), activeTab: $this->getActiveTab());
  66. }
  67. public function exportPDF(): StreamedResponse
  68. {
  69. return $this->exportService->exportToPdf($this->company, $this->report, endDate: $this->getFilterState('asOfDate'), activeTab: $this->getActiveTab());
  70. }
  71. }