|  | @@ -0,0 +1,70 @@
 | 
		
	
		
			
			|  | 1 | +<?php
 | 
		
	
		
			
			|  | 2 | +
 | 
		
	
		
			
			|  | 3 | +namespace App\Filament\Exports\Accounting;
 | 
		
	
		
			
			|  | 4 | +
 | 
		
	
		
			
			|  | 5 | +use App\Enums\Accounting\InvoiceStatus;
 | 
		
	
		
			
			|  | 6 | +use App\Models\Accounting\Invoice;
 | 
		
	
		
			
			|  | 7 | +use Filament\Actions\Exports\ExportColumn;
 | 
		
	
		
			
			|  | 8 | +use Filament\Actions\Exports\Exporter;
 | 
		
	
		
			
			|  | 9 | +use Filament\Actions\Exports\Models\Export;
 | 
		
	
		
			
			|  | 10 | +
 | 
		
	
		
			
			|  | 11 | +class InvoiceExporter extends Exporter
 | 
		
	
		
			
			|  | 12 | +{
 | 
		
	
		
			
			|  | 13 | +    protected static ?string $model = Invoice::class;
 | 
		
	
		
			
			|  | 14 | +
 | 
		
	
		
			
			|  | 15 | +    public static function getColumns(): array
 | 
		
	
		
			
			|  | 16 | +    {
 | 
		
	
		
			
			|  | 17 | +        return [
 | 
		
	
		
			
			|  | 18 | +            ExportColumn::make('invoice_number'),
 | 
		
	
		
			
			|  | 19 | +            ExportColumn::make('date')
 | 
		
	
		
			
			|  | 20 | +                ->date(),
 | 
		
	
		
			
			|  | 21 | +            ExportColumn::make('due_date')
 | 
		
	
		
			
			|  | 22 | +                ->date(),
 | 
		
	
		
			
			|  | 23 | +            ExportColumn::make('client.name'),
 | 
		
	
		
			
			|  | 24 | +            ExportColumn::make('status')
 | 
		
	
		
			
			|  | 25 | +                ->formatStateUsing(function (?InvoiceStatus $state) {
 | 
		
	
		
			
			|  | 26 | +                    return $state?->getLabel();
 | 
		
	
		
			
			|  | 27 | +                }),
 | 
		
	
		
			
			|  | 28 | +            ExportColumn::make('total')
 | 
		
	
		
			
			|  | 29 | +                ->money(),
 | 
		
	
		
			
			|  | 30 | +            ExportColumn::make('amount_paid')
 | 
		
	
		
			
			|  | 31 | +                ->money(),
 | 
		
	
		
			
			|  | 32 | +            ExportColumn::make('amount_due')
 | 
		
	
		
			
			|  | 33 | +                ->money(),
 | 
		
	
		
			
			|  | 34 | +            ExportColumn::make('subtotal')
 | 
		
	
		
			
			|  | 35 | +                ->money(),
 | 
		
	
		
			
			|  | 36 | +            ExportColumn::make('tax_total')
 | 
		
	
		
			
			|  | 37 | +                ->money(),
 | 
		
	
		
			
			|  | 38 | +            ExportColumn::make('discount_total')
 | 
		
	
		
			
			|  | 39 | +                ->money(),
 | 
		
	
		
			
			|  | 40 | +            ExportColumn::make('discount_rate'),
 | 
		
	
		
			
			|  | 41 | +            ExportColumn::make('currency_code'),
 | 
		
	
		
			
			|  | 42 | +            ExportColumn::make('order_number'),
 | 
		
	
		
			
			|  | 43 | +            ExportColumn::make('approved_at')
 | 
		
	
		
			
			|  | 44 | +                ->dateTime(),
 | 
		
	
		
			
			|  | 45 | +            ExportColumn::make('paid_at')
 | 
		
	
		
			
			|  | 46 | +                ->dateTime(),
 | 
		
	
		
			
			|  | 47 | +            ExportColumn::make('last_sent_at')
 | 
		
	
		
			
			|  | 48 | +                ->dateTime(),
 | 
		
	
		
			
			|  | 49 | +            ExportColumn::make('estimate.estimate_number')
 | 
		
	
		
			
			|  | 50 | +                ->label('Estimate number')
 | 
		
	
		
			
			|  | 51 | +                ->enabledByDefault(false),
 | 
		
	
		
			
			|  | 52 | +            ExportColumn::make('recurringInvoice.order_number')
 | 
		
	
		
			
			|  | 53 | +                ->label('Recurring invoice number')
 | 
		
	
		
			
			|  | 54 | +                ->enabledByDefault(false),
 | 
		
	
		
			
			|  | 55 | +            ExportColumn::make('discount_method')
 | 
		
	
		
			
			|  | 56 | +                ->enabledByDefault(false),
 | 
		
	
		
			
			|  | 57 | +        ];
 | 
		
	
		
			
			|  | 58 | +    }
 | 
		
	
		
			
			|  | 59 | +
 | 
		
	
		
			
			|  | 60 | +    public static function getCompletedNotificationBody(Export $export): string
 | 
		
	
		
			
			|  | 61 | +    {
 | 
		
	
		
			
			|  | 62 | +        $body = 'Your invoice export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
 | 
		
	
		
			
			|  | 63 | +
 | 
		
	
		
			
			|  | 64 | +        if ($failedRowsCount = $export->getFailedRowsCount()) {
 | 
		
	
		
			
			|  | 65 | +            $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
 | 
		
	
		
			
			|  | 66 | +        }
 | 
		
	
		
			
			|  | 67 | +
 | 
		
	
		
			
			|  | 68 | +        return $body;
 | 
		
	
		
			
			|  | 69 | +    }
 | 
		
	
		
			
			|  | 70 | +}
 |