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    
017    package org.kuali.kfs.module.ld.businessobject;
018    
019    import java.sql.Timestamp;
020    import java.util.ArrayList;
021    import java.util.LinkedHashMap;
022    import java.util.List;
023    
024    import org.apache.commons.lang.StringUtils;
025    import org.kuali.kfs.coa.businessobject.Chart;
026    import org.kuali.kfs.coa.businessobject.ObjectType;
027    import org.kuali.kfs.gl.businessobject.Balance;
028    import org.kuali.kfs.integration.ld.LaborLedgerBalance;
029    import org.kuali.kfs.integration.ld.LaborLedgerObject;
030    import org.kuali.kfs.sys.KFSConstants;
031    import org.kuali.kfs.sys.KFSPropertyConstants;
032    import org.kuali.kfs.sys.context.SpringContext;
033    import org.kuali.rice.kim.bo.Person;
034    import org.kuali.rice.kim.service.PersonService;
035    import org.kuali.rice.kns.util.KualiDecimal;
036    
037    /**
038     * Labor business object for LedgerBalance.
039     */
040    public class LedgerBalance extends Balance implements LaborLedgerBalance{
041        private String financialObjectCode;
042        private String financialSubObjectCode;
043        private String financialBalanceTypeCode;
044        private String financialObjectTypeCode;
045        private String positionNumber;
046        private String emplid;
047        private KualiDecimal financialBeginningBalanceLineAmount;
048        private Timestamp transactionDateTimeStamp;
049        private String financialObjectFringeOrSalaryCode;
050        private Chart chartOfAccounts;
051        private ObjectType financialObjectType;
052        private Person ledgerPerson;
053        private LaborObject laborObject;
054    
055        /**
056         * Default constructor.
057         */
058        public LedgerBalance() {
059            super();
060            this.setAccountLineAnnualBalanceAmount(KualiDecimal.ZERO);
061            this.setFinancialBeginningBalanceLineAmount(KualiDecimal.ZERO);
062            super.setBeginningBalanceLineAmount(KualiDecimal.ZERO);
063            this.setContractsGrantsBeginningBalanceAmount(KualiDecimal.ZERO);
064        }
065    
066        /**
067         * Constructs a LedgerBalance.java.
068         * 
069         * @param transaction
070         */
071        public LedgerBalance(LaborTransaction transaction) {
072            this();
073            this.setChartOfAccountsCode(transaction.getChartOfAccountsCode());
074            this.setAccountNumber(transaction.getAccountNumber());
075            this.setFinancialBalanceTypeCode(transaction.getFinancialBalanceTypeCode());
076            this.setEmplid(transaction.getEmplid());
077            this.setFinancialObjectCode(transaction.getFinancialObjectCode());
078            this.setFinancialObjectTypeCode(transaction.getFinancialObjectTypeCode());
079            this.setFinancialSubObjectCode(transaction.getFinancialSubObjectCode());
080            this.setPositionNumber(transaction.getPositionNumber());
081            this.setUniversityFiscalYear(transaction.getUniversityFiscalYear());
082            this.setSubAccountNumber(transaction.getSubAccountNumber());
083        }
084    
085        /**
086         * Constructs a LedgerBalance.java.
087         * 
088         * @param transaction
089         */
090        public LedgerBalance(LaborBalanceHistory ledgerBalanceHistory) {
091            this();
092            this.setChartOfAccountsCode(ledgerBalanceHistory.getChartOfAccountsCode());
093            this.setAccountNumber(ledgerBalanceHistory.getAccountNumber());
094            this.setFinancialBalanceTypeCode(ledgerBalanceHistory.getFinancialBalanceTypeCode());
095            this.setEmplid(ledgerBalanceHistory.getEmplid());
096            this.setFinancialObjectCode(ledgerBalanceHistory.getFinancialObjectCode());
097            this.setFinancialObjectTypeCode(ledgerBalanceHistory.getFinancialObjectTypeCode());
098            this.setFinancialSubObjectCode(ledgerBalanceHistory.getFinancialSubObjectCode());
099            this.setPositionNumber(ledgerBalanceHistory.getPositionNumber());
100            this.setUniversityFiscalYear(ledgerBalanceHistory.getUniversityFiscalYear());
101            this.setSubAccountNumber(ledgerBalanceHistory.getSubAccountNumber());
102        }
103        
104        /**
105         * Gets the emplid
106         * 
107         * @return Returns the emplid.
108         */
109        public String getEmplid() {
110            return emplid;
111        }
112    
113        /**
114         * Sets the emplid
115         * 
116         * @param emplid The emplid to set.
117         */
118        public void setEmplid(String emplid) {
119            this.emplid = emplid;
120        }
121    
122        /**
123         * Gets the financialBalanceTypeCode
124         * 
125         * @return Returns the financialBalanceTypeCode.
126         */
127        public String getFinancialBalanceTypeCode() {
128            return financialBalanceTypeCode;
129        }
130    
131        /**
132         * Sets the financialBalanceTypeCode
133         * 
134         * @param financialBalanceTypeCode The financialBalanceTypeCode to set.
135         */
136        public void setFinancialBalanceTypeCode(String financialBalanceTypeCode) {
137            this.financialBalanceTypeCode = financialBalanceTypeCode;
138        }
139    
140        /**
141         * Gets the financialBeginningBalanceLineAmount
142         * 
143         * @return Returns the financialBeginningBalanceLineAmount.
144         */
145        public KualiDecimal getFinancialBeginningBalanceLineAmount() {
146            return financialBeginningBalanceLineAmount;
147        }
148    
149        /**
150         * Sets the financialBeginningBalanceLineAmount
151         * 
152         * @param financialBeginningBalanceLineAmount The financialBeginningBalanceLineAmount to set.
153         */
154        public void setFinancialBeginningBalanceLineAmount(KualiDecimal financialBeginningBalanceLineAmount) {
155            this.financialBeginningBalanceLineAmount = financialBeginningBalanceLineAmount;
156            super.setBeginningBalanceLineAmount(financialBeginningBalanceLineAmount);
157            
158        }
159    
160        /**
161         * Gets the financialObjectCode
162         * 
163         * @return Returns the financialObjectCode.
164         */
165        public String getFinancialObjectCode() {
166            return financialObjectCode;
167        }
168    
169        /**
170         * Sets the financialObjectCode
171         * 
172         * @param financialObjectCode The financialObjectCode to set.
173         */
174        public void setFinancialObjectCode(String financialObjectCode) {
175            this.financialObjectCode = financialObjectCode;
176        }
177    
178        /**
179         * Gets the financialObjectTypeCode
180         * 
181         * @return Returns the financialObjectTypeCode.
182         */
183        public String getFinancialObjectTypeCode() {
184            return financialObjectTypeCode;
185        }
186    
187        /**
188         * Sets the financialObjectTypeCode
189         * 
190         * @param financialObjectTypeCode The financialObjectTypeCode to set.
191         */
192        public void setFinancialObjectTypeCode(String financialObjectTypeCode) {
193            this.financialObjectTypeCode = financialObjectTypeCode;
194        }
195    
196        /**
197         * Gets the financialSubObjectCode
198         * 
199         * @return Returns the financialSubObjectCode.
200         */
201        public String getFinancialSubObjectCode() {
202            return financialSubObjectCode;
203        }
204    
205        /**
206         * Sets the financialSubObjectCode
207         * 
208         * @param financialSubObjectCode The financialSubObjectCode to set.
209         */
210        public void setFinancialSubObjectCode(String financialSubObjectCode) {
211            this.financialSubObjectCode = financialSubObjectCode;
212        }
213    
214        /**
215         * Gets the positionNumber
216         * 
217         * @return Returns the positionNumber.
218         */
219        public String getPositionNumber() {
220            return positionNumber;
221        }
222    
223        /**
224         * Sets the positionNumber
225         * 
226         * @param positionNumber The positionNumber to set.
227         */
228        public void setPositionNumber(String positionNumber) {
229            this.positionNumber = positionNumber;
230        }
231    
232        /**
233         * Gets the transactionDateTimeStamp
234         * 
235         * @return Returns the transactionDateTimeStamp.
236         */
237        public Timestamp getTransactionDateTimeStamp() {
238            return transactionDateTimeStamp;
239        }
240    
241        /**
242         * Sets the transactionDateTimeStamp
243         * 
244         * @param transactionDateTimeStamp The transactionDateTimeStamp to set.
245         */
246        public void setTransactionDateTimeStamp(Timestamp transactionDateTimeStamp) {
247            this.transactionDateTimeStamp = transactionDateTimeStamp;
248        }
249    
250        /**
251         * Gets the getFinancialBalanceTypeCode
252         * 
253         * @return getFinancialBalanceTypeCode
254         * @see org.kuali.kfs.gl.businessobject.Balance#getBalanceTypeCode()
255         */
256        @Override
257        public String getBalanceTypeCode() {
258            return this.getFinancialBalanceTypeCode();
259        }
260    
261        /**
262         * Sets the setFinancialBalanceTypeCode
263         * 
264         * @param balanceTypeCode
265         * @see org.kuali.kfs.gl.businessobject.Balance#setBalanceTypeCode(java.lang.String)
266         */
267        @Override
268        public void setBalanceTypeCode(String balanceTypeCode) {
269            this.setFinancialBalanceTypeCode(balanceTypeCode);
270        }
271    
272        /**
273         * Gets the getChartOfAccounts
274         * 
275         * @return getChartOfAccounts
276         * @see org.kuali.kfs.gl.businessobject.Balance#getChart()
277         */
278        @Override
279        public Chart getChart() {
280            return this.getChartOfAccounts();
281        }
282    
283        /**
284         * Sets the setChartOfAccounts
285         * 
286         * @param chart
287         * @see org.kuali.kfs.gl.businessobject.Balance#setChart(org.kuali.kfs.coa.businessobject.Chart)
288         */
289        @Override
290        public void setChart(Chart chart) {
291            this.setChartOfAccounts(chart);
292        }
293    
294        /**
295         * Gets the chartOfAccounts
296         * 
297         * @return Returns the chartOfAccounts.
298         */
299        public Chart getChartOfAccounts() {
300            return chartOfAccounts;
301        }
302    
303        /**
304         * Sets the chartOfAccounts
305         * 
306         * @param chartOfAccounts The chartOfAccounts to set.
307         */
308        public void setChartOfAccounts(Chart chartOfAccounts) {
309            this.chartOfAccounts = chartOfAccounts;
310        }
311    
312        /**
313         * Gets the financialObjectType
314         * 
315         * @return Returns the financialObjectType.
316         */
317        public ObjectType getFinancialObjectType() {
318            return financialObjectType;
319        }
320    
321        /**
322         * Sets the financialObjectType
323         * 
324         * @param financialObjectType The financialObjectType to set.
325         */
326        public void setFinancialObjectType(ObjectType financialObjectType) {
327            this.financialObjectType = financialObjectType;
328        }
329    
330        /**
331         * Adds amounts in a period.
332         * 
333         * @param period, amount
334         * @see org.kuali.kfs.gl.businessobject.Balance#addAmount(java.lang.String, org.kuali.rice.kns.util.KualiDecimal)
335         */
336        @Override
337        public void addAmount(String period, KualiDecimal amount) {
338            if (KFSConstants.PERIOD_CODE_ANNUAL_BALANCE.equals(period)) {
339                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
340            }
341            else if (KFSConstants.PERIOD_CODE_BEGINNING_BALANCE.equals(period)) {
342                this.setFinancialBeginningBalanceLineAmount(this.getFinancialBeginningBalanceLineAmount().add(amount));
343                super.getBeginningBalanceLineAmount().add(amount);
344            }
345            else if (KFSConstants.PERIOD_CODE_CG_BEGINNING_BALANCE.equals(period)) {
346                this.setContractsGrantsBeginningBalanceAmount(this.getContractsGrantsBeginningBalanceAmount().add(amount));
347            }
348            else if (KFSConstants.MONTH1.equals(period)) {
349                setMonth1Amount(getMonth1Amount().add(amount));
350                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
351            }
352            else if (KFSConstants.MONTH2.equals(period)) {
353                setMonth2Amount(getMonth2Amount().add(amount));
354                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
355            }
356            else if (KFSConstants.MONTH3.equals(period)) {
357                setMonth3Amount(getMonth3Amount().add(amount));
358                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
359            }
360            else if (KFSConstants.MONTH4.equals(period)) {
361                setMonth4Amount(getMonth4Amount().add(amount));
362                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
363            }
364            else if (KFSConstants.MONTH5.equals(period)) {
365                setMonth5Amount(getMonth5Amount().add(amount));
366                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
367            }
368            else if (KFSConstants.MONTH6.equals(period)) {
369                setMonth6Amount(getMonth6Amount().add(amount));
370                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
371            }
372            else if (KFSConstants.MONTH7.equals(period)) {
373                setMonth7Amount(getMonth7Amount().add(amount));
374                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
375            }
376            else if (KFSConstants.MONTH8.equals(period)) {
377                setMonth8Amount(getMonth8Amount().add(amount));
378                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
379            }
380            else if (KFSConstants.MONTH9.equals(period)) {
381                setMonth9Amount(getMonth9Amount().add(amount));
382                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
383            }
384            else if (KFSConstants.MONTH10.equals(period)) {
385                setMonth10Amount(getMonth10Amount().add(amount));
386                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
387            }
388            else if (KFSConstants.MONTH11.equals(period)) {
389                setMonth11Amount(getMonth11Amount().add(amount));
390                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
391            }
392            else if (KFSConstants.MONTH12.equals(period)) {
393                setMonth12Amount(getMonth12Amount().add(amount));
394                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
395            }
396            else if (KFSConstants.MONTH13.equals(period)) {
397                setMonth13Amount(getMonth13Amount().add(amount));
398                this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount));
399            }
400        }
401        
402        /**
403         * get the amount in the given period.
404         * 
405         * @param periodCode the given period code
406         */
407        public KualiDecimal getAmountByPeriod(String periodCode) {
408            if (KFSConstants.PERIOD_CODE_ANNUAL_BALANCE.equals(periodCode)) {
409                return this.getAccountLineAnnualBalanceAmount();
410            }
411            else if (KFSConstants.PERIOD_CODE_BEGINNING_BALANCE.equals(periodCode)) {
412                return this.getFinancialBeginningBalanceLineAmount();
413            }
414            else if (KFSConstants.PERIOD_CODE_CG_BEGINNING_BALANCE.equals(periodCode)) {
415                return this.getContractsGrantsBeginningBalanceAmount();
416            }
417            else if (KFSConstants.MONTH1.equals(periodCode)) {
418                return this.getMonth1Amount();
419            }
420            else if (KFSConstants.MONTH2.equals(periodCode)) {
421                return this.getMonth2Amount();
422            }
423            else if (KFSConstants.MONTH3.equals(periodCode)) {
424                return this.getMonth3Amount();
425            }
426            else if (KFSConstants.MONTH4.equals(periodCode)) {
427                return this.getMonth4Amount();
428            }
429            else if (KFSConstants.MONTH5.equals(periodCode)) {
430                return this.getMonth5Amount();
431            }
432            else if (KFSConstants.MONTH6.equals(periodCode)) {
433                return this.getMonth6Amount();
434            }
435            else if (KFSConstants.MONTH7.equals(periodCode)) {
436                return this.getMonth7Amount();
437            }
438            else if (KFSConstants.MONTH8.equals(periodCode)) {
439                return this.getMonth8Amount();
440            }
441            else if (KFSConstants.MONTH9.equals(periodCode)) {
442                return this.getMonth9Amount();
443            }
444            else if (KFSConstants.MONTH10.equals(periodCode)) {
445                return this.getMonth10Amount();
446            }
447            else if (KFSConstants.MONTH11.equals(periodCode)) {
448                return this.getMonth11Amount();
449            }
450            else if (KFSConstants.MONTH12.equals(periodCode)) {
451                return this.getMonth12Amount();
452            }
453            else if (KFSConstants.MONTH13.equals(periodCode)) {
454                return this.getMonth13Amount();
455            }
456            else {
457                throw new IllegalArgumentException("Unsupport Period Code: " + periodCode);
458            }
459        }
460        
461        /**
462         * @see org.kuali.module.effort.bo.LaborLedgerEntry#getLaborLedgerObject()
463         */
464        public LaborLedgerObject getLaborLedgerObject() {
465            return this.laborObject;
466        }
467    
468        /**
469         * @see org.kuali.module.effort.bo.LaborLedgerEntry#setLaborLedgerObject(org.kuali.kfs.bo.LaborLedgerObject)
470         */
471        @Deprecated
472        public void setLaborLedgerObject(LaborLedgerObject laborLedgerObject) {
473            this.laborObject = (LaborObject) laborLedgerObject;
474        }
475    
476        /**
477         * Gets the laborObject attribute.
478         * 
479         * @return Returns the laborObject.
480         */
481        public LaborObject getLaborObject() {
482            return laborObject;
483        }
484    
485        /**
486         * Sets the laborObject attribute value.
487         * 
488         * @param laborObject The laborObject to set.
489         */
490        @Deprecated
491        public void setLaborObject(LaborObject laborObject) {
492            this.laborObject = laborObject;
493        }
494    
495        /**
496         * Gets the Person
497         * 
498         * @return Returns the Person
499         */
500        public Person getLedgerPerson() {
501            if(ledgerPerson == null || !StringUtils.equals(ledgerPerson.getEmployeeId(), emplid)) {
502                ledgerPerson = SpringContext.getBean(PersonService.class).getPersonByEmployeeId(emplid);
503            }
504            
505            return ledgerPerson;
506        }
507    
508        /**
509         * Sets the ledgerPerson
510         * 
511         * @param ledgerPerson The ledgerPerson to set.
512         */
513        public void setLedgerPerson(Person ledgerPerson) {
514            this.ledgerPerson = ledgerPerson;
515        }
516    
517        /**
518         * construct the primary key list of the business object
519         * 
520         * @return the primary key list of the business object
521         */
522        public static List<String> getPrimaryKeyList() {
523            List<String> primaryKeyList = new ArrayList<String>();
524            primaryKeyList.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
525            primaryKeyList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
526            primaryKeyList.add(KFSPropertyConstants.ACCOUNT_NUMBER);
527            primaryKeyList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
528            primaryKeyList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
529            primaryKeyList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
530            primaryKeyList.add(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE);
531            primaryKeyList.add(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE);
532            primaryKeyList.add(KFSPropertyConstants.POSITION_NUMBER);
533            primaryKeyList.add(KFSPropertyConstants.EMPLID);
534    
535            return primaryKeyList;
536        }
537    
538        /**
539         * @see org.kuali.kfs.gl.businessobject.Balance#toStringMapper()
540         */
541        @Override
542        protected LinkedHashMap toStringMapper() {
543            LinkedHashMap map = new LinkedHashMap();
544            map.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, getUniversityFiscalYear());
545            map.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, getChartOfAccountsCode());
546            map.put(KFSPropertyConstants.ACCOUNT_NUMBER, getAccountNumber());
547            map.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, getSubAccountNumber());
548            map.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, getFinancialObjectCode());
549            map.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, getFinancialSubObjectCode());
550            map.put(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, getFinancialBalanceTypeCode());
551            map.put(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE, getFinancialObjectTypeCode());
552            map.put(KFSPropertyConstants.POSITION_NUMBER, this.getPositionNumber());
553            map.put(KFSPropertyConstants.EMPLID, this.getEmplid());
554            return map;
555        }
556    }
557