/** * 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.dto.student; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Set; import org.apache.commons.beanutils.BeanComparator; import org.fenixedu.academic.domain.Attends; import org.fenixedu.academic.domain.Degree; import org.fenixedu.academic.domain.DegreeCurricularPlan; import org.fenixedu.academic.domain.Evaluation; import org.fenixedu.academic.domain.Exam; import org.fenixedu.academic.domain.ExecutionCourse; import org.fenixedu.academic.domain.Grouping; import org.fenixedu.academic.domain.StudentGroup; import org.fenixedu.academic.domain.WrittenEvaluation; import org.fenixedu.academic.domain.WrittenEvaluationEnrolment; import org.fenixedu.academic.domain.WrittenTest; import org.fenixedu.academic.domain.student.Student; import org.fenixedu.academic.util.Bundle; import org.fenixedu.academic.util.EvaluationType; import org.fenixedu.bennu.core.i18n.BundleUtil; import org.joda.time.DateTime; import org.joda.time.Interval; import org.joda.time.YearMonthDay; public class StudentPortalBean implements Serializable { public class ExecutionCoursesAnnouncements { public class EvaluationAnnouncement { private String evaluationType; private String identification; private String realization; private String register; private String enrolment; private String room; private boolean realizationPast; private boolean enrolmentElapsing; private boolean enrolmentPast; private boolean registered; private boolean groupEnrolment; public EvaluationAnnouncement(WrittenTest writtenTest) { setEvaluationType(writtenTest.getEvaluationType().toString()); setIdentification(writtenTest.getDescription()); setRegister(isStudentEnrolled(writtenTest)); setRealization(writtenTest); setEnrolment(writtenTest); setRoom(writtenTest); setGroupEnrolment(false); } public EvaluationAnnouncement(Exam exam) { setEvaluationType(exam.getEvaluationType().toString()); setIdentification(exam.getName()); setRegister(isStudentEnrolled(exam)); setRealization(exam); setEnrolment(exam); setRoom(exam); setGroupEnrolment(false); } public EvaluationAnnouncement(Grouping grouping) { setEvaluationType(BundleUtil.getString(Bundle.APPLICATION, "label.grouping")); setIdentification(grouping.getName()); setRegister(isStudentEnrolled(grouping)); setRealization(grouping); setEnrolment(grouping); setRoom("-"); setGroupEnrolment(true); } private boolean isStudentEnrolled(WrittenEvaluation writtenEvaluation) { for (final WrittenEvaluationEnrolment writtenEvaluationEnrolment : writtenEvaluation .getWrittenEvaluationEnrolmentsSet()) { if (writtenEvaluationEnrolment.getStudent() != null && writtenEvaluationEnrolment.getStudent().getStudent() == getStudent()) { return true; } } return false; } private boolean isStudentEnrolled(Grouping grouping) { for (final StudentGroup studentGroup : grouping.getStudentGroupsSet()) { for (Attends attends : studentGroup.getAttendsSet()) { if (attends.getAluno().getStudent() == getStudent()) { return true; } } } return false; } public String getEvaluationType() { return evaluationType; } public String getIdentification() { return identification; } public String getRealization() { return realization; } public String getEnrolment() { return enrolment; } public String getRoom() { return room; } public String getRegister() { return register; } public boolean getRegistered() { return registered; } public boolean getRealizationPast() { return realizationPast; } public boolean getEnrolmentElapsing() { return enrolmentElapsing; } public boolean getEnrolmentPast() { return enrolmentPast; } public String getStatus() { /* * <logic:equal name="evaluationAnnouncement" * property="evaluationType" value="Agrupamento"> <logic:equal * name="evaluationAnnouncement" property="registered" * value="true"> <tr> </logic:equal> <logic:equal * name="evaluationAnnouncement" property="registered" * value="false"> <logic:equal name="evaluationAnnouncement" * property="enrolmentPast" value="true"> <tr class="disabled"> * </logic:equal> <logic:equal name="evaluationAnnouncement" * property="enrolmentPast" value="false"> <tr> </logic:equal> * </logic:equal> </logic:equal> <logic:notEqual * name="evaluationAnnouncement" property="evaluationType" * value="Agrupamento"> <logic:equal * name="evaluationAnnouncement" property="realizationPast" * value="true"> <tr class="disabled"> </logic:equal> * <logic:equal name="evaluationAnnouncement" * property="realizationPast" value="false"> <logic:equal * name="evaluationAnnouncement" property="registered" * value="true"> <tr> </logic:equal> <logic:equal * name="evaluationAnnouncement" property="registered" * value="false"> <logic:equal name="evaluationAnnouncement" * property="enrolmentElapsing" value="true"> <tr * class="elapsing"> <bean:define id="evaluationElapsing" * value="true" /> </logic:equal> <logic:equal * name="evaluationAnnouncement" property="enrolmentElapsing" * value="false"> <tr> </logic:equal> </logic:equal> * </logic:equal> </logic:notEqual> */ if (getEvaluationType().equals("Agrupamento")) { if (getRegistered()) { } else { if (getEnrolmentPast()) { return "disabled"; } else { } } } else { if (getRealizationPast()) { return "disabled"; } else { if (getRegistered()) { } else { if (getEnrolmentElapsing()) { return "elapsing"; } else { } } } } return ""; } public void setEvaluationType(String evaluationType) { this.evaluationType = evaluationType; } public void setIdentification(String identification) { this.identification = identification; } public void setRealization(WrittenEvaluation writtenEvaluation) { this.realizationPast = writtenEvaluation.getBeginningDateTime().isBeforeNow(); this.realization = YearMonthDay.fromDateFields(writtenEvaluation.getBeginningDateTime().toDate()).toString() + " " + writtenEvaluation.getBeginningDateTime().getHourOfDay() + ":" + (writtenEvaluation.getBeginningDateTime().getMinuteOfHour() == 0 ? "00" : writtenEvaluation .getBeginningDateTime().getMinuteOfHour()); } public void setRealization(Grouping grouping) { this.realization = "-"; } public void setEnrolment(WrittenEvaluation writtenEvaluation) { DateTime beginDateTime = writtenEvaluation.getEnrolmentPeriodStart(); DateTime endDateTime = writtenEvaluation.getEnrolmentPeriodEnd(); this.enrolmentPast = endDateTime == null ? false : endDateTime.isBeforeNow(); this.enrolmentElapsing = false; if (writtenEvaluation.getEnrollmentBeginDayDateYearMonthDay() != null && writtenEvaluation.getEnrollmentEndDayDateYearMonthDay() != null) { this.enrolmentElapsing = new Interval(beginDateTime, endDateTime).containsNow(); this.enrolment = writtenEvaluation.getEnrollmentBeginDayDateYearMonthDay().toString() + " " + BundleUtil.getString(Bundle.STUDENT, "message.out.until") + " " + writtenEvaluation.getEnrollmentEndDayDateYearMonthDay().toString(); } else { this.enrolment = "-"; this.register = "-"; } } public void setEnrolment(Grouping grouping) { this.enrolmentPast = new DateTime(grouping.getEnrolmentEndDay()).isBeforeNow(); this.enrolmentElapsing = new DateTime(grouping.getEnrolmentBeginDay()).isBeforeNow() && new DateTime(grouping.getEnrolmentEndDay()).isAfterNow(); this.enrolment = YearMonthDay.fromDateFields(grouping.getEnrolmentBeginDayDate()).toString() + " " + BundleUtil.getString(Bundle.STUDENT, "message.out.until") + " " + YearMonthDay.fromDateFields(grouping.getEnrolmentEndDayDate()).toString(); } public void setRoom(WrittenEvaluation writtenEvaluation) { for (final WrittenEvaluationEnrolment writtenEvaluationEnrolment : writtenEvaluation .getWrittenEvaluationEnrolmentsSet()) { if (writtenEvaluationEnrolment.getStudent() != null && writtenEvaluationEnrolment.getStudent().getStudent() == getStudent()) { if (writtenEvaluationEnrolment.getRoom() != null) { this.room = writtenEvaluationEnrolment.getRoom().getName(); return; } else { break; } } } if (writtenEvaluation.getAssociatedRooms().isEmpty() == false) { this.room = writtenEvaluation.getAssociatedRoomsAsString(); } else { this.room = "-"; } } public void setRoom(String room) { this.room = room; } public void setRegister(Boolean registered) { final String label = registered ? "label.enroled" : "message.out.not.enrolled"; this.register = BundleUtil.getString(Bundle.STUDENT, label); setRegistered(registered); } public void setRegistered(Boolean registered) { this.registered = registered; } public void setGroupEnrolment(boolean groupEnrolment) { this.groupEnrolment = groupEnrolment; } public boolean isGroupEnrolment() { return groupEnrolment; } } private ExecutionCourse executionCourse; private List<EvaluationAnnouncement> evaluationAnnouncements; public ExecutionCoursesAnnouncements(ExecutionCourse executionCourse) { setExecutionCourse(executionCourse); setEvaluationAnnouncements(new ArrayList<EvaluationAnnouncement>()); for (Evaluation evaluation : executionCourse.getOrderedAssociatedEvaluations()) { if (evaluation.getEvaluationType() == EvaluationType.TEST_TYPE) { addEvaluationAnnouncement(new EvaluationAnnouncement((WrittenTest) evaluation)); } else if (evaluation.getEvaluationType() == EvaluationType.EXAM_TYPE) { Exam exam = (Exam) evaluation; if (exam.isExamsMapPublished()) { addEvaluationAnnouncement(new EvaluationAnnouncement(exam)); } } } for (Grouping grouping : executionCourse.getGroupings()) { addEvaluationAnnouncement(new EvaluationAnnouncement(grouping)); } } public ExecutionCourse getExecutionCourse() { return executionCourse; } public List<EvaluationAnnouncement> getEvaluationAnnouncements() { Collections.sort(evaluationAnnouncements, new Comparator() { @Override public int compare(Object o1, Object o2) { EvaluationAnnouncement e1 = (EvaluationAnnouncement) o1; EvaluationAnnouncement e2 = (EvaluationAnnouncement) o2; if (!e1.getStatus().equals("disabled") && e2.getStatus().equals("disabled")) { return -1; } return 1; } }); return evaluationAnnouncements; } public void setEvaluationAnnouncements(List<EvaluationAnnouncement> evaluationAnnouncements) { this.evaluationAnnouncements = evaluationAnnouncements; } public void addEvaluationAnnouncement(EvaluationAnnouncement evaluationAnnouncement) { getEvaluationAnnouncements().add(evaluationAnnouncement); } public void setExecutionCourse(ExecutionCourse executionCourse) { this.executionCourse = executionCourse; } } private Degree degree; private Student student; private List<ExecutionCoursesAnnouncements> executionCoursesAnnouncements; public StudentPortalBean(final Degree degree, final Student student, final Set<ExecutionCourse> executionCourses, final DegreeCurricularPlan activeDegreeCurricularPlan) { super(); setDegree(degree); setStudent(student); setExecutionCoursesAnnouncements(new ArrayList<ExecutionCoursesAnnouncements>()); for (ExecutionCourse executionCourse : executionCourses) { addExecutionCoursesAnnouncement(new ExecutionCoursesAnnouncements(executionCourse)); } Collections.sort(getExecutionCoursesAnnouncements(), new BeanComparator("executionCourse.name")); } public Degree getDegree() { return degree; } public Student getStudent() { return student; } public List<ExecutionCoursesAnnouncements> getExecutionCoursesAnnouncements() { return executionCoursesAnnouncements; } public void setDegree(Degree degree) { this.degree = degree; } public void setStudent(Student student) { this.student = student; } public void setExecutionCoursesAnnouncements(List<ExecutionCoursesAnnouncements> executionCoursesAnnouncements) { this.executionCoursesAnnouncements = executionCoursesAnnouncements; } public void addExecutionCoursesAnnouncement(ExecutionCoursesAnnouncements executionCoursesAnnouncement) { getExecutionCoursesAnnouncements().add(executionCoursesAnnouncement); } }