FINERACT-2081: Add all loan term validations to loan details

This commit is contained in:
Oleksii Novikov
2024-10-12 08:05:30 +02:00
committed by Arnold Gálovics
parent fe16b61c72
commit 25866edfc9
18 changed files with 383 additions and 161 deletions
@@ -24,6 +24,7 @@ import lombok.Getter;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariationType;
import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations;
@Getter
public class LoanTermVariationsData implements Comparable<LoanTermVariationsData> {
@@ -46,6 +47,16 @@ public class LoanTermVariationsData implements Comparable<LoanTermVariationsData
this.isSpecificToInstallment = isSpecificToInstallment;
}
public LoanTermVariationsData(final Long id, final Integer termType, final LocalDate termVariationApplicableFrom,
final BigDecimal decimalValue, final LocalDate dateValue, final boolean isSpecificToInstallment) {
this.id = id;
this.termType = LoanEnumerations.loanVariationType(LoanTermVariationType.fromInt(termType));
this.termVariationApplicableFrom = termVariationApplicableFrom;
this.decimalValue = decimalValue;
this.dateValue = dateValue;
this.isSpecificToInstallment = isSpecificToInstallment;
}
public LoanTermVariationsData(final EnumOptionData termType, final LocalDate termVariationApplicableFrom, final BigDecimal decimalValue,
LocalDate dateValue, final boolean isSpecificToInstallment) {
this.id = null;
@@ -5366,16 +5366,12 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom<Long> {
return isForeClosure;
}
public Set<LoanTermVariations> getActiveLoanTermVariations() {
Set<LoanTermVariations> retData = new HashSet<>();
if (this.loanTermVariations != null && !this.loanTermVariations.isEmpty()) {
for (LoanTermVariations loanTermVariations : this.loanTermVariations) {
if (loanTermVariations.isActive()) {
retData.add(loanTermVariations);
}
}
public List<LoanTermVariations> getActiveLoanTermVariations() {
if (this.loanTermVariations == null) {
return new ArrayList<>();
}
return !retData.isEmpty() ? retData : null;
return this.loanTermVariations.stream().filter(LoanTermVariations::isActive).collect(Collectors.toList());
}
public boolean isTopup() {
@@ -19,6 +19,7 @@
package org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain;
import java.util.List;
import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData;
import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@@ -28,7 +29,24 @@ import org.springframework.data.repository.query.Param;
public interface LoanTermVariationsRepository
extends JpaRepository<LoanTermVariations, Long>, JpaSpecificationExecutor<LoanTermVariations> {
@Query("select lrr from LoanTermVariations lrr where lrr.loan.id = :loanId")
List<LoanTermVariations> findAllLoanTermVariationsByLoanId(@Param("loanId") Long loanId);
@Query("""
select new org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData(
ltv.id, ltv.termType, ltv.termApplicableFrom, ltv.decimalValue, ltv.dateValue, ltv.isSpecificToInstallment
)
from LoanTermVariations ltv
where ltv.loan.id = :loanId
order by ltv.termApplicableFrom
""")
List<LoanTermVariationsData> findLoanTermVariationsByLoanId(@Param("loanId") long loanId);
@Query("""
select new org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData(
ltv.id, ltv.termType, ltv.termApplicableFrom, ltv.decimalValue, ltv.dateValue, ltv.isSpecificToInstallment
)
from LoanTermVariations ltv
where ltv.loan.id = :loanId and ltv.termType = :termType
order by ltv.termApplicableFrom
""")
List<LoanTermVariationsData> findLoanTermVariationsByLoanIdAndTermType(@Param("loanId") long loanId, @Param("termType") int termType);
}