/*
* @(#)WorkingCapitalAcquisition.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 module.finance.domain.Supplier;
import module.finance.util.Money;
import org.fenixedu.bennu.core.domain.User;
import org.joda.time.DateTime;
import pt.ist.expenditureTrackingSystem.domain.authorizations.Authorization;
/**
*
* @author João Neves
* @author Paulo Abrantes
* @author Luis Cruz
*
*/
public class WorkingCapitalAcquisition extends WorkingCapitalAcquisition_Base {
public WorkingCapitalAcquisition() {
super();
setWorkingCapitalSystem(WorkingCapitalSystem.getInstanceForCurrentHost());
}
public WorkingCapitalAcquisition(final WorkingCapital workingCapital, final String documentNumber, final Supplier supplier,
final String description, final AcquisitionClassification acquisitionClassification, final Money valueWithoutVat,
final Money money, final byte[] invoiceContent, String displayName, String fileName) {
this();
setWorkingCapital(workingCapital);
edit(documentNumber, supplier, description, acquisitionClassification, valueWithoutVat);
Money limit = getWorkingCapitalSystem().getAcquisitionValueLimit();
final WorkingCapitalAcquisitionTransaction workingCapitalAcquisitionTransaction;
if ((limit != null) && (money.compareTo(limit) == 1)) {
workingCapitalAcquisitionTransaction = new ExceptionalWorkingCapitalAcquisitionTransaction(this, money);
} else {
workingCapitalAcquisitionTransaction = new WorkingCapitalAcquisitionTransaction(this, money);
}
if (invoiceContent != null) {
WorkingCapitalInvoiceFile workingCapitalInvoiceFile =
new WorkingCapitalInvoiceFile(displayName, fileName, invoiceContent, workingCapitalAcquisitionTransaction);
workingCapital.getWorkingCapitalProcess().addFiles(workingCapitalInvoiceFile);
}
}
public void edit(String documentNumber, Supplier supplier, String description,
AcquisitionClassification acquisitionClassification, Money valueWithoutVat) {
setDocumentNumber(documentNumber);
setAcquisitionClassification(acquisitionClassification);
setSupplier(supplier);
setDescription(description);
setValueWithoutVat(valueWithoutVat);
}
public void edit(String documentNumber, Supplier supplier, String description,
AcquisitionClassification acquisitionClassification, Money valueWithoutVat, Money value) {
edit(documentNumber, supplier, description, acquisitionClassification, valueWithoutVat);
final WorkingCapitalAcquisitionTransaction workingCapitalAcquisitionTransaction =
getWorkingCapitalAcquisitionTransaction();
Money limit = getWorkingCapitalSystem().getAcquisitionValueLimit();
if ((workingCapitalAcquisitionTransaction instanceof ExceptionalWorkingCapitalAcquisitionTransaction) && (limit != null)
&& (value.compareTo(limit) == 1)) {
((ExceptionalWorkingCapitalAcquisitionTransaction) workingCapitalAcquisitionTransaction).resetValue(value);
} else {
workingCapitalAcquisitionTransaction.resetValue(value);
}
}
public void edit(String documentNumber, Supplier supplier, String description,
AcquisitionClassification acquisitionClassification, Money valueWithoutVat, Money value, byte[] invoiceContent,
String displayName, String fileName) {
edit(documentNumber, supplier, description, acquisitionClassification, valueWithoutVat, value);
getWorkingCapitalAcquisitionTransaction().getInvoice().delete();
WorkingCapitalInvoiceFile workingCapitalInvoiceFile =
new WorkingCapitalInvoiceFile(displayName, fileName, invoiceContent, getWorkingCapitalAcquisitionTransaction());
getWorkingCapital().getWorkingCapitalProcess().addFiles(workingCapitalInvoiceFile);
}
public void approve(final User user) {
setApproved(new DateTime());
final Money valueForAuthorization = Money.ZERO;
final WorkingCapital workingCapital = getWorkingCapital();
final Authorization authorization = workingCapital.findUnitResponsible(user.getPerson(), valueForAuthorization);
setApprover(authorization);
}
public void reject(final User user) {
setRejectedApproval(new DateTime());
final Money valueForAuthorization = Money.ZERO;
final WorkingCapital workingCapital = getWorkingCapital();
final Authorization authorization = workingCapital.findUnitResponsible(user.getPerson(), valueForAuthorization);
setApprover(authorization);
}
public void unApprove() {
setApproved(null);
setApprover(null);
}
public void verify(User user) {
setVerified(new DateTime());
setVerifier(user.getPerson());
}
public void rejectVerify(final User user) {
setNotVerified(new DateTime());
setVerifier(user.getPerson());
}
public void unVerify() {
setVerified(null);
setVerifier(null);
}
public boolean isCanceledOrRejected() {
return (getIsCanceled() != null && getIsCanceled().booleanValue()) || getRejectedApproval() != null
|| getNotVerified() != null;
}
public void cancel() {
setIsCanceled(Boolean.TRUE);
}
public Money getValue() {
return getWorkingCapitalAcquisitionTransaction().getValue();
}
@Override
public Money getValueAllocatedToSupplier() {
return isCanceledOrRejected() ? Money.ZERO : getValue();
}
@Override
public Money getValueAllocatedToSupplier(final String cpvReference) {
return isCanceledOrRejected() ? Money.ZERO : getValue();
}
@Override
public Money getValueAllocatedToSupplierForLimit() {
return isCanceledOrRejected() ? Money.ZERO : getValueWithoutVat();
}
@Deprecated
public boolean hasDocumentNumber() {
return getDocumentNumber() != null;
}
@Deprecated
public boolean hasDescription() {
return getDescription() != null;
}
@Deprecated
public boolean hasValueWithoutVat() {
return getValueWithoutVat() != null;
}
@Deprecated
public boolean hasApproved() {
return getApproved() != null;
}
@Deprecated
public boolean hasRejectedApproval() {
return getRejectedApproval() != null;
}
@Deprecated
public boolean hasVerified() {
return getVerified() != null;
}
@Deprecated
public boolean hasNotVerified() {
return getNotVerified() != null;
}
@Deprecated
public boolean hasSubmitedForVerification() {
return getSubmitedForVerification() != null;
}
@Deprecated
public boolean hasIsCanceled() {
return getIsCanceled() != null;
}
@Deprecated
public boolean hasWorkingCapitalSystem() {
return getWorkingCapitalSystem() != null;
}
@Deprecated
public boolean hasWorkingCapitalAcquisitionTransaction() {
return getWorkingCapitalAcquisitionTransaction() != null;
}
@Deprecated
public boolean hasAcquisitionClassification() {
return getAcquisitionClassification() != null;
}
@Deprecated
public boolean hasWorkingCapital() {
return getWorkingCapital() != null;
}
@Deprecated
public boolean hasVerifier() {
return getVerifier() != null;
}
@Deprecated
public boolean hasApprover() {
return getApprover() != null;
}
}