/**
* 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.internationalRelatOffice.candidacy.erasmus;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.fenixedu.academic.domain.CurricularCourse;
import org.fenixedu.academic.domain.Enrolment;
import org.fenixedu.academic.domain.ExecutionSemester;
import org.fenixedu.academic.domain.StudentCurricularPlan;
import org.fenixedu.academic.domain.candidacyProcess.CandidacyProcessDocumentUploadBean;
import org.fenixedu.academic.domain.candidacyProcess.IndividualCandidacyProcess;
import org.fenixedu.academic.domain.candidacyProcess.erasmus.ApprovedLearningAgreementDocumentFile;
import org.fenixedu.academic.domain.candidacyProcess.erasmus.ErasmusAlert;
import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityIndividualApplication;
import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityIndividualApplicationProcess;
import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityIndividualApplicationProcessBean;
import org.fenixedu.academic.domain.caseHandling.Activity;
import org.fenixedu.academic.domain.curricularRules.executors.RuleResult;
import org.fenixedu.academic.domain.curricularRules.executors.ruleExecutors.CurricularRuleLevel;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.domain.exceptions.EnrollmentDomainException;
import org.fenixedu.academic.domain.studentCurriculum.CurriculumModule;
import org.fenixedu.academic.domain.studentCurriculum.NoCourseGroupCurriculumGroup;
import org.fenixedu.academic.domain.studentCurriculum.NoCourseGroupCurriculumGroupType;
import org.fenixedu.academic.dto.administrativeOffice.studentEnrolment.MobilityExtraEnrolmentBean;
import org.fenixedu.academic.dto.person.PersonBean;
import org.fenixedu.academic.dto.student.enrollment.bolonha.BolonhaStudentEnrollmentBean;
import org.fenixedu.academic.dto.student.enrollment.bolonha.CycleEnrolmentBean;
import org.fenixedu.academic.dto.student.enrollment.bolonha.ErasmusBolonhaStudentEnrollmentBean;
import org.fenixedu.academic.dto.student.enrollment.bolonha.ErasmusBolonhaStudentEnrollmentBean.ErasmusExtraCurricularEnrolmentBean;
import org.fenixedu.academic.predicate.IllegalDataAccessException;
import org.fenixedu.academic.report.candidacy.erasmus.LearningAgreementDocument;
import org.fenixedu.academic.service.services.exceptions.FenixServiceException;
import org.fenixedu.academic.service.services.student.administrativeOfficeServices.CreateExtraEnrolment;
import org.fenixedu.academic.service.services.student.enrolment.bolonha.EnrolBolonhaStudent;
import org.fenixedu.academic.service.services.student.enrolment.bolonha.EnrolInAffinityCycle;
import org.fenixedu.academic.ui.struts.FenixActionForm;
import org.fenixedu.academic.util.report.ReportsUtils;
import org.fenixedu.bennu.core.security.Authenticate;
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.YearMonthDay;
import pt.ist.fenixWebFramework.renderers.utils.RenderUtils;
import pt.ist.fenixframework.FenixFramework;
@Mapping(path = "/caseHandlingMobilityIndividualApplicationProcess", module = "internationalRelatOffice",
formBeanClass = FenixActionForm.class, functionality = ErasmusCandidacyProcessDA.class)
@Forwards({
@Forward(name = "intro",
path = "/internationalRelatOffice/caseHandlingMobilityApplicationProcess.do?method=listProcessAllowedActivities"),
@Forward(name = "list-allowed-activities", path = "/candidacy/erasmus/listIndividualCandidacyActivities.jsp"),
@Forward(name = "prepare-create-new-process", path = "/candidacy/erasmus/selectPersonForCandidacy.jsp"),
@Forward(name = "fill-personal-information", path = "/candidacy/erasmus/fillPersonalInformation.jsp"),
@Forward(name = "fill-candidacy-information", path = "/candidacy/erasmus/fillCandidacyInformation.jsp"),
@Forward(name = "fill-degree-information", path = "/candidacy/erasmus/fillDegreeInformation.jsp"),
@Forward(name = "fill-courses-information", path = "/candidacy/erasmus/fillCoursesInformation.jsp"),
@Forward(name = "edit-candidacy-personal-information", path = "/candidacy/erasmus/editPersonalInformation.jsp"),
@Forward(name = "edit-candidacy-information", path = "/candidacy/erasmus/editCandidacyInformation.jsp"),
@Forward(name = "edit-degree-courses-information", path = "/candidacy/erasmus/editDegreeAndCoursesInformation.jsp"),
@Forward(name = "set-gri-validation", path = "/internationalRelatOffice/candidacy/erasmus/setGriValidation.jsp"),
@Forward(name = "visualize-alerts", path = "/candidacy/erasmus/visualizeAlerts.jsp"),
@Forward(name = "prepare-edit-candidacy-documents", path = "/candidacy/erasmus/editCandidacyDocuments.jsp"),
@Forward(name = "create-student-data", path = "/candidacy/erasmus/createStudentData.jsp"),
@Forward(name = "view-student-data-username", path = "/candidacy/erasmus/viewStudentDataUsername.jsp"),
@Forward(name = "edit-eidentifier", path = "/candidacy/erasmus/editEidentifier.jsp"),
@Forward(name = "cancel-candidacy", path = "/candidacy/cancelCandidacy.jsp"),
@Forward(name = "view-approved-learning-agreements", path = "/candidacy/erasmus/viewApprovedLearningAgreements.jsp"),
@Forward(name = "upload-learning-agreement", path = "/candidacy/erasmus/uploadLearningAgreement.jsp"),
@Forward(name = "reject-candidacy", path = "/candidacy/rejectCandidacy.jsp"),
@Forward(name = "revert-candidacy-to-standby", path = "/candidacy/erasmus/revertCandidacyToStandby.jsp"),
@Forward(name = "enrol-student", path = "/candidacy/erasmus/enrolStudent.jsp"),
@Forward(name = "chooseCycleCourseGroupToEnrol", path = "/candidacy/erasmus/chooseCycleCourseGroupToEnrol.jsp") })
public class ErasmusIndividualCandidacyProcessDA extends
org.fenixedu.academic.ui.struts.action.candidacy.erasmus.ErasmusIndividualCandidacyProcessDA {
@Override
protected List<Activity> getAllowedActivities(final IndividualCandidacyProcess process) {
List<Activity> activities = process.getAllowedActivities(Authenticate.getUser());
ArrayList<Activity> resultActivities = new ArrayList<Activity>();
for (Activity activity : activities) {
if (activity.isVisibleForGriOffice()) {
resultActivities.add(activity);
}
}
return resultActivities;
}
public ActionForward prepareExecuteSetGriValidation(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) {
final MobilityIndividualApplicationProcessBean bean = new MobilityIndividualApplicationProcessBean(getProcess(request));
bean.setCreateAlert(true);
bean.setSendEmail(true);
request.setAttribute(getIndividualCandidacyProcessBeanName(), bean);
return mapping.findForward("set-gri-validation");
}
public ActionForward executeSetGriValidation(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
try {
MobilityIndividualApplicationProcessBean bean = getIndividualCandidacyProcessBean();
if (bean.getCreateAlert()
&& (StringUtils.isEmpty(bean.getAlertSubject()) || StringUtils.isEmpty(bean.getAlertBody()))) {
addActionMessage(request, "error.erasmus.alert.subject.and.body.must.not.be.empty");
} else {
executeActivity(getProcess(request), "SetGriValidation", getIndividualCandidacyProcessBean());
return listProcessAllowedActivities(mapping, actionForm, request, response);
}
} catch (final DomainException e) {
addActionMessage(request, e.getMessage(), e.getArgs());
}
request.setAttribute(getIndividualCandidacyProcessBeanName(), getIndividualCandidacyProcessBean());
return mapping.findForward("set-gri-validation");
}
public ActionForward executeSetGriValidationInvalid(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute(getIndividualCandidacyProcessBeanName(), getIndividualCandidacyProcessBean());
return mapping.findForward("set-gri-validation");
}
public ActionForward prepareExecuteCreateStudentData(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response) {
final MobilityIndividualApplicationProcessBean bean = new MobilityIndividualApplicationProcessBean(getProcess(request));
request.setAttribute(getIndividualCandidacyProcessBeanName(), bean);
return mapping.findForward("create-student-data");
}
public ActionForward prepareExecuteCreateStudentDataInvalid(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response) {
request.setAttribute(getIndividualCandidacyProcessBeanName(), getIndividualCandidacyProcessBean());
return mapping.findForward("create-student-data");
}
public ActionForward executeCreateStudentData(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
request.setAttribute(getIndividualCandidacyProcessBeanName(), getIndividualCandidacyProcessBean());
try {
executeActivity(getProcess(request), "CreateStudentData", getIndividualCandidacyProcessBean());
executeActivity(getProcess(request), "ImportToLDAP", getIndividualCandidacyProcessBean());
} catch (final DomainException e) {
addActionMessage(request, e.getMessage(), e.getArgs());
request.setAttribute(getIndividualCandidacyProcessBeanName(), getIndividualCandidacyProcessBean());
return mapping.findForward("create-student-data");
}
return mapping.findForward("view-student-data-username");
}
public ActionForward prepareExecuteSetEIdentifierForTesting(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response) {
final MobilityIndividualApplicationProcessBean bean = new MobilityIndividualApplicationProcessBean(getProcess(request));
bean.setPersonBean(new PersonBean(getProcess(request).getPersonalDetails()));
request.setAttribute(getIndividualCandidacyProcessBeanName(), bean);
return mapping.findForward("edit-eidentifier");
}
public ActionForward prepareExecuteSetEIdentifierForTestingInvalid(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response) {
final MobilityIndividualApplicationProcessBean bean = new MobilityIndividualApplicationProcessBean(getProcess(request));
request.setAttribute(getIndividualCandidacyProcessBeanName(), bean);
return mapping.findForward("edit-eidentifier");
}
public ActionForward executeSetEIdentifierForTesting(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response) throws FenixServiceException {
final MobilityIndividualApplicationProcessBean bean = new MobilityIndividualApplicationProcessBean(getProcess(request));
request.setAttribute(getIndividualCandidacyProcessBeanName(), bean);
try {
executeActivity(getProcess(request), "SetEIdentifierForTesting", getIndividualCandidacyProcessBean());
} catch (final DomainException e) {
addActionMessage(request, e.getMessage(), e.getArgs());
request.setAttribute(getIndividualCandidacyProcessBeanName(), getIndividualCandidacyProcessBean());
return mapping.findForward("edit-eidentifier");
}
return listProcessAllowedActivities(mapping, actionForm, request, response);
}
public ActionForward prepareExecuteViewApprovedLearningAgreements(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response) {
final MobilityIndividualApplicationProcessBean bean = new MobilityIndividualApplicationProcessBean(getProcess(request));
request.setAttribute(getIndividualCandidacyProcessBeanName(), bean);
return mapping.findForward("view-approved-learning-agreements");
}
public ActionForward markApprovedLearningAgreementAsViewed(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response) {
ApprovedLearningAgreementDocumentFile file =
FenixFramework.getDomainObject(request.getParameter("approvedLearningAgreementId"));
file.markLearningAgreementViewed();
return prepareExecuteViewApprovedLearningAgreements(mapping, actionForm, request, response);
}
public ActionForward markApprovedLearningAgreementAsSent(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response) {
ApprovedLearningAgreementDocumentFile file =
FenixFramework.getDomainObject(request.getParameter("approvedLearningAgreementId"));
file.markLearningAgreementSent();
return prepareExecuteViewApprovedLearningAgreements(mapping, actionForm, request, response);
}
public ActionForward markAlertAsViewed(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
ErasmusAlert alert = FenixFramework.getDomainObject(request.getParameter("erasmusAlertId"));
executeActivity(getProcess(request), "MarkAlertAsViewed", alert);
return prepareExecuteVisualizeAlerts(mapping, actionForm, request, response);
}
public ActionForward sendEmailToAcceptedStudent(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
ApprovedLearningAgreementDocumentFile file =
FenixFramework.getDomainObject(request.getParameter("approvedLearningAgreementId"));
executeActivity(getProcess(request), "SendEmailToAcceptedStudent", null);
return prepareExecuteViewApprovedLearningAgreements(mapping, actionForm, request, response);
}
public ActionForward retrieveLearningAgreement(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
MobilityIndividualApplicationProcess process = getProcess(request);
final LearningAgreementDocument document = new LearningAgreementDocument(process);
byte[] data = ReportsUtils.exportMultipleToPdfAsByteArray(document);
response.setContentLength(data.length);
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "attachment; filename=" + document.getReportFileName() + ".pdf");
final ServletOutputStream writer = response.getOutputStream();
writer.write(data);
writer.flush();
writer.close();
response.flushBuffer();
return mapping.findForward("");
}
public ActionForward revokeApprovedLearningAgreement(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
ApprovedLearningAgreementDocumentFile file =
FenixFramework.getDomainObject(request.getParameter("approvedLearningAgreementId"));
CandidacyProcessDocumentUploadBean documentBean = new CandidacyProcessDocumentUploadBean();
documentBean.setDocumentFile(file);
executeActivity(getProcess(request), "RevokeDocumentFile", documentBean);
return prepareExecuteViewApprovedLearningAgreements(mapping, form, request, response);
}
public ActionForward prepareExecuteRevertCandidacyToStandBy(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
request.setAttribute(getIndividualCandidacyProcessBeanName(), getIndividualCandidacyProcessBean());
return mapping.findForward("revert-candidacy-to-standby");
}
public ActionForward executeRevertCandidacyToStandBy(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
try {
executeActivity(getProcess(request), "RevertCandidacyToStandBy", null);
} catch (DomainException e) {
addActionMessage(request, e.getMessage(), e.getArgs());
return mapping.findForward("revert-candidacy-to-standby");
}
return listProcessAllowedActivities(mapping, form, request, response);
}
public ActionForward enrolStudent(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
MobilityIndividualApplicationProcess process = getProcess(request);
MobilityIndividualApplication candidacy = process.getCandidacy();
Boolean restrictEnrollment;
ErasmusBolonhaStudentEnrollmentBean bean;
if (candidacy.getRegistration().getActiveStudentCurricularPlan() != null) {
restrictEnrollment = true;
ExecutionSemester semester = ExecutionSemester.readByYearMonthDay(new YearMonthDay());
bean =
new ErasmusBolonhaStudentEnrollmentBean(candidacy.getRegistration().getActiveStudentCurricularPlan(),
semester, null, CurricularRuleLevel.ENROLMENT_NO_RULES, candidacy);
} else {
restrictEnrollment = false;
bean = null;
}
return enrolStudent(mapping, request, process, bean);
}
private ActionForward enrolStudent(ActionMapping mapping, HttpServletRequest request,
MobilityIndividualApplicationProcess process, ErasmusBolonhaStudentEnrollmentBean bean) {
MobilityIndividualApplication candidacy = process.getCandidacy();
Boolean restrictEnrollment;
if (candidacy.getRegistration().getActiveStudentCurricularPlan() != null) {
restrictEnrollment = true;
} else {
restrictEnrollment = false;
}
request.setAttribute("process", process);
request.setAttribute("restrictEnrollment", restrictEnrollment);
request.setAttribute("bolonhaStudentEnrollmentBean", bean);
request.setAttribute("action", "/caseHandlingMobilityIndividualApplicationProcess.do");
return mapping.findForward("enrol-student");
}
public ActionForward postBack(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws FenixServiceException {
MobilityIndividualApplicationProcess process = getProcess(request);
MobilityIndividualApplication candidacy = process.getCandidacy();
ExecutionSemester semester = ((ErasmusBolonhaStudentEnrollmentBean) getRenderedObject()).getExecutionPeriod();
RenderUtils.invalidateViewState();
ErasmusBolonhaStudentEnrollmentBean bean =
new ErasmusBolonhaStudentEnrollmentBean(candidacy.getRegistration().getActiveStudentCurricularPlan(), semester,
null, CurricularRuleLevel.ENROLMENT_NO_RULES, candidacy);
return enrolStudent(mapping, request, process, bean);
}
public ActionForward doEnrol(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws FenixServiceException {
ErasmusBolonhaStudentEnrollmentBean erasmusBolonhaStudentEnrollmentBean =
(ErasmusBolonhaStudentEnrollmentBean) getRenderedObject();
try {
final RuleResult ruleResults =
EnrolBolonhaStudent.run(erasmusBolonhaStudentEnrollmentBean.getStudentCurricularPlan(),
erasmusBolonhaStudentEnrollmentBean.getExecutionPeriod(),
erasmusBolonhaStudentEnrollmentBean.getDegreeModulesToEvaluate(),
erasmusBolonhaStudentEnrollmentBean.getCurriculumModulesToRemove(),
erasmusBolonhaStudentEnrollmentBean.getCurricularRuleLevel());
if (!erasmusBolonhaStudentEnrollmentBean.getDegreeModulesToEvaluate().isEmpty()
|| !erasmusBolonhaStudentEnrollmentBean.getCurriculumModulesToRemove().isEmpty()) {
addActionMessage("success", request, "label.save.success");
}
if (ruleResults.isWarning()) {
addRuleResultMessagesToActionMessages("warning", request, ruleResults);
}
} catch (EnrollmentDomainException ex) {
addRuleResultMessagesToActionMessages("error", request, ex.getFalseResult());
return enrolStudent(mapping, form, request, response);
} catch (DomainException ex) {
addActionMessage("error", request, ex.getKey(), ex.getArgs());
return enrolStudent(mapping, form, request, response);
}
StudentCurricularPlan studentCurricularPlan = erasmusBolonhaStudentEnrollmentBean.getStudentCurricularPlan();
ExecutionSemester executionSemester = erasmusBolonhaStudentEnrollmentBean.getExecutionPeriod();
NoCourseGroupCurriculumGroup group =
studentCurricularPlan.getNoCourseGroupCurriculumGroup(NoCourseGroupCurriculumGroupType.STANDALONE);
Set<CurricularCourse> remaining = new HashSet<CurricularCourse>();
HashSet<CurricularCourse> set = new HashSet<CurricularCourse>();
set.addAll(erasmusBolonhaStudentEnrollmentBean.getCandidacy().getCurricularCoursesSet());
for (Enrolment enrolment : group.getEnrolments()) {
set.add(enrolment.getCurricularCourse());
}
remaining.addAll(set);
for (ErasmusExtraCurricularEnrolmentBean bean : erasmusBolonhaStudentEnrollmentBean.getExtraCurricularEnrolments()) {
remaining.remove(bean.getCurricularCourse());
if (group.hasEnrolmentWithEnroledState(bean.getCurricularCourse(),
erasmusBolonhaStudentEnrollmentBean.getExecutionPeriod())) {
continue;
}
MobilityExtraEnrolmentBean mobilityExtraEnrolmentBean =
new MobilityExtraEnrolmentBean(studentCurricularPlan, executionSemester);
mobilityExtraEnrolmentBean.setCurriculumGroup(studentCurricularPlan
.getNoCourseGroupCurriculumGroup(NoCourseGroupCurriculumGroupType.STANDALONE));
mobilityExtraEnrolmentBean.setDegree(bean.getCurricularCourse().getDegree());
mobilityExtraEnrolmentBean.setDegreeType(bean.getCurricularCourse().getDegree().getDegreeType());
mobilityExtraEnrolmentBean.setDegreeCurricularPlan(bean.getCurricularCourse().getDegreeCurricularPlan());
mobilityExtraEnrolmentBean.setSelectedCurricularCourse(bean.getCurricularCourse());
mobilityExtraEnrolmentBean.setCurricularRuleLevel(CurricularRuleLevel.EXTRA_ENROLMENT);
try {
final RuleResult ruleResult = CreateExtraEnrolment.run(mobilityExtraEnrolmentBean);
if (ruleResult.isWarning()) {
addRuleResultMessagesToActionMessages("warning", request, ruleResult);
}
} catch (final IllegalDataAccessException e) {
addActionMessage("error", request, "error.notAuthorized");
return enrolStudent(mapping, form, request, response);
} catch (final EnrollmentDomainException ex) {
addRuleResultMessagesToActionMessages("enrolmentError", request, ex.getFalseResult());
return enrolStudent(mapping, form, request, response);
} catch (final DomainException e) {
addActionMessage("error", request, e.getMessage(), e.getArgs());
return enrolStudent(mapping, form, request, response);
}
}
// After adding all that I want to add, the ones that I've not added
// that were enrolled are to be removed.
for (Enrolment enrolment : group.getEnrolmentsBy(executionSemester)) {
if (remaining.contains(enrolment.getCurricularCourse())) {
studentCurricularPlan.removeCurriculumModulesFromNoCourseGroupCurriculumGroup(
Collections.<CurriculumModule> singletonList(enrolment), executionSemester,
NoCourseGroupCurriculumGroupType.STANDALONE);
}
}
MobilityIndividualApplicationProcess process = getProcess(request);
MobilityIndividualApplication candidacy = process.getCandidacy();
ErasmusBolonhaStudentEnrollmentBean bean =
new ErasmusBolonhaStudentEnrollmentBean(candidacy.getRegistration().getActiveStudentCurricularPlan(),
erasmusBolonhaStudentEnrollmentBean.getExecutionPeriod(), null, CurricularRuleLevel.ENROLMENT_NO_RULES,
candidacy);
RenderUtils.invalidateViewState();
return enrolStudent(mapping, request, getProcess(request), bean);
}
public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws FenixServiceException {
return null;
}
protected BolonhaStudentEnrollmentBean getBolonhaStudentEnrollmentBeanFromViewState() {
return getRenderedObject("bolonhaStudentEnrolments");
}
public ActionForward prepareChooseCycleCourseGroupToEnrol(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
final ErasmusBolonhaStudentEnrollmentBean studentEnrollmentBean =
(ErasmusBolonhaStudentEnrollmentBean) getRenderedObject();
final CycleEnrolmentBean cycleEnrolmentBean =
new CycleEnrolmentBean(studentEnrollmentBean.getStudentCurricularPlan(),
studentEnrollmentBean.getExecutionPeriod(), studentEnrollmentBean.getCycleTypeToEnrol()
.getSourceCycleAffinity(), studentEnrollmentBean.getCycleTypeToEnrol());
request.setAttribute("cycleEnrolmentBean", cycleEnrolmentBean);
request.setAttribute("withRules", false);
request.setAttribute("process", studentEnrollmentBean.getCandidacy().getCandidacyProcess());
return mapping.findForward("chooseCycleCourseGroupToEnrol");
}
public ActionForward cancelChooseCycleCourseGroupToEnrol(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
return enrolStudent(mapping, form, request, response);
}
public ActionForward enrolInCycleCourseGroup(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws FenixServiceException {
final CycleEnrolmentBean cycleEnrolmentBean = getCycleEnrolmentBeanFromViewState();
try {
EnrolInAffinityCycle.run(getLoggedPerson(request), cycleEnrolmentBean);
} catch (final IllegalDataAccessException e) {
addActionMessage(request, "error.NotAuthorized");
request.setAttribute("withRules", request.getParameter("withRules"));
request.setAttribute("cycleEnrolmentBean", cycleEnrolmentBean);
return mapping.findForward("chooseCycleCourseGroupToEnrol");
} catch (final DomainException e) {
addActionMessage(request, e.getKey(), e.getArgs());
request.setAttribute("withRules", request.getParameter("withRules"));
request.setAttribute("cycleEnrolmentBean", cycleEnrolmentBean);
return mapping.findForward("chooseCycleCourseGroupToEnrol");
}
return enrolStudent(mapping, form, request, response);
}
private CycleEnrolmentBean getCycleEnrolmentBeanFromViewState() {
return getRenderedObject("cycleEnrolmentBean");
}
}