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.purap.businessobject;
017
018 import java.math.BigDecimal;
019 import java.util.LinkedHashMap;
020 import java.util.Map;
021
022 import org.apache.commons.lang.StringUtils;
023 import org.apache.commons.lang.builder.EqualsBuilder;
024 import org.kuali.kfs.sys.KFSPropertyConstants;
025 import org.kuali.kfs.sys.businessobject.SourceAccountingLine;
026 import org.kuali.rice.kns.util.KualiDecimal;
027 import org.kuali.rice.kns.util.ObjectUtils;
028
029 /**
030 * Purap Accounting Line Base Business Object.
031 */
032 public abstract class PurApAccountingLineBase extends SourceAccountingLine implements PurApAccountingLine, Comparable {
033 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurApAccountingLineBase.class);
034 protected Integer accountIdentifier;
035 private Integer itemIdentifier;
036 private BigDecimal accountLinePercent;
037 private String postingPeriodCode; //stored in DB only for PREQ and CM Account History
038 private KualiDecimal alternateAmountForGLEntryCreation; // not stored in DB; needed for disencumbrances and such
039
040 private PurApItem purapItem;
041
042 public Integer getAccountIdentifier() {
043 return accountIdentifier;
044 }
045
046 public void setAccountIdentifier(Integer requisitionAccountIdentifier) {
047 this.accountIdentifier = requisitionAccountIdentifier;
048 }
049
050 public Integer getItemIdentifier() {
051 return itemIdentifier;
052 }
053
054 public void setItemIdentifier(Integer requisitionItemIdentifier) {
055 this.itemIdentifier = requisitionItemIdentifier;
056 }
057
058 public BigDecimal getAccountLinePercent() {
059 return accountLinePercent;
060 }
061
062 public void setAccountLinePercent(BigDecimal accountLinePercent) {
063 this.accountLinePercent = accountLinePercent;
064 }
065
066 /**
067 * @see org.kuali.kfs.module.purap.businessobject.PurApAccountingLine#isEmpty()
068 */
069 public boolean isEmpty() {
070 return !(StringUtils.isNotEmpty(getAccountNumber()) || StringUtils.isNotEmpty(getChartOfAccountsCode()) || StringUtils.isNotEmpty(getFinancialObjectCode()) || StringUtils.isNotEmpty(getFinancialSubObjectCode()) || StringUtils.isNotEmpty(getOrganizationReferenceId()) || StringUtils.isNotEmpty(getProjectCode()) || StringUtils.isNotEmpty(getSubAccountNumber()) || ObjectUtils.isNotNull(getAccountLinePercent()));
071 }
072
073 /**
074 * @see org.kuali.kfs.module.purap.businessobject.PurApAccountingLine#createBlankAmountsCopy()
075 */
076 public PurApAccountingLine createBlankAmountsCopy() {
077 PurApAccountingLine newAccount = (PurApAccountingLine) ObjectUtils.deepCopy(this);
078 newAccount.setAccountLinePercent(BigDecimal.ZERO);
079 newAccount.setAmount(KualiDecimal.ZERO);
080 return newAccount;
081 }
082
083
084 /**
085 * @see org.kuali.kfs.module.purap.businessobject.PurApAccountingLine#accountStringsAreEqual(org.kuali.kfs.sys.businessobject.SourceAccountingLine)
086 */
087 public boolean accountStringsAreEqual(SourceAccountingLine accountingLine) {
088 if (accountingLine == null) {
089 return false;
090 }
091 return new EqualsBuilder().append(getChartOfAccountsCode(), accountingLine.getChartOfAccountsCode()).append(getAccountNumber(), accountingLine.getAccountNumber()).append(getSubAccountNumber(), accountingLine.getSubAccountNumber()).append(getFinancialObjectCode(), accountingLine.getFinancialObjectCode()).append(getFinancialSubObjectCode(), accountingLine.getFinancialSubObjectCode()).append(getProjectCode(), accountingLine.getProjectCode()).append(getOrganizationReferenceId(), accountingLine.getOrganizationReferenceId())
092 .isEquals();
093 }
094
095 public boolean accountStringsAreEqual(PurApAccountingLine accountingLine) {
096 return accountStringsAreEqual((SourceAccountingLine) accountingLine);
097
098 }
099
100 /**
101 * @see org.kuali.kfs.module.purap.businessobject.PurApAccountingLine#generateSourceAccountingLine()
102 */
103 public SourceAccountingLine generateSourceAccountingLine() {
104 // the fields here should probably match method 'accountStringsAreEqual' above
105 SourceAccountingLine sourceLine = new SourceAccountingLine();
106 sourceLine.setChartOfAccountsCode(getChartOfAccountsCode());
107 sourceLine.setAccountNumber(getAccountNumber());
108 sourceLine.setSubAccountNumber(getSubAccountNumber());
109 sourceLine.setFinancialObjectCode(getFinancialObjectCode());
110 sourceLine.setFinancialSubObjectCode(getFinancialSubObjectCode());
111 sourceLine.setProjectCode(getProjectCode());
112 sourceLine.setOrganizationReferenceId(getOrganizationReferenceId());
113 sourceLine.setAmount(getAmount());
114 return sourceLine;
115 }
116
117 /**
118 * @see org.kuali.kfs.sys.businessobject.AccountingLineBase#toStringMapper()
119 */
120 @Override
121 protected LinkedHashMap toStringMapper() {
122 LinkedHashMap m = new LinkedHashMap();
123
124 m.put("chart", getChartOfAccountsCode());
125 m.put("account", getAccountNumber());
126 m.put("objectCode", getFinancialObjectCode());
127 m.put("subAccount", getSubAccountNumber());
128 m.put("subObjectCode", getFinancialSubObjectCode());
129 m.put("projectCode", getProjectCode());
130 m.put("orgRefId", getOrganizationReferenceId());
131
132 return m;
133 }
134
135 public int compareTo(Object arg0) {
136 if (arg0 instanceof PurApAccountingLine) {
137 PurApAccountingLine account = (PurApAccountingLine) arg0;
138 return this.getString().compareTo(account.getString());
139 }
140 return -1;
141 }
142
143 public String getString() {
144 return getChartOfAccountsCode() + "~" + getAccountNumber() + "~" + getSubAccountNumber() + "~" + getFinancialObjectCode() + "~" + getFinancialSubObjectCode() + "~" + getProjectCode() + "~" + getOrganizationReferenceId();
145 }
146
147 public KualiDecimal getAlternateAmountForGLEntryCreation() {
148 return alternateAmountForGLEntryCreation;
149 }
150
151 public void setAlternateAmountForGLEntryCreation(KualiDecimal alternateAmount) {
152 this.alternateAmountForGLEntryCreation = alternateAmount;
153 }
154
155 /**
156 * @see org.kuali.kfs.sys.businessobject.AccountingLineBase#getSequenceNumber()
157 */
158 @Override
159 public Integer getSequenceNumber() {
160 return this.getAccountIdentifier();
161 }
162
163 protected void copyFrom(PurApAccountingLine other) {
164
165 super.copyFrom(other);
166
167 setAccountLinePercent(other.getAccountLinePercent());
168 setAlternateAmountForGLEntryCreation(other.getAlternateAmountForGLEntryCreation());
169
170 }
171
172 @Override
173 public void refreshNonUpdateableReferences() {
174 //hold onto item reference if there without itemId
175 PurApItem item = null;
176 PurApItem tempItem = getPurapItem();
177 if(tempItem != null &&
178 tempItem.getItemIdentifier() != null) {
179 item = tempItem;
180 }
181 super.refreshNonUpdateableReferences();
182 if(ObjectUtils.isNotNull(item)) {
183 this.setPurapItem(item);
184 }
185 }
186
187 public <T extends PurApItem> T getPurapItem() {
188 return (T) purapItem;
189 }
190
191 /**
192 * Sets the requisitionItem attribute.
193 * @deprecated
194 * @param item
195 */
196 public void setPurapItem(PurApItem item) {
197 purapItem = item;
198 }
199
200 public String getPostingPeriodCode() {
201 return postingPeriodCode;
202 }
203
204 public void setPostingPeriodCode(String postingPeriodCode) {
205 this.postingPeriodCode = postingPeriodCode;
206 }
207
208 /**
209 * Overridden to use purap doc identifier, rather than document number
210 * @see org.kuali.kfs.sys.businessobject.AccountingLineBase#getValuesMap()
211 */
212 @Override
213 public Map getValuesMap() {
214 Map valuesMap = super.getValuesMap();
215 // remove document number
216 valuesMap.remove(KFSPropertyConstants.DOCUMENT_NUMBER);
217 return valuesMap;
218 }
219
220 }