001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.module.cab.businessobject; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 021 import org.apache.log4j.Logger; 022 import org.kuali.kfs.module.cab.CabPropertyConstants; 023 import org.kuali.kfs.module.purap.businessobject.AccountsPayableItem; 024 import org.kuali.kfs.module.purap.businessobject.CreditMemoAccountRevision; 025 import org.kuali.kfs.module.purap.businessobject.PurApAccountingLineBase; 026 import org.kuali.kfs.module.purap.document.AccountsPayableDocumentBase; 027 import org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument; 028 import org.kuali.rice.kns.util.ObjectUtils; 029 030 /** 031 * Accounting line grouped data for GL Line 032 */ 033 public class PurApAccountLineGroup extends AccountLineGroup { 034 035 private Logger LOG = Logger.getLogger(PurApAccountLineGroup.class); 036 private List<PurApAccountingLineBase> sourceEntries = new ArrayList<PurApAccountingLineBase>(); 037 038 /** 039 * Constructs a PurApAccountLineGroup from a PurApAccountingLineBase Line Entry 040 * 041 * @param entry PurApAccountingLineBase Line 042 */ 043 protected PurApAccountLineGroup() { 044 045 } 046 047 public PurApAccountLineGroup(PurApAccountingLineBase entry) { 048 entry.refreshReferenceObject(CabPropertyConstants.PURAP_ITEM); 049 AccountsPayableItem purapItem = (AccountsPayableItem) entry.getPurapItem(); 050 if (ObjectUtils.isNotNull(purapItem)) { 051 purapItem.refreshReferenceObject(CabPropertyConstants.PURAP_DOCUMENT); 052 AccountsPayableDocumentBase purapDocument = ((AccountsPayableItem) entry.getPurapItem()).getPurapDocument(); 053 if (ObjectUtils.isNotNull(purapDocument)) { 054 setReferenceFinancialDocumentNumber(purapDocument.getPurchaseOrderIdentifier() != null ? purapDocument.getPurchaseOrderIdentifier().toString() : ""); 055 setDocumentNumber(purapDocument.getDocumentNumber()); 056 } 057 } 058 else { 059 LOG.error("Could not load PurAP document details for " + entry.toString()); 060 } 061 setUniversityFiscalYear(entry.getPostingYear()); 062 setUniversityFiscalPeriodCode(entry.getPostingPeriodCode()); 063 setChartOfAccountsCode(entry.getChartOfAccountsCode()); 064 setAccountNumber(entry.getAccountNumber()); 065 setSubAccountNumber(entry.getSubAccountNumber()); 066 setFinancialObjectCode(entry.getFinancialObjectCode()); 067 setFinancialSubObjectCode(entry.getFinancialSubObjectCode()); 068 setOrganizationReferenceId(entry.getOrganizationReferenceId()); 069 setProjectCode(entry.getProjectCode()); 070 this.sourceEntries.add(entry); 071 if (CreditMemoAccountRevision.class.isAssignableFrom(entry.getClass())) { 072 setAmount(entry.getAmount().negated()); 073 } 074 else { 075 setAmount(entry.getAmount()); 076 } 077 } 078 079 /** 080 * Returns true if input PurApAccountingLineBase entry belongs to this account group 081 * 082 * @param entry PurApAccountingLineBase 083 * @return true if PurApAccountingLineBase belongs to same account line group 084 */ 085 public boolean isAccounted(PurApAccountingLineBase entry) { 086 PurApAccountLineGroup test = new PurApAccountLineGroup(entry); 087 return this.equals(test); 088 } 089 090 /** 091 * This method will combine multiple Purap account entries for the same account line group. 092 * 093 * @param entry PurApAccountingLineBase 094 */ 095 public void combineEntry(PurApAccountingLineBase newEntry) { 096 this.sourceEntries.add(newEntry); 097 if (CreditMemoAccountRevision.class.isAssignableFrom(newEntry.getClass())) { 098 this.amount = this.amount.add(newEntry.getAmount().negated()); 099 } 100 else { 101 this.amount = this.amount.add(newEntry.getAmount()); 102 } 103 } 104 105 106 /** 107 * Gets the sourceEntries attribute. 108 * 109 * @return Returns the sourceEntries 110 */ 111 public List<PurApAccountingLineBase> getSourceEntries() { 112 return sourceEntries; 113 } 114 115 /** 116 * Sets the sourceEntries attribute. 117 * 118 * @param sourceEntries The sourceEntries to set. 119 */ 120 public void setSourceEntries(List<PurApAccountingLineBase> sourceGlEntries) { 121 this.sourceEntries = sourceGlEntries; 122 } 123 }