From 63ff9d2999cd5ac35aa4278ee776a3d70639bdbb Mon Sep 17 00:00:00 2001 From: Raja Nabeel Date: Tue, 21 May 2024 17:43:01 +0500 Subject: [PATCH] commit --- .../uco/dto/EvaluatedCurrencyReponse.java | 2 +- ...omerAccountOpeningNotAllowedException.java | 11 ++++ .../uco/service/TransactionPinService.java | 1 + .../mfsys/uco/service/TransactionService.java | 60 +++++++++---------- .../mfsys/uco/service/UcoAccountService.java | 10 ++++ 5 files changed, 53 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/mfsys/uco/exception/CustomerAccountOpeningNotAllowedException.java diff --git a/src/main/java/com/mfsys/uco/dto/EvaluatedCurrencyReponse.java b/src/main/java/com/mfsys/uco/dto/EvaluatedCurrencyReponse.java index 911c6cb..526fcd7 100644 --- a/src/main/java/com/mfsys/uco/dto/EvaluatedCurrencyReponse.java +++ b/src/main/java/com/mfsys/uco/dto/EvaluatedCurrencyReponse.java @@ -13,7 +13,7 @@ import java.math.BigDecimal; @NoArgsConstructor public class EvaluatedCurrencyReponse { private String pcrCurrcode; - private double sgtGntramtfc; + private BigDecimal sgtGntramtfc; private double serviceCharges; private double targetPerEratrateact; diff --git a/src/main/java/com/mfsys/uco/exception/CustomerAccountOpeningNotAllowedException.java b/src/main/java/com/mfsys/uco/exception/CustomerAccountOpeningNotAllowedException.java new file mode 100644 index 0000000..8fe0fd0 --- /dev/null +++ b/src/main/java/com/mfsys/uco/exception/CustomerAccountOpeningNotAllowedException.java @@ -0,0 +1,11 @@ +package com.mfsys.uco.exception; + + +import com.mfsys.comm.exception.ApplicationException; +import com.mfsys.comm.exception.ERRCode; + +public class CustomerAccountOpeningNotAllowedException extends ApplicationException { + public CustomerAccountOpeningNotAllowedException() { + super(null, ERRCode.CUSTOMER_ACCOUNT_PRODUCT_ALREADY_EXISTS, null); + } +} diff --git a/src/main/java/com/mfsys/uco/service/TransactionPinService.java b/src/main/java/com/mfsys/uco/service/TransactionPinService.java index 04e2f40..690e2fe 100644 --- a/src/main/java/com/mfsys/uco/service/TransactionPinService.java +++ b/src/main/java/com/mfsys/uco/service/TransactionPinService.java @@ -50,6 +50,7 @@ public class TransactionPinService { public void updateTransactionPin(ChangeTransactionPinRequest request) { CustomerProfile profile = fetchCustomer(request.getPorOrgacode(), request.getCmpCustcode()); + validateOldPin(profile, request.getOldTransPincode()); profile.setCmpUnverifiedTranpin(request.getNewTransPincode()); customerProfileRepository.save(profile); diff --git a/src/main/java/com/mfsys/uco/service/TransactionService.java b/src/main/java/com/mfsys/uco/service/TransactionService.java index b23f3c6..3f6e09f 100644 --- a/src/main/java/com/mfsys/uco/service/TransactionService.java +++ b/src/main/java/com/mfsys/uco/service/TransactionService.java @@ -20,6 +20,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDate; import java.util.*; import java.util.concurrent.atomic.AtomicReference; @@ -160,39 +161,38 @@ public class TransactionService { } public EvaluatedCurrencyReponse getEvaluatedCurrency(String porOrgacode, String baseCurrencyCode, String targetCurrencyCode, double sgtGntramtfc) { - List exchangeRateList = (List) ucoAccountService.fetchExchangeRate(porOrgacode); - Map exchangeRates = new HashMap<>(); - for (Map rateEntry : exchangeRateList) { - String currencyCode = (String) rateEntry.get("pcrCurrcode"); - Double rate = (Double) rateEntry.get("perEratrateact"); - exchangeRates.put(currencyCode, rate); + double pkrAmt = convertToPKR(baseCurrencyCode,sgtGntramtfc,porOrgacode); + double convertFromPkr = convertFromPKR(targetCurrencyCode,pkrAmt,porOrgacode); + List exchangeRateModelList = fetchExchangeRate(porOrgacode); + + Optional rate = exchangeRateModelList.stream() + .filter(x -> x.isPcrCurrbase() && x.getPcrCurrcode().equals(targetCurrencyCode)) + .map(x -> { + BigDecimal bd = BigDecimal.valueOf(1 / x.getPerEratrateact()); + bd = bd.setScale(2, RoundingMode.HALF_UP); + return bd.doubleValue(); + }) + .findFirst(); + + if (!rate.isPresent()) { + rate = exchangeRateModelList.stream() + .filter(x -> !x.isPcrCurrbase() && x.getPcrCurrcode().equals(targetCurrencyCode)) + .map(x -> { + BigDecimal bd = BigDecimal.valueOf(x.getPerEratrateact()); + bd = bd.setScale(2, RoundingMode.HALF_UP); + return bd.doubleValue(); + }) + .findFirst(); } - double convertedAmount = convertCurrency(baseCurrencyCode, targetCurrencyCode, sgtGntramtfc, exchangeRates); - return EvaluatedCurrencyReponse.builder() - .pcrCurrcode(targetCurrencyCode) - .sgtGntramtfc(convertedAmount) - .serviceCharges(0.0) - .targetPerEratrateact(targetCurrencyCode.equals("default") ? (1 / exchangeRates.get(baseCurrencyCode)) : exchangeRates.get(targetCurrencyCode)) - .build(); - } - - public double convertCurrency(String baseCurrencyCode, String targetCurrencyCode, double amount, Map exchangeRates) { - if (baseCurrencyCode.equals(targetCurrencyCode)) { - return amount; - } - if (baseCurrencyCode.equals("default")) { - return exchangeRates.get(targetCurrencyCode) * amount; - } else if (targetCurrencyCode.equals("default")) { - return exchangeRates.get(baseCurrencyCode) * amount; - } - if (!exchangeRates.containsKey(baseCurrencyCode) || !exchangeRates.containsKey(targetCurrencyCode)) { - throw new IllegalArgumentException("Unsupported currency code"); - } + double targetPerEratrateact = rate.orElse(0.0); - double amountInPKR = amount * exchangeRates.get(baseCurrencyCode); - double amountInTargetCurrency = amountInPKR / exchangeRates.get(targetCurrencyCode); - return amountInTargetCurrency; + return EvaluatedCurrencyReponse.builder() + .targetPerEratrateact(targetPerEratrateact) + .serviceCharges(0.0) + .pcrCurrcode(targetCurrencyCode) + .sgtGntramtfc(BigDecimal.valueOf(convertFromPkr).setScale(2, RoundingMode.HALF_UP)) + .build(); } diff --git a/src/main/java/com/mfsys/uco/service/UcoAccountService.java b/src/main/java/com/mfsys/uco/service/UcoAccountService.java index a74cd60..ee17de1 100644 --- a/src/main/java/com/mfsys/uco/service/UcoAccountService.java +++ b/src/main/java/com/mfsys/uco/service/UcoAccountService.java @@ -9,6 +9,7 @@ import com.mfsys.uco.dto.AddAccountRequestModel; import com.mfsys.uco.dto.SignupStep3RequestModel; import com.mfsys.uco.dto.webclientdto.AccountDetail; import com.mfsys.uco.exception.AccountDoesntExistsException; +import com.mfsys.uco.exception.CustomerAccountOpeningNotAllowedException; import com.mfsys.uco.exception.UserAlreadyRegisteredException; import com.mfsys.uco.model.AccountId; import com.mfsys.uco.model.CustomerProfile; @@ -130,7 +131,16 @@ public class UcoAccountService { public void addUcoAccount(AddAccountRequestModel addAccountRequestModel){ String porOrgacode = addAccountRequestModel.getPorOrgacode(); + CustomerProfile customerProfile = customerProfileRepository.findCustomerProfileByCmpEmailAndPorOrgacode(porOrgacode,addAccountRequestModel.getEmail()); + if(Objects.nonNull(customerProfile)){ + List ucoAccountList = ucoAccountRepository.findUcoAccountByCmpCustcode(customerProfile.getPorOrgacode(),customerProfile.getCmpCustcode()); + ucoAccountList.stream().forEach(acc->{ + if(acc.getDmpProdcode().equals(addAccountRequestModel.getDmpProdcode())){ + throw new CustomerAccountOpeningNotAllowedException(); + } + }); + } String accountNumber = webClientDeposit.createUcoAccount(JsonToString(Map.of("payload",preparePayloadForAccount(customerProfile,addAccountRequestModel.getTitle()), "uniqueConstraints",List.of(List.of(String.valueOf(addAccountRequestModel.getDmpProdcode()))))),UCOURI.UCO_CUSTOMER_ACCOUNT,porOrgacode); saveCustomerAccountDetails(porOrgacode,customerProfile.getCmpCustcode(),accountNumber);