Package org.fenixedu.academic.domain.candidacyProcess

Source Code of org.fenixedu.academic.domain.candidacyProcess.PrecedentDegreeInformationForIndividualCandidacyFactory

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

import org.fenixedu.academic.domain.StudentCurricularPlan;
import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityIndividualApplication;
import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityIndividualApplicationProcess;
import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityIndividualApplicationProcessBean;
import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityStudentDataBean;
import org.fenixedu.academic.domain.candidacyProcess.over23.Over23IndividualCandidacyProcessBean;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.domain.organizationalStructure.Unit;
import org.fenixedu.academic.domain.student.PrecedentDegreeInformation;
import org.fenixedu.academic.dto.candidacy.PrecedentDegreeInformationBean;

public class PrecedentDegreeInformationForIndividualCandidacyFactory {

    /* CREATE */

    public static PrecedentDegreeInformation create(final IndividualCandidacy individualCandidacy,
            final IndividualCandidacyProcessBean processBean) {

        if (processBean.isStandalone()) {
            return null;
        }

        PrecedentDegreeInformation pid = null;
        if (processBean.isDegreeChange() || processBean.isDegreeTransfer()) {
            pid = createForDegreeTransferOrDegreeChange(processBean);
        } else if (processBean.isSecondCycle() || processBean.isDegreeCandidacyForGraduatedPerson()) {
            pid = createForSecondCycleOrDegreeCandidacyForGraduatedPerson(processBean);
        } else if (processBean.isOver23()) {
            pid = createForOver23(processBean);
        } else if (processBean.isErasmus()) {
            pid = createForErasmus(processBean);
        }

        pid.setIndividualCandidacy(individualCandidacy);

        return pid;
    }

    private static PrecedentDegreeInformation createForErasmus(final IndividualCandidacyProcessBean processBean) {
        MobilityIndividualApplicationProcessBean erasmusBean = (MobilityIndividualApplicationProcessBean) processBean;
        MobilityStudentDataBean erasmusStudentDataBean = erasmusBean.getMobilityStudentDataBean();

        PrecedentDegreeInformation pdi = new PrecedentDegreeInformation();
        pdi.setCandidacyInternal(false);

        pdi.setPrecedentCountry(erasmusStudentDataBean.getSelectedCountry());
        pdi.setPrecedentInstitution(erasmusStudentDataBean.getSelectedUniversity());
        pdi.setPrecedentSchoolLevel(erasmusStudentDataBean.getCurrentSchoolLevel());
        pdi.setOtherPrecedentSchoolLevel(erasmusStudentDataBean.getCurrentOtherSchoolLevel());
        pdi.setCountryHighSchool(erasmusStudentDataBean.getCountryWhereFinishedHighSchoolLevel());

        if (erasmusStudentDataBean.getHasDiplomaOrDegree()) {
            pdi.setDegreeDesignation(erasmusStudentDataBean.getDiplomaName());
            pdi.setConclusionYear(erasmusStudentDataBean.getDiplomaConclusionYear());
        }

        return pdi;
    }

    private static PrecedentDegreeInformation createForOver23(IndividualCandidacyProcessBean processBean) {
        Over23IndividualCandidacyProcessBean over23Bean = (Over23IndividualCandidacyProcessBean) processBean;

        if (!over23Bean.getFormationConcludedBeanList().isEmpty()) {
            PrecedentDegreeInformation pid = new PrecedentDegreeInformation();
            pid.setCandidacyInternal(false);
            FormationBean formationBean = over23Bean.getFormationConcludedBeanList().iterator().next();

            pid.setDegreeDesignation(formationBean.getDesignation());
            pid.setInstitution(getOrCreateInstitution(formationBean.getInstitutionName()));
            pid.setConclusionYear(formationBean.getConclusionExecutionYear().getEndCivilYear());

            return pid;
        } else if (!over23Bean.getFormationNonConcludedBeanList().isEmpty()) {
            PrecedentDegreeInformation pdi = new PrecedentDegreeInformation();
            pdi.setCandidacyInternal(false);
            FormationBean formationBean = over23Bean.getFormationNonConcludedBeanList().iterator().next();

            pdi.setDegreeDesignation(formationBean.getDesignation());
            pdi.setInstitution(getOrCreateInstitution(formationBean.getInstitutionName()));

            return pdi;
        }

        return null;
    }

    private static PrecedentDegreeInformation createForDegreeTransferOrDegreeChange(IndividualCandidacyProcessBean processBean) {
        IndividualCandidacyProcessWithPrecedentDegreeInformationBean candidacyProcessWithPDIBean =
                (IndividualCandidacyProcessWithPrecedentDegreeInformationBean) processBean;
        PrecedentDegreeInformationBean bean = candidacyProcessWithPDIBean.getPrecedentDegreeInformation();

        PrecedentDegreeInformation pdi = new PrecedentDegreeInformation();
        pdi.setPrecedentDegreeDesignation(bean.getDegreeDesignation());
        pdi.setNumberOfEnroledCurricularCourses(bean.getNumberOfEnroledCurricularCourses());
        pdi.setNumberOfApprovedCurricularCourses(bean.getNumberOfApprovedCurricularCourses());
        pdi.setGradeSum(bean.getGradeSum());
        pdi.setApprovedEcts(bean.getApprovedEcts());
        pdi.setEnroledEcts(bean.getEnroledEcts());

        if (candidacyProcessWithPDIBean.isExternalPrecedentDegreeType()) {
            pdi.setPrecedentInstitution(getOrCreateInstitution(bean));
            pdi.setNumberOfEnrolmentsInPreviousDegrees(candidacyProcessWithPDIBean
                    .getNumberOfPreviousYearEnrolmentsInPrecedentDegree());
            pdi.setCandidacyInternal(false);
        } else {
            pdi.setCandidacyInternal(true);
            final StudentCurricularPlan studentCurricularPlan = candidacyProcessWithPDIBean.getPrecedentStudentCurricularPlan();

            if (studentCurricularPlan == null) {
                throw new DomainException("error.IndividualCandidacy.invalid.precedentDegreeInformation");
            }

            pdi.setStudentCurricularPlan(studentCurricularPlan);
        }

        return pdi;
    }

    private static PrecedentDegreeInformation createForSecondCycleOrDegreeCandidacyForGraduatedPerson(
            IndividualCandidacyProcessBean processBean) {
        IndividualCandidacyProcessWithPrecedentDegreeInformationBean candidacyProcessWithPrecedentDegreeInformationBean =
                (IndividualCandidacyProcessWithPrecedentDegreeInformationBean) processBean;

        PrecedentDegreeInformationBean bean = candidacyProcessWithPrecedentDegreeInformationBean.getPrecedentDegreeInformation();

        PrecedentDegreeInformation pdi = new PrecedentDegreeInformation();
        pdi.setCandidacyInternal(false);
        pdi.setDegreeDesignation(bean.getDegreeDesignation());
        pdi.setInstitution(getOrCreateInstitution(bean));
        pdi.setCountry(bean.getCountry());
        pdi.setConclusionDate(bean.getConclusionDate());

        if (bean.getConclusionDate() != null) {
            pdi.setConclusionYear(bean.getConclusionDate().getYear());
        }

        pdi.setConclusionGrade(bean.getConclusionGrade());

        return pdi;
    }

    private static Unit getOrCreateInstitution(final PrecedentDegreeInformationBean bean) {
        if (bean.getInstitution() != null) {
            return bean.getInstitution();
        }
        return getOrCreateInstitution(bean.getInstitutionName());
    }

    private static Unit getOrCreateInstitution(final String institutionName) {
        if (institutionName == null || institutionName.isEmpty()) {
            throw new DomainException("error.ExternalPrecedentDegreeCandidacy.invalid.institution.name");
        }

        final Unit unit = Unit.findFirstExternalUnitByName(institutionName);
        return (unit != null) ? unit : Unit.createNewNoOfficialExternalInstitution(institutionName);
    }

    /* EDIT */

    public static final void edit(final IndividualCandidacyProcessBean processBean) {
        if (processBean.isDegreeChange() || processBean.isDegreeTransfer()) {
            editForDegreeTransferOrDegreeChange(processBean);
        } else if (processBean.isSecondCycle() || processBean.isDegreeCandidacyForGraduatedPerson()) {
            editForSecondCycleOrDegreeCandidacyForGraduatedPerson(processBean);
        } else if (processBean.isOver23()) {
            editForOver23(processBean);
        } else if (processBean.isErasmus()) {
            editForErasmus(processBean);
        }
    }

    private static void editForErasmus(IndividualCandidacyProcessBean processBean) {
        MobilityIndividualApplicationProcessBean bean = (MobilityIndividualApplicationProcessBean) processBean;
        MobilityStudentDataBean erasmusStudentDataBean = bean.getMobilityStudentDataBean();

        MobilityIndividualApplicationProcess erasmusIndividualCandidacyProcess =
                (MobilityIndividualApplicationProcess) processBean.getIndividualCandidacyProcess();
        MobilityIndividualApplication erasmusCandidacy = erasmusIndividualCandidacyProcess.getCandidacy();

        PrecedentDegreeInformation pid = erasmusCandidacy.getRefactoredPrecedentDegreeInformation();

        pid.setPrecedentCountry(erasmusStudentDataBean.getSelectedCountry());
        pid.setPrecedentInstitution(erasmusStudentDataBean.getSelectedUniversity());
        pid.setPrecedentSchoolLevel(erasmusStudentDataBean.getCurrentSchoolLevel());
        pid.setOtherPrecedentSchoolLevel(erasmusStudentDataBean.getCurrentOtherSchoolLevel());
        pid.setCountryHighSchool(erasmusStudentDataBean.getCountryWhereFinishedHighSchoolLevel());

        if (erasmusStudentDataBean.getHasDiplomaOrDegree()) {
            pid.setDegreeDesignation(erasmusStudentDataBean.getDiplomaName());
            pid.setConclusionYear(erasmusStudentDataBean.getDiplomaConclusionYear());
        }
    }

    private static void editForOver23(IndividualCandidacyProcessBean processBean) {
        Over23IndividualCandidacyProcessBean over23Bean = (Over23IndividualCandidacyProcessBean) processBean;

        IndividualCandidacyProcess individualCandidacyProcess = processBean.getIndividualCandidacyProcess();
        IndividualCandidacy candidacy = individualCandidacyProcess.getCandidacy();
        PrecedentDegreeInformation pid = candidacy.getRefactoredPrecedentDegreeInformation();

        if (!over23Bean.getFormationConcludedBeanList().isEmpty()) {
            FormationBean formationBean = over23Bean.getFormationConcludedBeanList().iterator().next();

            pid.setDegreeDesignation(formationBean.getDesignation());
            pid.setInstitution(getOrCreateInstitution(formationBean.getInstitutionName()));
            pid.setConclusionYear(formationBean.getConclusionExecutionYear().getEndCivilYear());
        } else if (over23Bean.getFormationNonConcludedBeanList().isEmpty()) {
            FormationBean formationBean = over23Bean.getFormationNonConcludedBeanList().iterator().next();

            pid.setDegreeDesignation(formationBean.getDesignation());
            pid.setInstitution(getOrCreateInstitution(formationBean.getInstitutionName()));
        }

    }

    private static void editForSecondCycleOrDegreeCandidacyForGraduatedPerson(IndividualCandidacyProcessBean processBean) {
        IndividualCandidacyProcessWithPrecedentDegreeInformationBean candidacyProcessWithPrecedentDegreeInformationBean =
                (IndividualCandidacyProcessWithPrecedentDegreeInformationBean) processBean;
        IndividualCandidacyProcess individualCandidacyProcess = processBean.getIndividualCandidacyProcess();
        IndividualCandidacy candidacy = individualCandidacyProcess.getCandidacy();
        PrecedentDegreeInformation pid = candidacy.getRefactoredPrecedentDegreeInformation();

        PrecedentDegreeInformationBean bean = candidacyProcessWithPrecedentDegreeInformationBean.getPrecedentDegreeInformation();

        pid.setDegreeDesignation(bean.getDegreeDesignation());
        pid.setInstitution(getOrCreateInstitution(bean));
        pid.setCountry(bean.getCountry());
        pid.setConclusionDate(bean.getConclusionDate());

        if (bean.getConclusionDate() != null) {
            pid.setConclusionYear(bean.getConclusionDate().getYear());
        }

        pid.setConclusionGrade(bean.getConclusionGrade());

    }

    private static void editForDegreeTransferOrDegreeChange(IndividualCandidacyProcessBean processBean) {
        IndividualCandidacyProcessWithPrecedentDegreeInformationBean candidacyProcessWithPrecedentDegreeInformationBean =
                (IndividualCandidacyProcessWithPrecedentDegreeInformationBean) processBean;
        PrecedentDegreeInformationBean bean = candidacyProcessWithPrecedentDegreeInformationBean.getPrecedentDegreeInformation();

        IndividualCandidacyProcess individualCandidacyProcess = processBean.getIndividualCandidacyProcess();
        IndividualCandidacy candidacy = individualCandidacyProcess.getCandidacy();
        PrecedentDegreeInformation pid = candidacy.getRefactoredPrecedentDegreeInformation();

        pid.setPrecedentDegreeDesignation(bean.getDegreeDesignation());
        pid.setPrecedentInstitution(getOrCreateInstitution(bean));
        pid.setNumberOfEnroledCurricularCourses(bean.getNumberOfEnroledCurricularCourses());
        pid.setNumberOfApprovedCurricularCourses(bean.getNumberOfApprovedCurricularCourses());
        pid.setGradeSum(bean.getGradeSum());
        pid.setApprovedEcts(bean.getApprovedEcts());
        pid.setEnroledEcts(bean.getEnroledEcts());
    }

}
TOP

Related Classes of org.fenixedu.academic.domain.candidacyProcess.PrecedentDegreeInformationForIndividualCandidacyFactory

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.