/**
* 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.teacher;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections.comparators.ReverseComparator;
import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.fenixedu.academic.domain.ExecutionCourse;
import org.fenixedu.academic.domain.Lesson;
import org.fenixedu.academic.domain.LessonPlanning;
import org.fenixedu.academic.domain.Professorship;
import org.fenixedu.academic.domain.Shift;
import org.fenixedu.academic.domain.ShiftType;
import org.fenixedu.academic.domain.Summary;
import org.fenixedu.academic.domain.Teacher;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.dto.ShowSummariesBean;
import org.fenixedu.academic.dto.ShowSummariesBean.ListSummaryType;
import org.fenixedu.academic.dto.ShowSummariesBean.SummariesOrder;
import org.fenixedu.academic.dto.SummariesCalendarBean;
import org.fenixedu.academic.dto.SummariesCalendarBean.LessonCalendarViewType;
import org.fenixedu.academic.dto.SummariesManagementBean;
import org.fenixedu.academic.dto.SummariesManagementBean.SummaryType;
import org.fenixedu.academic.dto.teacher.executionCourse.NextPossibleSummaryLessonsAndDatesBean;
import org.fenixedu.academic.dto.teacher.executionCourse.SummaryTeacherBean;
import org.fenixedu.academic.predicate.AccessControl;
import org.fenixedu.academic.service.services.exceptions.FenixServiceException;
import org.fenixedu.academic.service.services.exceptions.NotAuthorizedException;
import org.fenixedu.academic.service.services.teacher.CreateSummary;
import org.fenixedu.academic.service.services.teacher.DeleteSummary;
import org.fenixedu.academic.ui.struts.action.base.FenixDispatchAction;
import org.fenixedu.academic.ui.struts.action.exceptions.FenixActionException;
import org.fenixedu.academic.ui.struts.action.teacher.executionCourse.ExecutionCourseBaseAction;
import org.fenixedu.academic.util.HourMinuteSecond;
import org.fenixedu.academic.util.MultiLanguageString;
import org.fenixedu.bennu.struts.annotations.Forward;
import org.fenixedu.bennu.struts.annotations.Forwards;
import org.fenixedu.bennu.struts.annotations.Mapping;
import org.joda.time.DateTimeFieldType;
import org.joda.time.Partial;
import org.joda.time.YearMonthDay;
import pt.ist.fenixWebFramework.renderers.components.state.IViewState;
import pt.ist.fenixWebFramework.renderers.utils.RenderUtils;
import pt.ist.fenixframework.FenixFramework;
/**
* @author Manuel Pinto
*
* Sep/2006 Fenix
*
*/
@Mapping(module = "teacher", path = "/summariesManagement", formBean = "summariesManagementForm",
functionality = ManageExecutionCourseDA.class)
@Forwards({ @Forward(name = "prepareInsertSummary", path = "/teacher/executionCourse/createSummary.jsp"),
@Forward(name = "prepareShowSummaries", path = "/teacher/executionCourse/showSummaries.jsp"),
@Forward(name = "showSummariesCalendar", path = "/teacher/executionCourse/showSummariesCalendar.jsp"),
@Forward(name = "prepareInsertComplexSummary", path = "/teacher/executionCourse/createComplexSummary.jsp") })
public class SummariesManagementDA extends FenixDispatchAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
final IViewState viewState = RenderUtils.getViewState();
ExecutionCourse executionCourse = null;
if (viewState != null && viewState.getMetaObject().getObject() instanceof SummariesManagementBean) {
executionCourse = ((SummariesManagementBean) viewState.getMetaObject().getObject()).getExecutionCourse();
} else if (viewState != null && viewState.getMetaObject().getObject() instanceof ShowSummariesBean) {
executionCourse = ((ShowSummariesBean) viewState.getMetaObject().getObject()).getExecutionCourse();
} else if (viewState != null && viewState.getMetaObject().getObject() instanceof NextPossibleSummaryLessonsAndDatesBean) {
executionCourse =
((NextPossibleSummaryLessonsAndDatesBean) viewState.getMetaObject().getObject()).getLesson().getShift()
.getDisciplinaExecucao();
} else {
executionCourse = readAndSaveExecutionCourse(request);
}
String teacherId = request.getParameter("teacherId_");
Teacher loggedTeacher;
Professorship loggedProfessorship;
if (!StringUtils.isEmpty(teacherId)) {
loggedTeacher = Teacher.readByIstId(teacherId);
loggedProfessorship = loggedTeacher.getProfessorshipByExecutionCourse(executionCourse);
} else {
loggedProfessorship = AccessControl.getPerson().getProfessorshipByExecutionCourse(executionCourse);
}
if (loggedProfessorship == null) {
throw new FenixActionException("error.summariesManagement.empty.loggedProfessorship");
}
request.setAttribute("loggedTeacherProfessorship", loggedProfessorship);
request.setAttribute("loggedIsResponsible", loggedProfessorship.isResponsibleFor());
request.setAttribute("executionCourse", executionCourse);
request.setAttribute("executionCourseID", executionCourse.getExternalId());
request.setAttribute("professorship", loggedProfessorship);
ActionForward forward = super.execute(mapping, actionForm, request, response);
return processForward(request, forward);
}
protected ActionForward processForward(HttpServletRequest request, ActionForward forward) {
return ExecutionCourseBaseAction.forward(request, forward.getPath());
}
public ActionForward prepareInsertSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
buildSummariesManagementBean(form, request, SummaryType.NORMAL_SUMMARY);
return mapping.findForward("prepareInsertSummary");
}
public ActionForward prepareInsertTaughtSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
invalidateAndReloadView(request, "summariesManagementBeanWithNotTaughtSummary");
return mapping.findForward("prepareInsertSummary");
}
public ActionForward prepareInsertNotTaughtSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
invalidateAndReloadView(request, "summariesManagementBeanWithSummary");
return mapping.findForward("prepareInsertSummary");
}
public ActionForward prepareInsertExtraSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
buildSummariesManagementBean(form, request, SummaryType.EXTRA_SUMMARY);
request.setAttribute("notShowLessonPlanningsAndSummaries", Boolean.TRUE);
return mapping.findForward("prepareInsertSummary");
}
public ActionForward goToInsertSummaryAgain(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
DynaActionForm dynaActionForm = (DynaActionForm) form;
final IViewState viewState = RenderUtils.getViewState();
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
readAndSaveTeacher(bean, (DynaActionForm) form, request, mapping);
return goToSummaryManagementPageAgain(mapping, request, dynaActionForm, bean);
}
public ActionForward chooseLessonPlanning(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
IViewState summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithLessonPlanning");
if (summaryViewState == null) {
summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithSummary");
}
SummariesManagementBean bean = (SummariesManagementBean) summaryViewState.getMetaObject().getObject();
LessonPlanning lessonPlanning = bean.getLessonPlanning();
if (lessonPlanning != null) {
bean.setSummaryText(lessonPlanning.getPlanning());
bean.setTitle(lessonPlanning.getTitle());
bean.setLastSummary(null);
}
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
}
public ActionForward chooseLastSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
IViewState summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithLastSummary");
if (summaryViewState == null) {
summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithSummary");
}
SummariesManagementBean bean = (SummariesManagementBean) summaryViewState.getMetaObject().getObject();
Summary lastSummary = bean.getLastSummary();
if (lastSummary != null) {
bean.setSummaryText(lastSummary.getSummaryText());
bean.setTitle(lastSummary.getTitle());
bean.setLessonPlanning(null);
}
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
}
public ActionForward chooseShift(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
final IViewState viewState = RenderUtils.getViewState("summariesManagementBeanWithShifts");
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
bean.setLesson(null);
bean.setSummaryDate(null);
bean.setLessonType(null);
if (bean.getSummaryType() != null && bean.getSummaryType().equals(SummaryType.EXTRA_SUMMARY)) {
request.setAttribute("notShowLessonPlanningsAndSummaries", Boolean.TRUE);
}
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
}
public ActionForward chooseLesson(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
final IViewState viewState = RenderUtils.getViewState("summariesManagementBeanWithLessons");
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
bean.setSummaryDate(null);
bean.setLessonType(null);
Lesson lesson = bean.getLesson();
if (lesson != null && lesson.getShift().getCourseLoadsSet().size() == 1) {
bean.setLessonType(lesson.getShift().getCourseLoadsSet().iterator().next().getType());
}
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
}
public ActionForward chooseLessonType(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
final IViewState viewState = RenderUtils.getViewState("summariesManagementBeanWithLessonTypes");
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
}
public ActionForward chooseDate(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
DynaActionForm dynaActionForm = (DynaActionForm) form;
final IViewState viewState = RenderUtils.getViewState("summariesManagementBeanWithDate");
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
return goToSummaryManagementPageAgain(mapping, request, dynaActionForm, bean);
}
public ActionForward chooseSummaryType(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
DynaActionForm dynaActionForm = (DynaActionForm) form;
final IViewState viewState = RenderUtils.getViewState();
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
bean.setShift(null);
bean.setLesson(null);
bean.setSummaryDate(null);
bean.setSummaryRoom(null);
bean.setSummaryTime(null);
bean.setLessonType(null);
if (bean.getSummaryType() != null && bean.getSummaryType().equals(SummaryType.EXTRA_SUMMARY)) {
request.setAttribute("notShowLessonPlanningsAndSummaries", Boolean.TRUE);
}
return goToSummaryManagementPageAgain(mapping, request, dynaActionForm, bean);
}
public ActionForward createSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
final IViewState viewState = RenderUtils.getViewState();
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
readAndSaveTeacher(bean, (DynaActionForm) form, request, mapping);
if (bean.getTaught() == false) {
bean.setTitle(new MultiLanguageString("Not Taught."));
}
try {
if (bean.getSummary() == null) {
CreateSummary.runCreateSummary(bean);
} else {
CreateSummary.runEditSummary(bean);
}
} catch (DomainException e) {
addActionMessage(request, e.getMessage());
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
} catch (NotAuthorizedException e) {
addActionMessage(request, e.getMessage());
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
}
return prepareShowSummaries(mapping, form, request, response);
}
public ActionForward createSummaryAndNew(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
final IViewState viewState = RenderUtils.getViewState();
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
readAndSaveTeacher(bean, (DynaActionForm) form, request, mapping);
try {
CreateSummary.runCreateSummary(bean);
} catch (DomainException e) {
addActionMessage(request, e.getMessage());
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
} catch (NotAuthorizedException e) {
addActionMessage(request, e.getMessage());
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
}
RenderUtils.invalidateViewState();
return prepareInsertSummary(mapping, form, request, response);
}
public ActionForward createSummaryAndSame(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
final IViewState viewState = RenderUtils.getViewState();
SummariesManagementBean bean = (SummariesManagementBean) viewState.getMetaObject().getObject();
readAndSaveTeacher(bean, (DynaActionForm) form, request, mapping);
try {
CreateSummary.runCreateSummary(bean);
} catch (DomainException e) {
addActionMessage(request, e.getMessage());
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
} catch (NotAuthorizedException e) {
addActionMessage(request, e.getMessage());
return goToSummaryManagementPageAgain(mapping, request, (DynaActionForm) form, bean);
}
RenderUtils.invalidateViewState();
DynaActionForm dynaActionForm = (DynaActionForm) form;
Professorship loggedProfessorship = (Professorship) request.getAttribute("loggedTeacherProfessorship");
ExecutionCourse executionCourse = (ExecutionCourse) request.getAttribute("executionCourse");
dynaActionForm.set("teacher", loggedProfessorship.getExternalId().toString());
SummariesManagementBean newBean =
new SummariesManagementBean(SummariesManagementBean.SummaryType.NORMAL_SUMMARY, executionCourse,
loggedProfessorship, null);
newBean.setSummaryText(bean.getSummaryText());
newBean.setTitle(bean.getTitle());
request.setAttribute("summariesManagementBean", newBean);
return mapping.findForward("prepareInsertSummary");
}
public ActionForward prepareEditSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
Professorship teacherLogged = ((Professorship) request.getAttribute("loggedTeacherProfessorship"));
DynaActionForm dynaActionForm = (DynaActionForm) form;
Summary summary = getSummaryFromParameter(request);
SummaryType summaryType;
if (summary.isExtraSummary()) {
summaryType = SummaryType.EXTRA_SUMMARY;
request.setAttribute("notShowLessonPlanningsAndSummaries", Boolean.TRUE);
} else {
summaryType = SummaryType.NORMAL_SUMMARY;
}
DateTimeFieldType[] dateTimeFieldTypes = { DateTimeFieldType.hourOfDay(), DateTimeFieldType.minuteOfHour() };
HourMinuteSecond time = summary.getSummaryHourHourMinuteSecond();
int[] timeArray = { time.getHour(), time.getMinuteOfHour() };
Partial timePartial = new Partial(dateTimeFieldTypes, timeArray);
SummariesManagementBean bean =
new SummariesManagementBean(summary.getTitle(), summary.getSummaryText(), summary.getStudentsNumber(),
summaryType, summary.getProfessorship(), summary.getTeacherName(), summary.getTeacher(),
summary.getShift(), summary.getLesson(), summary.getSummaryDateYearMonthDay(), summary.getRoom(),
timePartial, summary, teacherLogged, summary.getSummaryType(), summary.getTaught());
return goToSummaryManagementPageAgain(mapping, request, dynaActionForm, bean);
}
public ActionForward deleteSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
Summary summary = getSummaryFromParameter(request);
Professorship professorshipLogged = (Professorship) request.getAttribute("loggedTeacherProfessorship");
ExecutionCourse executionCourse = (ExecutionCourse) request.getAttribute("executionCourse");
try {
DeleteSummary.runDeleteSummary(executionCourse, summary, professorshipLogged);
} catch (DomainException e) {
addActionMessage(request, e.getMessage());
return prepareShowSummaries(mapping, form, request, response);
} catch (NotAuthorizedException e) {
addActionMessage(request, e.getMessage());
return prepareShowSummaries(mapping, form, request, response);
}
return prepareShowSummaries(mapping, form, request, response);
}
public ActionForward prepareShowSummaries(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
ExecutionCourse executionCourse = (ExecutionCourse) request.getAttribute("executionCourse");
Professorship professorshipLogged = (Professorship) request.getAttribute("loggedTeacherProfessorship");
Set<Summary> teacherSummaries = new TreeSet<Summary>(Summary.COMPARATOR_BY_DATE_AND_HOUR);
teacherSummaries.addAll(professorshipLogged.getAssociatedSummariesSet());
readAndSaveNextPossibleSummaryLessonsAndDates(request, executionCourse);
request.setAttribute("showSummariesBean", new ShowSummariesBean(new SummaryTeacherBean(professorshipLogged),
executionCourse, ListSummaryType.ALL_CONTENT, professorshipLogged));
if (professorshipLogged.getTeacher() != null) {
request.setAttribute("teacherId", professorshipLogged.getTeacher().getPerson().getUsername());
}
request.setAttribute("summaries", teacherSummaries);
return mapping.findForward("prepareShowSummaries");
}
public ActionForward showSummariesPostBack(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
final IViewState viewState = RenderUtils.getViewState();
ShowSummariesBean bean = (ShowSummariesBean) viewState.getMetaObject().getObject();
ExecutionCourse executionCourse = bean.getExecutionCourse();
ShiftType shiftType = bean.getShiftType();
Shift shift = bean.getShift();
SummaryTeacherBean summaryTeacher = bean.getSummaryTeacher();
Professorship teacher = (summaryTeacher != null) ? summaryTeacher.getProfessorship() : null;
Boolean otherTeachers = (summaryTeacher != null) ? summaryTeacher.getOthers() : null;
SummariesOrder summariesOrder = bean.getSummariesOrder();
Set<Summary> summariesToShow =
summariesOrder == null || summariesOrder.equals(SummariesOrder.DECREASING) ? new TreeSet<Summary>(
Summary.COMPARATOR_BY_DATE_AND_HOUR) : new TreeSet<Summary>(new ReverseComparator(
Summary.COMPARATOR_BY_DATE_AND_HOUR));
for (Summary summary : executionCourse.getAssociatedSummariesSet()) {
boolean insert = true;
if ((shift != null && (summary.getShift() == null || !summary.getShift().equals(shift)))
|| (teacher != null && (summary.getProfessorship() == null || !summary.getProfessorship().equals(teacher)))
|| (shiftType != null && (summary.getSummaryType() == null || !summary.getSummaryType().equals(shiftType)))
|| (otherTeachers != null && otherTeachers && summary.getProfessorship() != null)) {
insert = false;
}
if (insert) {
summariesToShow.add(summary);
}
}
readAndSaveNextPossibleSummaryLessonsAndDates(request, executionCourse);
request.setAttribute("showSummariesBean", bean);
request.setAttribute("summaries", summariesToShow);
return mapping.findForward("prepareShowSummaries");
}
public ActionForward prepareCreateComplexSummaryInSummariesCalendarMode(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws FenixActionException {
Professorship loggedProfessorship = (Professorship) request.getAttribute("loggedTeacherProfessorship");
ExecutionCourse executionCourse = (ExecutionCourse) request.getAttribute("executionCourse");
NextPossibleSummaryLessonsAndDatesBean nextSummaryDateBean = getNextSummaryDateBeanFromParameter(request);
if (!executionCourse.getLessons().contains(nextSummaryDateBean.getLesson())) {
throw new FenixActionException();
}
DynaActionForm dynaActionForm = (DynaActionForm) form;
List<NextPossibleSummaryLessonsAndDatesBean> nextPossibleLessonsDates =
new ArrayList<NextPossibleSummaryLessonsAndDatesBean>();
nextPossibleLessonsDates.add(nextSummaryDateBean);
SummariesManagementBean bean =
new SummariesManagementBean(SummariesManagementBean.SummaryType.NORMAL_SUMMARY, executionCourse,
loggedProfessorship, nextPossibleLessonsDates);
Shift shift = nextSummaryDateBean.getLesson().getShift();
if (shift.getCourseLoadsSet().size() != 1) {
request.setAttribute("notShowLessonPlanningsAndSummaries", Boolean.TRUE);
} else {
nextSummaryDateBean.setLessonType(shift.getCourseLoadsSet().iterator().next().getType());
bean.setLessonType(nextSummaryDateBean.getLessonType());
}
request.setAttribute("summariesManagementBean", bean);
dynaActionForm.set("teacher", loggedProfessorship.getExternalId().toString());
return mapping.findForward("prepareInsertComplexSummary");
}
public ActionForward prepareCreateTaughtComplexSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
invalidateAndReloadView(request, "summariesManagementBeanWithNotTaughtSummary");
return mapping.findForward("prepareInsertComplexSummary");
}
private void invalidateAndReloadView(HttpServletRequest request, String view) {
final IViewState summaryViewState = RenderUtils.getViewState(view);
SummariesManagementBean summaryBean = (SummariesManagementBean) summaryViewState.getMetaObject().getObject();
if (summaryBean.getTitle().equals(new MultiLanguageString("Not Taught."))) {
summaryBean.setTitle(new MultiLanguageString(""));
}
RenderUtils.invalidateViewState(view);
request.setAttribute("summariesManagementBean", summaryBean);
}
public ActionForward prepareCreateNotTaughtComplexSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
invalidateAndReloadView(request, "summariesManagementBeanWithSummary");
return mapping.findForward("prepareInsertComplexSummary");
}
public ActionForward prepareCreateComplexSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
Professorship loggedProfessorship = (Professorship) request.getAttribute("loggedTeacherProfessorship");
ExecutionCourse executionCourse = (ExecutionCourse) request.getAttribute("executionCourse");
DynaActionForm dynaActionForm = (DynaActionForm) form;
String[] selectedLessons = request.getParameterValues("selectedLessonAndDate");
if (selectedLessons == null || selectedLessons.length == 0) {
return goToInsertComplexSummaryAgain(request, mapping, response, form);
} else if (selectedLessons != null && selectedLessons.length != 0) {
boolean uniqueType = true;
ShiftType shiftType = null;
List<NextPossibleSummaryLessonsAndDatesBean> nextPossibleLessonsDates =
new ArrayList<NextPossibleSummaryLessonsAndDatesBean>();
for (String lessonRepresentation : selectedLessons) {
NextPossibleSummaryLessonsAndDatesBean nextLesson =
NextPossibleSummaryLessonsAndDatesBean.getNewInstance(lessonRepresentation);
if (nextLesson.getLesson().getShift().getCourseLoadsSet().size() == 1) {
nextLesson.setLessonType(nextLesson.getLesson().getShift().getCourseLoadsSet().iterator().next().getType());
}
nextPossibleLessonsDates.add(nextLesson);
ShiftType lessonType = null;
if (nextLesson.getLesson().getShift().getCourseLoadsSet().size() == 1) {
lessonType = nextLesson.getLesson().getShift().getCourseLoadsSet().iterator().next().getType();
if (shiftType == null) {
shiftType = lessonType;
} else if (!shiftType.equals(lessonType)) {
request.setAttribute("notShowLessonPlanningsAndSummaries", Boolean.TRUE);
uniqueType = false;
}
} else {
request.setAttribute("notShowLessonPlanningsAndSummaries", Boolean.TRUE);
uniqueType = false;
}
}
SummariesManagementBean bean =
new SummariesManagementBean(SummariesManagementBean.SummaryType.NORMAL_SUMMARY, executionCourse,
loggedProfessorship, nextPossibleLessonsDates);
bean.setTaught(true);
if (uniqueType) {
bean.setLessonType(shiftType);
}
request.setAttribute("summariesManagementBean", bean);
dynaActionForm.set("teacher", loggedProfessorship.getExternalId().toString());
return mapping.findForward("prepareInsertComplexSummary");
}
return prepareShowSummaries(mapping, form, request, response);
}
public ActionForward createComplexSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
SummariesManagementBean summaryBean = getSummariesManagementBean();
readAndSaveTeacher(summaryBean, (DynaActionForm) form, request, mapping);
for (NextPossibleSummaryLessonsAndDatesBean bean : summaryBean.getNextPossibleSummaryLessonsAndDatesBean()) {
summaryBean.setShift(bean.getLesson().getShift());
summaryBean.setLesson(bean.getLesson());
summaryBean.setSummaryDate(bean.getDate());
summaryBean.setStudentsNumber(bean.getStudentsNumber());
summaryBean.setLessonType(bean.getLessonType());
if (summaryBean.getTaught() == false) {
summaryBean.setTitle(new MultiLanguageString("Not Taught."));
}
try {
CreateSummary.runCreateSummary(summaryBean);
} catch (DomainException e) {
return returnToCreateComplexSummary(mapping, form, request, summaryBean, e);
} catch (NotAuthorizedException e) {
return returnToCreateComplexSummary(mapping, form, request, summaryBean, e);
}
}
return prepareShowSummaries(mapping, form, request, response);
}
private SummariesManagementBean getSummariesManagementBean() {
final IViewState summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithSummary");
if (summaryViewState != null) {
return (SummariesManagementBean) summaryViewState.getMetaObject().getObject();
}
final IViewState notTaughtSummaryViewState = RenderUtils.getViewState("summariesManagementBeanWithNotTaughtSummary");
if (notTaughtSummaryViewState != null) {
return (SummariesManagementBean) notTaughtSummaryViewState.getMetaObject().getObject();
}
return null;
}
public ActionForward chooseLessonPlanningToCreateComplexSummary(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
IViewState summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithLessonPlanning");
if (summaryViewState == null) {
summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithSummary");
}
SummariesManagementBean summaryBean = (SummariesManagementBean) summaryViewState.getMetaObject().getObject();
LessonPlanning lessonPlanning = summaryBean.getLessonPlanning();
if (lessonPlanning != null) {
summaryBean.setSummaryText(lessonPlanning.getPlanning());
summaryBean.setTitle(lessonPlanning.getTitle());
summaryBean.setLastSummary(null);
}
return returnToCreateComplexSummary(mapping, form, request, summaryBean, null);
}
public ActionForward chooseLastSummaryToCreateComplexSummary(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
IViewState summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithLastSummary");
if (summaryViewState == null) {
summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithSummary");
}
SummariesManagementBean summaryBean = (SummariesManagementBean) summaryViewState.getMetaObject().getObject();
Summary lastSummary = summaryBean.getLastSummary();
if (lastSummary != null) {
summaryBean.setSummaryText(lastSummary.getSummaryText());
summaryBean.setTitle(lastSummary.getTitle());
summaryBean.setLessonPlanning(null);
}
return returnToCreateComplexSummary(mapping, form, request, summaryBean, null);
}
public ActionForward showSummariesCalendar(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
ExecutionCourse executionCourse = getExecutinCourseFromParameter(request);
SummariesCalendarBean summariesCalendarBean = new SummariesCalendarBean(executionCourse);
Set<NextPossibleSummaryLessonsAndDatesBean> summariesCalendar =
new TreeSet<NextPossibleSummaryLessonsAndDatesBean>(
NextPossibleSummaryLessonsAndDatesBean.COMPARATOR_BY_DATE_AND_HOUR);
Set<Shift> associatedShifts = executionCourse.getAssociatedShifts();
for (Shift shift : associatedShifts) {
for (Lesson lesson : shift.getAssociatedLessonsSet()) {
for (YearMonthDay lessonDate : lesson.getAllLessonDates()) {
summariesCalendar.add(new NextPossibleSummaryLessonsAndDatesBean(lesson, lessonDate));
}
}
addExtraSummariesToSummariesCalendar(summariesCalendar, shift, summariesCalendarBean.getCalendarViewType());
}
request.setAttribute("showSummariesCalendarBean", summariesCalendarBean);
request.setAttribute("summariesCalendarResult", summariesCalendar);
return mapping.findForward("showSummariesCalendar");
}
public ActionForward showSummariesCalendarPostBack(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
final IViewState viewState = RenderUtils.getViewState();
SummariesCalendarBean bean = (SummariesCalendarBean) viewState.getMetaObject().getObject();
ExecutionCourse executionCourse = bean.getExecutionCourse();
Shift shift = bean.getShift();
ShiftType shiftType = bean.getShiftType();
LessonCalendarViewType calendarViewType = bean.getCalendarViewType();
Set<NextPossibleSummaryLessonsAndDatesBean> summariesCalendar =
new TreeSet<NextPossibleSummaryLessonsAndDatesBean>(
NextPossibleSummaryLessonsAndDatesBean.COMPARATOR_BY_DATE_AND_HOUR);
for (Lesson lesson : executionCourse.getLessons()) {
boolean insert = true;
if ((shift != null && !shift.getAssociatedLessonsSet().contains(lesson))
|| (shiftType != null && !lesson.getShift().containsType(shiftType))) {
insert = false;
}
if (insert) {
for (YearMonthDay lessonDate : lesson.getAllLessonDates()) {
if ((calendarViewType.equals(LessonCalendarViewType.ALL_LESSONS))
|| (calendarViewType.equals(LessonCalendarViewType.PAST_LESSON) && lesson.isTimeValidToInsertSummary(
new HourMinuteSecond(), lessonDate))
|| (calendarViewType.equals(LessonCalendarViewType.PAST_LESSON_WITHOUT_SUMMARY) && lesson
.getSummaryByDate(lessonDate) == null)
&& lesson.isTimeValidToInsertSummary(new HourMinuteSecond(), lessonDate)) {
summariesCalendar.add(new NextPossibleSummaryLessonsAndDatesBean(lesson, lessonDate));
}
}
}
}
// Extra Summaries
if (shift != null) {
if (shiftType == null) {
addExtraSummariesToSummariesCalendar(summariesCalendar, shift, calendarViewType);
}
} else {
for (Shift executionCourseShift : executionCourse.getAssociatedShifts()) {
if (shiftType == null) {
addExtraSummariesToSummariesCalendar(summariesCalendar, executionCourseShift, calendarViewType);
}
}
}
request.setAttribute("summariesCalendarResult", summariesCalendar);
request.setAttribute("showSummariesCalendarBean", bean);
return mapping.findForward("showSummariesCalendar");
}
// -------- Private Methods --------- //
private void addExtraSummariesToSummariesCalendar(Set<NextPossibleSummaryLessonsAndDatesBean> summariesCalendar, Shift shift,
LessonCalendarViewType calendarViewType) {
if (!calendarViewType.equals(LessonCalendarViewType.PAST_LESSON_WITHOUT_SUMMARY)) {
List<Summary> extraSummaries = shift.getExtraSummaries();
for (Summary summary : extraSummaries) {
if (calendarViewType.equals(LessonCalendarViewType.ALL_LESSONS)
|| (calendarViewType.equals(LessonCalendarViewType.PAST_LESSON) && summary.getSummaryDateTime()
.isBeforeNow())) {
summariesCalendar.add(new NextPossibleSummaryLessonsAndDatesBean(shift, summary.getSummaryDateYearMonthDay(),
summary.getSummaryHourHourMinuteSecond(), summary.getRoom()));
}
}
}
}
private void buildSummariesManagementBean(ActionForm form, HttpServletRequest request, SummaryType summaryType) {
DynaActionForm dynaActionForm = (DynaActionForm) form;
Professorship loggedProfessorship = (Professorship) request.getAttribute("loggedTeacherProfessorship");
ExecutionCourse executionCourse = (ExecutionCourse) request.getAttribute("executionCourse");
dynaActionForm.set("teacher", loggedProfessorship.getExternalId().toString());
request.setAttribute("summariesManagementBean", new SummariesManagementBean(summaryType, executionCourse,
loggedProfessorship, null));
}
private ActionForward goToInsertComplexSummaryAgain(HttpServletRequest request, ActionMapping mapping,
HttpServletResponse response, ActionForm form) {
final IViewState summaryViewState = RenderUtils.getViewState("summariesManagementBeanWithSummary");
if (summaryViewState != null) {
SummariesManagementBean summaryBean = (SummariesManagementBean) summaryViewState.getMetaObject().getObject();
readAndSaveTeacher(summaryBean, (DynaActionForm) form, request, mapping);
return returnToCreateComplexSummary(mapping, form, request, summaryBean, null);
}
return prepareShowSummaries(mapping, form, request, response);
}
private ActionForward returnToCreateComplexSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
SummariesManagementBean summaryBean, Exception e) {
if (e != null) {
addActionMessage(request, e.getMessage());
}
setTeacherDataToFormBean((DynaActionForm) form, summaryBean);
request.setAttribute("summariesManagementBean", summaryBean);
return mapping.findForward("prepareInsertComplexSummary");
}
private void readAndSaveTeacher(SummariesManagementBean bean, DynaActionForm dynaActionForm, HttpServletRequest request,
ActionMapping mapping) {
Professorship professorship = getProfessorshipFromParameter(request);
if (professorship != null) {
bean.setProfessorship(professorship);
bean.setTeacher(null);
bean.setTeacherName("");
} else if (dynaActionForm.getString("teacher").equals("-1")
&& !StringUtils.isEmpty(dynaActionForm.getString("teacherName"))) {
bean.setTeacherName(dynaActionForm.getString("teacherName"));
bean.setTeacher(null);
bean.setProfessorship(null);
} else if (dynaActionForm.getString("teacher").equals("0") && !StringUtils.isEmpty(dynaActionForm.getString("teacherId"))) {
Teacher teacher = null;
try {
teacher = Teacher.readByIstId(dynaActionForm.getString("teacherId"));
} catch (NumberFormatException e) {
addActionMessage(request, "error.summary.teacherNumber.invalid");
}
if (teacher == null) {
addActionMessage(request, "error.summary.inexistent.teacher");
}
bean.setTeacher(teacher);
bean.setTeacherName(null);
bean.setProfessorship(null);
}
}
private void readAndSaveNextPossibleSummaryLessonsAndDates(HttpServletRequest request, ExecutionCourse executionCourse) {
Set<NextPossibleSummaryLessonsAndDatesBean> possibleLessonsAndDates =
new TreeSet<NextPossibleSummaryLessonsAndDatesBean>(
NextPossibleSummaryLessonsAndDatesBean.COMPARATOR_BY_DATE_AND_HOUR);
for (Shift shift : executionCourse.getAssociatedShifts()) {
for (Lesson lesson : shift.getAssociatedLessonsSet()) {
YearMonthDay nextPossibleSummaryDate = lesson.getNextPossibleSummaryDate();
if (nextPossibleSummaryDate != null) {
possibleLessonsAndDates.add(new NextPossibleSummaryLessonsAndDatesBean(lesson, nextPossibleSummaryDate));
}
}
}
request.setAttribute("nextPossibleLessonsDates", possibleLessonsAndDates);
}
private ActionForward goToSummaryManagementPageAgain(ActionMapping mapping, HttpServletRequest request,
DynaActionForm dynaActionForm, SummariesManagementBean bean) {
setTeacherDataToFormBean(dynaActionForm, bean);
request.setAttribute("summariesManagementBean", bean);
return mapping.findForward("prepareInsertSummary");
}
private void setTeacherDataToFormBean(DynaActionForm dynaActionForm, SummariesManagementBean bean) {
if (!bean.getTeacherChoose().equals("")) {
dynaActionForm.set("teacher", bean.getTeacherChoose());
dynaActionForm.set("teacherName", (bean.getTeacherName() != null) ? bean.getTeacherName() : "");
dynaActionForm.set("teacherId",
(bean.getTeacher() != null) ? String.valueOf(bean.getTeacher().getPerson().getUsername()) : "");
}
}
private ExecutionCourse readAndSaveExecutionCourse(HttpServletRequest request) {
ExecutionCourse executionCourse = getExecutinCourseFromParameter(request);
request.setAttribute("executionCourse", executionCourse);
return executionCourse;
}
private ExecutionCourse getExecutinCourseFromParameter(final HttpServletRequest request) {
final String executionCourseIDString =
request.getParameterMap().containsKey("executionCourseID") ? request.getParameter("executionCourseID") : (String) request
.getAttribute("executionCourseID");
return FenixFramework.getDomainObject(executionCourseIDString);
}
private Summary getSummaryFromParameter(final HttpServletRequest request) {
final String summaryIDString =
request.getParameterMap().containsKey("summaryID") ? request.getParameter("summaryID") : (String) request
.getAttribute("summaryID");
return FenixFramework.getDomainObject(summaryIDString);
}
private NextPossibleSummaryLessonsAndDatesBean getNextSummaryDateBeanFromParameter(final HttpServletRequest request) {
final String summaryDateString =
request.getParameterMap().containsKey("summaryDate") ? request.getParameter("summaryDate") : (String) request
.getAttribute("summaryDate");
return StringUtils.isEmpty(summaryDateString) ? null : NextPossibleSummaryLessonsAndDatesBean
.getNewInstance(summaryDateString);
}
private Professorship getProfessorshipFromParameter(final HttpServletRequest request) {
final String professorshipIDString =
request.getParameterMap().containsKey("teacher") ? request.getParameter("teacher") : (String) request
.getAttribute("teacher");
if (!StringUtils.isEmpty(professorshipIDString)
&& !(professorshipIDString.equals("0") || professorshipIDString.equals("-1"))) {
return FenixFramework.getDomainObject(professorshipIDString);
}
return null;
}
}