blob: 2deaeca3f19bd210e3ff032b21dd0678956795f4 [file] [log] [blame]
/**
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.mifosplatform.portfolio.savings.domain;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.mifosplatform.portfolio.interestratechart.domain.InterestIncentives;
import org.mifosplatform.portfolio.interestratechart.domain.InterestRateChartSlab;
import org.mifosplatform.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> {
@Embedded
private InterestRateChartSlabFields slabFields;
@ManyToOne(optional = false)
@JoinColumn(name = "savings_account_interest_rate_chart_id", referencedColumnName = "id", nullable = false)
private DepositAccountInterestRateChart depositAccountInterestRateChart;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "depositAccountInterestRateChartSlabs", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<DepositAccountInterestIncentives> interestIncentives = new HashSet<>();
protected DepositAccountInterestRateChartSlabs() {
//
}
private DepositAccountInterestRateChartSlabs(InterestRateChartSlabFields slabFields,
DepositAccountInterestRateChart depositAccountInterestRateChart, final Set<DepositAccountInterestIncentives> interestIncentives) {
this.slabFields = slabFields;
this.depositAccountInterestRateChart = depositAccountInterestRateChart;
this.interestIncentives = interestIncentives;
}
public void setDepositAccountInterestRateChart(DepositAccountInterestRateChart depositAccountInterestRateChart) {
this.depositAccountInterestRateChart = depositAccountInterestRateChart;
}
public Long savingsProductId() {
return this.depositAccountInterestRateChart.savingsAccountId();
}
public InterestRateChartSlabFields slabFields() {
return this.slabFields;
}
public static DepositAccountInterestRateChartSlabs from(InterestRateChartSlab interestRateChartSlab,
DepositAccountInterestRateChart depositAccountInterestRateChart) {
InterestRateChartSlabFields slabFields = interestRateChartSlab.slabFields();
Set<DepositAccountInterestIncentives> depositInterestIncentives = new HashSet<>();
Set<InterestIncentives> incentives = interestRateChartSlab.setOfInterestIncentives();
for (InterestIncentives incentive : incentives) {
depositInterestIncentives.add(DepositAccountInterestIncentives.from(null, incentive.interestIncentivesFields()));
}
DepositAccountInterestRateChartSlabs chartSlabs = new DepositAccountInterestRateChartSlabs(slabFields,
depositAccountInterestRateChart, depositInterestIncentives);
chartSlabs.updateIncentiveReference();
return chartSlabs;
}
private void updateIncentiveReference() {
final Set<DepositAccountInterestIncentives> incentives = setOfIncentives();
for (DepositAccountInterestIncentives depositInterestIncentives : incentives) {
depositInterestIncentives.updateDepositAccountInterestRateChartSlabs(this);
}
}
public Set<DepositAccountInterestIncentives> setOfIncentives() {
if (this.interestIncentives == null) {
this.interestIncentives = new HashSet<>();
}
return this.interestIncentives;
}
public void updateChartReference(final DepositAccountInterestRateChart chart) {
this.depositAccountInterestRateChart = chart;
}
}