package pt.ist.expenditureTrackingSystem.domain.acquisitions.simplified.activities;
import module.mission.domain.MissionFinancer;
import module.mission.domain.MissionProcess;
import module.mission.domain.MissionSystem;
import org.fenixedu.bennu.core.domain.User;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.AcquisitionRequest;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.Financer;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.ProjectFinancer;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.RegularAcquisitionProcess;
import pt.ist.expenditureTrackingSystem.domain.organization.SubProject;
import pt.ist.expenditureTrackingSystem.domain.organization.Supplier;
import pt.ist.expenditureTrackingSystem.domain.organization.Unit;
public class FundAllocationExpirationDateAndPurchaseOrderDocument extends FundAllocationExpirationDate {
@Override
public boolean isActive(RegularAcquisitionProcess process, User user) {
return super.isActive(process, user) && isConnectedToAuthorizedMissionProcess(process);
}
private boolean isConnectedToAuthorizedMissionProcess(final RegularAcquisitionProcess process) {
final MissionProcess missionProcess = process.getMissionProcess();
if (missionProcess != null && missionProcess.isAuthorized()) {
final AcquisitionRequest request = process.getRequest();
final Supplier supplier = request.getSupplier();
if (process.getSkipSupplierFundAllocation().booleanValue()
&& MissionSystem.getInstance().getMandatorySupplierSet().contains(supplier)) {
return true;
}
}
return false;
}
@Override
protected void process(final CreateAcquisitionPurchaseOrderDocumentInformation activityInformation) {
super.process(activityInformation);
final RegularAcquisitionProcess process = activityInformation.getProcess();
final MissionProcess missionProcess = process.getMissionProcess();
for (final MissionFinancer missionFinancer : missionProcess.getMission().getFinancerSet()) {
final Financer financer = findFinancer(process, missionFinancer.getUnit());
if (financer != null) {
if (financer.isProjectFinancer()) {
final ProjectFinancer projectFinancer = (ProjectFinancer) financer;
projectFinancer.setProjectFundAllocationId(missionFinancer.getProjectFundAllocationId());
}
financer.setFundAllocationId(missionFinancer.getFundAllocationId());
financer.setCommitmentNumber(missionFinancer.getCommitmentNumber());
}
}
process.skitToAuthorizedState();
CreateAcquisitionPurchaseOrderDocument.createPurchaseOrderDocument(activityInformation);
}
private Financer findFinancer(final RegularAcquisitionProcess process, final Unit unit) {
for (final Financer financer : process.getRequest().getFinancersSet()) {
final Unit funit = financer.getUnit();
if (funit == unit || (funit instanceof SubProject && funit.getParentUnit() == unit)) {
return financer;
}
}
return unit instanceof SubProject ? findFinancer(process, unit.getParentUnit()) : null;
}
@Override
public boolean isDefaultInputInterfaceUsed() {
return false;
}
}