/**
* 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.spring.controller.configuration;
import static pt.ist.fenixframework.FenixFramework.atomic;
import java.util.Comparator;
import java.util.stream.Collectors;
import org.fenixedu.academic.domain.candidacy.IngressionType;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.ui.spring.ControllerHelper;
import org.fenixedu.academic.ui.spring.controller.AcademicAdministrationSpringApplication;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.fenixedu.bennu.spring.portal.SpringFunctionality;
import org.fenixedu.commons.i18n.LocalizedString;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@SpringFunctionality(app = AcademicAdministrationSpringApplication.class, title = "label.title.candidacy.manageIngressionType",
accessGroup = "#managers")
@RequestMapping("/academic/configuration/ingression-type")
public class IngressionTypeController {
@RequestMapping
public String list(Model model) {
model.addAttribute("ingressionTypes",
Bennu.getInstance().getIngressionTypesSet().stream().sorted(Comparator.comparing(IngressionType::getDescription))
.collect(Collectors.toList()));
return "fenixedu-academic/configuration/ingression-type/search";
}
@RequestMapping(value = "/{ingressionType}")
public String read(@PathVariable IngressionType ingressionType, Model model) {
model.addAttribute("ingressionType", ingressionType);
return "fenixedu-academic/configuration/ingression-type/read";
}
@RequestMapping(value = "/{ingressionType}/delete", method = RequestMethod.POST)
public String delete(@PathVariable IngressionType ingressionType, Model model, RedirectAttributes redirectAttributes) {
try {
atomic(() -> ingressionType.delete());
} catch (DomainException e) {
ControllerHelper.addErrorMessage(e.getLocalizedMessage(), model);
return ControllerHelper.redirect("/academic/configuration/ingression-type", model, redirectAttributes);
}
ControllerHelper.addInfoMessage(BundleUtil.getString(Bundle.APPLICATION, "label.success.ingressionType.delete"), model);
return ControllerHelper.redirect("/academic/configuration/ingression-type", model, redirectAttributes);
}
@RequestMapping(value = "/{ingressionType}/edit", method = RequestMethod.GET)
public String edit(@PathVariable IngressionType ingressionType, Model model) {
model.addAttribute("ingressionType", ingressionType);
return "fenixedu-academic/configuration/ingression-type/update";
}
@RequestMapping(value = "/{ingressionType}/edit", method = RequestMethod.POST)
public String edit(@PathVariable IngressionType ingressionType, @RequestParam String code,
@RequestParam LocalizedString description, @RequestParam(required = false) boolean hasEntryPhase, @RequestParam(
required = false) boolean directAccessFrom1stCycle,
@RequestParam(required = false) boolean externalDegreeChange,
@RequestParam(required = false) boolean firstCycleAttribution,
@RequestParam(required = false) boolean handicappedContingent,
@RequestParam(required = false) boolean internal2ndCycleAccess,
@RequestParam(required = false) boolean internal3rdCycleAccess,
@RequestParam(required = false) boolean internalDegreeChange,
@RequestParam(required = false) boolean isolatedCurricularUnits,
@RequestParam(required = false) boolean middleAndSuperiorCourses, @RequestParam(required = false) boolean over23,
@RequestParam(required = false) boolean reIngression, @RequestParam(required = false) boolean transfer, Model model,
RedirectAttributes redirectAttributes) {
try {
atomic(() -> {
ingressionType.setCode(code);
ingressionType.setDescription(description);
ingressionType.editState(hasEntryPhase, directAccessFrom1stCycle, externalDegreeChange, firstCycleAttribution,
handicappedContingent, internal2ndCycleAccess, internal3rdCycleAccess, internalDegreeChange,
isolatedCurricularUnits, middleAndSuperiorCourses, over23, reIngression, transfer);
});
} catch (DomainException e) {
ControllerHelper.addErrorMessage(e.getLocalizedMessage(), model);
model.addAttribute("ingressionType", ingressionType);
return "fenixedu-academic/configuration/ingression-type/update";
}
return "redirect:/academic/configuration/ingression-type/" + ingressionType.getExternalId();
}
@RequestMapping(value = "/create", method = RequestMethod.GET)
public String create(Model model) {
return "fenixedu-academic/configuration/ingression-type/create";
}
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String create(@RequestParam String code, @RequestParam LocalizedString description,
@RequestParam(required = false) boolean hasEntryPhase,
@RequestParam(required = false) boolean directAccessFrom1stCycle,
@RequestParam(required = false) boolean externalDegreeChange,
@RequestParam(required = false) boolean firstCycleAttribution,
@RequestParam(required = false) boolean handicappedContingent,
@RequestParam(required = false) boolean internal2ndCycleAccess,
@RequestParam(required = false) boolean internal3rdCycleAccess,
@RequestParam(required = false) boolean internalDegreeChange,
@RequestParam(required = false) boolean isolatedCurricularUnits,
@RequestParam(required = false) boolean middleAndSuperiorCourses, @RequestParam(required = false) boolean over23,
@RequestParam(required = false) boolean reIngression, @RequestParam(required = false) boolean transfer, Model model,
RedirectAttributes redirectAttributes) throws Exception {
try {
IngressionType ingressionType =
atomic(() -> {
IngressionType ingression = IngressionType.createIngressionType(code, description);
ingression.editState(hasEntryPhase, directAccessFrom1stCycle, externalDegreeChange,
firstCycleAttribution, handicappedContingent, internal2ndCycleAccess, internal3rdCycleAccess,
internalDegreeChange, isolatedCurricularUnits, middleAndSuperiorCourses, over23, reIngression,
transfer);
return ingression;
});
return "redirect:/academic/configuration/ingression-type/" + ingressionType.getExternalId();
} catch (DomainException e) {
ControllerHelper.addErrorMessage(e.getLocalizedMessage(), model);
return create(model);
}
}
}