The valid from/to dates may be used to define a time period in which
* the cashier is assignable to a teller.
- * The start/end times may be used to define a time period in which
* the cashier works part time.
*
- * @param id the primary key of this cashier
- * @param officeId the primary key of the related office
- * @param staffId the primary key of the related staff
- * @param tellerId the primary key of the related teller
+ * @param id the primary key of this cashier
+ * @param officeId the primary key of the related office
+ * @param officeName the primary key of the related staff
+ * @param staffId the primary key of the related teller
+ * @param staffName
+ * @param tellerId the primary key of the related teller
+ * @param tellerName
* @param description the description of this cashier
- * @param validFrom the valid from date of this cashier
- * @param validTo the valid to date of this cashier
- * @param partTime the part time flag of this cashier
- * @param startTime the start time of this cashier
- * @param endTime the end time of this cashier
- * @return the cashier
+ * @param startDate the valid from date of this cashier
+ * @param endDate the valid to date of this cashier
+ * @param isFullDay the part time flag of this cashier
+ * @param startTime the start time of this cashier
+ * @param endTime the end time of this cashier
+ * @return
*/
public static CashierData instance(final Long id, final Long officeId, String officeName,
final Long staffId, final String staffName, final Long tellerId, final String tellerName,
@@ -169,7 +172,7 @@ public final class CashierData implements Serializable {
/**
* Returns the valid from date of this cashier.
- * The valid from/to dates may be used to define a time period in which
* the cashier is assignable to a teller.
*
@@ -181,7 +184,7 @@ public final class CashierData implements Serializable {
/**
* Returns the valid to date of this cashier.
- * The valid from/to dates may be used to define a time period in which
* the cashier is assignable to a teller.
*
@@ -202,7 +205,7 @@ public final class CashierData implements Serializable {
/**
* Returns the start time of this cashier.
- * The start/end times may be used to define a time period in which
* the cashier works part time.
*
@@ -214,7 +217,7 @@ public final class CashierData implements Serializable {
/**
* Returns the end time of this cashier.
- * The start/end times may be used to define a time period in which
* the cashier works part time.
*
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerData.java
index e86f14f38..439fb72e2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerData.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerData.java
@@ -32,7 +32,7 @@ import java.util.Date;
* {@code TellerData} represents an immutable data object for teller data.
*
* @version 1.0
-<<<<<<< HEAD
+
* @since 2.0.0
* @see java.io.Serializable
* @since 2.0.0
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerJournalData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerJournalData.java
index 6ae4d32a1..284e7af57 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerJournalData.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerJournalData.java
@@ -25,7 +25,7 @@ import java.util.Date;
* {@code TellerJournalData} represents an immutable journal data object.
*
* @version 1.0.0
-<<<<<<< HEAD
+
* @since 2.0.0
* @see java.io.Serializable
* @since 2.0.0
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerTransactionData.java
index e260a6a12..fcb955bfe 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerTransactionData.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerTransactionData.java
@@ -27,7 +27,7 @@ import java.util.Date;
* {@code TellerTransactionData} represents an immutable data object for a transction.
*
* @version 1.0.0
-<<<<<<< HEAD
+
* @since 2.0.0
* @see java.io.Serializable
* @since 2.0.0
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java
index 1d5922faa..64ba634c2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java
@@ -324,7 +324,7 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Returns the valid from date of this cashier.
- *
+ *
*
* The valid from/to dates may be used to define a time period in which the
* cashier is assignable to a teller.
@@ -346,13 +346,13 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Sets the valid from date of this cashier.
- *
+ *
*
* The valid from/to dates may be used to define a time period in which the
* cashier is assignable to a teller.
*
*
- * @param validFrom
+ * @param startDate validFrom
* the valid from date of this cashier
*/
public void setStartDate(Date startDate) {
@@ -361,7 +361,7 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Returns the valid to date of this cashier.
- *
+ *
*
* The valid from/to dates may be used to define a time period in which the
* cashier is assignable to a teller.
@@ -383,13 +383,13 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Sets the valid to date of this cashier.
- *
+ *
*
* The valid from/to dates may be used to define a time period in which the
* cashier is assignable to a teller.
*
*
- * @param validTo
+ * @param endDate validTo
* the valid to date of this cashier
*/
public void setEndDate(Date endDate) {
@@ -409,7 +409,7 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Sets the part time flag of this cashier.
*
- * @param partTime
+ * @param isFullDay partTime
* the part time flag of this cashier
*/
public void setFullDay(Boolean isFullDay) {
@@ -418,7 +418,7 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Returns the start time of this cashier.
- *
+ *
*
* The start/end times may be used to define a time period in which the
* cashier works part time.
@@ -432,7 +432,7 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Set the start time of this cashier.
- *
+ *
*
* The start/end times may be used to define a time period in which the
* cashier works part time.
@@ -447,7 +447,7 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Returns the end time of this cashier.
- *
+ *
*
* The start/end times may be used to define a time period in which the
* cashier works part time.
@@ -461,7 +461,7 @@ public class Cashier extends AbstractPersistableCustom {
/**
* Sets the end time of this cashier.
- *
+ *
*
* The start/end times may be used to define a time period in which the
* cashier works part time.
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java
index 65af4dde5..dbffe3837 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java
@@ -213,7 +213,7 @@ public class CashierTransaction extends AbstractPersistableCustom {
/**
* Sets the transaction type of this cashier transaction.
*
- * @param description the transaction type of this cashier transaction
+ * @param txnType description the transaction type of this cashier transaction
*/
public void setTxnType(Integer txnType) {
this.txnType = txnType;
@@ -239,7 +239,7 @@ public class CashierTransaction extends AbstractPersistableCustom {
/**
* Sets the transaction date of this cashier transaction.
*
- * @param transaction date of this cashier transaction
+ * @param txnDate transaction date of this cashier transaction
*/
public void setTxnDate(Date txnDate) {
this.txnDate = txnDate;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarFrequencyType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarFrequencyType.java
index e7aa8b757..ab39044a6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarFrequencyType.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarFrequencyType.java
@@ -107,8 +107,8 @@ public enum CalendarFrequencyType {
* To convert from period frequency type tp calendar frequency type. This
* method requires code refactoring.
*
- * @param periodFrequencyType
- * @return
+ * @param periodFrequencyType periodFrequencyType
+ * @return CalendarFrequencyType
*/
public static CalendarFrequencyType from(final PeriodFrequencyType periodFrequencyType) {
switch (periodFrequencyType) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java
index b7656f880..62ece1107 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java
@@ -144,8 +144,8 @@ public class ClientTransaction extends AbstractPersistableCustom {
* Converts the content of this Client Transaction to a map which can be
* passed to the accounting module
*
- * @param currencyData
- * @return
+ *
+ *
*/
public Map toMapData() {
final Map thisTransactionData = new LinkedHashMap<>();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/CollectionSheetConstants.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/CollectionSheetConstants.java
index 9b8ca2f10..5ce58e489 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/CollectionSheetConstants.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/CollectionSheetConstants.java
@@ -50,4 +50,5 @@ public class CollectionSheetConstants {
public static final String loanIdParamName = "loanId";
public static final String savingsIdParamName = "savingsId";
public static final String transactionAmountParamName = "transactionAmount";
+ public static final String depositAccountTypeParamName = "depositAccountType";
}
\ No newline at end of file
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/CollectionSheetTransactionDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/CollectionSheetTransactionDataValidator.java
index 826f4a352..ec6192e92 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/CollectionSheetTransactionDataValidator.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/CollectionSheetTransactionDataValidator.java
@@ -36,6 +36,7 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.portfolio.collectionsheet.CollectionSheetConstants;
+import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.portfolio.paymentdetail.PaymentDetailConstants;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
@@ -138,7 +139,7 @@ public class CollectionSheetTransactionDataValidator {
final LocalDate transactionDate = this.fromApiJsonHelper.extractLocalDateNamed(CollectionSheetConstants
.transactionDateParamName, element);
baseDataValidator.reset().parameter(CollectionSheetConstants.transactionDateParamName).value(transactionDate)
- .notNull();
+ .notNull().validateDateBeforeOrEqual(DateUtils.getLocalDateOfTenant());
final String note = this.fromApiJsonHelper.extractStringNamed(CollectionSheetConstants.noteParamName, element);
if (StringUtils.isNotBlank(note)) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/SavingsDueData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/SavingsDueData.java
index c084b3e51..e09c29079 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/SavingsDueData.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/SavingsDueData.java
@@ -40,14 +40,16 @@ public class SavingsDueData {
private final CurrencyData currency;
@SuppressWarnings("unused")
private BigDecimal dueAmount = BigDecimal.ZERO;
+ @SuppressWarnings("unused")
+ private String depositAccountType;
public static SavingsDueData instance(final Long savingsId, final String accountId, final Integer accountStatusId,
- final String productName, final Long productId, final CurrencyData currency, final BigDecimal dueAmount) {
- return new SavingsDueData(savingsId, accountId, accountStatusId, productName, productId, currency, dueAmount);
+ final String productName, final Long productId, final CurrencyData currency, final BigDecimal dueAmount, final String depositAccountType) {
+ return new SavingsDueData(savingsId, accountId, accountStatusId, productName, productId, currency, dueAmount, depositAccountType);
}
private SavingsDueData(final Long savingsId, final String accountId, final Integer accountStatusId, final String productName,
- final Long productId, final CurrencyData currency, final BigDecimal dueAmount) {
+ final Long productId, final CurrencyData currency, final BigDecimal dueAmount, final String depositAccountType) {
this.savingsId = savingsId;
this.accountId = accountId;
this.accountStatusId = accountStatusId;
@@ -55,6 +57,7 @@ public class SavingsDueData {
this.productId = productId;
this.currency = currency;
this.dueAmount = dueAmount;
+ this.depositAccountType = depositAccountType;
}
public String productName() {
@@ -64,5 +67,9 @@ public class SavingsDueData {
public Long productId() {
return this.productId;
}
+
+ public String getDepositAccountType() {
+ return depositAccountType;
+ }
}
\ No newline at end of file
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java
index 8432d36f2..18be4d0a9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java
@@ -235,7 +235,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
.append("if(ln.loan_status_id = 200 , ln.principal_amount , null) As disbursementAmount, ")
.append("sum(ifnull(if(ln.loan_status_id = 300, ls.principal_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.principal_completed_derived, 0.0), 0.0)) As principalDue, ")
.append("ln.principal_repaid_derived As principalPaid, ")
- .append("sum(ifnull(if(ln.loan_status_id = 300, ls.interest_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.interest_completed_derived, 0.0), 0.0)) As interestDue, ")
+ .append("sum(ifnull(if(ln.loan_status_id = 300, ls.interest_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.interest_completed_derived, 0.0), 0.0) - IFNULL(IF(ln.loan_status_id = 300, ls.interest_waived_derived, 0.0), 0.0)) As interestDue, ")
.append("ln.interest_repaid_derived As interestPaid, ")
.append("sum(ifnull(if(ln.loan_status_id = 300, ls.fee_charges_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.fee_charges_completed_derived, 0.0), 0.0)) As feeDue, ")
.append("ln.fee_charges_repaid_derived As feePaid, ")
@@ -439,6 +439,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
for (SavingsDueData savingsDueData : savingsDatas) {
final SavingsProductData savingsProduct = SavingsProductData.lookup(savingsDueData.productId(),
savingsDueData.productName());
+ savingsProduct.setDepositAccountType(savingsDueData.getDepositAccountType());
if (!savingsProducts.contains(savingsProduct)) {
savingsProducts.add(savingsProduct);
}
@@ -515,6 +516,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
.append("sa.currency_multiplesof as inMultiplesOf, ")
.append("rc.`name` as currencyName, ")
.append("rc.display_symbol as currencyDisplaySymbol, ")
+ .append("if(sa.deposit_type_enum=100,'Saving Deposit',if(sa.deposit_type_enum=300,'Recurring Deposit','Current Deposit')) as depositAccountType, ")
.append("rc.internationalized_name_code as currencyNameCode, ")
.append("sum(ifnull(mss.deposit_amount,0) - ifnull(mss.deposit_amount_completed_derived,0)) as dueAmount ")
@@ -526,8 +528,8 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
.append("JOIN m_client cl ON cl.id = gc.client_id ")
.append("JOIN m_savings_account sa ON sa.client_id=cl.id and sa.status_enum=300 ")
.append("JOIN m_savings_product sp ON sa.product_id=sp.id ")
- .append("JOIN m_deposit_account_recurring_detail dard ON sa.id = dard.savings_account_id AND dard.is_mandatory = true AND dard.is_calendar_inherited = true ")
- .append("JOIN m_mandatory_savings_schedule mss ON mss.savings_account_id=sa.id AND mss.duedate <= :dueDate ")
+ .append("LEFT JOIN m_deposit_account_recurring_detail dard ON sa.id = dard.savings_account_id AND dard.is_mandatory = true AND dard.is_calendar_inherited = true ")
+ .append("LEFT JOIN m_mandatory_savings_schedule mss ON mss.savings_account_id=sa.id AND mss.duedate <= :dueDate ")
.append("LEFT JOIN m_currency rc on rc.`code` = sa.currency_code ");
if (isCenterCollection) {
@@ -655,25 +657,25 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
private SavingsDueDataMapper() {}
@Override
- public SavingsDueData mapRow(ResultSet rs, @SuppressWarnings("unused") int rowNum) throws SQLException {
+ public SavingsDueData mapRow(ResultSet rs, int rowNum) throws SQLException {
final Long savingsId = rs.getLong("savingsId");
final String accountId = rs.getString("accountId");
final Integer accountStatusId = JdbcSupport.getInteger(rs, "accountStatusId");
final String productName = rs.getString("productShortName");
final Long productId = rs.getLong("productId");
final BigDecimal dueAmount = rs.getBigDecimal("dueAmount");
-
final String currencyCode = rs.getString("currencyCode");
final String currencyName = rs.getString("currencyName");
final String currencyNameCode = rs.getString("currencyNameCode");
final String currencyDisplaySymbol = rs.getString("currencyDisplaySymbol");
final Integer currencyDigits = JdbcSupport.getInteger(rs, "currencyDigits");
final Integer inMultiplesOf = JdbcSupport.getInteger(rs, "inMultiplesOf");
+ final String depositAccountType = rs.getString("depositAccountType");
// currency
final CurrencyData currency = new CurrencyData(currencyCode, currencyName, currencyDigits, inMultiplesOf,
currencyDisplaySymbol, currencyNameCode);
- return SavingsDueData.instance(savingsId, accountId, accountStatusId, productName, productId, currency, dueAmount);
+ return SavingsDueData.instance(savingsId, accountId, accountStatusId, productName, productId, currency, dueAmount, depositAccountType);
}
}
@@ -818,7 +820,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
public IndividualMandatorySavingsCollectionsheetExtractor(final boolean checkForOfficeId, final boolean checkforStaffId) {
final StringBuffer sb = new StringBuffer(400);
- sb.append("SELECT cl.display_name As clientName, cl.id As clientId, ");
+ sb.append("SELECT if(sa.deposit_type_enum=100,'Saving Deposit',if(sa.deposit_type_enum=300,'Recurring Deposit','Current Deposit')) as depositAccountType, cl.display_name As clientName, cl.id As clientId, ");
sb.append("sa.id As savingsId, sa.account_no As accountId, sa.status_enum As accountStatusId, ");
sb.append("sp.short_name As productShortName, sp.id As productId, ");
sb.append("sa.currency_code as currencyCode, sa.currency_digits as currencyDigits, sa.currency_multiplesof as inMultiplesOf, ");
@@ -827,11 +829,11 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe
sb.append("FROM m_savings_account sa ");
sb.append("JOIN m_client cl ON cl.id = sa.client_id ");
sb.append("JOIN m_savings_product sp ON sa.product_id=sp.id ");
- sb.append("JOIN m_deposit_account_recurring_detail dard ON sa.id = dard.savings_account_id AND dard.is_mandatory = true AND dard.is_calendar_inherited = false ");
- sb.append("JOIN m_mandatory_savings_schedule mss ON mss.savings_account_id=sa.id AND mss.completed_derived = 0 AND mss.duedate <= :dueDate ");
+ sb.append("LEFT JOIN m_deposit_account_recurring_detail dard ON sa.id = dard.savings_account_id AND dard.is_mandatory = true AND dard.is_calendar_inherited = false ");
+ sb.append("LEFT JOIN m_mandatory_savings_schedule mss ON mss.savings_account_id=sa.id AND mss.completed_derived = 0 AND mss.duedate <= :dueDate ");
sb.append("LEFT JOIN m_office of ON of.id = cl.office_id AND of.hierarchy like :officeHierarchy ");
sb.append("LEFT JOIN m_currency rc on rc.`code` = sa.currency_code ");
- sb.append("WHERE sa.status_enum=300 and sa.group_id is null ");
+ sb.append("WHERE sa.status_enum=300 and sa.group_id is null and sa.deposit_type_enum in (100,300,400) ");
sb.append("and (cl.status_enum = 300 or (cl.status_enum = 600 and cl.closedon_date >= :dueDate)) ");
if (checkForOfficeId) {
sb.append("and of.id = :officeId ");
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInMonthType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInMonthType.java
index 2910eae2b..a07ab43b7 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInMonthType.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInMonthType.java
@@ -21,9 +21,10 @@ import java.util.ArrayList;
import java.util.List;
/**
- *
+ *
* People typically use either of the following settings when calculating there
* interest using the daily method:
+ *
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInYearType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInYearType.java
index 81c8b8631..f35c4a078 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInYearType.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInYearType.java
@@ -22,9 +22,10 @@ import java.util.ArrayList;
import java.util.List;
/**
- *
+ *
* People typically use either of the following settings when calculating there
* interest using the daily method:
+ *
* - Actual or
* - 360 or
* - 364 or
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java
index f4008438a..34350c2bd 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java
@@ -564,9 +564,6 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
LocalDate localDate = new LocalDate(meetingDate);
final CenterCalendarDataMapper centerCalendarMapper = new CenterCalendarDataMapper();
String passeddate = formatter.print(localDate);
- if (!isCentersHavingMeetingFrequencyBasedOnOfficeIdAndMeetingDate(officeId, passeddate, staffId)) { throw new GeneralPlatformDomainRuleException(
- "error.msg.collection.sheet.can.not.be.selected.meeting.date.not.attached.to.any.center",
- "Collection sheet can not be generated without meeting date " + passeddate + " attached to any center ", passeddate); }
String sql = centerCalendarMapper.schema();
Collection centerDataArray = null;
if (staffId != null) {
@@ -617,27 +614,6 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
return staffCenterDataArray;
}
- @SuppressWarnings("deprecation")
- private boolean isCentersHavingMeetingFrequencyBasedOnOfficeIdAndMeetingDate(final Long officeId, final String passeddate,
- final Long staffId) {
- final StringBuilder sb = new StringBuilder(100);
- sb.append("SELECT COUNT(*) ");
- sb.append("FROM m_calendar c ");
- sb.append("JOIN m_calendar_instance ci ON ci.calendar_id=c.id AND ci.entity_type_enum=4 ");
- sb.append("JOIN m_group ce ON ce.id = ci.entity_id ");
- sb.append("JOIN m_group g ON g.parent_id = ce.id ");
- sb.append("WHERE c.start_date = ? AND g.office_id= ? ");
- int i = 0;
- if (staffId != null) {
- sb.append(" AND g.staff_id = ? ");
- i = this.jdbcTemplate.queryForInt(sb.toString(), new Object[] { passeddate, officeId, staffId });
- } else {
- i = this.jdbcTemplate.queryForInt(sb.toString(), new Object[] { passeddate, officeId });
- }
- if (i > 0) { return true; }
- return false;
- }
-
public void validateForGenerateCollectionSheet(final Long staffId) {
final List dataValidationErrors = new ArrayList<>();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java
index 8da89c094..e3c51c761 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java
@@ -320,11 +320,14 @@ public class LoansApiResource {
Map memberLoanCycle = new HashMap<>();
Collection members = loanAccountGroupData.groupData().clientMembers();
accountLinkingOptions = new ArrayList<>();
- for (ClientData clientData : members) {
- Integer loanCounter = this.loanReadPlatformService.retriveLoanCounter(clientData.id(), productId);
- memberLoanCycle.put(clientData.id(), loanCounter);
- accountLinkingOptions.addAll(getaccountLinkingOptions(newLoanAccount, clientData.id(), groupId));
+ if(members != null){
+ for (ClientData clientData : members) {
+ Integer loanCounter = this.loanReadPlatformService.retriveLoanCounter(clientData.id(), productId);
+ memberLoanCycle.put(clientData.id(), loanCounter);
+ accountLinkingOptions.addAll(getaccountLinkingOptions(newLoanAccount, clientData.id(), groupId));
+ }
}
+
newLoanAccount = LoanAccountData.associateMemberVariations(newLoanAccount, memberLoanCycle);
}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
index 73d8edf44..b71205e1a 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
@@ -5585,14 +5585,17 @@ public class Loan extends AbstractPersistableCustom {
}
/**
+ * @param applicationCurrency
* @param restCalendarInstance
* TODO
* @param compoundingCalendarInstance
* TODO
+ * @param loanCalendar
* @param floatingRateDTO
* TODO
- * @param isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled
- * @param loanCalendarInstance
+ * @param isSkipRepaymentonmonthFirst
+ * @param numberofdays
+ * @param holidayDetailDTO
* Used for accessing the loan's calendar object
* @return application terms of the Loan object
**/
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
index 8dc72071b..8c82ebf09 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
@@ -741,10 +741,14 @@ public class LoanCharge extends AbstractPersistableCustom {
}
/**
+ * @param incrementBy
+ *
+ * @param installmentNumber
+ *
* @param feeAmount
* TODO
- * @param processAmount
- * Amount used to pay off this charge
+ *
+ *
* @return Actual amount paid on this charge
*/
public Money updatePaidAmountBy(final Money incrementBy, final Integer installmentNumber, final Money feeAmount) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanSummary.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanSummary.java
index 769a7fe6c..8bff6dc30 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanSummary.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanSummary.java
@@ -32,7 +32,7 @@ import org.apache.fineract.organisation.monetary.domain.Money;
* Encapsulates all the summary details of a {@link Loan}.
*
* {@link LoanSummary} fields are updated through a scheduled job. see -
- * {@link UpdateLoanSummariesScheduledJob}.
+ *
*/
@Embeddable
public final class LoanSummary {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
index 0da639319..938177fb6 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
@@ -386,6 +386,11 @@ public class LoanTransaction extends AbstractPersistableCustom {
*
* This accumulates the values passed to the already existent values for
* each of the portions.
+ *
+ * @param principal principal
+ * @param interest interest
+ * @param feeCharges feeCharges
+ * @param penaltyCharges penaltyCharges
*/
public void updateComponents(final Money principal, final Money interest, final Money feeCharges, final Money penaltyCharges) {
final MonetaryCurrency currency = principal.getCurrency();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DecliningBalanceInterestLoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DecliningBalanceInterestLoanScheduleGenerator.java
index 1bbf261d2..2c564839e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DecliningBalanceInterestLoanScheduleGenerator.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DecliningBalanceInterestLoanScheduleGenerator.java
@@ -39,7 +39,7 @@ import org.joda.time.LocalDate;
* - Equal principal payments
* - Equal installment payments
*
- *
+ *
*
*
* When amortized using equal principal payments, the principal
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java
index e69471463..4c30ba805 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java
@@ -81,7 +81,7 @@ public class LoanRescheduleRequestDataValidator {
*
* @param jsonCommand
* the JSON command object (instance of the JsonCommand class)
- * @return void
+ *
**/
public void validateForCreateAction(final JsonCommand jsonCommand, final Loan loan) {
@@ -214,7 +214,7 @@ public class LoanRescheduleRequestDataValidator {
*
* @param jsonCommand
* the JSON command object (instance of the JsonCommand class)
- * @return void
+ *
**/
public void validateForApproveAction(final JsonCommand jsonCommand, LoanRescheduleRequest loanRescheduleRequest) {
final String jsonString = jsonCommand.json();
@@ -283,7 +283,7 @@ public class LoanRescheduleRequestDataValidator {
*
* @param jsonCommand
* the JSON command object (instance of the JsonCommand class)
- * @return void
+ *
**/
public void validateForRejectAction(final JsonCommand jsonCommand, LoanRescheduleRequest loanRescheduleRequest) {
final String jsonString = jsonCommand.json();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java
index 188d20af4..bf06f7712 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java
@@ -267,7 +267,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom {
*
* @param approvedByUser the user who approved the request
* @param approvedOnDate the date of the approval
- * @return void
+ *
**/
public void approve(final AppUser approvedByUser, final LocalDate approvedOnDate) {
@@ -284,7 +284,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom {
*
* @param approvedByUser the user who approved the request
* @param approvedOnDate the date of the approval
- * @return void
+ *
**/
public void reject(final AppUser approvedByUser, final LocalDate approvedOnDate) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/exception/LoanRescheduleRequestNotFoundException.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/exception/LoanRescheduleRequestNotFoundException.java
index 9a8afcec5..9775290a3 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/exception/LoanRescheduleRequestNotFoundException.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/exception/LoanRescheduleRequestNotFoundException.java
@@ -29,7 +29,7 @@ public class LoanRescheduleRequestNotFoundException extends AbstractPlatformReso
* LoanRescheduleRequestNotFoundException constructor
*
* @param requestId the loan reschedule request identifier
- * @return void
+ *
**/
public LoanRescheduleRequestNotFoundException(final Long requestId) {
super("error.msg.loan.reschedule.request.id.invalid",
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java
index 7eccf9a51..977e7ba41 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java
@@ -118,7 +118,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche
/**
* LoanRescheduleRequestWritePlatformServiceImpl constructor
*
- * @return void
+ *
**/
@Autowired
public LoanRescheduleRequestWritePlatformServiceImpl(final CodeValueRepositoryWrapper codeValueRepositoryWrapper,
@@ -585,7 +585,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche
*
* @param dve
* data integrity violation exception
- * @return void
+ *
**/
private void handleDataIntegrityViolation(final DataIntegrityViolationException dve) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java
index f7aeb603c..73f41cfdc 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java
@@ -130,4 +130,6 @@ public interface LoanReadPlatformService {
Collection retrieveLoanIdsWithPendingIncomePostingTransactions();
LoanTransactionData retrieveLoanForeclosureTemplate(final Long loanId, final LocalDate transactionDate);
+
+ LoanAccountData retrieveLoanByLoanAccount(String loanAccountNumber);
}
\ No newline at end of file
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
index 6912f3c5d..19ea4ae84 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java
@@ -219,6 +219,22 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
throw new LoanNotFoundException(loanId);
}
}
+
+ @Override
+ public LoanAccountData retrieveLoanByLoanAccount(String loanAccountNumber)
+ {
+
+
+ //final AppUser currentUser = this.context.authenticatedUser();
+ this.context.authenticatedUser();
+ final LoanMapper rm = new LoanMapper();
+
+ String sql="select "+rm.loanSchema()+" where l.account_no=?";
+
+
+ return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { loanAccountNumber });
+
+ }
@Override
public LoanScheduleData retrieveRepaymentSchedule(final Long loanId,
@@ -237,6 +253,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
throw new LoanNotFoundException(loanId);
}
}
+
+
@Override
public Collection retrieveLoanTransactions(final Long loanId) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index 23270d512..98f86fce8 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -449,7 +449,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
*
* @param loan
* the disbursed loan
- * @return void
+ *
**/
private void createStandingInstruction(Loan loan) {
@@ -2318,7 +2318,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
final JsonElement parsedCommand = this.fromApiJsonHelper.parse(overdueInstallment.toString());
final JsonCommand command = JsonCommand.from(overdueInstallment.toString(), parsedCommand, this.fromApiJsonHelper, null, null,
- null, null, null, loanId, null, null, null, null);
+ null, null, null, loanId, null, null, null, null,null,null);
LoanOverdueDTO overdueDTO = applyChargeToOverdueLoanInstallment(loanId, overdueInstallment.getChargeId(),
overdueInstallment.getPeriodNumber(), command, loan, existingTransactionIds, existingReversedTransactionIds);
loan = overdueDTO.getLoan();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/InterestRecalculationCompoundingMethod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/InterestRecalculationCompoundingMethod.java
index 2cea623e7..8b4d560fe 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/InterestRecalculationCompoundingMethod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/InterestRecalculationCompoundingMethod.java
@@ -22,9 +22,10 @@ import java.util.HashMap;
import java.util.Map;
/***
- *
+ *
* People typically use either of the following settings when defining interest
* recalculation method:
+ *
* - NONE
* - INTEREST
* - FEE
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/InterestRecalculationPeriodMethod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/InterestRecalculationPeriodMethod.java
index 48090ef17..06c239548 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/InterestRecalculationPeriodMethod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/InterestRecalculationPeriodMethod.java
@@ -22,9 +22,10 @@ import java.util.HashMap;
import java.util.Map;
/***
- *
+ *
* People typically use either of the following settings when defining interest
* recalculation method:
+ *
* - SAME_AS_REPAYMENT_PERIOD
* - DAILY
* - WEEKLY
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanRescheduleStrategyMethod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanRescheduleStrategyMethod.java
index 0c81e9971..a74a26b1c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanRescheduleStrategyMethod.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanRescheduleStrategyMethod.java
@@ -22,9 +22,9 @@ import java.util.HashMap;
import java.util.Map;
/***
- *
- * People typically use either of the following settings when defining interest
+ * * People typically use either of the following settings when defining interest
* recalculation method:
+ *
* - RESCHEDULE_NEXT_REPAYMENTS
* - REDUCE_NUMBER_OF_INSTALLMENTS
* - REDUCE_EMI_AMOUNT
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/DepositAccountOnClosureType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/DepositAccountOnClosureType.java
index c3f19a37d..78a506bb2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/DepositAccountOnClosureType.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/DepositAccountOnClosureType.java
@@ -26,7 +26,7 @@ import org.apache.fineract.portfolio.savings.domain.RecurringDepositAccount;
/**
* An enumeration of different options available on account closure
- * {@link FixedDepositAccount} & {@link RecurringDepositAccount}.
+ * {@link FixedDepositAccount} & {@link RecurringDepositAccount}.
*/
public enum DepositAccountOnClosureType {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/SavingsInterestCalculationDaysInYearType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/SavingsInterestCalculationDaysInYearType.java
index 0630f9896..e9ec9b150 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/SavingsInterestCalculationDaysInYearType.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/SavingsInterestCalculationDaysInYearType.java
@@ -22,9 +22,10 @@ import java.util.ArrayList;
import java.util.List;
/**
- *
+ *
* People typically use either of the following settings when calculating there
* interest using the daily method:
+ *
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/SavingsInterestCalculationType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/SavingsInterestCalculationType.java
index d9800f8d8..922e519a6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/SavingsInterestCalculationType.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/SavingsInterestCalculationType.java
@@ -22,8 +22,9 @@ import java.util.ArrayList;
import java.util.List;
/**
- *
+ *
* There are two methods to calculate the interest on a savings account:
+ *
* - The daily balance method; and
* - The average daily balance method.
*
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDTO.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDTO.java
index fb91c850b..4cfaa304a 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDTO.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDTO.java
@@ -35,9 +35,10 @@ public class SavingsAccountTransactionDTO {
private final Date createdDate;
private final Long savingsAccountId;
private final AppUser appUser;
+ private final Integer depositAccountType;
public SavingsAccountTransactionDTO(final DateTimeFormatter formatter, final LocalDate transactionDate,
- final BigDecimal transactionAmount, final PaymentDetail paymentDetail, final Date createdDate, final AppUser appUser) {
+ final BigDecimal transactionAmount, final PaymentDetail paymentDetail, final Date createdDate, final AppUser appUser, final Integer depositAccountType) {
this.formatter = formatter;
this.transactionDate = transactionDate;
this.transactionAmount = transactionAmount;
@@ -45,6 +46,7 @@ public class SavingsAccountTransactionDTO {
this.createdDate = createdDate;
this.savingsAccountId = null;
this.appUser = appUser;
+ this.depositAccountType = depositAccountType;
}
/**
@@ -58,7 +60,7 @@ public class SavingsAccountTransactionDTO {
* @param savingsAccountId
*/
public SavingsAccountTransactionDTO(DateTimeFormatter formatter, LocalDate transactionDate, BigDecimal transactionAmount,
- PaymentDetail paymentDetail, Date createdDate, Long savingsAccountId, AppUser appUser) {
+ PaymentDetail paymentDetail, Date createdDate, Long savingsAccountId, AppUser appUser, final Integer depositAccountType) {
this.formatter = formatter;
this.transactionDate = transactionDate;
this.transactionAmount = transactionAmount;
@@ -66,6 +68,7 @@ public class SavingsAccountTransactionDTO {
this.createdDate = createdDate;
this.savingsAccountId = savingsAccountId;
this.appUser = appUser;
+ this.depositAccountType = depositAccountType;
}
public DateTimeFormatter getFormatter() {
@@ -95,4 +98,10 @@ public class SavingsAccountTransactionDTO {
public AppUser getAppUser() {
return this.appUser;
}
+
+ public Integer getAccountType() {
+ return this.depositAccountType;
+ }
+
+
}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductData.java
index f8bba2071..277126ecc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductData.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductData.java
@@ -61,6 +61,7 @@ public class SavingsProductData {
private final BigDecimal minOverdraftForInterestCalculation;
private final boolean withHoldTax;
private final TaxGroupData taxGroup;
+ private String depositAccountType = null;
// accounting
private final EnumOptionData accountingRule;
@@ -436,4 +437,14 @@ public class SavingsProductData {
public String getName() {
return this.name;
}
+
+ public String getDepositAccountType() {
+ return depositAccountType;
+ }
+
+ public void setDepositAccountType(String depositAccountType) {
+ this.depositAccountType = depositAccountType;
+ }
+
+
}
\ No newline at end of file
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountAssembler.java
index efc2e5853..80025bbce 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountAssembler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountAssembler.java
@@ -73,6 +73,7 @@ import org.apache.fineract.portfolio.accountdetails.domain.AccountType;
import org.apache.fineract.portfolio.client.domain.Client;
import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper;
import org.apache.fineract.portfolio.client.exception.ClientNotActiveException;
+import org.apache.fineract.portfolio.collectionsheet.CollectionSheetConstants;
import org.apache.fineract.portfolio.group.domain.Group;
import org.apache.fineract.portfolio.group.domain.GroupRepositoryWrapper;
import org.apache.fineract.portfolio.group.exception.CenterNotActiveException;
@@ -444,12 +445,14 @@ public class DepositAccountAssembler {
final Long savingsId = this.fromApiJsonHelper.extractLongNamed(savingsIdParamName, savingsTransactionElement);
final BigDecimal dueAmount = this.fromApiJsonHelper.extractBigDecimalNamed(transactionAmountParamName,
savingsTransactionElement, locale);
+ final Integer depositAccountType = this.fromApiJsonHelper.extractIntegerNamed(
+ CollectionSheetConstants.depositAccountTypeParamName, savingsTransactionElement, locale);
PaymentDetail detail = paymentDetail;
if (paymentDetail == null) {
detail = this.paymentDetailAssembler.fetchPaymentDetail(savingsTransactionElement);
}
final SavingsAccountTransactionDTO savingsAccountTransactionDTO = new SavingsAccountTransactionDTO(formatter,
- transactionDate, dueAmount, detail, new Date(), savingsId, user);
+ transactionDate, dueAmount, detail, new Date(), savingsId, user, depositAccountType);
savingsAccountTransactions.add(savingsAccountTransactionDTO);
}
}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainService.java
index 9df5b6335..f97ed49ef 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainService.java
@@ -37,6 +37,9 @@ public interface DepositAccountDomainService {
SavingsAccountTransaction handleRDDeposit(RecurringDepositAccount account, DateTimeFormatter fmt, LocalDate transactionDate,
BigDecimal transactionAmount, PaymentDetail paymentDetail, boolean isRegularTransaction);
+
+ SavingsAccountTransaction handleSavingDeposit(SavingsAccount account, DateTimeFormatter fmt, LocalDate transactionDate,
+ BigDecimal transactionAmount, PaymentDetail paymentDetail, boolean isRegularTransaction);
Long handleFDAccountClosure(FixedDepositAccount account, PaymentDetail paymentDetail, AppUser user, JsonCommand command,
LocalDate tenantsTodayDate, Map changes);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java
index ac277fb08..0b364f3f2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java
@@ -163,6 +163,21 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi
}
return deposit;
}
+
+ @Transactional
+ @Override
+ public SavingsAccountTransaction handleSavingDeposit(final SavingsAccount account, final DateTimeFormatter fmt,
+ final LocalDate transactionDate, final BigDecimal transactionAmount, final PaymentDetail paymentDetail,
+ final boolean isRegularTransaction) {
+ boolean isAccountTransfer = false;
+ final SavingsAccountTransaction deposit = this.savingsAccountDomainService.handleDeposit(account, fmt, transactionDate,
+ transactionAmount, paymentDetail, isAccountTransfer, isRegularTransaction);
+ final Set existingTransactionIds = new HashSet<>();
+ final Set existingReversedTransactionIds = new HashSet<>();
+ updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds);
+ postJournalEntries(account, existingTransactionIds, existingReversedTransactionIds, isAccountTransfer);
+ return deposit;
+ }
private boolean isAnyActivationChargesDue(final RecurringDepositAccount account) {
for (final SavingsAccountCharge savingsAccountCharge : account.charges()) {
@@ -191,7 +206,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi
*/
updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds);
/*
- * <<<<<<< HEAD final SavingsAccountTransactionDTO transactionDTO = new
+ * final SavingsAccountTransactionDTO transactionDTO = new
* SavingsAccountTransactionDTO(fmt, transactionDate, transactionAmount,
* paymentDetail, new Date()); final SavingsAccountTransaction deposit =
* account.deposit(transactionDTO); boolean isInterestTransfer = false;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java
index 9b020279e..8e276a933 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java
@@ -523,7 +523,7 @@ public class RecurringDepositAccount extends SavingsAccount {
final Money minRequiredOpeningBalance = Money.of(this.currency, this.minRequiredOpeningBalance);
if (minRequiredOpeningBalance.isGreaterThanZero()) {
final SavingsAccountTransactionDTO transactionDTO = new SavingsAccountTransactionDTO(fmt, getActivationLocalDate(),
- minRequiredOpeningBalance.getAmount(), null, new Date(), user);
+ minRequiredOpeningBalance.getAmount(), null, new Date(), user, accountType);
deposit(transactionDTO);
// update existing transactions so derived balance fields are
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java
index dd72aea8d..32fdcd25d 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java
@@ -95,8 +95,9 @@ public class SavingsAccountDomainServiceJpa implements SavingsAccountDomainServi
final LocalDate postInterestOnDate = null;
final Set existingReversedTransactionIds = new HashSet<>();
updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds);
+ Integer accountType = null;
final SavingsAccountTransactionDTO transactionDTO = new SavingsAccountTransactionDTO(fmt, transactionDate, transactionAmount,
- paymentDetail, new Date(), user);
+ paymentDetail, new Date(), user, accountType);
final SavingsAccountTransaction withdrawal = account.withdraw(transactionDTO, transactionBooleanValues.isApplyWithdrawFee());
final MathContext mc = MathContext.DECIMAL64;
if (account.isBeforeLastPostingPeriod(transactionDate)) {
@@ -157,8 +158,9 @@ public class SavingsAccountDomainServiceJpa implements SavingsAccountDomainServi
final Set existingTransactionIds = new HashSet<>();
final Set existingReversedTransactionIds = new HashSet<>();
updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds);
+ Integer accountType = null;
final SavingsAccountTransactionDTO transactionDTO = new SavingsAccountTransactionDTO(fmt, transactionDate, transactionAmount,
- paymentDetail, new Date(), user);
+ paymentDetail, new Date(), user, accountType);
final SavingsAccountTransaction deposit = account.deposit(transactionDTO, savingsAccountTransactionType);
final LocalDate postInterestOnDate = null;
final MathContext mc = MathContext.DECIMAL64;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java
index 6b0402ed6..8726bddc4 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java
@@ -699,13 +699,14 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo
account.undoTransaction(transactionId);
SavingsAccountTransaction transaction = null;
+ Integer accountType = null;
if (savingsAccountTransaction.isDeposit()) {
final SavingsAccountTransactionDTO transactionDTO = new SavingsAccountTransactionDTO(fmt, transactionDate, transactionAmount,
- paymentDetail, savingsAccountTransaction.createdDate(), user);
+ paymentDetail, savingsAccountTransaction.createdDate(), user, accountType);
transaction = account.deposit(transactionDTO);
} else {
final SavingsAccountTransactionDTO transactionDTO = new SavingsAccountTransactionDTO(fmt, transactionDate, transactionAmount,
- paymentDetail, savingsAccountTransaction.createdDate(), user);
+ paymentDetail, savingsAccountTransaction.createdDate(), user, accountType);
transaction = account.withdraw(transactionDTO, true);
}
final Long newtransactionId = saveTransactionToGenerateTransactionId(transaction);
@@ -1353,22 +1354,37 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo
existingTransactionIds, existingReversedTransactionIds, isAccountTransfer);
this.journalEntryWritePlatformService.createJournalEntriesForSavings(accountingBridgeData);
}
-
+
@Transactional
@Override
public SavingsAccountTransaction mandatorySavingsAccountDeposit(final SavingsAccountTransactionDTO accountTransactionDTO) {
boolean isRegularTransaction = false;
- final RecurringDepositAccount account = (RecurringDepositAccount) this.depositAccountAssembler.assembleFrom(
- accountTransactionDTO.getSavingsAccountId(), DepositAccountType.RECURRING_DEPOSIT);
final PaymentDetail paymentDetail = accountTransactionDTO.getPaymentDetail();
if (paymentDetail != null && paymentDetail.getId() == null) {
this.paymentDetailWritePlatformService.persistPaymentDetail(paymentDetail);
}
- return this.depositAccountDomainService.handleRDDeposit(account, accountTransactionDTO.getFormatter(),
+ if (accountTransactionDTO.getAccountType().equals(DepositAccountType.RECURRING_DEPOSIT.getValue())) {
+ RecurringDepositAccount account = (RecurringDepositAccount) this.depositAccountAssembler.assembleFrom(
+ accountTransactionDTO.getSavingsAccountId(), DepositAccountType.RECURRING_DEPOSIT);
+ return this.depositAccountDomainService.handleRDDeposit(account, accountTransactionDTO.getFormatter(),
+ accountTransactionDTO.getTransactionDate(), accountTransactionDTO.getTransactionAmount(), paymentDetail,
+ isRegularTransaction);
+ }
+ SavingsAccount account = null;
+ if (accountTransactionDTO.getAccountType().equals(DepositAccountType.SAVINGS_DEPOSIT.getValue())) {
+ account = this.depositAccountAssembler.assembleFrom(accountTransactionDTO.getSavingsAccountId(),
+ DepositAccountType.SAVINGS_DEPOSIT);
+ } else {
+ account = this.depositAccountAssembler.assembleFrom(accountTransactionDTO.getSavingsAccountId(),
+ DepositAccountType.CURRENT_DEPOSIT);
+ }
+ return this.depositAccountDomainService.handleSavingDeposit(account, accountTransactionDTO.getFormatter(),
accountTransactionDTO.getTransactionDate(), accountTransactionDTO.getTransactionAmount(), paymentDetail,
isRegularTransaction);
+
}
+
private AppUser getAppUserIfPresent() {
AppUser user = null;
if (this.context != null) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java
index 2064f57ee..8b3aa1df5 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java
@@ -550,8 +550,9 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi
SavingsAccountTransaction transaction = null;
boolean isInterestTransfer = false;
+ Integer accountType = null;
final SavingsAccountTransactionDTO transactionDTO = new SavingsAccountTransactionDTO(fmt, transactionDate, transactionAmount,
- paymentDetail, savingsAccountTransaction.createdDate(), user);
+ paymentDetail, savingsAccountTransaction.createdDate(), user, accountType);
if (savingsAccountTransaction.isDeposit()) {
transaction = account.deposit(transactionDTO);
} else {
@@ -1315,7 +1316,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi
* Disable all standing instructions linked to the savings account if the status is "closed"
*
* @param savingsAccount -- the savings account object
- * @return None
+ *
**/
@Transactional
private void disableStandingInstructionsLinkedToClosedSavings(final SavingsAccount savingsAccount) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountCommandsServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountCommandsServiceImpl.java
index 6f56afa12..926aa0dca 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountCommandsServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountCommandsServiceImpl.java
@@ -47,7 +47,7 @@ public class ShareAccountCommandsServiceImpl implements AccountsCommandsService
public Object handleCommand(Long accountId, String command, String jsonBody) {
final JsonElement parsedCommand = this.fromApiJsonHelper.parse(jsonBody);
final JsonCommand jsonCommand = JsonCommand.from(jsonBody, parsedCommand, this.fromApiJsonHelper, null, null, null, null, null,
- null, null, null, null, null);
+ null, null, null, null, null,null,null);
if(ShareAccountApiConstants.APPROVE_COMMAND.equals(command)){
return approveShareAccount(accountId, jsonCommand) ;
}if(ShareAccountApiConstants.REJECT_COMMAND.equals(command)){
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductCommandsServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductCommandsServiceImpl.java
index ee3686383..e95d75c84 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductCommandsServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductCommandsServiceImpl.java
@@ -47,7 +47,7 @@ public class ShareProductCommandsServiceImpl implements ProductCommandsService {
public Object handleCommand(Long productId, String command, String jsonBody) {
final JsonElement parsedCommand = this.fromApiJsonHelper.parse(jsonBody);
final JsonCommand jsonCommand = JsonCommand.from(jsonBody, parsedCommand, this.fromApiJsonHelper, null, null, null, null, null,
- null, null, null, null, null);
+ null, null, null, null, null,null,null);
if (ShareProductApiConstants.PREIEW_DIVIDENDS_COMMAND_STRING.equals(command)) {
return null ;
} else if (ShareProductApiConstants.POST_DIVIDENdS_COMMAND_STRING.equals(command)) { return postDividends(productId,
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java
index 7dfc6d675..d037c1612 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java
@@ -140,11 +140,12 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr
}
/****
- * Variables that would make sense
+ * Variables that would make sense
*
* - inheritDestinationGroupLoanOfficer: Default true
* - newStaffId: Optional field with Id of new Loan Officer to be linked
* to this client and all his JLG loans for this group
+ *
* ***/
@Transactional
public void transferClientBetweenGroups(final Group sourceGroup, final Client client, final Group destinationGroup,
@@ -248,10 +249,9 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr
/**
* This API is meant for transferring clients between branches mainly by
- * Organizations following an Individual lending Model
+ * Organizations following an Individual lending Model
*
* @param clientId
- * @param destinationOfficeId
* @param jsonCommand
* @return
**/
@@ -277,13 +277,12 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr
/**
* This API is meant for transferring clients between branches mainly by
- * Organizations following an Individual lending Model
+ * Organizations following an Individual lending Model
* If the Client is linked to any Groups, we can optionally choose to have
* all the linkages broken and all JLG Loans are converted into Individual
* Loans
*
* @param clientId
- * @param destinationOfficeId
* @param jsonCommand
* @return
**/
@@ -306,13 +305,12 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr
/**
* This API is meant for transferring clients between branches mainly by
- * Organizations following an Individual lending Model
+ * Organizations following an Individual lending Model
* If the Client is linked to any Groups, we can optionally choose to have
* all the linkages broken and all JLG Loans are converted into Individual
* Loans
*
* @param clientId
- * @param destinationOfficeId
* @param jsonCommand
* @return
**/
diff --git a/fineract-provider/src/main/resources/META-INF/spring/appContext.xml b/fineract-provider/src/main/resources/META-INF/spring/appContext.xml
index 80ebec663..9fe95d447 100644
--- a/fineract-provider/src/main/resources/META-INF/spring/appContext.xml
+++ b/fineract-provider/src/main/resources/META-INF/spring/appContext.xml
@@ -43,6 +43,7 @@
org.apache.fineract.commands.service.*,
org.apache.fineract.commands.*,
org.apache.fineract.audit.*,
+ org.apache.fineract.infrastructure.creditbureau.*,
org.apache.fineract.infrastructure.*,
org.apache.fineract.scheduledjobs.*,
org.apache.fineract.organisation.*,
@@ -69,7 +70,6 @@
-
diff --git a/fineract-provider/src/main/resources/sql/migrations/core_db/V327__creditbureau_configuration.sql b/fineract-provider/src/main/resources/sql/migrations/core_db/V327__creditbureau_configuration.sql
new file mode 100644
index 000000000..d1ebd03b6
--- /dev/null
+++ b/fineract-provider/src/main/resources/sql/migrations/core_db/V327__creditbureau_configuration.sql
@@ -0,0 +1,89 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied. See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+--
+
+ -- credit bureau tables
+CREATE TABLE `m_creditbureau` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` varchar(100) NOT NULL,
+ `product` varchar(100) NOT NULL,
+ `country` varchar(100) NOT NULL,
+ `implementationKey` varchar(100) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique impl` (`name`,`product`,`country`,`implementationKey`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `m_organisation_creditbureau` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `alias` varchar(50) NOT NULL,
+ `creditbureau_id` bigint(20) NOT NULL,
+ `is_active` tinyint(4) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `morgcb` (`alias`,`creditbureau_id`),
+ KEY `orgcb_cbfk` (`creditbureau_id`),
+ CONSTRAINT `orgcb_cbfk` FOREIGN KEY (`creditbureau_id`) REFERENCES `m_creditbureau` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+
+
+CREATE TABLE `m_creditbureau_configuration` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `configkey` varchar(50) DEFAULT NULL,
+ `value` varchar(50) DEFAULT NULL,
+ `organisation_creditbureau_id` bigint(20) DEFAULT NULL,
+ `description` varchar(50) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `mcbconfig` (`configkey`,`organisation_creditbureau_id`),
+ KEY `cbConfigfk1` (`organisation_creditbureau_id`),
+ CONSTRAINT `cbConfigfk1` FOREIGN KEY (`organisation_creditbureau_id`) REFERENCES `m_organisation_creditbureau` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+
+
+
+CREATE TABLE `m_creditbureau_loanproduct_mapping` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `organisation_creditbureau_id` bigint(20) NOT NULL,
+ `loan_product_id` bigint(20) NOT NULL,
+ `is_creditcheck_mandatory` tinyint(1) DEFAULT NULL,
+ `skip_creditcheck_in_failure` tinyint(1) DEFAULT NULL,
+ `stale_period` int(11) DEFAULT NULL,
+ `is_active` tinyint(1) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `cblpunique_key` (`organisation_creditbureau_id`,`loan_product_id`),
+ KEY `fk_cb_lp2` (`loan_product_id`),
+ CONSTRAINT `cblpfk2` FOREIGN KEY (`organisation_creditbureau_id`) REFERENCES `m_organisation_creditbureau` (`id`),
+ CONSTRAINT `fk_cb_lp2` FOREIGN KEY (`loan_product_id`) REFERENCES `m_product_loan` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+-- modify `m_portfolio_command_source` command
+
+ALTER TABLE `m_portfolio_command_source`
+ ADD COLUMN `creditbureau_id` BIGINT(20) NULL DEFAULT NULL AFTER `transaction_id`,
+ ADD COLUMN `organisation_creditbureau_id` BIGINT(20) NULL DEFAULT NULL AFTER `creditbureau_id`;
+
+
+-- permissions
+INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) VALUES ('configuration', 'CREATE_CREDITBUREAU_LOANPRODUCT_MAPPING', 'CREDITBUREAU_LOANPRODUCT_MAPPING', 'CREATE', 0);
+INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) VALUES ('configuration', 'CREATE_ORGANISATIONCREDITBUREAU', 'ORGANISATIONCREDITBUREAU', 'CREATE', 0);
+INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) VALUES ('configuration', 'UPDATE_ORGANISATIONCREDITBUREAU', 'ORGANISATIONCREDITBUREAU', 'UPDATE', 0);
+INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) VALUES ('configuration', 'UPDATE_CREDITBUREAU_LOANPRODUCT_MAPPING', 'CREDITBUREAU_LOANPRODUCT_MAPPING', 'UPDATE', 0);
diff --git a/fineract-provider/src/test/java/org/apache/fineract/commands/provider/CommandHandlerProviderTest.java b/fineract-provider/src/test/java/org/apache/fineract/commands/provider/CommandHandlerProviderTest.java
index 811845bf3..a3e9aa6db 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/commands/provider/CommandHandlerProviderTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/commands/provider/CommandHandlerProviderTest.java
@@ -56,7 +56,7 @@ public class CommandHandlerProviderTest {
final CommandProcessingResult result =
registeredHandler.processCommand(
- JsonCommand.fromExistingCommand(testCommandId, null, null, null, null, null, null, null, null));
+ JsonCommand.fromExistingCommand(testCommandId, null, null, null, null, null, null, null, null,null,null));
Assert.assertEquals(testCommandId, result.commandId());
} catch (UnsupportedCommandException ucex) {
Assert.fail();