Andrew Wallo 8 mēnešus atpakaļ
vecāks
revīzija
3212fe619c

+ 1
- 0
app/DTO/EntityReportDTO.php Parādīt failu

@@ -9,5 +9,6 @@ readonly class EntityReportDTO
9 9
         public string $id,
10 10
         public ?AgingBucketDTO $aging = null,
11 11
         public ?EntityBalanceDTO $balance = null,
12
+        public ?PaymentMetricsDTO $paymentMetrics = null,
12 13
     ) {}
13 14
 }

+ 15
- 0
app/DTO/PaymentMetricsDTO.php Parādīt failu

@@ -0,0 +1,15 @@
1
+<?php
2
+
3
+namespace App\DTO;
4
+
5
+readonly class PaymentMetricsDTO
6
+{
7
+    public function __construct(
8
+        public int $totalDocuments,
9
+        public ?int $onTimeCount,
10
+        public ?int $lateCount,
11
+        public ?int $avgDaysToPay,
12
+        public ?int $avgDaysLate,
13
+        public string $onTimePaymentRate,
14
+    ) {}
15
+}

+ 1
- 0
app/DTO/ReportDTO.php Parādīt failu

@@ -14,6 +14,7 @@ class ReportDTO
14 14
         public ?AccountBalanceDTO $overallTotal = null,
15 15
         public ?AgingBucketDTO $agingSummary = null,
16 16
         public ?EntityBalanceDTO $entityBalanceTotal = null,
17
+        public ?PaymentMetricsDTO $overallPaymentMetrics = null,
17 18
         public array $fields = [],
18 19
         public ?string $reportType = null,
19 20
         public ?CashFlowOverviewDTO $overview = null,

+ 8
- 0
app/Enums/Accounting/DocumentEntityType.php Parādīt failu

@@ -29,4 +29,12 @@ enum DocumentEntityType: string implements HasLabel
29 29
             self::Vendor => 'Vendor Balance Summary',
30 30
         };
31 31
     }
32
+
33
+    public function getPaymentPerformanceReportTitle(): string
34
+    {
35
+        return match ($this) {
36
+            self::Client => 'Client Payment Performance',
37
+            self::Vendor => 'Vendor Payment Performance',
38
+        };
39
+    }
32 40
 }

+ 6
- 0
app/Enums/Accounting/DocumentType.php Parādīt failu

@@ -5,6 +5,7 @@ namespace App\Enums\Accounting;
5 5
 use App\DTO\DocumentLabelDTO;
6 6
 use Filament\Support\Contracts\HasIcon;
7 7
 use Filament\Support\Contracts\HasLabel;
8
+use Illuminate\Support\Str;
8 9
 
9 10
 enum DocumentType: string implements HasIcon, HasLabel
10 11
 {
@@ -23,6 +24,11 @@ enum DocumentType: string implements HasIcon, HasLabel
23 24
         };
24 25
     }
25 26
 
27
+    public function getPluralLabel(): ?string
28
+    {
29
+        return Str::plural($this->getLabel());
30
+    }
31
+
26 32
     public function getIcon(): ?string
27 33
     {
28 34
         return match ($this->value) {

+ 16
- 0
app/Filament/Company/Pages/Reports.php Parādīt failu

@@ -9,9 +9,11 @@ use App\Filament\Company\Pages\Reports\AccountTransactions;
9 9
 use App\Filament\Company\Pages\Reports\BalanceSheet;
10 10
 use App\Filament\Company\Pages\Reports\CashFlowStatement;
11 11
 use App\Filament\Company\Pages\Reports\ClientBalanceSummary;
12
+use App\Filament\Company\Pages\Reports\ClientPaymentPerformance;
12 13
 use App\Filament\Company\Pages\Reports\IncomeStatement;
13 14
 use App\Filament\Company\Pages\Reports\TrialBalance;
14 15
 use App\Filament\Company\Pages\Reports\VendorBalanceSummary;
16
+use App\Filament\Company\Pages\Reports\VendorPaymentPerformance;
15 17
 use App\Filament\Infolists\Components\ReportEntry;
16 18
 use Filament\Infolists\Components\Section;
17 19
 use Filament\Infolists\Infolist;
@@ -95,6 +97,13 @@ class Reports extends Page
95 97
                             ->icon('heroicon-o-receipt-percent')
96 98
                             ->iconColor(Color::Emerald)
97 99
                             ->url(ClientBalanceSummary::getUrl()),
100
+                        ReportEntry::make('client_payment_performance')
101
+                            ->hiddenLabel()
102
+                            ->heading('Client Payment Performance')
103
+                            ->description('Analyzes payment behavior showing average days to pay, on-time payment rates, and late payment patterns for each client.')
104
+                            ->icon('heroicon-o-clock')
105
+                            ->iconColor(Color::Fuchsia)
106
+                            ->url(ClientPaymentPerformance::getUrl()),
98 107
                     ]),
99 108
                 Section::make('Vendor Reports')
100 109
                     ->aside()
@@ -115,6 +124,13 @@ class Reports extends Page
115 124
                             ->icon('heroicon-o-banknotes')
116 125
                             ->iconColor(Color::Orange)
117 126
                             ->url(VendorBalanceSummary::getUrl()),
127
+                        ReportEntry::make('vendor_payment_performance')
128
+                            ->hiddenLabel()
129
+                            ->heading('Vendor Payment Performance')
130
+                            ->description('Analyzes payment behavior showing average days to pay, on-time payment rates, and late payment patterns for each vendor.')
131
+                            ->icon('heroicon-o-clock')
132
+                            ->iconColor(Color::Violet)
133
+                            ->url(VendorPaymentPerformance::getUrl()),
118 134
                     ]),
119 135
                 Section::make('Detailed Reports')
120 136
                     ->aside()

+ 121
- 0
app/Filament/Company/Pages/Reports/BaseEntityPaymentPerformanceReportPage.php Parādīt failu

@@ -0,0 +1,121 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Pages\Reports;
4
+
5
+use App\Contracts\ExportableReport;
6
+use App\DTO\ReportDTO;
7
+use App\Enums\Accounting\DocumentEntityType;
8
+use App\Enums\Accounting\DocumentType;
9
+use App\Services\ExportService;
10
+use App\Services\ReportService;
11
+use App\Support\Column;
12
+use App\Transformers\EntityPaymentPerformanceReportTransformer;
13
+use Filament\Forms\Form;
14
+use Filament\Support\Enums\Alignment;
15
+use Guava\FilamentClusters\Forms\Cluster;
16
+use Symfony\Component\HttpFoundation\StreamedResponse;
17
+
18
+abstract class BaseEntityPaymentPerformanceReportPage extends BaseReportPage
19
+{
20
+    protected static string $view = 'filament.company.pages.reports.detailed-report';
21
+
22
+    protected ReportService $reportService;
23
+
24
+    protected ExportService $exportService;
25
+
26
+    abstract protected function getEntityType(): DocumentEntityType;
27
+
28
+    public function boot(ReportService $reportService, ExportService $exportService): void
29
+    {
30
+        $this->reportService = $reportService;
31
+        $this->exportService = $exportService;
32
+    }
33
+
34
+    public function getDocumentType(): DocumentType
35
+    {
36
+        return match ($this->getEntityType()) {
37
+            DocumentEntityType::Client => DocumentType::Invoice,
38
+            DocumentEntityType::Vendor => DocumentType::Bill,
39
+        };
40
+    }
41
+
42
+    public function getTable(): array
43
+    {
44
+        return [
45
+            Column::make('entity_name')
46
+                ->label($this->getEntityType()->getLabel())
47
+                ->alignment(Alignment::Left),
48
+            Column::make('total_documents')
49
+                ->label("Total {$this->getDocumentType()->getPluralLabel()}")
50
+                ->alignment(Alignment::Right),
51
+            Column::make('on_time_count')
52
+                ->label('Paid On Time')
53
+                ->toggleable()
54
+                ->alignment(Alignment::Right),
55
+            Column::make('late_count')
56
+                ->label('Paid Late')
57
+                ->toggleable()
58
+                ->alignment(Alignment::Right),
59
+            Column::make('avg_days_to_pay')
60
+                ->label('Avg. Days to Pay')
61
+                ->toggleable()
62
+                ->alignment(Alignment::Right),
63
+            Column::make('avg_days_late')
64
+                ->label('Avg. Days Late')
65
+                ->toggleable()
66
+                ->alignment(Alignment::Right),
67
+            Column::make('on_time_payment_rate')
68
+                ->label('On Time Rate')
69
+                ->alignment(Alignment::Right),
70
+        ];
71
+    }
72
+
73
+    public function filtersForm(Form $form): Form
74
+    {
75
+        return $form
76
+            ->inlineLabel()
77
+            ->columns()
78
+            ->schema([
79
+                $this->getDateRangeFormComponent(),
80
+                Cluster::make([
81
+                    $this->getStartDateFormComponent(),
82
+                    $this->getEndDateFormComponent(),
83
+                ])->hiddenLabel(),
84
+            ]);
85
+    }
86
+
87
+    protected function buildReport(array $columns): ReportDTO
88
+    {
89
+        return $this->reportService->buildEntityPaymentPerformanceReport(
90
+            startDate: $this->getFormattedStartDate(),
91
+            endDate: $this->getFormattedEndDate(),
92
+            entityType: $this->getEntityType(),
93
+            columns: $columns
94
+        );
95
+    }
96
+
97
+    protected function getTransformer(ReportDTO $reportDTO): ExportableReport
98
+    {
99
+        return new EntityPaymentPerformanceReportTransformer($reportDTO, $this->getEntityType());
100
+    }
101
+
102
+    public function exportCSV(): StreamedResponse
103
+    {
104
+        return $this->exportService->exportToCsv(
105
+            $this->company,
106
+            $this->report,
107
+            $this->getFilterState('startDate'),
108
+            $this->getFilterState('endDate')
109
+        );
110
+    }
111
+
112
+    public function exportPDF(): StreamedResponse
113
+    {
114
+        return $this->exportService->exportToPdf(
115
+            $this->company,
116
+            $this->report,
117
+            $this->getFilterState('startDate'),
118
+            $this->getFilterState('endDate')
119
+        );
120
+    }
121
+}

+ 13
- 0
app/Filament/Company/Pages/Reports/ClientPaymentPerformance.php Parādīt failu

@@ -0,0 +1,13 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Pages\Reports;
4
+
5
+use App\Enums\Accounting\DocumentEntityType;
6
+
7
+class ClientPaymentPerformance extends BaseEntityPaymentPerformanceReportPage
8
+{
9
+    protected function getEntityType(): DocumentEntityType
10
+    {
11
+        return DocumentEntityType::Client;
12
+    }
13
+}

+ 13
- 0
app/Filament/Company/Pages/Reports/VendorPaymentPerformance.php Parādīt failu

@@ -0,0 +1,13 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Pages\Reports;
4
+
5
+use App\Enums\Accounting\DocumentEntityType;
6
+
7
+class VendorPaymentPerformance extends BaseEntityPaymentPerformanceReportPage
8
+{
9
+    protected function getEntityType(): DocumentEntityType
10
+    {
11
+        return DocumentEntityType::Vendor;
12
+    }
13
+}

+ 1
- 1
app/Filament/Company/Resources/Sales/InvoiceResource/Widgets/InvoiceOverview.php Parādīt failu

@@ -53,7 +53,7 @@ class InvoiceOverview extends EnhancedStatsOverviewWidget
53 53
 
54 54
         $averagePaymentTime = $this->getPageTableQuery()
55 55
             ->whereNotNull('paid_at')
56
-            ->selectRaw('AVG(TIMESTAMPDIFF(DAY, date, paid_at)) as avg_days')
56
+            ->selectRaw('AVG(TIMESTAMPDIFF(DAY, approved_at, paid_at)) as avg_days')
57 57
             ->value('avg_days');
58 58
 
59 59
         $averagePaymentTimeFormatted = Number::format($averagePaymentTime ?? 0, maxPrecision: 1);

+ 117
- 9
app/Services/ReportService.php Parādīt failu

@@ -13,6 +13,7 @@ use App\DTO\AgingBucketDTO;
13 13
 use App\DTO\CashFlowOverviewDTO;
14 14
 use App\DTO\EntityBalanceDTO;
15 15
 use App\DTO\EntityReportDTO;
16
+use App\DTO\PaymentMetricsDTO;
16 17
 use App\DTO\ReportDTO;
17 18
 use App\Enums\Accounting\AccountCategory;
18 19
 use App\Enums\Accounting\AccountType;
@@ -30,6 +31,7 @@ use App\Utilities\Currency\CurrencyConverter;
30 31
 use App\ValueObjects\Money;
31 32
 use Illuminate\Database\Eloquent\Builder;
32 33
 use Illuminate\Support\Carbon;
34
+use Illuminate\Support\Number;
33 35
 
34 36
 class ReportService
35 37
 {
@@ -844,7 +846,6 @@ class ReportService
844 846
     ): ReportDTO {
845 847
         $asOfDateCarbon = Carbon::parse($asOfDate);
846 848
 
847
-        /** @var DocumentCollection<int,DocumentCollection<int,Invoice|Bill>> $documents */
848 849
         $documents = $entityType === DocumentEntityType::Client
849 850
             ? $this->accountService->getUnpaidClientInvoices($asOfDate)->with(['client:id,name'])->get()->groupBy('client_id')
850 851
             : $this->accountService->getUnpaidVendorBills($asOfDate)->with(['vendor:id,name'])->get()->groupBy('vendor_id');
@@ -859,6 +860,7 @@ class ReportService
859 860
         $totalAging['over_periods'] = 0;
860 861
         $totalAging['total'] = 0;
861 862
 
863
+        /** @var DocumentCollection<int,Invoice|Bill> $entityDocuments */
862 864
         foreach ($documents as $entityId => $entityDocuments) {
863 865
             $aging = [
864 866
                 'current' => $entityDocuments
@@ -909,8 +911,8 @@ class ReportService
909 911
 
910 912
     public function buildEntityBalanceSummaryReport(string $startDate, string $endDate, DocumentEntityType $entityType, array $columns = []): ReportDTO
911 913
     {
912
-        $documents = $entityType === DocumentEntityType::Client
913
-            ? Invoice::query()
914
+        $documents = match ($entityType) {
915
+            DocumentEntityType::Client => Invoice::query()
914 916
                 ->whereBetween('date', [$startDate, $endDate])
915 917
                 ->whereNotIn('status', [
916 918
                     InvoiceStatus::Draft,
@@ -919,15 +921,14 @@ class ReportService
919 921
                 ->whereNotNull('approved_at')
920 922
                 ->with(['client:id,name'])
921 923
                 ->get()
922
-                ->groupBy('client_id')
923
-            : Bill::query()
924
+                ->groupBy('client_id'),
925
+            DocumentEntityType::Vendor => Bill::query()
924 926
                 ->whereBetween('date', [$startDate, $endDate])
925
-                ->whereNotIn('status', [
926
-                    BillStatus::Void,
927
-                ])
927
+                ->whereNot('status', BillStatus::Void)
928 928
                 ->with(['vendor:id,name'])
929 929
                 ->get()
930
-                ->groupBy('vendor_id');
930
+                ->groupBy('vendor_id'),
931
+        };
931 932
 
932 933
         $entities = [];
933 934
         $totalBalance = 0;
@@ -980,4 +981,111 @@ class ReportService
980 981
             endDate: Carbon::parse($endDate),
981 982
         );
982 983
     }
984
+
985
+    public function buildEntityPaymentPerformanceReport(
986
+        string $startDate,
987
+        string $endDate,
988
+        DocumentEntityType $entityType,
989
+        array $columns = []
990
+    ): ReportDTO {
991
+        $documents = match ($entityType) {
992
+            DocumentEntityType::Client => Invoice::query()
993
+                ->whereBetween('date', [$startDate, $endDate])
994
+                ->whereNotIn('status', [InvoiceStatus::Draft, InvoiceStatus::Void])
995
+                ->whereNotNull('approved_at')
996
+                ->whereNotNull('paid_at')
997
+                ->with(['client:id,name'])
998
+                ->get()
999
+                ->groupBy('client_id'),
1000
+            DocumentEntityType::Vendor => Bill::query()
1001
+                ->whereBetween('date', [$startDate, $endDate])
1002
+                ->whereNotIn('status', [BillStatus::Void])
1003
+                ->whereNotNull('paid_at')
1004
+                ->with(['vendor:id,name'])
1005
+                ->get()
1006
+                ->groupBy('vendor_id'),
1007
+        };
1008
+
1009
+        $categories = [];
1010
+        $totalDocs = 0;
1011
+        $totalOnTime = 0;
1012
+        $totalLate = 0;
1013
+        $allPaymentDays = [];
1014
+        $allLateDays = [];
1015
+
1016
+        /** @var DocumentCollection<int,Invoice|Bill> $entityDocuments */
1017
+        foreach ($documents as $entityId => $entityDocuments) {
1018
+            $entity = $entityDocuments->first()->{$entityType->value};
1019
+
1020
+            $onTimeDocs = $entityDocuments->filter(fn (Invoice | Bill $doc) => $doc->paid_at->lte($doc->due_date));
1021
+            $onTimeCount = $onTimeDocs->count();
1022
+
1023
+            $lateDocs = $entityDocuments->filter(fn (Invoice | Bill $doc) => $doc->paid_at->gt($doc->due_date));
1024
+            $lateCount = $lateDocs->count();
1025
+
1026
+            $avgDaysToPay = $entityDocuments->avg(
1027
+                fn (Invoice | Bill $doc) => $doc instanceof Invoice
1028
+                    ? $doc->approved_at->diffInDays($doc->paid_at)
1029
+                    : $doc->date->diffInDays($doc->paid_at)
1030
+            ) ?? 0;
1031
+
1032
+            $avgDaysLate = $lateDocs->avg(fn (Invoice | Bill $doc) => $doc->due_date->diffInDays($doc->paid_at)) ?? 0;
1033
+
1034
+            $onTimeRate = $entityDocuments->isNotEmpty()
1035
+                ? ($onTimeCount / $entityDocuments->count() * 100)
1036
+                : 0;
1037
+
1038
+            $totalDocs += $entityDocuments->count();
1039
+            $totalOnTime += $onTimeCount;
1040
+            $totalLate += $lateCount;
1041
+
1042
+            $entityDocuments->each(function (Invoice | Bill $doc) use (&$allPaymentDays, &$allLateDays) {
1043
+                $allPaymentDays[] = $doc instanceof Invoice
1044
+                    ? $doc->approved_at->diffInDays($doc->paid_at)
1045
+                    : $doc->date->diffInDays($doc->paid_at);
1046
+
1047
+                if ($doc->paid_at->gt($doc->due_date)) {
1048
+                    $allLateDays[] = $doc->due_date->diffInDays($doc->paid_at);
1049
+                }
1050
+            });
1051
+
1052
+            $categories[] = new EntityReportDTO(
1053
+                name: $entity->name,
1054
+                id: $entityId,
1055
+                paymentMetrics: new PaymentMetricsDTO(
1056
+                    totalDocuments: $entityDocuments->count(),
1057
+                    onTimeCount: $onTimeCount ?: null,
1058
+                    lateCount: $lateCount ?: null,
1059
+                    avgDaysToPay: $avgDaysToPay ? round($avgDaysToPay) : null,
1060
+                    avgDaysLate: $avgDaysLate ? round($avgDaysLate) : null,
1061
+                    onTimePaymentRate: Number::percentage($onTimeRate, maxPrecision: 2),
1062
+                ),
1063
+            );
1064
+        }
1065
+
1066
+        $categories = collect($categories)
1067
+            ->sortByDesc(static fn (EntityReportDTO $category) => $category->paymentMetrics->onTimePaymentRate, SORT_NATURAL)
1068
+            ->values()
1069
+            ->all();
1070
+
1071
+        $overallMetrics = new PaymentMetricsDTO(
1072
+            totalDocuments: $totalDocs,
1073
+            onTimeCount: $totalOnTime,
1074
+            lateCount: $totalLate,
1075
+            avgDaysToPay: round(collect($allPaymentDays)->avg() ?? 0),
1076
+            avgDaysLate: round(collect($allLateDays)->avg() ?? 0),
1077
+            onTimePaymentRate: Number::percentage(
1078
+                $totalDocs > 0 ? ($totalOnTime / $totalDocs * 100) : 0,
1079
+                maxPrecision: 2
1080
+            ),
1081
+        );
1082
+
1083
+        return new ReportDTO(
1084
+            categories: ['Entities' => $categories],
1085
+            overallPaymentMetrics: $overallMetrics,
1086
+            fields: $columns,
1087
+            startDate: Carbon::parse($startDate),
1088
+            endDate: Carbon::parse($endDate),
1089
+        );
1090
+    }
983 1091
 }

+ 83
- 0
app/Transformers/EntityPaymentPerformanceReportTransformer.php Parādīt failu

@@ -0,0 +1,83 @@
1
+<?php
2
+
3
+namespace App\Transformers;
4
+
5
+use App\DTO\EntityReportDTO;
6
+use App\DTO\ReportCategoryDTO;
7
+use App\DTO\ReportDTO;
8
+use App\Enums\Accounting\DocumentEntityType;
9
+
10
+class EntityPaymentPerformanceReportTransformer extends BaseReportTransformer
11
+{
12
+    public function __construct(
13
+        ReportDTO $report,
14
+        private readonly DocumentEntityType $entityType,
15
+    ) {
16
+        parent::__construct($report);
17
+    }
18
+
19
+    public function getTitle(): string
20
+    {
21
+        return $this->entityType->getPaymentPerformanceReportTitle();
22
+    }
23
+
24
+    /**
25
+     * @return ReportCategoryDTO[]
26
+     */
27
+    public function getCategories(): array
28
+    {
29
+        $categories = [];
30
+
31
+        foreach ($this->report->categories as $categoryName => $category) {
32
+            $data = array_map(function (EntityReportDTO $entity) {
33
+                $row = [];
34
+
35
+                foreach ($this->getColumns() as $column) {
36
+                    $row[$column->getName()] = match ($column->getName()) {
37
+                        'entity_name' => [
38
+                            'name' => $entity->name,
39
+                            'id' => $entity->id,
40
+                        ],
41
+                        'total_documents' => $entity->paymentMetrics->totalDocuments,
42
+                        'on_time_count' => $entity->paymentMetrics->onTimeCount,
43
+                        'late_count' => $entity->paymentMetrics->lateCount,
44
+                        'avg_days_to_pay' => $entity->paymentMetrics->avgDaysToPay,
45
+                        'avg_days_late' => $entity->paymentMetrics->avgDaysLate,
46
+                        'on_time_payment_rate' => $entity->paymentMetrics->onTimePaymentRate,
47
+                        default => '',
48
+                    };
49
+                }
50
+
51
+                return $row;
52
+            }, $category);
53
+
54
+            $categories[] = new ReportCategoryDTO(
55
+                header: null,
56
+                data: $data,
57
+                summary: null,
58
+            );
59
+        }
60
+
61
+        return $categories;
62
+    }
63
+
64
+    public function getOverallTotals(): array
65
+    {
66
+        $totals = [];
67
+
68
+        foreach ($this->getColumns() as $column) {
69
+            $totals[$column->getName()] = match ($column->getName()) {
70
+                'entity_name' => 'Overall Totals',
71
+                'total_documents' => $this->report->overallPaymentMetrics->totalDocuments,
72
+                'on_time_count' => $this->report->overallPaymentMetrics->onTimeCount,
73
+                'late_count' => $this->report->overallPaymentMetrics->lateCount,
74
+                'avg_days_to_pay' => $this->report->overallPaymentMetrics->avgDaysToPay,
75
+                'avg_days_late' => $this->report->overallPaymentMetrics->avgDaysLate,
76
+                'on_time_payment_rate' => $this->report->overallPaymentMetrics->onTimePaymentRate,
77
+                default => '',
78
+            };
79
+        }
80
+
81
+        return $totals;
82
+    }
83
+}

+ 4
- 4
resources/views/components/company/tables/container.blade.php Parādīt failu

@@ -5,11 +5,11 @@
5 5
 <x-filament-tables::container>
6 6
     <div class="es-table__header-ctn"></div>
7 7
     <div
8
-        class="relative divide-y divide-gray-200 overflow-x-auto dark:divide-white/10 dark:border-t-white/10 min-h-64">
9
-        <div wire:init="applyFilters">
10
-            <div wire:loading.class="flex items-center justify-center w-full h-full absolute inset-0 z-10">
8
+        class="relative divide-y divide-gray-200 overflow-x-auto dark:divide-white/10 dark:border-t-white/10 min-h-40">
9
+        <div wire:init="applyFilters" class="relative min-h-40">
10
+            <div wire:loading.class="flex items-center justify-center w-full min-h-40 absolute inset-0 z-10">
11 11
                 <div wire:loading wire:target="applyFilters">
12
-                    <x-filament::loading-indicator class="p-6 text-primary-700 dark:text-primary-300"/>
12
+                    <x-filament::loading-indicator class="p-5 text-primary-700 dark:text-primary-300"/>
13 13
                 </div>
14 14
             </div>
15 15
 

Notiek ielāde…
Atcelt
Saglabāt