Package org.fenixedu.academic.ui.struts.action.student

Source Code of org.fenixedu.academic.ui.struts.action.student.ShowStudentPortalDA

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

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.TreeSet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.academic.domain.DegreeCurricularPlan;
import org.fenixedu.academic.domain.EnrolmentPeriod;
import org.fenixedu.academic.domain.EnrolmentPeriodInClasses;
import org.fenixedu.academic.domain.EnrolmentPeriodInCurricularCourses;
import org.fenixedu.academic.domain.EnrolmentPeriodInCurricularCoursesSpecialSeason;
import org.fenixedu.academic.domain.EnrolmentPeriodInSpecialSeasonEvaluations;
import org.fenixedu.academic.domain.ExecutionSemester;
import org.fenixedu.academic.domain.student.Registration;
import org.fenixedu.academic.domain.student.Student;
import org.fenixedu.academic.dto.student.StudentPortalBean;
import org.fenixedu.academic.predicate.AccessControl;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.fenixedu.bennu.struts.annotations.Forward;
import org.fenixedu.bennu.struts.annotations.Forwards;
import org.fenixedu.bennu.struts.annotations.Mapping;
import org.fenixedu.bennu.struts.portal.StrutsApplication;
import org.joda.time.YearMonthDay;

@StrutsApplication(bundle = "TitlesResources", path = "student", titleKey = "private.student",
        accessGroup = StudentApplication.ACCESS_GROUP, hint = StudentApplication.HINT)
@Mapping(module = "student", path = "/showStudentPortal")
@Forwards(value = { @Forward(name = "studentPortal", path = "/student/main_bd.jsp") })
public class ShowStudentPortalDA extends Action {

    private static int NUMBER_OF_DAYS_BEFORE_PERIOD_TO_WARN = 100;
    private static int NUMBER_OF_DAYS_AFTER_PERIOD_TO_WARN = 5;

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        List<StudentPortalBean> studentPortalBeans = new ArrayList<StudentPortalBean>();
        List<String> genericDegreeWarnings = new ArrayList<String>();

        final Student student = AccessControl.getPerson().getStudent();
        if (student != null) {
            for (Registration registration : student.getActiveRegistrationsIn(ExecutionSemester.readActualExecutionSemester())) {
                DegreeCurricularPlan degreeCurricularPlan = registration.getActiveDegreeCurricularPlan();
                if (registration.getAttendingExecutionCoursesForCurrentExecutionPeriod().isEmpty() == false) {
                    studentPortalBeans.add(new StudentPortalBean(registration.getDegree(), student, registration
                            .getAttendingExecutionCoursesForCurrentExecutionPeriod(), degreeCurricularPlan));
                }
                if (hasSpecialSeasonEnrolments(student)) {
                    genericDegreeWarnings.addAll(getEnrolmentPeriodCoursesAfterSpecialSeason(degreeCurricularPlan));
                } else {
                    genericDegreeWarnings.addAll(getEnrolmentPeriodCourses(degreeCurricularPlan));
                }
                genericDegreeWarnings.addAll(getEnrolmentPeriodInSpecialSeasonEvaluations(degreeCurricularPlan));
                genericDegreeWarnings.addAll(getEnrolmentPeriodClasses(degreeCurricularPlan));
            }
        }

        request.setAttribute("genericDegreeWarnings", genericDegreeWarnings);
        request.setAttribute("studentPortalBeans", studentPortalBeans);
        request.setAttribute("executionSemester", ExecutionSemester.readActualExecutionSemester().getQualifiedName());
        return mapping.findForward("studentPortal");
    }

    private List<String> getEnrolmentPeriodCourses(DegreeCurricularPlan degreeCurricularPlan) {
        List<String> warnings = new ArrayList<String>();
        for (final EnrolmentPeriod enrolmentPeriod : degreeCurricularPlan.getEnrolmentPeriodsSet()) {
            if (enrolmentPeriod instanceof EnrolmentPeriodInCurricularCourses) {
                if (isBetweenWarnPeriod(enrolmentPeriod)) {
                    warnings.add(BundleUtil.getString(Bundle.STUDENT, "message.out.degree.enrolment.period", degreeCurricularPlan
                            .getDegree().getSigla(), YearMonthDay.fromDateFields(enrolmentPeriod.getStartDate()).toString(),
                            YearMonthDay.fromDateFields(enrolmentPeriod.getEndDate()).toString()));
                }
            }
        }
        return warnings;
    }

    private List<String> getEnrolmentPeriodCoursesAfterSpecialSeason(DegreeCurricularPlan degreeCurricularPlan) {
        List<String> warnings = new ArrayList<String>();
        for (final EnrolmentPeriod enrolmentPeriod : degreeCurricularPlan.getEnrolmentPeriodsSet()) {
            if (enrolmentPeriod instanceof EnrolmentPeriodInCurricularCoursesSpecialSeason) {
                if (isBetweenWarnPeriod(enrolmentPeriod)) {
                    warnings.add(BundleUtil.getString(Bundle.STUDENT, "message.out.degree.enrolment.period.after.special.season",
                            degreeCurricularPlan.getDegree().getSigla(),
                            YearMonthDay.fromDateFields(enrolmentPeriod.getStartDate()).toString(),
                            YearMonthDay.fromDateFields(enrolmentPeriod.getEndDate()).toString()));
                }
            }
        }
        return warnings;
    }

    private boolean hasSpecialSeasonEnrolments(Student student) {
        ExecutionSemester actualSemester = ExecutionSemester.readActualExecutionSemester();
        ExecutionSemester previousSemester = actualSemester.getPreviousExecutionPeriod();
        ExecutionSemester previousPreviousSemester = previousSemester.getPreviousExecutionPeriod();
        if (actualSemester.isFirstOfYear()) {
            return (student.hasSpecialSeasonEnrolments(previousSemester) || student
                    .hasSpecialSeasonEnrolments(previousPreviousSemester));
        }
        return (student.hasSpecialSeasonEnrolments(actualSemester) || student.hasSpecialSeasonEnrolments(previousSemester));
    }

    private List<String> getEnrolmentPeriodInSpecialSeasonEvaluations(DegreeCurricularPlan degreeCurricularPlan) {
        HashMap<String, TreeSet<EnrolmentPeriod>> enrolmentPeriodsByDate = new HashMap<String, TreeSet<EnrolmentPeriod>>();
        List<String> warnings = new ArrayList<String>();
        for (final EnrolmentPeriod enrolmentPeriod : degreeCurricularPlan.getEnrolmentPeriodsSet()) {
            if (enrolmentPeriod instanceof EnrolmentPeriodInSpecialSeasonEvaluations) {
                if (isBetweenWarnPeriod(enrolmentPeriod)) {
                    String dateKey =
                            YearMonthDay.fromDateFields(enrolmentPeriod.getStartDate()).toString()
                                    + YearMonthDay.fromDateFields(enrolmentPeriod.getEndDate()).toString();

                    if (enrolmentPeriodsByDate.get(dateKey) == null) {
                        enrolmentPeriodsByDate.put(dateKey, new TreeSet<EnrolmentPeriod>(
                                EnrolmentPeriod.COMPARATOR_BY_EXECUTION_SEMESTER));
                    }

                    enrolmentPeriodsByDate.get(dateKey).add(enrolmentPeriod);
                }
            }
        }

        for (TreeSet<EnrolmentPeriod> periods : enrolmentPeriodsByDate.values()) {
            if (periods.size() == 1) {
                EnrolmentPeriod enrolmentPeriod = periods.first();
                warnings.add(BundleUtil.getString(Bundle.STUDENT,
                        "message.out.degree.enrolment.period.in.special.season.evaluations", degreeCurricularPlan.getDegree()
                                .getSigla(), enrolmentPeriod.getExecutionPeriod().getSemester().toString(), enrolmentPeriod
                                .getExecutionPeriod().getYear(), YearMonthDay.fromDateFields(enrolmentPeriod.getStartDate())
                                .toString(), YearMonthDay.fromDateFields(enrolmentPeriod.getEndDate()).toString()));
            } else {
                EnrolmentPeriod enrolmentPeriod = periods.first();
                warnings.add(BundleUtil.getString(Bundle.STUDENT,
                        "message.out.degree.enrolment.period.in.special.season.evaluations.simple", degreeCurricularPlan
                                .getDegree().getSigla(), YearMonthDay.fromDateFields(enrolmentPeriod.getStartDate()).toString(),
                        YearMonthDay.fromDateFields(enrolmentPeriod.getEndDate()).toString()));
            }
        }
        return warnings;
    }

    private List<String> getEnrolmentPeriodClasses(DegreeCurricularPlan degreeCurricularPlan) {
        List<String> warnings = new ArrayList<String>();
        for (final EnrolmentPeriod enrolmentPeriod : degreeCurricularPlan.getEnrolmentPeriodsSet()) {
            if (enrolmentPeriod instanceof EnrolmentPeriodInClasses) {
                if (isBetweenWarnPeriod(enrolmentPeriod)) {
                    warnings.add(BundleUtil.getString(Bundle.STUDENT, "message.out.classes.enrolment.period",
                            degreeCurricularPlan.getDegree().getSigla(),
                            YearMonthDay.fromDateFields(enrolmentPeriod.getStartDate()).toString(),
                            YearMonthDay.fromDateFields(enrolmentPeriod.getEndDate()).toString()));
                }
            }
        }
        return warnings;
    }

    private boolean isBetweenWarnPeriod(EnrolmentPeriod enrolmentPeriod) {
        if (enrolmentPeriod == null) {
            return false;
        }
        YearMonthDay startWarnPeriod =
                YearMonthDay.fromDateFields(enrolmentPeriod.getStartDate()).minusDays(NUMBER_OF_DAYS_BEFORE_PERIOD_TO_WARN);
        YearMonthDay endWarnPeriod =
                YearMonthDay.fromDateFields(enrolmentPeriod.getEndDate()).plusDays(NUMBER_OF_DAYS_AFTER_PERIOD_TO_WARN);
        Date now = new Date();
        if (startWarnPeriod.toDateTimeAtMidnight().toDate().before(now)
                && endWarnPeriod.toDateTimeAtMidnight().toDate().after(now)) {
            return true;
        } else {
            return false;
        }
    }
}
TOP

Related Classes of org.fenixedu.academic.ui.struts.action.student.ShowStudentPortalDA

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.