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:50 UTC
[fineract-cn-deposit-account-management] 01/01: Revert
"AL-52-account-transfer-txn"
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;