diff options
author | MS <ms@taler.net> | 2023-01-04 08:33:13 +0100 |
---|---|---|
committer | MS <ms@taler.net> | 2023-01-04 08:33:13 +0100 |
commit | 28fa97a6a4ed143d47bd2c3a0a4aafbf41e3ea00 (patch) | |
tree | cf261016069f247b36a9d7ca9273699bb45c38ce /sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt | |
parent | 0ebb94f89e3373533c2e21ff56272095ae12292d (diff) | |
download | libeufin-28fa97a6a4ed143d47bd2c3a0a4aafbf41e3ea00.tar.gz libeufin-28fa97a6a4ed143d47bd2c3a0a4aafbf41e3ea00.tar.bz2 libeufin-28fa97a6a4ed143d47bd2c3a0a4aafbf41e3ea00.zip |
Circuit API: implement cash-out.
Diffstat (limited to 'sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt')
-rw-r--r-- | sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt b/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt index 1705292c..33c565cc 100644 --- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt +++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/bankAccount.kt @@ -69,11 +69,12 @@ fun getBalance(accountLabel: String, withPending: Boolean = false): BigDecimal { fun wireTransfer( debitAccount: String, creditAccount: String, - demobank: String, + demobank: String = "default", subject: String, amount: String, // $currency:x.y pmtInfId: String? = null ): String { + logger.debug("Maybe wire transfer: $debitAccount -> $creditAccount, $subject, $amount") val args: Triple<BankAccountEntity, BankAccountEntity, DemobankConfigEntity> = transaction { val demobankDb = ensureDemobank(demobank) val debitAccountDb = getBankAccountFromLabel(debitAccount, demobankDb) @@ -113,11 +114,16 @@ fun wireTransfer( if (checkAmount.currency != demobank.currency) throw badRequest("Won't wire transfer with currency: ${checkAmount.currency}") // Check funds are sufficient. + /** + * Using 'pending' balance because Libeufin never books. The + * reason is that booking is not Taler-relevant. + */ val pendingBalance = getBalance(debitAccount, withPending = true) val maxDebt = if (debitAccount.label == "admin") { demobank.bankDebtLimit } else demobank.usersDebtLimit - if ((pendingBalance - checkAmount.amount).abs() > BigDecimal.valueOf(maxDebt.toLong())) { + val balanceCheck = pendingBalance - checkAmount.amount + if (balanceCheck < BigDecimal.ZERO && balanceCheck.abs() > BigDecimal.valueOf(maxDebt.toLong())) { logger.info("Account ${debitAccount.label} would surpass debit threshold of $maxDebt. Rollback wire transfer") throw SandboxError(HttpStatusCode.PreconditionFailed, "Insufficient funds") } |