/*
* 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.cab.businessobject;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.kuali.kfs.module.cab.CabPropertyConstants;
import org.kuali.kfs.module.purap.businessobject.AccountsPayableItem;
import org.kuali.kfs.module.purap.businessobject.CreditMemoAccountRevision;
import org.kuali.kfs.module.purap.businessobject.PurApAccountingLineBase;
import org.kuali.kfs.module.purap.document.AccountsPayableDocumentBase;
import org.kuali.rice.krad.util.ObjectUtils;
/**
* Accounting line grouped data for GL Line
*/
public class PurApAccountLineGroup extends AccountLineGroup {
private Logger LOG = Logger.getLogger(PurApAccountLineGroup.class);
private List<PurApAccountingLineBase> sourceEntries = new ArrayList<PurApAccountingLineBase>();
/**
* Constructs a PurApAccountLineGroup from a PurApAccountingLineBase Line Entry
*
* @param entry PurApAccountingLineBase Line
*/
protected PurApAccountLineGroup() {
}
public PurApAccountLineGroup(PurApAccountingLineBase entry) {
entry.refreshReferenceObject(CabPropertyConstants.PURAP_ITEM);
AccountsPayableItem purapItem = (AccountsPayableItem) entry.getPurapItem();
if (ObjectUtils.isNotNull(purapItem)) {
purapItem.refreshReferenceObject(CabPropertyConstants.PURAP_DOCUMENT);
AccountsPayableDocumentBase purapDocument = ((AccountsPayableItem) entry.getPurapItem()).getPurapDocument();
if (ObjectUtils.isNotNull(purapDocument)) {
setReferenceFinancialDocumentNumber(purapDocument.getPurchaseOrderIdentifier() != null ? purapDocument.getPurchaseOrderIdentifier().toString() : "");
setDocumentNumber(purapDocument.getDocumentNumber());
}
}
else {
LOG.error("Could not load PurAP document details for " + entry.toString());
}
setUniversityFiscalYear(entry.getPostingYear());
setUniversityFiscalPeriodCode(entry.getPostingPeriodCode());
setChartOfAccountsCode(entry.getChartOfAccountsCode());
setAccountNumber(entry.getAccountNumber());
setSubAccountNumber(entry.getSubAccountNumber());
setFinancialObjectCode(entry.getFinancialObjectCode());
setFinancialSubObjectCode(entry.getFinancialSubObjectCode());
setOrganizationReferenceId(entry.getOrganizationReferenceId());
setProjectCode(entry.getProjectCode());
this.sourceEntries.add(entry);
if (CreditMemoAccountRevision.class.isAssignableFrom(entry.getClass())) {
setAmount(entry.getAmount().negated());
}
else {
setAmount(entry.getAmount());
}
}
/**
* Returns true if input PurApAccountingLineBase entry belongs to this account group
*
* @param entry PurApAccountingLineBase
* @return true if PurApAccountingLineBase belongs to same account line group
*/
public boolean isAccounted(PurApAccountingLineBase entry) {
PurApAccountLineGroup test = new PurApAccountLineGroup(entry);
return this.equals(test);
}
/**
* This method will combine multiple Purap account entries for the same account line group.
*
* @param entry PurApAccountingLineBase
*/
public void combineEntry(PurApAccountingLineBase newEntry) {
this.sourceEntries.add(newEntry);
if (CreditMemoAccountRevision.class.isAssignableFrom(newEntry.getClass())) {
this.amount = this.amount.add(newEntry.getAmount().negated());
}
else {
this.amount = this.amount.add(newEntry.getAmount());
}
}
/**
* Gets the sourceEntries attribute.
*
* @return Returns the sourceEntries
*/
public List<PurApAccountingLineBase> getSourceEntries() {
return sourceEntries;
}
/**
* Sets the sourceEntries attribute.
*
* @param sourceEntries The sourceEntries to set.
*/
public void setSourceEntries(List<PurApAccountingLineBase> sourceGlEntries) {
this.sourceEntries = sourceGlEntries;
}
}