/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.ar.businessobject;
import java.util.LinkedHashMap;
import org.kuali.kfs.module.ar.document.ContractsGrantsInvoiceDocument;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
import org.kuali.rice.krad.util.ObjectUtils;
/**
* This class represents a invoice detail on the customer invoice document.
*/
public class ContractsGrantsInvoiceDetail extends PersistableBusinessObjectBase {
private Long invoiceDetailIdentifier;
private String documentNumber;
private String categoryCode;
private KualiDecimal totalBudget = KualiDecimal.ZERO;
private KualiDecimal invoiceAmount = KualiDecimal.ZERO;
private KualiDecimal cumulativeExpenditures = KualiDecimal.ZERO;
private KualiDecimal totalPreviouslyBilled = KualiDecimal.ZERO;
private boolean indirectCostIndicator;
private ContractsGrantsInvoiceDocument invoiceDocument;
private CostCategory costCategory;
/**
* Gets the categoryCode attribute.
*
* @return Returns the categoryCode.
*/
public String getCategoryCode() {
return categoryCode;
}
/**
* Sets the categoryCode attribute value.
*
* @param categoryCode The categoryCode to set.
*/
public void setCategoryCode(String categoryCode) {
this.categoryCode = categoryCode;
}
/**
* Gets the invoiceDetailIdentifier attribute.
*
* @return Returns the invoiceDetailIdentifier.
*/
public Long getInvoiceDetailIdentifier() {
return invoiceDetailIdentifier;
}
/**
* Sets the invoiceDetailIdentifier attribute value.
*
* @param invoiceDetailIdentifier The invoiceDetailIdentifier to set.
*/
public void setInvoiceDetailIdentifier(Long invoiceDetailIdentifier) {
this.invoiceDetailIdentifier = invoiceDetailIdentifier;
}
/**
* Gets the documentNumber attribute.
*
* @return Returns the documentNumber.
*/
public String getDocumentNumber() {
return documentNumber;
}
/**
* Sets the documentNumber attribute value.
*
* @param documentNumber The documentNumber to set.
*/
public void setDocumentNumber(String documentNumber) {
this.documentNumber = documentNumber;
}
/**
* Gets the totalBudget attribute.
*
* @return Returns the totalBudget.
*/
public KualiDecimal getTotalBudget() {
return totalBudget;
}
/**
* Sets the totalBudget attribute value.
*
* @param totalBudget The totalBudget to set.
*/
public void setTotalBudget(KualiDecimal totalBudget) {
this.totalBudget = totalBudget;
}
/**
* Gets the invoiceAmount attribute.
*
* @return Returns the invoiceAmount.
*/
public KualiDecimal getInvoiceAmount() {
return invoiceAmount;
}
/**
* Sets the invoiceAmount attribute value.
*
* @param invoiceAmount The invoiceAmount to set.
*/
public void setInvoiceAmount(KualiDecimal invoiceAmount) {
this.invoiceAmount = invoiceAmount;
}
/**
* Gets the cumulativeExpenditures attribute.
*
* @return Returns the cumulativeExpenditures.
*/
public KualiDecimal getCumulativeExpenditures() {
return cumulativeExpenditures;
}
/**
* Sets the cumulativeExpenditures attribute value.
*
* @param cumulativeExpenditures The cumulativeExpenditures to set.
*/
public void setCumulativeExpenditures(KualiDecimal cumulativeExpenditures) {
this.cumulativeExpenditures = cumulativeExpenditures;
}
/**
* @return Returns the budget remaining.
*/
public KualiDecimal getBudgetRemaining() {
// Balance = Budget-Cumulative
KualiDecimal total = KualiDecimal.ZERO;
total = totalBudget.subtract(cumulativeExpenditures);
return total;
}
/**
* Gets the totalPreviouslyBilled attribute.
*
* @return Returns the totalPreviouslyBilled.
*/
public KualiDecimal getTotalPreviouslyBilled() {
return totalPreviouslyBilled;
}
/**
* Sets the totalPreviouslyBilled attribute value.
*
* @param totalPreviouslyBilled The totalPreviouslyBilled to set.
*/
public void setTotalPreviouslyBilled(KualiDecimal totalPreviouslyBilled) {
this.totalPreviouslyBilled = totalPreviouslyBilled;
}
/**
* Gets the invoiceDocument attribute.
*
* @return Returns the invoiceDocument.
*/
public ContractsGrantsInvoiceDocument getInvoiceDocument() {
return invoiceDocument;
}
/**
* Sets the invoiceDocument attribute value.
*
* @param invoiceDocument The invoiceDocument to set.
*/
public void setInvoiceDocument(ContractsGrantsInvoiceDocument invoiceDocument) {
this.invoiceDocument = invoiceDocument;
}
/**
* Gets the indirectCostIndicator attribute.
*
* @return Returns the indirectCostIndicator.
*/
public boolean isIndirectCostIndicator() {
return indirectCostIndicator;
}
/**
* Sets the indirectCostIndicator attribute value.
*
* @param indirectCostIndicator The indirectCostIndicator to set.
*/
public void setIndirectCostIndicator(boolean indirectCostIndicator) {
this.indirectCostIndicator = indirectCostIndicator;
}
public CostCategory getCostCategory() {
return costCategory;
}
public void setCostCategory(CostCategory costCategory) {
this.costCategory = costCategory;
}
/**
* @return the calculated total amount billed to date (the total previously billed minus the invoice amount)
*/
public KualiDecimal getTotalAmountBilledToDate() {
KualiDecimal total = KualiDecimal.ZERO;
total = totalPreviouslyBilled.add(invoiceAmount);
return total;
}
/**
* @return the calculated amount remaining to bill (the total budget minus the amount billed to date)
*/
public KualiDecimal getAmountRemainingToBill() {
KualiDecimal total = KualiDecimal.ZERO;
total = totalBudget.subtract(getTotalAmountBilledToDate());
return total;
}
/**
* @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper()
*/
@SuppressWarnings("unchecked")
protected LinkedHashMap toStringMapper_RICE20_REFACTORME() {
LinkedHashMap m = new LinkedHashMap();
m.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.documentNumber);
m.put("categoryCode", this.categoryCode);
if (ObjectUtils.isNotNull(this.invoiceDetailIdentifier)) {
m.put("invoiceDetailIdentifier", this.invoiceDetailIdentifier.toString());
}
if (ObjectUtils.isNotNull(this.totalBudget)) {
m.put("totalBudget", this.totalBudget.toString());
}
if (ObjectUtils.isNotNull(this.invoiceAmount)) {
m.put("invoiceAmount", this.invoiceAmount.toString());
}
if (ObjectUtils.isNotNull(this.cumulativeExpenditures)) {
m.put("cumulativeExpenditures", this.cumulativeExpenditures.toString());
}
m.put("budgetRemaining", getBudgetRemaining().toString());
if (ObjectUtils.isNotNull(this.totalPreviouslyBilled)) {
m.put("totalPreviouslyBilled", this.totalPreviouslyBilled.toString());
}
m.put("totalAmountBilledToDate", getTotalAmountBilledToDate().toString());
m.put("amountRemainingToBill", getAmountRemainingToBill().toString());
return m;
}
/**
* Adds the values from the given ContractgsGrantsInvoiceDetail onto this one
* @param contractsGrantsInvoiceDetail the detail to sum into this
*/
public void sumInvoiceDetail(ContractsGrantsInvoiceDetail contractsGrantsInvoiceDetail) {
if (null != contractsGrantsInvoiceDetail.getTotalBudget()) {
totalBudget = totalBudget.add(contractsGrantsInvoiceDetail.getTotalBudget());
}
if (null != contractsGrantsInvoiceDetail.getCumulativeExpenditures()) {
cumulativeExpenditures = cumulativeExpenditures.add(contractsGrantsInvoiceDetail.getCumulativeExpenditures());
}
if (null != contractsGrantsInvoiceDetail.getInvoiceAmount()) {
invoiceAmount = invoiceAmount.add(contractsGrantsInvoiceDetail.getInvoiceAmount());
}
if (null != contractsGrantsInvoiceDetail.getTotalPreviouslyBilled()) {
totalPreviouslyBilled = totalPreviouslyBilled.add(contractsGrantsInvoiceDetail.getTotalPreviouslyBilled());
}
}
}