http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java index af9a8e2..e6976a8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java @@ -23,11 +23,12 @@ import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; -import org.springframework.data.jpa.domain.AbstractPersistable; + +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name="m_loan_reschedule_request_term_variations_mapping") -public class LoanRescheduleRequestToTermVariationMapping extends AbstractPersistable<Long> { +public class LoanRescheduleRequestToTermVariationMapping extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false, cascade = CascadeType.PERSIST)
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java index 6dbadad..6171a02 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java @@ -30,15 +30,16 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; + import org.apache.fineract.infrastructure.core.data.EnumOptionData; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData; import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_loan_term_variations") -public class LoanTermVariations extends AbstractPersistable<Long> { +public class LoanTermVariations extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false) @JoinColumn(name = "loan_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java index 106654e..1708bb3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java @@ -18,16 +18,19 @@ */ package org.apache.fineract.portfolio.loanaccount.domain; -import org.apache.fineract.portfolio.account.domain.AccountTransferDetails; -import org.springframework.data.jpa.domain.AbstractPersistable; -import org.springframework.stereotype.Component; - -import javax.persistence.*; import java.math.BigDecimal; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; +import javax.persistence.Table; + +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; + @Entity @Table(name = "m_loan_topup") -public class LoanTopupDetails extends AbstractPersistable<Long> { +public class LoanTopupDetails extends AbstractPersistableCustom<Long> { @OneToOne @JoinColumn(name = "loan_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java index 35860c8..5c6a8a6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java @@ -24,12 +24,12 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.charge.domain.Charge; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_loan_tranche_charges") -public class LoanTrancheCharge extends AbstractPersistable<Long> { +public class LoanTrancheCharge extends AbstractPersistableCustom<Long> { @ManyToOne(cascade = CascadeType.ALL, optional = false) @JoinColumn(name = "loan_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java index fa65d0d..d2258ce 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java @@ -23,11 +23,12 @@ import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; -import org.springframework.data.jpa.domain.AbstractPersistable; + +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name="m_loan_tranche_disbursement_charge") -public class LoanTrancheDisbursementCharge extends AbstractPersistable<Long> { +public class LoanTrancheDisbursementCharge extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "loan_charge_id", referencedColumnName = "id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java index 7b16a5c..3dc1cb7 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java @@ -40,6 +40,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.UniqueConstraint; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; @@ -54,7 +55,6 @@ import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.useradministration.domain.AppUser; import org.joda.time.LocalDate; import org.joda.time.LocalDateTime; -import org.springframework.data.jpa.domain.AbstractPersistable; /** * All monetary transactions against a loan are modelled through this entity. @@ -62,7 +62,7 @@ import org.springframework.data.jpa.domain.AbstractPersistable; */ @Entity @Table(name = "m_loan_transaction", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE") }) -public final class LoanTransaction extends AbstractPersistable<Long> { +public class LoanTransaction extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false) @JoinColumn(name = "loan_id", nullable = false) @@ -77,15 +77,15 @@ public final class LoanTransaction extends AbstractPersistable<Long> { private PaymentDetail paymentDetail; @Column(name = "transaction_type_enum", nullable = false) - private final Integer typeOf; + private Integer typeOf; @Temporal(TemporalType.DATE) @Column(name = "transaction_date", nullable = false) - private final Date dateOf; + private Date dateOf; @Temporal(TemporalType.DATE) @Column(name = "submitted_on_date", nullable = false) - private final Date submittedOnDate; + private Date submittedOnDate; @Column(name = "amount", scale = 6, precision = 19, nullable = false) private BigDecimal amount; @@ -118,9 +118,9 @@ public final class LoanTransaction extends AbstractPersistable<Long> { @Column(name = "created_date", nullable = false) private Date createdDate; - @ManyToOne + @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "appuser_id", nullable = true) - private final AppUser appUser; + private AppUser appUser; @OneToMany(cascade = CascadeType.ALL, mappedBy = "loanTransaction", orphanRemoval = true, fetch=FetchType.EAGER) private Set<LoanChargePaidBy> loanChargesPaid = new HashSet<>(); @@ -136,12 +136,12 @@ public final class LoanTransaction extends AbstractPersistable<Long> { private Set<LoanTransactionToRepaymentScheduleMapping> loanTransactionToRepaymentScheduleMappings = new HashSet<>(); protected LoanTransaction() { - this.loan = null; + /* this.loan = null; this.dateOf = null; this.typeOf = null; this.submittedOnDate = DateUtils.getDateOfTenant(); this.createdDate = new Date(); - this.appUser = null; + this.appUser = null;*/ } public static LoanTransaction incomePosting(final Loan loan, final Office office, final Date dateOf, final BigDecimal amount, http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java index 78d19cc..7e4685c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java @@ -27,13 +27,13 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_loan_transaction_repayment_schedule_mapping") -public class LoanTransactionToRepaymentScheduleMapping extends AbstractPersistable<Long> { +public class LoanTransactionToRepaymentScheduleMapping extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false, cascade = CascadeType.PERSIST) @JoinColumn(name = "loan_repayment_schedule_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java index b52e4e7..730f60a 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java @@ -40,11 +40,11 @@ import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants.GUARANTOR_JSON_INPUT_PARAMS; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_guarantor") -public class Guarantor extends AbstractPersistable<Long> { +public class Guarantor extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "loan_id", nullable = false) @@ -101,7 +101,7 @@ public class Guarantor extends AbstractPersistable<Long> { private boolean active; @OneToMany(cascade = CascadeType.ALL, mappedBy = "guarantor", orphanRemoval = true, fetch=FetchType.EAGER) - private final List<GuarantorFundingDetails> guarantorFundDetails = new ArrayList<>(); + private List<GuarantorFundingDetails> guarantorFundDetails = new ArrayList<>(); protected Guarantor() { http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java index 0179cb2..993c0d7 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java @@ -34,11 +34,11 @@ import javax.persistence.Table; import org.apache.fineract.portfolio.account.domain.AccountAssociations; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_guarantor_funding_details") -public class GuarantorFundingDetails extends AbstractPersistable<Long> { +public class GuarantorFundingDetails extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "guarantor_id", nullable = false) @@ -64,7 +64,7 @@ public class GuarantorFundingDetails extends AbstractPersistable<Long> { private BigDecimal amountTransfered; @OneToMany(cascade = CascadeType.ALL, mappedBy = "guarantorFundingDetails", orphanRemoval = true, fetch=FetchType.EAGER) - private final List<GuarantorFundingTransaction> guarantorFundingTransactions = new ArrayList<>(); + private List<GuarantorFundingTransaction> guarantorFundingTransactions = new ArrayList<>(); protected GuarantorFundingDetails() {} http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java index aa12fb8..2c6edb1 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java @@ -29,11 +29,11 @@ import javax.persistence.Table; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransaction; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_guarantor_transaction") -public class GuarantorFundingTransaction extends AbstractPersistable<Long> { +public class GuarantorFundingTransaction extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "guarantor_fund_detail_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransactionRepository.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransactionRepository.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransactionRepository.java index adb7523..4e4f7a0 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransactionRepository.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransactionRepository.java @@ -28,7 +28,7 @@ import org.springframework.data.repository.query.Param; public interface GuarantorFundingTransactionRepository extends JpaRepository<GuarantorFundingTransaction, Long>, JpaSpecificationExecutor<GuarantorFundingTransaction> { - @Query("from GuarantorFundingTransaction ft where ft.loanTransaction.id in (:loanTransactions)") + @Query("select ft from GuarantorFundingTransaction ft where ft.loanTransaction.id in (:loanTransactions)") List<GuarantorFundingTransaction> fetchGuarantorFundingTransactions(@Param("loanTransactions") List<Long> loanTransactions); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java index d249e35..bf4a64b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java @@ -1373,32 +1373,32 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener params.getActualRepaymentDate(), applicableVariations); Money interest = principalInterestForThisPeriod.interest(); totalInterest = totalInterest.plus(interest); - - Money uncompounded = params.getUnCompoundedAmount(); - Money compounded = uncompounded.zero(); - for (Map.Entry<LocalDate, Money> mapEntry : params.getCompoundingMap().entrySet()) { - if (mapEntry.getKey().isAfter(params.getPeriodStartDate())) { - compounded = compounded.plus(mapEntry.getValue()); - } - } - if (compounded.isGreaterThanZero() && startDate.isEqual(additionalPeriodsStartDate)) { - params.setCompoundedInLastInstallment(uncompoundedFromLastInstallment);// uncompounded in last installment - additionalPeriodsStartDate = additionalPeriodsStartDate.plusDays(1); - } - Money compoundedForThisPeriod = compounded.minus(uncompounded); - Money uncompoundedForThisPeriod = interest.minus(compoundedForThisPeriod); - params.setUnCompoundedAmount(uncompoundedForThisPeriod); - LocalDate compoundingDate = params.getPeriodStartDate(); - if (loanApplicationTerms.allowCompoundingOnEod()) { - compoundingDate = compoundingDate.minusDays(1); - } - compoundingDate = getNextCompoundScheduleDate(compoundingDate, loanApplicationTerms, holidayDetailDTO); - if(compoundingDate.isEqual(params.getActualRepaymentDate())){ - params.getCompoundingMap().put(compoundingDate, uncompoundedForThisPeriod); - params.setUnCompoundedAmount(uncompoundedForThisPeriod.zero()); - } - + if(loanApplicationTerms.getInterestRecalculationCompoundingMethod().isCompoundingEnabled()) { + Money uncompounded = params.getUnCompoundedAmount(); + Money compounded = uncompounded.zero(); + for (Map.Entry<LocalDate, Money> mapEntry : params.getCompoundingMap().entrySet()) { + if (mapEntry.getKey().isAfter(params.getPeriodStartDate())) { + compounded = compounded.plus(mapEntry.getValue()); + } + } + if (compounded.isGreaterThanZero() && startDate.isEqual(additionalPeriodsStartDate)) { + params.setCompoundedInLastInstallment(uncompoundedFromLastInstallment);// uncompounded in last installment + additionalPeriodsStartDate = additionalPeriodsStartDate.plusDays(1); + } + Money compoundedForThisPeriod = compounded.minus(uncompounded); + Money uncompoundedForThisPeriod = interest.minus(compoundedForThisPeriod); + params.setUnCompoundedAmount(uncompoundedForThisPeriod); + LocalDate compoundingDate = params.getPeriodStartDate(); + if (loanApplicationTerms.allowCompoundingOnEod()) { + compoundingDate = compoundingDate.minusDays(1); + } + compoundingDate = getNextCompoundScheduleDate(compoundingDate, loanApplicationTerms, holidayDetailDTO); + if(compoundingDate.isEqual(params.getActualRepaymentDate())){ + params.getCompoundingMap().put(compoundingDate, uncompoundedForThisPeriod); + params.setUnCompoundedAmount(uncompoundedForThisPeriod.zero()); + } + } } params.setPeriodStartDate(params.getActualRepaymentDate()); } while (params.getActualRepaymentDate().isBefore(currentDate) && !outstanding.isZero()); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java index 4f962aa..baef5c6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java @@ -33,11 +33,11 @@ import javax.persistence.TemporalType; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest; import org.apache.fineract.useradministration.domain.AppUser; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_loan_repayment_schedule_history") -public class LoanRepaymentScheduleHistory extends AbstractPersistable<Long> { +public class LoanRepaymentScheduleHistory extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false) @JoinColumn(name = "loan_id") http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java index 8a0a844..188d20a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java @@ -41,11 +41,11 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations; import org.apache.fineract.useradministration.domain.AppUser; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_loan_reschedule_request") -public class LoanRescheduleRequest extends AbstractPersistable<Long> { +public class LoanRescheduleRequest extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "loan_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java index 7070218..b697797 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java @@ -26,7 +26,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.persistence.EntityExistsException; +import javax.persistence.PersistenceException; + import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat; import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormatRepositoryWrapper; import org.apache.fineract.infrastructure.accountnumberformat.domain.EntityAccountType; @@ -413,8 +417,12 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa .withLoanId(newLoanApplication.getId()) // .build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch(final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -989,8 +997,12 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa .withLoanId(existingLoanApplication.getId()) // .with(changes).build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -998,16 +1010,14 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa * Guaranteed to throw an exception no matter what the data integrity issue * is. */ - private void handleDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) { - - final Throwable realCause = dve.getMostSpecificCause(); - if (realCause.getMessage().contains("loan_account_no_UNIQUE")) { + private void handleDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) { + + if (realCause.getMessage().contains("loan_account_no_UNIQUE") || realCause.getCause().getMessage().contains("loan_account_no_UNIQUE")) { final String accountNo = command.stringValueOfParameterNamed("accountNo"); throw new PlatformDataIntegrityException("error.msg.loan.duplicate.accountNo", "Loan with accountNo `" + accountNo + "` already exists", "accountNo", accountNo); - } else if (realCause.getMessage().contains("loan_externalid_UNIQUE")) { - + } else if (realCause.getMessage().contains("loan_externalid_UNIQUE") || realCause.getCause().getMessage().contains("loan_externalid_UNIQUE")) { final String externalId = command.stringValueOfParameterNamed("externalId"); throw new PlatformDataIntegrityException("error.msg.loan.duplicate.externalId", "Loan with externalId `" + externalId + "` already exists", "externalId", externalId); @@ -1017,7 +1027,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa throw new PlatformDataIntegrityException("error.msg.unknown.data.integrity.issue", "Unknown data integrity issue with resource."); } - private void logAsErrorUnexpectedDataIntegrityException(final DataIntegrityViolationException dve) { + private void logAsErrorUnexpectedDataIntegrityException(final Exception dve) { logger.error(dve.getMessage(), dve); } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java index f1db739..6a39299 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java @@ -19,7 +19,6 @@ package org.apache.fineract.portfolio.loanaccount.service; import java.math.BigDecimal; -import java.math.BigInteger; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java index 67bd9aa..a49bb97 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java @@ -204,13 +204,12 @@ public class LoanChargeAssembler { } else { final Long loanChargeId = id; final LoanCharge loanCharge = this.loanChargeRepository.findOne(loanChargeId); - if (disbursementChargeIds.contains(loanChargeId) && loanCharge == null) { - // throw new - // LoanChargeNotFoundException(loanChargeId); - } if (loanCharge != null) { - loanCharge.update(amount, dueDate, numberOfRepayments); - loanCharges.add(loanCharge); + if(!loanCharge.isTrancheDisbursementCharge() + || disbursementChargeIds.contains(loanChargeId)){ + loanCharge.update(amount, dueDate, numberOfRepayments); + loanCharges.add(loanCharge); + } } } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java index f461b17..05173e4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java @@ -61,7 +61,7 @@ import org.apache.fineract.portfolio.fund.domain.Fund; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.AprCalculator; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -79,7 +79,7 @@ import com.google.gson.JsonObject; @Table(name = "m_product_loan", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name"), @UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE"), @UniqueConstraint(columnNames = { "short_name" }, name = "unq_short_name") }) -public class LoanProduct extends AbstractPersistable<Long> { +public class LoanProduct extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "fund_id", nullable = true) @@ -103,7 +103,7 @@ public class LoanProduct extends AbstractPersistable<Long> { private List<Charge> charges; @Embedded - private final LoanProductRelatedDetail loanProductRelatedDetail; + private LoanProductRelatedDetail loanProductRelatedDetail; @Embedded private LoanProductMinMaxConstraints loanProductMinMaxConstraints; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java index 676377f..85f103d 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java @@ -26,11 +26,11 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_product_loan_variations_borrower_cycle") -public class LoanProductBorrowerCycleVariations extends AbstractPersistable<Long> { +public class LoanProductBorrowerCycleVariations extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "loan_product_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java index 3e2a8f2..2d0893a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java @@ -25,15 +25,15 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.fineract.infrastructure.core.api.JsonCommand; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_product_loan_configurable_attributes") -public class LoanProductConfigurableAttributes extends AbstractPersistable<Long> { +public class LoanProductConfigurableAttributes extends AbstractPersistableCustom<Long> { @ManyToOne - @JoinColumn(name = "loan_product_id", nullable = true) + @JoinColumn(name = "loan_product_id", nullable = false) private LoanProduct loanProduct; @Column(name = "amortization_method_enum", nullable = true) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java index 0c2f476..42adbc1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java @@ -34,11 +34,11 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.portfolio.floatingrates.data.FloatingRateDTO; import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData; import org.apache.fineract.portfolio.floatingrates.domain.FloatingRate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_product_loan_floating_rates") -public class LoanProductFloatingRates extends AbstractPersistable<Long> { +public class LoanProductFloatingRates extends AbstractPersistableCustom<Long> { @OneToOne @JoinColumn(name = "loan_product_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java index bc590d3..a6a96e5 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java @@ -29,7 +29,7 @@ import javax.persistence.Table; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; /** * Entity for capturing interest recalculation settings @@ -39,7 +39,7 @@ import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_product_loan_guarantee_details") -public class LoanProductGuaranteeDetails extends AbstractPersistable<Long> { +public class LoanProductGuaranteeDetails extends AbstractPersistableCustom<Long> { @OneToOne @JoinColumn(name = "loan_product_id", nullable = false) @@ -48,10 +48,10 @@ public class LoanProductGuaranteeDetails extends AbstractPersistable<Long> { @Column(name = "mandatory_guarantee", scale = 6, precision = 19, nullable = false) private BigDecimal mandatoryGuarantee; - @Column(name = "minimum_guarantee_from_own_funds", scale = 6, precision = 19, nullable = false) + @Column(name = "minimum_guarantee_from_own_funds", scale = 6, precision = 19, nullable = true) private BigDecimal minimumGuaranteeFromOwnFunds; - @Column(name = "minimum_guarantee_from_guarantor_funds", scale = 6, precision = 19, nullable = false) + @Column(name = "minimum_guarantee_from_guarantor_funds", scale = 6, precision = 19, nullable = true) private BigDecimal minimumGuaranteeFromGuarantor; protected LoanProductGuaranteeDetails() { http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java index 1b5a34f..e70a14f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java @@ -28,7 +28,7 @@ import javax.persistence.Table; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; /** * Entity for capturing interest recalculation settings @@ -38,7 +38,7 @@ import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_product_loan_recalculation_details") -public class LoanProductInterestRecalculationDetails extends AbstractPersistable<Long> { +public class LoanProductInterestRecalculationDetails extends AbstractPersistableCustom<Long> { @OneToOne @JoinColumn(name = "product_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductTrancheDetails.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductTrancheDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductTrancheDetails.java index c12e742..b0eac9f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductTrancheDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductTrancheDetails.java @@ -33,10 +33,10 @@ public class LoanProductTrancheDetails { @Column(name = "allow_multiple_disbursals") private boolean multiDisburseLoan; - @Column(name = "max_disbursals", nullable = false) + @Column(name = "max_disbursals", nullable = true) private Integer maxTrancheCount; - @Column(name = "max_outstanding_loan_balance", scale = 6, precision = 19, nullable = false) + @Column(name = "max_outstanding_loan_balance", scale = 6, precision = 19, nullable = true) private BigDecimal outstandingLoanBalance; protected LoanProductTrancheDetails() { http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java index 538e452..afde1df 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java @@ -29,11 +29,11 @@ import javax.persistence.Table; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_product_loan_variable_installment_config") -public class LoanProductVariableInstallmentConfig extends AbstractPersistable<Long> { +public class LoanProductVariableInstallmentConfig extends AbstractPersistableCustom<Long> { @OneToOne @JoinColumn(name = "loan_product_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanTransactionProcessingStrategy.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanTransactionProcessingStrategy.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanTransactionProcessingStrategy.java index 775f4b9..91df333 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanTransactionProcessingStrategy.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanTransactionProcessingStrategy.java @@ -23,11 +23,11 @@ import javax.persistence.Entity; import javax.persistence.Table; import org.apache.fineract.portfolio.loanproduct.data.TransactionProcessingStrategyData; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "ref_loan_transaction_processing_strategy") -public class LoanTransactionProcessingStrategy extends AbstractPersistable<Long> { +public class LoanTransactionProcessingStrategy extends AbstractPersistableCustom<Long> { @Column(name = "code", unique = true) private String code; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java index c042761..2bea8cd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java @@ -24,11 +24,11 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_product_mix") -public class ProductMix extends AbstractPersistable<Long> { +public class ProductMix extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "product_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMixRepository.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMixRepository.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMixRepository.java index f4fb6d9..8b9908f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMixRepository.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMixRepository.java @@ -27,9 +27,9 @@ import org.springframework.data.repository.query.Param; public interface ProductMixRepository extends JpaRepository<ProductMix, Long>, JpaSpecificationExecutor<ProductMix> { - public static final String GET_PRODUCTMIXES_BY_PRODUCTID_SCHEMA = "from ProductMix pm where pm.product.id = :productId"; + public static final String GET_PRODUCTMIXES_BY_PRODUCTID_SCHEMA = "select pm from ProductMix pm where pm.product.id = :productId"; public static final String GET_RESTRICTED_PRODUCTIDS_SCHEMA = "Select pm.restrictedProduct.id from ProductMix pm where pm.product.id = :productId"; - public static final String GET_RESTRICTED_PRODUCTS_SCHEMA = "from ProductMix pm where pm.restrictedProduct.id = :restrictedProductId"; + public static final String GET_RESTRICTED_PRODUCTS_SCHEMA = "select pm from ProductMix pm where pm.restrictedProduct.id = :restrictedProductId"; @Query(GET_PRODUCTMIXES_BY_PRODUCTID_SCHEMA) List<ProductMix> findByProductId(@Param("productId") Long productId); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java index 6e0ab74..424b3ac 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java @@ -22,6 +22,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import javax.persistence.PersistenceException; + +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.accounting.producttoaccountmapping.service.ProductToGLAccountMappingWritePlatformService; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; @@ -143,8 +146,12 @@ public class LoanProductWritePlatformServiceJpaRepositoryImpl implements LoanPro .build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch(final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -230,8 +237,12 @@ public class LoanProductWritePlatformServiceJpaRepositoryImpl implements LoanPro .build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return new CommandProcessingResult(Long.valueOf(-1)); + }catch(final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -281,21 +292,19 @@ public class LoanProductWritePlatformServiceJpaRepositoryImpl implements LoanPro * Guaranteed to throw an exception no matter what the data integrity issue * is. */ - private void handleDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) { - - final Throwable realCause = dve.getMostSpecificCause(); + private void handleDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) { - if (realCause.getMessage().contains("external_id")) { + if (realCause.getMessage().contains("'external_id'")) { final String externalId = command.stringValueOfParameterNamed("externalId"); throw new PlatformDataIntegrityException("error.msg.product.loan.duplicate.externalId", "Loan Product with externalId `" + externalId + "` already exists", "externalId", externalId); - } else if (realCause.getMessage().contains("unq_name")) { + } else if (realCause.getMessage().contains("'unq_name'")) { final String name = command.stringValueOfParameterNamed("name"); throw new PlatformDataIntegrityException("error.msg.product.loan.duplicate.name", "Loan product with name `" + name + "` already exists", "name", name); - } else if (realCause.getMessage().contains("unq_short_name")) { + } else if (realCause.getMessage().contains("'unq_short_name'")) { final String shortName = command.stringValueOfParameterNamed("shortName"); throw new PlatformDataIntegrityException("error.msg.product.loan.duplicate.short.name", "Loan product with short name `" @@ -320,7 +329,7 @@ public class LoanProductWritePlatformServiceJpaRepositoryImpl implements LoanPro } } - private void logAsErrorUnexpectedDataIntegrityException(final DataIntegrityViolationException dve) { + private void logAsErrorUnexpectedDataIntegrityException(final Exception dve) { logger.error(dve.getMessage(), dve); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java index d463190..663f954 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java @@ -27,11 +27,11 @@ import javax.persistence.UniqueConstraint; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.meeting.domain.Meeting; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_client_attendance", uniqueConstraints = { @UniqueConstraint(columnNames = { "client_id", "meeting_id" }, name = "unique_client_meeting_attendance") }) -public class ClientAttendance extends AbstractPersistable<Long> { +public class ClientAttendance extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "client_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java index e33459e..b61f867 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java @@ -51,11 +51,11 @@ import org.apache.fineract.portfolio.calendar.exception.NotValidRecurringDateExc import org.apache.fineract.portfolio.meeting.attendance.domain.ClientAttendance; import org.apache.fineract.portfolio.meeting.exception.MeetingDateException; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_meeting", uniqueConstraints = { @UniqueConstraint(columnNames = { "calendar_instance_id", "meeting_date" }, name = "unique_calendar_instance_id_meeting_date") }) -public class Meeting extends AbstractPersistable<Long> { +public class Meeting extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "calendar_instance_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java index e835fb0..d5499d4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java @@ -44,7 +44,7 @@ public class Note extends AbstractAuditableCustom<AppUser, Long> { @ManyToOne @JoinColumn(name = "client_id", nullable = true) - private final Client client; + private Client client; @ManyToOne @JoinColumn(name = "group_id", nullable = true) @@ -62,7 +62,7 @@ public class Note extends AbstractAuditableCustom<AppUser, Long> { private String note; @Column(name = "note_type_enum") - private final Integer noteTypeId; + private Integer noteTypeId; @ManyToOne @JoinColumn(name = "savings_account_id", nullable = true) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java index e660221..c02bc9d 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java @@ -32,11 +32,11 @@ import org.apache.fineract.portfolio.paymentdetail.PaymentDetailConstants; import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.paymenttype.domain.PaymentType; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_payment_detail") -public final class PaymentDetail extends AbstractPersistable<Long> { +public final class PaymentDetail extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "payment_type_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java index 0a5dc08..0cdf6bc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java @@ -29,11 +29,11 @@ import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.portfolio.paymenttype.api.PaymentTypeApiResourceConstants; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_payment_type") -public class PaymentType extends AbstractPersistable<Long> { +public class PaymentType extends AbstractPersistableCustom<Long> { @Column(name = "value") private String name; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java index 73ba98f..e9d3315 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java @@ -25,11 +25,11 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.fineract.portfolio.interestratechart.domain.InterestIncentivesFields; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_deposit_account_interest_incentives") -public class DepositAccountInterestIncentive extends AbstractPersistable<Long> { +public class DepositAccountInterestIncentive extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "deposit_account_interest_rate_slab_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java index 868968c..f9ac7f4 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java @@ -24,12 +24,12 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.interestratechart.domain.InterestIncentivesFields; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_savings_interest_incentives") -public class DepositAccountInterestIncentives extends AbstractPersistable<Long> { +public class DepositAccountInterestIncentives extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "deposit_account_interest_rate_slab_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java index 94bd39d..e124036 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java @@ -31,6 +31,7 @@ import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChart; import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartFields; @@ -39,11 +40,10 @@ import org.apache.fineract.portfolio.interestratechart.incentive.AttributeIncent import org.apache.fineract.portfolio.interestratechart.incentive.AttributeIncentiveCalculationFactory; import org.apache.fineract.portfolio.interestratechart.incentive.IncentiveDTO; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_savings_account_interest_rate_chart") -public class DepositAccountInterestRateChart extends AbstractPersistable<Long> { +public class DepositAccountInterestRateChart extends AbstractPersistableCustom<Long> { @Embedded private InterestRateChartFields chartFields; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java index 0cca9c9..00e197d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java @@ -30,14 +30,14 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives; import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlab; import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlabFields; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_savings_account_interest_rate_slab") -public class DepositAccountInterestRateChartSlabs extends AbstractPersistable<Long> { +public class DepositAccountInterestRateChartSlabs extends AbstractPersistableCustom<Long> { @Embedded private InterestRateChartSlabFields slabFields; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java index de0c76f..067630d 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java @@ -23,7 +23,7 @@ import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingTransaction; import org.apache.fineract.portfolio.savings.DepositAccountOnHoldTransactionType; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import javax.persistence.CascadeType; import javax.persistence.Column; @@ -39,7 +39,7 @@ import java.util.Date; @Entity @Table(name = "m_deposit_account_on_hold_transaction") -public class DepositAccountOnHoldTransaction extends AbstractPersistable<Long> { +public class DepositAccountOnHoldTransaction extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "savings_account_id", nullable = true) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java index ff719c5..28e1d1f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java @@ -36,16 +36,16 @@ import javax.persistence.Table; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.ApiParameterError; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.savings.DepositsApiConstants; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_deposit_account_recurring_detail") -public class DepositAccountRecurringDetail extends AbstractPersistable<Long> { +public class DepositAccountRecurringDetail extends AbstractPersistableCustom<Long> { @Column(name = "mandatory_recommended_deposit_amount", scale = 6, precision = 19, nullable = true) private BigDecimal mandatoryRecommendedDepositAmount; @@ -54,9 +54,9 @@ public class DepositAccountRecurringDetail extends AbstractPersistable<Long> { private BigDecimal totalOverdueAmount; @Column(name = "is_calendar_inherited", nullable = false) - private final boolean isCalendarInherited; + private boolean isCalendarInherited; - @Column(name = "no_of_overdue_installments", nullable = false) + @Column(name = "no_of_overdue_installments", nullable = true) private Integer noOfOverdueInstallments; @Embedded http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java index b656afa..71e7bfa 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java @@ -42,6 +42,7 @@ import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.savings.DepositAccountOnClosureType; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; @@ -50,11 +51,10 @@ import org.joda.time.LocalDate; import org.joda.time.Months; import org.joda.time.Weeks; import org.joda.time.Years; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_deposit_account_term_and_preclosure") -public class DepositAccountTermAndPreClosure extends AbstractPersistable<Long> { +public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom<Long> { @Column(name = "deposit_amount", scale = 6, precision = 19, nullable = true) private BigDecimal depositAmount; @@ -76,7 +76,7 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistable<Long> { @Column(name = "deposit_period_frequency_enum", nullable = true) private Integer depositPeriodFrequency; - @Column(name = "on_account_closure_enum", nullable = false) + @Column(name = "on_account_closure_enum", nullable = true) private Integer onAccountClosureType; @Embedded http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java index 1fd2908..1cf3152 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java @@ -28,11 +28,11 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import org.apache.fineract.infrastructure.core.api.JsonCommand; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_deposit_product_recurring_detail") -public class DepositProductRecurringDetail extends AbstractPersistable<Long> { +public class DepositProductRecurringDetail extends AbstractPersistableCustom<Long> { @Embedded private DepositRecurringDetail recurringDetail; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java index 60fb99a..0a99f19 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java @@ -29,11 +29,11 @@ import javax.persistence.Table; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_deposit_product_term_and_preclosure") -public class DepositProductTermAndPreClosure extends AbstractPersistable<Long> { +public class DepositProductTermAndPreClosure extends AbstractPersistableCustom<Long> { @Embedded private DepositPreClosureDetail preClosureDetail; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java index 1cbc725..3807d6e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java @@ -817,4 +817,10 @@ public class FixedDepositAccount extends SavingsAccount { public BigDecimal minBalanceForInterestCalculation() { return null; } + + @Override + public void loadLazyCollections() { + super.loadLazyCollections(); + this.chart.getId() ; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java index f28fe6a..6ff9c99 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java @@ -1213,5 +1213,6 @@ public class RecurringDepositAccount extends SavingsAccount { public void loadLazyCollections() { this.depositScheduleInstallments.size() ; super.loadLazyCollections(); + this.chart.getId() ; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java index af3d4d7..1f6ea3b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java @@ -44,15 +44,15 @@ public class RecurringDepositScheduleInstallment extends AbstractAuditableCustom private RecurringDepositAccount account; @Column(name = "installment", nullable = false) - private final Integer installmentNumber; + private Integer installmentNumber; @Temporal(TemporalType.DATE) @Column(name = "fromdate", nullable = true) - private final Date fromDate; + private Date fromDate; @Temporal(TemporalType.DATE) @Column(name = "duedate", nullable = false) - private final Date dueDate; + private Date dueDate; @Column(name = "deposit_amount", scale = 6, precision = 19, nullable = true) private BigDecimal depositAmount; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java index 3af57f5..bc97a67 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java @@ -76,6 +76,7 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.service.DateUtils; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.security.service.RandomPasswordGenerator; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; @@ -112,7 +113,6 @@ import org.apache.fineract.useradministration.domain.AppUser; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; -import org.springframework.data.jpa.domain.AbstractPersistable; import org.springframework.util.CollectionUtils; import com.google.gson.JsonArray; @@ -123,7 +123,7 @@ import com.google.gson.JsonArray; @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "deposit_type_enum", discriminatorType = DiscriminatorType.INTEGER) @DiscriminatorValue("100") -public class SavingsAccount extends AbstractPersistable<Long> { +public class SavingsAccount extends AbstractPersistableCustom<Long> { @Version int version; @@ -293,7 +293,7 @@ public class SavingsAccount extends AbstractPersistable<Long> { @OrderBy(value = "dateOf, createdDate, id") @OneToMany(cascade = CascadeType.ALL, mappedBy = "savingsAccount", orphanRemoval = true, fetch=FetchType.LAZY) - protected final List<SavingsAccountTransaction> transactions = new ArrayList<>(); + protected List<SavingsAccountTransaction> transactions = new ArrayList<>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "savingsAccount", orphanRemoval = true, fetch=FetchType.LAZY) protected Set<SavingsAccountCharge> charges = new HashSet<>(); @@ -2425,7 +2425,7 @@ public class SavingsAccount extends AbstractPersistable<Long> { } // add new charge to savings account - charges().add(savingsAccountCharge); + this.charges.add(savingsAccountCharge); } @@ -2573,7 +2573,7 @@ public class SavingsAccount extends AbstractPersistable<Long> { } public Set<SavingsAccountCharge> charges() { - return (this.charges == null) ? new HashSet<>() : this.charges; + return (this.charges == null) ? new HashSet<SavingsAccountCharge>() : this.charges; } public void validateAccountValuesWithProduct() {