/**
* Copyright © ${project.inceptionYear} Instituto Superior Técnico
*
* This file is part of Fenix IST.
*
* Fenix IST 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.
*
* Fenix IST 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 Fenix IST. If not, see <http://www.gnu.org/licenses/>.
*/
package pt.ist.fenix.ui.struts.action;
import java.util.Collection;
import java.util.Set;
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.ExecutionYear;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.accounting.PaymentCode;
import org.fenixedu.academic.domain.accounting.PaymentPlan;
import org.fenixedu.academic.domain.accounting.events.gratuity.GratuityEvent;
import org.fenixedu.academic.domain.accounting.paymentCodes.AccountingEventPaymentCode;
import org.fenixedu.academic.domain.accounting.paymentCodes.InstallmentPaymentCode;
import org.fenixedu.academic.predicate.AccessControl;
import org.fenixedu.academic.ui.struts.action.base.FenixDispatchAction;
import org.fenixedu.academic.util.Money;
import org.fenixedu.bennu.struts.annotations.Forward;
import org.fenixedu.bennu.struts.annotations.Forwards;
import org.fenixedu.bennu.struts.annotations.Mapping;
@Mapping(path = "/gratuityPaymentsReminder")
@Forwards({
@Forward(name = "showGratuityPaymentsReminder", path = "/showGratuityPaymentsReminder.jsp")
})
public class GratuityPaymentsReminderAction extends FenixDispatchAction {
public ActionForward showReminder(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
Person person = AccessControl.getPerson();
InstallmentPaymentCode debtPaymentCode = readDebtPaymentCodeInThisExecutionYear(person);
if (debtPaymentCode != null) {
PaymentPlan paymentPlan = debtPaymentCode.getInstallment().getPaymentPlan();
if (paymentPlan.isForPartialRegime() && debtPaymentCode.getInstallment().getOrder() == 1) {
request.setAttribute("remnantGratuity", false);
request.setAttribute("remainingPaymentEndDate", "15 de Dezembro de 2011");
request.setAttribute("remainingPaymentDebt", debtPaymentCode.getMinAmount().toString());
request.setAttribute("remainingPaymentCode", debtPaymentCode.getCode());
} else if (debtPaymentCode.getInstallment().getOrder() == 3) {
request.setAttribute("remnantGratuity", false);
request.setAttribute("remainingPaymentEndDate", "31 de Maio de 2012");
request.setAttribute("remainingPaymentDebt", debtPaymentCode.getMinAmount().toString());
request.setAttribute("remainingPaymentCode", debtPaymentCode.getCode());
}
} else {
request.setAttribute("remnantGratuity", false);
}
return mapping.findForward("showGratuityPaymentsReminder");
}
final Money THRESHOLD = new Money("13.00");
private InstallmentPaymentCode readDebtPaymentCodeInThisExecutionYear(Person person) {
ExecutionYear currentExecutionYear = ExecutionYear.readExecutionYearByName("2011/2012");
Set<GratuityEvent> gratuityEvents = person.getGratuityEvents();
for (GratuityEvent gratuityEvent : gratuityEvents) {
if (gratuityEvent.getExecutionYear() != currentExecutionYear) {
continue;
}
if (gratuityEvent.getAmountToPay().lessThan(THRESHOLD)) {
PaymentCode activePaymentCode = getActivePaymentCode(gratuityEvent);
if (activePaymentCode == null) {
continue;
}
if (!(activePaymentCode instanceof InstallmentPaymentCode)) {
continue;
}
return (InstallmentPaymentCode) activePaymentCode;
}
}
return null;
}
private PaymentCode getActivePaymentCode(GratuityEvent gratuityEvent) {
Collection<AccountingEventPaymentCode> paymentCodesSet = gratuityEvent.getAllPaymentCodes();
for (AccountingEventPaymentCode accountingEventPaymentCode : paymentCodesSet) {
if (accountingEventPaymentCode.isNew()) {
return accountingEventPaymentCode;
}
}
return null;
}
}