diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java index 33d4c5741..2f987c039 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java @@ -18,17 +18,12 @@ */ package org.apache.fineract.organisation.monetary.domain; -import java.util.Collection; -import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.OneToMany; import javax.persistence.Table; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.office.domain.OrganisationCurrency; -import org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain; @Entity @Table(name = "m_currency") @@ -52,9 +47,6 @@ public class ApplicationCurrency extends AbstractPersistableCustom { @Column(name = "display_symbol", nullable = true, length = 10) private String displaySymbol; - @OneToMany(mappedBy = "currency", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) - private Collection collateralManagementData; - protected ApplicationCurrency() { this.code = null; this.name = null; @@ -103,10 +95,6 @@ public class ApplicationCurrency extends AbstractPersistableCustom { return this.displaySymbol; } - public Collection getCollateralManagementData() { - return this.collateralManagementData; - } - public CurrencyData toData() { return new CurrencyData(this.code, this.name, this.decimalPlaces, this.inMultiplesOf, this.displaySymbol, this.nameCode); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/service/LoanCollateralManagementReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/service/LoanCollateralManagementReadPlatformServiceImpl.java index 8c3ae4b05..88d2a7f19 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/service/LoanCollateralManagementReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/service/LoanCollateralManagementReadPlatformServiceImpl.java @@ -33,8 +33,10 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository; import org.apache.fineract.portfolio.loanaccount.exception.LoanNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service +@Transactional(readOnly = true) public class LoanCollateralManagementReadPlatformServiceImpl implements LoanCollateralManagementReadPlatformService { private final PlatformSecurityContext context; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index b0c5625ba..104ddea5e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java @@ -316,7 +316,7 @@ public class Loan extends AbstractPersistableCustom { @OneToMany(cascade = CascadeType.ALL, mappedBy = "loan", orphanRemoval = true, fetch = FetchType.LAZY) private Set collateral = null; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "loan", orphanRemoval = true, fetch = FetchType.EAGER) + @OneToMany(cascade = CascadeType.ALL, mappedBy = "loan", orphanRemoval = true, fetch = FetchType.LAZY) private Set loanCollateralManagements = new HashSet<>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "loan", orphanRemoval = true, fetch = FetchType.LAZY) diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java index f26ce0b69..e3f83e736 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java @@ -5610,6 +5610,31 @@ public class ClientLoanIntegrationTest { } + @Test + public void testCollateralDataIsAvailableWhenRequested() { + // given + this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec); + Integer collateralId = CollateralManagementHelper.createCollateralProduct(this.requestSpec, this.responseSpec); + List collaterals = new ArrayList<>(); + Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); + ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientId); + + Integer clientCollateralId = CollateralManagementHelper.createClientCollateral(this.requestSpec, this.responseSpec, + String.valueOf(clientId), collateralId); + addCollaterals(collaterals, clientCollateralId, BigDecimal.valueOf(1)); + + Integer loanProductId = createLoanProduct(false, NONE); + + // when + Integer loanId = applyForLoanApplication(clientId, loanProductId, null, null, "12,000.00", collaterals); + + // then + List clientCollateralIds = (List) loanTransactionHelper.getLoanDetail(this.requestSpec, this.responseSpec, loanId, + "collateral.clientCollateralId"); + Integer clientCollateralIdResult = clientCollateralIds.get(0); + assertEquals(clientCollateralId, clientCollateralIdResult); + } + private void validateIfValuesAreNotOverridden(Integer loanID, Integer loanProductID) { String loanProductDetails = this.loanTransactionHelper.getLoanProductDetails(this.requestSpec, this.responseSpec, loanProductID); String loanDetails = this.loanTransactionHelper.getLoanDetails(this.requestSpec, this.responseSpec, loanID);