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.

TransactionExporter.php 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace App\Filament\Exports\Accounting;
  3. use App\Enums\Accounting\PaymentMethod;
  4. use App\Enums\Accounting\TransactionType;
  5. use App\Models\Accounting\Transaction;
  6. use Carbon\Carbon;
  7. use Filament\Actions\Exports\ExportColumn;
  8. use Filament\Actions\Exports\Exporter;
  9. use Filament\Actions\Exports\Models\Export;
  10. class TransactionExporter extends Exporter
  11. {
  12. protected static ?string $model = Transaction::class;
  13. public static function getColumns(): array
  14. {
  15. return [
  16. ExportColumn::make('posted_at')
  17. ->formatStateUsing(function (?Carbon $state) {
  18. return $state?->toDateString();
  19. }),
  20. ExportColumn::make('description'),
  21. ExportColumn::make('amount'),
  22. ExportColumn::make('account.name')
  23. ->label('Category'),
  24. ExportColumn::make('bankAccount.account.name')
  25. ->label('Account'),
  26. ExportColumn::make('type')
  27. ->formatStateUsing(function (?TransactionType $state) {
  28. return $state?->getLabel();
  29. }),
  30. ExportColumn::make('payeeable.name')
  31. ->label('Payee'),
  32. ExportColumn::make('payment_method')
  33. ->formatStateUsing(function (?PaymentMethod $state) {
  34. return $state?->getLabel();
  35. }),
  36. ExportColumn::make('notes')
  37. ->enabledByDefault(false),
  38. ExportColumn::make('transactionable_type')
  39. ->label('Source type')
  40. ->formatStateUsing(static function ($state) {
  41. return class_basename($state);
  42. })
  43. ->enabledByDefault(false),
  44. ExportColumn::make('payeeable_type')
  45. ->label('Payee type')
  46. ->formatStateUsing(static function ($state) {
  47. return class_basename($state);
  48. })
  49. ->enabledByDefault(false),
  50. ExportColumn::make('is_payment')
  51. ->enabledByDefault(false),
  52. ExportColumn::make('reviewed')
  53. ->enabledByDefault(false),
  54. ];
  55. }
  56. public static function getCompletedNotificationBody(Export $export): string
  57. {
  58. $body = 'Your transaction export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
  59. if ($failedRowsCount = $export->getFailedRowsCount()) {
  60. $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
  61. }
  62. return $body;
  63. }
  64. }