You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by aw...@apache.org on 2021/08/09 11:58:49 UTC

[fineract-cn-deposit-account-management] branch revert-23-acct-transfer created (now 996ccc7)

This is an automated email from the ASF dual-hosted git repository.

awasum pushed a change to branch revert-23-acct-transfer
in repository https://gitbox.apache.org/repos/asf/fineract-cn-deposit-account-management.git.


      at 996ccc7  Revert "AL-52-account-transfer-txn"

This branch includes the following new commits:

     new 996ccc7  Revert "AL-52-account-transfer-txn"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[fineract-cn-deposit-account-management] 01/01: Revert "AL-52-account-transfer-txn"

Posted by aw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

awasum pushed a commit to branch revert-23-acct-transfer
in repository https://gitbox.apache.org/repos/asf/fineract-cn-deposit-account-management.git

commit 996ccc74ab0c0607e90ee2f54cfb3e1279153bc7
Author: Awasum Yannick <ya...@gmail.com>
AuthorDate: Mon Aug 9 12:58:44 2021 +0100

    Revert "AL-52-account-transfer-txn"
---
 .../domain/data/TransactionActionType.java         |  2 +-
 .../domain/data/TransactionRequestData.java        | 26 +--------
 .../command/handler/TransactionCommandHandler.java |  3 -
 .../internal/service/TransactionService.java       | 64 +++++++++-------------
 4 files changed, 27 insertions(+), 68 deletions(-)

diff --git a/api/src/main/java/org/apache/fineract/cn/deposit/api/v1/transaction/domain/data/TransactionActionType.java b/api/src/main/java/org/apache/fineract/cn/deposit/api/v1/transaction/domain/data/TransactionActionType.java
index 4a689e7..efa253d 100644
--- a/api/src/main/java/org/apache/fineract/cn/deposit/api/v1/transaction/domain/data/TransactionActionType.java
+++ b/api/src/main/java/org/apache/fineract/cn/deposit/api/v1/transaction/domain/data/TransactionActionType.java
@@ -22,5 +22,5 @@ public enum TransactionActionType {
 
     WITHDRAWAL,
     DEPOSIT,
-    TRANSFER;
+    ;
 }
diff --git a/api/src/main/java/org/apache/fineract/cn/deposit/api/v1/transaction/domain/data/TransactionRequestData.java b/api/src/main/java/org/apache/fineract/cn/deposit/api/v1/transaction/domain/data/TransactionRequestData.java
index f92a576..deb16ae 100644
--- a/api/src/main/java/org/apache/fineract/cn/deposit/api/v1/transaction/domain/data/TransactionRequestData.java
+++ b/api/src/main/java/org/apache/fineract/cn/deposit/api/v1/transaction/domain/data/TransactionRequestData.java
@@ -56,19 +56,12 @@ public class TransactionRequestData {
 
     private  String subTxnId;
 
-    @Length(max = 32)
-    private String fromAccountId;
-
-    @Length(max = 32)
-    private String toAccountId;
-
     public TransactionRequestData() {
     }
 
     public TransactionRequestData(String transactionCode, String requestCode, String routingCode, String externalId, String accountId,
                                   String note, LocalDateTime expiration,
-                                  MoneyData amount, String subTxnId,
-                                  String fromAccountId, String toAccountId) {
+                                  MoneyData amount, String subTxnId) {
         this.transactionCode = transactionCode;
         this.requestCode = requestCode;
         this.routingCode = routingCode;
@@ -79,8 +72,6 @@ public class TransactionRequestData {
         this.amount = amount;
         //this.geoCode = geoCode;
         this.subTxnId = subTxnId;
-        this.fromAccountId = fromAccountId;
-        this.toAccountId = toAccountId;
     }
 
     @NotNull
@@ -160,19 +151,4 @@ public class TransactionRequestData {
         return transactionCode;
     }
 
-    public String getFromAccountId() {
-        return fromAccountId;
-    }
-
-    public void setFromAccountId(String fromAccountId) {
-        this.fromAccountId = fromAccountId;
-    }
-
-    public String getToAccountId() {
-        return toAccountId;
-    }
-
-    public void setToAccountId(String toAccountId) {
-        this.toAccountId = toAccountId;
-    }
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/deposit/service/internal/command/handler/TransactionCommandHandler.java b/service/src/main/java/org/apache/fineract/cn/deposit/service/internal/command/handler/TransactionCommandHandler.java
index d9a4db0..f3740ad 100644
--- a/service/src/main/java/org/apache/fineract/cn/deposit/service/internal/command/handler/TransactionCommandHandler.java
+++ b/service/src/main/java/org/apache/fineract/cn/deposit/service/internal/command/handler/TransactionCommandHandler.java
@@ -63,9 +63,6 @@ public class TransactionCommandHandler {
                 //command = dataValidator.validateCommitTransfer(command);
                 return transactionService.deposit(command);
             }
-            case TRANSFER: {
-                return transactionService.transfer(command);
-            }
             default:
                 return null;
         }
diff --git a/service/src/main/java/org/apache/fineract/cn/deposit/service/internal/service/TransactionService.java b/service/src/main/java/org/apache/fineract/cn/deposit/service/internal/service/TransactionService.java
index 97a3ac0..5f88e0d 100644
--- a/service/src/main/java/org/apache/fineract/cn/deposit/service/internal/service/TransactionService.java
+++ b/service/src/main/java/org/apache/fineract/cn/deposit/service/internal/service/TransactionService.java
@@ -54,7 +54,10 @@ import java.math.BigDecimal;
 import java.math.MathContext;
 import java.time.Clock;
 import java.time.LocalDateTime;
-import java.util.*;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
 import java.util.stream.Collectors;
 
 @Service
@@ -89,13 +92,13 @@ public class TransactionService {
     @Transactional
     public TransactionResponseData withdraw(TransactionCommand command) {
         TransactionRequestData request = command.getTransactionRequest();
-        AccountWrapper accountWrapper = validateAndGetAccount(request, request.getAccountId(), TransactionTypeEnum.WITHDRAWAL);
+        AccountWrapper accountWrapper = validateAndGetAccount(request, TransactionTypeEnum.WITHDRAWAL);
         LocalDateTime transactionDate = getNow();
         //get txntype charges
         List<Charge> charges = getCharges(accountWrapper.account.getIdentifier(), TransactionTypeEnum.WITHDRAWAL);
         //todo: get subTxnType charges
 
-        TransactionEntity txn = doWithdraw(request, accountWrapper, charges, getNow(), request.getAccountId());
+        TransactionEntity txn = doWithdraw(request, accountWrapper, charges, getNow());
 
 
         return TransactionResponseData.build(request.getRoutingCode(), request.getExternalId(),
@@ -106,40 +109,22 @@ public class TransactionService {
     @Transactional
     public TransactionResponseData deposit(TransactionCommand command) {
         TransactionRequestData request = command.getTransactionRequest();
-        AccountWrapper accountWrapper = validateAndGetAccount(request, request.getAccountId(), TransactionTypeEnum.DEPOSIT);
+        AccountWrapper accountWrapper = validateAndGetAccount(request, TransactionTypeEnum.DEPOSIT);
         LocalDateTime transactionDate = getNow();
         //get txntype charges
         List<Charge> charges = getCharges(accountWrapper.account.getIdentifier(), TransactionTypeEnum.DEPOSIT);
         //todo: get subTxnType charges
-        TransactionEntity txn = doDeposit(request, accountWrapper, charges, getNow(), request.getAccountId());
+        TransactionEntity txn = doDeposit(request, accountWrapper, charges, getNow());
 
         return TransactionResponseData.build(request.getRoutingCode(), request.getExternalId(),
                 request.getRequestCode(), ActionState.ACCEPTED,
                 null, txn.getIdentifier(), transactionDate);
     }
 
-    public TransactionResponseData transfer(TransactionCommand command) {
-        TransactionRequestData request = command.getTransactionRequest();
-        AccountWrapper fromAccountWrapper = validateAndGetAccount(request, request.getFromAccountId(), TransactionTypeEnum.WITHDRAWAL);
-        AccountWrapper toAccountWrapper = validateAndGetAccount(request, request.getToAccountId(), TransactionTypeEnum.DEPOSIT);
-        LocalDateTime transactionDate = getNow();
-        //get txntype charges
-        List<Charge> charges = getCharges(fromAccountWrapper.account.getIdentifier(), TransactionTypeEnum.ACCOUNT_TRANSFER);
-        //todo: get subTxnType charges
-
-        TransactionEntity txn = doWithdraw(request, fromAccountWrapper, charges, getNow(), request.getFromAccountId());
-        TransactionEntity txn2 = doDeposit(request, toAccountWrapper, new ArrayList<>(), getNow(), request.getToAccountId());
-
-        return TransactionResponseData.build(request.getRoutingCode(), request.getExternalId(),
-                request.getRequestCode(), ActionState.ACCEPTED,
-                null, txn.getIdentifier() +"_to_"+ txn2.getIdentifier(), transactionDate);
-    }
-
-    private TransactionEntity doDeposit(TransactionRequestData request, AccountWrapper accountWrapper,
-                                        List<Charge> charges, LocalDateTime transactionDate, String accountId) {
+    private TransactionEntity doDeposit(TransactionRequestData request, AccountWrapper accountWrapper, List<Charge> charges, LocalDateTime transactionDate) {
         BigDecimal amount = request.getAmount().getAmount();
 
-        TransactionEntity txn = createTransaction(request,TransactionTypeEnum.DEPOSIT, transactionDate, CREDIT, null, accountId);
+        TransactionEntity txn = createTransaction(request,TransactionTypeEnum.DEPOSIT, transactionDate, CREDIT, null);
         String debitAccountIdentifier = accountWrapper.productDefinition.getCashAccountIdentifier();
         /* if subtxn is provided and it has an account configured the do debit that account*/
         if(StringUtils.isNotBlank(request.getSubTxnId())){
@@ -161,7 +146,7 @@ public class TransactionService {
         addDebtor(debitAccountIdentifier, amount.doubleValue(), debtors);
 
 
-        prepareCharges(request, accountWrapper, charges, debtors, creditors, txn, accountId);
+        prepareCharges(request, accountWrapper, charges, debtors, creditors, txn);
 
         if (debtors.isEmpty()) // must be same size as creditors
             throw ServiceException.badRequest("Debit and Credit doesn't match");
@@ -177,10 +162,10 @@ public class TransactionService {
 
 
     private TransactionEntity doWithdraw(@NotNull TransactionRequestData request, @NotNull AccountWrapper accountWrapper,
-                                 List<Charge> charges, LocalDateTime transactionDate, String accountId) {
+                                 List<Charge> charges, LocalDateTime transactionDate) {
         BigDecimal amount = request.getAmount().getAmount();
 
-        TransactionEntity txn = createTransaction(request, TransactionTypeEnum.WITHDRAWAL, transactionDate, DEBIT, null, accountId);
+        TransactionEntity txn = createTransaction(request, TransactionTypeEnum.WITHDRAWAL, transactionDate, DEBIT, null);
 
         String creditAccountIdentifier = accountWrapper.productDefinition.getCashAccountIdentifier();
         /* if subtxn is provided and it has an account configured the do credit that account*/
@@ -202,7 +187,7 @@ public class TransactionService {
         addCreditor(creditAccountIdentifier, amount.doubleValue(), creditors);
         addDebtor(accountWrapper.account.getIdentifier(), amount.doubleValue(), debtors);
 
-        prepareCharges(request, accountWrapper, charges, debtors, creditors, txn, accountId);
+        prepareCharges(request, accountWrapper, charges, debtors, creditors, txn);
 
         if (debtors.isEmpty()) // must be same size as creditors
             throw ServiceException.badRequest("Debit and Credit doesn't match");
@@ -218,7 +203,7 @@ public class TransactionService {
 
     private void prepareCharges(@NotNull TransactionRequestData request, @NotNull AccountWrapper accountWrapper,
                                 @NotNull List<Charge> charges, HashSet<Debtor> debtors, HashSet<Creditor> creditors,
-                                TransactionEntity txn, String accountId) {
+                                TransactionEntity txn) {
 
 
         BigDecimal amount = request.getAmount().getAmount();
@@ -239,16 +224,18 @@ public class TransactionService {
         for(Charge charge : charges){
             addCreditor(charge.getIncomeAccountIdentifier(), calcChargeAmount(amount, charge).doubleValue(), creditors);
             addDebtor(accountWrapper.account.getIdentifier(), calcChargeAmount(amount, charge).doubleValue(), debtors);
-            createTransaction(request,TransactionTypeEnum.CHARGES_PAYMENT, getNow(), DEBIT, txn, accountId);
+            createTransaction(request,TransactionTypeEnum.CHARGES_PAYMENT, getNow(), DEBIT, txn);
         }
 
     }
 
 
-    private AccountWrapper validateAndGetAccount(@NotNull TransactionRequestData request, String accountId, TransactionTypeEnum txnType) {
+
+    private AccountWrapper validateAndGetAccount(@NotNull TransactionRequestData request, TransactionTypeEnum txnType) {
         //TODO: error handling
+        String accountId = request.getAccountId();
         Account account = ledgerManager.findAccount(accountId);
-        validateAccount(request.getAmount(), account);
+        validateAccount(request, account);
 
         ProductInstance product = productInstanceService.findByAccountIdentifier(accountId).get();
         ProductDefinition productDefinition = productDefinitionService.findProductDefinition(product.getProductIdentifier()).get();
@@ -272,7 +259,7 @@ public class TransactionService {
     }
 
 
-    private void validateAccount(MoneyData requestAmount, Account account) {
+    private void validateAccount(@NotNull TransactionRequestData request, Account account) {
         validateAccount(account);
 
         String accountId = account.getIdentifier();
@@ -284,7 +271,7 @@ public class TransactionService {
                 throw new UnsupportedOperationException("Product Definition is inactive");
 
             Currency currency = productDefinition.getCurrency();
-            if (!currency.getCode().equals(requestAmount.getCurrency()))
+            if (!currency.getCode().equals(request.getAmount().getCurrency()))
                 throw new UnsupportedOperationException();
         }
     }
@@ -374,7 +361,7 @@ public class TransactionService {
 
     private TransactionEntity createTransaction(TransactionRequestData request, TransactionTypeEnum txnType,
                                                 LocalDateTime transactionDate, String tranType,
-                                                TransactionEntity parent, String accountId) {
+                                                TransactionEntity parent) {
         TransactionEntity txn = new TransactionEntity();
         UUID uuid=UUID.randomUUID();
 
@@ -396,8 +383,8 @@ public class TransactionService {
         txn.setCreatedOn(getNow());
         /*txn.setLastModifiedBy();
         txn.setLastModifiedOn();*/
-        markLastTransaction(accountId, transactionDate);
-        txn.setAccountId(accountId);
+        markLastTransaction(request.getAccountId(), transactionDate);
+        txn.setAccountId(request.getAccountId());
         txn.setType(tranType);
         txn.setParentTransaction(parent);
         transactionRepository.save(txn);
@@ -442,7 +429,6 @@ public class TransactionService {
     }
 
 
-
     public static class AccountWrapper {
         @NotNull
         private final Account account;