Package org.fenixedu.academic.ui.struts.action.administrativeOffice.payments

Source Code of org.fenixedu.academic.ui.struts.action.administrativeOffice.payments.ExemptionsManagementDispatchAction

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

import java.util.ArrayList;

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.Person;
import org.fenixedu.academic.domain.accounting.AcademicEvent;
import org.fenixedu.academic.domain.accounting.Event;
import org.fenixedu.academic.domain.accounting.Exemption;
import org.fenixedu.academic.domain.accounting.events.AcademicEventExemption;
import org.fenixedu.academic.domain.accounting.events.AdministrativeOfficeFeeAndInsuranceEvent;
import org.fenixedu.academic.domain.accounting.events.ImprovementOfApprovedEnrolmentEvent;
import org.fenixedu.academic.domain.accounting.events.candidacy.SecondCycleIndividualCandidacyEvent;
import org.fenixedu.academic.domain.accounting.events.gratuity.GratuityEvent;
import org.fenixedu.academic.domain.accounting.events.gratuity.GratuityEventWithPaymentPlan;
import org.fenixedu.academic.domain.accounting.events.insurance.InsuranceEvent;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.domain.exceptions.DomainExceptionWithLabelFormatter;
import org.fenixedu.academic.domain.organizationalStructure.Party;
import org.fenixedu.academic.domain.phd.debts.PhdEvent;
import org.fenixedu.academic.domain.phd.debts.PhdEventExemption;
import org.fenixedu.academic.domain.phd.debts.PhdEventExemptionJustificationType;
import org.fenixedu.academic.domain.phd.debts.PhdGratuityEvent;
import org.fenixedu.academic.domain.phd.debts.PhdGratuityExternalScholarshipExemption;
import org.fenixedu.academic.domain.phd.debts.PhdGratuityFineExemption;
import org.fenixedu.academic.domain.phd.debts.PhdRegistrationFee;
import org.fenixedu.academic.dto.accounting.AcademicEventExemptionBean;
import org.fenixedu.academic.dto.accounting.AdministrativeOfficeFeeAndInsuranceExemptionBean;
import org.fenixedu.academic.dto.accounting.InsuranceExemptionBean;
import org.fenixedu.academic.dto.accounting.SecondCycleIndividualCandidacyExemptionBean;
import org.fenixedu.academic.dto.accounting.gratuityExemption.CreateGratuityExemptionBean;
import org.fenixedu.academic.dto.accounting.penaltyExemption.CreateAdministrativeOfficeFeeAndInsurancePenaltyExemptionBean;
import org.fenixedu.academic.dto.accounting.penaltyExemption.CreateImprovementOfApprovedEnrolmentPenaltyExemptionBean;
import org.fenixedu.academic.dto.accounting.penaltyExemption.CreateInstallmentPenaltyExemptionBean;
import org.fenixedu.academic.dto.accounting.penaltyExemption.CreatePhdRegistrationFeePenaltyExemptionBean;
import org.fenixedu.academic.service.services.accounting.CreateAdministrativeOfficeFeeAndInsurancePenaltyExemption;
import org.fenixedu.academic.service.services.accounting.CreateImprovementOfApprovedEnrolmentPenaltyExemption;
import org.fenixedu.academic.service.services.accounting.CreatePhdRegistrationFeePenaltyExemption;
import org.fenixedu.academic.service.services.accounting.CreateSecondCycleIndividualCandidacyExemption;
import org.fenixedu.academic.service.services.accounting.DeleteExemption;
import org.fenixedu.academic.service.services.accounting.ExemptionsManagement;
import org.fenixedu.academic.service.services.accounting.gratuity.CreateGratuityExemption;
import org.fenixedu.academic.service.services.accounting.gratuity.CreateInstallmentPenaltyExemption;
import org.fenixedu.academic.ui.struts.FenixActionForm;
import org.fenixedu.academic.ui.struts.action.administrativeOffice.student.SearchForStudentsDA;
import org.fenixedu.academic.ui.struts.action.phd.PhdEventExemptionBean;
import org.fenixedu.bennu.core.domain.Bennu;
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 = "/exemptionsManagement", module = "academicAdministration", formBeanClass = FenixActionForm.class,
        functionality = SearchForStudentsDA.class)
@Forwards({
        @Forward(name = "showEventsToApplyExemption",
                path = "/academicAdminOffice/payments/exemptions/showEventsToApplyExemption.jsp"),
        @Forward(name = "showForGratuityEvent", path = "/academicAdminOffice/payments/exemptions/showForGratuityEvent.jsp"),
        @Forward(name = "showForImprovementOfApprovedEnrolmentEvent",
                path = "/academicAdminOffice/payments/exemptions/showForImprovementOfApprovedEnrolmentEvent.jsp"),
        @Forward(name = "showForAdministrativeOfficeFeeAndInsuranceEvent",
                path = "/academicAdminOffice/payments/exemptions/showForAdministrativeOfficeFeeAndInsuranceEvent.jsp"),
        @Forward(name = "showForInsuranceEvent", path = "/academicAdminOffice/payments/exemptions/showForInsuranceEvent.jsp"),
        @Forward(name = "showForSecondCycleIndividualCandidacyEvent",
                path = "/academicAdminOffice/payments/exemptions/showForSecondCycleIndividualCandidacyEvent.jsp"),
        @Forward(name = "showForPhdRegistrationFee",
                path = "/phd/academicAdminOffice/payments/exemptions/showForPhdRegistrationFee.jsp"),
        @Forward(name = "showForAcademicEvent", path = "/academicAdminOffice/payments/exemptions/showForAcademicEvent.jsp"),
        @Forward(name = "showPhdGratuity", path = "/phd/academicAdminOffice/payments/exemptions/showPhdGratuity.jsp"),
        @Forward(name = "showForPhdEvent", path = "/phd/academicAdminOffice/payments/exemptions/showForPhdEvent.jsp"),
        @Forward(name = "createGratuityExemption", path = "/academicAdminOffice/payments/exemptions/payment/gratuity/create.jsp"),
        @Forward(name = "createInstallmentPenaltyExemption",
                path = "/academicAdminOffice/payments/exemptions/penalty/createInstallmentExemption.jsp"),
        @Forward(name = "createImprovementOfApprovedEnrolmentPenaltyExemption",
                path = "/academicAdminOffice/payments/exemptions/penalty/createImprovementOfApprovedEnrolmentExemption.jsp"),
        @Forward(name = "createAdministrativeOfficeFeeAndInsurancePenaltyExemption",
                path = "/academicAdminOffice/payments/exemptions/penalty/createAdministrativeOfficeFeeAndInsuranceExemption.jsp"),
        @Forward(name = "createAdministrativeOfficeFeeAndInsuranceExemption",
                path = "/academicAdminOffice/payments/exemptions/payment/administrativeOfficeFeeAndInsurance/create.jsp"),
        @Forward(name = "createInsuranceExemption",
                path = "/academicAdminOffice/payments/exemptions/payment/insurance/createInsuranceExemption.jsp"),
        @Forward(name = "createSecondCycleIndividualCandidacyExemption",
                path = "/academicAdminOffice/payments/exemptions/createSecondCycleIndividualCandidacyExemption.jsp"),
        @Forward(name = "createPhdRegistrationFeePenaltyExemption",
                path = "/phd/academicAdminOffice/payments/exemptions/createPhdRegistrationFeePenaltyExemption.jsp"),
        @Forward(name = "createAcademicEventExemption",
                path = "/academicAdminOffice/payments/exemptions/createAcademicEventExemption.jsp"),
        @Forward(name = "createPhdEventExemption",
                path = "/phd/academicAdminOffice/payments/exemptions/createPhdEventExemption.jsp"),
        @Forward(name = "createFCTExemption", path = "/phd/academicAdminOffice/payments/exemptions/createFCTExemption.jsp") })
public class ExemptionsManagementDispatchAction extends PaymentsManagementDispatchAction {

    public ActionForward showEventsToApplyExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        final Person person = getPerson(request);
        request.setAttribute("person", person);
        request.setAttribute("eventsToApplyExemption", person.getEventsWithExemptionAppliable());

        return mapping.findForward("showEventsToApplyExemption");
    }

    public ActionForward prepareCreateGratuityExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        request.setAttribute("createGratuityExemptionBean", new CreateGratuityExemptionBean(getGratuityEvent(request)));

        return mapping.findForward("createGratuityExemption");
    }

    private ActionForward invalidCreateGratuityExemption(ActionMapping mapping, HttpServletRequest request, String propertyName,
            String messageKey) {
        return invalidCreateGratuityExemption(mapping, request, propertyName, messageKey, new String[0]);
    }

    private ActionForward invalidCreateGratuityExemption(ActionMapping mapping, HttpServletRequest request, String messageKey,
            String[] args) {
        return invalidCreateGratuityExemption(mapping, request, null, messageKey, args);
    }

    private ActionForward invalidCreateGratuityExemption(ActionMapping mapping, HttpServletRequest request, String messageKey) {
        return invalidCreateGratuityExemption(mapping, request, messageKey, new String[0]);
    }

    private ActionForward invalidCreateGratuityExemption(ActionMapping mapping, HttpServletRequest request, String propertyName,
            String messageKey, String[] args) {

        if (propertyName == null) {
            addActionMessage(request, messageKey, args);
        } else {
            addActionMessage(propertyName, request, messageKey, args);
        }

        request.setAttribute("createGratuityExemptionBean", getRenderedObject("createGratuityExemptionBean"));

        return mapping.findForward("createGratuityExemption");
    }

    public ActionForward createGratuityExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        final CreateGratuityExemptionBean createGratuityExemptionBean = getRenderedObject("createGratuityExemptionBean");

        if (!createGratuityExemptionBean.isPercentageExemption() && createGratuityExemptionBean.getAmount() == null) {
            return invalidCreateGratuityExemption(mapping, request, "context",
                    "error.payments.gratuityExemption.amount.or.percentage.are.required");
        }

        if (createGratuityExemptionBean.isPercentageExemption() && createGratuityExemptionBean.getAmount() != null) {
            return invalidCreateGratuityExemption(mapping, request, "context",
                    "error.payments.gratuityExemption.cannot.select.both.amount.and.percentage");
        }

        try {
            CreateGratuityExemption.run(getUserView(request).getPerson(), createGratuityExemptionBean);
        } catch (DomainExceptionWithLabelFormatter ex) {
            return invalidCreateGratuityExemption(mapping, request, ex.getKey(),
                    solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));
        } catch (DomainException ex) {
            return invalidCreateGratuityExemption(mapping, request, ex.getKey());

        }

        request.setAttribute("eventId", createGratuityExemptionBean.getGratuityEvent().getExternalId());

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward deleteExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        final Exemption exemption = getExemption(request);
        request.setAttribute("eventId", exemption.getEvent().getExternalId());

        try {
            DeleteExemption.run(exemption);
        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));
        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());
        }

        return showExemptions(mapping, form, request, response);

    }

    public ActionForward prepareCreateInstallmentPenaltyExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        request.setAttribute("createInstallmentPenaltyExemptionBean", new CreateInstallmentPenaltyExemptionBean(
                (GratuityEventWithPaymentPlan) getGratuityEvent(request)));

        // Logic to decide the view to show based on gratuity event should
        // be placed here
        return mapping.findForward("createInstallmentPenaltyExemption");

    }

    public ActionForward prepareCreateInstallmentPenaltyExemptionInvalid(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("createInstallmentPenaltyExemptionBean",
                getRenderedObject("create-installment-penalty-exemption-bean"));

        return mapping.findForward("createInstallmentPenaltyExemption");
    }

    public ActionForward createInstallmentPenaltyExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        final CreateInstallmentPenaltyExemptionBean createInstallmentPenaltyExemptionBean =
                (CreateInstallmentPenaltyExemptionBean) RenderUtils.getViewState("create-installment-penalty-exemption-bean")
                        .getMetaObject().getObject();
        request.setAttribute("eventId", createInstallmentPenaltyExemptionBean.getGratuityEventWithPaymentPlan().getExternalId());

        try {
            CreateInstallmentPenaltyExemption.run(getLoggedPerson(request), createInstallmentPenaltyExemptionBean);
        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));

            return prepareCreateInstallmentPenaltyExemptionInvalid(mapping, form, request, response);

        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());

            return prepareCreateInstallmentPenaltyExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    private GratuityEvent getGratuityEvent(HttpServletRequest request) {
        return (GratuityEvent) getEvent(request);
    }

    public ActionForward showExemptions(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        final Event event = getEvent(request);
        request.setAttribute("person", event.getPerson());
        request.setAttribute("event", event);

        if (event instanceof GratuityEvent) {
            if (event instanceof GratuityEventWithPaymentPlan) {
                request.setAttribute("hasPaymentPlan", true);
            }
            return mapping.findForward("showForGratuityEvent");
        } else if (event instanceof AdministrativeOfficeFeeAndInsuranceEvent) {
            return mapping.findForward("showForAdministrativeOfficeFeeAndInsuranceEvent");
        } else if (event instanceof InsuranceEvent) {
            return mapping.findForward("showForInsuranceEvent");
        } else if (event instanceof ImprovementOfApprovedEnrolmentEvent) {
            return mapping.findForward("showForImprovementOfApprovedEnrolmentEvent");
        } else if (event instanceof SecondCycleIndividualCandidacyEvent) {
            return mapping.findForward("showForSecondCycleIndividualCandidacyEvent");
        } else if (event instanceof PhdRegistrationFee) {
            return mapping.findForward("showForPhdRegistrationFee");
        } else if (event instanceof PhdGratuityEvent) {
            return mapping.findForward("showPhdGratuity");
        } else if (event instanceof PhdEvent) {
            return mapping.findForward("showForPhdEvent");
        } else if (event instanceof AcademicEvent) {
            return mapping.findForward("showForAcademicEvent");
        } else {
            throw new UnsupportedOperationException();
        }
    }

    private Exemption getExemption(final HttpServletRequest request) {
        return getDomainObject(request, "exemptionId");
    }

    public ActionForward prepareCreateImprovementOfApprovedEnrolmentPenaltyExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        request.setAttribute("createPenaltyExemptionBean", new CreateImprovementOfApprovedEnrolmentPenaltyExemptionBean(
                (ImprovementOfApprovedEnrolmentEvent) getEvent(request)));

        return mapping.findForward("createImprovementOfApprovedEnrolmentPenaltyExemption");

    }

    public ActionForward prepareCreateImprovementOfApprovedEnrolmentPenaltyExemptionInvalid(ActionMapping mapping,
            ActionForm form, HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("createPenaltyExemptionBean", getRenderedObject("create-penalty-exemption-bean"));
        return mapping.findForward("createImprovementOfApprovedEnrolmentPenaltyExemption");
    }

    public ActionForward createImprovementOfApprovedEnrolmentPenaltyExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        final CreateImprovementOfApprovedEnrolmentPenaltyExemptionBean penaltyExemptionBean =
                (CreateImprovementOfApprovedEnrolmentPenaltyExemptionBean) RenderUtils
                        .getViewState("create-penalty-exemption-bean").getMetaObject().getObject();
        request.setAttribute("eventId", penaltyExemptionBean.getEvent().getExternalId());

        try {
            CreateImprovementOfApprovedEnrolmentPenaltyExemption.run(getLoggedPerson(request), penaltyExemptionBean);
        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());

            return prepareCreateImprovementOfApprovedEnrolmentPenaltyExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward prepareCreateAdministrativeOfficeFeeAndInsurancePenaltyExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        request.setAttribute("createPenaltyExemptionBean", new CreateAdministrativeOfficeFeeAndInsurancePenaltyExemptionBean(
                (AdministrativeOfficeFeeAndInsuranceEvent) getEvent(request)));

        return mapping.findForward("createAdministrativeOfficeFeeAndInsurancePenaltyExemption");

    }

    public ActionForward prepareCreateAdministrativeOfficeFeeAndInsurancePenaltyExemptionInvalid(ActionMapping mapping,
            ActionForm form, HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("createPenaltyExemptionBean", getRenderedObject("create-penalty-exemption-bean"));

        return mapping.findForward("createAdministrativeOfficeFeeAndInsurancePenaltyExemption");
    }

    public ActionForward createAdministrativeOfficeFeeAndInsurancePenaltyExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        final CreateAdministrativeOfficeFeeAndInsurancePenaltyExemptionBean penaltyExemptionBean =
                (CreateAdministrativeOfficeFeeAndInsurancePenaltyExemptionBean) RenderUtils
                        .getViewState("create-penalty-exemption-bean").getMetaObject().getObject();
        request.setAttribute("eventId", penaltyExemptionBean.getEvent().getExternalId());

        try {
            CreateAdministrativeOfficeFeeAndInsurancePenaltyExemption.run(getLoggedPerson(request), penaltyExemptionBean);
        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));

            return prepareCreateAdministrativeOfficeFeeAndInsurancePenaltyExemptionInvalid(mapping, form, request, response);

        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());

            return prepareCreateAdministrativeOfficeFeeAndInsurancePenaltyExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward prepareCreateSecondCycleIndividualCandidacyExemption(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("createPenaltyExemptionBean", new SecondCycleIndividualCandidacyExemptionBean(
                (SecondCycleIndividualCandidacyEvent) getEvent(request)));
        return mapping.findForward("createSecondCycleIndividualCandidacyExemption");
    }

    public ActionForward prepareCreateSecondCycleIndividualCandidacyExemptionInvalid(ActionMapping mapping,
            ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("createPenaltyExemptionBean", getRenderedObject("create-penalty-exemption-bean"));
        return mapping.findForward("createSecondCycleIndividualCandidacyExemption");
    }

    public ActionForward createSecondCycleIndividualCandidacyExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        try {
            CreateSecondCycleIndividualCandidacyExemption.run(getLoggedPerson(request),
                    (SecondCycleIndividualCandidacyExemptionBean) getRenderedObject("create-penalty-exemption-bean"));

        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));
            return prepareCreateSecondCycleIndividualCandidacyExemptionInvalid(mapping, form, request, response);

        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());
            return prepareCreateSecondCycleIndividualCandidacyExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward prepareCreateAcademicEventExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {
        request.setAttribute("exemptionBean", new AcademicEventExemptionBean((AcademicEvent) getEvent(request)));
        return mapping.findForward("createAcademicEventExemption");
    }

    public ActionForward prepareCreateAcademicEventExemptionInvalid(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("exemptionBean", getRenderedObject("exemptionBean"));
        return mapping.findForward("createAcademicEventExemption");
    }

    public ActionForward createAcademicEventExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        try {
            final AcademicEventExemptionBean bean = getRenderedObject("exemptionBean");
            AcademicEventExemption.create(getLoggedPerson(request), bean.getEvent(), bean.getValue(),
                    bean.getJustificationType(), bean.getDispatchDate(), bean.getReason());

        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));
            return prepareCreateAcademicEventExemptionInvalid(mapping, form, request, response);

        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());
            return prepareCreateAcademicEventExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward prepareCreatePhdEventExemption(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) {
        PhdEventExemptionBean phdEventExemptionBean = new PhdEventExemptionBean((PhdEvent) getEvent(request));
        phdEventExemptionBean.setJustificationType(PhdEventExemptionJustificationType.DIRECTIVE_COUNCIL_AUTHORIZATION);
        request.setAttribute("exemptionBean", phdEventExemptionBean);
        return mapping.findForward("createPhdEventExemption");
    }

    public ActionForward prepareCreatePhdGratuityExemptionForGratuity(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) {
        PhdEventExemptionBean phdEventExemptionBean = new PhdEventExemptionBean((PhdEvent) getEvent(request));
        phdEventExemptionBean.setJustificationType(PhdEventExemptionJustificationType.PHD_GRATUITY_FCT_SCHOLARSHIP_EXEMPTION);
        phdEventExemptionBean.setProviders(new ArrayList<Party>(Bennu.getInstance().getExternalScholarshipProviderSet()));
        request.setAttribute("exemptionBean", phdEventExemptionBean);
        return mapping.findForward("createFCTExemption");
    }

    public ActionForward prepareCreatePhdEventExemptionInvalid(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("exemptionBean", getRenderedObject("exemptionBean"));
        return mapping.findForward("createPhdEventExemption");
    }

    public ActionForward createFCTExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        try {
            final PhdEventExemptionBean bean = getRenderedObject("exemptionBean");
            PhdGratuityExternalScholarshipExemption.createPhdGratuityExternalScholarshipExemption(getLoggedPerson(request),
                    bean.getValue(), bean.getProvider(), ((PhdGratuityEvent) bean.getEvent()));
        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));
            return showExemptions(mapping, form, request, response);

        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());
            return showExemptions(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward createPhdEventExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        try {
            final PhdEventExemptionBean bean = getRenderedObject("exemptionBean");
            if (bean.getJustificationType() == PhdEventExemptionJustificationType.PHD_GRATUITY_FCT_SCHOLARSHIP_EXEMPTION) {
                PhdGratuityExternalScholarshipExemption.createPhdGratuityExternalScholarshipExemption(getLoggedPerson(request),
                        bean.getValue(), bean.getProvider(), (PhdGratuityEvent) bean.getEvent());
            } else if (bean.getJustificationType() == PhdEventExemptionJustificationType.DIRECTIVE_COUNCIL_AUTHORIZATION) {
                PhdEventExemption.create(getLoggedPerson(request), bean.getEvent(), bean.getValue(), bean.getJustificationType(),
                        bean.getDispatchDate(), bean.getReason());
            } else if (bean.getJustificationType() == PhdEventExemptionJustificationType.FINE_EXEMPTION) {
                PhdGratuityFineExemption.createPhdGratuityFineExemption(getLoggedPerson(request),
                        (PhdGratuityEvent) bean.getEvent(), bean.getReason());
            }
        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));
            return prepareCreatePhdEventExemptionInvalid(mapping, form, request, response);

        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());
            return prepareCreatePhdEventExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward prepareCreateAdministrativeOfficeFeeAndInsuranceExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        request.setAttribute(
                "createAdministrativeOfficeFeeAndInsuranceExemptionBean",
                new AdministrativeOfficeFeeAndInsuranceExemptionBean((AdministrativeOfficeFeeAndInsuranceEvent) getEvent(request)));

        return mapping.findForward("createAdministrativeOfficeFeeAndInsuranceExemption");
    }

    public ActionForward prepareCreateAdministrativeOfficeFeeAndInsuranceExemptionInvalid(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        request.setAttribute("createAdministrativeOfficeFeeAndInsuranceExemptionBean",
                getRenderedObject("createAdministrativeOfficeFeeAndInsuranceExemptionBean"));

        return mapping.findForward("createAdministrativeOfficeFeeAndInsuranceExemption");
    }

    public ActionForward createAdministrativeOfficeFeeAndInsuranceExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        try {
            ExemptionsManagement
                    .createAdministrativeOfficeFeeAndInsuranceExemption(
                            getLoggedPerson(request),
                            (AdministrativeOfficeFeeAndInsuranceExemptionBean) getRenderedObject("createAdministrativeOfficeFeeAndInsuranceExemptionBean"));

        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));
            return prepareCreateAdministrativeOfficeFeeAndInsuranceExemptionInvalid(mapping, form, request, response);

        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());
            return prepareCreateAdministrativeOfficeFeeAndInsuranceExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward prepareCreatePhdRegistrationFeePenaltyExemption(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("createPenaltyExemptionBean", new CreatePhdRegistrationFeePenaltyExemptionBean(
                (PhdRegistrationFee) getEvent(request)));
        return mapping.findForward("createPhdRegistrationFeePenaltyExemption");
    }

    public ActionForward createPhdRegistrationFeePenaltyExemptionInvalid(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        request.setAttribute("createPenaltyExemptionBean", getRenderedObject("create-penalty-exemption-bean"));
        return mapping.findForward("createPhdRegistrationFeePenaltyExemption");
    }

    public ActionForward createPhdRegistrationFeePenaltyExemption(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        final CreatePhdRegistrationFeePenaltyExemptionBean penaltyExemptionBean =
                getRenderedObject("create-penalty-exemption-bean");
        request.setAttribute("eventId", penaltyExemptionBean.getEvent().getExternalId());

        try {
            CreatePhdRegistrationFeePenaltyExemption.run(getLoggedPerson(request), penaltyExemptionBean);
        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());
            return createPhdRegistrationFeePenaltyExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    /* Insurance Exemption */
    public ActionForward prepareCreateInsuranceExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        request.setAttribute("createInsuranceExemptionBean", new InsuranceExemptionBean((InsuranceEvent) getEvent(request)));

        return mapping.findForward("createInsuranceExemption");
    }

    public ActionForward prepareCreateInsuranceExemptionInvalid(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

        request.setAttribute("createInsuranceExemptionBean", getRenderedObject("createInsuranceExemptionBean"));

        return mapping.findForward("createInsuranceExemption");
    }

    public ActionForward createInsuranceExemption(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) {

        try {
            ExemptionsManagement.createInsuranceExemption(getLoggedPerson(request),
                    (InsuranceExemptionBean) getRenderedObject("createInsuranceExemptionBean"));

        } catch (DomainExceptionWithLabelFormatter ex) {
            addActionMessage(request, ex.getKey(), solveLabelFormatterArgs(request, ex.getLabelFormatterArgs()));
            return prepareCreateAdministrativeOfficeFeeAndInsuranceExemptionInvalid(mapping, form, request, response);

        } catch (DomainException ex) {
            addActionMessage(request, ex.getKey(), ex.getArgs());
            return prepareCreateAdministrativeOfficeFeeAndInsuranceExemptionInvalid(mapping, form, request, response);
        }

        return showExemptions(mapping, form, request, response);
    }

    public ActionForward changeForm(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) {
        PhdEventExemptionBean bean = getRenderedObject("exemptionBean");
        RenderUtils.invalidateViewState();
        if (bean.getJustificationType().equals(PhdEventExemptionJustificationType.PHD_GRATUITY_FCT_SCHOLARSHIP_EXEMPTION)) {
            request.setAttribute("exemptionBean", bean);
            return mapping.findForward("createFCTExemption");

        } else {
            request.setAttribute("exemptionBean", bean);
            return mapping.findForward("createFCTExemption");
        }
    }
}
TOP

Related Classes of org.fenixedu.academic.ui.struts.action.administrativeOffice.payments.ExemptionsManagementDispatchAction

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.