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 6ab83a8..bdceb95 100644 --- a/src/main/java/zw/qantra/tm/domain/services/TransactionService.java +++ b/src/main/java/zw/qantra/tm/domain/services/TransactionService.java @@ -38,10 +38,15 @@ public class TransactionService { return BigDecimal.ZERO; } - Currency currency = currencyService.findCurrencyByIsoCode(transaction.getCreditCurrency().name()); + Currency debitCurrency = currencyService.findCurrencyByIsoCode(transaction.getDebitCurrency().name()); + Currency creditCurrency = currencyService.findCurrencyByIsoCode(transaction.getCreditCurrency().name()); - BigDecimal bankRate = new BigDecimal(currency.getBankRate()); - BigDecimal creditAmount = transaction.getAmount().multiply(bankRate).setScale(4, RoundingMode.HALF_EVEN); + 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; 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 ced529c..ecff63c 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.getTotalAmount()) + .amount(transaction.getCreditAmount()) .debitPhone(transaction.getDebitPhone()) .debitRegion("ZW") .type("REQUEST") 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 1d665cd..07046e2 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 @@ -69,11 +69,7 @@ public class ZesaConfirmationHotProcessor implements TransactionProcessorInterfa transaction.setCreditCurrency(CurrencyType.USD); } - if(transaction.getDebitCurrency().equals(CurrencyType.USD) && transaction.getCreditCurrency().equals(CurrencyType.ZWG)) { - transaction.setCreditAmount(transactionService.calculateCreditAmount(transaction)); - }else { - transaction.setCreditAmount(transaction.getAmount()); - } + transaction.setCreditAmount(transactionService.calculateCreditAmount(transaction)); // token should've been updated by checkCustomer if (!hotRechargeBalanceService.checkBalance(token, transaction.getCreditAmount(), accId)) { @@ -85,6 +81,7 @@ public class ZesaConfirmationHotProcessor implements TransactionProcessorInterfa transaction.setStatus(Status.SUCCESS); transaction.setResponseCode("00"); + transaction.setCreditPhone(transaction.getDebitPhone()); List> additionalDataList = buildAdditionalData(customerData); transaction.setAdditionalData(additionalDataList); diff --git a/src/main/java/zw/qantra/tm/domain/services/processors/integrations/HotRechargeIntegrationProcessor.java b/src/main/java/zw/qantra/tm/domain/services/processors/integrations/HotRechargeIntegrationProcessor.java index b2a161d..0ba1e0a 100644 --- a/src/main/java/zw/qantra/tm/domain/services/processors/integrations/HotRechargeIntegrationProcessor.java +++ b/src/main/java/zw/qantra/tm/domain/services/processors/integrations/HotRechargeIntegrationProcessor.java @@ -128,29 +128,7 @@ public class HotRechargeIntegrationProcessor implements TransactionProcessorInte throw new RuntimeException(e); } logger.info("Simulating HotRecharge success"); - return Utils.fromJson("{\n" + - " \"successful\": true,\n" + - " \"rechargeId\": 1.9080854E8,\n" + - " \"amount\": 265.0,\n" + - " \"discount\": 1.2,\n" + - " \"balance\": {\n" + - " \"accountTypeId\": 2.0,\n" + - " \"name\": \"Utility ZWG\",\n" + - " \"balance\": 3306.32\n" + - " },\n" + - " \"message\": \"Transaction processed successfully\",\n" + - " \"rechargeData\": {\n" + - " \"Network\": \"ZESA\",\n" + - " \"Target\": \"07088597534\",\n" + - " \"Cost\": \"261.8200\",\n" + - " \"Token\": \"6616 0517 2063 6675 8254\",\n" + - " \"Units\": \"40.92\",\n" + - " \"NetAmount\": \"250\",\n" + - " \"TaxAmount\": \"0\",\n" + - " \"Levy\": \"15\",\n" + - " \"Arrears\": \"0\"\n" + - " }\n" + - "}", LinkedHashMap.class); + return getZesaPayload(); } try { @@ -262,6 +240,32 @@ public class HotRechargeIntegrationProcessor implements TransactionProcessorInte return additionalDataList; } + private LinkedHashMap getZesaPayload() { + return Utils.fromJson("{\n" + + " \"successful\": true,\n" + + " \"rechargeId\": 1.9080854E8,\n" + + " \"amount\": 265.0,\n" + + " \"discount\": 1.2,\n" + + " \"balance\": {\n" + + " \"accountTypeId\": 2.0,\n" + + " \"name\": \"Utility ZWG\",\n" + + " \"balance\": 3306.32\n" + + " },\n" + + " \"message\": \"Transaction processed successfully\",\n" + + " \"rechargeData\": {\n" + + " \"Network\": \"ZESA\",\n" + + " \"Target\": \"07088597534\",\n" + + " \"Cost\": \"261.8200\",\n" + + " \"Token\": \"6616 0517 2063 6675 8254\",\n" + + " \"Units\": \"40.92\",\n" + + " \"NetAmount\": \"250\",\n" + + " \"TaxAmount\": \"0\",\n" + + " \"Levy\": \"15\",\n" + + " \"Arrears\": \"0\"\n" + + " }\n" + + "}", LinkedHashMap.class); + } + @Override public Object reverse(Transaction transaction) { return transaction;