001/*
002 * Copyright 2006 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 */
016package org.kuali.ole.gl.businessobject;
017
018import org.kuali.ole.sys.OLEConstants;
019import org.kuali.rice.core.api.util.type.KualiDecimal;
020import org.kuali.rice.krad.bo.BusinessObject;
021
022/**
023 * A representation of LedgerEntries, which are summaries that show up on Ledger Reports created by the scrubber and poster.
024 */
025public class LedgerEntryForReporting implements BusinessObject{
026
027    private String balanceType;
028    private String originCode;
029    private Integer fiscalYear;
030    private String period;
031    private int recordCount;
032    private KualiDecimal debitAmount;
033    private int debitCount;
034    private KualiDecimal creditAmount;
035    private int creditCount;
036    private KualiDecimal noDCAmount;
037    private int noDCCount;
038
039    /**
040     * Constructs a LedgerEntry.java.
041     */
042    public LedgerEntryForReporting() {
043        this(null, null, null, null);
044    }
045
046    /**
047     * Constructs a LedgerEntry.java.
048     * 
049     * @param fiscalYear
050     * @param period
051     * @param balanceType
052     * @param originCode
053     */
054    public LedgerEntryForReporting(Integer fiscalYear, String period, String balanceType, String originCode) {
055        this.fiscalYear = fiscalYear;
056        this.period = period;
057        this.balanceType = balanceType;
058        this.originCode = originCode;
059
060        this.creditAmount = KualiDecimal.ZERO;
061        this.debitAmount = KualiDecimal.ZERO;
062        this.noDCAmount = KualiDecimal.ZERO;
063    }
064
065    /**
066     * Add the amounts of the given ledger entry into those of current ledger entry, and update the counts of corresponding fields
067     * 
068     * @param addend the given ledger entry to be added into current one
069     */
070    public void add(LedgerEntryForReporting addend) {
071        this.creditAmount = this.creditAmount.add(addend.getCreditAmount());
072        this.creditCount += addend.getCreditCount();
073
074        this.debitAmount = this.debitAmount.add(addend.getDebitAmount());
075        this.debitCount += addend.getDebitCount();
076
077        this.noDCAmount = this.noDCAmount.add(addend.getNoDCAmount());
078        this.noDCCount += addend.getNoDCCount();
079
080        this.recordCount = this.creditCount + this.debitCount + this.noDCCount;
081    }
082
083    /**
084     * create or update a ledger entry with the array of information from the given entry summary object
085     * 
086     * @param entrySummary an entry summary to turn into a ledger entry
087     * @return a LedgerEntry created from the entrySummary array
088     */
089    public static LedgerEntryForReporting buildLedgerEntry(Object[] entrySummary) {
090        // extract the data from an array and use them to populate a ledger entry
091        Object oFiscalYear = entrySummary[0];
092        Object oPeriodCode = entrySummary[1];
093        Object oBalanceType = entrySummary[2];
094        Object oOriginCode = entrySummary[3];
095        Object oDebitCreditCode = entrySummary[4];
096        Object oAmount = entrySummary[5];
097        Object oCount = entrySummary[6];
098
099        Integer fiscalYear = oFiscalYear != null ? new Integer(oFiscalYear.toString()) : null;
100        String periodCode = oPeriodCode != null ? oPeriodCode.toString() : "  ";
101        String balanceType = oBalanceType != null ? oBalanceType.toString() : "  ";
102        String originCode = oOriginCode != null ? oOriginCode.toString() : "  ";
103        String debitCreditCode = oDebitCreditCode != null ? oDebitCreditCode.toString() : " ";
104        KualiDecimal amount = oAmount != null ? new KualiDecimal(oAmount.toString()) : KualiDecimal.ZERO;
105        int count = oCount != null ? Integer.parseInt(oCount.toString()) : 0;
106
107        // construct a ledger entry with the information fetched from the given array
108        LedgerEntryForReporting ledgerEntry = new LedgerEntryForReporting(fiscalYear, periodCode, balanceType, originCode);
109        if (OLEConstants.GL_CREDIT_CODE.equals(debitCreditCode)) {
110            ledgerEntry.setCreditAmount(amount);
111            ledgerEntry.setCreditCount(count);
112        }
113        else if (OLEConstants.GL_DEBIT_CODE.equals(debitCreditCode)) {
114            ledgerEntry.setDebitAmount(amount);
115            ledgerEntry.setDebitCount(count);
116        }
117        else {
118            ledgerEntry.setNoDCAmount(amount);
119            ledgerEntry.setNoDCCount(count);
120        }
121        ledgerEntry.setRecordCount(count);
122
123        return ledgerEntry;
124    }
125
126    /**
127     * Gets the balanceType attribute.
128     * 
129     * @return Returns the balanceType.
130     */
131    public String getBalanceType() {
132        return balanceType;
133    }
134
135    /**
136     * Sets the balanceType attribute value.
137     * 
138     * @param balanceType The balanceType to set.
139     */
140    public void setBalanceType(String balanceType) {
141        this.balanceType = balanceType;
142    }
143
144    /**
145     * Gets the creditAmount attribute.
146     * 
147     * @return Returns the creditAmount.
148     */
149    public KualiDecimal getCreditAmount() {
150        return creditAmount;
151    }
152
153    /**
154     * Sets the creditAmount attribute value.
155     * 
156     * @param creditAmount The creditAmount to set.
157     */
158    public void setCreditAmount(KualiDecimal creditAmount) {
159        this.creditAmount = creditAmount;
160    }
161
162    /**
163     * Gets the creditCount attribute.
164     * 
165     * @return Returns the creditCount.
166     */
167    public int getCreditCount() {
168        return creditCount;
169    }
170
171    /**
172     * Sets the creditCount attribute value.
173     * 
174     * @param creditCount The creditCount to set.
175     */
176    public void setCreditCount(int creditCount) {
177        this.creditCount = creditCount;
178    }
179
180    /**
181     * Gets the debitAmount attribute.
182     * 
183     * @return Returns the debitAmount.
184     */
185    public KualiDecimal getDebitAmount() {
186        return debitAmount;
187    }
188
189    /**
190     * Sets the debitAmount attribute value.
191     * 
192     * @param debitAmount The debitAmount to set.
193     */
194    public void setDebitAmount(KualiDecimal debitAmount) {
195        this.debitAmount = debitAmount;
196    }
197
198    /**
199     * Gets the debitCount attribute.
200     * 
201     * @return Returns the debitCount.
202     */
203    public int getDebitCount() {
204        return debitCount;
205    }
206
207    /**
208     * Sets the debitCount attribute value.
209     * 
210     * @param debitCount The debitCount to set.
211     */
212    public void setDebitCount(int debitCount) {
213        this.debitCount = debitCount;
214    }
215
216    /**
217     * Gets the fiscalYear attribute.
218     * 
219     * @return Returns the fiscalYear.
220     */
221    public Integer getFiscalYear() {
222        return fiscalYear;
223    }
224
225    /**
226     * Sets the fiscalYear attribute value.
227     * 
228     * @param fiscalYear The fiscalYear to set.
229     */
230    public void setFiscalYear(Integer fiscalYear) {
231        this.fiscalYear = fiscalYear;
232    }
233
234    /**
235     * Gets the noDCAmount attribute.
236     * 
237     * @return Returns the noDCAmount.
238     */
239    public KualiDecimal getNoDCAmount() {
240        return noDCAmount;
241    }
242
243    /**
244     * Sets the noDCAmount attribute value.
245     * 
246     * @param noDCAmount The noDCAmount to set.
247     */
248    public void setNoDCAmount(KualiDecimal noDCAmount) {
249        this.noDCAmount = noDCAmount;
250    }
251
252    /**
253     * Gets the noDCCount attribute.
254     * 
255     * @return Returns the noDCCount.
256     */
257    public int getNoDCCount() {
258        return noDCCount;
259    }
260
261    /**
262     * Sets the noDCCount attribute value.
263     * 
264     * @param noDCCount The noDCCount to set.
265     */
266    public void setNoDCCount(int noDCCount) {
267        this.noDCCount = noDCCount;
268    }
269
270    /**
271     * Gets the originCode attribute.
272     * 
273     * @return Returns the originCode.
274     */
275    public String getOriginCode() {
276        return originCode;
277    }
278
279    /**
280     * Sets the originCode attribute value.
281     * 
282     * @param originCode The originCode to set.
283     */
284    public void setOriginCode(String originCode) {
285        this.originCode = originCode;
286    }
287
288    /**
289     * Gets the period attribute.
290     * 
291     * @return Returns the period.
292     */
293    public String getPeriod() {
294        return period;
295    }
296
297    /**
298     * Sets the period attribute value.
299     * 
300     * @param period The period to set.
301     */
302    public void setPeriod(String period) {
303        this.period = period;
304    }
305
306    /**
307     * Gets the recordCount attribute.
308     * 
309     * @return Returns the recordCount.
310     */
311    public int getRecordCount() {
312        return recordCount;
313    }
314
315    /**
316     * Sets the recordCount attribute value.
317     * 
318     * @param recordCount The recordCount to set.
319     */
320    public void setRecordCount(int recordCount) {
321        this.recordCount = recordCount;
322    }
323
324    /**
325     * @see java.lang.Object#toString()
326     */
327    public String toString() {
328        StringBuffer ledgerEntryDescription = new StringBuffer();
329
330        ledgerEntryDescription.append(fiscalYear + "\t");
331        ledgerEntryDescription.append(period + "\t");
332        ledgerEntryDescription.append(balanceType + "\t");
333        ledgerEntryDescription.append(originCode + "\t");
334        ledgerEntryDescription.append(recordCount + "\t");
335
336        ledgerEntryDescription.append(debitAmount + "\t\t");
337        ledgerEntryDescription.append(debitCount + "\t");
338
339        ledgerEntryDescription.append(creditAmount + "\t\t");
340        ledgerEntryDescription.append(creditCount + "\t");
341
342        ledgerEntryDescription.append(noDCAmount + "\t\t");
343        ledgerEntryDescription.append(noDCCount + "\t");
344
345        return ledgerEntryDescription.toString();
346    }
347
348    public void prepareForWorkflow() {}
349    public void refresh() { }
350}