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    
021    import org.apache.commons.lang.ArrayUtils;
022    import org.kuali.kfs.gl.GeneralLedgerConstants;
023    import org.kuali.kfs.gl.batch.PosterEntriesStep;
024    import org.kuali.kfs.sys.KFSConstants;
025    import org.kuali.kfs.sys.context.SpringContext;
026    import org.kuali.rice.kns.service.ParameterService;
027    import org.kuali.rice.kns.util.KualiDecimal;
028    import org.kuali.rice.kns.util.ObjectUtils;
029    
030    /**
031     * Encumbrance BO for Balancing process. I.e. a shadow representation.
032    */
033    public class EncumbranceHistory extends Encumbrance {
034    
035        public EncumbranceHistory() {
036            super();
037            this.setAccountLineEncumbranceAmount(KualiDecimal.ZERO);
038            this.setAccountLineEncumbranceClosedAmount(KualiDecimal.ZERO);
039        }
040    
041        /**
042         * Constructs a BalanceHistory.java.
043         * 
044         * @param transaction
045         */
046        public EncumbranceHistory(OriginEntryInformation originEntry) {
047            this();
048            this.setUniversityFiscalYear(originEntry.getUniversityFiscalYear());
049            this.setChartOfAccountsCode(originEntry.getChartOfAccountsCode());
050            this.setAccountNumber(originEntry.getAccountNumber());
051            this.setSubAccountNumber(originEntry.getSubAccountNumber());
052            this.setObjectCode(originEntry.getFinancialObjectCode());
053            this.setSubObjectCode(originEntry.getFinancialSubObjectCode());
054            this.setBalanceTypeCode(originEntry.getFinancialBalanceTypeCode());
055            this.setDocumentTypeCode(originEntry.getFinancialDocumentTypeCode());
056            this.setOriginCode(originEntry.getFinancialSystemOriginationCode());
057            this.setDocumentNumber(originEntry.getDocumentNumber());
058        }
059        
060        /**
061         * Updates amount if the object already existed
062         * @param originEntry representing the update details
063         */
064        public void addAmount(OriginEntryInformation originEntry) {
065            //KFSMI-1571 - check parameter encumbranceOpenAmountOeverridingDocTypes
066            ParameterService parameterService = SpringContext.getBean(ParameterService.class);
067            String[] encumbranceOpenAmountOeverridingDocTypes = parameterService.getParameterValues(PosterEntriesStep.class, GeneralLedgerConstants.PosterService.ENCUMBRANCE_OPEN_AMOUNT_OVERRIDING_DOCUMENT_TYPES).toArray(new String[] {});
068            
069            if (KFSConstants.ENCUMB_UPDT_REFERENCE_DOCUMENT_CD.equals(originEntry.getTransactionEncumbranceUpdateCode()) && !ArrayUtils.contains(encumbranceOpenAmountOeverridingDocTypes, originEntry.getFinancialDocumentTypeCode())) {
070                // If using referring doc number, add or subtract transaction amount from
071                // encumbrance closed amount
072                if (KFSConstants.GL_DEBIT_CODE.equals(originEntry.getTransactionDebitCreditCode())) {
073                    this.setAccountLineEncumbranceClosedAmount(this.getAccountLineEncumbranceClosedAmount().subtract(originEntry.getTransactionLedgerEntryAmount()));
074                }
075                else {
076                    this.setAccountLineEncumbranceClosedAmount(this.getAccountLineEncumbranceClosedAmount().add(originEntry.getTransactionLedgerEntryAmount()));
077                }
078            }
079            else {
080                // If not using referring doc number, add or subtract transaction amount from
081                // encumbrance amount
082                if (KFSConstants.GL_DEBIT_CODE.equals(originEntry.getTransactionDebitCreditCode()) || KFSConstants.GL_BUDGET_CODE.equals(originEntry.getTransactionDebitCreditCode())) {
083                    this.setAccountLineEncumbranceAmount(this.getAccountLineEncumbranceAmount().add(originEntry.getTransactionLedgerEntryAmount()));
084                }
085                else {
086                    this.setAccountLineEncumbranceAmount(this.getAccountLineEncumbranceAmount().subtract(originEntry.getTransactionLedgerEntryAmount()));
087                }
088            }
089        }
090        
091        /**
092         * Compare amounts
093         * @param accountBalance
094         */
095        public boolean compareAmounts(Encumbrance encumbrance) {
096            if (ObjectUtils.isNotNull(encumbrance)
097                    && encumbrance.getAccountLineEncumbranceAmount().equals(this.getAccountLineEncumbranceAmount())
098                    && encumbrance.getAccountLineEncumbranceClosedAmount().equals(this.getAccountLineEncumbranceClosedAmount())) {
099                return true;
100            }
101            
102            return false;
103        }
104        
105        /**
106         * History does not track this field.
107         * @see org.kuali.kfs.gl.businessobject.Balance#getTimestamp()
108         */
109        @Override
110        public String getAccountLineEncumbrancePurgeCode() {
111            throw new UnsupportedOperationException();
112        }
113    
114        /**
115         * History does not track this field.
116         * @see org.kuali.kfs.gl.businessobject.Balance#getTimestamp()
117         */
118        @Override
119        public void setAccountLineEncumbrancePurgeCode(String accountLineEncumbrancePurgeCode) {
120            throw new UnsupportedOperationException();
121        }
122    
123        /**
124         * History does not track this field.
125         * @see org.kuali.kfs.gl.businessobject.Balance#getTimestamp()
126         */
127        @Override
128        public Timestamp getTimestamp() {
129            throw new UnsupportedOperationException();
130        }
131    
132        /**
133         * History does not track this field.
134         * @see org.kuali.kfs.gl.businessobject.Balance#getTimestamp()
135         */
136        @Override
137        public void setTimestamp(Timestamp timestamp) {
138            throw new UnsupportedOperationException();
139        }
140    
141        /**
142         * History does not track this field.
143         * @see org.kuali.kfs.gl.businessobject.Balance#getTimestamp()
144         */
145        @Override
146        public Date getTransactionEncumbranceDate() {
147            throw new UnsupportedOperationException();
148        }
149    
150        /**
151         * History does not track this field.
152         * @see org.kuali.kfs.gl.businessobject.Balance#getTimestamp()
153         */
154        @Override
155        public void setTransactionEncumbranceDate(Date transactionEncumbranceDate) {
156            throw new UnsupportedOperationException();
157        }
158    
159        /**
160         * History does not track this field.
161         * @see org.kuali.kfs.gl.businessobject.Balance#getTimestamp()
162         */
163        @Override
164        public String getTransactionEncumbranceDescription() {
165            throw new UnsupportedOperationException();
166        }
167    
168        /**
169         * History does not track this field.
170         * @see org.kuali.kfs.gl.businessobject.Balance#getTimestamp()
171         */
172        @Override
173        public void setTransactionEncumbranceDescription(String transactionEncumbranceDescription) {
174            throw new UnsupportedOperationException();
175        }
176    }