Andrew Wallo 3 mēnešus atpakaļ
vecāks
revīzija
6b442dd5b2

+ 4
- 0
app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ListInvoices.php Parādīt failu

@@ -7,6 +7,7 @@ use App\Enums\Accounting\InvoiceStatus;
7 7
 use App\Filament\Company\Resources\Sales\InvoiceResource;
8 8
 use App\Filament\Company\Resources\Sales\InvoiceResource\Widgets;
9 9
 use App\Filament\Company\Resources\Sales\RecurringInvoiceResource\Pages\ViewRecurringInvoice;
10
+use App\Filament\Exports\Accounting\InvoiceExporter;
10 11
 use App\Filament\Infolists\Components\BannerEntry;
11 12
 use App\Models\Accounting\RecurringInvoice;
12 13
 use Filament\Actions;
@@ -79,6 +80,9 @@ class ListInvoices extends ListRecords
79 80
     protected function getHeaderActions(): array
80 81
     {
81 82
         return [
83
+            Actions\ExportAction::make()
84
+                ->slideOver()
85
+                ->exporter(InvoiceExporter::class),
82 86
             Actions\Action::make('recordPayments')
83 87
                 ->outlined()
84 88
                 ->url(RecordPayments::getUrl()),

+ 70
- 0
app/Filament/Exports/Accounting/InvoiceExporter.php Parādīt failu

@@ -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
+}

+ 3
- 5
app/Filament/Exports/Accounting/TransactionExporter.php Parādīt failu

@@ -5,7 +5,6 @@ namespace App\Filament\Exports\Accounting;
5 5
 use App\Enums\Accounting\PaymentMethod;
6 6
 use App\Enums\Accounting\TransactionType;
7 7
 use App\Models\Accounting\Transaction;
8
-use Carbon\Carbon;
9 8
 use Filament\Actions\Exports\ExportColumn;
10 9
 use Filament\Actions\Exports\Exporter;
11 10
 use Filament\Actions\Exports\Models\Export;
@@ -18,11 +17,10 @@ class TransactionExporter extends Exporter
18 17
     {
19 18
         return [
20 19
             ExportColumn::make('posted_at')
21
-                ->formatStateUsing(function (?Carbon $state) {
22
-                    return $state?->toDateString();
23
-                }),
20
+                ->date(),
24 21
             ExportColumn::make('description'),
25
-            ExportColumn::make('amount'),
22
+            ExportColumn::make('amount')
23
+                ->money(),
26 24
             ExportColumn::make('account.name')
27 25
                 ->label('Category'),
28 26
             ExportColumn::make('bankAccount.account.name')

+ 29
- 0
app/Providers/MacroServiceProvider.php Parādīt failu

@@ -15,6 +15,7 @@ use App\Utilities\Currency\CurrencyConverter;
15 15
 use BackedEnum;
16 16
 use Carbon\CarbonInterface;
17 17
 use Closure;
18
+use Filament\Actions\Exports\ExportColumn;
18 19
 use Filament\Forms\Components\DatePicker;
19 20
 use Filament\Forms\Components\Field;
20 21
 use Filament\Forms\Components\TextInput;
@@ -475,5 +476,33 @@ class MacroServiceProvider extends ServiceProvider
475 476
 
476 477
             return $this->setTimezone($timezone)->format($dateFormat);
477 478
         });
479
+
480
+        ExportColumn::macro('money', function () {
481
+            $this->formatStateUsing(static function ($state) {
482
+                if (blank($state) || ! is_int($state)) {
483
+                    return 0.00;
484
+                }
485
+
486
+                return CurrencyConverter::convertCentsToFloat($state);
487
+            });
488
+
489
+            return $this;
490
+        });
491
+
492
+        ExportColumn::macro('date', function () {
493
+            $this->formatStateUsing(static function (?Carbon $state) {
494
+                return $state?->toDateString();
495
+            });
496
+
497
+            return $this;
498
+        });
499
+
500
+        ExportColumn::macro('dateTime', function () {
501
+            $this->formatStateUsing(static function (?Carbon $state) {
502
+                return $state?->toDateTimeString();
503
+            });
504
+
505
+            return $this;
506
+        });
478 507
     }
479 508
 }

+ 1
- 1
app/Utilities/Currency/CurrencyConverter.php Parādīt failu

@@ -83,7 +83,7 @@ class CurrencyConverter
83 83
 
84 84
     public static function convertCentsToFloat(int $amount, ?string $currency = null): float
85 85
     {
86
-        $currency ??= CurrencyAccessor::getDefaultCurrency();
86
+        $currency ??= 'USD';
87 87
 
88 88
         return money($amount, $currency)->getValue();
89 89
     }

Notiek ielāde…
Atcelt
Saglabāt