Package org.fenixedu.academic.ui.struts.action.phd.coordinator

Source Code of org.fenixedu.academic.ui.struts.action.phd.coordinator.PhdEnrolmentsManagementDA

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

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

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

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.academic.domain.Coordinator;
import org.fenixedu.academic.domain.CurricularCourse;
import org.fenixedu.academic.domain.Enrolment;
import org.fenixedu.academic.domain.ExecutionSemester;
import org.fenixedu.academic.domain.ExecutionYear;
import org.fenixedu.academic.domain.phd.ManageEnrolmentsBean;
import org.fenixedu.academic.domain.phd.PhdProgram;
import org.fenixedu.academic.ui.renderers.degreeStructure.DegreeCurricularPlanRendererConfig;
import org.fenixedu.academic.ui.struts.action.coordinator.CoordinatorApplication.CoordinatorPhdApp;
import org.fenixedu.academic.ui.struts.action.phd.PhdProcessDA;
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.EntryPoint;
import org.fenixedu.bennu.struts.portal.StrutsFunctionality;

import pt.utl.ist.fenix.tools.spreadsheet.SheetData;
import pt.utl.ist.fenix.tools.spreadsheet.SpreadsheetBuilder;
import pt.utl.ist.fenix.tools.spreadsheet.WorkbookExportFormat;

@StrutsFunctionality(app = CoordinatorPhdApp.class, path = "enrolments-management",
        titleKey = "label.externalUnits.externalEnrolments", bundle = "AcademicAdminOffice")
@Mapping(path = "/phdEnrolmentsManagement", module = "coordinator")
@Forwards({ @Forward(name = "showPhdProgram", path = "/phd/coordinator/enrolments/showPhdProgram.jsp"),
        @Forward(name = "showEnrolments", path = "/phd/coordinator/enrolments/showEnrolments.jsp") })
public class PhdEnrolmentsManagementDA extends PhdProcessDA {

    private Set<PhdProgram> getManagedPhdPrograms(HttpServletRequest request) {
        final Set<PhdProgram> result = new HashSet<PhdProgram>();
        final ExecutionYear currentExecutionYear = ExecutionYear.readCurrentExecutionYear();

        for (final Coordinator coordinator : getLoggedPerson(request).getCoordinatorsSet()) {
            if (coordinator.getExecutionDegree().getDegree().getPhdProgram() != null
                    && coordinator.getExecutionDegree().getExecutionYear() == currentExecutionYear) {
                result.add(coordinator.getExecutionDegree().getDegree().getPhdProgram());
            }
        }
        return result;
    }

    @EntryPoint
    public ActionForward showPhdProgram(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) {

        final PhdProgram program = getDomainObject(request, "phdProgramOid");
        if (program != null) {
            initPhdProgramConfig(request, program);
            return mapping.findForward("showPhdProgram");
        }

        final Set<PhdProgram> phdPrograms = getManagedPhdPrograms(request);

        if (phdPrograms.size() == 1) {
            initPhdProgramConfig(request, phdPrograms.iterator().next());
            return mapping.findForward("showPhdProgram");
        }

        request.setAttribute("phdPrograms", phdPrograms);
        return mapping.findForward("showPhdProgram");
    }

    private void initPhdProgramConfig(HttpServletRequest request, PhdProgram program) {

        final DegreeCurricularPlanRendererConfig config = new DegreeCurricularPlanRendererConfig();

        config.setDegreeCurricularPlan(program.getDegree().getLastActiveDegreeCurricularPlan());
        config.setExecutionInterval(ExecutionYear.readCurrentExecutionYear());
        config.setOrganizeBy(DegreeCurricularPlanRendererConfig.OrganizeType.GROUPS);
        config.setViewCurricularCourseUrl(getClass().getAnnotation(Mapping.class).path() + ".do");
        config.addViewCurricularCourseUrlParameter("method", "manageEnrolments");

        request.setAttribute("rendererConfig", config);
        request.setAttribute("phdProgram", program);
    }

    public ActionForward changeDegreeCurricularPlanConfig(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) {

        final DegreeCurricularPlanRendererConfig config = getRenderedObject("rendererConfig");

        request.setAttribute("rendererConfig", config);
        request.setAttribute("phdProgram", config.getDegreeCurricularPlan().getDegree().getPhdProgram());

        return mapping.findForward("showPhdProgram");
    }

    public ActionForward exportEnrolmentsToExcel(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws IOException {

        final ExecutionSemester semester = getDomainObject(request, "executionSemesterOid");
        final CurricularCourse curricularCourse = getDomainObject(request, "degreeModuleOid");

        byte[] content = buildSpreadsheet(curricularCourse, semester);
        writeFile(response, getFileName(curricularCourse, semester), "application/vnd.ms-excel", content);

        return null;
    }

    private byte[] buildSpreadsheet(CurricularCourse curricularCourse, ExecutionSemester semester) throws IOException {

        final List<Enrolment> enrolments = curricularCourse.getEnrolmentsByAcademicInterval(semester.getAcademicInterval());

        // sort by person name
        Collections.sort(enrolments, new Comparator<Enrolment>() {
            @Override
            public int compare(Enrolment o1, Enrolment o2) {
                return o1.getPerson().getName().compareTo(o2.getPerson().getName());
            }
        });

        final SpreadsheetBuilder builder = new SpreadsheetBuilder();
        builder.addSheet(semester.getQualifiedName().replace("/", "_"), new SheetData<Enrolment>(enrolments) {

            @Override
            protected void makeLine(final Enrolment enrolment) {
                // TODO: add to phd resource bundle
                addCell(getMessageFromResource("label.phd.number"), enrolment.getRegistration().getNumber());
                addCell(getMessageFromResource("label.phd.name"), enrolment.getPerson().getName());
                addCell(getMessageFromResource("label.phd.email"), enrolment.getPerson()
                        .getInstitutionalOrDefaultEmailAddressValue());
            }
        });

        final ByteArrayOutputStream output = new ByteArrayOutputStream();
        builder.build(WorkbookExportFormat.EXCEL, output);
        return output.toByteArray();
    }

    private String getFileName(final CurricularCourse curricularCourse, final ExecutionSemester semester) {
        return curricularCourse.getName(semester).replace(" ", "_") + ".xls";
    }

    public ActionForward manageEnrolments(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) {

        ManageEnrolmentsBean bean = getRenderedObject("manageEnrolmentsBean");
        if (bean == null) {
            bean = new ManageEnrolmentsBean();
            bean.setSemester(ExecutionSemester.readActualExecutionSemester());
            bean.setCurricularCourse((CurricularCourse) getDomainObject(request, "degreeModuleOid"));
        }

        filterEnrolments(bean);
        request.setAttribute("manageEnrolmentsBean", bean);

        return mapping.findForward("showEnrolments");
    }

    private void filterEnrolments(final ManageEnrolmentsBean bean) {
        bean.setRemainingEnrolments(bean.getCurricularCourse().getEnrolmentsByAcademicInterval(
                bean.getSemester().getAcademicInterval()));
    }

}
TOP

Related Classes of org.fenixedu.academic.ui.struts.action.phd.coordinator.PhdEnrolmentsManagementDA

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.