diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index d1b4a0c5b..9851d3db0 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -626,7 +626,7 @@ Request Body:
{
- "entityId":23
+ "resourceId":23
}
@@ -644,7 +644,7 @@ Request Body:
{
- "entityId":26
+ "resourceId":26
}
@@ -666,7 +666,7 @@ Request Body:
"joiningDate": "09 June 2006"
}
-{ "entityId": 23}
+{ "resourceId": 23}
@@ -794,7 +794,7 @@ Request Body:
}
{
- "entityId": 40
+ "resourceId": 40
}
@@ -848,7 +848,7 @@ Request Body:
}
{
- "entityId": 20
+ "resourceId": 20
}
@@ -1150,70 +1150,67 @@ Request Body:
GET https://Domain Name/api/v1/loans/{loanId}
{
- "id" : 1,
- "externalId" : null,
- "loanProductName" : "Agricultural Loan",
- "submittedOnDate" : [ 2009, 1, 5 ],
- "approvedOnDate" : [ 2009, 1, 8 ],
- "expectedDisbursementDate" : [ 2009, 1, 15 ],
- "actualDisbursementDate" : [ 2009, 1, 15 ],
- "expectedFirstRepaymentOnDate" : null,
- "interestChargedFromDate" : null,
- "closedOnDate" : [ 2009, 11, 13 ],
- "expectedMaturityDate" : [ 2009, 11, 15 ],
- "principal" : {
- "currencyCode" : "XOF",
- "digitsAfterDecimal" : 0,
- "amount" : 100000,
- "defaultName" : "CFA Franc BCEAO",
- "nameCode" : "currency.XOF",
- "displaySymbol" : "CFA",
- "zero" : false,
- "greaterThanZero" : true,
- "displaySymbolValue" : "100000 CFA"
+{
+ "id": 1,
+ "clientId": 1,
+ "clientName": "Willie O'Meara",
+ "loanProductId": 1,
+ "loanProductName": "Agricultural Loan",
+ "loanProductDescription": "An agricultural loan given to farmers to help buy crop, stock and machinery. With an arrears tolerance setting of 1,000 CFA, loans are not marked as 'in arrears' or 'in bad standing' if the amount outstanding is less than this. Interest rate is described using monthly percentage rate (MPR) even though the loan typically lasts a year and requires one repayment (typically at time when farmer sells crop)",
+ "status": {
+ "id": 100,
+ "code": "loanStatusType.submitted.and.pending.approval",
+ "value": "Submitted and pending approval"
},
- "inArrearsTolerance" : {
- "currencyCode" : "XOF",
- "digitsAfterDecimal" : 0,
- "amount" : 1000,
- "defaultName" : "CFA Franc BCEAO",
- "nameCode" : "currency.XOF",
- "displaySymbol" : "CFA",
- "zero" : false,
- "greaterThanZero" : true,
- "displaySymbolValue" : "1000 CFA"
+ "currency": {
+ "code": "XOF",
+ "name": "CFA Franc BCEAO",
+ "decimalPlaces": 0,
+ "displaySymbol": "CFA",
+ "nameCode": "currency.XOF",
+ "displayLabel": "CFA Franc BCEAO (CFA)"
},
- "numberOfRepayments" : 1,
- "repaymentEvery" : 10,
- "interestRatePerPeriod" : 1.75,
- "annualInterestRate" : 21.0,
- "repaymentFrequencyType" : {
- "id" : 2,
- "code" : "repaymentFrequency.periodFrequencyType.months",
- "value" : "Months"
+ "principal": 100000,
+ "termFrequency": 12,
+ "termPeriodFrequencyType": {
+ "id": 2,
+ "code": "termFrequency.periodFrequencyType.months",
+ "value": "Months"
},
- "interestRateFrequencyType" : {
- "id" : 2,
- "code" : "interestRateFrequency.periodFrequencyType.months",
- "value" : "Per month"
+ "numberOfRepayments": 12,
+ "repaymentEvery": 1,
+ "repaymentFrequencyType": {
+ "id": 2,
+ "code": "repaymentFrequency.periodFrequencyType.months",
+ "value": "Months"
},
- "amortizationType" : {
- "id" : 1,
- "code" : "amortizationType.equal.installments",
- "value" : "Equal installments"
+ "transactionProcessingStrategyId": 1,
+ "amortizationType": {
+ "id": 1,
+ "code": "amortizationType.equal.installments",
+ "value": "Equal installments"
},
- "interestType" : {
- "id" : 0,
- "code" : "interestType.declining.balance",
- "value" : "Declining Balance"
+ "interestRatePerPeriod": 2,
+ "interestRateFrequencyType": {
+ "id": 2,
+ "code": "interestRateFrequency.periodFrequencyType.months",
+ "value": "Per month"
},
- "interestCalculationPeriodType" : {
- "id" : 1,
- "code" : "interestCalculationPeriodType.same.as.repayment.period",
- "value" : "Same as repayment period"
+ "annualInterestRate": 24,
+ "interestType": {
+ "id": 0,
+ "code": "interestType.declining.balance",
+ "value": "Declining Balance"
},
- "lifeCycleStatusText" : "Closed",
- "lifeCycleStatusDate" : [ 2009, 11, 13 ]
+ "interestCalculationPeriodType": {
+ "id": 1,
+ "code": "interestCalculationPeriodType.same.as.repayment.period",
+ "value": "Same as repayment period"
+ },
+ "submittedOnDate": [2011,9,20],
+ "expectedDisbursementDate": [2011,9,20],
+ "expectedMaturityDate": [2012,9,20],
+ "lifeCycleStatusDate": [2011,9,20]
}
@@ -1235,9 +1232,9 @@ Request Body:
Mandatory Fields |
- | clientId, productId, inArrearsTolerance, submittedOnDate, principal,
- repaymentFrequencyType, repaymentEvery, numberOfRepayments, interestRatePerPeriod, interestRateFrequencyType, amortizationType,
- interestType, interestCalculationPeriodType, expectedDisbursementDate |
+ | clientId, productId, principal, loanTermFrequency, loanTermFrequencyType, numberOfRepayments,
+ repaymentEvery, repaymentFrequencyType, interestRatePerPeriod, interestRateFrequencyType, amortizationType,
+ interestType, interestCalculationPeriodType, expectedDisbursementDate, submittedOnDate, transactionProcessingStrategyId |
@@ -1246,26 +1243,29 @@ Request Body:
Content-Type: application/json
Request Body:
{
- "clientId": 1,
- "productId": 1,
- "locale": "en_GB",
- "principal": "100,000.00",
- "inArrearsTolerance": "1,000.00",
- "repaymentFrequencyType": 2,
- "repaymentEvery": "1",
- "numberOfRepayments": "12",
- "interestRatePerPeriod": "1.75",
- "interestRateFrequencyType": 2,
- "amortizationType": 1,
- "interestCalculationPeriodType": 1,
- "interestType": 0,
- "dateFormat": "dd MMMM yyyy",
- "expectedDisbursementDate": "01 July 2007",
- "submittedOnDate": "25 June 2007"
+"dateFormat": "dd MMMM yyyy",
+"locale": "en_GB",
+"clientId": 1,
+"productId": 1,
+"principal": "100,000.00",
+"loanTermFrequency": 12,
+"loanTermFrequencyType": 2,
+"numberOfRepayments": 12,
+"repaymentEvery": 1,
+"repaymentFrequencyType": 2,
+"interestRatePerPeriod": 2,
+"interestRateFrequencyType": 2,
+"amortizationType": 1,
+"interestType": 0,
+"interestCalculationPeriodType": 1,
+"expectedDisbursementDate": "20 September 2011",
+"submittedOnDate": "20 September 2011",
+"transactionProcessingStrategyId": 1
}
+
{
- "entityId": 42
+ "resourceId": 42
}
@@ -1274,7 +1274,7 @@ Request Body:
-
Approve, Undo Approval, Disburse, Undo Disbursal, Reject a Loan or Withdraw a Loan Application
+
Approve, Undo Approval, Disburse, Undo Disbursal, Reject or Withdraw a Loan Application
Arguments
- command
@@ -1302,8 +1302,9 @@ Request Body:
"eventDate": "07 May 2012",
"note": "and event note is added"
}
- {
-"entityId": 37
+
+{
+"resourceId": 37
}
@@ -1323,7 +1324,7 @@ Content-Type: application/json
No Request Body:
{
-"entityId": 1
+"resourceId": 1
}
@@ -1403,7 +1404,7 @@ Request Body:
}
{
-"entityId": 37
+"resourceId": 37
}
@@ -1465,7 +1466,7 @@ Request Body:
}
{
- "entityId": 16
+ "resourceId": 16
}
@@ -1618,7 +1619,7 @@ Request Body:
}
{
- "entityId": 9
+ "resourceId": 9
}
@@ -1639,7 +1640,7 @@ Request Body:
}
{
- "entityId": 1
+ "resourceId": 1
}
@@ -2105,7 +2106,7 @@ Request Body:
}
{
- "entityId": 9
+ "resourceId": 9
}
@@ -2128,7 +2129,7 @@ Request Body:
}
{
- "entityId": 1
+ "resourceId": 1
}
@@ -2299,7 +2300,7 @@ Request Body:
}
{
- "entityId": null
+ "resourceId": null
}
@@ -2323,7 +2324,7 @@ Request Body:
}
{
- "entityId": null
+ "resourceId": null
}
@@ -2361,7 +2362,7 @@ Request Body:
}
{
- "entityId": 1
+ "resourceId": 1
}
@@ -2439,7 +2440,7 @@ Request Body:
}
{
- "entityId": 1
+ "resourceId": 1
}
@@ -2469,7 +2470,7 @@ Request Body:
}
{
- "entityId": 1
+ "resourceId": 1
}
@@ -2493,7 +2494,7 @@ Request Body:
}
{
- "entityId": 1
+ "resourceId": 1
}
@@ -2516,7 +2517,7 @@ Request Body:
}
{
- "entityId": 1
+ "resourceId": 1
}
@@ -2992,7 +2993,7 @@ Request body:
{
- "entityId": 11
+ "resourceId": 11
}
@@ -3019,7 +3020,7 @@ Request body:
{
- "entityId": 3
+ "resourceId": 3
}
@@ -3038,7 +3039,7 @@ Content-Type: application/json
No Request Body
{
- "entityId": 20
+ "resourceId": 20
}
@@ -3131,7 +3132,7 @@ Request body:
}
{
- "entityId": 8
+ "resourceId": 8
}
@@ -3152,7 +3153,7 @@ Request body:
}
{
- "entityId": 8
+ "resourceId": 8
}
@@ -3218,7 +3219,7 @@ ALL_FUNCTIONS_READ: "true"
}
{
- "entityId": 8
+ "resourceId": 8
}
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/audit/api/ProcessingResultLookup.java b/mifosng-provider/src/main/java/org/mifosplatform/audit/api/ProcessingResultLookup.java
index 4a682e7e2..dca1035d8 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/audit/api/ProcessingResultLookup.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/audit/api/ProcessingResultLookup.java
@@ -5,20 +5,20 @@ package org.mifosplatform.audit.api;
*/
public class ProcessingResultLookup {
- private final Long id;
- private final String processingResult;
+ private final Long id;
+ private final String processingResult;
- public ProcessingResultLookup(final Long id, final String processingResult) {
- this.id = id;
- this.processingResult = processingResult;
- }
+ public ProcessingResultLookup(final Long id, final String processingResult) {
+ this.id = id;
+ this.processingResult = processingResult;
+ }
- public Long getId() {
- return this.id;
- }
+ public Long getId() {
+ return this.id;
+ }
- public String getProcessingResult() {
- return this.processingResult;
- }
+ public String getProcessingResult() {
+ return this.processingResult;
+ }
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/data/PlatformRequestLog.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/data/PlatformRequestLog.java
new file mode 100644
index 000000000..be948a219
--- /dev/null
+++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/data/PlatformRequestLog.java
@@ -0,0 +1,48 @@
+package org.mifosplatform.infrastructure.security.data;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang.time.StopWatch;
+
+/**
+ * Immutable data object representing platform API request used for
+ * logging/debugging.
+ */
+public class PlatformRequestLog {
+
+ @SuppressWarnings("unused")
+ private long startTime;
+ @SuppressWarnings("unused")
+ private long totalTime;
+ @SuppressWarnings("unused")
+ private final String method;
+ @SuppressWarnings("unused")
+ private String url;
+ @SuppressWarnings("unused")
+ private Map parameters;
+
+ public static PlatformRequestLog from(final StopWatch task, final HttpServletRequest request) throws IOException {
+
+ final String requestUrl = request.getRequestURL().toString();
+
+ @SuppressWarnings("unchecked")
+ Map parameters = new HashMap(request.getParameterMap());
+ parameters.remove("password");
+ parameters.remove("_");
+
+ return new PlatformRequestLog(task.getStartTime(), task.getTime(), request.getMethod(), requestUrl, parameters);
+ }
+
+ private PlatformRequestLog(final long startTime, final long time, final String method, final String requestUrl,
+ final Map parameters) {
+ this.startTime = startTime;
+ this.totalTime = time;
+ this.method = method;
+ this.url = requestUrl;
+ this.parameters = parameters;
+ }
+}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java
index 986a19ef6..928cb6e4a 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java
@@ -9,10 +9,15 @@ import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang.time.StopWatch;
import org.mifosplatform.infrastructure.core.domain.MifosPlatformTenant;
+import org.mifosplatform.infrastructure.core.serialization.ToApiJsonSerializer;
import org.mifosplatform.infrastructure.core.service.ThreadLocalContextUtil;
+import org.mifosplatform.infrastructure.security.data.PlatformRequestLog;
import org.mifosplatform.infrastructure.security.exception.InvalidTenantIdentiferException;
import org.mifosplatform.infrastructure.security.service.TenantDetailsService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -36,9 +41,14 @@ import org.springframework.security.web.authentication.www.BasicAuthenticationFi
*/
public class TenantAwareBasicAuthenticationFilter extends BasicAuthenticationFilter {
+ private final static Logger logger = LoggerFactory.getLogger(TenantAwareBasicAuthenticationFilter.class);
+
@Autowired
private TenantDetailsService tenantDetailsService;
+ @Autowired
+ private ToApiJsonSerializer toApiJsonSerializer;
+
private String tenantRequestHeader = "X-Mifos-Platform-TenantId";
private boolean exceptionIfHeaderMissing = true;
@@ -53,6 +63,9 @@ public class TenantAwareBasicAuthenticationFilter extends BasicAuthenticationFil
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
+ StopWatch task = new StopWatch();
+ task.start();
+
try {
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
@@ -83,7 +96,9 @@ public class TenantAwareBasicAuthenticationFilter extends BasicAuthenticationFil
response.addHeader("WWW-Authenticate", "Basic realm=\"" + "Mifos Platform API" + "\"");
response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
} finally {
-
+ task.stop();
+ final PlatformRequestLog log = PlatformRequestLog.from(task, request);
+ logger.info(toApiJsonSerializer.serialize(log));
}
}
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/command/LoanApplicationCommand.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/command/LoanApplicationCommand.java
index cd284a969..b637140e4 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/command/LoanApplicationCommand.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/command/LoanApplicationCommand.java
@@ -116,6 +116,12 @@ public class LoanApplicationCommand {
baseDataValidator.reset().parameter("groupId").value(this.groupId).mustBeBlankWhenParameterProvided("clientId", this.clientId)
.longGreaterThanZero();
}
+
+ if (this.clientId == null && this.groupId == null) {
+ baseDataValidator.reset().parameter("clientId").value(this.clientId).notNull().integerGreaterThanZero();
+ }
+
+ baseDataValidator.reset().parameter("productId").value(this.productId).notNull().integerGreaterThanZero();
if (this.submittedOnDate == null) {
ApiParameterError error = ApiParameterError.parameterError("validation.msg.loan.submitted.on.date.cannot.be.blank",
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanAccountData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanAccountData.java
index 9938d2da7..cad1edbdd 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanAccountData.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanAccountData.java
@@ -20,174 +20,155 @@ import org.mifosplatform.portfolio.loanproduct.data.TransactionProcessingStrateg
@SuppressWarnings("unused")
public class LoanAccountData {
- // basic loan details
- private final Long id;
- private final String externalId;
- private final Long clientId;
- private final String clientName;
- private final Long groupId;
- private final String groupName;
- private final Long loanProductId;
- private final String loanProductName;
- private final String loanProductDescription;
- private final EnumOptionData status;
- private final Long fundId;
- private final String fundName;
- private final Long loanOfficerId;
- private final String loanOfficerName;
- private final CurrencyData currency;
- private final BigDecimal principal;
- private final BigDecimal inArrearsTolerance;
-
- private final Integer termFrequency;
- private final EnumOptionData termPeriodFrequencyType;
- private final Integer numberOfRepayments;
- private final Integer repaymentEvery;
- private final EnumOptionData repaymentFrequencyType;
- private final Integer transactionStrategyId;
- private final EnumOptionData amortizationType;
- private final BigDecimal interestRatePerPeriod;
- private final EnumOptionData interestRateFrequencyType;
- private final BigDecimal annualInterestRate;
- private final EnumOptionData interestType;
- private final EnumOptionData interestCalculationPeriodType;
-
- private final LocalDate submittedOnDate;
- private final LocalDate approvedOnDate;
- private final LocalDate expectedDisbursementDate;
- private final LocalDate actualDisbursementDate;
- private final LocalDate repaymentsStartingFromDate;
- private final LocalDate interestChargedFromDate;
- private final LocalDate closedOnDate;
- private final LocalDate expectedMaturityDate;
- private final LocalDate lifeCycleStatusDate;
-
- // associations
- private final LoanScheduleData repaymentSchedule;
- private final Collection transactions;
- private final Collection charges;
- private final LoanPermissionData permissions;
- private final LoanConvenienceData convenienceData;
- private final GuarantorData guarantorData;
-
- // template
- private final Collection loanOfficerOptions;
- private final Collection productOptions;
- private final Collection termFrequencyTypeOptions;
- private final Collection repaymentFrequencyTypeOptions;
- private final Collection repaymentStrategyOptions;
- private final Collection interestRateFrequencyTypeOptions;
- private final Collection amortizationTypeOptions;
- private final Collection interestTypeOptions;
- private final Collection interestCalculationPeriodTypeOptions;
- private final Collection fundOptions;
- private final Collection chargeOptions;
- private final ChargeData chargeTemplate;
-
- public LoanAccountData(
- final LoanBasicDetailsData basicDetails,
- final boolean convenienceDataRequired,
- final LoanScheduleData repaymentSchedule,
- final Collection transactions,
- final LoanPermissionData permissions,
- final Collection charges,
- final Collection productOptions,
- final Collection termFrequencyTypeOptions,
- final Collection repaymentFrequencyTypeOptions,
- final Collection repaymentStrategyOptions,
- final Collection interestRateFrequencyTypeOptions,
- final Collection amortizationTypeOptions,
- final Collection interestTypeOptions,
- final Collection interestCalculationPeriodTypeOptions,
- final Collection fundOptions,
- final Collection chargeOptions,
- final ChargeData chargeTemplate,
- final Collection loanOfficerOptions,
- final GuarantorData guarantorData) {
- this.repaymentSchedule = repaymentSchedule;
- this.transactions = transactions;
- this.permissions = permissions;
+ // basic loan details
+ private final Long id;
+ private final String externalId;
+ private final Long clientId;
+ private final String clientName;
+ private final Long groupId;
+ private final String groupName;
+ private final Long loanProductId;
+ private final String loanProductName;
+ private final String loanProductDescription;
+ private final EnumOptionData status;
+ private final Long fundId;
+ private final String fundName;
+ private final Long loanOfficerId;
+ private final String loanOfficerName;
+ private final CurrencyData currency;
+ private final BigDecimal principal;
+ private final BigDecimal inArrearsTolerance;
+
+ private final Integer termFrequency;
+ private final EnumOptionData termPeriodFrequencyType;
+ private final Integer numberOfRepayments;
+ private final Integer repaymentEvery;
+ private final EnumOptionData repaymentFrequencyType;
+ private final Integer transactionProcessingStrategyId;
+ private final EnumOptionData amortizationType;
+ private final BigDecimal interestRatePerPeriod;
+ private final EnumOptionData interestRateFrequencyType;
+ private final BigDecimal annualInterestRate;
+ private final EnumOptionData interestType;
+ private final EnumOptionData interestCalculationPeriodType;
+
+ private final LocalDate submittedOnDate;
+ private final LocalDate approvedOnDate;
+ private final LocalDate expectedDisbursementDate;
+ private final LocalDate actualDisbursementDate;
+ private final LocalDate repaymentsStartingFromDate;
+ private final LocalDate interestChargedFromDate;
+ private final LocalDate closedOnDate;
+ private final LocalDate expectedMaturityDate;
+ private final LocalDate lifeCycleStatusDate;
+
+ // associations
+ private final LoanScheduleData repaymentSchedule;
+ private final Collection transactions;
+ private final Collection charges;
+ private final LoanPermissionData permissions;
+ private final LoanConvenienceData convenienceData;
+ private final GuarantorData guarantorData;
+
+ // template
+ private final Collection loanOfficerOptions;
+ private final Collection productOptions;
+ private final Collection termFrequencyTypeOptions;
+ private final Collection repaymentFrequencyTypeOptions;
+ private final Collection repaymentStrategyOptions;
+ private final Collection interestRateFrequencyTypeOptions;
+ private final Collection amortizationTypeOptions;
+ private final Collection interestTypeOptions;
+ private final Collection interestCalculationPeriodTypeOptions;
+ private final Collection fundOptions;
+ private final Collection chargeOptions;
+ private final ChargeData chargeTemplate;
+
+ public LoanAccountData(final LoanBasicDetailsData basicDetails, final boolean convenienceDataRequired,
+ final LoanScheduleData repaymentSchedule, final Collection transactions,
+ final LoanPermissionData permissions, final Collection charges,
+ final Collection productOptions, final Collection termFrequencyTypeOptions,
+ final Collection repaymentFrequencyTypeOptions,
+ final Collection repaymentStrategyOptions,
+ final Collection interestRateFrequencyTypeOptions, final Collection amortizationTypeOptions,
+ final Collection interestTypeOptions, final Collection interestCalculationPeriodTypeOptions,
+ final Collection fundOptions, final Collection chargeOptions, final ChargeData chargeTemplate,
+ final Collection loanOfficerOptions, final GuarantorData guarantorData) {
+ this.repaymentSchedule = repaymentSchedule;
+ this.transactions = transactions;
+ this.permissions = permissions;
this.charges = charges;
- this.productOptions = productOptions;
- this.termFrequencyTypeOptions = termFrequencyTypeOptions;
- this.repaymentFrequencyTypeOptions = repaymentFrequencyTypeOptions;
- this.repaymentStrategyOptions = repaymentStrategyOptions;
- this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions;
- this.amortizationTypeOptions = amortizationTypeOptions;
- this.interestTypeOptions = interestTypeOptions;
- this.interestCalculationPeriodTypeOptions = interestCalculationPeriodTypeOptions;
- this.fundOptions = fundOptions;
- this.chargeOptions = chargeOptions;
+ this.productOptions = productOptions;
+ this.termFrequencyTypeOptions = termFrequencyTypeOptions;
+ this.repaymentFrequencyTypeOptions = repaymentFrequencyTypeOptions;
+ this.repaymentStrategyOptions = repaymentStrategyOptions;
+ this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions;
+ this.amortizationTypeOptions = amortizationTypeOptions;
+ this.interestTypeOptions = interestTypeOptions;
+ this.interestCalculationPeriodTypeOptions = interestCalculationPeriodTypeOptions;
+ this.fundOptions = fundOptions;
+ this.chargeOptions = chargeOptions;
this.chargeTemplate = chargeTemplate;
- this.loanOfficerOptions = loanOfficerOptions;
- this.guarantorData = guarantorData;
+ this.loanOfficerOptions = loanOfficerOptions;
+ this.guarantorData = guarantorData;
- if (convenienceDataRequired) {
- int maxSubmittedOnOffsetFromToday = basicDetails
- .getMaxSubmittedOnOffsetFromToday();
- int maxApprovedOnOffsetFromToday = basicDetails
- .getMaxApprovedOnOffsetFromToday();
- int maxDisbursedOnOffsetFromToday = basicDetails
- .getMaxDisbursedOnOffsetFromToday();
- int expectedLoanTermInDays = basicDetails.getLoanTermInDays();
- int expectedLoanTermInMonths = basicDetails.getLoanTermInMonths();
- int actualLoanTermInDays = basicDetails.getActualLoanTermInDays();
- int actualLoanTermInMonths = basicDetails.getActualLoanTermInMonths();
-
- this.convenienceData = new LoanConvenienceData(
- maxSubmittedOnOffsetFromToday, maxApprovedOnOffsetFromToday,
- maxDisbursedOnOffsetFromToday, expectedLoanTermInDays,
- actualLoanTermInDays, expectedLoanTermInMonths,
- actualLoanTermInMonths);
- } else {
- this.convenienceData = null;
- }
+ if (convenienceDataRequired) {
+ int maxSubmittedOnOffsetFromToday = basicDetails.getMaxSubmittedOnOffsetFromToday();
+ int maxApprovedOnOffsetFromToday = basicDetails.getMaxApprovedOnOffsetFromToday();
+ int maxDisbursedOnOffsetFromToday = basicDetails.getMaxDisbursedOnOffsetFromToday();
+ int expectedLoanTermInDays = basicDetails.getLoanTermInDays();
+ int expectedLoanTermInMonths = basicDetails.getLoanTermInMonths();
+ int actualLoanTermInDays = basicDetails.getActualLoanTermInDays();
+ int actualLoanTermInMonths = basicDetails.getActualLoanTermInMonths();
- this.id = basicDetails.getId();
- this.externalId = basicDetails.getExternalId();
- this.clientId = basicDetails.getClientId();
- this.clientName = basicDetails.getClientName();
- this.groupId = basicDetails.getGroupId();
- this.groupName = basicDetails.getGroupName();
- this.loanProductId = basicDetails.getLoanProductId();
- this.loanProductName = basicDetails.getLoanProductName();
- this.loanProductDescription = basicDetails.getLoanProductDescription();
- this.fundId = basicDetails.getFundId();
- this.fundName = basicDetails.getFundName();
- this.loanOfficerId = basicDetails.getLoanOfficerId();
- this.loanOfficerName = basicDetails.getLoanOfficerName();
+ this.convenienceData = new LoanConvenienceData(maxSubmittedOnOffsetFromToday, maxApprovedOnOffsetFromToday,
+ maxDisbursedOnOffsetFromToday, expectedLoanTermInDays, actualLoanTermInDays, expectedLoanTermInMonths,
+ actualLoanTermInMonths);
+ } else {
+ this.convenienceData = null;
+ }
-
- this.submittedOnDate = basicDetails.getSubmittedOnDate();
- this.approvedOnDate = basicDetails.getApprovedOnDate();
- this.expectedDisbursementDate = basicDetails
- .getExpectedDisbursementDate();
- this.actualDisbursementDate = basicDetails.getActualDisbursementDate();
- this.closedOnDate = basicDetails.getClosedOnDate();
- this.expectedMaturityDate = basicDetails.getExpectedMaturityDate();
- this.repaymentsStartingFromDate = basicDetails.getRepaymentsStartingFromDate();
- this.interestChargedFromDate = basicDetails.getInterestChargedFromDate();
-
- this.currency = basicDetails.getCurrency();
- this.principal = basicDetails.getPrincipal();
- this.inArrearsTolerance = basicDetails.getInArrearsTolerance();
-
- this.termFrequency = basicDetails.getTermFrequency();
- this.termPeriodFrequencyType = basicDetails.getTermPeriodFrequencyType();
- this.numberOfRepayments = basicDetails.getNumberOfRepayments();
- this.repaymentEvery = basicDetails.getRepaymentEvery();
- this.transactionStrategyId = basicDetails.getTransactionStrategyId();
- this.interestRatePerPeriod = basicDetails.getInterestRatePerPeriod();
- this.annualInterestRate = basicDetails.getAnnualInterestRate();
- this.repaymentFrequencyType = basicDetails.getRepaymentFrequencyType();
- this.interestRateFrequencyType = basicDetails
- .getInterestRateFrequencyType();
- this.amortizationType = basicDetails.getAmortizationType();
- this.interestType = basicDetails.getInterestType();
- this.interestCalculationPeriodType = basicDetails
- .getInterestCalculationPeriodType();
-
- this.status = basicDetails.getStatus();
- this.lifeCycleStatusDate = basicDetails.getLifeCycleStatusDate();
- }
+ this.id = basicDetails.getId();
+ this.externalId = basicDetails.getExternalId();
+ this.clientId = basicDetails.getClientId();
+ this.clientName = basicDetails.getClientName();
+ this.groupId = basicDetails.getGroupId();
+ this.groupName = basicDetails.getGroupName();
+ this.loanProductId = basicDetails.getLoanProductId();
+ this.loanProductName = basicDetails.getLoanProductName();
+ this.loanProductDescription = basicDetails.getLoanProductDescription();
+ this.fundId = basicDetails.getFundId();
+ this.fundName = basicDetails.getFundName();
+ this.loanOfficerId = basicDetails.getLoanOfficerId();
+ this.loanOfficerName = basicDetails.getLoanOfficerName();
+
+ this.submittedOnDate = basicDetails.getSubmittedOnDate();
+ this.approvedOnDate = basicDetails.getApprovedOnDate();
+ this.expectedDisbursementDate = basicDetails.getExpectedDisbursementDate();
+ this.actualDisbursementDate = basicDetails.getActualDisbursementDate();
+ this.closedOnDate = basicDetails.getClosedOnDate();
+ this.expectedMaturityDate = basicDetails.getExpectedMaturityDate();
+ this.repaymentsStartingFromDate = basicDetails.getRepaymentsStartingFromDate();
+ this.interestChargedFromDate = basicDetails.getInterestChargedFromDate();
+
+ this.currency = basicDetails.getCurrency();
+ this.principal = basicDetails.getPrincipal();
+ this.inArrearsTolerance = basicDetails.getInArrearsTolerance();
+
+ this.termFrequency = basicDetails.getTermFrequency();
+ this.termPeriodFrequencyType = basicDetails.getTermPeriodFrequencyType();
+ this.numberOfRepayments = basicDetails.getNumberOfRepayments();
+ this.repaymentEvery = basicDetails.getRepaymentEvery();
+ this.transactionProcessingStrategyId = basicDetails.getTransactionStrategyId();
+ this.interestRatePerPeriod = basicDetails.getInterestRatePerPeriod();
+ this.annualInterestRate = basicDetails.getAnnualInterestRate();
+ this.repaymentFrequencyType = basicDetails.getRepaymentFrequencyType();
+ this.interestRateFrequencyType = basicDetails.getInterestRateFrequencyType();
+ this.amortizationType = basicDetails.getAmortizationType();
+ this.interestType = basicDetails.getInterestType();
+ this.interestCalculationPeriodType = basicDetails.getInterestCalculationPeriodType();
+
+ this.status = basicDetails.getStatus();
+ this.lifeCycleStatusDate = basicDetails.getLifeCycleStatusDate();
+ }
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanBasicDetailsData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanBasicDetailsData.java
index f86212bfe..55394ea59 100644
--- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanBasicDetailsData.java
+++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanBasicDetailsData.java
@@ -14,561 +14,513 @@ import org.mifosplatform.portfolio.charge.data.ChargeData;
import org.mifosplatform.portfolio.loanproduct.data.LoanProductData;
/**
- * Immutable data object for core details of loan to be combined with {@link LoanAccountData} usage.
+ * Immutable data object for core details of loan to be combined with
+ * {@link LoanAccountData} usage.
*/
public class LoanBasicDetailsData {
- private final Long id;
- private final String externalId;
- private final Long clientId;
- private final Long clientOfficeId;
- private final String clientName;
- private final Long groupId;
- private final Long groupOfficeId;
- private final String groupName;
- private final Long loanProductId;
- private final String loanProductName;
- private final String loanProductDescription;
- private final EnumOptionData status;
- private final Long fundId;
- private final String fundName;
- private final Long loanOfficerId;
- private final String loanOfficerName;
- private final CurrencyData currency;
- private final BigDecimal principal;
- private final BigDecimal inArrearsTolerance;
-
- private final Integer termFrequency;
- private final EnumOptionData termPeriodFrequencyType;
- private final Integer numberOfRepayments;
- private final Integer repaymentEvery;
- private final EnumOptionData repaymentFrequencyType;
- private final Integer transactionStrategyId;
- private final EnumOptionData amortizationType;
- private final BigDecimal interestRatePerPeriod;
- private final EnumOptionData interestRateFrequencyType;
- private final BigDecimal annualInterestRate;
- private final EnumOptionData interestType;
- private final EnumOptionData interestCalculationPeriodType;
-
- private final LocalDate submittedOnDate;
- private final LocalDate approvedOnDate;
- private final LocalDate expectedDisbursementDate;
- private final LocalDate actualDisbursementDate;
- private final LocalDate repaymentsStartingFromDate;
- private final LocalDate interestChargedFromDate;
- private final LocalDate closedOnDate;
- private final LocalDate expectedMaturityDate;
- private final LocalDate lifeCycleStatusDate;
-
- private final BigDecimal totalDisbursementCharges;
- private final Collection charges;
-
- public static LoanBasicDetailsData populateForNewIndividualClientLoanCreation(final Long clientId, final String clientName, final LocalDate expectedDisbursementDate,
- final Long clientOfficeId) {
- return new LoanBasicDetailsData(clientId, clientName, clientOfficeId, null, null, null, expectedDisbursementDate);
- }
+ private final Long id;
+ private final String externalId;
+ private final Long clientId;
+ private final Long clientOfficeId;
+ private final String clientName;
+ private final Long groupId;
+ private final Long groupOfficeId;
+ private final String groupName;
+ private final Long loanProductId;
+ private final String loanProductName;
+ private final String loanProductDescription;
+ private final EnumOptionData status;
+ private final Long fundId;
+ private final String fundName;
+ private final Long loanOfficerId;
+ private final String loanOfficerName;
+ private final CurrencyData currency;
+ private final BigDecimal principal;
+ private final BigDecimal inArrearsTolerance;
- public static LoanBasicDetailsData populateForNewGroupLoanCreation(final Long groupId, final String groupName,
- final LocalDate expectedDisbursementDate,
- final Long groupOfficeId){
- return new LoanBasicDetailsData(null, null, null, groupId, groupName, groupOfficeId, expectedDisbursementDate);
- }
+ private final Integer termFrequency;
+ private final EnumOptionData termPeriodFrequencyType;
+ private final Integer numberOfRepayments;
+ private final Integer repaymentEvery;
+ private final EnumOptionData repaymentFrequencyType;
+ private final Integer transactionProcessingStrategyId;
+ private final EnumOptionData amortizationType;
+ private final BigDecimal interestRatePerPeriod;
+ private final EnumOptionData interestRateFrequencyType;
+ private final BigDecimal annualInterestRate;
+ private final EnumOptionData interestType;
+ private final EnumOptionData interestCalculationPeriodType;
- public static LoanBasicDetailsData populateForNewLoanCreation(final LoanBasicDetailsData loanAccount, final LoanProductData product) {
-
- final Integer termFrequency = product.getNumberOfRepayments() * product.getRepaymentEvery();
- final EnumOptionData termPeriodFrequencyType = product.getRepaymentFrequencyType();
+ private final LocalDate submittedOnDate;
+ private final LocalDate approvedOnDate;
+ private final LocalDate expectedDisbursementDate;
+ private final LocalDate actualDisbursementDate;
+ private final LocalDate repaymentsStartingFromDate;
+ private final LocalDate interestChargedFromDate;
+ private final LocalDate closedOnDate;
+ private final LocalDate expectedMaturityDate;
+ private final LocalDate lifeCycleStatusDate;
+
+ private final BigDecimal totalDisbursementCharges;
+ private final Collection charges;
+
+ public static LoanBasicDetailsData populateForNewIndividualClientLoanCreation(final Long clientId, final String clientName,
+ final LocalDate expectedDisbursementDate, final Long clientOfficeId) {
+ return new LoanBasicDetailsData(clientId, clientName, clientOfficeId, null, null, null, expectedDisbursementDate);
+ }
+
+ public static LoanBasicDetailsData populateForNewGroupLoanCreation(final Long groupId, final String groupName,
+ final LocalDate expectedDisbursementDate, final Long groupOfficeId) {
+ return new LoanBasicDetailsData(null, null, null, groupId, groupName, groupOfficeId, expectedDisbursementDate);
+ }
+
+ public static LoanBasicDetailsData populateForNewLoanCreation(final LoanBasicDetailsData loanAccount, final LoanProductData product) {
+
+ final Integer termFrequency = product.getNumberOfRepayments() * product.getRepaymentEvery();
+ final EnumOptionData termPeriodFrequencyType = product.getRepaymentFrequencyType();
final Collection charges = new ArrayList();
-
+
for (ChargeData charge : product.charges()) {
- charges.add(LoanChargeData.newLoanChargeDetails(charge.getId(), charge.getName(), charge.getCurrency(),
- charge.getAmount(), charge.getChargeTimeType(), charge.getChargeCalculationType(), charge.isPenalty()));
+ charges.add(LoanChargeData.newLoanChargeDetails(charge.getId(), charge.getName(), charge.getCurrency(), charge.getAmount(),
+ charge.getChargeTimeType(), charge.getChargeCalculationType(), charge.isPenalty()));
}
- return new LoanBasicDetailsData(
- loanAccount.clientId, loanAccount.clientName, loanAccount.clientOfficeId,
- loanAccount.groupId, loanAccount.groupName, loanAccount.groupOfficeId,
- product.getId(), product.getName(), product.getDescription(), product.getFundId(), product.getFundName(),
- product.getCurrency(), product.getPrincipal(), product.getInArrearsTolerance(),
- termFrequency, termPeriodFrequencyType, product.getNumberOfRepayments(), product.getRepaymentEvery(), product.getRepaymentFrequencyType(),
- product.getTransactionProcessingStrategyId(), product.getAmortizationType(),
- product.getInterestRatePerPeriod(), product.getInterestRateFrequencyType(), product.getInterestType(), product.getInterestCalculationPeriodType(),
- loanAccount.expectedDisbursementDate, charges);
- }
-
- private LoanBasicDetailsData(
- final Long clientId, final String clientName, final Long clientOfficeId,
- final Long groupId, final String groupName, final Long groupOfficeId,
- final Long productId, final String productName, final String productDescription, final Long fundId, final String fundName,
- final CurrencyData currency, final BigDecimal principal, final BigDecimal inArrearsTolerance,
- final Integer termFrequency,
- final EnumOptionData termPeriodFrequencyType,
- final Integer numberOfRepayments,
- final Integer repaymentEvery,
- final EnumOptionData repaymentFrequencyType,
- final Long transactionStrategyId,
- final EnumOptionData amortizationType,
- final BigDecimal interestRatePerPeriod,
- final EnumOptionData interestRateFrequencyType,
- final EnumOptionData interestType,
- final EnumOptionData interestCalculationPeriodType,
- final LocalDate expectedDisbursementDate, final Collection charges) {
- this.id = null;
- this.externalId = null;
- this.clientId = clientId;
- this.clientName = clientName;
- this.clientOfficeId = clientOfficeId;
- this.groupId = groupId;
- this.groupName = groupName;
- this.groupOfficeId = groupOfficeId;
- this.loanProductId = productId;
- this.loanProductName = productName;
- this.loanProductDescription= productDescription;
- this.status = null;
- this.fundId = fundId;
- this.fundName = fundName;
- this.loanOfficerId = null;
- this.loanOfficerName = null;
- this.currency = currency;
- this.principal = principal;
- this.inArrearsTolerance = inArrearsTolerance;
-
- this.termFrequency = termFrequency;
- this.termPeriodFrequencyType = termPeriodFrequencyType;
- this.numberOfRepayments = numberOfRepayments;
- this.repaymentEvery = repaymentEvery;
- this.repaymentFrequencyType = repaymentFrequencyType;
-
- // FIXME - kw - settle on using either long or integer for this throughout product and account fields for loan.
- if (transactionStrategyId != null) {
- this.transactionStrategyId = transactionStrategyId.intValue();
- } else {
- this.transactionStrategyId = null;
- }
- this.amortizationType = amortizationType;
-
- this.interestRatePerPeriod = interestRatePerPeriod;
- this.annualInterestRate = null;
- this.interestRateFrequencyType = interestRateFrequencyType;
- this.interestType = interestType;
- this.interestCalculationPeriodType = interestCalculationPeriodType;
-
- this.submittedOnDate = null;
- this.approvedOnDate = null;
- this.expectedDisbursementDate = expectedDisbursementDate;
-
- this.actualDisbursementDate = null;
- this.closedOnDate = null;
- this.expectedMaturityDate = null;
- this.repaymentsStartingFromDate = null;
- this.interestChargedFromDate = null;
- this.lifeCycleStatusDate = null;
-
- this.charges = charges;
- this.totalDisbursementCharges = BigDecimal.ZERO;
- }
-
- private LoanBasicDetailsData(final Long clientId, final String clientName, final Long clientOfficeId,
- final Long groupId, final String groupName, final Long groupOfficeId,
- final LocalDate expectedDisbursementDate) {
- this.id = null;
- this.externalId = null;
- this.clientId = clientId;
- this.clientName = clientName;
- this.clientOfficeId = clientOfficeId;
- this.groupId = groupId;
- this.groupName = groupName;
- this.groupOfficeId = groupOfficeId;
- this.loanProductId = null;
- this.loanProductName = null;
- this.loanProductDescription= null;
- this.status = null;
- this.fundId = null;
- this.fundName = null;
- this.loanOfficerId = null;
- this.loanOfficerName = null;
- this.currency = null;
- this.principal = null;
- this.inArrearsTolerance = null;
- this.termFrequency = null;
- this.termPeriodFrequencyType = null;
- this.numberOfRepayments = null;
- this.repaymentEvery = null;
- this.transactionStrategyId = null;
- this.interestRatePerPeriod = null;
- this.annualInterestRate = null;
- this.repaymentFrequencyType = null;
- this.interestRateFrequencyType = null;
- this.amortizationType = null;
- this.interestType = null;
- this.interestCalculationPeriodType = null;
-
- this.lifeCycleStatusDate = null;
-
- this.submittedOnDate = null;
- this.approvedOnDate = null;
- this.expectedDisbursementDate = expectedDisbursementDate;
-
- this.actualDisbursementDate = null;
- this.closedOnDate = null;
- this.expectedMaturityDate = null;
- this.repaymentsStartingFromDate = null;
- this.interestChargedFromDate = null;
-
- this.charges = null;
- this.totalDisbursementCharges = BigDecimal.ZERO;
- }
+ return new LoanBasicDetailsData(loanAccount.clientId, loanAccount.clientName, loanAccount.clientOfficeId, loanAccount.groupId,
+ loanAccount.groupName, loanAccount.groupOfficeId, product.getId(), product.getName(), product.getDescription(),
+ product.getFundId(), product.getFundName(), product.getCurrency(), product.getPrincipal(), product.getInArrearsTolerance(),
+ termFrequency, termPeriodFrequencyType, product.getNumberOfRepayments(), product.getRepaymentEvery(),
+ product.getRepaymentFrequencyType(), product.getTransactionProcessingStrategyId(), product.getAmortizationType(),
+ product.getInterestRatePerPeriod(), product.getInterestRateFrequencyType(), product.getInterestType(),
+ product.getInterestCalculationPeriodType(), loanAccount.expectedDisbursementDate, charges);
+ }
- public LoanBasicDetailsData(
- final Long id,
- final String externalId,
- final Long clientId, final String clientName,
- final Long clientOfficeId,
- final Long groupId,
- final String groupName,
- final Long groupOfficeId,
- final Long loanProductId,
- final String loanProductName,
- final String loanProductDescription,
- final Long fundId, String fundName,
- final LocalDate closedOnDate,
- final LocalDate submittedOnDate,
- final LocalDate approvedOnDate,
- final LocalDate expectedDisbursementDate,
- final LocalDate actualDisbursementDate,
- final LocalDate expectedMaturityDate,
- final LocalDate repaymentsStartingFromDate,
- final LocalDate interestChargedFromDate,
- final CurrencyData currency,
- final BigDecimal principal,
- final BigDecimal inArrearsTolerance,
- final Integer numberOfRepayments,
- final Integer repaymentEvery,
- final BigDecimal interestRatePerPeriod,
- final BigDecimal annualInterestRate,
- final EnumOptionData repaymentFrequencyType,
- final EnumOptionData interestRateFrequencyType,
- final EnumOptionData amortizationType,
- final EnumOptionData interestType,
- final EnumOptionData interestCalculationPeriodType,
- final EnumOptionData status,
- final LocalDate lifeCycleStatusDate,
- final Integer termFrequency,
- final EnumOptionData termPeriodFrequencyType,
- final Integer transactionStrategyId,
- final Collection charges,
- final Long loanOfficerId, String loanOfficerName,
- final BigDecimal totalDisbursementCharges) {
- this.id = id;
- this.externalId = externalId;
- this.clientId = clientId;
- this.clientName = clientName;
- this.clientOfficeId = clientOfficeId;
- this.groupId = groupId;
- this.groupName = groupName;
- this.groupOfficeId = groupOfficeId;
- this.loanProductId = loanProductId;
- this.loanProductName = loanProductName;
- this.loanProductDescription = loanProductDescription;
- this.fundId = fundId;
- this.fundName = fundName;
- this.loanOfficerId = loanOfficerId;
- this.loanOfficerName = loanOfficerName;
- this.closedOnDate = closedOnDate;
- this.submittedOnDate = submittedOnDate;
- this.approvedOnDate = approvedOnDate;
- this.expectedDisbursementDate = expectedDisbursementDate;
- this.actualDisbursementDate = actualDisbursementDate;
- this.expectedMaturityDate = expectedMaturityDate;
- this.repaymentsStartingFromDate = repaymentsStartingFromDate;
- this.interestChargedFromDate = interestChargedFromDate;
- this.currency = currency;
- this.principal = principal;
- this.inArrearsTolerance = inArrearsTolerance;
- this.numberOfRepayments = numberOfRepayments;
- this.repaymentEvery = repaymentEvery;
- this.interestRatePerPeriod = interestRatePerPeriod;
- this.annualInterestRate = annualInterestRate;
- this.repaymentFrequencyType = repaymentFrequencyType;
- this.interestRateFrequencyType = interestRateFrequencyType;
- this.amortizationType = amortizationType;
- this.interestType = interestType;
- this.interestCalculationPeriodType = interestCalculationPeriodType;
- this.status = status;
- this.lifeCycleStatusDate = lifeCycleStatusDate;
- this.termFrequency = termFrequency;
- this.termPeriodFrequencyType = termPeriodFrequencyType;
- this.transactionStrategyId = transactionStrategyId;
- this.charges = charges;
- this.totalDisbursementCharges = totalDisbursementCharges;
- }
+ private LoanBasicDetailsData(final Long clientId, final String clientName, final Long clientOfficeId, final Long groupId,
+ final String groupName, final Long groupOfficeId, final Long productId, final String productName,
+ final String productDescription, final Long fundId, final String fundName, final CurrencyData currency,
+ final BigDecimal principal, final BigDecimal inArrearsTolerance, final Integer termFrequency,
+ final EnumOptionData termPeriodFrequencyType, final Integer numberOfRepayments, final Integer repaymentEvery,
+ final EnumOptionData repaymentFrequencyType, final Long transactionStrategyId, final EnumOptionData amortizationType,
+ final BigDecimal interestRatePerPeriod, final EnumOptionData interestRateFrequencyType, final EnumOptionData interestType,
+ final EnumOptionData interestCalculationPeriodType, final LocalDate expectedDisbursementDate,
+ final Collection charges) {
+ this.id = null;
+ this.externalId = null;
+ this.clientId = clientId;
+ this.clientName = clientName;
+ this.clientOfficeId = clientOfficeId;
+ this.groupId = groupId;
+ this.groupName = groupName;
+ this.groupOfficeId = groupOfficeId;
+ this.loanProductId = productId;
+ this.loanProductName = productName;
+ this.loanProductDescription = productDescription;
+ this.status = null;
+ this.fundId = fundId;
+ this.fundName = fundName;
+ this.loanOfficerId = null;
+ this.loanOfficerName = null;
+ this.currency = currency;
+ this.principal = principal;
+ this.inArrearsTolerance = inArrearsTolerance;
- public int getMaxSubmittedOnOffsetFromToday() {
- return Days.daysBetween(new DateTime(),
- this.getSubmittedOnDate().toDateMidnight().toDateTime())
- .getDays();
- }
+ this.termFrequency = termFrequency;
+ this.termPeriodFrequencyType = termPeriodFrequencyType;
+ this.numberOfRepayments = numberOfRepayments;
+ this.repaymentEvery = repaymentEvery;
+ this.repaymentFrequencyType = repaymentFrequencyType;
- public int getMaxApprovedOnOffsetFromToday() {
+ // FIXME - kw - settle on using either long or integer for this
+ // throughout product and account fields for loan.
+ if (transactionStrategyId != null) {
+ this.transactionProcessingStrategyId = transactionStrategyId.intValue();
+ } else {
+ this.transactionProcessingStrategyId = null;
+ }
+ this.amortizationType = amortizationType;
- int offset = 0;
- if (this.getApprovedOnDate() != null) {
- offset = Days.daysBetween(new DateTime(),
- this.getApprovedOnDate().toDateMidnight().toDateTime())
- .getDays();
- }
+ this.interestRatePerPeriod = interestRatePerPeriod;
+ this.annualInterestRate = null;
+ this.interestRateFrequencyType = interestRateFrequencyType;
+ this.interestType = interestType;
+ this.interestCalculationPeriodType = interestCalculationPeriodType;
- return offset;
- }
+ this.submittedOnDate = null;
+ this.approvedOnDate = null;
+ this.expectedDisbursementDate = expectedDisbursementDate;
- public int getMaxDisbursedOnOffsetFromToday() {
+ this.actualDisbursementDate = null;
+ this.closedOnDate = null;
+ this.expectedMaturityDate = null;
+ this.repaymentsStartingFromDate = null;
+ this.interestChargedFromDate = null;
+ this.lifeCycleStatusDate = null;
- int offset = 0;
- if (this.getActualDisbursementDate() != null) {
- offset = Days.daysBetween(
- new DateTime(),
- this.getActualDisbursementDate().toDateMidnight()
- .toDateTime()).getDays();
- }
+ this.charges = charges;
+ this.totalDisbursementCharges = BigDecimal.ZERO;
+ }
- return offset;
- }
+ private LoanBasicDetailsData(final Long clientId, final String clientName, final Long clientOfficeId, final Long groupId,
+ final String groupName, final Long groupOfficeId, final LocalDate expectedDisbursementDate) {
+ this.id = null;
+ this.externalId = null;
+ this.clientId = clientId;
+ this.clientName = clientName;
+ this.clientOfficeId = clientOfficeId;
+ this.groupId = groupId;
+ this.groupName = groupName;
+ this.groupOfficeId = groupOfficeId;
+ this.loanProductId = null;
+ this.loanProductName = null;
+ this.loanProductDescription = null;
+ this.status = null;
+ this.fundId = null;
+ this.fundName = null;
+ this.loanOfficerId = null;
+ this.loanOfficerName = null;
+ this.currency = null;
+ this.principal = null;
+ this.inArrearsTolerance = null;
+ this.termFrequency = null;
+ this.termPeriodFrequencyType = null;
+ this.numberOfRepayments = null;
+ this.repaymentEvery = null;
+ this.transactionProcessingStrategyId = null;
+ this.interestRatePerPeriod = null;
+ this.annualInterestRate = null;
+ this.repaymentFrequencyType = null;
+ this.interestRateFrequencyType = null;
+ this.amortizationType = null;
+ this.interestType = null;
+ this.interestCalculationPeriodType = null;
- public int getActualLoanTermInDays() {
+ this.lifeCycleStatusDate = null;
- LocalDate dateToUse = getExpectedDisbursementDate();
- if (getActualDisbursementDate() != null) {
- dateToUse = getActualDisbursementDate();
- }
+ this.submittedOnDate = null;
+ this.approvedOnDate = null;
+ this.expectedDisbursementDate = expectedDisbursementDate;
- LocalDate closingDateToUse = getExpectedMaturityDate();
- if (getClosedOnDate() != null) {
- closingDateToUse = getClosedOnDate();
- }
+ this.actualDisbursementDate = null;
+ this.closedOnDate = null;
+ this.expectedMaturityDate = null;
+ this.repaymentsStartingFromDate = null;
+ this.interestChargedFromDate = null;
- return Days.daysBetween(dateToUse.toDateMidnight().toDateTime(),
- closingDateToUse.toDateMidnight().toDateTime()).getDays();
- }
+ this.charges = null;
+ this.totalDisbursementCharges = BigDecimal.ZERO;
+ }
- public int getActualLoanTermInMonths() {
+ public LoanBasicDetailsData(final Long id, final String externalId, final Long clientId, final String clientName,
+ final Long clientOfficeId, final Long groupId, final String groupName, final Long groupOfficeId, final Long loanProductId,
+ final String loanProductName, final String loanProductDescription, final Long fundId, String fundName,
+ final LocalDate closedOnDate, final LocalDate submittedOnDate, final LocalDate approvedOnDate,
+ final LocalDate expectedDisbursementDate, final LocalDate actualDisbursementDate, final LocalDate expectedMaturityDate,
+ final LocalDate repaymentsStartingFromDate, final LocalDate interestChargedFromDate, final CurrencyData currency,
+ final BigDecimal principal, final BigDecimal inArrearsTolerance, final Integer numberOfRepayments,
+ final Integer repaymentEvery, final BigDecimal interestRatePerPeriod, final BigDecimal annualInterestRate,
+ final EnumOptionData repaymentFrequencyType, final EnumOptionData interestRateFrequencyType,
+ final EnumOptionData amortizationType, final EnumOptionData interestType, final EnumOptionData interestCalculationPeriodType,
+ final EnumOptionData status, final LocalDate lifeCycleStatusDate, final Integer termFrequency,
+ final EnumOptionData termPeriodFrequencyType, final Integer transactionStrategyId, final Collection charges,
+ final Long loanOfficerId, String loanOfficerName, final BigDecimal totalDisbursementCharges) {
+ this.id = id;
+ this.externalId = externalId;
+ this.clientId = clientId;
+ this.clientName = clientName;
+ this.clientOfficeId = clientOfficeId;
+ this.groupId = groupId;
+ this.groupName = groupName;
+ this.groupOfficeId = groupOfficeId;
+ this.loanProductId = loanProductId;
+ this.loanProductName = loanProductName;
+ this.loanProductDescription = loanProductDescription;
+ this.fundId = fundId;
+ this.fundName = fundName;
+ this.loanOfficerId = loanOfficerId;
+ this.loanOfficerName = loanOfficerName;
+ this.closedOnDate = closedOnDate;
+ this.submittedOnDate = submittedOnDate;
+ this.approvedOnDate = approvedOnDate;
+ this.expectedDisbursementDate = expectedDisbursementDate;
+ this.actualDisbursementDate = actualDisbursementDate;
+ this.expectedMaturityDate = expectedMaturityDate;
+ this.repaymentsStartingFromDate = repaymentsStartingFromDate;
+ this.interestChargedFromDate = interestChargedFromDate;
+ this.currency = currency;
+ this.principal = principal;
+ this.inArrearsTolerance = inArrearsTolerance;
+ this.numberOfRepayments = numberOfRepayments;
+ this.repaymentEvery = repaymentEvery;
+ this.interestRatePerPeriod = interestRatePerPeriod;
+ this.annualInterestRate = annualInterestRate;
+ this.repaymentFrequencyType = repaymentFrequencyType;
+ this.interestRateFrequencyType = interestRateFrequencyType;
+ this.amortizationType = amortizationType;
+ this.interestType = interestType;
+ this.interestCalculationPeriodType = interestCalculationPeriodType;
+ this.status = status;
+ this.lifeCycleStatusDate = lifeCycleStatusDate;
+ this.termFrequency = termFrequency;
+ this.termPeriodFrequencyType = termPeriodFrequencyType;
+ this.transactionProcessingStrategyId = transactionStrategyId;
+ this.charges = charges;
+ this.totalDisbursementCharges = totalDisbursementCharges;
+ }
- LocalDate dateToUse = getExpectedDisbursementDate();
- if (getActualDisbursementDate() != null) {
- dateToUse = getActualDisbursementDate();
- }
+ public int getMaxSubmittedOnOffsetFromToday() {
+ return Days.daysBetween(new DateTime(), this.getSubmittedOnDate().toDateMidnight().toDateTime()).getDays();
+ }
- LocalDate closingDateToUse = getExpectedMaturityDate();
- if (getClosedOnDate() != null) {
- closingDateToUse = getClosedOnDate();
- }
+ public int getMaxApprovedOnOffsetFromToday() {
- return Months.monthsBetween(dateToUse.toDateMidnight().toDateTime(),
- closingDateToUse.toDateMidnight().toDateTime()).getMonths();
- }
+ int offset = 0;
+ if (this.getApprovedOnDate() != null) {
+ offset = Days.daysBetween(new DateTime(), this.getApprovedOnDate().toDateMidnight().toDateTime()).getDays();
+ }
- public int getLoanTermInDays() {
+ return offset;
+ }
- LocalDate dateToUse = getExpectedDisbursementDate();
- if (getActualDisbursementDate() != null) {
- dateToUse = getActualDisbursementDate();
- }
+ public int getMaxDisbursedOnOffsetFromToday() {
- LocalDate closingDateToUse = getExpectedMaturityDate();
+ int offset = 0;
+ if (this.getActualDisbursementDate() != null) {
+ offset = Days.daysBetween(new DateTime(), this.getActualDisbursementDate().toDateMidnight().toDateTime()).getDays();
+ }
- return Days.daysBetween(dateToUse.toDateMidnight().toDateTime(),
- closingDateToUse.toDateMidnight().toDateTime()).getDays();
- }
+ return offset;
+ }
- public int getLoanTermInMonths() {
+ public int getActualLoanTermInDays() {
- LocalDate dateToUse = getExpectedDisbursementDate();
- if (getActualDisbursementDate() != null) {
- dateToUse = getActualDisbursementDate();
- }
+ LocalDate dateToUse = getExpectedDisbursementDate();
+ if (getActualDisbursementDate() != null) {
+ dateToUse = getActualDisbursementDate();
+ }
- LocalDate closingDateToUse = getExpectedMaturityDate();
+ LocalDate closingDateToUse = getExpectedMaturityDate();
+ if (getClosedOnDate() != null) {
+ closingDateToUse = getClosedOnDate();
+ }
- return Months.monthsBetween(dateToUse.toDateMidnight().toDateTime(),
- closingDateToUse.toDateMidnight().toDateTime()).getMonths();
- }
+ return Days.daysBetween(dateToUse.toDateMidnight().toDateTime(), closingDateToUse.toDateMidnight().toDateTime()).getDays();
+ }
- public Long getId() {
- return id;
- }
+ public int getActualLoanTermInMonths() {
- public String getExternalId() {
- return externalId;
- }
+ LocalDate dateToUse = getExpectedDisbursementDate();
+ if (getActualDisbursementDate() != null) {
+ dateToUse = getActualDisbursementDate();
+ }
- public Long getClientId() {
- return clientId;
- }
+ LocalDate closingDateToUse = getExpectedMaturityDate();
+ if (getClosedOnDate() != null) {
+ closingDateToUse = getClosedOnDate();
+ }
- public String getClientName() {
- return clientName;
- }
-
- public Long getClientOfficeId() {
- return clientOfficeId;
- }
+ return Months.monthsBetween(dateToUse.toDateMidnight().toDateTime(), closingDateToUse.toDateMidnight().toDateTime()).getMonths();
+ }
- public Long getGroupId() {
- return groupId;
- }
+ public int getLoanTermInDays() {
- public Long getGroupOfficeId() {
- return groupOfficeId;
- }
+ LocalDate dateToUse = getExpectedDisbursementDate();
+ if (getActualDisbursementDate() != null) {
+ dateToUse = getActualDisbursementDate();
+ }
- public String getGroupName() {
- return groupName;
- }
+ LocalDate closingDateToUse = getExpectedMaturityDate();
- public Long getFundId() {
- return fundId;
- }
+ return Days.daysBetween(dateToUse.toDateMidnight().toDateTime(), closingDateToUse.toDateMidnight().toDateTime()).getDays();
+ }
- public String getFundName() {
- return fundName;
- }
+ public int getLoanTermInMonths() {
- public Long getLoanProductId() {
- return loanProductId;
- }
+ LocalDate dateToUse = getExpectedDisbursementDate();
+ if (getActualDisbursementDate() != null) {
+ dateToUse = getActualDisbursementDate();
+ }
- public String getLoanProductName() {
- return loanProductName;
- }
+ LocalDate closingDateToUse = getExpectedMaturityDate();
- public String getLoanProductDescription() {
- return loanProductDescription;
- }
-
- public EnumOptionData getStatus() {
- return status;
- }
-
- public Integer getTermFrequency() {
- return termFrequency;
- }
+ return Months.monthsBetween(dateToUse.toDateMidnight().toDateTime(), closingDateToUse.toDateMidnight().toDateTime()).getMonths();
+ }
- public EnumOptionData getTermPeriodFrequencyType() {
- return termPeriodFrequencyType;
- }
+ public Long getId() {
+ return id;
+ }
- public LocalDate getSubmittedOnDate() {
- return submittedOnDate;
- }
+ public String getExternalId() {
+ return externalId;
+ }
- public LocalDate getApprovedOnDate() {
- return approvedOnDate;
- }
+ public Long getClientId() {
+ return clientId;
+ }
- public LocalDate getExpectedDisbursementDate() {
- return expectedDisbursementDate;
- }
+ public String getClientName() {
+ return clientName;
+ }
- public LocalDate getActualDisbursementDate() {
- return actualDisbursementDate;
- }
-
- public LocalDate getRepaymentsStartingFromDate() {
- return repaymentsStartingFromDate;
- }
+ public Long getClientOfficeId() {
+ return clientOfficeId;
+ }
- public LocalDate getInterestChargedFromDate() {
- return interestChargedFromDate;
- }
+ public Long getGroupId() {
+ return groupId;
+ }
- public LocalDate getClosedOnDate() {
- return closedOnDate;
- }
+ public Long getGroupOfficeId() {
+ return groupOfficeId;
+ }
- public LocalDate getExpectedMaturityDate() {
- return expectedMaturityDate;
- }
-
- public CurrencyData getCurrency() {
- return currency;
- }
+ public String getGroupName() {
+ return groupName;
+ }
- public BigDecimal getPrincipal() {
- return principal;
- }
+ public Long getFundId() {
+ return fundId;
+ }
- public BigDecimal getInArrearsTolerance() {
- return inArrearsTolerance;
- }
+ public String getFundName() {
+ return fundName;
+ }
- public Integer getNumberOfRepayments() {
- return numberOfRepayments;
- }
+ public Long getLoanProductId() {
+ return loanProductId;
+ }
- public Integer getRepaymentEvery() {
- return repaymentEvery;
- }
+ public String getLoanProductName() {
+ return loanProductName;
+ }
- public BigDecimal getInterestRatePerPeriod() {
- return interestRatePerPeriod;
- }
+ public String getLoanProductDescription() {
+ return loanProductDescription;
+ }
- public BigDecimal getAnnualInterestRate() {
- return annualInterestRate;
- }
+ public EnumOptionData getStatus() {
+ return status;
+ }
- public EnumOptionData getRepaymentFrequencyType() {
- return repaymentFrequencyType;
- }
+ public Integer getTermFrequency() {
+ return termFrequency;
+ }
- public EnumOptionData getInterestRateFrequencyType() {
- return interestRateFrequencyType;
- }
+ public EnumOptionData getTermPeriodFrequencyType() {
+ return termPeriodFrequencyType;
+ }
- public EnumOptionData getAmortizationType() {
- return amortizationType;
- }
+ public LocalDate getSubmittedOnDate() {
+ return submittedOnDate;
+ }
- public EnumOptionData getInterestType() {
- return interestType;
- }
+ public LocalDate getApprovedOnDate() {
+ return approvedOnDate;
+ }
- public EnumOptionData getInterestCalculationPeriodType() {
- return interestCalculationPeriodType;
- }
+ public LocalDate getExpectedDisbursementDate() {
+ return expectedDisbursementDate;
+ }
- public LocalDate getLifeCycleStatusDate() {
- return lifeCycleStatusDate;
- }
+ public LocalDate getActualDisbursementDate() {
+ return actualDisbursementDate;
+ }
- public Integer getTransactionStrategyId() {
- return transactionStrategyId;
- }
+ public LocalDate getRepaymentsStartingFromDate() {
+ return repaymentsStartingFromDate;
+ }
- public Collection getCharges() {
- return charges;
- }
+ public LocalDate getInterestChargedFromDate() {
+ return interestChargedFromDate;
+ }
- public Long getLoanOfficerId() {
- return loanOfficerId;
- }
+ public LocalDate getClosedOnDate() {
+ return closedOnDate;
+ }
- public String getLoanOfficerName() {
- return loanOfficerName;
- }
+ public LocalDate getExpectedMaturityDate() {
+ return expectedMaturityDate;
+ }
- public BigDecimal getTotalDisbursementCharges() {
- return totalDisbursementCharges;
- }
+ public CurrencyData getCurrency() {
+ return currency;
+ }
- public DisbursementData toDisburementData() {
- return new DisbursementData(this.expectedDisbursementDate, this.actualDisbursementDate, this.principal);
- }
+ public BigDecimal getPrincipal() {
+ return principal;
+ }
- public Long getOfficeId(){
+ public BigDecimal getInArrearsTolerance() {
+ return inArrearsTolerance;
+ }
+
+ public Integer getNumberOfRepayments() {
+ return numberOfRepayments;
+ }
+
+ public Integer getRepaymentEvery() {
+ return repaymentEvery;
+ }
+
+ public BigDecimal getInterestRatePerPeriod() {
+ return interestRatePerPeriod;
+ }
+
+ public BigDecimal getAnnualInterestRate() {
+ return annualInterestRate;
+ }
+
+ public EnumOptionData getRepaymentFrequencyType() {
+ return repaymentFrequencyType;
+ }
+
+ public EnumOptionData getInterestRateFrequencyType() {
+ return interestRateFrequencyType;
+ }
+
+ public EnumOptionData getAmortizationType() {
+ return amortizationType;
+ }
+
+ public EnumOptionData getInterestType() {
+ return interestType;
+ }
+
+ public EnumOptionData getInterestCalculationPeriodType() {
+ return interestCalculationPeriodType;
+ }
+
+ public LocalDate getLifeCycleStatusDate() {
+ return lifeCycleStatusDate;
+ }
+
+ public Integer getTransactionStrategyId() {
+ return this.transactionProcessingStrategyId;
+ }
+
+ public Collection getCharges() {
+ return charges;
+ }
+
+ public Long getLoanOfficerId() {
+ return loanOfficerId;
+ }
+
+ public String getLoanOfficerName() {
+ return loanOfficerName;
+ }
+
+ public BigDecimal getTotalDisbursementCharges() {
+ return totalDisbursementCharges;
+ }
+
+ public DisbursementData toDisburementData() {
+ return new DisbursementData(this.expectedDisbursementDate, this.actualDisbursementDate, this.principal);
+ }
+
+ public Long getOfficeId() {
Long officeId = this.clientOfficeId;
- if (officeId == null){
+ if (officeId == null) {
officeId = this.groupOfficeId;
}