Package org.fenixedu.academic.domain.accounting.serviceAgreementTemplates

Source Code of org.fenixedu.academic.domain.accounting.serviceAgreementTemplates.DegreeCurricularPlanServiceAgreementTemplate

/**
* Copyright © 2002 Instituto Superior Técnico
*
* This file is part of FenixEdu Academic.
*
* FenixEdu Academic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FenixEdu Academic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with FenixEdu Academic.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.fenixedu.academic.domain.accounting.serviceAgreementTemplates;

import java.util.ArrayList;
import java.util.List;

import org.fenixedu.academic.domain.DegreeCurricularPlan;
import org.fenixedu.academic.domain.ExecutionYear;
import org.fenixedu.academic.domain.StudentCurricularPlan;
import org.fenixedu.academic.domain.accounting.PaymentPlan;
import org.fenixedu.academic.domain.accounting.ServiceAgreementTemplate;
import org.fenixedu.academic.domain.accounting.ServiceAgreementTemplatePaymentPlan;
import org.fenixedu.academic.domain.accounting.paymentPlans.FullGratuityPaymentPlan;
import org.fenixedu.academic.domain.accounting.paymentPlans.GratuityPaymentPlan;
import org.fenixedu.academic.domain.accounting.paymentPlans.GratuityPaymentPlanForStudentsEnroledOnlyInSecondSemester;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.bennu.core.domain.Bennu;

public class DegreeCurricularPlanServiceAgreementTemplate extends DegreeCurricularPlanServiceAgreementTemplate_Base {

    private DegreeCurricularPlanServiceAgreementTemplate() {
        super();
    }

    public DegreeCurricularPlanServiceAgreementTemplate(DegreeCurricularPlan degreeCurricularPlan) {
        this();
        init(degreeCurricularPlan);
    }

    private void checkParameters(DegreeCurricularPlan degreeCurricularPlan) {
        if (degreeCurricularPlan == null) {
            throw new DomainException(
                    "error.accounting.agreement.serviceAgreementTemplates.DegreeCurricularPlanServiceAgreementTemplate.degreeCurricularPlan.cannot.be.null");
        }

    }

    protected void init(DegreeCurricularPlan degreeCurricularPlan) {
        checkParameters(degreeCurricularPlan);
        checkRulesToCreate(degreeCurricularPlan);
        super.setDegreeCurricularPlan(degreeCurricularPlan);
    }

    private void checkRulesToCreate(DegreeCurricularPlan degreeCurricularPlan) {
        if (readByDegreeCurricularPlan(degreeCurricularPlan) != null) {
            throw new DomainException(
                    "error.net.sourceforge.fenixedu.domain.accounting.serviceAgreementTemplates.DegreeCurricularPlanServiceAgreementTemplate.degree.curricular.plan.already.has.template.defined");
        }

    }

    @Override
    public void setDegreeCurricularPlan(DegreeCurricularPlan degreeCurricularPlan) {
        throw new DomainException(
                "error.accounting.agreement.serviceAgreementTemplates.DegreeCurricularPlanServiceAgreementTemplate.cannot.modify.degreeCurricularPlan");
    }

    public GratuityPaymentPlan getGratuityPaymentPlanFor(final StudentCurricularPlan studentCurricularPlan,
            final ExecutionYear executionYear) {
        GratuityPaymentPlan result = null;
        for (final PaymentPlan paymentPlan : getPaymentPlansSet()) {
            if (paymentPlan instanceof GratuityPaymentPlan
                    && ((GratuityPaymentPlan) paymentPlan).isAppliableFor(studentCurricularPlan, executionYear)) {
                GratuityPaymentPlan gratuityPaymentPlan = (GratuityPaymentPlan) paymentPlan;

                if (result == null) {
                    result = (GratuityPaymentPlan) paymentPlan;
                } else {
                    if (gratuityPaymentPlan.hasPrecedenceOver(result.getClass())) {
                        result = gratuityPaymentPlan;
                    } else if (!result.hasPrecedenceOver(gratuityPaymentPlan.getClass())) {
                        // Incompatible payment plans
                        throw new DomainException(
                                "error.net.sourceforge.fenixedu.domain.accounting.serviceAgreementTemplates.DegreeCurricularPlanServiceAgreementTemplate.more.than.one.gratuity.payment.plan.is.appliable");
                    }
                }
            }
        }

        return result == null ? getDefaultPaymentPlan(executionYear) : result;
    }

    public List<GratuityPaymentPlan> getGratuityPaymentPlans() {
        final List<GratuityPaymentPlan> result = new ArrayList<GratuityPaymentPlan>();
        for (final PaymentPlan paymentPlan : getPaymentPlansSet()) {
            if (paymentPlan instanceof GratuityPaymentPlan) {
                result.add((GratuityPaymentPlan) paymentPlan);
            }
        }

        return result;
    }

    @Override
    public GratuityPaymentPlan getDefaultPaymentPlan(ExecutionYear executionYear) {
        return (GratuityPaymentPlan) super.getDefaultPaymentPlan(executionYear);
    }

    public boolean hasFullGratuityPaymentPlanFor(final ExecutionYear executionYear) {
        for (final PaymentPlan paymentPlan : getPaymentPlansSet()) {
            if (paymentPlan instanceof FullGratuityPaymentPlan && paymentPlan.getExecutionYear() == executionYear) {
                return true;
            }
        }
        return false;
    }

    public boolean hasGratuityPaymentPlanForStudentsEnroledOnlyInSecondSemesterBy(final ExecutionYear executionYear) {
        for (final PaymentPlan paymentPlan : getPaymentPlansSet()) {
            if (paymentPlan instanceof GratuityPaymentPlanForStudentsEnroledOnlyInSecondSemester
                    && paymentPlan.getExecutionYear() == executionYear) {
                return true;
            }
        }
        return false;
    }

    public static DegreeCurricularPlanServiceAgreementTemplate readByDegreeCurricularPlan(
            final DegreeCurricularPlan degreeCurricularPlan) {
        for (final ServiceAgreementTemplate serviceAgreementTemplate : Bennu.getInstance().getServiceAgreementTemplatesSet()) {

            if (serviceAgreementTemplate instanceof DegreeCurricularPlanServiceAgreementTemplate) {
                final DegreeCurricularPlanServiceAgreementTemplate degreeCurricularPlanServiceAgreementTemplate =
                        (DegreeCurricularPlanServiceAgreementTemplate) serviceAgreementTemplate;

                if (degreeCurricularPlanServiceAgreementTemplate.getDegreeCurricularPlan() == degreeCurricularPlan) {
                    return degreeCurricularPlanServiceAgreementTemplate;
                }
            }
        }

        return null;
    }

    public List<GratuityPaymentPlan> getGratuityPaymentPlansFor(final ExecutionYear executionYear) {
        final List<GratuityPaymentPlan> result = new ArrayList<GratuityPaymentPlan>();

        for (final ServiceAgreementTemplatePaymentPlan paymentPlan : getPaymentPlansSet()) {
            if (paymentPlan instanceof GratuityPaymentPlan && paymentPlan.isFor(executionYear)) {
                result.add((GratuityPaymentPlan) paymentPlan);
            }
        }

        return result;
    }

}
TOP

Related Classes of org.fenixedu.academic.domain.accounting.serviceAgreementTemplates.DegreeCurricularPlanServiceAgreementTemplate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.