View Javadoc
1   /*
2    * Copyright 2007 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.ole.module.purap.businessobject;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.apache.commons.lang.builder.EqualsBuilder;
20  import org.kuali.ole.sys.OLEPropertyConstants;
21  import org.kuali.ole.sys.businessobject.SourceAccountingLine;
22  import org.kuali.rice.core.api.util.type.KualiDecimal;
23  import org.kuali.rice.krad.util.ObjectUtils;
24  
25  import java.math.BigDecimal;
26  import java.util.LinkedHashMap;
27  import java.util.Map;
28  
29  /**
30   * Purap Accounting Line Base Business Object.
31   */
32  public abstract class PurApAccountingLineBase extends SourceAccountingLine implements PurApAccountingLine, Comparable {
33      private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurApAccountingLineBase.class);
34      protected Integer accountIdentifier;
35      private Integer itemIdentifier;
36      private BigDecimal accountLinePercent;
37      private String postingPeriodCode;  //stored in DB only for PREQ and CM Account History
38      private KualiDecimal alternateAmountForGLEntryCreation; // not stored in DB; needed for disencumbrances and such
39      public Integer purApSequenceNumber;
40  
41      private PurApItem purapItem;
42  
43  //    protected static final int BIG_DECIMAL_SCALE = 2;
44  
45      /**
46       * Default constructor
47       */
48      public PurApAccountingLineBase() {
49          super();
50          this.setSequenceNumber(0);
51          setAmount(null);
52      }
53  
54      @Override
55      public Integer getAccountIdentifier() {
56          return accountIdentifier;
57      }
58  
59      @Override
60      public void setAccountIdentifier(Integer requisitionAccountIdentifier) {
61          this.accountIdentifier = requisitionAccountIdentifier;
62      }
63  
64      @Override
65      public Integer getItemIdentifier() {
66          return itemIdentifier;
67      }
68  
69      @Override
70      public void setItemIdentifier(Integer requisitionItemIdentifier) {
71          this.itemIdentifier = requisitionItemIdentifier;
72      }
73  
74      @Override
75      public BigDecimal getAccountLinePercent() {
76          if (accountLinePercent != null) {
77              accountLinePercent = accountLinePercent.setScale(2, BigDecimal.ROUND_HALF_UP);
78              return accountLinePercent;
79          } else {
80              return new BigDecimal(100).setScale(2, BigDecimal.ROUND_HALF_UP);
81          }
82      }
83  
84      @Override
85      public void setAccountLinePercent(BigDecimal accountLinePercent) {
86          this.accountLinePercent = accountLinePercent;
87      }
88  
89      /**
90       * @see org.kuali.ole.module.purap.businessobject.PurApAccountingLine#isEmpty()
91       */
92      @Override
93      public boolean isEmpty() {
94          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()));
95      }
96  
97      /**
98       * @see org.kuali.ole.module.purap.businessobject.PurApAccountingLine#createBlankAmountsCopy()
99       */
100     @Override
101     public PurApAccountingLine createBlankAmountsCopy() {
102         PurApAccountingLine newAccount = (PurApAccountingLine) ObjectUtils.deepCopy(this);
103         newAccount.setAccountLinePercent(BigDecimal.ZERO);
104         newAccount.setAmount(KualiDecimal.ZERO);
105         newAccount.setSequenceNumber(0);
106 //        newAccount.setAccountLinePercent(null);
107 //        newAccount.setAmount(null);
108 
109         return newAccount;
110     }
111 
112     /**
113      * @see org.kuali.ole.module.purap.businessobject.PurApAccountingLine#accountStringsAreEqual(org.kuali.ole.sys.businessobject.SourceAccountingLine)
114      */
115     @Override
116     public boolean accountStringsAreEqual(SourceAccountingLine accountingLine) {
117         if (accountingLine == null) {
118             return false;
119         }
120         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())
121                 .isEquals();
122     }
123 
124     @Override
125     public boolean accountStringsAreEqual(PurApAccountingLine accountingLine) {
126         return accountStringsAreEqual((SourceAccountingLine) accountingLine);
127 
128     }
129 
130     /**
131      * @see org.kuali.ole.module.purap.businessobject.PurApAccountingLine#generateSourceAccountingLine()
132      */
133     @Override
134     public SourceAccountingLine generateSourceAccountingLine() {
135         // the fields here should probably match method 'accountStringsAreEqual' above
136         SourceAccountingLine sourceLine = new SourceAccountingLine();
137         sourceLine.setChartOfAccountsCode(getChartOfAccountsCode());
138         sourceLine.setAccountNumber(getAccountNumber());
139         sourceLine.setSubAccountNumber(getSubAccountNumber());
140         sourceLine.setFinancialObjectCode(getFinancialObjectCode());
141         sourceLine.setFinancialSubObjectCode(getFinancialSubObjectCode());
142         sourceLine.setProjectCode(getProjectCode());
143         sourceLine.setOrganizationReferenceId(getOrganizationReferenceId());
144         sourceLine.setAmount(getAmount());
145         sourceLine.setSequenceNumber(getSequenceNumber());
146         return sourceLine;
147     }
148 
149     /**
150      * @see org.kuali.ole.sys.businessobject.AccountingLineBase#toStringMapper()
151      */
152 
153     @Override
154     protected LinkedHashMap toStringMapper_RICE20_REFACTORME() {
155         LinkedHashMap m = new LinkedHashMap();
156 
157         m.put("chart", getChartOfAccountsCode());
158         m.put("account", getAccountNumber());
159         m.put("objectCode", getFinancialObjectCode());
160         m.put("subAccount", getSubAccountNumber());
161         m.put("subObjectCode", getFinancialSubObjectCode());
162         m.put("projectCode", getProjectCode());
163         m.put("orgRefId", getOrganizationReferenceId());
164 
165         return m;
166     }
167 
168     @Override
169     public int compareTo(Object arg0) {
170         if (arg0 instanceof PurApAccountingLine) {
171             PurApAccountingLine account = (PurApAccountingLine) arg0;
172             return this.getString().compareTo(account.getString());
173         }
174         return -1;
175     }
176 
177     @Override
178     public String getString() {
179         return getChartOfAccountsCode() + "~" + getAccountNumber() + "~" + getSubAccountNumber() + "~" + getFinancialObjectCode() + "~" + getFinancialSubObjectCode() + "~" + getProjectCode() + "~" + getOrganizationReferenceId();
180     }
181 
182     @Override
183     public KualiDecimal getAlternateAmountForGLEntryCreation() {
184         return alternateAmountForGLEntryCreation;
185     }
186 
187     @Override
188     public void setAlternateAmountForGLEntryCreation(KualiDecimal alternateAmount) {
189         this.alternateAmountForGLEntryCreation = alternateAmount;
190     }
191 
192     /**
193      * @see org.kuali.ole.sys.businessobject.AccountingLineBase#getSequenceNumber()
194      */
195     @Override
196     public Integer getSequenceNumber() {
197         return this.getAccountIdentifier();
198     }
199 
200     protected void copyFrom(PurApAccountingLine other) {
201 
202         super.copyFrom(other);
203 
204         setAccountLinePercent(other.getAccountLinePercent());
205         setAmount(other.getAmount());
206         setAlternateAmountForGLEntryCreation(other.getAlternateAmountForGLEntryCreation());
207 
208     }
209 
210     @Override
211     public void refreshNonUpdateableReferences() {
212         //hold onto item reference if there without itemId
213         PurApItem item = null;
214         PurApItem tempItem = getPurapItem();
215         if (tempItem != null &&
216                 tempItem.getItemIdentifier() != null) {
217             item = tempItem;
218         }
219         super.refreshNonUpdateableReferences();
220         if (ObjectUtils.isNotNull(item)) {
221             this.setPurapItem(item);
222         }
223     }
224 
225     @Override
226     public <T extends PurApItem> T getPurapItem() {
227         return (T) purapItem;
228     }
229 
230     /**
231      * Sets the requisitionItem attribute.
232      *
233      * @param item
234      * @deprecated
235      */
236     @Deprecated
237     @Override
238     public void setPurapItem(PurApItem item) {
239         purapItem = item;
240     }
241 
242     @Override
243     public String getPostingPeriodCode() {
244         return postingPeriodCode;
245     }
246 
247     @Override
248     public void setPostingPeriodCode(String postingPeriodCode) {
249         this.postingPeriodCode = postingPeriodCode;
250     }
251 
252     /**
253      * Overridden to use purap doc identifier, rather than document number
254      *
255      * @see org.kuali.ole.sys.businessobject.AccountingLineBase#getValuesMap()
256      */
257     @Override
258     public Map getValuesMap() {
259         Map valuesMap = super.getValuesMap();
260         // remove document number
261         valuesMap.remove(OLEPropertyConstants.DOCUMENT_NUMBER);
262         return valuesMap;
263     }
264 
265     /**
266      * Gets the purApSequenceNumber attribute.
267      *
268      * @return Returns the purApSequenceNumber
269      */
270 
271     @Override
272     public Integer getPurApSequenceNumber() {
273         return super.getSequenceNumber();
274     }
275 }