public YearMonthDay calculateConclusionDate() {
if (isBolonha()) {
return getLastStudentCurricularPlan().getLastApprovementDate();
} else {
YearMonthDay result = null;
for (final StudentCurricularPlan plan : getStudentCurricularPlansSet()) {
final YearMonthDay date = plan.getLastApprovementDate();
if (date != null && (result == null || result.isBefore(date))) {
result = date;
}
}
if (getDegreeType() == DegreeType.MASTER_DEGREE) {
final LocalDate date = this.getDissertationThesisDiscussedDate();
if (date != null && (result == null || result.isBefore(date))) {
result = new YearMonthDay(date);
}
if (result == null && hasState(RegistrationStateType.SCHOOLPARTCONCLUDED)) {
return getFirstRegistrationState(RegistrationStateType.SCHOOLPARTCONCLUDED).getStateDate().toYearMonthDay();
}