Package org.fenixedu.academic.domain.student

Source Code of org.fenixedu.academic.domain.student.AffinityCyclesManagement

/**
* 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.student;

import org.fenixedu.academic.domain.StudentCurricularPlan;
import org.fenixedu.academic.domain.degreeStructure.CycleCourseGroup;
import org.fenixedu.academic.domain.studentCurriculum.CycleCurriculumGroup;

import pt.ist.fenixframework.Atomic;

public class AffinityCyclesManagement {
    private StudentCurricularPlan studentCurricularPlan;

    public AffinityCyclesManagement(final StudentCurricularPlan studentCurricularPlan) {
        this.studentCurricularPlan = studentCurricularPlan;
    }

    private StudentCurricularPlan getStudentCurricularPlan() {
        return this.studentCurricularPlan;
    }

    public Registration enrol(final CycleCourseGroup cycleCourseGroup) {
        return separateSecondCycle();
    }

    protected Registration separateSecondCycle() {
        return new SeparationCyclesManagement().separateSecondCycle(getStudentCurricularPlan());
    }

    @Atomic
    public void createCycleOrRepeateSeparate() {

        if (studentCurricularPlan.isActive() && canSeparate()) {

            if (studentAlreadyHasNewRegistration() && canRepeateSeparate()) {
                // Repeating separate
                new SeparationCyclesManagement().createNewSecondCycle(studentCurricularPlan);
            } else {
                // Separating student
                new SeparationCyclesManagement().separateSecondCycle(studentCurricularPlan);
            }

        } else if (studentCurricularPlan.hasRegistration() && getRegistration().isConcluded() && canRepeateSeparate()) {
            new SeparationCyclesManagement().createNewSecondCycle(studentCurricularPlan);
        }
    }

    private Registration getRegistration() {
        return studentCurricularPlan.getRegistration();
    }

    private boolean canSeparate() {
        return hasFirstCycleConcluded() && hasExternalSecondCycle();
    }

    private boolean hasFirstCycleConcluded() {
        final CycleCurriculumGroup firstCycle = studentCurricularPlan.getFirstCycle();
        return firstCycle != null && firstCycle.isConcluded();
    }

    private boolean hasExternalSecondCycle() {
        final CycleCurriculumGroup secondCycle = studentCurricularPlan.getSecondCycle();
        return secondCycle != null && secondCycle.isExternal() && secondCycle.hasAnyCurriculumLines();
    }

    private boolean studentAlreadyHasNewRegistration() {
        final Student student = getRegistration().getStudent();
        return student.hasRegistrationFor(studentCurricularPlan.getSecondCycle().getDegreeCurricularPlanOfDegreeModule());
    }

    private boolean canRepeateSeparate() {
        return hasFirstCycleConcluded() && hasExternalSecondCycleAndNewRegistration();
    }

    private boolean hasExternalSecondCycleAndNewRegistration() {
        final CycleCurriculumGroup secondCycle = studentCurricularPlan.getSecondCycle();
        if (secondCycle != null && secondCycle.isExternal() && secondCycle.hasAnyCurriculumLines()) {
            final Student student = getRegistration().getStudent();
            return student.hasActiveRegistrationFor(secondCycle.getDegreeCurricularPlanOfDegreeModule());
        }
        return false;
    }

}
TOP

Related Classes of org.fenixedu.academic.domain.student.AffinityCyclesManagement

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.