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.gl.businessobject;
017    
018    import java.sql.Date;
019    import java.sql.Timestamp;
020    import java.util.LinkedHashMap;
021    
022    import org.kuali.kfs.coa.businessobject.Account;
023    import org.kuali.kfs.coa.businessobject.BalanceType;
024    import org.kuali.kfs.coa.businessobject.Chart;
025    import org.kuali.kfs.coa.businessobject.ObjectCode;
026    import org.kuali.kfs.coa.businessobject.SubAccount;
027    import org.kuali.kfs.coa.businessobject.SubObjectCode;
028    import org.kuali.kfs.sys.KFSPropertyConstants;
029    import org.kuali.kfs.sys.businessobject.OriginationCode;
030    import org.kuali.kfs.sys.businessobject.SystemOptions;
031    import org.kuali.kfs.sys.context.SpringContext;
032    import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO;
033    import org.kuali.rice.kew.service.impl.KEWModuleService;
034    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
035    import org.kuali.rice.kns.util.KualiDecimal;
036    
037    /**
038     * Represents the encumbrance amount for a specific university fiscal year, 
039     * chart of accounts code, account number, sub account number, object code,
040     * sub object code, balance type code, document type code, origin code, and document number.
041     * This encumbrance object contains amounts for actual enumbrance amount, closed amount,
042     * outstanding amount 
043     * 
044    */
045    public class Encumbrance extends PersistableBusinessObjectBase {
046        static final long serialVersionUID = -7494473472438516396L;
047    
048        private Integer universityFiscalYear;
049        private String chartOfAccountsCode;
050        private String accountNumber;
051        private String subAccountNumber;
052        private String objectCode;
053        private String subObjectCode;
054        private String balanceTypeCode;
055        private String documentTypeCode;
056        private String originCode;
057        private String documentNumber;
058        private String transactionEncumbranceDescription;
059        private Date transactionEncumbranceDate;
060        private KualiDecimal accountLineEncumbranceAmount;
061        private KualiDecimal accountLineEncumbranceClosedAmount;
062        private KualiDecimal accountLineEncumbranceOutstandingAmount;
063        private String accountLineEncumbrancePurgeCode;
064        private Timestamp timestamp;
065    
066        private SubAccount subAccount;
067        private Chart chart;
068        private Account account;
069        private SubObjectCode financialSubObject;
070        private DocumentTypeEBO financialSystemDocumentTypeCode;
071    
072        private ObjectCode financialObject;
073        private BalanceType balanceType;
074        private OriginationCode originationCode;
075        private SystemOptions option;
076    
077        private TransientBalanceInquiryAttributes dummyBusinessObject;
078    
079        public Encumbrance() {
080        }
081    
082        public Encumbrance(Transaction t) {
083            universityFiscalYear = t.getUniversityFiscalYear();
084            chartOfAccountsCode = t.getChartOfAccountsCode();
085            accountNumber = t.getAccountNumber();
086            subAccountNumber = t.getSubAccountNumber();
087            objectCode = t.getFinancialObjectCode();
088            subObjectCode = t.getFinancialSubObjectCode();
089            balanceTypeCode = t.getFinancialBalanceTypeCode();
090            documentTypeCode = t.getFinancialDocumentTypeCode();
091            originCode = t.getFinancialSystemOriginationCode();
092            documentNumber = t.getDocumentNumber();
093            transactionEncumbranceDescription = t.getTransactionLedgerEntryDescription();
094            transactionEncumbranceDate = t.getTransactionDate();
095            accountLineEncumbranceAmount = KualiDecimal.ZERO;
096            accountLineEncumbranceClosedAmount = KualiDecimal.ZERO;
097            accountLineEncumbrancePurgeCode = " ";
098            this.dummyBusinessObject = new TransientBalanceInquiryAttributes();
099        }
100    
101        /**
102         * Constructs a AccountBalance.java per the primary keys only of the passed in accountBalanceHistory
103         * @param accountBalanceHistory
104         */
105        public Encumbrance(EncumbranceHistory encumbranceHistory) {
106            universityFiscalYear = encumbranceHistory.getUniversityFiscalYear();
107            chartOfAccountsCode = encumbranceHistory.getChartOfAccountsCode();
108            accountNumber = encumbranceHistory.getAccountNumber();
109            subAccountNumber = encumbranceHistory.getSubAccountNumber();
110            objectCode = encumbranceHistory.getObjectCode();
111            subObjectCode = encumbranceHistory.getSubObjectCode();
112            balanceTypeCode = encumbranceHistory.getBalanceTypeCode();
113            documentTypeCode = encumbranceHistory.getDocumentTypeCode();
114            originCode = encumbranceHistory.getOriginCode();
115            documentNumber = encumbranceHistory.getDocumentNumber();
116        }
117    
118        
119        protected LinkedHashMap toStringMapper() {
120            LinkedHashMap map = new LinkedHashMap();
121            map.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, getUniversityFiscalYear());
122            map.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, getChartOfAccountsCode());
123            map.put(KFSPropertyConstants.ACCOUNT_NUMBER, getAccountNumber());
124            map.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, getSubAccountNumber());
125            map.put(KFSPropertyConstants.OBJECT_CODE, getObjectCode());
126            map.put(KFSPropertyConstants.SUB_OBJECT_CODE, getSubObjectCode());
127            map.put(KFSPropertyConstants.BALANCE_TYPE_CODE, getBalanceTypeCode());
128            map.put(KFSPropertyConstants.ENCUMBRANCE_DOCUMENT_TYPE_CODE, getDocumentTypeCode());
129            map.put(KFSPropertyConstants.ORIGIN_CODE, getOriginCode());
130            map.put(KFSPropertyConstants.DOCUMENT_NUMBER, getDocumentNumber());
131            map.put(KFSPropertyConstants.ACCOUNT_LINE_ENCUMBRANCE_AMOUNT, getAccountLineEncumbranceAmount());
132            map.put(KFSPropertyConstants.ACCOUNT_LINE_ENCUMBRANCE_CLOSED_AMOUNT, getAccountLineEncumbranceClosedAmount());
133            return map;
134        }
135    
136        public OriginationCode getOriginationCode() {
137            return originationCode;
138        }
139    
140        public void setOriginationCode(OriginationCode originationCode) {
141            this.originationCode = originationCode;
142        }
143    
144        /**
145         * @return Returns the accountLineEncumbranceAmount.
146         */
147        public KualiDecimal getAccountLineEncumbranceAmount() {
148            return accountLineEncumbranceAmount;
149        }
150    
151        /**
152         * @param accountLineEncumbranceAmount The accountLineEncumbranceAmount to set.
153         */
154        public void setAccountLineEncumbranceAmount(KualiDecimal accountLineEncumbranceAmount) {
155            this.accountLineEncumbranceAmount = accountLineEncumbranceAmount;
156        }
157    
158        /**
159         * @return Returns the accountLineEncumbranceClearedAmount.
160         */
161        public KualiDecimal getAccountLineEncumbranceClosedAmount() {
162            return accountLineEncumbranceClosedAmount;
163        }
164    
165        public void setAccountLineEncumbranceOutstandingAmount() {
166        }
167    
168        public KualiDecimal getAccountLineEncumbranceOutstandingAmount() {
169            return accountLineEncumbranceAmount.subtract(accountLineEncumbranceClosedAmount);
170        }
171    
172        /**
173         * @param accountLineEncumbranceClearedAmount The accountLineEncumbranceClearedAmount to set.
174         */
175        public void setAccountLineEncumbranceClosedAmount(KualiDecimal accountLineEncumbranceClosedAmount) {
176            this.accountLineEncumbranceClosedAmount = accountLineEncumbranceClosedAmount;
177        }
178    
179        /**
180         * @return Returns the accountLineEncumbrancePrg.
181         */
182        public String getAccountLineEncumbrancePurgeCode() {
183            return accountLineEncumbrancePurgeCode;
184        }
185    
186        /**
187         * @param accountLineEncumbrancePrg The accountLineEncumbrancePrg to set.
188         */
189        public void setAccountLineEncumbrancePurgeCode(String accountLineEncumbrancePurgeCode) {
190            this.accountLineEncumbrancePurgeCode = accountLineEncumbrancePurgeCode;
191        }
192    
193        /**
194         * @return Returns the accountNumber.
195         */
196        public String getAccountNumber() {
197            return accountNumber;
198        }
199    
200        /**
201         * @param accountNumber The accountNumber to set.
202         */
203        public void setAccountNumber(String accountNumber) {
204            this.accountNumber = accountNumber;
205        }
206    
207        /**
208         * @return Returns the balanceTypeCode.
209         */
210        public String getBalanceTypeCode() {
211            return balanceTypeCode;
212        }
213    
214        /**
215         * @param balanceTypeCode The balanceTypeCode to set.
216         */
217        public void setBalanceTypeCode(String balanceTypeCode) {
218            this.balanceTypeCode = balanceTypeCode;
219        }
220    
221        /**
222         * @return Returns the chartOfAccountsCode.
223         */
224        public String getChartOfAccountsCode() {
225            return chartOfAccountsCode;
226        }
227    
228        /**
229         * @param chartOfAccountsCode The chartOfAccountsCode to set.
230         */
231        public void setChartOfAccountsCode(String chartOfAccountsCode) {
232            this.chartOfAccountsCode = chartOfAccountsCode;
233        }
234    
235        /**
236         * @return Returns the documentNumber.
237         */
238        public String getDocumentNumber() {
239            return documentNumber;
240        }
241    
242        /**
243         * @param documentNumber The documentNumber to set.
244         */
245        public void setDocumentNumber(String documentNumber) {
246            this.documentNumber = documentNumber;
247        }
248    
249        /**
250         * @return Returns the documentTypeCode.
251         */
252        public String getDocumentTypeCode() {
253            return documentTypeCode;
254        }
255    
256        /**
257         * @param documentTypeCode The documentTypeCode to set.
258         */
259        public void setDocumentTypeCode(String documentTypeCode) {
260            this.documentTypeCode = documentTypeCode;
261        }
262    
263        /**
264         * @return Returns the objectCode.
265         */
266        public String getObjectCode() {
267            return objectCode;
268        }
269    
270        /**
271         * @param objectCode The objectCode to set.
272         */
273        public void setObjectCode(String objectCode) {
274            this.objectCode = objectCode;
275        }
276    
277        /**
278         * @return Returns the originCode.
279         */
280        public String getOriginCode() {
281            return originCode;
282        }
283    
284        /**
285         * @param originCode The originCode to set.
286         */
287        public void setOriginCode(String originCode) {
288            this.originCode = originCode;
289        }
290    
291        /**
292         * @return Returns the subAccountNumber.
293         */
294        public String getSubAccountNumber() {
295            return subAccountNumber;
296        }
297    
298        /**
299         * @param subAccountNumber The subAccountNumber to set.
300         */
301        public void setSubAccountNumber(String subAccountNumber) {
302            this.subAccountNumber = subAccountNumber;
303        }
304    
305        /**
306         * @return Returns the subObjectCode.
307         */
308        public String getSubObjectCode() {
309            return subObjectCode;
310        }
311    
312        /**
313         * @param subObjectCode The subObjectCode to set.
314         */
315        public void setSubObjectCode(String subObjectCode) {
316            this.subObjectCode = subObjectCode;
317        }
318    
319        /**
320         * @return Returns the timestamp.
321         */
322        public Timestamp getTimestamp() {
323            return timestamp;
324        }
325    
326        /**
327         * @param timestamp The timestamp to set.
328         */
329        public void setTimestamp(Timestamp timestamp) {
330            this.timestamp = timestamp;
331        }
332    
333        /**
334         * @return Returns the transactionEncumbranceDate.
335         */
336        public Date getTransactionEncumbranceDate() {
337            return transactionEncumbranceDate;
338        }
339    
340        /**
341         * @param transactionEncumbranceDate The transactionEncumbranceDate to set.
342         */
343        public void setTransactionEncumbranceDate(Date transactionEncumbranceDate) {
344            this.transactionEncumbranceDate = transactionEncumbranceDate;
345        }
346    
347        /**
348         * @return Returns the transactionEncumbranceDescription.
349         */
350        public String getTransactionEncumbranceDescription() {
351            return transactionEncumbranceDescription;
352        }
353    
354        /**
355         * @param transactionEncumbranceDescription The transactionEncumbranceDescription to set.
356         */
357        public void setTransactionEncumbranceDescription(String transactionEncumbranceDescription) {
358            this.transactionEncumbranceDescription = transactionEncumbranceDescription;
359        }
360    
361        /**
362         * @return Returns the universityFiscalYear.
363         */
364        public Integer getUniversityFiscalYear() {
365            return universityFiscalYear;
366        }
367    
368        /**
369         * @param universityFiscalYear The universityFiscalYear to set.
370         */
371        public void setUniversityFiscalYear(Integer universityFiscalYear) {
372            this.universityFiscalYear = universityFiscalYear;
373        }
374    
375        /**
376         * Gets the account attribute.
377         * 
378         * @return Returns the account.
379         */
380        public Account getAccount() {
381            return account;
382        }
383    
384        /**
385         * Sets the account attribute value.
386         * 
387         * @param account The account to set.
388         */
389        public void setAccount(Account account) {
390            this.account = account;
391        }
392    
393        /**
394         * Gets the chart attribute.
395         * 
396         * @return Returns the chart.
397         */
398        public Chart getChart() {
399            return chart;
400        }
401    
402        /**
403         * Sets the chart attribute value.
404         * 
405         * @param chart The chart to set.
406         */
407        public void setChart(Chart chart) {
408            this.chart = chart;
409        }
410    
411        /**
412         * Gets the financialObject attribute.
413         * 
414         * @return Returns the financialObject.
415         */
416        public ObjectCode getFinancialObject() {
417            return financialObject;
418        }
419    
420        /**
421         * Sets the financialObject attribute value.
422         * 
423         * @param financialObject The financialObject to set.
424         */
425        public void setFinancialObject(ObjectCode financialObject) {
426            this.financialObject = financialObject;
427        }
428    
429        /**
430         * Gets the balanceType attribute.
431         * 
432         * @return Returns the balanceType.
433         */
434        public BalanceType getBalanceType() {
435            return balanceType;
436        }
437    
438        /**
439         * Sets the balanceType attribute value.
440         * 
441         * @param balanceType The balanceType to set.
442         */
443        public void setBalanceType(BalanceType balanceType) {
444            this.balanceType = balanceType;
445        }
446    
447        /**
448         * Gets the dummyBusinessObject attribute.
449         * 
450         * @return Returns the dummyBusinessObject.
451         */
452        public TransientBalanceInquiryAttributes getDummyBusinessObject() {
453            return dummyBusinessObject;
454        }
455    
456        /**
457         * Sets the dummyBusinessObject attribute value.
458         * 
459         * @param dummyBusinessObject The dummyBusinessObject to set.
460         */
461        public void setDummyBusinessObject(TransientBalanceInquiryAttributes dummyBusinessObject) {
462            this.dummyBusinessObject = dummyBusinessObject;
463        }
464    
465        /**
466         * Gets the option attribute.
467         * 
468         * @return Returns the option.
469         */
470        public SystemOptions getOption() {
471            return option;
472        }
473    
474        /**
475         * Sets the option attribute value.
476         * 
477         * @param option The option to set.
478         */
479        public void setOption(SystemOptions option) {
480            this.option = option;
481        }
482    
483        /**
484         * Gets the subAccount attribute.
485         * 
486         * @return Returns the subAccount.
487         */
488        public SubAccount getSubAccount() {
489            return subAccount;
490        }
491    
492        /**
493         * Sets the subAccount attribute value.
494         * 
495         * @param subAccount The subAccount to set.
496         */
497        public void setSubAccount(SubAccount subAccount) {
498            this.subAccount = subAccount;
499        }
500    
501        /**
502         * Gets the financialSystemDocumentTypeCode attribute. 
503         * @return Returns the financialSystemDocumentTypeCode.
504         */
505        public DocumentTypeEBO getFinancialSystemDocumentTypeCode() {
506            return financialSystemDocumentTypeCode = SpringContext.getBean(KEWModuleService.class).retrieveExternalizableBusinessObjectIfNecessary(this, financialSystemDocumentTypeCode, "financialSystemDocumentTypeCode");
507        }
508    
509        /**
510         * Gets the financialSubObject attribute.
511         * 
512         * @return Returns the financialSubObject.
513         */
514        public SubObjectCode getFinancialSubObject() {
515            return financialSubObject;
516        }
517    
518        /**
519         * Sets the financialSubObject attribute value.
520         * 
521         * @param financialSubObject The financialSubObject to set.
522         */
523        public void setFinancialSubObject(SubObjectCode financialSubObject) {
524            this.financialSubObject = financialSubObject;
525        }
526    }