You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ju...@apache.org on 2019/10/09 07:39:31 UTC

[fineract-cn-cheques] 17/41: added ability to handle legacy account numbers

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

juhan pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract-cn-cheques.git

commit b0bb0e8269578f3e9f6dfe7d883d7d6f1f03d4da
Author: mgeiss <mg...@mifos.org>
AuthorDate: Tue Oct 3 11:15:45 2017 +0200

    added ability to handle legacy account numbers
---
 api/src/main/java/io/mifos/cheque/api/v1/domain/Cheque.java |  1 -
 .../io/mifos/cheque/api/v1/domain/ChequeTransaction.java    |  1 -
 .../src/main/java/io/mifos/cheque/TestCheques.java          | 12 ++++++++----
 component-test/src/main/java/io/mifos/cheque/TestMICR.java  |  7 +++++++
 .../service/internal/command/handler/ChequeAggregate.java   |  4 ++--
 .../service/internal/service/helper/AccountingService.java  | 13 ++++++++++---
 6 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/api/src/main/java/io/mifos/cheque/api/v1/domain/Cheque.java b/api/src/main/java/io/mifos/cheque/api/v1/domain/Cheque.java
index a14a968..e50172b 100644
--- a/api/src/main/java/io/mifos/cheque/api/v1/domain/Cheque.java
+++ b/api/src/main/java/io/mifos/cheque/api/v1/domain/Cheque.java
@@ -18,7 +18,6 @@ package io.mifos.cheque.api.v1.domain;
 import org.hibernate.validator.constraints.NotEmpty;
 
 import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
 
 public class Cheque {
 
diff --git a/api/src/main/java/io/mifos/cheque/api/v1/domain/ChequeTransaction.java b/api/src/main/java/io/mifos/cheque/api/v1/domain/ChequeTransaction.java
index 43507bb..1129613 100644
--- a/api/src/main/java/io/mifos/cheque/api/v1/domain/ChequeTransaction.java
+++ b/api/src/main/java/io/mifos/cheque/api/v1/domain/ChequeTransaction.java
@@ -16,7 +16,6 @@
 package io.mifos.cheque.api.v1.domain;
 
 import io.mifos.core.lang.validation.constraints.ValidIdentifier;
-import org.hibernate.validator.constraints.NotEmpty;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
diff --git a/component-test/src/main/java/io/mifos/cheque/TestCheques.java b/component-test/src/main/java/io/mifos/cheque/TestCheques.java
index 0acbd3b..f0b8183 100644
--- a/component-test/src/main/java/io/mifos/cheque/TestCheques.java
+++ b/component-test/src/main/java/io/mifos/cheque/TestCheques.java
@@ -16,6 +16,7 @@
 package io.mifos.cheque;
 
 import com.google.common.collect.Sets;
+import io.mifos.accounting.api.v1.domain.Account;
 import io.mifos.accounting.api.v1.domain.Creditor;
 import io.mifos.accounting.api.v1.domain.Debtor;
 import io.mifos.accounting.api.v1.domain.JournalEntry;
@@ -37,14 +38,11 @@ import org.mockito.Matchers;
 import org.mockito.Mockito;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.validation.AbstractErrors;
 import org.springframework.validation.BeanPropertyBindingResult;
-import org.springframework.validation.BindingResult;
-import org.springframework.validation.Errors;
 import org.springframework.validation.Validator;
-import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
 
 import java.util.Collections;
+import java.util.Optional;
 import java.util.UUID;
 
 public class TestCheques extends AbstractChequeTest {
@@ -91,6 +89,12 @@ public class TestCheques extends AbstractChequeTest {
         .doAnswer(invocation -> true)
         .when(this.accountingServiceSpy).accountExists(randomCheque.getMicr().getAccountNumber());
 
+    final Account mockedAccount = new Account();
+    mockedAccount.setIdentifier(randomCheque.getMicr().getAccountNumber());
+    Mockito
+        .doAnswer(invocation -> Optional.of(mockedAccount))
+        .when(this.accountingServiceSpy).findAccount(randomCheque.getMicr().getAccountNumber());
+
     final ChequeTransaction chequeTransaction = new ChequeTransaction();
     chequeTransaction.setCheque(randomCheque);
     chequeTransaction.setChequesReceivableAccount(RandomStringUtils.randomAlphabetic(34));
diff --git a/component-test/src/main/java/io/mifos/cheque/TestMICR.java b/component-test/src/main/java/io/mifos/cheque/TestMICR.java
index 197c235..ea96c7b 100644
--- a/component-test/src/main/java/io/mifos/cheque/TestMICR.java
+++ b/component-test/src/main/java/io/mifos/cheque/TestMICR.java
@@ -15,6 +15,7 @@
  */
 package io.mifos.cheque;
 
+import io.mifos.accounting.api.v1.domain.Account;
 import io.mifos.cheque.api.v1.EventConstants;
 import io.mifos.cheque.api.v1.client.DependingResourceNotValidException;
 import io.mifos.cheque.api.v1.client.InvalidChequeNumberException;
@@ -150,6 +151,12 @@ public class TestMICR extends AbstractChequeTest {
         .doAnswer(invocation -> true)
         .when(this.accountingServiceSpy).accountExists(randomCheque.getMicr().getAccountNumber());
 
+    final Account mockedAccount = new Account();
+    mockedAccount.setIdentifier(randomCheque.getMicr().getAccountNumber());
+    Mockito
+        .doAnswer(invocation -> Optional.of(mockedAccount))
+        .when(this.accountingServiceSpy).findAccount(randomCheque.getMicr().getAccountNumber());
+
     final ChequeTransaction chequeTransaction = new ChequeTransaction();
     chequeTransaction.setCheque(randomCheque);
     chequeTransaction.setCreditorAccountNumber(RandomStringUtils.randomAlphanumeric(34));
diff --git a/service/src/main/java/io/mifos/cheque/service/internal/command/handler/ChequeAggregate.java b/service/src/main/java/io/mifos/cheque/service/internal/command/handler/ChequeAggregate.java
index 3bb746a..666742f 100644
--- a/service/src/main/java/io/mifos/cheque/service/internal/command/handler/ChequeAggregate.java
+++ b/service/src/main/java/io/mifos/cheque/service/internal/command/handler/ChequeAggregate.java
@@ -158,8 +158,8 @@ public class ChequeAggregate {
       } else {
         throw ServiceException.conflict("Account {0} never issued cheques.", micr.getAccountNumber());
       }
-
-      debtor.setAccountNumber(micr.getAccountNumber());
+      this.accountingService.findAccount(micr.getAccountNumber())
+          .ifPresent(account -> debtor.setAccountNumber(account.getIdentifier()));
       chequeEntity.setState(State.PROCESSED.name());
     } else {
       debtor.setAccountNumber(chequeTransactionCommand.chequesReceivableAccount());
diff --git a/service/src/main/java/io/mifos/cheque/service/internal/service/helper/AccountingService.java b/service/src/main/java/io/mifos/cheque/service/internal/service/helper/AccountingService.java
index 4667c04..46bb20a 100644
--- a/service/src/main/java/io/mifos/cheque/service/internal/service/helper/AccountingService.java
+++ b/service/src/main/java/io/mifos/cheque/service/internal/service/helper/AccountingService.java
@@ -19,6 +19,7 @@ import com.google.common.collect.Sets;
 import io.mifos.accounting.api.v1.client.AccountNotFoundException;
 import io.mifos.accounting.api.v1.client.LedgerManager;
 import io.mifos.accounting.api.v1.domain.Account;
+import io.mifos.accounting.api.v1.domain.AccountPage;
 import io.mifos.accounting.api.v1.domain.Creditor;
 import io.mifos.accounting.api.v1.domain.Debtor;
 import io.mifos.accounting.api.v1.domain.JournalEntry;
@@ -67,7 +68,7 @@ public class AccountingService {
       return;
     }
 
-    final Account account = this.ledgerManager.findAccount(sourceAccount);
+    final Account account = this.findAccount(sourceAccount).orElseThrow(AccountNotFoundException::new);
     if (account.getBalance() < totalCharges) {
       throw ServiceException.conflict("Insufficient account balance.");
     }
@@ -80,7 +81,7 @@ public class AccountingService {
     journalEntry.setClerk(UserContextHolder.checkedGetUser());
 
     final Debtor debtor = new Debtor();
-    debtor.setAccountNumber(sourceAccount);
+    debtor.setAccountNumber(account.getIdentifier());
     debtor.setAmount(totalCharges.toString());
     journalEntry.setDebtors(Sets.newHashSet(debtor));
 
@@ -115,7 +116,13 @@ public class AccountingService {
     try {
       return Optional.of(this.ledgerManager.findAccount(accountNumber));
     } catch (final AccountNotFoundException anfex) {
-      return Optional.empty();
+      final AccountPage accountPage = this.ledgerManager.fetchAccounts(true, accountNumber, null, true,
+          0, 10, null, null);
+
+      return accountPage.getAccounts()
+          .stream()
+          .filter(account -> account.getAlternativeAccountNumber().equals(accountNumber))
+          .findFirst();
     }
   }
 }