Andrew Wallo 6 个月前
父节点
当前提交
bfec50db37

+ 2
- 2
app/Filament/Company/Resources/Purchases/BillResource/Pages/CreateBill.php 查看文件

3
 namespace App\Filament\Company\Resources\Purchases\BillResource\Pages;
3
 namespace App\Filament\Company\Resources\Purchases\BillResource\Pages;
4
 
4
 
5
 use App\Concerns\ManagesLineItems;
5
 use App\Concerns\ManagesLineItems;
6
-use App\Concerns\RedirectToListPage;
6
+use App\Concerns\RedirectToViewPage;
7
 use App\Filament\Company\Resources\Purchases\BillResource;
7
 use App\Filament\Company\Resources\Purchases\BillResource;
8
 use App\Models\Accounting\Bill;
8
 use App\Models\Accounting\Bill;
9
 use App\Models\Common\Vendor;
9
 use App\Models\Common\Vendor;
15
 class CreateBill extends CreateRecord
15
 class CreateBill extends CreateRecord
16
 {
16
 {
17
     use ManagesLineItems;
17
     use ManagesLineItems;
18
-    use RedirectToListPage;
18
+    use RedirectToViewPage;
19
 
19
 
20
     protected static string $resource = BillResource::class;
20
     protected static string $resource = BillResource::class;
21
 
21
 

+ 2
- 2
app/Filament/Company/Resources/Purchases/BillResource/Pages/ViewBill.php 查看文件

62
                             ->url(static fn (Bill $record) => VendorResource::getUrl('edit', ['record' => $record->vendor_id])),
62
                             ->url(static fn (Bill $record) => VendorResource::getUrl('edit', ['record' => $record->vendor_id])),
63
                         TextEntry::make('total')
63
                         TextEntry::make('total')
64
                             ->label('Total')
64
                             ->label('Total')
65
-                            ->money(),
65
+                            ->currency(fn (Bill $record) => $record->currency_code),
66
                         TextEntry::make('amount_due')
66
                         TextEntry::make('amount_due')
67
                             ->label('Amount due')
67
                             ->label('Amount due')
68
-                            ->money(),
68
+                            ->currency(fn (Bill $record) => $record->currency_code),
69
                         TextEntry::make('date')
69
                         TextEntry::make('date')
70
                             ->label('Date')
70
                             ->label('Date')
71
                             ->date(),
71
                             ->date(),

+ 2
- 2
app/Filament/Company/Resources/Sales/InvoiceResource/Pages/CreateInvoice.php 查看文件

3
 namespace App\Filament\Company\Resources\Sales\InvoiceResource\Pages;
3
 namespace App\Filament\Company\Resources\Sales\InvoiceResource\Pages;
4
 
4
 
5
 use App\Concerns\ManagesLineItems;
5
 use App\Concerns\ManagesLineItems;
6
-use App\Concerns\RedirectToListPage;
6
+use App\Concerns\RedirectToViewPage;
7
 use App\Filament\Company\Resources\Sales\InvoiceResource;
7
 use App\Filament\Company\Resources\Sales\InvoiceResource;
8
 use App\Models\Accounting\Invoice;
8
 use App\Models\Accounting\Invoice;
9
 use App\Models\Common\Client;
9
 use App\Models\Common\Client;
15
 class CreateInvoice extends CreateRecord
15
 class CreateInvoice extends CreateRecord
16
 {
16
 {
17
     use ManagesLineItems;
17
     use ManagesLineItems;
18
-    use RedirectToListPage;
18
+    use RedirectToViewPage;
19
 
19
 
20
     protected static string $resource = InvoiceResource::class;
20
     protected static string $resource = InvoiceResource::class;
21
 
21
 

+ 8
- 2
app/Models/Accounting/Bill.php 查看文件

164
         return ! in_array($this->status, [
164
         return ! in_array($this->status, [
165
             BillStatus::Paid,
165
             BillStatus::Paid,
166
             BillStatus::Void,
166
             BillStatus::Void,
167
-        ]) && $this->currency_code === CurrencyAccessor::getDefaultCurrency();
167
+        ]);
168
     }
168
     }
169
 
169
 
170
     public function hasPayments(): bool
170
     public function hasPayments(): bool
227
         $billCurrency = $this->currency_code;
227
         $billCurrency = $this->currency_code;
228
         $requiresConversion = $billCurrency !== $bankAccountCurrency;
228
         $requiresConversion = $billCurrency !== $bankAccountCurrency;
229
 
229
 
230
+        // Store the original payment amount in bill currency before any conversion
231
+        $amountInBillCurrencyCents = CurrencyConverter::convertToCents($data['amount'], $billCurrency);
232
+
230
         if ($requiresConversion) {
233
         if ($requiresConversion) {
231
-            $amountInBillCurrencyCents = CurrencyConverter::convertToCents($data['amount'], $billCurrency);
232
             $amountInBankCurrencyCents = CurrencyConverter::convertBalance(
234
             $amountInBankCurrencyCents = CurrencyConverter::convertBalance(
233
                 $amountInBillCurrencyCents,
235
                 $amountInBillCurrencyCents,
234
                 $billCurrency,
236
                 $billCurrency,
254
             'account_id' => Account::getAccountsPayableAccount()->id,
256
             'account_id' => Account::getAccountsPayableAccount()->id,
255
             'description' => $transactionDescription,
257
             'description' => $transactionDescription,
256
             'notes' => $data['notes'] ?? null,
258
             'notes' => $data['notes'] ?? null,
259
+            'meta' => [
260
+                'original_bill_currency' => $billCurrency,
261
+                'amount_in_bill_currency_cents' => $amountInBillCurrencyCents,
262
+            ],
257
         ]);
263
         ]);
258
     }
264
     }
259
 
265
 

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

45
         'posted_at',
45
         'posted_at',
46
         'created_by',
46
         'created_by',
47
         'updated_by',
47
         'updated_by',
48
+        'meta',
48
     ];
49
     ];
49
 
50
 
50
     protected $casts = [
51
     protected $casts = [
54
         'pending' => 'boolean',
55
         'pending' => 'boolean',
55
         'reviewed' => 'boolean',
56
         'reviewed' => 'boolean',
56
         'posted_at' => 'date',
57
         'posted_at' => 'date',
58
+        'meta' => 'array',
57
     ];
59
     ];
58
 
60
 
59
     public function account(): BelongsTo
61
     public function account(): BelongsTo

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

166
             ->when($excludedTransaction, fn (Builder $query) => $query->whereKeyNot($excludedTransaction->getKey()))
166
             ->when($excludedTransaction, fn (Builder $query) => $query->whereKeyNot($excludedTransaction->getKey()))
167
             ->get()
167
             ->get()
168
             ->sum(function (Transaction $transaction) use ($billCurrency) {
168
             ->sum(function (Transaction $transaction) use ($billCurrency) {
169
+                // If the transaction has stored the original bill amount in metadata, use that
170
+                if (! empty($transaction->meta) &&
171
+                    isset($transaction->meta['original_bill_currency']) &&
172
+                    $transaction->meta['original_bill_currency'] === $billCurrency &&
173
+                    isset($transaction->meta['amount_in_bill_currency_cents'])) {
174
+
175
+                    return (int) $transaction->meta['amount_in_bill_currency_cents'];
176
+                }
177
+
178
+                // Fall back to conversion if metadata is not available
169
                 $bankAccountCurrency = $transaction->bankAccount->account->currency_code;
179
                 $bankAccountCurrency = $transaction->bankAccount->account->currency_code;
170
                 $amountCents = (int) $transaction->getRawOriginal('amount');
180
                 $amountCents = (int) $transaction->getRawOriginal('amount');
171
 
181
 

+ 1
- 1
app/Providers/Filament/CompanyPanelProvider.php 查看文件

152
                             ->icon('heroicon-o-clipboard-document-list')
152
                             ->icon('heroicon-o-clipboard-document-list')
153
                             ->extraSidebarAttributes(['class' => 'es-sidebar-group'])
153
                             ->extraSidebarAttributes(['class' => 'es-sidebar-group'])
154
                             ->items([
154
                             ->items([
155
-                                ...BudgetResource::getNavigationItems(),
155
+                                // ...BudgetResource::getNavigationItems(),
156
                                 ...AccountChart::getNavigationItems(),
156
                                 ...AccountChart::getNavigationItems(),
157
                                 ...Transactions::getNavigationItems(),
157
                                 ...Transactions::getNavigationItems(),
158
                             ]),
158
                             ]),

+ 1
- 0
database/migrations/2024_01_01_234943_create_transactions_table.php 查看文件

27
             $table->text('notes')->nullable();
27
             $table->text('notes')->nullable();
28
             $table->string('reference')->nullable();
28
             $table->string('reference')->nullable();
29
             $table->bigInteger('amount')->default(0);
29
             $table->bigInteger('amount')->default(0);
30
+            $table->json('meta')->nullable();
30
             $table->boolean('pending')->default(false);
31
             $table->boolean('pending')->default(false);
31
             $table->boolean('reviewed')->default(false);
32
             $table->boolean('reviewed')->default(false);
32
             $table->dateTime('posted_at');
33
             $table->dateTime('posted_at');

正在加载...
取消
保存