diff --git a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/client/viewClientAccount.jsp b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/client/viewClientAccount.jsp index 9414a3ae1..a6cc4075b 100644 --- a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/client/viewClientAccount.jsp +++ b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/client/viewClientAccount.jsp @@ -532,9 +532,9 @@ $(document).ready(function() { var curTabID = currentTab.prop("id") - offsetToSubmittedDate = data.basicDetails.maxSubmittedOnOffsetFromToday; - offsetToApprovalDate = data.basicDetails.maxApprovedOnOffsetFromToday; - offsetToDisbursalDate = data.basicDetails.maxDisbursedOnOffsetFromToday; + offsetToSubmittedDate = data.convenienceData.maxSubmittedOnOffsetFromToday; + offsetToApprovalDate = data.convenienceData.maxApprovedOnOffsetFromToday; + offsetToDisbursalDate = data.convenienceData.maxDisbursedOnOffsetFromToday; var $loantabs = $(".loantabs").tabs({ "show": function(event, ui) { @@ -715,7 +715,7 @@ $(document).ready(function() { basicAuthKey: base64, datasetType: "portfolio_loan", datasetPKValue: data.id, - datasetTypeDiv: "loanadditionaldata" + data.basicDetails.id, + datasetTypeDiv: "loanadditionaldata" + data.id, headingPrefix: "", headingClass: "", labelClass: "longrowlabel", diff --git a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/view-templates.jsp b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/view-templates.jsp index ec5a91a4d..bd440c3e3 100644 --- a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/view-templates.jsp +++ b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/view-templates.jsp @@ -371,7 +371,7 @@ ({{=$ctx.number(pendingApprovalLoanCount)}}): {{#each pendingApprovalLoans}} - {{=loanProductName}}: #{{=id}} + {{=loanProductName}}: #{{=id}} {{/each}} @@ -382,7 +382,7 @@ ({{=$ctx.number(awaitingDisbursalLoanCount)}}): {{#each awaitingDisbursalLoans}} - {{=loanProductName}}: #{{=id}} + {{=loanProductName}}: #{{=id}} {{/each}} @@ -393,7 +393,7 @@ ({{=$ctx.number(activeLoanCount)}}): {{#each openLoans}} - {{=loanProductName}}: #{{=id}} + {{=loanProductName}}: #{{=id}} {{/each}} @@ -404,7 +404,7 @@
({{=$ctx.number(closedLoanCount)}}):
{{#each closedLoans}} - {{=loanProductName}}: #{{=id}} + {{=loanProductName}}: #{{=id}} {{/each}}
@@ -531,20 +531,19 @@ - {{#each basicDetails}}
{{=lifeCycleStatusText}} ( {{=$ctx.globalDate(lifeCycleStatusDate)}}) -{{#if $ctx.numberGreaterThanZero($parent.data.loanData.summary.totalInArrears.amount)}} +{{#if $ctx.numberGreaterThanZero(summary.totalInArrears.amount)}} {{#if actualDisbursementDate !== null}} - - {{=$ctx.moneyWithCurrency($parent.parent.parent.data.loanData.summary.totalInArrears)}} + - {{=$ctx.moneyWithCurrency($parent.parent.data.summary.totalInArrears)}} {{/if}} {{/if}} @@ -651,11 +650,10 @@
- {{/each}} -
- +
+
@@ -669,33 +667,33 @@ - - + + - + - - + + - + - - - - + + + +
{{=$ctx.money(loanData.summary.originalPrincipal)}}{{=$ctx.money(loanData.summary.principalPaid)}}{{=$ctx.money(summary.originalPrincipal)}}{{=$ctx.money(summary.principalPaid)}}  {{=$ctx.money(loanData.summary.principalOutstanding)}}{{=$ctx.money(summary.principalOutstanding)}}
{{=$ctx.money(loanData.summary.originalInterest)}}{{=$ctx.money(loanData.summary.interestPaid)}}{{=$ctx.money(summary.originalInterest)}}{{=$ctx.money(summary.interestPaid)}}  {{=$ctx.money(loanData.summary.interestOutstanding)}}{{=$ctx.money(summary.interestOutstanding)}}
{{=$ctx.money(loanData.summary.originalTotal)}}{{=$ctx.money(loanData.summary.totalPaid)}}{{=$ctx.money(loanData.summary.totalWaived)}}{{=$ctx.money(loanData.summary.totalOutstanding)}}{{=$ctx.money(summary.originalTotal)}}{{=$ctx.money(summary.totalPaid)}}{{=$ctx.money(summary.totalWaived)}}{{=$ctx.money(summary.totalOutstanding)}}

- +
@@ -735,7 +733,7 @@ - {{#each loanData.repaymentSchedule.periods}} + {{#each repaymentSchedule.periods}} @@ -754,20 +752,20 @@ - - - - - - - - - + + + + + + + + +
{{=$ctx.number(period)}} {{=$ctx.globalDate(date)}}
{{=$ctx.money(loanData.summary.originalPrincipal)}}{{=$ctx.money(loanData.summary.principalPaid)}}{{=$ctx.money(loanData.summary.principalOutstanding)}}{{=$ctx.money(loanData.summary.originalInterest)}}{{=$ctx.money(loanData.summary.interestPaid)}}{{=$ctx.money(loanData.summary.interestOutstanding)}}{{=$ctx.money(loanData.summary.originalTotal)}}{{=$ctx.money(loanData.summary.totalPaid)}}{{=$ctx.money(loanData.summary.totalOutstanding)}}{{=$ctx.money(summary.originalPrincipal)}}{{=$ctx.money(summary.principalPaid)}}{{=$ctx.money(summary.principalOutstanding)}}{{=$ctx.money(summary.originalInterest)}}{{=$ctx.money(summary.interestPaid)}}{{=$ctx.money(summary.interestOutstanding)}}{{=$ctx.money(summary.originalTotal)}}{{=$ctx.money(summary.totalPaid)}}{{=$ctx.money(summary.totalOutstanding)}}
- {{#if loanData.loanRepayments}} + {{#if loanRepayments}}
@@ -778,19 +776,19 @@ - {{#if open}} + {{#if actualDisbursementDate !== null}} {{/if}} - {{#each loanData.loanRepayments}} + {{#each loanRepayments}} - {{#if $parent.parent.data.open}} + {{#if $parent.parent.data.actualDisbursementDate !== null}} {{/if}} diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ClientLoanAccountSummaryData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ClientLoanAccountSummaryData.java index 0aa0aacc6..9ad8b1774 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ClientLoanAccountSummaryData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ClientLoanAccountSummaryData.java @@ -2,54 +2,25 @@ package org.mifosng.platform.api.data; import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; - -import org.joda.time.LocalDate; - -@XmlRootElement(name = "clientLoanAccountSummary") public class ClientLoanAccountSummaryData implements Serializable { private Long id; private String externalId; private Long loanProductId; private String loanProductName; - private Integer loanStatusId; - private boolean pendingApproval; - private boolean waitingForDisbursal; - private boolean open; - private boolean closed; - - private String lifeCycleStatusText; - private LocalDate lifeCycleStatusDate; - - // private LocalDate submittedOnDate; - // private LocalDate approvedOnDate; - // private LocalDate expectedDisbursementDate; - // private LocalDate actualDisbursementDate; - // private LocalDate expectedFirstRepaymentOnDate; - // private LocalDate interestCalculatedFromDate; - // private LocalDate expectedMaturityDate; - // private LocalDate closedOnDate; public ClientLoanAccountSummaryData() { // } public ClientLoanAccountSummaryData(Long id, String externalId, - Long productId, String loanProductName, Integer loanStatusId, - String lifeCycleStatusText, boolean pendingApproval, - boolean waitingForDisbursal, boolean open, boolean closed) { + Long productId, String loanProductName, Integer loanStatusId) { this.id = id; this.externalId = externalId; this.loanProductId = productId; this.loanProductName = loanProductName; this.loanStatusId = loanStatusId; - this.lifeCycleStatusText = lifeCycleStatusText; - this.pendingApproval = pendingApproval; - this.waitingForDisbursal = waitingForDisbursal; - this.open = open; - this.closed = closed; } public Long getId() { @@ -76,54 +47,6 @@ public class ClientLoanAccountSummaryData implements Serializable { this.loanProductName = loanProductName; } - public boolean isPendingApproval() { - return pendingApproval; - } - - public void setPendingApproval(boolean pendingApproval) { - this.pendingApproval = pendingApproval; - } - - public boolean isWaitingForDisbursal() { - return waitingForDisbursal; - } - - public void setWaitingForDisbursal(boolean waitingForDisbursal) { - this.waitingForDisbursal = waitingForDisbursal; - } - - public boolean isOpen() { - return open; - } - - public void setOpen(boolean open) { - this.open = open; - } - - public boolean isClosed() { - return closed; - } - - public void setClosed(boolean closed) { - this.closed = closed; - } - - public String getLifeCycleStatusText() { - return lifeCycleStatusText; - } - - public void setLifeCycleStatusText(String lifeCycleStatusText) { - this.lifeCycleStatusText = lifeCycleStatusText; - } - - public LocalDate getLifeCycleStatusDate() { - return lifeCycleStatusDate; - } - - public void setLifeCycleStatusDate(LocalDate lifeCycleStatusDate) { - this.lifeCycleStatusDate = lifeCycleStatusDate; - } - public Long getLoanProductId() { return loanProductId; } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/CurrencyData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/CurrencyData.java index e3b002b06..92aa83eda 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/CurrencyData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/CurrencyData.java @@ -2,9 +2,6 @@ package org.mifosng.platform.api.data; import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement(name = "currency") public class CurrencyData implements Serializable { private String code; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DerivedLoanData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DerivedLoanData.java index 88ccb7cb3..d33cf0abb 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DerivedLoanData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DerivedLoanData.java @@ -2,9 +2,6 @@ package org.mifosng.platform.api.data; import java.util.List; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement public class DerivedLoanData { private LoanRepaymentScheduleData repaymentSchedule; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java index 540437be6..b3b9c0f05 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java @@ -1,24 +1,109 @@ package org.mifosng.platform.api.data; +import java.math.BigDecimal; +import java.util.List; + import org.codehaus.jackson.map.annotate.JsonFilter; +import org.joda.time.LocalDate; @JsonFilter("loanFilter") public class LoanAccountData { private Long id; - private LoanBasicDetailsData basicDetails; - private DerivedLoanData loanData; + private String externalId; + private String loanProductName; + + private LocalDate submittedOnDate; + private LocalDate approvedOnDate; + private LocalDate expectedDisbursementDate; + private LocalDate actualDisbursementDate; + private LocalDate expectedFirstRepaymentOnDate; + private LocalDate interestChargedFromDate; + private LocalDate closedOnDate; + private LocalDate expectedMaturityDate; + + private MoneyData principal; + private MoneyData inArrearsTolerance; + + private Integer numberOfRepayments; + private Integer repaymentEvery; + private BigDecimal interestRatePerPeriod; + private BigDecimal annualInterestRate; + + private EnumOptionData repaymentFrequencyType; + private EnumOptionData interestRateFrequencyType; + private EnumOptionData amortizationType; + private EnumOptionData interestType; + private EnumOptionData interestCalculationPeriodType; + + private String lifeCycleStatusText; + private LocalDate lifeCycleStatusDate; + + private LoanAccountSummaryData summary; + private LoanRepaymentScheduleData repaymentSchedule; + private List loanRepayments; + private LoanPermissionData permissions; + private LoanConvenienceData convenienceData; + + protected LoanAccountData() { // } - public LoanAccountData(Long id, LoanBasicDetailsData basicDetails, DerivedLoanData loanData, LoanPermissionData permissions) { - this.id = id; - this.basicDetails = basicDetails; - this.loanData = loanData; + public LoanAccountData(LoanBasicDetailsData basicDetails, + LoanAccountSummaryData summary, + LoanRepaymentScheduleData repaymentSchedule, + List loanRepayments, LoanPermissionData permissions) { + this.summary = summary; + this.repaymentSchedule = repaymentSchedule; + this.loanRepayments = loanRepayments; this.permissions = permissions; + + 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); + + this.id = basicDetails.getId(); + this.externalId = basicDetails.getExternalId(); + this.loanProductName = basicDetails.getLoanProductName(); + 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.expectedFirstRepaymentOnDate = basicDetails.getExpectedFirstRepaymentOnDate(); + this.interestChargedFromDate = basicDetails.getInterestChargedFromDate(); + this.principal = basicDetails.getPrincipal(); + this.inArrearsTolerance = basicDetails.getInArrearsTolerance(); + this.numberOfRepayments = basicDetails.getNumberOfRepayments(); + this.repaymentEvery = basicDetails.getRepaymentEvery(); + 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.lifeCycleStatusText = basicDetails.getLifeCycleStatusText(); + this.lifeCycleStatusDate = basicDetails.getLifeCycleStatusDate(); + } + + public LoanConvenienceData getConvenienceData() { + return convenienceData; + } + + public void setConvenienceData(LoanConvenienceData convenienceData) { + this.convenienceData = convenienceData; } public LoanPermissionData getPermissions() { @@ -28,21 +113,29 @@ public class LoanAccountData { public void setPermissions(LoanPermissionData permissions) { this.permissions = permissions; } - - public LoanBasicDetailsData getBasicDetails() { - return basicDetails; + + public LoanAccountSummaryData getSummary() { + return summary; } - public void setBasicDetails(LoanBasicDetailsData basicDetails) { - this.basicDetails = basicDetails; + public void setSummary(LoanAccountSummaryData summary) { + this.summary = summary; } - public DerivedLoanData getLoanData() { - return loanData; + public LoanRepaymentScheduleData getRepaymentSchedule() { + return repaymentSchedule; } - public void setLoanData(DerivedLoanData loanData) { - this.loanData = loanData; + public void setRepaymentSchedule(LoanRepaymentScheduleData repaymentSchedule) { + this.repaymentSchedule = repaymentSchedule; + } + + public List getLoanRepayments() { + return loanRepayments; + } + + public void setLoanRepayments(List loanRepayments) { + this.loanRepayments = loanRepayments; } public Long getId() { @@ -52,4 +145,191 @@ public class LoanAccountData { public void setId(Long id) { this.id = id; } + + public String getExternalId() { + return externalId; + } + + public void setExternalId(String externalId) { + this.externalId = externalId; + } + + public String getLoanProductName() { + return loanProductName; + } + + public void setLoanProductName(String loanProductName) { + this.loanProductName = loanProductName; + } + + public LocalDate getSubmittedOnDate() { + return submittedOnDate; + } + + public void setSubmittedOnDate(LocalDate submittedOnDate) { + this.submittedOnDate = submittedOnDate; + } + + public LocalDate getApprovedOnDate() { + return approvedOnDate; + } + + public void setApprovedOnDate(LocalDate approvedOnDate) { + this.approvedOnDate = approvedOnDate; + } + + public LocalDate getExpectedDisbursementDate() { + return expectedDisbursementDate; + } + + public void setExpectedDisbursementDate(LocalDate expectedDisbursementDate) { + this.expectedDisbursementDate = expectedDisbursementDate; + } + + public LocalDate getActualDisbursementDate() { + return actualDisbursementDate; + } + + public void setActualDisbursementDate(LocalDate actualDisbursementDate) { + this.actualDisbursementDate = actualDisbursementDate; + } + + public LocalDate getExpectedFirstRepaymentOnDate() { + return expectedFirstRepaymentOnDate; + } + + public void setExpectedFirstRepaymentOnDate( + LocalDate expectedFirstRepaymentOnDate) { + this.expectedFirstRepaymentOnDate = expectedFirstRepaymentOnDate; + } + + public LocalDate getInterestChargedFromDate() { + return interestChargedFromDate; + } + + public void setInterestChargedFromDate(LocalDate interestChargedFromDate) { + this.interestChargedFromDate = interestChargedFromDate; + } + + public LocalDate getClosedOnDate() { + return closedOnDate; + } + + public void setClosedOnDate(LocalDate closedOnDate) { + this.closedOnDate = closedOnDate; + } + + public LocalDate getExpectedMaturityDate() { + return expectedMaturityDate; + } + + public void setExpectedMaturityDate(LocalDate expectedMaturityDate) { + this.expectedMaturityDate = expectedMaturityDate; + } + + public MoneyData getPrincipal() { + return principal; + } + + public void setPrincipal(MoneyData principal) { + this.principal = principal; + } + + public MoneyData getInArrearsTolerance() { + return inArrearsTolerance; + } + + public void setInArrearsTolerance(MoneyData inArrearsTolerance) { + this.inArrearsTolerance = inArrearsTolerance; + } + + public Integer getNumberOfRepayments() { + return numberOfRepayments; + } + + public void setNumberOfRepayments(Integer numberOfRepayments) { + this.numberOfRepayments = numberOfRepayments; + } + + public Integer getRepaymentEvery() { + return repaymentEvery; + } + + public void setRepaymentEvery(Integer repaymentEvery) { + this.repaymentEvery = repaymentEvery; + } + + public BigDecimal getInterestRatePerPeriod() { + return interestRatePerPeriod; + } + + public void setInterestRatePerPeriod(BigDecimal interestRatePerPeriod) { + this.interestRatePerPeriod = interestRatePerPeriod; + } + + public BigDecimal getAnnualInterestRate() { + return annualInterestRate; + } + + public void setAnnualInterestRate(BigDecimal annualInterestRate) { + this.annualInterestRate = annualInterestRate; + } + + public EnumOptionData getRepaymentFrequencyType() { + return repaymentFrequencyType; + } + + public void setRepaymentFrequencyType(EnumOptionData repaymentFrequencyType) { + this.repaymentFrequencyType = repaymentFrequencyType; + } + + public EnumOptionData getInterestRateFrequencyType() { + return interestRateFrequencyType; + } + + public void setInterestRateFrequencyType( + EnumOptionData interestRateFrequencyType) { + this.interestRateFrequencyType = interestRateFrequencyType; + } + + public EnumOptionData getAmortizationType() { + return amortizationType; + } + + public void setAmortizationType(EnumOptionData amortizationType) { + this.amortizationType = amortizationType; + } + + public EnumOptionData getInterestType() { + return interestType; + } + + public void setInterestType(EnumOptionData interestType) { + this.interestType = interestType; + } + + public EnumOptionData getInterestCalculationPeriodType() { + return interestCalculationPeriodType; + } + + public void setInterestCalculationPeriodType( + EnumOptionData interestCalculationPeriodType) { + this.interestCalculationPeriodType = interestCalculationPeriodType; + } + + public String getLifeCycleStatusText() { + return lifeCycleStatusText; + } + + public void setLifeCycleStatusText(String lifeCycleStatusText) { + this.lifeCycleStatusText = lifeCycleStatusText; + } + + public LocalDate getLifeCycleStatusDate() { + return lifeCycleStatusDate; + } + + public void setLifeCycleStatusDate(LocalDate lifeCycleStatusDate) { + this.lifeCycleStatusDate = lifeCycleStatusDate; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountSummaryData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountSummaryData.java index 133652201..59168a66c 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountSummaryData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountSummaryData.java @@ -1,8 +1,6 @@ package org.mifosng.platform.api.data; -import javax.xml.bind.annotation.XmlRootElement; -@XmlRootElement public class LoanAccountSummaryData { private MoneyData originalPrincipal; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanConvenienceData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanConvenienceData.java new file mode 100644 index 000000000..d0c372649 --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanConvenienceData.java @@ -0,0 +1,54 @@ +package org.mifosng.platform.api.data; + +public class LoanConvenienceData { + + private final int maxSubmittedOnOffsetFromToday; + private final int maxApprovedOnOffsetFromToday; + private final int maxDisbursedOnOffsetFromToday; + private final int expectedLoanTermInDays; + private final int actualLoanTermInDays; + private final int expectedLoanTermInMonths; + private final int actualLoanTermInMonths; + + public LoanConvenienceData(int maxSubmittedOnOffsetFromToday, + int maxApprovedOnOffsetFromToday, + int maxDisbursedOnOffsetFromToday, int expectedLoanTermInDays, + int actualLoanTermInDays, int expectedLoanTermInMonths, + int actualLoanTermInMonths) { + this.maxSubmittedOnOffsetFromToday = maxSubmittedOnOffsetFromToday; + this.maxApprovedOnOffsetFromToday = maxApprovedOnOffsetFromToday; + this.maxDisbursedOnOffsetFromToday = maxDisbursedOnOffsetFromToday; + this.expectedLoanTermInDays = expectedLoanTermInDays; + this.actualLoanTermInDays = actualLoanTermInDays; + this.expectedLoanTermInMonths = expectedLoanTermInMonths; + this.actualLoanTermInMonths = actualLoanTermInMonths; + } + + public int getMaxSubmittedOnOffsetFromToday() { + return maxSubmittedOnOffsetFromToday; + } + + public int getMaxApprovedOnOffsetFromToday() { + return maxApprovedOnOffsetFromToday; + } + + public int getMaxDisbursedOnOffsetFromToday() { + return maxDisbursedOnOffsetFromToday; + } + + public int getExpectedLoanTermInDays() { + return expectedLoanTermInDays; + } + + public int getActualLoanTermInDays() { + return actualLoanTermInDays; + } + + public int getExpectedLoanTermInMonths() { + return expectedLoanTermInMonths; + } + + public int getActualLoanTermInMonths() { + return actualLoanTermInMonths; + } +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentData.java index d4d8995ab..24252d747 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentData.java @@ -1,13 +1,8 @@ package org.mifosng.platform.api.data; -import javax.xml.bind.annotation.XmlRootElement; - import org.codehaus.jackson.map.annotate.JsonFilter; -import org.joda.time.DateMidnight; -import org.joda.time.Days; import org.joda.time.LocalDate; -@XmlRootElement @JsonFilter("loanRepaymentFilter") public class LoanRepaymentData { @@ -48,9 +43,9 @@ public class LoanRepaymentData { return date; } - public int getTransactionOffsetFromToday() { - return Days.daysBetween(new DateMidnight().toDateTime(), this.date.toDateMidnight().toDateTime()).getDays(); - } +// public int getTransactionOffsetFromToday() { +// return Days.daysBetween(new DateMidnight().toDateTime(), this.date.toDateMidnight().toDateTime()).getDays(); +// } public void setDate(LocalDate date) { this.date = date; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentPeriodData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentPeriodData.java index f1631f567..ffaf8c34a 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentPeriodData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentPeriodData.java @@ -1,10 +1,7 @@ package org.mifosng.platform.api.data; -import javax.xml.bind.annotation.XmlRootElement; - import org.joda.time.LocalDate; -@XmlRootElement public class LoanRepaymentPeriodData { private Integer period; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentScheduleData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentScheduleData.java index 953ec5fbf..0e5eba9b5 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentScheduleData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanRepaymentScheduleData.java @@ -3,9 +3,6 @@ package org.mifosng.platform.api.data; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement public class LoanRepaymentScheduleData { private List periods = new ArrayList(); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanSchedule.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanSchedule.java index 00435797b..3557ee652 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanSchedule.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanSchedule.java @@ -4,9 +4,6 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement(name = "loanSchedule") public class LoanSchedule implements Serializable { private List scheduledLoanInstallments = new ArrayList(); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/MoneyData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/MoneyData.java index 121795ae6..e012b830d 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/MoneyData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/MoneyData.java @@ -4,9 +4,6 @@ import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement public class MoneyData implements Serializable, Comparable { private String currencyCode; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ScheduledLoanInstallment.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ScheduledLoanInstallment.java index f251e771e..277721ceb 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ScheduledLoanInstallment.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ScheduledLoanInstallment.java @@ -3,11 +3,8 @@ package org.mifosng.platform.api.data; import java.io.Serializable; import java.math.BigDecimal; -import javax.xml.bind.annotation.XmlRootElement; - import org.joda.time.LocalDate; -@XmlRootElement(name = "installment") public class ScheduledLoanInstallment implements Serializable { private Integer installmentNumber; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformServiceImpl.java index e714aeb70..cb44a54ef 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/client/service/ClientReadPlatformServiceImpl.java @@ -185,11 +185,14 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService List results = this.jdbcTemplate.query(sql, rm, new Object[] {clientId, currentUser.getOrganisation().getId()}); if (results != null) { for (ClientLoanAccountSummaryData row : results) { - if (row.isOpen()) { + + LoanStatusMapper statusMapper = new LoanStatusMapper(row.getLoanStatusId()); + + if (statusMapper.isOpen()) { openLoans.add(row); - } else if (row.isWaitingForDisbursal()) { + } else if (statusMapper.isAwaitingDisbursal()) { awaitingDisbursalLoans.add(row); - } else if (row.isPendingApproval()) { + } else if (statusMapper.isPendingApproval()) { pendingApprovalLoans.add(row); } else { closedLoans.add(row); @@ -226,16 +229,16 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService Long productId = JdbcSupport.getLong(rs, "productId"); String loanProductName = rs.getString("productName"); Integer loanStatusId = JdbcSupport.getInteger(rs, "statusId"); - String lifeCycleStatusText = rs.getString("statusName"); +// String lifeCycleStatusText = rs.getString("statusName"); +// +// LoanStatusMapper statusMapper = new LoanStatusMapper(loanStatusId); +// +// boolean pendingApproval = statusMapper.isPendingApproval(); +// boolean waitingForDisbursal = statusMapper.isAwaitingDisbursal(); +// boolean open = statusMapper.isOpen(); +// boolean closed = statusMapper.isClosed(); - LoanStatusMapper statusMapper = new LoanStatusMapper(loanStatusId); - - boolean pendingApproval = statusMapper.isPendingApproval(); - boolean waitingForDisbursal = statusMapper.isAwaitingDisbursal(); - boolean open = statusMapper.isOpen(); - boolean closed = statusMapper.isClosed(); - - return new ClientLoanAccountSummaryData(id, externalId, productId, loanProductName, loanStatusId, lifeCycleStatusText, pendingApproval, waitingForDisbursal, open, closed); + return new ClientLoanAccountSummaryData(id, externalId, productId, loanProductName, loanStatusId); } } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/DerivedLoanDataProcessor.java b/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/DerivedLoanDataProcessor.java index d99bd6208..5db86c7c4 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/DerivedLoanDataProcessor.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/DerivedLoanDataProcessor.java @@ -48,10 +48,7 @@ public class DerivedLoanDataProcessor { } if (transaction.isWaiver()) { - LoanRepaymentData repaymentData = processWaiver( - transaction, scheduledRepaymentPeriod, - repaymentScheduleIndex, loanRepaymentPeriods, - arrearsTolerance, currencyDetail); + LoanRepaymentData repaymentData = processWaiver(transaction, scheduledRepaymentPeriod, currencyDetail); loanRepayments.add(repaymentData); } @@ -77,10 +74,7 @@ public class DerivedLoanDataProcessor { } private LoanRepaymentData processWaiver(LoanTransaction transaction, - LoanRepaymentPeriodData scheduledRepaymentPeriod, - int repaymentScheduleIndex, - List loanRepaymentPeriods, - Money arrearsTolerance, CurrencyData currencyData) { + LoanRepaymentPeriodData scheduledRepaymentPeriod, CurrencyData currencyData) { MonetaryCurrency currency = new MonetaryCurrency(currencyData.getCode(), currencyData.getDecimalPlaces()); Money totalToWaive = transaction.getAmount(currency); @@ -152,7 +146,7 @@ public class DerivedLoanDataProcessor { LocalDate arrearsFrom = determineInArrearsFrom(currentRepaymentSchedule, loanRepaymentPeriods, repaymentIndex); - LocalDate arrearsTo = determineInArrearsTo(currentRepaymentSchedule, loanRepaymentPeriods, repaymentIndex); + LocalDate arrearsTo = determineInArrearsTo(loanRepaymentPeriods, repaymentIndex); currentRepaymentSchedule.setArrearsFrom(arrearsFrom); currentRepaymentSchedule.setArrearsTo(arrearsTo); @@ -165,7 +159,6 @@ public class DerivedLoanDataProcessor { } private LocalDate determineInArrearsTo( - LoanRepaymentPeriodData currentRepaymentSchedule, List loanRepaymentPeriods, int repaymentIndex) { diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/Loan.java b/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/Loan.java index d8d5ba846..e5b57600c 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/Loan.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/Loan.java @@ -28,7 +28,12 @@ import org.joda.time.LocalDate; import org.mifosng.platform.api.data.CurrencyData; import org.mifosng.platform.api.data.DerivedLoanData; import org.mifosng.platform.api.data.EnumOptionData; +import org.mifosng.platform.api.data.LoanAccountData; +import org.mifosng.platform.api.data.LoanAccountSummaryData; import org.mifosng.platform.api.data.LoanBasicDetailsData; +import org.mifosng.platform.api.data.LoanPermissionData; +import org.mifosng.platform.api.data.LoanRepaymentData; +import org.mifosng.platform.api.data.LoanRepaymentScheduleData; import org.mifosng.platform.api.data.MoneyData; import org.mifosng.platform.client.domain.Client; import org.mifosng.platform.currency.domain.MonetaryCurrency; @@ -975,4 +980,34 @@ public class Loan extends AbstractAuditableCustom { public String getCurrencyCode() { return this.loanRepaymentScheduleDetail.getPrincipal().getCurrencyCode(); } + + public LoanAccountData toLoanAccountData(LoanAccountSummaryData summary, LoanRepaymentScheduleData repaymentSchedule, + List loanRepayments, + CurrencyData currencyData) { + + LoanBasicDetailsData basicDetails = toBasicDetailsData(currencyData); + + // permissions + boolean waiveAllowed = summary.isWaiveAllowed(basicDetails.getInArrearsTolerance()) + && isNotClosed(); + boolean undoDisbursalAllowed = isDisbursed() + && isOpenWithNoRepaymentMade(); + boolean makeRepaymentAllowed = isDisbursed() + && isNotClosed(); + + boolean rejectAllowed = isNotApproved() + && isNotDisbursed() && isNotClosed(); + boolean withdrawnByApplicantAllowed = isNotDisbursed() + && isNotClosed(); + boolean undoApprovalAllowed = isApproved() + && isNotClosed(); + boolean disbursalAllowed = isApproved() + && isNotDisbursed() && isNotClosed(); + + LoanPermissionData permissions = new LoanPermissionData(waiveAllowed, makeRepaymentAllowed, rejectAllowed, withdrawnByApplicantAllowed, + undoApprovalAllowed, undoDisbursalAllowed, disbursalAllowed, isSubmittedAndPendingApproval(), + isWaitingForDisbursal()); + + return new LoanAccountData(basicDetails, summary, repaymentSchedule, loanRepayments, permissions); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/LoanRepaymentScheduleInstallment.java b/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/LoanRepaymentScheduleInstallment.java index 9d05d814a..0f5451762 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/LoanRepaymentScheduleInstallment.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/loan/domain/LoanRepaymentScheduleInstallment.java @@ -65,7 +65,7 @@ public class LoanRepaymentScheduleInstallment extends AbstractAuditableCustom
{{=$ctx.globalDate(date)}} {{=$ctx.money(total)}} {{=$ctx.money(principal)}} {{=$ctx.money(interest)}}