/**
* 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.candidacy;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Formatter;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.fenixedu.academic.domain.Country;
import org.fenixedu.academic.domain.DistrictSubdivision;
import org.fenixedu.academic.domain.ExecutionYear;
import org.fenixedu.academic.domain.File;
import org.fenixedu.academic.domain.GrantOwnerType;
import org.fenixedu.academic.domain.ProfessionType;
import org.fenixedu.academic.domain.ProfessionalSituationConditionType;
import org.fenixedu.academic.domain.SchoolLevelType;
import org.fenixedu.academic.domain.SchoolPeriodDuration;
import org.fenixedu.academic.domain.organizationalStructure.AcademicalInstitutionType;
import org.fenixedu.academic.domain.organizationalStructure.Unit;
import org.fenixedu.academic.domain.organizationalStructure.UnitName;
import org.fenixedu.academic.domain.person.MaritalStatus;
import org.fenixedu.academic.domain.phd.PhdIndividualProgramProcess;
import org.fenixedu.academic.domain.raides.DegreeDesignation;
import org.fenixedu.academic.domain.student.PersonalIngressionData;
import org.fenixedu.academic.domain.student.PrecedentDegreeInformation;
import org.fenixedu.academic.domain.student.Registration;
import org.fenixedu.academic.domain.student.Student;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import pt.ist.fenixframework.Atomic;
public class PersonalInformationBean implements Serializable {
static private final LocalDate limitDate = new LocalDate(2014, 12, 16);
static public boolean isPastLimitDate() {
return new LocalDate().isAfter(limitDate);
}
static public Comparator<PersonalInformationBean> COMPARATOR_BY_DESCRIPTION = new Comparator<PersonalInformationBean>() {
@Override
public int compare(PersonalInformationBean o1, PersonalInformationBean o2) {
return o1.getDescription().compareTo(o2.getDescription());
}
};
static private final long serialVersionUID = 1144682974757187722L;
private PhdIndividualProgramProcess phdIndividualProgramProcess;
private Registration registration;
private Country countryOfResidence;
private DistrictSubdivision districtSubdivisionOfResidence;
private Boolean dislocatedFromPermanentResidence;
private DistrictSubdivision schoolTimeDistrictSubdivisionOfResidence;
private GrantOwnerType grantOwnerType;
private Unit grantOwnerProvider;
private String grantOwnerProviderName;
private AcademicalInstitutionType highSchoolType;
private MaritalStatus maritalStatus;
private ProfessionType professionType;
private ProfessionalSituationConditionType professionalCondition;
private SchoolLevelType motherSchoolLevel;
private ProfessionType motherProfessionType;
private ProfessionalSituationConditionType motherProfessionalCondition;
private SchoolLevelType fatherSchoolLevel;
private ProfessionType fatherProfessionType;
private ProfessionalSituationConditionType fatherProfessionalCondition;
private String conclusionGrade;
private Integer conclusionYear;
private Integer numberOfEnroledCurricularCourses;
private Unit institution;
private String institutionName;
private String degreeDesignation;
private DegreeDesignation raidesDegreeDesignation;
private Country countryWhereFinishedPreviousCompleteDegree;
private Country countryWhereFinishedHighSchoolLevel;
private SchoolLevelType schoolLevel;
private String otherSchoolLevel;
private DateTime lastModifiedDate;
private boolean degreeChangeOrTransferOrErasmusStudent = false;
private SchoolLevelType precedentSchoolLevel;
private String otherPrecedentSchoolLevel;
private Unit precedentInstitution;
private String precedentInstitutionName;
private String precedentDegreeDesignation;
private DegreeDesignation precedentDegreeDesignationObject;
private Integer numberOfPreviousYearEnrolmentsInPrecedentDegree;
private SchoolPeriodDuration mobilityProgramDuration;
private final Collection<File> documentFiles = new ArrayList<File>();
public PersonalInformationBean(Registration registration) {
setRegistration(registration);
initFromLatestPersonalIngressionData();
}
public PersonalInformationBean(PhdIndividualProgramProcess PhdProcess) {
setPhdIndividualProgramProcess(PhdProcess);
initFromLatestPersonalIngressionData();
}
public PersonalInformationBean(PrecedentDegreeInformation degreeInfo) {
if (degreeInfo.getPhdIndividualProgramProcess() != null) {
setPhdIndividualProgramProcess(degreeInfo.getPhdIndividualProgramProcess());
} else {
setRegistration(degreeInfo.getRegistration());
}
setSchoolLevel(degreeInfo.getSchoolLevel());
setOtherSchoolLevel(degreeInfo.getOtherSchoolLevel());
setConclusionGrade(degreeInfo.getConclusionGrade());
setConclusionYear(degreeInfo.getConclusionYear());
setCountryWhereFinishedPreviousCompleteDegree(degreeInfo.getCountry());
setCountryWhereFinishedHighSchoolLevel(degreeInfo.getCountryHighSchool());
Unit institution = degreeInfo.getInstitution();
if (!isUnitFromRaidesListMandatory() || (institution != null && !StringUtils.isEmpty(institution.getCode()))) {
setInstitution(institution);
setDegreeDesignation(degreeInfo.getDegreeDesignation());
}
setPrecedentDegreeDesignation(degreeInfo.getPrecedentDegreeDesignation());
setPrecedentInstitution(degreeInfo.getPrecedentInstitution());
setPrecedentSchoolLevel(degreeInfo.getPrecedentSchoolLevel());
setOtherPrecedentSchoolLevel(degreeInfo.getOtherPrecedentSchoolLevel());
setNumberOfPreviousYearEnrolmentsInPrecedentDegree(degreeInfo.getNumberOfEnrolmentsInPreviousDegrees());
setNumberOfEnroledCurricularCourses(degreeInfo.getNumberOfEnroledCurricularCourses());
setMobilityProgramDuration(degreeInfo.getMobilityProgramDuration());
if (getPrecedentDegreeDesignation() != null || getPrecedentInstitution() != null || getPrecedentSchoolLevel() != null
|| getNumberOfPreviousYearEnrolmentsInPrecedentDegree() != null) {
setDegreeChangeOrTransferOrErasmusStudent(true);
}
if (isUnitFromRaidesListMandatory()) {
setRaidesDegreeDesignation(DegreeDesignation.readByNameAndSchoolLevel(degreeDesignation, schoolLevel));
}
initFromLatestPersonalIngressionData();
}
public PersonalInformationBean() {
}
private void initFromLatestPersonalIngressionData() {
PersonalIngressionData personalData = getStudent().getLatestPersonalIngressionData();
if (personalData == null) {
return;
}
setCountryOfResidence(personalData.getCountryOfResidence());
setDistrictSubdivisionOfResidence(personalData.getDistrictSubdivisionOfResidence());
setSchoolTimeDistrictSubdivisionOfResidence(personalData.getSchoolTimeDistrictSubDivisionOfResidence());
setDislocatedFromPermanentResidence(personalData.getDislocatedFromPermanentResidence());
setGrantOwnerType(personalData.getGrantOwnerType());
setGrantOwnerProvider(personalData.getGrantOwnerProvider());
setHighSchoolType(personalData.getHighSchoolType());
setMaritalStatus(personalData.getMaritalStatus());
setProfessionType(personalData.getProfessionType());
setProfessionalCondition(personalData.getProfessionalCondition());
setMotherSchoolLevel(personalData.getMotherSchoolLevel());
setMotherProfessionType(personalData.getMotherProfessionType());
setMotherProfessionalCondition(personalData.getMotherProfessionalCondition());
setFatherSchoolLevel(personalData.getFatherSchoolLevel());
setFatherProfessionType(personalData.getFatherProfessionType());
setFatherProfessionalCondition(personalData.getFatherProfessionalCondition());
setLastModifiedDate(personalData.getLastModifiedDate());
}
public LocalDate getLimitDate() {
return limitDate;
}
public Integer getNumberOfEnroledCurricularCourses() {
return numberOfEnroledCurricularCourses;
}
public void setNumberOfEnroledCurricularCourses(Integer numberOfEnroledCurricularCourses) {
this.numberOfEnroledCurricularCourses = numberOfEnroledCurricularCourses;
}
public Registration getRegistration() {
return this.registration;
}
public void setRegistration(Registration registration) {
this.registration = registration;
}
public boolean hasRegistration() {
return getRegistration() != null;
}
public PhdIndividualProgramProcess getPhdIndividualProgramProcess() {
return phdIndividualProgramProcess;
}
public void setPhdIndividualProgramProcess(PhdIndividualProgramProcess phdIndividualProgramProcess) {
this.phdIndividualProgramProcess = phdIndividualProgramProcess;
}
public boolean hasPhdIndividualProgramProcess() {
return getPhdIndividualProgramProcess() != null;
}
public Country getCountryOfResidence() {
return this.countryOfResidence;
}
public void setCountryOfResidence(Country country) {
this.countryOfResidence = country;
}
public DistrictSubdivision getDistrictSubdivisionOfResidence() {
return this.districtSubdivisionOfResidence;
}
public void setDistrictSubdivisionOfResidence(DistrictSubdivision districtSubdivision) {
this.districtSubdivisionOfResidence = districtSubdivision;
}
public Boolean getDislocatedFromPermanentResidence() {
return dislocatedFromPermanentResidence;
}
public void setDislocatedFromPermanentResidence(Boolean dislocatedFromPermanentResidence) {
this.dislocatedFromPermanentResidence = dislocatedFromPermanentResidence;
}
public DistrictSubdivision getSchoolTimeDistrictSubdivisionOfResidence() {
return this.schoolTimeDistrictSubdivisionOfResidence;
}
public void setSchoolTimeDistrictSubdivisionOfResidence(DistrictSubdivision districtSubdivision) {
this.schoolTimeDistrictSubdivisionOfResidence = districtSubdivision;
}
public GrantOwnerType getGrantOwnerType() {
return grantOwnerType;
}
public void setGrantOwnerType(GrantOwnerType grantOwnerType) {
this.grantOwnerType = grantOwnerType;
}
public Unit getGrantOwnerProvider() {
return this.grantOwnerProvider;
}
public void setGrantOwnerProvider(Unit grantOwnerProvider) {
this.grantOwnerProvider = grantOwnerProvider;
}
public String getGrantOwnerProviderName() {
return grantOwnerProviderName;
}
public void setGrantOwnerProviderName(String grantOwnerProviderName) {
this.grantOwnerProviderName = grantOwnerProviderName;
}
public UnitName getGrantOwnerProviderUnitName() {
return (grantOwnerProvider == null) ? null : grantOwnerProvider.getUnitName();
}
public void setGrantOwnerProviderUnitName(UnitName grantOwnerProviderUnitName) {
this.grantOwnerProvider = (grantOwnerProviderUnitName == null) ? null : grantOwnerProviderUnitName.getUnit();
}
public AcademicalInstitutionType getHighSchoolType() {
if ((getSchoolLevel() != null) && (getSchoolLevel().isHighSchoolOrEquivalent())) {
return highSchoolType;
}
return null;
}
public void setHighSchoolType(AcademicalInstitutionType highSchoolType) {
this.highSchoolType = highSchoolType;
}
public MaritalStatus getMaritalStatus() {
return maritalStatus;
}
public void setMaritalStatus(MaritalStatus maritalStatus) {
this.maritalStatus = (maritalStatus == MaritalStatus.UNKNOWN ? null : maritalStatus);
}
public boolean hasMaritalStatus() {
return getMaritalStatus() != null;
}
public ProfessionType getProfessionType() {
return professionType;
}
public void setProfessionType(ProfessionType professionType) {
this.professionType = professionType;
}
public boolean hasProfessionType() {
return getProfessionType() != null;
}
public ProfessionalSituationConditionType getProfessionalCondition() {
return professionalCondition;
}
public void setProfessionalCondition(ProfessionalSituationConditionType professionalCondition) {
this.professionalCondition = professionalCondition;
}
public boolean hasProfessionalCondition() {
return getProfessionalCondition() != null;
}
public SchoolLevelType getMotherSchoolLevel() {
return motherSchoolLevel;
}
public void setMotherSchoolLevel(SchoolLevelType motherSchoolLevel) {
this.motherSchoolLevel = motherSchoolLevel;
}
public boolean hasMotherSchoolLevel() {
return getMotherSchoolLevel() != null;
}
public ProfessionType getMotherProfessionType() {
return motherProfessionType;
}
public void setMotherProfessionType(ProfessionType motherProfessionType) {
this.motherProfessionType = motherProfessionType;
}
public boolean hasMotherProfessionType() {
return getMotherProfessionType() != null;
}
public ProfessionalSituationConditionType getMotherProfessionalCondition() {
return motherProfessionalCondition;
}
public void setMotherProfessionalCondition(ProfessionalSituationConditionType motherProfessionalCondition) {
this.motherProfessionalCondition = motherProfessionalCondition;
}
public boolean hasMotherProfessionalCondition() {
return getMotherProfessionalCondition() != null;
}
public SchoolLevelType getFatherSchoolLevel() {
return fatherSchoolLevel;
}
public void setFatherSchoolLevel(SchoolLevelType fatherSchoolLevel) {
this.fatherSchoolLevel = fatherSchoolLevel;
}
public boolean hasFatherSchoolLevel() {
return getFatherSchoolLevel() != null;
}
public ProfessionType getFatherProfessionType() {
return fatherProfessionType;
}
public void setFatherProfessionType(ProfessionType fatherProfessionType) {
this.fatherProfessionType = fatherProfessionType;
}
public boolean hasFatherProfessionType() {
return getFatherProfessionType() != null;
}
public ProfessionalSituationConditionType getFatherProfessionalCondition() {
return fatherProfessionalCondition;
}
public void setFatherProfessionalCondition(ProfessionalSituationConditionType fatherProfessionalCondition) {
this.fatherProfessionalCondition = fatherProfessionalCondition;
}
public boolean hasFatherProfessionalCondition() {
return getFatherProfessionalCondition() != null;
}
public String getConclusionGrade() {
return conclusionGrade;
}
public void setConclusionGrade(String conclusionGrade) {
this.conclusionGrade = conclusionGrade;
}
public Integer getConclusionYear() {
return conclusionYear;
}
public void setConclusionYear(Integer conclusionYear) {
this.conclusionYear = conclusionYear;
}
public Unit getInstitution() {
return this.institution;
}
public void setInstitution(Unit institution) {
this.institution = institution;
}
public String getInstitutionName() {
return institutionName;
}
public void setInstitutionName(String institutionName) {
this.institutionName = institutionName;
}
public UnitName getInstitutionUnitName() {
return (institution == null) ? null : institution.getUnitName();
}
public void setInstitutionUnitName(UnitName institutionUnitName) {
this.institution = (institutionUnitName == null) ? null : institutionUnitName.getUnit();
}
public String getDegreeDesignation() {
if (isUnitFromRaidesListMandatory()) {
return getRaidesDegreeDesignation() != null ? getRaidesDegreeDesignation().getDescription() : null;
} else {
return degreeDesignation;
}
}
public boolean isUnitFromRaidesListMandatory() {
return getSchoolLevel() != null && getSchoolLevel().isHigherEducation()
&& getCountryWhereFinishedPreviousCompleteDegree() != null
&& getCountryWhereFinishedPreviousCompleteDegree().isDefaultCountry();
}
public void setDegreeDesignation(String degreeDesignation) {
this.degreeDesignation = degreeDesignation;
}
public Country getCountryWhereFinishedPreviousCompleteDegree() {
return this.countryWhereFinishedPreviousCompleteDegree;
}
public void setCountryWhereFinishedPreviousCompleteDegree(Country country) {
if ((getSchoolLevel() != null) && getSchoolLevel().isHighSchoolOrEquivalent()) {
setCountryWhereFinishedHighSchoolLevel(country);
}
this.countryWhereFinishedPreviousCompleteDegree = country;
}
public boolean isHightSchoolCountryFieldRequired() {
return (getSchoolLevel() != null) && !getSchoolLevel().isHighSchoolOrEquivalent()
&& !getSchoolLevel().isSchoolLevelBasicCycle();
}
public Country getCountryWhereFinishedHighSchoolLevel() {
return this.countryWhereFinishedHighSchoolLevel;
}
public void setCountryWhereFinishedHighSchoolLevel(Country country) {
this.countryWhereFinishedHighSchoolLevel = country;
}
public SchoolLevelType getSchoolLevel() {
return schoolLevel;
}
public void setSchoolLevel(SchoolLevelType schoolLevel) {
this.schoolLevel = schoolLevel;
}
public boolean hasSchoolLevel() {
return getSchoolLevel() != null;
}
public String getOtherSchoolLevel() {
return otherSchoolLevel;
}
public void setOtherSchoolLevel(String otherSchoolLevel) {
this.otherSchoolLevel = otherSchoolLevel;
}
public DateTime getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(DateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
public Set<String> validate() {
final Set<String> result = new HashSet<String>();
if (getConclusionGrade() == null || getConclusionYear() == null || getCountryOfResidence() == null
|| getGrantOwnerType() == null || getDislocatedFromPermanentResidence() == null || !isSchoolLevelValid()
|| !isHighSchoolLevelValid() || !isMaritalStatusValid() || !isProfessionalConditionValid()
|| !isProfessionTypeValid() || !isMotherSchoolLevelValid() || !isMotherProfessionTypeValid()
|| !isMotherProfessionalConditionValid() || !isFatherProfessionalConditionValid()
|| !isFatherProfessionTypeValid() || !isFatherSchoolLevelValid()
|| getCountryWhereFinishedPreviousCompleteDegree() == null || !isCountryWhereFinishedHighSchoolValid()
|| (getDegreeDesignation() == null && !isUnitFromRaidesListMandatory())
|| (getInstitution() == null && StringUtils.isEmpty(getInstitutionName()))) {
result.add("error.CandidacyInformationBean.required.information.must.be.filled");
}
LocalDate now = new LocalDate();
if (getConclusionYear() != null && now.getYear() < getConclusionYear()) {
result.add("error.personalInformation.year.after.current");
}
int birthYear = getStudent().getPerson().getDateOfBirthYearMonthDay().getYear();
if (getConclusionYear() != null && getConclusionYear() < birthYear) {
result.add("error.personalInformation.year.before.birthday");
}
if (getSchoolLevel() != null && !getSchoolLevel().isSchoolLevelBasicCycle() && !getSchoolLevel().isOther()
&& getConclusionYear() != null && getConclusionYear() < birthYear + 15) {
result.add("error.personalInformation.year.before.fifteen.years.old");
}
if (isUnitFromRaidesListMandatory()) {
if (getInstitution() == null) {
result.add("error.personalInformation.required.institution");
}
if (getDegreeDesignation() == null) {
result.add("error.personalInformation.required.degreeDesignation");
}
}
if (getCountryOfResidence() != null) {
if (getCountryOfResidence().isDefaultCountry() && getDistrictSubdivisionOfResidence() == null) {
result.add("error.CandidacyInformationBean.districtSubdivisionOfResidence.is.required.for.default.country");
}
if (!getCountryOfResidence().isDefaultCountry()
&& (getDislocatedFromPermanentResidence() == null || !getDislocatedFromPermanentResidence())) {
result.add("error.CandidacyInformationBean.foreign.students.must.select.dislocated.option");
}
}
if (getDislocatedFromPermanentResidence() != null && getDislocatedFromPermanentResidence()
&& getSchoolTimeDistrictSubdivisionOfResidence() == null) {
result.add("error.CandidacyInformationBean.schoolTimeDistrictSubdivisionOfResidence.is.required.for.dislocated.students");
}
if (getSchoolLevel() != null && getSchoolLevel() == SchoolLevelType.OTHER && StringUtils.isEmpty(getOtherSchoolLevel())) {
result.add("error.CandidacyInformationBean.other.school.level.description.is.required");
}
if (isUnitFromRaidesListMandatory() && hasRaidesDegreeDesignation()
&& !getRaidesDegreeDesignation().getInstitutionUnitSet().contains(getInstitution())) {
result.add("error.CandidacyInformationBean.designation.must.match.institution");
}
if (getGrantOwnerType() != null && getGrantOwnerType() == GrantOwnerType.OTHER_INSTITUTION_GRANT_OWNER
&& getGrantOwnerProvider() == null) {
result.add("error.CandidacyInformationBean.grantOwnerProviderInstitutionUnitName.is.required.for.other.institution.grant.ownership");
}
return result;
}
public Set<String> validateForAcademicService() {
Set<String> result = validate();
if (!result.isEmpty()) {
return result;
}
if (isDegreeChangeOrTransferOrErasmusStudent()) {
if (StringUtils.isEmpty(getPrecedentDegreeDesignation())
|| (getPrecedentInstitution() == null && StringUtils.isEmpty(getPrecedentInstitutionName()))
|| getPrecedentSchoolLevel() == null || getNumberOfPreviousYearEnrolmentsInPrecedentDegree() == null) {
result.add("error.PersonInformationBean.precedentDegree.fields.mandatory");
}
if (SchoolLevelType.OTHER.equals(getPrecedentSchoolLevel()) && StringUtils.isEmpty(getOtherPrecedentSchoolLevel())) {
result.add("error.other.precedent.school.level.description.is.required");
}
}
return result;
}
public boolean isEditableByAcademicService() {
Set<String> result = validate();
if (!result.isEmpty()) {
return true;
}
if (getPrecedentDegreeDesignation() == null || getPrecedentInstitution() == null || getPrecedentSchoolLevel() == null
|| getNumberOfPreviousYearEnrolmentsInPrecedentDegree() == null || getMobilityProgramDuration() == null) {
return true;
}
return false;
}
public boolean isMaritalStatusValid() {
return hasMaritalStatus() && getMaritalStatus() != MaritalStatus.UNKNOWN;
}
public boolean isSchoolLevelValid() {
return hasSchoolLevel() && getSchoolLevel().isForStudent();
}
private boolean isCountryWhereFinishedHighSchoolValid() {
if (getSchoolLevel() == null) {
return false;
}
return (getCountryWhereFinishedHighSchoolLevel() != null && !getSchoolLevel().isSchoolLevelBasicCycle())
|| (getCountryWhereFinishedHighSchoolLevel() == null && getSchoolLevel().isSchoolLevelBasicCycle());
}
public boolean isHighSchoolLevelValid() {
return !getSchoolLevel().isHighSchoolOrEquivalent() || getHighSchoolType() != null;
}
public boolean isProfessionTypeValid() {
return hasProfessionType() && getProfessionType().isActive();
}
public boolean isProfessionalConditionValid() {
return hasProfessionalCondition() && getProfessionalCondition() != ProfessionalSituationConditionType.MILITARY_SERVICE
&& getProfessionalCondition() != ProfessionalSituationConditionType.UNKNOWN;
}
public boolean isMotherProfessionTypeValid() {
return hasMotherProfessionType() && getMotherProfessionType().isActive();
}
public boolean isMotherProfessionalConditionValid() {
return hasMotherProfessionalCondition()
&& getMotherProfessionalCondition() != ProfessionalSituationConditionType.MILITARY_SERVICE
&& getMotherProfessionalCondition() != ProfessionalSituationConditionType.UNKNOWN;
}
public boolean isMotherSchoolLevelValid() {
return hasMotherSchoolLevel() && getMotherSchoolLevel().isForStudentHousehold();
}
public boolean isFatherProfessionTypeValid() {
return hasFatherProfessionType() && getFatherProfessionType().isActive();
}
public boolean isFatherProfessionalConditionValid() {
return hasFatherProfessionalCondition()
&& getFatherProfessionalCondition() != ProfessionalSituationConditionType.MILITARY_SERVICE
&& getFatherProfessionalCondition() != ProfessionalSituationConditionType.UNKNOWN;
}
public boolean isFatherSchoolLevelValid() {
return hasFatherSchoolLevel() && getFatherSchoolLevel().isForStudentHousehold();
}
public boolean isValid() {
return validate().isEmpty();
}
public boolean isValidForAcademicService() {
return validateForAcademicService().isEmpty();
}
public void addDocumentFile(final File file) {
documentFiles.add(file);
}
public Collection<File> getDocumentFiles() {
final Collection<File> result = new ArrayList<File>();
for (final File file : documentFiles) {
result.add(file);
}
return result;
}
public void resetInstitutionAndDegree() {
setInstitution(null);
setInstitutionName(null);
setDegreeDesignation(null);
setRaidesDegreeDesignation(null);
}
public void resetDegree() {
setDegreeDesignation(null);
setRaidesDegreeDesignation(null);
}
public String getFormattedValues() {
Formatter result = new Formatter();
final Student student = getStudent();
result.format("Student Number: %d\n", student.getNumber());
result.format("Name: %s\n", student.getPerson().getName());
if (hasPhdIndividualProgramProcess()) {
result.format("Degree: %s\n", getPhdIndividualProgramProcess().getDisplayName());
} else {
result.format("Degree: %s\n", getRegistration().getDegree().getPresentationName());
}
return result.toString();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof PersonalInformationBean)) {
return false;
}
final PersonalInformationBean other = (PersonalInformationBean) obj;
if (hasPhdIndividualProgramProcess() && other.hasPhdIndividualProgramProcess()) {
return getPhdIndividualProgramProcess().equals(other.getPhdIndividualProgramProcess());
} else if (hasRegistration() && other.hasRegistration()) {
return getRegistration().equals(other.getRegistration());
} else {
return false;
}
}
@Override
public int hashCode() {
int result = 17;
if (hasPhdIndividualProgramProcess()) {
result = 37 * result + getPhdIndividualProgramProcess().hashCode();
} else {
result = 37 * result + getRegistration().hashCode();
}
return result;
}
public String getDescription() {
if (hasPhdIndividualProgramProcess()) {
return BundleUtil.getString(Bundle.GEP, "label.personal.ingression.data.viewer.phd.program.name") + " "
+ BundleUtil.getString(Bundle.APPLICATION, "label.in") + " "
+ getPhdIndividualProgramProcess().getPhdProgram().getName().getContent();
} else {
return getRegistration().getDegreeNameWithDescription();
}
}
public void setRaidesDegreeDesignation(DegreeDesignation raidesDegreeDesignation) {
this.raidesDegreeDesignation = raidesDegreeDesignation;
}
public DegreeDesignation getRaidesDegreeDesignation() {
return raidesDegreeDesignation;
}
public boolean hasRaidesDegreeDesignation() {
return raidesDegreeDesignation != null;
}
public void setDegreeChangeOrTransferOrErasmusStudent(boolean degreeChangeOrTransferOrErasmusStudent) {
this.degreeChangeOrTransferOrErasmusStudent = degreeChangeOrTransferOrErasmusStudent;
}
public boolean isDegreeChangeOrTransferOrErasmusStudent() {
return degreeChangeOrTransferOrErasmusStudent;
}
public SchoolLevelType getPrecedentSchoolLevel() {
return precedentSchoolLevel;
}
public void setPrecedentSchoolLevel(SchoolLevelType precedentSchoolLevel) {
this.precedentSchoolLevel = precedentSchoolLevel;
}
public void setOtherPrecedentSchoolLevel(String otherPrecedentSchoolLevel) {
this.otherPrecedentSchoolLevel = otherPrecedentSchoolLevel;
}
public String getOtherPrecedentSchoolLevel() {
return otherPrecedentSchoolLevel;
}
public Unit getPrecedentInstitution() {
return precedentInstitution;
}
public void setPrecedentInstitution(Unit precedentInstitution) {
this.precedentInstitution = precedentInstitution;
}
public String getPrecedentInstitutionName() {
return precedentInstitutionName;
}
public void setPrecedentInstitutionName(String precedentInstitutionName) {
this.precedentInstitutionName = precedentInstitutionName;
}
public UnitName getPrecedentInstitutionUnitName() {
return (getPrecedentInstitution() == null) ? null : getPrecedentInstitution().getUnitName();
}
public void setPrecedentInstitutionUnitName(UnitName institutionUnitName) {
setPrecedentInstitution(institutionUnitName == null ? null : institutionUnitName.getUnit());
}
public String getPrecedentDegreeDesignation() {
return getPrecedentDegreeDesignationObject() != null ? getPrecedentDegreeDesignationObject().getDescription() : precedentDegreeDesignation;
}
public void setPrecedentDegreeDesignation(String precedentDegreeDesignation) {
this.precedentDegreeDesignation = precedentDegreeDesignation;
}
public void setPrecedentDegreeDesignationObject(DegreeDesignation precedentDegreeDesignationObject) {
this.precedentDegreeDesignationObject = precedentDegreeDesignationObject;
}
public DegreeDesignation getPrecedentDegreeDesignationObject() {
return precedentDegreeDesignationObject;
}
public Integer getNumberOfPreviousYearEnrolmentsInPrecedentDegree() {
return numberOfPreviousYearEnrolmentsInPrecedentDegree;
}
public void setNumberOfPreviousYearEnrolmentsInPrecedentDegree(Integer numberOfPreviousYearEnrolmentsInPrecedentDegree) {
this.numberOfPreviousYearEnrolmentsInPrecedentDegree = numberOfPreviousYearEnrolmentsInPrecedentDegree;
}
public SchoolPeriodDuration getMobilityProgramDuration() {
return mobilityProgramDuration;
}
public void setMobilityProgramDuration(SchoolPeriodDuration mobilityProgramDuration) {
this.mobilityProgramDuration = mobilityProgramDuration;
}
private PrecedentDegreeInformation getPrecedentDegreeInformation() {
if (hasPhdIndividualProgramProcess()) {
return getPhdIndividualProgramProcess().getPrecedentDegreeInformation(ExecutionYear.readCurrentExecutionYear());
} else {
return getRegistration().getPrecedentDegreeInformation(ExecutionYear.readCurrentExecutionYear());
}
}
public Student getStudent() {
if (hasPhdIndividualProgramProcess()) {
return getPhdIndividualProgramProcess().getPerson().getStudent();
} else {
return getRegistration().getStudent();
}
}
@Atomic
public void updatePersonalInformation(boolean isStudentEditing) {
PrecedentDegreeInformation precedentInfo = getPrecedentDegreeInformation();
PersonalIngressionData personalData;
if (precedentInfo == null) {
precedentInfo = new PrecedentDegreeInformation();
if (hasPhdIndividualProgramProcess()) {
precedentInfo.setPhdIndividualProgramProcess(getPhdIndividualProgramProcess());
} else {
precedentInfo.setRegistration(getRegistration());
}
ExecutionYear currentExecutionYear = ExecutionYear.readCurrentExecutionYear();
personalData = getStudent().getPersonalIngressionDataByExecutionYear(currentExecutionYear);
if (personalData == null) {
personalData = new PersonalIngressionData(getStudent(), currentExecutionYear, precedentInfo);
} else {
personalData.addPrecedentDegreesInformations(precedentInfo);
}
} else {
personalData = precedentInfo.getPersonalIngressionData();
}
precedentInfo.edit(this, isStudentEditing);
personalData.edit(this);
}
}