Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

VendorExporter.php 3.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Filament\Exports\Common;
  3. use App\Enums\Accounting\BillStatus;
  4. use App\Models\Common\Vendor;
  5. use Filament\Actions\Exports\ExportColumn;
  6. use Filament\Actions\Exports\Exporter;
  7. use Filament\Actions\Exports\Models\Export;
  8. class VendorExporter extends Exporter
  9. {
  10. protected static ?string $model = Vendor::class;
  11. public static function getColumns(): array
  12. {
  13. return [
  14. ExportColumn::make('name'),
  15. ExportColumn::make('type')
  16. ->enum(),
  17. ExportColumn::make('contractor_type')
  18. ->enum(),
  19. ExportColumn::make('account_number'),
  20. ExportColumn::make('contact.full_name')
  21. ->label('Primary contact'),
  22. ExportColumn::make('contact.email')
  23. ->label('Email'),
  24. ExportColumn::make('contact.first_available_phone')
  25. ->label('Phone'),
  26. ExportColumn::make('currency_code'),
  27. ExportColumn::make('balance')
  28. ->state(function (Vendor $record) {
  29. return $record->bills()
  30. ->unpaid()
  31. ->get()
  32. ->sumMoneyInDefaultCurrency('amount_due');
  33. })
  34. ->money(),
  35. ExportColumn::make('overdue_amount')
  36. ->state(function (Vendor $record) {
  37. return $record->bills()
  38. ->where('status', BillStatus::Overdue)
  39. ->get()
  40. ->sumMoneyInDefaultCurrency('amount_due');
  41. })
  42. ->money(),
  43. ExportColumn::make('address.address_string')
  44. ->label('Address')
  45. ->enabledByDefault(false),
  46. ExportColumn::make('address.address_line_1')
  47. ->label('Address line 1'),
  48. ExportColumn::make('address.address_line_2')
  49. ->label('Address line 2'),
  50. ExportColumn::make('address.city')
  51. ->label('City'),
  52. ExportColumn::make('address.state.name')
  53. ->label('State'),
  54. ExportColumn::make('address.postal_code')
  55. ->label('Postal code'),
  56. ExportColumn::make('address.country.name')
  57. ->label('Country'),
  58. ExportColumn::make('ssn')
  59. ->label('SSN')
  60. ->enabledByDefault(false),
  61. ExportColumn::make('ein')
  62. ->label('EIN')
  63. ->enabledByDefault(false),
  64. ExportColumn::make('website')
  65. ->enabledByDefault(false),
  66. ExportColumn::make('notes')
  67. ->enabledByDefault(false),
  68. ];
  69. }
  70. public static function getCompletedNotificationBody(Export $export): string
  71. {
  72. $body = 'Your vendor export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
  73. if ($failedRowsCount = $export->getFailedRowsCount()) {
  74. $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
  75. }
  76. return $body;
  77. }
  78. }