/* * @(#)WorkingCapitalSystem.java * * Copyright 2010 Instituto Superior Tecnico * Founding Authors: Luis Cruz * * https://fenix-ashes.ist.utl.pt/ * * This file is part of the Working Capital Module. * * The Working Capital 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 Working Capital 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 Working Capital Module. If not, see <http://www.gnu.org/licenses/>. * */ package module.workingCapital.domain; import java.util.SortedSet; import java.util.TreeSet; import org.fenixedu.bennu.core.domain.Bennu; import org.fenixedu.bennu.core.domain.User; import org.joda.time.DateTime; import org.joda.time.DateTimeConstants; import module.organization.domain.Accountability; import module.organization.domain.AccountabilityType; import module.organization.domain.Person; import module.organization.domain.Unit; import module.workflow.widgets.ProcessListWidget; import module.workingCapital.domain.util.WorkingCapitalPendingProcessCounter; import pt.ist.fenixframework.Atomic; /** * * @author Diogo Figueiredo * @author João Neves * @author Luis Cruz * */ public class WorkingCapitalSystem extends WorkingCapitalSystem_Base { static { ProcessListWidget.register(new WorkingCapitalPendingProcessCounter()); } @Deprecated /** * This class is no longer a singleton. * Use getInstanceForCurrentHost() instead. */ public static WorkingCapitalSystem getInstance() { return getInstanceForCurrentHost(); } public static WorkingCapitalSystem getInstanceForCurrentHost() { return Bennu.getInstance().getWorkingCapitalSystem(); } private WorkingCapitalSystem() { super(); setBennu(Bennu.getInstance()); } @Atomic public void resetAcquisitionValueLimit() { setAcquisitionValueLimit(null); } @Atomic public static void createSystem() { if (Bennu.getInstance().getWorkingCapitalSystem() == null) { new WorkingCapitalSystem(); } } public SortedSet<Accountability> getManagementMembers() { final SortedSet<Accountability> accountingMembers = new TreeSet<Accountability>(Accountability.COMPARATOR_BY_CHILD_PARTY_NAMES); if (hasManagementUnit() && hasManagingAccountabilityType()) { final Unit accountingUnit = getManagementUnit(); final AccountabilityType accountabilityType = getManagingAccountabilityType(); accountingUnit.getChildAccountabilityStream() .filter(a -> a.getAccountabilityType() == accountabilityType && a.getChild().isPerson()) .forEach(a -> accountingMembers.add(a)); } return accountingMembers; } public boolean isManagementMember(final User user) { return getManagementAccountability(user) != null; } public Accountability getManagementAccountability(final User user) { if (hasManagementUnit() && hasManagingAccountabilityType()) { final Unit managementUnit = getManagementUnit(); final AccountabilityType accountabilityType = getManagingAccountabilityType(); return findAccountability(user, accountabilityType, managementUnit); } return null; } private Accountability findAccountability(final User user, final AccountabilityType accountabilityType, final Unit unit) { final Person person = user.getPerson(); if (person != null) { return person.getParentAccountabilityStream().filter(a -> a.isValid() && a.isActiveNow() && a.getAccountabilityType() == accountabilityType && a.getParent() == unit).findAny().orElse(null); } return null; } public static boolean isLastMonthForWorkingCapitalTermination() { return new DateTime().monthOfYear().get() == DateTimeConstants.DECEMBER; } @Deprecated public boolean hasAcquisitionValueLimit() { return getAcquisitionValueLimit() != null; } @Deprecated public java.util.Set<module.workingCapital.domain.WorkingCapitalAcquisition> getWorkingCapitalAcquisitions() { return getWorkingCapitalAcquisitionsSet(); } @Deprecated public boolean hasAnyWorkingCapitalAcquisitions() { return !getWorkingCapitalAcquisitionsSet().isEmpty(); } @Deprecated public java.util.Set<module.workingCapital.domain.WorkingCapitalTransaction> getWorkingCapitalTransactions() { return getWorkingCapitalTransactionsSet(); } @Deprecated public boolean hasAnyWorkingCapitalTransactions() { return !getWorkingCapitalTransactionsSet().isEmpty(); } @Deprecated public java.util.Set<module.workingCapital.domain.WorkingCapitalInitialization> getWorkingCapitalInitializations() { return getWorkingCapitalInitializationsSet(); } @Deprecated public boolean hasAnyWorkingCapitalInitializations() { return !getWorkingCapitalInitializationsSet().isEmpty(); } @Deprecated public boolean hasManagingAccountabilityType() { return getManagingAccountabilityType() != null; } @Deprecated public java.util.Set<module.workingCapital.domain.WorkingCapitalYear> getWorkingCapitalYears() { return getWorkingCapitalYearsSet(); } @Deprecated public boolean hasAnyWorkingCapitalYears() { return !getWorkingCapitalYearsSet().isEmpty(); } @Deprecated public java.util.Set<module.workingCapital.domain.WorkingCapital> getWorkingCapitals() { return getWorkingCapitalsSet(); } @Deprecated public boolean hasAnyWorkingCapitals() { return !getWorkingCapitalsSet().isEmpty(); } @Deprecated public boolean hasManagementUnit() { return getManagementUnit() != null; } @Deprecated public java.util.Set<module.workingCapital.domain.AcquisitionClassification> getAcquisitionClassifications() { return getAcquisitionClassificationsSet(); } @Deprecated public boolean hasAnyAcquisitionClassifications() { return !getAcquisitionClassificationsSet().isEmpty(); } @Deprecated public java.util.Set<module.workingCapital.domain.WorkingCapitalRequest> getWorkingCapitalRequests() { return getWorkingCapitalRequestsSet(); } @Deprecated public boolean hasAnyWorkingCapitalRequests() { return !getWorkingCapitalRequestsSet().isEmpty(); } }