Enables manual settlement with fiat currencies

Adds support for settling receivables with fiat currencies
like EUR and USD, in addition to sats.

Updates the settlement dialog to handle fiat amounts and
exchange rates, defaulting to cash payment when a fiat balance
exists.

Modifies the API to accept currency and amount_sats parameters
and adjust the journal entry accordingly, converting the fiat amount
to minor units (e.g., cents) for accounting purposes.
This commit is contained in:
padreug 2025-10-23 04:19:26 +02:00
parent 49f21da55a
commit 70013d1c29
4 changed files with 120 additions and 20 deletions

View file

@ -1138,7 +1138,12 @@
<div class="q-mb-md">
<div class="text-subtitle2">Amount Owed</div>
<div class="text-negative text-h6">{% raw %}{{ formatSats(settleReceivableDialog.maxAmount) }}{% endraw %} sats</div>
<div class="text-negative text-h6">
{% raw %}{{ formatSats(settleReceivableDialog.maxAmount) }}{% endraw %} sats
</div>
<div v-if="settleReceivableDialog.fiatCurrency && settleReceivableDialog.maxAmountFiat" class="text-caption">
{% raw %}{{ formatFiat(settleReceivableDialog.maxAmountFiat, settleReceivableDialog.fiatCurrency) }}{% endraw %}
</div>
</div>
<q-input
@ -1146,13 +1151,14 @@
dense
v-model.number="settleReceivableDialog.amount"
type="number"
label="Settlement Amount (sats) *"
:label="settlementAmountLabel"
hint="Amount user is paying (max: owed amount)"
:max="settleReceivableDialog.maxAmount"
:max="settlementMaxAmount"
:step="settlementAmountStep"
:rules="[
val => val !== null && val !== undefined && val !== '' || 'Amount is required',
val => val > 0 || 'Amount must be positive',
val => val <= settleReceivableDialog.maxAmount || 'Cannot exceed owed amount'
val => val <= settlementMaxAmount || 'Cannot exceed owed amount'
]"
></q-input>