package pt.ist.expenditureTrackingSystem.presentationTier.actions.organization.util;
import module.finance.util.Money;
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.RequestItem;
import pt.ist.expenditureTrackingSystem.domain.organization.Supplier;
public class AcquisitionForSupplierAndCPVBean implements Comparable<AcquisitionForSupplierAndCPVBean> {
private final Supplier supplier;
private final CPVReference cpvReference;
private final AcquisitionProcess acquisitionProcess;
public AcquisitionForSupplierAndCPVBean(final Supplier supplier, final CPVReference cpvReference,
final AcquisitionProcess acquisitionProcess) {
this.supplier = supplier;
this.cpvReference = cpvReference;
this.acquisitionProcess = acquisitionProcess;
}
public AcquisitionProcess getAcquisitionProcess() {
return acquisitionProcess;
}
public Money getConfirmedValue() {
return acquisitionProcess.isAllocatedToSupplier() ? getRequestItemValues() : Money.ZERO;
}
public Money getUnconfirmedValue() {
return acquisitionProcess.getShouldSkipSupplierFundAllocation() ? Money.ZERO : getRequestItemValues();
}
private Money getRequestItemValues() {
Money result = Money.ZERO;
final AcquisitionRequest acquisitionRequest = acquisitionProcess.getAcquisitionRequest();
for (final RequestItem requestItem : acquisitionRequest.getRequestItemsSet()) {
final AcquisitionRequestItem acqRequestItem = (AcquisitionRequestItem) requestItem;
if (acqRequestItem.getCPVReference() == cpvReference) {
if (acquisitionProcess.getAcquisitionProcessState().hasBeenAllocatedPermanently()) {
result = result.add(acqRequestItem.getTotalRealValue());
} else {
result = result.add(acqRequestItem.getTotalItemValue());
}
}
}
return result;
}
@Override
public int compareTo(final AcquisitionForSupplierAndCPVBean o) {
final AcquisitionProcess otherProcess = o.getAcquisitionProcess();
return PaymentProcess.COMPARATOR_BY_YEAR_AND_ACQUISITION_PROCESS_NUMBER.compare(acquisitionProcess, otherProcess);
}
}