/** * 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.administrativeOffice.gradeSubmission; import java.util.Collection; import java.util.HashSet; 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.apache.struts.action.ActionMessages; import org.apache.struts.action.DynaActionForm; import org.fenixedu.academic.domain.Enrolment; import org.fenixedu.academic.domain.EnrolmentEvaluation; import org.fenixedu.academic.domain.MarkSheet; import org.fenixedu.academic.domain.MarkSheetState; import org.fenixedu.academic.domain.exceptions.DomainException; import org.fenixedu.academic.dto.degreeAdministrativeOffice.gradeSubmission.MarkSheetEnrolmentEvaluationBean; import org.fenixedu.academic.dto.degreeAdministrativeOffice.gradeSubmission.MarkSheetManagementEditBean; import org.fenixedu.academic.service.services.administrativeOffice.gradeSubmission.EditMarkSheet; import org.fenixedu.academic.service.services.exceptions.FenixServiceException; import org.fenixedu.academic.service.services.exceptions.InvalidArgumentsServiceException; import org.fenixedu.bennu.struts.annotations.Forward; import org.fenixedu.bennu.struts.annotations.Forwards; import org.fenixedu.bennu.struts.annotations.Mapping; import pt.ist.fenixWebFramework.renderers.utils.RenderUtils; @Mapping(path = "/editMarkSheet", module = "academicAdministration", formBean = "markSheetManagementForm", input = "/markSheetManagement.do?method=prepareSearchMarkSheet", functionality = MarkSheetSearchDispatchAction.class) @Forwards({ @Forward(name = "editMarkSheet", path = "/academicAdministration/gradeSubmission/editMarkSheet.jsp"), @Forward(name = "searchMarkSheetFilled", path = "/academicAdministration/markSheetManagement.do?method=prepareSearchMarkSheetFilled") }) public class MarkSheetEditDispatchAction extends MarkSheetDispatchAction { public ActionForward prepareEditMarkSheet(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { MarkSheetManagementEditBean editBean = new MarkSheetManagementEditBean(); fillMarkSheetBean(actionForm, request, editBean); DynaActionForm form = (DynaActionForm) actionForm; MarkSheet markSheet = getDomainObject(form, "msID"); editBean.setTeacherId(markSheet.getResponsibleTeacher().getPerson().getUsername()); editBean.setEvaluationDate(markSheet.getEvaluationDateDateTime().toDate()); editBean.setMarkSheet(markSheet); editBean.setEnrolmentEvaluationBeansToEdit(getEnrolmentEvaluationBeansToEdit(markSheet)); if (markSheet.getMarkSheetState() == MarkSheetState.NOT_CONFIRMED) { editBean.setEnrolmentEvaluationBeansToAppend(getEnrolmentEvaluationBeansToAppend(markSheet)); } return mapping.findForward("editMarkSheet"); } public ActionForward updateMarkSheet(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws FenixServiceException { MarkSheetManagementEditBean editBean = getMarkSheetManagementEditBean(); request.setAttribute("edit", editBean); ActionMessages actionMessages = createActionMessages(); checkIfTeacherIsResponsibleOrCoordinator(editBean.getCurricularCourse(), editBean.getExecutionPeriod(), editBean.getTeacherId(), editBean.getTeacher(), request, editBean.getMarkSheet().getEvaluationSeason(), actionMessages); checkIfEvaluationDateIsInExamsPeriod(editBean.getDegreeCurricularPlan(), editBean.getExecutionPeriod(), editBean.getEvaluationDate(), editBean.getMarkSheet().getEvaluationSeason(), request, actionMessages); if (actionMessages.isEmpty()) { try { EditMarkSheet.run(editBean.getMarkSheet(), editBean.getTeacher(), editBean.getEvaluationDate()); editBean.setEnrolmentEvaluationBeansToEdit(getEnrolmentEvaluationBeansToEdit(editBean.getMarkSheet())); RenderUtils.invalidateViewState("edit-marksheet-enrolments"); editBean.setEnrolmentEvaluationBeansToAppend(getEnrolmentEvaluationBeansToAppend(editBean.getMarkSheet())); RenderUtils.invalidateViewState("append-enrolments"); } catch (InvalidArgumentsServiceException e) { addMessage(request, actionMessages, e.getMessage()); } catch (DomainException e) { addMessage(request, actionMessages, e.getMessage(), e.getArgs()); } } return mapping.findForward("editMarkSheet"); } public ActionForward editMarkSheet(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws FenixServiceException { MarkSheetManagementEditBean editBean = getMarkSheetManagementEditBean(); ActionMessages actionMessages = createActionMessages(); try { EditMarkSheet.run(editBean); return mapping.findForward("searchMarkSheetFilled"); } catch (InvalidArgumentsServiceException e) { addMessage(request, actionMessages, e.getMessage()); } catch (DomainException e) { addMessage(request, actionMessages, e.getMessage(), e.getArgs()); } request.setAttribute("edit", editBean); return mapping.findForward("editMarkSheet"); } private MarkSheetManagementEditBean getMarkSheetManagementEditBean() { return (MarkSheetManagementEditBean) RenderUtils.getViewState("edit-markSheet").getMetaObject().getObject(); } private Collection<MarkSheetEnrolmentEvaluationBean> getEnrolmentEvaluationBeansToEdit(MarkSheet markSheet) { Collection<MarkSheetEnrolmentEvaluationBean> enrolmentEvaluationBeansToEdit = new HashSet<MarkSheetEnrolmentEvaluationBean>(); for (EnrolmentEvaluation enrolmentEvaluation : markSheet.getEnrolmentEvaluationsSet()) { MarkSheetEnrolmentEvaluationBean enrolmentEvaluationBean = new MarkSheetEnrolmentEvaluationBean(); enrolmentEvaluationBean.setGradeValue(enrolmentEvaluation.getGradeValue()); enrolmentEvaluationBean.setEvaluationDate(enrolmentEvaluation.getExamDate()); enrolmentEvaluationBean.setEnrolment(enrolmentEvaluation.getEnrolment()); enrolmentEvaluationBean.setEnrolmentEvaluation(enrolmentEvaluation); enrolmentEvaluationBeansToEdit.add(enrolmentEvaluationBean); } return enrolmentEvaluationBeansToEdit; } private Collection<MarkSheetEnrolmentEvaluationBean> getEnrolmentEvaluationBeansToAppend(MarkSheet markSheet) { Collection<Enrolment> enrolments = markSheet.getCurricularCourse().getEnrolmentsNotInAnyMarkSheet(markSheet.getEvaluationSeason(), markSheet.getExecutionPeriod()); Collection<MarkSheetEnrolmentEvaluationBean> enrolmentEvaluationBeansToAppend = new HashSet<MarkSheetEnrolmentEvaluationBean>(); for (Enrolment enrolment : enrolments) { MarkSheetEnrolmentEvaluationBean markSheetEnrolmentEvaluationBean = new MarkSheetEnrolmentEvaluationBean(); markSheetEnrolmentEvaluationBean.setEnrolment(enrolment); markSheetEnrolmentEvaluationBean.setEvaluationDate(markSheet.getEvaluationDate()); enrolmentEvaluationBeansToAppend.add(markSheetEnrolmentEvaluationBean); } return enrolmentEvaluationBeansToAppend; } }