Andrew Wallo 4 个月前
父节点
当前提交
4b3d4146d5

+ 1
- 9
app/Casts/JournalEntryCast.php 查看文件

26
      */
26
      */
27
     public function set(Model $model, string $key, mixed $value, array $attributes): int
27
     public function set(Model $model, string $key, mixed $value, array $attributes): int
28
     {
28
     {
29
-        $currency_code = CurrencyAccessor::getDefaultCurrency();
30
-
31
-        if (is_numeric($value)) {
32
-            $value = (string) $value;
33
-        } elseif (! is_string($value)) {
34
-            throw new UnexpectedValueException('Expected string or numeric value for money cast');
35
-        }
36
-
37
-        return CurrencyConverter::prepareForAccessor($value, $currency_code);
29
+        return (int) $value;
38
     }
30
     }
39
 }
31
 }

+ 1
- 9
app/Casts/MoneyCast.php 查看文件

26
      */
26
      */
27
     public function set(Model $model, string $key, mixed $value, array $attributes): int
27
     public function set(Model $model, string $key, mixed $value, array $attributes): int
28
     {
28
     {
29
-        $currency_code = $attributes['currency_code'] ?? CurrencyAccessor::getDefaultCurrency();
30
-
31
-        if (is_numeric($value)) {
32
-            $value = (string) $value;
33
-        } elseif (! is_string($value)) {
34
-            throw new UnexpectedValueException('Expected string or numeric value for money cast');
35
-        }
36
-
37
-        return CurrencyConverter::prepareForAccessor($value, $currency_code);
29
+        return (int) $value;
38
     }
30
     }
39
 }
31
 }

+ 1
- 15
app/Casts/TransactionAmountCast.php 查看文件

60
      */
60
      */
61
     public function set(Model $model, string $key, mixed $value, array $attributes): int
61
     public function set(Model $model, string $key, mixed $value, array $attributes): int
62
     {
62
     {
63
-        $bankAccountId = $attributes['bank_account_id'] ?? null;
64
-
65
-        if ($bankAccountId !== null && ! isset(self::$currencyCache[$bankAccountId])) {
66
-            $this->loadMissingBankAccounts([$bankAccountId]);
67
-        }
68
-
69
-        $currencyCode = $this->getCurrencyCodeFromBankAccountId($bankAccountId);
70
-
71
-        if (is_numeric($value)) {
72
-            $value = (string) $value;
73
-        } elseif (! is_string($value)) {
74
-            throw new UnexpectedValueException('Expected string or numeric value for money cast');
75
-        }
76
-
77
-        return CurrencyConverter::prepareForAccessor($value, $currencyCode);
63
+        return (int) $value;
78
     }
64
     }
79
 
65
 
80
     /**
66
     /**

+ 18
- 24
app/Concerns/HasTransactionAction.php 查看文件

9
 use App\Models\Accounting\Transaction;
9
 use App\Models\Accounting\Transaction;
10
 use App\Models\Banking\BankAccount;
10
 use App\Models\Banking\BankAccount;
11
 use App\Utilities\Currency\CurrencyAccessor;
11
 use App\Utilities\Currency\CurrencyAccessor;
12
-use App\Utilities\Currency\CurrencyConverter;
13
 use Awcodes\TableRepeater\Header;
12
 use Awcodes\TableRepeater\Header;
14
 use Closure;
13
 use Closure;
15
 use Filament\Forms;
14
 use Filament\Forms;
16
 use Filament\Forms\Components\Actions\Action as FormAction;
15
 use Filament\Forms\Components\Actions\Action as FormAction;
17
 use Filament\Forms\Form;
16
 use Filament\Forms\Form;
17
+use Filament\Support\RawJs;
18
 use Illuminate\Contracts\View\View;
18
 use Illuminate\Contracts\View\View;
19
 use Illuminate\Support\Str;
19
 use Illuminate\Support\Str;
20
 
20
 
91
                     ->options(fn (?Transaction $transaction) => Transaction::getBankAccountOptions(currentBankAccountId: $transaction?->bank_account_id))
91
                     ->options(fn (?Transaction $transaction) => Transaction::getBankAccountOptions(currentBankAccountId: $transaction?->bank_account_id))
92
                     ->live()
92
                     ->live()
93
                     ->searchable()
93
                     ->searchable()
94
-                    ->afterStateUpdated(function (Forms\Set $set, $state, $old, Forms\Get $get) {
95
-                        $amount = CurrencyConverter::convertAndSet(
96
-                            BankAccount::find($state)->account->currency_code,
97
-                            BankAccount::find($old)->account->currency_code ?? CurrencyAccessor::getDefaultCurrency(),
98
-                            $get('amount')
99
-                        );
100
-
101
-                        if ($amount !== null) {
102
-                            $set('amount', $amount);
103
-                        }
104
-                    })
105
                     ->required(),
94
                     ->required(),
106
                 Forms\Components\Select::make('type')
95
                 Forms\Components\Select::make('type')
107
                     ->label('Type')
96
                     ->label('Type')
144
                     ->options(fn (Forms\Get $get, ?Transaction $transaction) => Transaction::getBankAccountOptions(excludedAccountId: $get('account_id'), currentBankAccountId: $transaction?->bank_account_id))
133
                     ->options(fn (Forms\Get $get, ?Transaction $transaction) => Transaction::getBankAccountOptions(excludedAccountId: $get('account_id'), currentBankAccountId: $transaction?->bank_account_id))
145
                     ->live()
134
                     ->live()
146
                     ->searchable()
135
                     ->searchable()
147
-                    ->afterStateUpdated(function (Forms\Set $set, $state, $old, Forms\Get $get) {
148
-                        $amount = CurrencyConverter::convertAndSet(
149
-                            BankAccount::find($state)->account->currency_code,
150
-                            BankAccount::find($old)->account->currency_code ?? CurrencyAccessor::getDefaultCurrency(),
151
-                            $get('amount')
152
-                        );
153
-
154
-                        if ($amount !== null) {
155
-                            $set('amount', $amount);
156
-                        }
157
-                    })
158
                     ->required(),
136
                     ->required(),
159
                 Forms\Components\Select::make('type')
137
                 Forms\Components\Select::make('type')
160
                     ->label('Type')
138
                     ->label('Type')
350
             Forms\Components\TextInput::make('amount')
328
             Forms\Components\TextInput::make('amount')
351
                 ->label('Amount')
329
                 ->label('Amount')
352
                 ->live()
330
                 ->live()
353
-                ->mask(moneyMask(CurrencyAccessor::getDefaultCurrency()))
331
+                ->mask(RawJs::make('$money($input)'))
332
+                ->dehydrateStateUsing(function (?string $state): ?int {
333
+                    if (blank($state)) {
334
+                        return null;
335
+                    }
336
+
337
+                    // Remove thousand separators
338
+                    $cleaned = str_replace(',', '', $state);
339
+
340
+                    // If no decimal point, assume it's whole dollars (add .00)
341
+                    if (! str_contains($cleaned, '.')) {
342
+                        $cleaned .= '.00';
343
+                    }
344
+
345
+                    // Convert to float then to cents (integer)
346
+                    return (int) round((float) $cleaned * 100);
347
+                })
354
                 ->afterStateUpdated(function (Forms\Get $get, Forms\Set $set, ?string $state, ?string $old) {
348
                 ->afterStateUpdated(function (Forms\Get $get, Forms\Set $set, ?string $state, ?string $old) {
355
                     $this->updateJournalEntryAmount(JournalEntryType::parse($get('type')), $state, $old);
349
                     $this->updateJournalEntryAmount(JournalEntryType::parse($get('type')), $state, $old);
356
                 })
350
                 })

+ 4
- 4
app/Concerns/ManagesLineItems.php 查看文件

97
         $grandTotalCents = $subtotalCents + $taxTotalCents - $discountTotalCents;
97
         $grandTotalCents = $subtotalCents + $taxTotalCents - $discountTotalCents;
98
 
98
 
99
         return [
99
         return [
100
-            'subtotal' => CurrencyConverter::convertCentsToFormatSimple($subtotalCents, $currencyCode),
101
-            'tax_total' => CurrencyConverter::convertCentsToFormatSimple($taxTotalCents, $currencyCode),
102
-            'discount_total' => CurrencyConverter::convertCentsToFormatSimple($discountTotalCents, $currencyCode),
103
-            'total' => CurrencyConverter::convertCentsToFormatSimple($grandTotalCents, $currencyCode),
100
+            'subtotal' => $subtotalCents,
101
+            'tax_total' => $taxTotalCents,
102
+            'discount_total' => $discountTotalCents,
103
+            'total' => $grandTotalCents,
104
         ];
104
         ];
105
     }
105
     }
106
 
106
 

+ 2
- 0
app/Filament/Company/Resources/Accounting/TransactionResource.php 查看文件

7
 use App\Filament\Forms\Components\DateRangeSelect;
7
 use App\Filament\Forms\Components\DateRangeSelect;
8
 use App\Filament\Tables\Actions\EditTransactionAction;
8
 use App\Filament\Tables\Actions\EditTransactionAction;
9
 use App\Filament\Tables\Actions\ReplicateBulkAction;
9
 use App\Filament\Tables\Actions\ReplicateBulkAction;
10
+use App\Filament\Tables\Columns;
10
 use App\Models\Accounting\JournalEntry;
11
 use App\Models\Accounting\JournalEntry;
11
 use App\Models\Accounting\Transaction;
12
 use App\Models\Accounting\Transaction;
12
 use App\Models\Common\Client;
13
 use App\Models\Common\Client;
55
                     });
56
                     });
56
             })
57
             })
57
             ->columns([
58
             ->columns([
59
+                Columns::id(),
58
                 Tables\Columns\TextColumn::make('posted_at')
60
                 Tables\Columns\TextColumn::make('posted_at')
59
                     ->label('Date')
61
                     ->label('Date')
60
                     ->sortable()
62
                     ->sortable()

+ 1
- 1
app/Filament/Company/Resources/Sales/InvoiceResource.php 查看文件

272
                                                 return;
272
                                                 return;
273
                                             }
273
                                             }
274
 
274
 
275
-                                            $unitPrice = CurrencyConverter::convertToFloat($offeringRecord->price, $get('../../currency_code') ?? CurrencyAccessor::getDefaultCurrency());
275
+                                            $unitPrice = CurrencyConverter::convertToFloat($offeringRecord->price, CurrencyAccessor::getDefaultCurrency());
276
 
276
 
277
                                             $set('description', $offeringRecord->description);
277
                                             $set('description', $offeringRecord->description);
278
                                             $set('unit_price', $unitPrice);
278
                                             $set('unit_price', $unitPrice);

+ 6
- 11
app/Models/Accounting/Invoice.php 查看文件

332
         $requiresConversion = $invoiceCurrency !== $bankAccountCurrency;
332
         $requiresConversion = $invoiceCurrency !== $bankAccountCurrency;
333
 
333
 
334
         // Store the original payment amount in invoice currency before any conversion
334
         // Store the original payment amount in invoice currency before any conversion
335
-        $amountInInvoiceCurrencyCents = CurrencyConverter::convertToCents($data['amount'], $invoiceCurrency);
335
+        $amountInInvoiceCurrencyCents = $data['amount'];
336
 
336
 
337
         if ($requiresConversion) {
337
         if ($requiresConversion) {
338
             $amountInBankCurrencyCents = CurrencyConverter::convertBalance(
338
             $amountInBankCurrencyCents = CurrencyConverter::convertBalance(
340
                 $invoiceCurrency,
340
                 $invoiceCurrency,
341
                 $bankAccountCurrency
341
                 $bankAccountCurrency
342
             );
342
             );
343
-            $formattedAmountForBankCurrency = CurrencyConverter::convertCentsToFormatSimple(
344
-                $amountInBankCurrencyCents,
345
-                $bankAccountCurrency
346
-            );
343
+            $formattedAmountForBankCurrency = $amountInBankCurrencyCents;
347
         } else {
344
         } else {
348
-            $formattedAmountForBankCurrency = $data['amount']; // Already in simple format
345
+            $formattedAmountForBankCurrency = $amountInInvoiceCurrencyCents;
349
         }
346
         }
350
 
347
 
351
         // Create transaction
348
         // Create transaction
451
                         'company_id' => $this->company_id,
448
                         'company_id' => $this->company_id,
452
                         'type' => JournalEntryType::Debit,
449
                         'type' => JournalEntryType::Debit,
453
                         'account_id' => Account::getSalesDiscountAccount($this->company_id)->id,
450
                         'account_id' => Account::getSalesDiscountAccount($this->company_id)->id,
454
-                        'amount' => CurrencyConverter::convertCentsToFormatSimple($lineItemDiscount),
451
+                        'amount' => $lineItemDiscount,
455
                         'description' => "{$lineItemDescription} (Proportional Discount)",
452
                         'description' => "{$lineItemDescription} (Proportional Discount)",
456
                     ]);
453
                     ]);
457
                 }
454
                 }
482
         return $amountCents;
479
         return $amountCents;
483
     }
480
     }
484
 
481
 
485
-    public function formatAmountToDefaultCurrency(int $amountCents): string
482
+    public function formatAmountToDefaultCurrency(int $amountCents): int
486
     {
483
     {
487
-        $convertedCents = $this->convertAmountToDefaultCurrency($amountCents);
488
-
489
-        return CurrencyConverter::convertCentsToFormatSimple($convertedCents);
484
+        return $this->convertAmountToDefaultCurrency($amountCents);
490
     }
485
     }
491
 
486
 
492
     // TODO: Potentially handle this another way
487
     // TODO: Potentially handle this another way

+ 1
- 1
app/Models/Accounting/Transaction.php 查看文件

110
     public function updateAmountIfBalanced(): void
110
     public function updateAmountIfBalanced(): void
111
     {
111
     {
112
         if ($this->journalEntries->areBalanced() && $this->journalEntries->sumDebits()->formatSimple() !== $this->getAttributeValue('amount')) {
112
         if ($this->journalEntries->areBalanced() && $this->journalEntries->sumDebits()->formatSimple() !== $this->getAttributeValue('amount')) {
113
-            $this->setAttribute('amount', $this->journalEntries->sumDebits()->formatSimple());
113
+            $this->setAttribute('amount', $this->journalEntries->sumDebits()->getAmount());
114
             $this->save();
114
             $this->save();
115
         }
115
         }
116
     }
116
     }

+ 2
- 2
app/Observers/TransactionObserver.php 查看文件

183
         }
183
         }
184
 
184
 
185
         $invoice->update([
185
         $invoice->update([
186
-            'amount_paid' => CurrencyConverter::convertCentsToFormatSimple($totalPaidInInvoiceCurrencyCents, $invoiceCurrency),
186
+            'amount_paid' => $totalPaidInInvoiceCurrencyCents,
187
             'status' => $newStatus,
187
             'status' => $newStatus,
188
             'paid_at' => $paidAt,
188
             'paid_at' => $paidAt,
189
         ]);
189
         ]);
236
         }
236
         }
237
 
237
 
238
         $bill->update([
238
         $bill->update([
239
-            'amount_paid' => CurrencyConverter::convertCentsToFormatSimple($totalPaidInBillCurrencyCents, $billCurrency),
239
+            'amount_paid' => $totalPaidInBillCurrencyCents,
240
             'status' => $newStatus,
240
             'status' => $newStatus,
241
             'paid_at' => $paidAt,
241
             'paid_at' => $paidAt,
242
         ]);
242
         ]);

+ 17
- 4
app/Providers/MacroServiceProvider.php 查看文件

20
 use Filament\Forms\Components\TextInput;
20
 use Filament\Forms\Components\TextInput;
21
 use Filament\Infolists\Components\TextEntry;
21
 use Filament\Infolists\Components\TextEntry;
22
 use Filament\Support\Enums\IconPosition;
22
 use Filament\Support\Enums\IconPosition;
23
+use Filament\Support\RawJs;
23
 use Filament\Tables\Columns\TextColumn;
24
 use Filament\Tables\Columns\TextColumn;
24
 use Filament\Tables\Contracts\HasTable;
25
 use Filament\Tables\Contracts\HasTable;
25
 use Illuminate\Contracts\Support\Htmlable;
26
 use Illuminate\Contracts\Support\Htmlable;
64
                     });
65
                     });
65
             }
66
             }
66
 
67
 
67
-            $this->mask(static function (TextInput $component) use ($currency) {
68
-                $currency = $component->evaluate($currency);
68
+            $this->mask(RawJs::make('$money($input)'))
69
+                ->dehydrateStateUsing(function (?string $state): ?int {
70
+                    if (blank($state)) {
71
+                        return null;
72
+                    }
69
 
73
 
70
-                return moneyMask($currency);
71
-            });
74
+                    // Remove thousand separators
75
+                    $cleaned = str_replace(',', '', $state);
76
+
77
+                    // If no decimal point, assume it's whole dollars (add .00)
78
+                    if (! str_contains($cleaned, '.')) {
79
+                        $cleaned .= '.00';
80
+                    }
81
+
82
+                    // Convert to float then to cents (integer)
83
+                    return (int) round((float) $cleaned * 100);
84
+                });
72
 
85
 
73
             return $this;
86
             return $this;
74
         });
87
         });

+ 82
- 70
composer.lock 查看文件

497
         },
497
         },
498
         {
498
         {
499
             "name": "aws/aws-sdk-php",
499
             "name": "aws/aws-sdk-php",
500
-            "version": "3.343.13",
500
+            "version": "3.343.18",
501
             "source": {
501
             "source": {
502
                 "type": "git",
502
                 "type": "git",
503
                 "url": "https://github.com/aws/aws-sdk-php.git",
503
                 "url": "https://github.com/aws/aws-sdk-php.git",
504
-                "reference": "eb50d111a09ef39675358e74801260ac129ee346"
504
+                "reference": "ae98d503173740cce23b30d2ba2737c49b0d9876"
505
             },
505
             },
506
             "dist": {
506
             "dist": {
507
                 "type": "zip",
507
                 "type": "zip",
508
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/eb50d111a09ef39675358e74801260ac129ee346",
509
-                "reference": "eb50d111a09ef39675358e74801260ac129ee346",
508
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ae98d503173740cce23b30d2ba2737c49b0d9876",
509
+                "reference": "ae98d503173740cce23b30d2ba2737c49b0d9876",
510
                 "shasum": ""
510
                 "shasum": ""
511
             },
511
             },
512
             "require": {
512
             "require": {
588
             "support": {
588
             "support": {
589
                 "forum": "https://github.com/aws/aws-sdk-php/discussions",
589
                 "forum": "https://github.com/aws/aws-sdk-php/discussions",
590
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
590
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
591
-                "source": "https://github.com/aws/aws-sdk-php/tree/3.343.13"
591
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.343.18"
592
             },
592
             },
593
-            "time": "2025-05-16T18:24:39+00:00"
593
+            "time": "2025-05-23T18:08:18+00:00"
594
         },
594
         },
595
         {
595
         {
596
             "name": "aws/aws-sdk-php-laravel",
596
             "name": "aws/aws-sdk-php-laravel",
1799
         },
1799
         },
1800
         {
1800
         {
1801
             "name": "filament/actions",
1801
             "name": "filament/actions",
1802
-            "version": "v3.3.14",
1802
+            "version": "v3.3.16",
1803
             "source": {
1803
             "source": {
1804
                 "type": "git",
1804
                 "type": "git",
1805
                 "url": "https://github.com/filamentphp/actions.git",
1805
                 "url": "https://github.com/filamentphp/actions.git",
1806
-                "reference": "08caa8dec43ebf4192dcd999cca786656a3dbc90"
1806
+                "reference": "66b509aa72fa882ce91218eb743684a9350bc3fb"
1807
             },
1807
             },
1808
             "dist": {
1808
             "dist": {
1809
                 "type": "zip",
1809
                 "type": "zip",
1810
-                "url": "https://api.github.com/repos/filamentphp/actions/zipball/08caa8dec43ebf4192dcd999cca786656a3dbc90",
1811
-                "reference": "08caa8dec43ebf4192dcd999cca786656a3dbc90",
1810
+                "url": "https://api.github.com/repos/filamentphp/actions/zipball/66b509aa72fa882ce91218eb743684a9350bc3fb",
1811
+                "reference": "66b509aa72fa882ce91218eb743684a9350bc3fb",
1812
                 "shasum": ""
1812
                 "shasum": ""
1813
             },
1813
             },
1814
             "require": {
1814
             "require": {
1848
                 "issues": "https://github.com/filamentphp/filament/issues",
1848
                 "issues": "https://github.com/filamentphp/filament/issues",
1849
                 "source": "https://github.com/filamentphp/filament"
1849
                 "source": "https://github.com/filamentphp/filament"
1850
             },
1850
             },
1851
-            "time": "2025-04-30T09:16:43+00:00"
1851
+            "time": "2025-05-19T07:25:24+00:00"
1852
         },
1852
         },
1853
         {
1853
         {
1854
             "name": "filament/filament",
1854
             "name": "filament/filament",
1855
-            "version": "v3.3.14",
1855
+            "version": "v3.3.16",
1856
             "source": {
1856
             "source": {
1857
                 "type": "git",
1857
                 "type": "git",
1858
                 "url": "https://github.com/filamentphp/panels.git",
1858
                 "url": "https://github.com/filamentphp/panels.git",
1859
-                "reference": "2c4783bdd973967cc2dbc2dc518c70b04839ace3"
1859
+                "reference": "ed0a0109e6b2663247fcd73076c95c918bc5b412"
1860
             },
1860
             },
1861
             "dist": {
1861
             "dist": {
1862
                 "type": "zip",
1862
                 "type": "zip",
1863
-                "url": "https://api.github.com/repos/filamentphp/panels/zipball/2c4783bdd973967cc2dbc2dc518c70b04839ace3",
1864
-                "reference": "2c4783bdd973967cc2dbc2dc518c70b04839ace3",
1863
+                "url": "https://api.github.com/repos/filamentphp/panels/zipball/ed0a0109e6b2663247fcd73076c95c918bc5b412",
1864
+                "reference": "ed0a0109e6b2663247fcd73076c95c918bc5b412",
1865
                 "shasum": ""
1865
                 "shasum": ""
1866
             },
1866
             },
1867
             "require": {
1867
             "require": {
1913
                 "issues": "https://github.com/filamentphp/filament/issues",
1913
                 "issues": "https://github.com/filamentphp/filament/issues",
1914
                 "source": "https://github.com/filamentphp/filament"
1914
                 "source": "https://github.com/filamentphp/filament"
1915
             },
1915
             },
1916
-            "time": "2025-04-30T09:16:38+00:00"
1916
+            "time": "2025-05-21T08:45:13+00:00"
1917
         },
1917
         },
1918
         {
1918
         {
1919
             "name": "filament/forms",
1919
             "name": "filament/forms",
1920
-            "version": "v3.3.14",
1920
+            "version": "v3.3.16",
1921
             "source": {
1921
             "source": {
1922
                 "type": "git",
1922
                 "type": "git",
1923
                 "url": "https://github.com/filamentphp/forms.git",
1923
                 "url": "https://github.com/filamentphp/forms.git",
1924
-                "reference": "22e62dc2b4c68018e9846aadf7e8c5310d0e38cf"
1924
+                "reference": "eeb18e482b1addc5fe88d57f59d6b91cb71957ff"
1925
             },
1925
             },
1926
             "dist": {
1926
             "dist": {
1927
                 "type": "zip",
1927
                 "type": "zip",
1928
-                "url": "https://api.github.com/repos/filamentphp/forms/zipball/22e62dc2b4c68018e9846aadf7e8c5310d0e38cf",
1929
-                "reference": "22e62dc2b4c68018e9846aadf7e8c5310d0e38cf",
1928
+                "url": "https://api.github.com/repos/filamentphp/forms/zipball/eeb18e482b1addc5fe88d57f59d6b91cb71957ff",
1929
+                "reference": "eeb18e482b1addc5fe88d57f59d6b91cb71957ff",
1930
                 "shasum": ""
1930
                 "shasum": ""
1931
             },
1931
             },
1932
             "require": {
1932
             "require": {
1969
                 "issues": "https://github.com/filamentphp/filament/issues",
1969
                 "issues": "https://github.com/filamentphp/filament/issues",
1970
                 "source": "https://github.com/filamentphp/filament"
1970
                 "source": "https://github.com/filamentphp/filament"
1971
             },
1971
             },
1972
-            "time": "2025-04-30T09:16:39+00:00"
1972
+            "time": "2025-05-21T08:45:29+00:00"
1973
         },
1973
         },
1974
         {
1974
         {
1975
             "name": "filament/infolists",
1975
             "name": "filament/infolists",
1976
-            "version": "v3.3.14",
1976
+            "version": "v3.3.16",
1977
             "source": {
1977
             "source": {
1978
                 "type": "git",
1978
                 "type": "git",
1979
                 "url": "https://github.com/filamentphp/infolists.git",
1979
                 "url": "https://github.com/filamentphp/infolists.git",
2024
         },
2024
         },
2025
         {
2025
         {
2026
             "name": "filament/notifications",
2026
             "name": "filament/notifications",
2027
-            "version": "v3.3.14",
2027
+            "version": "v3.3.16",
2028
             "source": {
2028
             "source": {
2029
                 "type": "git",
2029
                 "type": "git",
2030
                 "url": "https://github.com/filamentphp/notifications.git",
2030
                 "url": "https://github.com/filamentphp/notifications.git",
2031
-                "reference": "edf7960621b2181b4c2fc040b0712fbd5dd036ef"
2031
+                "reference": "356f50e24798a6f06522bfa5123c6ffd054171d3"
2032
             },
2032
             },
2033
             "dist": {
2033
             "dist": {
2034
                 "type": "zip",
2034
                 "type": "zip",
2035
-                "url": "https://api.github.com/repos/filamentphp/notifications/zipball/edf7960621b2181b4c2fc040b0712fbd5dd036ef",
2036
-                "reference": "edf7960621b2181b4c2fc040b0712fbd5dd036ef",
2035
+                "url": "https://api.github.com/repos/filamentphp/notifications/zipball/356f50e24798a6f06522bfa5123c6ffd054171d3",
2036
+                "reference": "356f50e24798a6f06522bfa5123c6ffd054171d3",
2037
                 "shasum": ""
2037
                 "shasum": ""
2038
             },
2038
             },
2039
             "require": {
2039
             "require": {
2072
                 "issues": "https://github.com/filamentphp/filament/issues",
2072
                 "issues": "https://github.com/filamentphp/filament/issues",
2073
                 "source": "https://github.com/filamentphp/filament"
2073
                 "source": "https://github.com/filamentphp/filament"
2074
             },
2074
             },
2075
-            "time": "2025-04-23T06:39:49+00:00"
2075
+            "time": "2025-05-21T08:44:14+00:00"
2076
         },
2076
         },
2077
         {
2077
         {
2078
             "name": "filament/support",
2078
             "name": "filament/support",
2079
-            "version": "v3.3.14",
2079
+            "version": "v3.3.16",
2080
             "source": {
2080
             "source": {
2081
                 "type": "git",
2081
                 "type": "git",
2082
                 "url": "https://github.com/filamentphp/support.git",
2082
                 "url": "https://github.com/filamentphp/support.git",
2083
-                "reference": "0ab49fdb2bc937257d6f8e1f7b97a03216a43656"
2083
+                "reference": "537663fa2c5057aa236a189255b623b5124d32d8"
2084
             },
2084
             },
2085
             "dist": {
2085
             "dist": {
2086
                 "type": "zip",
2086
                 "type": "zip",
2087
-                "url": "https://api.github.com/repos/filamentphp/support/zipball/0ab49fdb2bc937257d6f8e1f7b97a03216a43656",
2088
-                "reference": "0ab49fdb2bc937257d6f8e1f7b97a03216a43656",
2087
+                "url": "https://api.github.com/repos/filamentphp/support/zipball/537663fa2c5057aa236a189255b623b5124d32d8",
2088
+                "reference": "537663fa2c5057aa236a189255b623b5124d32d8",
2089
                 "shasum": ""
2089
                 "shasum": ""
2090
             },
2090
             },
2091
             "require": {
2091
             "require": {
2131
                 "issues": "https://github.com/filamentphp/filament/issues",
2131
                 "issues": "https://github.com/filamentphp/filament/issues",
2132
                 "source": "https://github.com/filamentphp/filament"
2132
                 "source": "https://github.com/filamentphp/filament"
2133
             },
2133
             },
2134
-            "time": "2025-04-30T09:16:34+00:00"
2134
+            "time": "2025-05-21T08:45:20+00:00"
2135
         },
2135
         },
2136
         {
2136
         {
2137
             "name": "filament/tables",
2137
             "name": "filament/tables",
2138
-            "version": "v3.3.14",
2138
+            "version": "v3.3.16",
2139
             "source": {
2139
             "source": {
2140
                 "type": "git",
2140
                 "type": "git",
2141
                 "url": "https://github.com/filamentphp/tables.git",
2141
                 "url": "https://github.com/filamentphp/tables.git",
2142
-                "reference": "bb5fad7306c39fdbb08d97982073114ac465bf92"
2142
+                "reference": "64806e3c13caeabb23a8668a7aaf1efc8395df96"
2143
             },
2143
             },
2144
             "dist": {
2144
             "dist": {
2145
                 "type": "zip",
2145
                 "type": "zip",
2146
-                "url": "https://api.github.com/repos/filamentphp/tables/zipball/bb5fad7306c39fdbb08d97982073114ac465bf92",
2147
-                "reference": "bb5fad7306c39fdbb08d97982073114ac465bf92",
2146
+                "url": "https://api.github.com/repos/filamentphp/tables/zipball/64806e3c13caeabb23a8668a7aaf1efc8395df96",
2147
+                "reference": "64806e3c13caeabb23a8668a7aaf1efc8395df96",
2148
                 "shasum": ""
2148
                 "shasum": ""
2149
             },
2149
             },
2150
             "require": {
2150
             "require": {
2183
                 "issues": "https://github.com/filamentphp/filament/issues",
2183
                 "issues": "https://github.com/filamentphp/filament/issues",
2184
                 "source": "https://github.com/filamentphp/filament"
2184
                 "source": "https://github.com/filamentphp/filament"
2185
             },
2185
             },
2186
-            "time": "2025-04-30T09:16:33+00:00"
2186
+            "time": "2025-05-19T07:26:42+00:00"
2187
         },
2187
         },
2188
         {
2188
         {
2189
             "name": "filament/widgets",
2189
             "name": "filament/widgets",
2190
-            "version": "v3.3.14",
2190
+            "version": "v3.3.16",
2191
             "source": {
2191
             "source": {
2192
                 "type": "git",
2192
                 "type": "git",
2193
                 "url": "https://github.com/filamentphp/widgets.git",
2193
                 "url": "https://github.com/filamentphp/widgets.git",
2987
         },
2987
         },
2988
         {
2988
         {
2989
             "name": "kirschbaum-development/eloquent-power-joins",
2989
             "name": "kirschbaum-development/eloquent-power-joins",
2990
-            "version": "4.2.3",
2990
+            "version": "4.2.4",
2991
             "source": {
2991
             "source": {
2992
                 "type": "git",
2992
                 "type": "git",
2993
                 "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git",
2993
                 "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git",
2994
-                "reference": "d04e06b12e5e7864c303b8a8c6045bfcd4e2c641"
2994
+                "reference": "4a8012cef7abed8ac3633a180c69138a228b6c4c"
2995
             },
2995
             },
2996
             "dist": {
2996
             "dist": {
2997
                 "type": "zip",
2997
                 "type": "zip",
2998
-                "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/d04e06b12e5e7864c303b8a8c6045bfcd4e2c641",
2999
-                "reference": "d04e06b12e5e7864c303b8a8c6045bfcd4e2c641",
2998
+                "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/4a8012cef7abed8ac3633a180c69138a228b6c4c",
2999
+                "reference": "4a8012cef7abed8ac3633a180c69138a228b6c4c",
3000
                 "shasum": ""
3000
                 "shasum": ""
3001
             },
3001
             },
3002
             "require": {
3002
             "require": {
3044
             ],
3044
             ],
3045
             "support": {
3045
             "support": {
3046
                 "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues",
3046
                 "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues",
3047
-                "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.3"
3047
+                "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.4"
3048
             },
3048
             },
3049
-            "time": "2025-04-01T14:41:56+00:00"
3049
+            "time": "2025-05-19T14:14:41+00:00"
3050
         },
3050
         },
3051
         {
3051
         {
3052
             "name": "knplabs/knp-snappy",
3052
             "name": "knplabs/knp-snappy",
3117
         },
3117
         },
3118
         {
3118
         {
3119
             "name": "laravel/framework",
3119
             "name": "laravel/framework",
3120
-            "version": "v11.44.7",
3120
+            "version": "v11.45.0",
3121
             "source": {
3121
             "source": {
3122
                 "type": "git",
3122
                 "type": "git",
3123
                 "url": "https://github.com/laravel/framework.git",
3123
                 "url": "https://github.com/laravel/framework.git",
3124
-                "reference": "00bc6ac91a6d577bf051c18ddaa638c0d221e1c7"
3124
+                "reference": "d0730deb427632004d24801be7ca1ed2c10fbc4e"
3125
             },
3125
             },
3126
             "dist": {
3126
             "dist": {
3127
                 "type": "zip",
3127
                 "type": "zip",
3128
-                "url": "https://api.github.com/repos/laravel/framework/zipball/00bc6ac91a6d577bf051c18ddaa638c0d221e1c7",
3129
-                "reference": "00bc6ac91a6d577bf051c18ddaa638c0d221e1c7",
3128
+                "url": "https://api.github.com/repos/laravel/framework/zipball/d0730deb427632004d24801be7ca1ed2c10fbc4e",
3129
+                "reference": "d0730deb427632004d24801be7ca1ed2c10fbc4e",
3130
                 "shasum": ""
3130
                 "shasum": ""
3131
             },
3131
             },
3132
             "require": {
3132
             "require": {
3147
                 "guzzlehttp/uri-template": "^1.0",
3147
                 "guzzlehttp/uri-template": "^1.0",
3148
                 "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0",
3148
                 "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0",
3149
                 "laravel/serializable-closure": "^1.3|^2.0",
3149
                 "laravel/serializable-closure": "^1.3|^2.0",
3150
-                "league/commonmark": "^2.6",
3150
+                "league/commonmark": "^2.7",
3151
                 "league/flysystem": "^3.25.1",
3151
                 "league/flysystem": "^3.25.1",
3152
                 "league/flysystem-local": "^3.25.1",
3152
                 "league/flysystem-local": "^3.25.1",
3153
                 "league/uri": "^7.5.1",
3153
                 "league/uri": "^7.5.1",
3234
                 "league/flysystem-read-only": "^3.25.1",
3234
                 "league/flysystem-read-only": "^3.25.1",
3235
                 "league/flysystem-sftp-v3": "^3.25.1",
3235
                 "league/flysystem-sftp-v3": "^3.25.1",
3236
                 "mockery/mockery": "^1.6.10",
3236
                 "mockery/mockery": "^1.6.10",
3237
-                "orchestra/testbench-core": "^9.11.2",
3237
+                "orchestra/testbench-core": "^9.13.2",
3238
                 "pda/pheanstalk": "^5.0.6",
3238
                 "pda/pheanstalk": "^5.0.6",
3239
                 "php-http/discovery": "^1.15",
3239
                 "php-http/discovery": "^1.15",
3240
                 "phpstan/phpstan": "^2.0",
3240
                 "phpstan/phpstan": "^2.0",
3328
                 "issues": "https://github.com/laravel/framework/issues",
3328
                 "issues": "https://github.com/laravel/framework/issues",
3329
                 "source": "https://github.com/laravel/framework"
3329
                 "source": "https://github.com/laravel/framework"
3330
             },
3330
             },
3331
-            "time": "2025-04-25T12:40:47+00:00"
3331
+            "time": "2025-05-20T15:15:58+00:00"
3332
         },
3332
         },
3333
         {
3333
         {
3334
             "name": "laravel/prompts",
3334
             "name": "laravel/prompts",
5207
         },
5207
         },
5208
         {
5208
         {
5209
             "name": "openspout/openspout",
5209
             "name": "openspout/openspout",
5210
-            "version": "v4.29.1",
5210
+            "version": "v4.30.0",
5211
             "source": {
5211
             "source": {
5212
                 "type": "git",
5212
                 "type": "git",
5213
                 "url": "https://github.com/openspout/openspout.git",
5213
                 "url": "https://github.com/openspout/openspout.git",
5214
-                "reference": "ec83106bc3922fe94c9d37976ba6b7259511c4c5"
5214
+                "reference": "df9b0f4d229c37c3caa5a9252a6ad8a94efb0fb5"
5215
             },
5215
             },
5216
             "dist": {
5216
             "dist": {
5217
                 "type": "zip",
5217
                 "type": "zip",
5218
-                "url": "https://api.github.com/repos/openspout/openspout/zipball/ec83106bc3922fe94c9d37976ba6b7259511c4c5",
5219
-                "reference": "ec83106bc3922fe94c9d37976ba6b7259511c4c5",
5218
+                "url": "https://api.github.com/repos/openspout/openspout/zipball/df9b0f4d229c37c3caa5a9252a6ad8a94efb0fb5",
5219
+                "reference": "df9b0f4d229c37c3caa5a9252a6ad8a94efb0fb5",
5220
                 "shasum": ""
5220
                 "shasum": ""
5221
             },
5221
             },
5222
             "require": {
5222
             "require": {
5230
             },
5230
             },
5231
             "require-dev": {
5231
             "require-dev": {
5232
                 "ext-zlib": "*",
5232
                 "ext-zlib": "*",
5233
-                "friendsofphp/php-cs-fixer": "^3.71.0",
5233
+                "friendsofphp/php-cs-fixer": "^3.75.0",
5234
                 "infection/infection": "^0.29.14",
5234
                 "infection/infection": "^0.29.14",
5235
-                "phpbench/phpbench": "^1.4.0",
5236
-                "phpstan/phpstan": "^2.1.8",
5237
-                "phpstan/phpstan-phpunit": "^2.0.4",
5238
-                "phpstan/phpstan-strict-rules": "^2.0.3",
5239
-                "phpunit/phpunit": "^12.0.7"
5235
+                "phpbench/phpbench": "^1.4.1",
5236
+                "phpstan/phpstan": "^2.1.16",
5237
+                "phpstan/phpstan-phpunit": "^2.0.6",
5238
+                "phpstan/phpstan-strict-rules": "^2.0.4",
5239
+                "phpunit/phpunit": "^12.1.5"
5240
             },
5240
             },
5241
             "suggest": {
5241
             "suggest": {
5242
                 "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)",
5242
                 "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)",
5284
             ],
5284
             ],
5285
             "support": {
5285
             "support": {
5286
                 "issues": "https://github.com/openspout/openspout/issues",
5286
                 "issues": "https://github.com/openspout/openspout/issues",
5287
-                "source": "https://github.com/openspout/openspout/tree/v4.29.1"
5287
+                "source": "https://github.com/openspout/openspout/tree/v4.30.0"
5288
             },
5288
             },
5289
             "funding": [
5289
             "funding": [
5290
                 {
5290
                 {
5296
                     "type": "github"
5296
                     "type": "github"
5297
                 }
5297
                 }
5298
             ],
5298
             ],
5299
-            "time": "2025-03-11T14:40:46+00:00"
5299
+            "time": "2025-05-20T12:33:06+00:00"
5300
         },
5300
         },
5301
         {
5301
         {
5302
             "name": "paragonie/constant_time_encoding",
5302
             "name": "paragonie/constant_time_encoding",
11893
         },
11893
         },
11894
         {
11894
         {
11895
             "name": "sebastian/environment",
11895
             "name": "sebastian/environment",
11896
-            "version": "7.2.0",
11896
+            "version": "7.2.1",
11897
             "source": {
11897
             "source": {
11898
                 "type": "git",
11898
                 "type": "git",
11899
                 "url": "https://github.com/sebastianbergmann/environment.git",
11899
                 "url": "https://github.com/sebastianbergmann/environment.git",
11900
-                "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5"
11900
+                "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4"
11901
             },
11901
             },
11902
             "dist": {
11902
             "dist": {
11903
                 "type": "zip",
11903
                 "type": "zip",
11904
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5",
11905
-                "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5",
11904
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4",
11905
+                "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4",
11906
                 "shasum": ""
11906
                 "shasum": ""
11907
             },
11907
             },
11908
             "require": {
11908
             "require": {
11909
                 "php": ">=8.2"
11909
                 "php": ">=8.2"
11910
             },
11910
             },
11911
             "require-dev": {
11911
             "require-dev": {
11912
-                "phpunit/phpunit": "^11.0"
11912
+                "phpunit/phpunit": "^11.3"
11913
             },
11913
             },
11914
             "suggest": {
11914
             "suggest": {
11915
                 "ext-posix": "*"
11915
                 "ext-posix": "*"
11945
             "support": {
11945
             "support": {
11946
                 "issues": "https://github.com/sebastianbergmann/environment/issues",
11946
                 "issues": "https://github.com/sebastianbergmann/environment/issues",
11947
                 "security": "https://github.com/sebastianbergmann/environment/security/policy",
11947
                 "security": "https://github.com/sebastianbergmann/environment/security/policy",
11948
-                "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0"
11948
+                "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1"
11949
             },
11949
             },
11950
             "funding": [
11950
             "funding": [
11951
                 {
11951
                 {
11952
                     "url": "https://github.com/sebastianbergmann",
11952
                     "url": "https://github.com/sebastianbergmann",
11953
                     "type": "github"
11953
                     "type": "github"
11954
+                },
11955
+                {
11956
+                    "url": "https://liberapay.com/sebastianbergmann",
11957
+                    "type": "liberapay"
11958
+                },
11959
+                {
11960
+                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
11961
+                    "type": "thanks_dev"
11962
+                },
11963
+                {
11964
+                    "url": "https://tidelift.com/funding/github/packagist/sebastian/environment",
11965
+                    "type": "tidelift"
11954
                 }
11966
                 }
11955
             ],
11967
             ],
11956
-            "time": "2024-07-03T04:54:44+00:00"
11968
+            "time": "2025-05-21T11:55:47+00:00"
11957
         },
11969
         },
11958
         {
11970
         {
11959
             "name": "sebastian/exporter",
11971
             "name": "sebastian/exporter",

正在加载...
取消
保存