From 6d484724252923f4e7fd2a81e8183e11d7a5d21e Mon Sep 17 00:00:00 2001 From: Vusa Date: Sat, 4 Jul 2026 23:56:46 +0200 Subject: [PATCH] updating credit amount functionality --- compose.yml | 14 ++++++++++++++ .../qantra/tm/domain/models/Transaction.java | 1 + .../domain/services/TransactionService.java | 16 +++++----------- .../services/VelocityPaymentService.java | 2 +- .../NetoneConfirmationHotProcessor.java | 3 ++- .../ZesaConfirmationHotProcessor.java | 13 ++++++++----- .../resources/liquibase-diff-changeLog.xml | 19 ++----------------- .../services/TransactionServiceTest.java | 6 +++--- 8 files changed, 36 insertions(+), 38 deletions(-) create mode 100644 compose.yml diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..eb29193 --- /dev/null +++ b/compose.yml @@ -0,0 +1,14 @@ +services: + velocity-pay-backend: + build: + context: . + dockerfile: Dockerfile + image: velocity-pay-backend:0.0.2-RELEASE + restart: always + container_name: velocity-pay-backend + ports: + - 8085:8085 + - 6950:6950 + network_mode: host + environment: + - TZ=Africa/Harare \ No newline at end of file diff --git a/src/main/java/zw/qantra/tm/domain/models/Transaction.java b/src/main/java/zw/qantra/tm/domain/models/Transaction.java index 02e9e46..07d04b2 100644 --- a/src/main/java/zw/qantra/tm/domain/models/Transaction.java +++ b/src/main/java/zw/qantra/tm/domain/models/Transaction.java @@ -72,6 +72,7 @@ public class Transaction extends BaseEntity { @Enumerated(EnumType.STRING) private CurrencyType creditCurrency; private BigDecimal creditAmount; + private BigDecimal creditTotalAmount; private String creditName; private String creditCard; private String creditRef; diff --git a/src/main/java/zw/qantra/tm/domain/services/TransactionService.java b/src/main/java/zw/qantra/tm/domain/services/TransactionService.java index bdceb95..83fc7ee 100644 --- a/src/main/java/zw/qantra/tm/domain/services/TransactionService.java +++ b/src/main/java/zw/qantra/tm/domain/services/TransactionService.java @@ -15,6 +15,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import zw.qantra.tm.domain.enums.CurrencyType; import zw.qantra.tm.domain.enums.RequestType; import zw.qantra.tm.domain.models.AdditionalData; import zw.qantra.tm.domain.models.Currency; @@ -33,23 +34,16 @@ public class TransactionService { private final AdditionalDataService additionalDataService; private final CurrencyService currencyService; - public BigDecimal calculateCreditAmount(Transaction transaction) { - if (transaction.getCreditCurrency() == null) { - return BigDecimal.ZERO; - } - - Currency debitCurrency = currencyService.findCurrencyByIsoCode(transaction.getDebitCurrency().name()); - Currency creditCurrency = currencyService.findCurrencyByIsoCode(transaction.getCreditCurrency().name()); + public BigDecimal calculateCurrencyExchangeValue(CurrencyType from, CurrencyType to, BigDecimal amount) { + Currency debitCurrency = currencyService.findCurrencyByIsoCode(from.name()); + Currency creditCurrency = currencyService.findCurrencyByIsoCode(to.name()); BigDecimal debitBankRate = new BigDecimal(debitCurrency.getBankRate()); BigDecimal creditBankRate = new BigDecimal(creditCurrency.getBankRate()); BigDecimal bankRate = creditBankRate.divide(debitBankRate, 4, RoundingMode.HALF_UP); - BigDecimal creditAmount = transaction.getAmount().multiply(bankRate).setScale(4, RoundingMode.HALF_UP); - - transaction.setCreditAmount(creditAmount); - return creditAmount; + return amount.multiply(bankRate).setScale(4, RoundingMode.HALF_UP); } public void reassignTransactions(UUID oldWorkspaceId, UUID newWorkspaceId){ diff --git a/src/main/java/zw/qantra/tm/domain/services/VelocityPaymentService.java b/src/main/java/zw/qantra/tm/domain/services/VelocityPaymentService.java index ecff63c..af8b8a9 100644 --- a/src/main/java/zw/qantra/tm/domain/services/VelocityPaymentService.java +++ b/src/main/java/zw/qantra/tm/domain/services/VelocityPaymentService.java @@ -181,7 +181,7 @@ public class VelocityPaymentService { ? "VMC" : transaction.getPaymentProcessorLabel(); VelocityTransactionDto payload = VelocityTransactionDto.builder() .salesOrderId(transaction.getOrderId()) - .amount(transaction.getCreditAmount()) + .amount(transaction.getCreditTotalAmount()) .debitPhone(transaction.getDebitPhone()) .debitRegion("ZW") .type("REQUEST") diff --git a/src/main/java/zw/qantra/tm/domain/services/processors/confirmations/hotrecharge/NetoneConfirmationHotProcessor.java b/src/main/java/zw/qantra/tm/domain/services/processors/confirmations/hotrecharge/NetoneConfirmationHotProcessor.java index 362b1fb..1f26fda 100644 --- a/src/main/java/zw/qantra/tm/domain/services/processors/confirmations/hotrecharge/NetoneConfirmationHotProcessor.java +++ b/src/main/java/zw/qantra/tm/domain/services/processors/confirmations/hotrecharge/NetoneConfirmationHotProcessor.java @@ -56,8 +56,9 @@ public class NetoneConfirmationHotProcessor implements TransactionProcessorInter } } - transaction.setCreditCurrency(CurrencyType.USD); + transaction.setCreditCurrency(transaction.getDebitCurrency()); transaction.setCreditAmount(transaction.getAmount()); + transaction.setCreditTotalAmount(transaction.getTotalAmount()); transaction.setCreditAccount(Utils.formatPhoneNumber(transaction.getCreditAccount(), "ZW")); transaction.setStatus(Status.SUCCESS); transaction.setResponseCode("00"); diff --git a/src/main/java/zw/qantra/tm/domain/services/processors/confirmations/hotrecharge/ZesaConfirmationHotProcessor.java b/src/main/java/zw/qantra/tm/domain/services/processors/confirmations/hotrecharge/ZesaConfirmationHotProcessor.java index 07046e2..1d38cea 100644 --- a/src/main/java/zw/qantra/tm/domain/services/processors/confirmations/hotrecharge/ZesaConfirmationHotProcessor.java +++ b/src/main/java/zw/qantra/tm/domain/services/processors/confirmations/hotrecharge/ZesaConfirmationHotProcessor.java @@ -5,14 +5,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import zw.qantra.tm.domain.enums.CurrencyType; import zw.qantra.tm.domain.enums.RequestType; import zw.qantra.tm.domain.enums.Status; import zw.qantra.tm.domain.models.AdditionalData; -import zw.qantra.tm.domain.models.Provider; import zw.qantra.tm.domain.models.Transaction; import zw.qantra.tm.domain.services.*; import zw.qantra.tm.domain.services.processors.TransactionProcessorInterface; @@ -20,7 +17,6 @@ import zw.qantra.tm.exceptions.ApiException; import zw.qantra.tm.rest.RestService; import zw.qantra.tm.utils.Utils; -import java.math.BigDecimal; import java.util.*; @Service("CONFIRM_ZESA_HOT") @@ -69,7 +65,14 @@ public class ZesaConfirmationHotProcessor implements TransactionProcessorInterfa transaction.setCreditCurrency(CurrencyType.USD); } - transaction.setCreditAmount(transactionService.calculateCreditAmount(transaction)); + transaction.setCreditAmount(transactionService.calculateCurrencyExchangeValue( + transaction.getDebitCurrency(), + transaction.getCreditCurrency(), + transaction.getAmount())); + transaction.setCreditTotalAmount(transactionService.calculateCurrencyExchangeValue( + transaction.getDebitCurrency(), + transaction.getCreditCurrency(), + transaction.getTotalAmount())); // token should've been updated by checkCustomer if (!hotRechargeBalanceService.checkBalance(token, transaction.getCreditAmount(), accId)) { diff --git a/src/main/resources/liquibase-diff-changeLog.xml b/src/main/resources/liquibase-diff-changeLog.xml index 17c0bd9..8af2608 100644 --- a/src/main/resources/liquibase-diff-changeLog.xml +++ b/src/main/resources/liquibase-diff-changeLog.xml @@ -1,23 +1,8 @@ - + - - - - - - - - - - - - - - - - + diff --git a/src/test/java/zw/qantra/tm/domain/services/TransactionServiceTest.java b/src/test/java/zw/qantra/tm/domain/services/TransactionServiceTest.java index a4109d7..b6de397 100644 --- a/src/test/java/zw/qantra/tm/domain/services/TransactionServiceTest.java +++ b/src/test/java/zw/qantra/tm/domain/services/TransactionServiceTest.java @@ -121,7 +121,7 @@ class TransactionServiceTest { @Test @DisplayName("Should calculate credit amount using bank rate") - void shouldCalculateCreditAmount() { + void shouldCalculateCurrencyExchangeValue() { Currency currencyUsd = new Currency(); currencyUsd.setBankRate("1.0"); Currency currencyZwl = new Currency(); @@ -130,7 +130,7 @@ class TransactionServiceTest { when(currencyService.findCurrencyByIsoCode("USD")).thenReturn(currencyUsd); when(currencyService.findCurrencyByIsoCode("ZWL")).thenReturn(currencyZwl); - BigDecimal creditAmount = transactionService.calculateCreditAmount(transaction); + BigDecimal creditAmount = transactionService.calculateCurrencyExchangeValue(transaction); assertEquals(new BigDecimal("1500.0000"), creditAmount); assertEquals(new BigDecimal("1500.0000"), transaction.getCreditAmount()); @@ -141,7 +141,7 @@ class TransactionServiceTest { void shouldReturnZeroWhenCreditCurrencyNull() { transaction.setCreditCurrency(null); - BigDecimal result = transactionService.calculateCreditAmount(transaction); + BigDecimal result = transactionService.calculateCurrencyExchangeValue(transaction); assertEquals(BigDecimal.ZERO, result); }