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.coa.businessobject;
017    
018    import java.util.LinkedHashMap;
019    
020    import org.apache.commons.lang.StringUtils;
021    import org.kuali.kfs.coa.service.ChartService;
022    import org.kuali.kfs.sys.context.SpringContext;
023    import org.kuali.rice.kim.bo.Person;
024    import org.kuali.rice.kim.service.PersonService;
025    import org.kuali.rice.kns.bo.Inactivateable;
026    import org.kuali.rice.kns.bo.KualiCode;
027    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
028    
029    /**
030     * 
031     */
032    public class Chart extends PersistableBusinessObjectBase implements KualiCode {
033    
034        private static final long serialVersionUID = 4129020803214027609L;
035    
036        private String finChartOfAccountDescription;
037        private boolean active;
038        private String finCoaManagerPrincipalId;
039        private String reportsToChartOfAccountsCode;
040        private String chartOfAccountsCode;
041        private String finAccountsPayableObjectCode;
042        private String finExternalEncumbranceObjCd;
043        private String finPreEncumbranceObjectCode;
044        private String financialCashObjectCode;
045        private String icrIncomeFinancialObjectCode;
046        private String finAccountsReceivableObjCode;
047        private String finInternalEncumbranceObjCd;
048        private String icrExpenseFinancialObjectCd;
049        private String incBdgtEliminationsFinObjCd;
050        private String expBdgtEliminationsFinObjCd;
051        private String fundBalanceObjectCode;
052    
053        private ObjectCode incBdgtEliminationsFinObj;
054        private ObjectCode expBdgtEliminationsFinObj;
055        private ObjectCode finAccountsPayableObject;
056        private ObjectCode finExternalEncumbranceObj;
057        private ObjectCode finPreEncumbranceObject;
058        private ObjectCode financialCashObject;
059        private ObjectCode icrIncomeFinancialObject;
060        private ObjectCode finAccountsReceivableObj;
061        private ObjectCode finInternalEncumbranceObj;
062        private ObjectCode icrExpenseFinancialObject;
063        private ObjectCode fundBalanceObject;
064        private Person finCoaManager;
065        private Chart reportsToChartOfAccounts;
066    
067    
068        /**
069         * Default no-arg constructor.
070         */
071        public Chart() {
072        }
073    
074        /**
075         * Gets the finChartOfAccountDescription attribute.
076         * 
077         * @return Returns the finChartOfAccountDescription
078         */
079        public String getFinChartOfAccountDescription() {
080            return finChartOfAccountDescription;
081        }
082    
083        /**
084         * Sets the finChartOfAccountDescription attribute.
085         * 
086         * @param finChartOfAccountDescription The finChartOfAccountDescription to set.
087         */
088        public void setFinChartOfAccountDescription(String finChartOfAccountDescription) {
089            this.finChartOfAccountDescription = finChartOfAccountDescription;
090        }
091    
092        /**
093         * Gets the active attribute.
094         * 
095         * @return Returns the active
096         */
097        public boolean isActive() {
098            return active;
099        }
100    
101        /**
102         * Sets the active attribute.
103         * 
104         * @param active The active to set.
105         */
106        public void setActive(boolean active) {
107            this.active = active;
108        }
109    
110    
111        /**
112         * Gets the finAccountsPayableObject attribute.
113         * 
114         * @return Returns the finAccountsPayableObject
115         */
116        public ObjectCode getFinAccountsPayableObject() {
117            return finAccountsPayableObject;
118        }
119    
120        /**
121         * Sets the finAccountsPayableObject attribute.
122         * 
123         * @param finAccountsPayableObject The finAccountsPayableObject to set.
124         * @deprecated
125         */
126        public void setFinAccountsPayableObject(ObjectCode finAccountsPayableObject) {
127            this.finAccountsPayableObject = finAccountsPayableObject;
128        }
129    
130    
131        /**
132         * Gets the finExternalEncumbranceObj attribute.
133         * 
134         * @return Returns the finExternalEncumbranceObj.
135         */
136        public ObjectCode getFinExternalEncumbranceObj() {
137            return finExternalEncumbranceObj;
138        }
139    
140        /**
141         * Sets the finExternalEncumbranceObj attribute value.
142         * 
143         * @param finExternalEncumbranceObj The finExternalEncumbranceObj to set.
144         * @deprecated
145         */
146        public void setFinExternalEncumbranceObj(ObjectCode finExternalEncumbranceObj) {
147            this.finExternalEncumbranceObj = finExternalEncumbranceObj;
148        }
149    
150        /**
151         * Gets the finPreEncumbranceObject attribute.
152         * 
153         * @return Returns the finPreEncumbranceObject
154         */
155        public ObjectCode getFinPreEncumbranceObject() {
156            return finPreEncumbranceObject;
157        }
158    
159        /**
160         * Sets the finPreEncumbranceObject attribute.
161         * 
162         * @param finPreEncumbranceObject The finPreEncumbranceObject to set.
163         * @deprecated
164         */
165        public void setFinPreEncumbranceObject(ObjectCode finPreEncumbranceObject) {
166            this.finPreEncumbranceObject = finPreEncumbranceObject;
167        }
168    
169        /**
170         * Gets the financialCashObject attribute.
171         * 
172         * @return Returns the financialCashObject
173         */
174        public ObjectCode getFinancialCashObject() {
175            return financialCashObject;
176        }
177    
178        /**
179         * Sets the financialCashObject attribute.
180         * 
181         * @param financialCashObject The financialCashObject to set.
182         * @deprecated
183         */
184        public void setFinancialCashObject(ObjectCode financialCashObject) {
185            this.financialCashObject = financialCashObject;
186        }
187    
188        /**
189         * Gets the icrIncomeFinancialObject attribute.
190         * 
191         * @return Returns the icrIncomeFinancialObject
192         */
193        public ObjectCode getIcrIncomeFinancialObject() {
194            return icrIncomeFinancialObject;
195        }
196    
197        /**
198         * Sets the icrIncomeFinancialObject attribute.
199         * 
200         * @param icrIncomeFinancialObject The icrIncomeFinancialObject to set.
201         * @deprecated
202         */
203        public void setIcrIncomeFinancialObject(ObjectCode icrIncomeFinancialObject) {
204            this.icrIncomeFinancialObject = icrIncomeFinancialObject;
205        }
206    
207        /**
208         * Gets the finAccountsReceivableObj attribute.
209         * 
210         * @return Returns the finAccountsReceivableObj
211         */
212        public ObjectCode getFinAccountsReceivableObj() {
213            return finAccountsReceivableObj;
214        }
215    
216        /**
217         * Sets the finAccountsReceivableObj attribute.
218         * 
219         * @param finAccountsReceivableObj The finAccountsReceivableObj to set.
220         * @deprecated
221         */
222        public void setFinAccountsReceivableObj(ObjectCode finAccountsReceivableObj) {
223            this.finAccountsReceivableObj = finAccountsReceivableObj;
224        }
225    
226        public Person getFinCoaManager() {
227            finCoaManager = SpringContext.getBean(PersonService.class).updatePersonIfNecessary(getFinCoaManagerPrincipalId(), finCoaManager);
228            return finCoaManager;
229        }
230    
231        /**
232         * Sets the finCoaManagerUniversal attribute.
233         * 
234         * @param finCoaManagerUniversal The finCoaManagerUniversal to set.
235         * @deprecated
236         */
237        public void setFinCoaManager(Person finCoaManagerUniversal) {
238            this.finCoaManager = finCoaManagerUniversal;
239        }
240    
241        /**
242         * Gets the reportsToChartOfAccounts attribute.
243         * 
244         * @return Returns the reportsToChartOfAccounts
245         */
246        public Chart getReportsToChartOfAccounts() {
247            return reportsToChartOfAccounts;
248        }
249    
250        /**
251         * Sets the reportsToChartOfAccounts attribute.
252         * 
253         * @param reportsToChartOfAccounts The reportsToChartOfAccounts to set.
254         * @deprecated
255         */
256        public void setReportsToChartOfAccounts(Chart reportsToChartOfAccounts) {
257            this.reportsToChartOfAccounts = reportsToChartOfAccounts;
258        }
259    
260        /**
261         * Gets the finInternalEncumbranceObj attribute.
262         * 
263         * @return Returns the finInternalEncumbranceObj.
264         */
265        public ObjectCode getFinInternalEncumbranceObj() {
266            return finInternalEncumbranceObj;
267        }
268    
269        /**
270         * Sets the finInternalEncumbranceObj attribute value.
271         * 
272         * @param finInternalEncumbranceObj The finInternalEncumbranceObj to set.
273         * @deprecated
274         */
275        public void setFinInternalEncumbranceObj(ObjectCode finInternalEncumbranceObj) {
276            this.finInternalEncumbranceObj = finInternalEncumbranceObj;
277        }
278    
279        /**
280         * Gets the icrExpenseFinancialObject attribute.
281         * 
282         * @return Returns the icrExpenseFinancialObject.
283         */
284        public ObjectCode getIcrExpenseFinancialObject() {
285            return icrExpenseFinancialObject;
286        }
287    
288        /**
289         * Sets the icrExpenseFinancialObject attribute value.
290         * 
291         * @param icrExpenseFinancialObject The icrExpenseFinancialObject to set.
292         * @deprecated
293         */
294        public void setIcrExpenseFinancialObject(ObjectCode icrExpenseFinancialObject) {
295            this.icrExpenseFinancialObject = icrExpenseFinancialObject;
296        }
297    
298        /**
299         * Gets the chartOfAccountsCode attribute.
300         * 
301         * @return Returns the chartOfAccountsCode.
302         */
303        public String getChartOfAccountsCode() {
304            return chartOfAccountsCode;
305        }
306    
307        /**
308         * Sets the chartOfAccountsCode attribute value.
309         * 
310         * @param chartOfAccountsCode The chartOfAccountsCode to set.
311         */
312        public void setChartOfAccountsCode(String chartOfAccountsCode) {
313            this.chartOfAccountsCode = chartOfAccountsCode;
314        }
315    
316        /**
317         * Gets the expBdgtEliminationsFinObj attribute.
318         * 
319         * @return Returns the expBdgtEliminationsFinObj.
320         */
321        public ObjectCode getExpBdgtEliminationsFinObj() {
322            return expBdgtEliminationsFinObj;
323        }
324    
325        /**
326         * Sets the expBdgtEliminationsFinObj attribute value.
327         * 
328         * @param expBdgtEliminationsFinObj The expBdgtEliminationsFinObj to set.
329         * @deprecated
330         */
331        public void setExpBdgtEliminationsFinObj(ObjectCode expBdgtEliminationsFinObj) {
332            this.expBdgtEliminationsFinObj = expBdgtEliminationsFinObj;
333        }
334    
335        /**
336         * Gets the incBdgtEliminationsFinObj attribute.
337         * 
338         * @return Returns the incBdgtEliminationsFinObj.
339         */
340        public ObjectCode getIncBdgtEliminationsFinObj() {
341            return incBdgtEliminationsFinObj;
342        }
343    
344        /**
345         * Sets the incBdgtEliminationsFinObj attribute value.
346         * 
347         * @param incBdgtEliminationsFinObj The incBdgtEliminationsFinObj to set.
348         * @deprecated
349         */
350        public void setIncBdgtEliminationsFinObj(ObjectCode incBdgtEliminationsFinObj) {
351            this.incBdgtEliminationsFinObj = incBdgtEliminationsFinObj;
352        }
353    
354        /**
355         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
356         */
357        @SuppressWarnings("unchecked")
358        protected LinkedHashMap toStringMapper() {
359            LinkedHashMap m = new LinkedHashMap();
360    
361            m.put("chartOfAccountsCode", this.chartOfAccountsCode);
362    
363            return m;
364        }
365    
366        /**
367         * Gets the finAccountsPayableObjectCode attribute.
368         * 
369         * @return Returns the finAccountsPayableObjectCode.
370         */
371        public String getFinAccountsPayableObjectCode() {
372            return finAccountsPayableObjectCode;
373        }
374    
375        /**
376         * Sets the finAccountsPayableObjectCode attribute value.
377         * 
378         * @param finAccountsPayableObjectCode The finAccountsPayableObjectCode to set.
379         */
380        public void setFinAccountsPayableObjectCode(String finAccountsPayableObjectCode) {
381            this.finAccountsPayableObjectCode = finAccountsPayableObjectCode;
382        }
383    
384        /**
385         * Gets the finAccountsReceivableObjCode attribute.
386         * 
387         * @return Returns the finAccountsReceivableObjCode.
388         */
389        public String getFinAccountsReceivableObjCode() {
390            return finAccountsReceivableObjCode;
391        }
392    
393        /**
394         * Sets the finAccountsReceivableObjCode attribute value.
395         * 
396         * @param finAccountsReceivableObjCode The finAccountsReceivableObjCode to set.
397         */
398        public void setFinAccountsReceivableObjCode(String finAccountsReceivableObjCode) {
399            this.finAccountsReceivableObjCode = finAccountsReceivableObjCode;
400        }
401    
402        /**
403         * Gets the financialCashObjectCode attribute.
404         * 
405         * @return Returns the financialCashObjectCode.
406         */
407        public String getFinancialCashObjectCode() {
408            return financialCashObjectCode;
409        }
410    
411        /**
412         * Sets the financialCashObjectCode attribute value.
413         * 
414         * @param financialCashObjectCode The financialCashObjectCode to set.
415         */
416        public void setFinancialCashObjectCode(String financialCashObjectCode) {
417            this.financialCashObjectCode = financialCashObjectCode;
418        }
419    
420        /**
421         * Gets the finExternalEncumbranceObjCd attribute.
422         * 
423         * @return Returns the finExternalEncumbranceObjCd.
424         */
425        public String getFinExternalEncumbranceObjCd() {
426            return finExternalEncumbranceObjCd;
427        }
428    
429        /**
430         * Sets the finExternalEncumbranceObjCd attribute value.
431         * 
432         * @param finExternalEncumbranceObjCd The finExternalEncumbranceObjCd to set.
433         */
434        public void setFinExternalEncumbranceObjCd(String finExternalEncumbranceObjCd) {
435            this.finExternalEncumbranceObjCd = finExternalEncumbranceObjCd;
436        }
437    
438        /**
439         * Gets the finInternalEncumbranceObjCd attribute.
440         * 
441         * @return Returns the finInternalEncumbranceObjCd.
442         */
443        public String getFinInternalEncumbranceObjCd() {
444            return finInternalEncumbranceObjCd;
445        }
446    
447        /**
448         * Sets the finInternalEncumbranceObjCd attribute value.
449         * 
450         * @param finInternalEncumbranceObjCd The finInternalEncumbranceObjCd to set.
451         */
452        public void setFinInternalEncumbranceObjCd(String finInternalEncumbranceObjCd) {
453            this.finInternalEncumbranceObjCd = finInternalEncumbranceObjCd;
454        }
455    
456        /**
457         * Gets the finPreEncumbranceObjectCode attribute.
458         * 
459         * @return Returns the finPreEncumbranceObjectCode.
460         */
461        public String getFinPreEncumbranceObjectCode() {
462            return finPreEncumbranceObjectCode;
463        }
464    
465        /**
466         * Sets the finPreEncumbranceObjectCode attribute value.
467         * 
468         * @param finPreEncumbranceObjectCode The finPreEncumbranceObjectCode to set.
469         */
470        public void setFinPreEncumbranceObjectCode(String finPreEncumbranceObjectCode) {
471            this.finPreEncumbranceObjectCode = finPreEncumbranceObjectCode;
472        }
473    
474        /**
475         * Gets the icrExpenseFinancialObjectCd attribute.
476         * 
477         * @return Returns the icrExpenseFinancialObjectCd.
478         */
479        public String getIcrExpenseFinancialObjectCd() {
480            return icrExpenseFinancialObjectCd;
481        }
482    
483        /**
484         * Sets the icrExpenseFinancialObjectCd attribute value.
485         * 
486         * @param icrExpenseFinancialObjectCd The icrExpenseFinancialObjectCd to set.
487         */
488        public void setIcrExpenseFinancialObjectCd(String icrExpenseFinancialObjectCd) {
489            this.icrExpenseFinancialObjectCd = icrExpenseFinancialObjectCd;
490        }
491    
492        /**
493         * Gets the icrIncomeFinancialObjectCode attribute.
494         * 
495         * @return Returns the icrIncomeFinancialObjectCode.
496         */
497        public String getIcrIncomeFinancialObjectCode() {
498            return icrIncomeFinancialObjectCode;
499        }
500    
501        /**
502         * Sets the icrIncomeFinancialObjectCode attribute value.
503         * 
504         * @param icrIncomeFinancialObjectCode The icrIncomeFinancialObjectCode to set.
505         */
506        public void setIcrIncomeFinancialObjectCode(String icrIncomeFinancialObjectCode) {
507            this.icrIncomeFinancialObjectCode = icrIncomeFinancialObjectCode;
508        }
509    
510        /**
511         * Gets the expBdgtEliminationsFinObjCd attribute.
512         * 
513         * @return Returns the expBdgtEliminationsFinObjCd
514         */
515        public String getExpBdgtEliminationsFinObjCd() {
516            return expBdgtEliminationsFinObjCd;
517        }
518    
519        /**
520         * Sets the expBdgtEliminationsFinObjCd attribute.
521         * 
522         * @param expBdgtEliminationsFinObjCd The expBdgtEliminationsFinObjCd to set.
523         */
524        public void setExpBdgtEliminationsFinObjCd(String expBdgtEliminationsFinObjCd) {
525            this.expBdgtEliminationsFinObjCd = expBdgtEliminationsFinObjCd;
526        }
527    
528        /**
529         * Gets the incBdgtEliminationsFinObjCd attribute.
530         * 
531         * @return Returns the incBdgtEliminationsFinObjCd
532         */
533        public String getIncBdgtEliminationsFinObjCd() {
534            return incBdgtEliminationsFinObjCd;
535        }
536    
537        /**
538         * Sets the incBdgtEliminationsFinObjCd attribute.
539         * 
540         * @param incBdgtEliminationsFinObjCd The incBdgtEliminationsFinObjCd to set.
541         */
542        public void setIncBdgtEliminationsFinObjCd(String incBdgtEliminationsFinObjCd) {
543            this.incBdgtEliminationsFinObjCd = incBdgtEliminationsFinObjCd;
544        }
545    
546        private static ChartService chartService;
547        
548        /**
549         * Gets the finCoaManagerPrincipalId attribute.
550         * 
551         * @return Returns the finCoaManagerPrincipalId.
552         */
553        public String getFinCoaManagerPrincipalId() {
554            if (StringUtils.isNotBlank(chartOfAccountsCode) && StringUtils.isBlank(finCoaManagerPrincipalId)) {
555                Person chartManager = getChartService().getChartManager(chartOfAccountsCode);
556                if (chartManager != null) {
557                    finCoaManager = chartManager;
558                    finCoaManagerPrincipalId = chartManager.getPrincipalId();
559                } else {
560                    finCoaManagerPrincipalId = null;
561                    finCoaManager = null;
562                }
563            }
564            return finCoaManagerPrincipalId;
565        }
566    
567        /**
568         * Sets the finCoaManagerPrincipalId attribute value.
569         * 
570         * @param finCoaManagerPrincipalId The finCoaManagerPrincipalId to set.
571         */
572        public void setFinCoaManagerPrincipalId(String finCoaManagerPrincipalId) {
573            this.finCoaManagerPrincipalId = finCoaManagerPrincipalId;
574        }
575    
576        /**
577         * @return Returns the reportsToChartOfAccountsCode.
578         */
579        public String getReportsToChartOfAccountsCode() {
580            return reportsToChartOfAccountsCode;
581        }
582    
583        /**
584         * @param reportsToChartOfAccountsCode The reportsToChartOfAccountsCode to set.
585         */
586        public void setReportsToChartOfAccountsCode(String reportsToChartOfAccountsCode) {
587            this.reportsToChartOfAccountsCode = reportsToChartOfAccountsCode;
588        }
589    
590        /**
591         * Gets the fundBalanceObject attribute.
592         * 
593         * @return Returns the fundBalanceObject.
594         */
595        public ObjectCode getFundBalanceObject() {
596            return fundBalanceObject;
597        }
598    
599        /**
600         * Sets the fundBalanceObject attribute value.
601         * 
602         * @param fundBalanceObject The fundBalanceObject to set.
603         * @deprecated
604         */
605        public void setFundBalanceObject(ObjectCode fundBalanceObject) {
606            this.fundBalanceObject = fundBalanceObject;
607        }
608    
609        /**
610         * Gets the fundBalanceObjectCode attribute.
611         * 
612         * @return Returns the fundBalanceObjectCode.
613         */
614        public String getFundBalanceObjectCode() {
615            return fundBalanceObjectCode;
616        }
617    
618        /**
619         * Sets the fundBalanceObjectCode attribute value.
620         * 
621         * @param fundBalanceObjectCode The fundBalanceObjectCode to set.
622         */
623        public void setFundBalanceObjectCode(String fundBalanceObjectCode) {
624            this.fundBalanceObjectCode = fundBalanceObjectCode;
625        }
626    
627        /**
628         * @return Returns the code and description in format: xx - xxxxxxxxxxxxxxxx
629         */
630        public String getCodeAndDescription() {
631            if (StringUtils.isNotBlank(getChartOfAccountsCode()) && StringUtils.isNotBlank(getFinChartOfAccountDescription()))
632                return getChartOfAccountsCode() + " - " + getFinChartOfAccountDescription();
633            else 
634                return "";
635        }
636    
637        public String getCode() {
638            return this.chartOfAccountsCode;
639        }
640    
641        public String getName() {
642            return this.finChartOfAccountDescription;
643        }
644    
645        protected static ChartService getChartService() {
646            if ( chartService == null ) {
647                chartService = SpringContext.getBean(ChartService.class);
648            }
649            return chartService;
650        }
651    
652        public void setCode(String chartOfAccountsCode) {
653            setChartOfAccountsCode(chartOfAccountsCode);        
654        }
655    
656        public void setName(String finChartOfAccountDescription) {
657            setFinChartOfAccountDescription(finChartOfAccountDescription);
658        }
659        
660        public String getChartCodeForReport() {
661            return this.chartOfAccountsCode;
662        }
663    }
664