/** * 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.organisation.provisioning.domain; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import org.mifosplatform.accounting.glaccount.domain.GLAccount; import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_provisioning_criteria_definition") public class ProvisioningCriteriaDefinition extends AbstractPersistable<Long> { @ManyToOne(optional = false) @JoinColumn(name = "criteria_id", referencedColumnName = "id", nullable = false) private ProvisioningCriteria criteria; @ManyToOne @JoinColumn(name = "category_id", nullable = false) private ProvisioningCategory provisioningCategory; @Column(name = "min_age", nullable = false) private Long minimumAge; @Column(name = "max_age", nullable = false) private Long maximumAge; @Column(name = "provision_percentage", nullable = false) private BigDecimal provisioningPercentage; @ManyToOne @JoinColumn(name = "liability_account", nullable = false) private GLAccount liabilityAccount; @ManyToOne @JoinColumn(name = "expense_account", nullable = false) private GLAccount expenseAccount; protected ProvisioningCriteriaDefinition() { } private ProvisioningCriteriaDefinition(ProvisioningCriteria criteria, ProvisioningCategory provisioningCategory, Long minimumAge, Long maximumAge, BigDecimal provisioningPercentage, GLAccount liabilityAccount, GLAccount expenseAccount) { this.criteria = criteria; this.provisioningCategory = provisioningCategory; this.minimumAge = minimumAge; this.maximumAge = maximumAge; this.provisioningPercentage = provisioningPercentage; this.liabilityAccount = liabilityAccount; this.expenseAccount = expenseAccount; } public static ProvisioningCriteriaDefinition newPrivisioningCriteria(ProvisioningCriteria criteria, ProvisioningCategory provisioningCategory, Long minimumAge, Long maximumAge, BigDecimal provisioningPercentage, GLAccount liabilityAccount, GLAccount expenseAccount) { return new ProvisioningCriteriaDefinition(criteria, provisioningCategory, minimumAge, maximumAge, provisioningPercentage, liabilityAccount, expenseAccount); } public void update(Long minAge, Long maxAge, BigDecimal percentage, GLAccount lia, GLAccount exp) { this.minimumAge = minAge ; this.maximumAge = maxAge ; this.provisioningPercentage = percentage ; this.liabilityAccount = lia ; this.expenseAccount = exp ; } public boolean isOverlapping(ProvisioningCriteriaDefinition def) { return this.minimumAge <= def.maximumAge && def.minimumAge <= this.maximumAge; } }