/*
* @(#)OrganizationAction.java
*
* Copyright 2009 Instituto Superior Tecnico
* Founding Authors: Luis Cruz, Nuno Ochoa, Paulo Abrantes
*
* https://fenix-ashes.ist.utl.pt/
*
* This file is part of the Expenditure Tracking Module.
*
* The Expenditure Tracking Module 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.
*
* The Expenditure Tracking Module 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 the Expenditure Tracking Module. If not, see <http://www.gnu.org/licenses/>.
*
*/
package pt.ist.expenditureTrackingSystem.presentationTier.actions.organization;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.function.Consumer;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import module.finance.util.Money;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.domain.groups.PersistentGroup;
import org.fenixedu.bennu.core.groups.Group;
import org.fenixedu.bennu.core.security.Authenticate;
import org.fenixedu.bennu.struts.annotations.Mapping;
import org.fenixedu.bennu.struts.portal.EntryPoint;
import org.fenixedu.bennu.struts.portal.StrutsFunctionality;
import pt.ist.expenditureTrackingSystem.domain.ExpenditureTrackingSystem;
import pt.ist.expenditureTrackingSystem.domain.RoleType;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.AcquisitionProcess;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.AcquisitionRequest;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.AcquisitionRequestItem;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.CPVReference;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.PaymentProcess;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.PaymentProcessYear;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.RequestItem;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.afterthefact.AcquisitionAfterTheFact;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.refund.RefundProcess;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.refund.RefundRequest;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.refund.RefundableInvoiceFile;
import pt.ist.expenditureTrackingSystem.domain.authorizations.Authorization;
import pt.ist.expenditureTrackingSystem.domain.authorizations.AuthorizationLog;
import pt.ist.expenditureTrackingSystem.domain.authorizations.DelegatedAuthorization;
import pt.ist.expenditureTrackingSystem.domain.dto.AccountingUnitBean;
import pt.ist.expenditureTrackingSystem.domain.dto.AuthorizationBean;
import pt.ist.expenditureTrackingSystem.domain.dto.CreateSupplierBean;
import pt.ist.expenditureTrackingSystem.domain.dto.CreateUnitBean;
import pt.ist.expenditureTrackingSystem.domain.dto.SupplierBean;
import pt.ist.expenditureTrackingSystem.domain.dto.UnitBean;
import pt.ist.expenditureTrackingSystem.domain.dto.VariantBean;
import pt.ist.expenditureTrackingSystem.domain.organization.AccountingUnit;
import pt.ist.expenditureTrackingSystem.domain.organization.CostCenter;
import pt.ist.expenditureTrackingSystem.domain.organization.Person;
import pt.ist.expenditureTrackingSystem.domain.organization.Project;
import pt.ist.expenditureTrackingSystem.domain.organization.SearchUsers;
import pt.ist.expenditureTrackingSystem.domain.organization.Supplier;
import pt.ist.expenditureTrackingSystem.domain.organization.Unit;
import pt.ist.expenditureTrackingSystem.domain.organization.UserAcquisitionProcessStatistics;
import pt.ist.expenditureTrackingSystem.domain.util.DomainException;
import pt.ist.expenditureTrackingSystem.presentationTier.actions.BaseAction;
import pt.ist.expenditureTrackingSystem.presentationTier.actions.acquisitions.SearchPaymentProcessesAction;
import pt.ist.expenditureTrackingSystem.presentationTier.actions.organization.util.AcquisitionForSupplierAndCPVBean;
import pt.ist.expenditureTrackingSystem.presentationTier.actions.organization.util.RefundForSupplierAndCPVBean;
import pt.ist.fenixWebFramework.renderers.utils.RenderUtils;
import pt.ist.fenixframework.Atomic;
import pt.utl.ist.fenix.tools.util.excel.ExcelStyle;
import pt.utl.ist.fenix.tools.util.excel.Spreadsheet;
import pt.utl.ist.fenix.tools.util.excel.Spreadsheet.Row;
@StrutsFunctionality(app = SearchPaymentProcessesAction.class, path = "expenditure-organization",
titleKey = "link.viewOrganization")
@Mapping(path = "/expenditureTrackingOrganization")
/**
*
* @author Pedro Santos
* @author Paulo Abrantes
* @author Luis Cruz
*
*/
public class OrganizationAction extends BaseAction {
@EntryPoint
public final ActionForward viewOrganization(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
UnitBean unitBean = getRenderedObject("unitBean");
if (unitBean == null) {
unitBean = new UnitBean();
}
final Unit unit = unitBean.getUnit() == null ? (Unit) getDomainObject(request, "unitOid") : unitBean.getUnit();
request.setAttribute("unitBean", unitBean);
return viewOrganization(mapping, request, unit);
}
public final ActionForward viewOrganization(final ActionMapping mapping, final HttpServletRequest request, final Unit unit) {
final Set<Unit> units;
if (unit == null) {
final ExpenditureTrackingSystem expenditureTrackingSystem = ExpenditureTrackingSystem.getInstance();
units = expenditureTrackingSystem.getTopLevelUnitsSet();
request.setAttribute("accountingUnits", expenditureTrackingSystem.getAccountingUnitsSet());
} else {
request.setAttribute("unit", unit);
if (unit.getAccountingUnit() != null) {
request.setAttribute("accountingUnits", Collections.singleton(unit.getAccountingUnit()));
}
units = unit.getSubUnitsSet();
}
request.setAttribute("units", units);
return forward("/expenditureTrackingOrganization/viewOrganization.jsp");
}
public final ActionForward prepareCreateUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Unit unit = getDomainObject(request, "unitOid");
request.setAttribute("bean", new CreateUnitBean(unit));
return forward("/expenditureTrackingOrganization/createUnit.jsp");
}
public final ActionForward createNewUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
CreateUnitBean createUnitBean = getRenderedObject();
final Unit newUnit = Unit.createNewUnit(createUnitBean);
return viewOrganization(mapping, request, newUnit);
}
public final ActionForward prepareCreateAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
request.setAttribute("accountingUnitBean", new AccountingUnitBean());
return forward("/expenditureTrackingOrganization/createAccountingUnit.jsp");
}
public final ActionForward createNewAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AccountingUnitBean accountingUnitBean = getRenderedObject();
AccountingUnit.createNewAccountingUnit(accountingUnitBean);
request.setAttribute("unitBean", new UnitBean());
return viewOrganization(mapping, request, null);
}
private ActionForward editUnit(ActionMapping mapping, HttpServletRequest request, Unit unit) {
request.setAttribute("unit", unit);
return forward("/expenditureTrackingOrganization/editUnit.jsp");
}
public final ActionForward editUnit(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final Unit unit = getDomainObject(request, "unitOid");
return editUnit(mapping, request, unit);
}
public final ActionForward deleteUnit(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final Unit unit = getDomainObject(request, "unitOid");
final Unit parentUnit = unit.getParentUnit();
unit.delete();
return viewOrganization(mapping, request, parentUnit);
}
public final ActionForward searchUsers(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
ExpenditureTrackingSystem.getInstance();
SearchUsers searchUsers = getRenderedObject("searchUsers");
if (searchUsers == null) {
searchUsers = new SearchUsers();
}
request.setAttribute("searchUsers", searchUsers);
return forward("/expenditureTrackingOrganization/searchUsers.jsp");
}
public final ActionForward addRoleAcquisitionCentralGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getAcquisitionCentralGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setAcquisitionCentralGroup(g), mapping, request);
}
public final ActionForward removeRoleAcquisitionCentralGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getAcquisitionCentralGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setAcquisitionCentralGroup(g), mapping, request);
}
public final ActionForward addRoleFundCommitmentManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getFundCommitmentManagerGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setFundCommitmentManagerGroup(g), mapping, request);
}
public final ActionForward removeFundCommitmentManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getFundCommitmentManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setFundCommitmentManagerGroup(g), mapping, request);
}
public final ActionForward addRoleAcquisitionCentralManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getAcquisitionCentralManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setAcquisitionCentralManagerGroup(g), mapping, request);
}
public final ActionForward removeRoleAcquisitionCentralManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getAcquisitionCentralManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setAcquisitionCentralManagerGroup(g), mapping, request);
}
public final ActionForward addRoleAccountingManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getAccountingManagerGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setAccountingManagerGroup(g), mapping, request);
}
public final ActionForward removeRoleAccountingManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getAccountingManagerGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setAccountingManagerGroup(g), mapping, request);
}
public final ActionForward addRoleProjectAccountingManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getProjectAccountingManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setProjectAccountingManagerGroup(g), mapping, request);
}
public final ActionForward removeRoleProjectAccountingManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getProjectAccountingManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setProjectAccountingManagerGroup(g), mapping, request);
}
public final ActionForward addRoleTreasuryMemberGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getTreasuryMemberGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setTreasuryMemberGroup(g), mapping, request);
}
public final ActionForward removeRoleTreasuryMemberGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getTreasuryMemberGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setTreasuryMemberGroup(g), mapping, request);
}
public final ActionForward addRoleSupplierManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getSupplierManagerGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setSupplierManagerGroup(g), mapping, request);
}
public final ActionForward removeRoleSupplierManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getSupplierManagerGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setSupplierManagerGroup(g), mapping, request);
}
public final ActionForward addRoleSupplierFundAllocationManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getSupplierFundAllocationManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setSupplierFundAllocationManagerGroup(g), mapping, request);
}
public final ActionForward removeRoleSupplierFundAllocationManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getSupplierFundAllocationManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setSupplierFundAllocationManagerGroup(g), mapping, request);
}
public final ActionForward addRoleStatisticsViewerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getStatisticsViewerGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setStatisticsViewerGroup(g), mapping, request);
}
public final ActionForward removeRoleStatisticsViewerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getStatisticsViewerGroup(), (g) -> ExpenditureTrackingSystem
.getInstance().setStatisticsViewerGroup(g), mapping, request);
}
public final ActionForward addRoleAcquisitionsUnitManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getAcquisitionsUnitManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setAcquisitionsUnitManagerGroup(g), mapping, request);
}
public final ActionForward removeRoleAcquisitionsUnitManagerGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getAcquisitionsUnitManagerGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setAcquisitionsUnitManagerGroup(g), mapping, request);
}
public final ActionForward addRoleAcquisitionsProcessAuditorGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return addRole(ExpenditureTrackingSystem.getInstance().getAcquisitionsProcessAuditorGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setAcquisitionsProcessAuditorGroup(g), mapping, request);
}
public final ActionForward removeRoleAcquisitionsProcessAuditorGroup(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
return removeRole(ExpenditureTrackingSystem.getInstance().getAcquisitionsProcessAuditorGroup(),
(g) -> ExpenditureTrackingSystem.getInstance().setAcquisitionsProcessAuditorGroup(g), mapping, request);
}
@Atomic
public final ActionForward addRole(final PersistentGroup persistentGroup, final Consumer<PersistentGroup> consumer,
final ActionMapping mapping, final HttpServletRequest request) {
final Person person = getDomainObject(request, "personOid");
final User user = person == null ? null : person.getUser();
final Group group = persistentGroup.toGroup();
final PersistentGroup result = group.grant(user).toPersistentGroup();
consumer.accept(result);
return viewPerson(mapping, request, person);
}
@Atomic
public final ActionForward removeRole(final PersistentGroup persistentGroup, final Consumer<PersistentGroup> consumer,
final ActionMapping mapping, final HttpServletRequest request) {
final Person person = getDomainObject(request, "personOid");
final User user = person == null ? null : person.getUser();
final Group group = persistentGroup.toGroup();
PersistentGroup result = group.revoke(user).toPersistentGroup();
consumer.accept(result);
return viewPerson(mapping, request, person);
}
public final ActionForward viewPerson(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
return viewPerson(mapping, request, person);
}
public final ActionForward viewPerson(final ActionMapping mapping, final HttpServletRequest request, final Person person) {
request.setAttribute("person", person);
request.setAttribute("availableRoles", RoleType.values());
return forward("/expenditureTrackingOrganization/viewPerson.jsp");
}
public final ActionForward viewLoggedPerson(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final User user = Authenticate.getUser();
final Person person = user.getExpenditurePerson();
return viewPerson(mapping, request, person);
}
public final ActionForward editAuthorization(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Authorization authorization = getDomainObject(request, "authorizationOid");
request.setAttribute("authorization", authorization);
return forward("/expenditureTrackingOrganization/editAuthorization.jsp");
}
public final ActionForward viewAuthorization(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Authorization authorization = getDomainObject(request, "authorizationOid");
request.setAttribute("authorization", authorization);
return forward("/expenditureTrackingOrganization/viewAuthorization.jsp");
}
public final ActionForward attributeAuthorization(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
request.setAttribute("person", person);
RenderUtils.invalidateViewState();
final UnitBean unitBean = new UnitBean();
request.setAttribute("unitBean", unitBean);
return expandAuthorizationUnit(mapping, request, person, null);
}
public final ActionForward prepareAddResponsibleAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
request.setAttribute("person", person);
final Set<AccountingUnit> accountingUnits = ExpenditureTrackingSystem.getInstance().getAccountingUnitsSet();
request.setAttribute("accountingUnits", accountingUnits);
return forward("/expenditureTrackingOrganization/selectResponsibleAccountingUnitToAddMember.jsp");
}
public final ActionForward addResponsibleAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
accountingUnit.addResponsiblePeople(person);
return viewPerson(mapping, request, person);
}
public final ActionForward prepareAddToAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
request.setAttribute("person", person);
final Set<AccountingUnit> accountingUnits = ExpenditureTrackingSystem.getInstance().getAccountingUnitsSet();
request.setAttribute("accountingUnits", accountingUnits);
return forward("/expenditureTrackingOrganization/selectAccountingUnitToAddMember.jsp");
}
public final ActionForward addToAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
accountingUnit.addPeople(person);
return viewPerson(mapping, request, person);
}
public final ActionForward prepareAddResponsibleProjectAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
request.setAttribute("person", person);
final Set<AccountingUnit> accountingUnits = ExpenditureTrackingSystem.getInstance().getAccountingUnitsSet();
request.setAttribute("accountingUnits", accountingUnits);
return forward("/expenditureTrackingOrganization/selectResponsibleProjectAccountingUnitToAddMember.jsp");
}
public final ActionForward addResponsibleProjectAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
accountingUnit.addResponsibleProjectAccountants(person);
return viewPerson(mapping, request, person);
}
public final ActionForward prepareAddToProjectAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
request.setAttribute("person", person);
final Set<AccountingUnit> accountingUnits = ExpenditureTrackingSystem.getInstance().getAccountingUnitsSet();
request.setAttribute("accountingUnits", accountingUnits);
return forward("/expenditureTrackingOrganization/selectProjectAccountingUnitToAddMember.jsp");
}
public final ActionForward addToProjectAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
accountingUnit.addProjectAccountants(person);
return viewPerson(mapping, request, person);
}
public final ActionForward prepareAddToTreasuryAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
request.setAttribute("person", person);
final Set<AccountingUnit> accountingUnits = ExpenditureTrackingSystem.getInstance().getAccountingUnitsSet();
request.setAttribute("accountingUnits", accountingUnits);
return forward("/expenditureTrackingOrganization/selectTreasuryAccountingUnitToAddMember.jsp");
}
public final ActionForward addToTreasuryAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
accountingUnit.addTreasuryMembers(person);
return viewPerson(mapping, request, person);
}
public final ActionForward expandAuthorizationUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final UnitBean unitBean = getRenderedObject();
final Person person = getDomainObject(request, "personOid");
if (unitBean == null || unitBean.getUnit() == null) {
final Unit unit = getDomainObject(request, "unitOid");
return expandAuthorizationUnit(mapping, request, person, unit);
} else {
return expandAuthorizationUnit(mapping, request, person, unitBean.getUnit());
}
}
public final ActionForward expandAuthorizationUnit(final ActionMapping mapping, final HttpServletRequest request,
final Person person, final Unit unit) {
request.setAttribute("person", person);
request.setAttribute("unit", unit);
final Set<Unit> units =
unit == null ? ExpenditureTrackingSystem.getInstance().getTopLevelUnitsSet() : unit.getSubUnitsSet();
request.setAttribute("units", units);
final UnitBean unitBean = new UnitBean();
request.setAttribute("unitBean", unitBean);
return forward("/expenditureTrackingOrganization/changeAuthorizationUnit.jsp");
}
/* public final ActionForward changeAuthorizationUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
final Unit unit = getDomainObject(request, "unitOid");
person.createAuthorization(unit);
return viewPerson(mapping, request, person);
}
*/
public final ActionForward prepareCreateAuthorizationUnitWithoutPerson(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Unit unit = getDomainObject(request, "unitOid");
return prepareCreateAuthorizationUnit(request, null, unit, true);
}
public final ActionForward prepareCreateAuthorizationUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
final Unit unit = getDomainObject(request, "unitOid");
return prepareCreateAuthorizationUnit(request, person, unit, false);
}
public final ActionForward prepareCreateAuthorizationUnit(final HttpServletRequest request, final Person person,
final Unit unit, final boolean returnToUnitInterface) {
final AuthorizationBean authorizationBean = new AuthorizationBean(person, unit, returnToUnitInterface);
request.setAttribute("authorizationBean", authorizationBean);
request.setAttribute("person", person);
request.setAttribute("unit", unit);
return forward("/expenditureTrackingOrganization/createAuthorizationUnit.jsp");
}
public final ActionForward createAuthorizationUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AuthorizationBean authorizationBean = getRenderedObject();
authorizationBean.getPerson().createAuthorization(authorizationBean, authorizationBean.getJustification());
if (authorizationBean.isReturnToUnitInterface()) {
final UnitBean unitBean = new UnitBean(authorizationBean.getUnit());;
request.setAttribute("unitBean", unitBean);
return viewOrganization(mapping, request, authorizationBean.getUnit());
}
return viewPerson(mapping, request, authorizationBean.getPerson());
}
public final ActionForward deleteAuthorization(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Authorization authorization = getDomainObject(request, "authorizationOid");
final Person person = authorization.getPerson();
authorization.delete();
return viewPerson(mapping, request, person);
}
public final ActionForward manageSuppliers(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
SupplierBean supplierBean = getRenderedObject("supplierBean");
if (supplierBean == null) {
supplierBean = new SupplierBean();
Supplier supplier = getDomainObject(request, "supplierOid");
supplierBean.setSupplier(supplier);
}
request.setAttribute("supplierBean", supplierBean);
return forward("/expenditureTrackingOrganization/manageSuppliers.jsp");
}
public final ActionForward manageSuppliers(final ActionMapping mapping, final HttpServletRequest request,
final SupplierBean supplierBean) {
request.setAttribute("supplierBean", supplierBean);
return forward("/expenditureTrackingOrganization/manageSuppliers.jsp");
}
public final ActionForward viewSupplier(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final Supplier supplier = getDomainObject(request, "supplierOid");
return viewSupplier(mapping, form, request, response, supplier);
}
private final ActionForward viewSupplier(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response, final Supplier supplier) {
request.setAttribute("supplier", supplier);
return forward("/expenditureTrackingOrganization/viewSupplier.jsp");
}
public final ActionForward prepareEditSupplier(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Supplier supplier = getDomainObject(request, "supplierOid");
request.setAttribute("supplier", supplier);
return forward("/expenditureTrackingOrganization/editSupplier.jsp");
}
public final ActionForward editSupplier(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final Supplier supplier = getRenderedObject();
final SupplierBean supplierBean = new SupplierBean(supplier);
return manageSuppliers(mapping, request, supplierBean);
}
public final ActionForward deleteSupplier(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Supplier supplier = getDomainObject(request, "supplierOid");
supplier.delete();
return manageSuppliers(mapping, form, request, response);
}
public ActionForward revokeAuthorization(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Authorization authorization = getDomainObject(request, "authorizationOid");
try {
authorization.revoke();
} catch (DomainException e) {
addMessage(request, e.getMessage());
}
return viewAuthorization(mapping, form, request, response);
}
public ActionForward delegateAuthorization(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
Authorization authorization = getDomainObject(request, "authorizationOid");
Unit unit = getDomainObject(request, "unitOid");
request.setAttribute("authorization", authorization);
Person person = getLoggedPerson();
if (authorization.getPerson() == person && authorization.getCanDelegate()) {
AuthorizationBean bean = new AuthorizationBean(authorization);
bean.setUnit(unit);
request.setAttribute("bean", bean);
} else {
addMessage(request, "label.unable.to.delegate.that.action");
}
return forward("/expenditureTrackingOrganization/delegateAuthorization.jsp");
}
public ActionForward chooseDelegationUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Authorization authorization = getDomainObject(request, "authorizationOid");
request.setAttribute("authorization", authorization);
Unit unit = getDomainObject(request, "unitOid");
if (unit == null) {
unit = authorization.getUnit();
}
request.setAttribute("unit", unit);
request.setAttribute("units", unit.getSubUnitsSet());
return forward("/expenditureTrackingOrganization/delegateChooseUnit.jsp");
}
public ActionForward createDelegation(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final AuthorizationBean bean = getRenderedObject("bean");
try {
DelegatedAuthorization.delegate(bean.getAuthorization(), bean.getPerson(), bean.getUnit(), bean.getCanDelegate(),
bean.getEndDate(), bean.getMaxAmount());
} catch (DomainException e) {
addMessage(request, e.getMessage());
request.setAttribute("bean", bean);
return forward("/expenditureTrackingOrganization/delegateAuthorization.jsp");
}
RenderUtils.invalidateViewState();
request.setAttribute("authorization", bean.getAuthorization());
return forward("/expenditureTrackingOrganization/viewAuthorization.jsp");
}
public ActionForward removeResponsibleFromAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
final Person person = getDomainObject(request, "personOid");
accountingUnit.removeResponsiblePeople(person);
return viewPerson(mapping, request, person);
}
public ActionForward removePersonFromAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
final Person person = getDomainObject(request, "personOid");
accountingUnit.removePeople(person);
return viewPerson(mapping, request, person);
}
public ActionForward removePersonResponsibleForProjectAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
final Person person = getDomainObject(request, "personOid");
accountingUnit.removeResponsibleProjectAccountants(person);
return viewPerson(mapping, request, person);
}
public ActionForward removePersonFromProjectAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
final Person person = getDomainObject(request, "personOid");
accountingUnit.removeProjectAccountants(person);
return viewPerson(mapping, request, person);
}
public ActionForward removePersonFromTreasuryAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
final Person person = getDomainObject(request, "personOid");
accountingUnit.removeTreasuryMembers(person);
return viewPerson(mapping, request, person);
}
public ActionForward viewAccountingUnit(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
request.setAttribute("accountingUnit", accountingUnit);
return forward("/expenditureTrackingOrganization/viewAccountingUnit.jsp");
}
public ActionForward prepareAddUnitToAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
request.setAttribute("accountingUnit", accountingUnit);
UnitBean unitBean = getRenderedObject();
if (unitBean == null || unitBean.getUnit() == null) {
final Unit unit = getDomainObject(request, "unitOid");
if (unit != null) {
unitBean = new UnitBean(unit);
}
}
if (unitBean == null) {
unitBean = new UnitBean();
}
request.setAttribute("unitBean", unitBean);
final Set<Unit> units =
unitBean.getUnit() == null ? ExpenditureTrackingSystem.getInstance().getTopLevelUnitsSet() : unitBean.getUnit()
.getSubUnitsSet();
request.setAttribute("units", units);
RenderUtils.invalidateViewState();
return forward("/expenditureTrackingOrganization/addUnitToAccountingUnit.jsp");
}
public ActionForward addUnitToAccountingUnit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AccountingUnit accountingUnit = getDomainObject(request, "accountingUnitOid");
request.setAttribute("accountingUnit", accountingUnit);
final Unit unit;
final UnitBean unitBean = getRenderedObject();
if (unitBean == null) {
unit = getDomainObject(request, "unitOid");
} else {
RenderUtils.invalidateViewState();
unit = unitBean.getUnit();
}
accountingUnit.addUnits(unit);
return forward("/expenditureTrackingOrganization/viewAccountingUnit.jsp");
}
public ActionForward listSuppliers(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) throws IOException {
Spreadsheet suppliersSheet = getSuppliersSheet();
response.setContentType("application/xls ");
response.setHeader("Content-disposition", "attachment; filename=fornecedores.xls");
ServletOutputStream outputStream = response.getOutputStream();
suppliersSheet.exportToXLSSheet(outputStream);
outputStream.flush();
outputStream.close();
return null;
}
private Spreadsheet getSuppliersSheet() {
Spreadsheet spreadsheet = new Spreadsheet("Fornecedores");
spreadsheet.setHeader("Fornecedor");
spreadsheet.setHeader("NIF");
spreadsheet.setHeader("Total alocado");
spreadsheet.setHeader("Ajuste Directo");
spreadsheet.setHeader("Fundos de Maneio");
spreadsheet.setHeader("Reembolsos");
spreadsheet.setHeader("Por outras Vias");
for (Supplier supplier : Bennu.getInstance().getSuppliersSet()) {
Row row = spreadsheet.addRow();
row.setCell(supplier.getName());
row.setCell(supplier.getFiscalIdentificationCode());
row.setCell(supplier.getTotalAllocated().getValue());
row.setCell(supplier.getTotalAllocatedByAcquisitionProcesses().getValue());
row.setCell(supplier.getTotalAllocatedByWorkingCapitals().getValue());
row.setCell(supplier.getTotalAllocatedByRefunds().getValue());
row.setCell(supplier.getTotalAllocatedByPurchases().getValue());
}
return spreadsheet;
}
public final ActionForward editSupplierLimit(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Supplier supplier = getDomainObject(request, "supplierOid");
request.setAttribute("supplier", supplier);
return forward("/expenditureTrackingOrganization/editSupplierLimit.jsp");
}
public final ActionForward prepareMergeSupplier(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Supplier supplier = getDomainObject(request, "supplierToTransferOID");
request.setAttribute("supplierToTransfer", supplier);
SupplierBean supplierBean = getRenderedObject("supplierBean");
if (supplierBean == null) {
supplierBean = new SupplierBean();
}
request.setAttribute("supplierBean", supplierBean);
return forward("/expenditureTrackingOrganization/mergeSupplier.jsp");
}
public final ActionForward mergeSupplier(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Supplier supplierToTransfer = getDomainObject(request, "supplierToTransferOID");
final Supplier supplierDestination = getDomainObject(request, "supplierDestinationOID");
supplierDestination.merge(supplierToTransfer);
final SupplierBean supplierBean = new SupplierBean(supplierDestination);
return manageSuppliers(mapping, request, supplierBean);
}
private String determineProjectRegime(final String projectCode) {
final Project project = Project.findProjectByCode(projectCode);
return project == null ? "" : (project.getDefaultRegeimIsCCP() != null && project.getDefaultRegeimIsCCP().booleanValue() ? "CCP" : "C&T");
}
public final ActionForward downloadSupplierAcquisitionInformation(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) throws IOException {
final Supplier supplier = getDomainObject(request, "supplierOid");
final Spreadsheet suppliersSheet = getSupplierAcquisitionInformationSheet(supplier);
response.setContentType("application/xls ");
response.setHeader("Content-disposition", "attachment; filename=fornecedor.xls");
final ServletOutputStream outputStream = response.getOutputStream();
suppliersSheet.exportToXLSSheet(outputStream);
outputStream.flush();
outputStream.close();
return null;
}
private Spreadsheet getSupplierAcquisitionInformationSheet(final Supplier supplier) {
Spreadsheet spreadsheet = new Spreadsheet(supplier.getPresentationName());
spreadsheet.setHeader("Identificação Processo");
spreadsheet.setHeader("Descrição");
spreadsheet.setHeader("Valor alocado ao fornecedor");
spreadsheet.setHeader("IVA");
spreadsheet.setHeader("Total");
Money totalForSupplierLimit = Money.ZERO;
Money totalForSupplier = Money.ZERO;
for (final AcquisitionAfterTheFact acquisitionAfterTheFact : supplier.getAcquisitionsAfterTheFactSet()) {
if (!acquisitionAfterTheFact.getDeletedState().booleanValue() && acquisitionAfterTheFact.isInAllocationPeriod()) {
final Money value = acquisitionAfterTheFact.getValue();
totalForSupplierLimit = totalForSupplierLimit.add(value);
totalForSupplier = totalForSupplier.add(value);
final Row row = spreadsheet.addRow();
row.setCell(acquisitionAfterTheFact.getAcquisitionProcessId());
row.setCell(acquisitionAfterTheFact.getDescription());
row.setCell(value.toFormatString());
row.setCell(acquisitionAfterTheFact.getVatValue());
row.setCell(value.toFormatString());
}
}
for (final AcquisitionRequest acquisitionRequest : supplier.getAcquisitionRequestsSet()) {
if (acquisitionRequest.isInAllocationPeriod()) {
final AcquisitionProcess acquisitionProcess = acquisitionRequest.getAcquisitionProcess();
if (acquisitionProcess.isActive() && acquisitionProcess.isAllocatedToSupplier()) {
Money forSupplierLimit = Money.ZERO;
Money currentValue = Money.ZERO;
for (final RequestItem requestItem : acquisitionRequest.getRequestItemsSet()) {
AcquisitionRequestItem acqRequestItem = (AcquisitionRequestItem) requestItem;
if (acquisitionProcess.getAcquisitionProcessState().hasBeenAllocatedPermanently()) {
forSupplierLimit = forSupplierLimit.add(acqRequestItem.getTotalRealValue());
currentValue = currentValue.add(acqRequestItem.getTotalRealValueWithAdditionalCostsAndVat());
} else {
forSupplierLimit = forSupplierLimit.add(acqRequestItem.getTotalItemValue());
currentValue = currentValue.add(acqRequestItem.getTotalItemValueWithAdditionalCostsAndVat());
}
}
totalForSupplierLimit = totalForSupplierLimit.add(forSupplierLimit);
totalForSupplier = totalForSupplier.add(currentValue);
final Row row = spreadsheet.addRow();
row.setCell(acquisitionRequest.getAcquisitionProcessId());
row.setCell(acquisitionRequest.getClass().getSimpleName());
row.setCell(forSupplierLimit.toFormatString());
row.setCell(acquisitionRequest.getCurrentTotalVatValue().toFormatString());
row.setCell(currentValue.toFormatString());
}
}
}
final Map<RefundProcess, Money> refundValueMap = new HashMap<RefundProcess, Money>();
final Map<RefundProcess, Money> vatMap = new HashMap<RefundProcess, Money>();
final Map<RefundProcess, Money> totalValueMap = new HashMap<RefundProcess, Money>();
for (final RefundableInvoiceFile invoiceFile : supplier.getRefundInvoicesSet()) {
if (invoiceFile.isInAllocationPeriod()) {
final RefundProcess refundProcess = invoiceFile.getRefundItem().getRequest().getProcess();
if (refundProcess.isActive() && !refundProcess.getShouldSkipSupplierFundAllocation()) {
final RefundRequest refundRequest = refundProcess.getRequest();
if (!refundValueMap.containsKey(refundProcess)) {
refundValueMap.put(refundProcess, Money.ZERO);
vatMap.put(refundProcess, Money.ZERO);
totalValueMap.put(refundProcess, Money.ZERO);
}
refundValueMap.put(refundProcess, refundValueMap.get(refundProcess).add(invoiceFile.getRefundableValue()));
vatMap.put(refundProcess,
vatMap.get(refundProcess).add(invoiceFile.getValueWithVat().subtract(invoiceFile.getValue())));
totalValueMap.put(refundProcess, totalValueMap.get(refundProcess).add(invoiceFile.getValueWithVat()));
}
}
}
for (final Entry<RefundProcess, Money> entry : refundValueMap.entrySet()) {
final RefundProcess refundProcess = entry.getKey();
final Money refundableValue = entry.getValue();
final Money vatValue = vatMap.get(refundProcess);
final Money totalValue = totalValueMap.get(refundProcess);
totalForSupplierLimit = totalForSupplierLimit.add(refundableValue);
totalForSupplier = totalForSupplier.add(totalValue);
final Row row = spreadsheet.addRow();
row.setCell(refundProcess.getProcessNumber());
row.setCell(refundProcess.getClass().getSimpleName());
row.setCell(refundableValue.toFormatString());
row.setCell(vatValue.toFormatString());
row.setCell(totalValue.toFormatString());
}
spreadsheet.addRow();
final Row row = spreadsheet.addRow();
row.setCell("Total");
row.setCell("");
row.setCell(totalForSupplierLimit.toFormatString());
row.setCell("");
row.setCell(totalForSupplier.toFormatString());
return spreadsheet;
}
public final ActionForward viewSupplierProcessesByCPV(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Supplier supplier = getDomainObject(request, "supplierOID");
final CPVReference cpvReference = getDomainObject(request, "cpvReferenceOID");
request.setAttribute("supplier", supplier);
request.setAttribute("cpvReference", cpvReference);
// supplier.getAllocationsByCPVReference();
// supplier.getUnconfirmedAllocationsByCPVReference();
final SortedSet<AcquisitionForSupplierAndCPVBean> acquisitionBeans = new TreeSet<AcquisitionForSupplierAndCPVBean>();
for (final AcquisitionRequest acquisitionRequest : supplier.getAcquisitionRequestsSet()) {
if (acquisitionRequest.isInAllocationPeriod()) {
final AcquisitionProcess acquisitionProcess = acquisitionRequest.getAcquisitionProcess();
if (acquisitionProcess.isActive() && acquisitionRequest.hasRequestItemForCPV(cpvReference)) {
acquisitionBeans.add(new AcquisitionForSupplierAndCPVBean(supplier, cpvReference, acquisitionProcess));
}
}
}
request.setAttribute("acquisitionBeans", acquisitionBeans);
final SortedSet<RefundForSupplierAndCPVBean> refundBeans = new TreeSet<RefundForSupplierAndCPVBean>();
// download
for (final RefundableInvoiceFile invoiceFile : supplier.getRefundInvoicesSet()) {
if (invoiceFile.isInAllocationPeriod() && invoiceFile.getRefundItem().getCPVReference() == cpvReference) {
final RefundProcess refundProcess = invoiceFile.getRefundItem().getRequest().getProcess();
if (refundProcess.isActive()) {
refundBeans.add(new RefundForSupplierAndCPVBean(supplier, cpvReference, refundProcess));
}
}
}
request.setAttribute("refundBeans", refundBeans);
final SortedSet<AcquisitionAfterTheFact> afterTheFactProcesses =
new TreeSet<AcquisitionAfterTheFact>(new Comparator<AcquisitionAfterTheFact>() {
@Override
public int compare(AcquisitionAfterTheFact o1, AcquisitionAfterTheFact o2) {
return PaymentProcess.COMPARATOR_BY_YEAR_AND_ACQUISITION_PROCESS_NUMBER.compare(
o1.getAfterTheFactAcquisitionProcess(), o2.getAfterTheFactAcquisitionProcess());
}
});
for (final AcquisitionAfterTheFact acquisitionAfterTheFact : supplier.getAcquisitionsAfterTheFactSet()) {
if (acquisitionAfterTheFact.isInAllocationPeriod() && !acquisitionAfterTheFact.getDeletedState().booleanValue()
&& acquisitionAfterTheFact.getCpvReference() == cpvReference) {
afterTheFactProcesses.add(acquisitionAfterTheFact);
}
}
request.setAttribute("afterTheFactProcesses", afterTheFactProcesses);
return forward("/expenditureTrackingOrganization/viewSupplierProcessesByCPV.jsp");
}
public final ActionForward managePriorityCPVs(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
List<CPVReference> priorityCPVReferences =
new ArrayList<CPVReference>(ExpenditureTrackingSystem.getInstance().getPriorityCPVReferences());
Collections.sort(priorityCPVReferences, new BeanComparator("code"));
request.setAttribute("cpvs", priorityCPVReferences);
request.setAttribute("bean", new VariantBean());
return forward("/expenditureTrackingOrganization/priorityCVPs.jsp");
}
public final ActionForward addPriorityCPV(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
CPVReference reference = getRenderedObject("cpvToAdd");
reference.markAsPriority();
RenderUtils.invalidateViewState();
return managePriorityCPVs(mapping, form, request, response);
}
public final ActionForward removePriorityCPV(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
CPVReference reference = getDomainObject(request, "cpvId");
reference.unmarkAsPriority();
RenderUtils.invalidateViewState();
return managePriorityCPVs(mapping, form, request, response);
}
public final ActionForward viewAuthorizationLogs(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Person person = getDomainObject(request, "personOid");
request.setAttribute("person", person);
final Unit unit = getDomainObject(request, "unitOid");
request.setAttribute("unit", unit);
final Set<AuthorizationLog> authorizationLogs;
if (person == null && unit == null) {
authorizationLogs = null;
} else if (person == null) {
authorizationLogs = unit.getSortedAuthorizationLogsSet();
} else if (unit == null) {
authorizationLogs = person.getSortedAuthorizationLogsSet();
} else {
authorizationLogs = new TreeSet<AuthorizationLog>(AuthorizationLog.COMPARATOR_BY_WHEN);
for (final AuthorizationLog authorizationLog : unit.getAuthorizationLogsSet()) {
if (authorizationLog.getPerson() == person) {
authorizationLogs.add(authorizationLog);
}
}
}
request.setAttribute("authorizationLogs", authorizationLogs);
return forward("/expenditureTrackingOrganization/viewAuthorizationLogs.jsp");
}
public final ActionForward manageObservers(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Unit unit = getDomainObject(request, "unitOid");
request.setAttribute("unit", unit);
final Person loggedPerson = Person.getLoggedPerson();
if (!unit.isResponsible(loggedPerson) && !RoleType.MANAGER.group().isMember(loggedPerson.getUser())
&& !ExpenditureTrackingSystem.isAcquisitionsUnitManagerGroupMember()) {
return viewLoggedPerson(mapping, form, request, response);
}
request.setAttribute("bean", new SearchUsers());
return forward("/expenditureTrackingOrganization/manageUnitObservers.jsp");
}
public final ActionForward addObserver(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final Unit unit = getDomainObject(request, "unitOid");
SearchUsers bean = getRenderedObject("bean");
unit.addObservers(bean.getPerson());
RenderUtils.invalidateViewState("bean");
return manageObservers(mapping, form, request, response);
}
public final ActionForward removeObserver(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Unit unit = getDomainObject(request, "unitOid");
final Person observer = getDomainObject(request, "observerOid");
unit.removeObservers(observer);
return manageObservers(mapping, form, request, response);
}
public final ActionForward changeDefaultRegeimIsCCP(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final Unit unit = getDomainObject(request, "unitOid");
unit.toggleDefaultRegeim();
final UnitBean unitBean = new UnitBean(unit);
request.setAttribute("unitBean", unitBean);
return viewOrganization(mapping, request, unit);
}
public final ActionForward viewAcquisitionProcessStatistics(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
UserAcquisitionProcessStatistics userAcquisitionProcessStatistics = getRenderedObject();
if (userAcquisitionProcessStatistics == null) {
final User user = getDomainObject(request, "userOid");
final PaymentProcessYear paymentProcessYear =
PaymentProcessYear.getPaymentProcessYearByYear(Integer.valueOf(Calendar.getInstance().get(Calendar.YEAR)));
userAcquisitionProcessStatistics = new UserAcquisitionProcessStatistics(user, paymentProcessYear);
} else {
RenderUtils.invalidateViewState();
}
request.setAttribute("userAcquisitionProcessStatistics", userAcquisitionProcessStatistics);
return forward("/expenditureTrackingOrganization/viewAcquisitionProcessStatistics.jsp");
}
public ActionForward listCPVReferences(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final Set<CPVReference> cvpReferences = Bennu.getInstance().getCPVReferencesSet();
final SortedSet<CPVReference> sortedCPVReferences = new TreeSet<CPVReference>(CPVReference.COMPARATOR_BY_DESCRIPTION);
sortedCPVReferences.addAll(cvpReferences);
request.setAttribute("cvpReferences", sortedCPVReferences);
return forward("/expenditureTrackingOrganization/listCPVReferences.jsp");
}
public final ActionForward downloadUnitResponsibles(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) throws IOException, SQLException {
response.setContentType("application/xls ");
response.setHeader("Content-disposition", "attachment; filename=ResponsaveisUnidades.xls");
final ServletOutputStream outputStream = response.getOutputStream();
final HSSFWorkbook workbook = new HSSFWorkbook();
final ExcelStyle excelStyle = new ExcelStyle(workbook);
final HSSFSheet sheet = workbook.createSheet("Responsaveis");
sheet.setDefaultColumnWidth(20);
final HSSFRow row = sheet.createRow(sheet.getLastRowNum());
createHeaderCell(excelStyle, row, 0, "Centro de Custo");
createHeaderCell(excelStyle, row, 1, "Unidade");
createHeaderCell(excelStyle, row, 2, "Responsável Aprovação");
createHeaderCell(excelStyle, row, 4, "Responsável Despesa");
sheet.addMergedRegion(new CellRangeAddress(0, 0, 2, 3));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 4, 5));
for (final Unit unit : ExpenditureTrackingSystem.getInstance().getTopLevelUnitsSet()) {
writeUnitResponsibleInfo(excelStyle, sheet, unit);
}
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
return null;
}
private void writeUnitResponsibleInfo(final ExcelStyle excelStyle, final HSSFSheet sheet, final Unit unit) {
writeUnitResponsibleInfo(excelStyle, sheet, unit, new HashSet<Unit>());
}
private void writeUnitResponsibleInfo(final ExcelStyle excelStyle, final HSSFSheet sheet, final Unit unit,
final Set<Unit> processed) {
final int rowIndex = sheet.getLastRowNum() + 1;
HSSFRow row = sheet.createRow(rowIndex);
if (unit instanceof CostCenter) {
final CostCenter costCenter = (CostCenter) unit;
createCell(excelStyle, row, 0, costCenter.getCostCenter());
}
createCell(excelStyle, row, 1, unit.getName());
final List<Person>[] approvalsAndAuthorizations = getApprovalsAndAuthorizations(unit);
final List<Person> approvals = approvalsAndAuthorizations[0];
final List<Person> authorizations = approvalsAndAuthorizations[1];
Collections.sort(approvals, Person.COMPARATOR_BY_NAME);
Collections.sort(authorizations, Person.COMPARATOR_BY_NAME);
for (int i = 0; i < approvals.size() || i < authorizations.size(); i++) {
final Person approval = i < approvals.size() ? approvals.get(i) : null;
final Person authorization = i < authorizations.size() ? authorizations.get(i) : null;
if (i > 0) {
row = sheet.createRow(sheet.getLastRowNum() + 1);
}
if (approval != null) {
createCell(excelStyle, row, 2, approval.getUsername());
createCell(excelStyle, row, 3, approval.getUser().getDisplayName());
}
if (authorization != null) {
createCell(excelStyle, row, 4, authorization.getUsername());
createCell(excelStyle, row, 5, authorization.getUser().getDisplayName());
}
}
final int totalRows = Math.max(approvals.size(), authorizations.size());
if (totalRows > 0) {
sheet.addMergedRegion(new CellRangeAddress(rowIndex, rowIndex + totalRows - 1, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(rowIndex, rowIndex + totalRows - 1, 1, 1));
}
for (final Unit subUnit : sortUnitsByCostCenter(unit.getSubUnitsSet())) {
if (!processed.contains(subUnit)) {
processed.add(subUnit);
if (!(subUnit instanceof Project)) {
writeUnitResponsibleInfo(excelStyle, sheet, subUnit, processed);
}
}
}
}
private List<Person>[] getApprovalsAndAuthorizations(final Unit unit) {
final List<Person> approvals = new ArrayList<Person>();
final List<Person> authorizations = new ArrayList<Person>();
if (unit != null) {
for (final Authorization authorization : unit.getAuthorizationsSet()) {
if (authorization.isValid()) {
final Person person = authorization.getPerson();
if (authorization.getMaxAmount().isZero()) {
approvals.add(person);
} else {
authorizations.add(person);
}
}
}
if (approvals.isEmpty() && authorizations.isEmpty()) {
return getApprovalsAndAuthorizations(unit.getParentUnit());
}
if (approvals.isEmpty()) {
approvals.addAll(authorizations);
} else if (authorizations.isEmpty()) {
final List<Person>[] approvalsAndAuthorizations = getApprovalsAndAuthorizations(unit.getParentUnit());
return new List[] { approvals, approvalsAndAuthorizations[1] };
}
}
return new List[] { approvals, authorizations };
}
private SortedSet<Unit> sortUnitsByCostCenter(final Set<Unit> units) {
final SortedSet<Unit> result = new TreeSet<Unit>(new Comparator<Unit>() {
@Override
public int compare(final Unit u1, final Unit u2) {
final int cc1 = getMinCostCenter(u1);
final int cc2 = getMinCostCenter(u2);
final int i = cc1 - cc2;
return i == 0 ? u1.hashCode() - u2.hashCode() : i;
}
private int getMinCostCenter(final Unit unit) {
if (unit instanceof CostCenter) {
final CostCenter costCenter = (CostCenter) unit;
return Integer.parseInt(getParsableStr(costCenter.getCostCenter()));
}
int min = Integer.MAX_VALUE;
for (final Unit subUnit : unit.getSubUnitsSet()) {
final int cc = getMinCostCenter(subUnit);
min = Math.min(min, cc);
}
return min;
}
});
result.addAll(units);
return result;
}
private static String getParsableStr(String input) {
final StringBuilder b = new StringBuilder("0");
for (int i = 0; i < input.length(); i++) {
final char c = input.charAt(i);
if (Character.isDigit(c)) {
b.append(c);
}
}
return b.toString();
}
private void createHeaderCell(final ExcelStyle excelStyle, final HSSFRow row, final int index, final String value) {
final HSSFCell hcell = createHeaderCell(excelStyle, row, index);
hcell.setCellValue(value);
}
private HSSFCell createHeaderCell(final ExcelStyle excelStyle, final HSSFRow row, final int index) {
return createCell(excelStyle.getHeaderStyle(), row, index);
}
private void createCell(final ExcelStyle excelStyle, final HSSFRow row, final int index, final String value) {
final HSSFCell hcell = createCell(excelStyle, row, index);
hcell.setCellValue(value);
}
private HSSFCell createCell(final ExcelStyle excelStyle, final HSSFRow row, final int index) {
return createCell(excelStyle.getStringStyle(), row, index);
}
private HSSFCell createCell(final HSSFCellStyle style, final HSSFRow row, final int index) {
final HSSFCell cell = row.createCell(index);
cell.setCellStyle(style);
return cell;
}
public ActionForward prepareCreateSupplier(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final CreateSupplierBean bean = new CreateSupplierBean();
request.setAttribute("bean", bean);
return forward("/expenditureTrackingOrganization/createSupplier.jsp");
}
public final ActionForward createSupplier(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final CreateSupplierBean bean = getRenderedObject("createBean");
final Supplier supplier = bean.create();
final SupplierBean supplierBean = new SupplierBean(supplier);
request.setAttribute("supplierBean", supplierBean);
return forward("/expenditureTrackingOrganization/manageSuppliers.jsp");
}
}