1 /*
2 * Copyright 2009 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.kuali.ole.gl.batch.service;
17
18 import java.util.Iterator;
19 import java.util.List;
20 import java.util.Map;
21
22 import org.kuali.ole.gl.batch.service.impl.exception.FatalErrorException;
23 import org.kuali.ole.gl.businessobject.Balance;
24 import org.kuali.ole.gl.businessobject.OriginEntryFull;
25 import org.kuali.ole.sys.service.ReportWriterService;
26
27 public interface OrganizationReversionProcess {
28 /**
29 * Runs the organization reversion process.
30 * @param jobParameters the parameters used in the process
31 * @param organizationReversionCounts a Map of named statistics generated by running the process
32 */
33 public abstract void organizationReversionProcess(Map jobParameters, Map<String, Integer> organizationReversionCounts);
34
35 /**
36 * This method initializes several properties needed for the process to run correctly
37 */
38 public abstract void initializeProcess();
39
40 /**
41 * Given a list of balances, this method generates the origin entries for the organization reversion/carry forward process, and saves those
42 * to an initialized origin entry group
43 *
44 * @param balances an iterator of balances to process; each balance returned by the iterator will be processed by this method
45 */
46 public abstract void processBalances(Iterator<Balance> balances);
47
48 /**
49 * This method determines which origin entries (reversion, cash reversion, or carry forward) need to be generated for the current unit of work,
50 * and then delegates to the origin entry generation methods to create those entries
51 *
52 * @return a list of OriginEntries which need to be written
53 * @throws FatalErrorException thrown if object codes are missing in any of the generation methods
54 */
55 public abstract List<OriginEntryFull> generateOutputOriginEntries() throws FatalErrorException;
56
57 /**
58 * This method generates cash reversion origin entries for the current organization reversion, and adds them to the given list
59 *
60 * @param originEntriesToWrite a list of OriginEntryFulls to stick generated origin entries into
61 * @throws FatalErrorException thrown if an origin entry's object code can't be found
62 */
63 public abstract void generateCashReversions(List<OriginEntryFull> originEntriesToWrite) throws FatalErrorException;
64
65 /**
66 * Generates carry forward origin entries on a category by category basis (if the organization reversion record asks for that), assuming carry
67 * forwards are required for the current unit of work
68 *
69 * @param originEntriesToWrite a list of origin entries to write, which any generated origin entries should be added to
70 * @throws FatalErrorException thrown if an object code cannot be found
71 */
72 public abstract void generateMany(List<OriginEntryFull> originEntriesToWrite) throws FatalErrorException;
73
74 /**
75 * If carry forwards need to be generated for this unit of work, this method will generate the origin entries to accomplish those object codes.
76 * Note: this will only be called if the organization reversion record tells the process to munge all carry forwards for all categories
77 * together; if the organization reversion record does not call for such a thing, then generateMany will be called
78 *
79 * @param originEntriesToWrite a list of origin entries to write, that any generated origin entries should be added to
80 * @throws FatalErrorException thrown if the current object code can't be found in the database
81 */
82 public abstract void generateCarryForwards(List<OriginEntryFull> originEntriesToWrite) throws FatalErrorException;
83
84 /**
85 * If reversions are necessary, this will generate the origin entries for those reversions
86 *
87 * @param originEntriesToWrite the list of origin entries to add reversions into
88 * @throws FatalErrorException thrown if object code if the entry can't be found
89 */
90 public abstract void generateReversions(List<OriginEntryFull> originEntriesToWrite) throws FatalErrorException;
91
92 /**
93 * This method calculates the totals for a given unit of work's reversion
94 *
95 * @throws FatalErrorException
96 */
97 public abstract void calculateTotals() throws FatalErrorException;
98
99 /**
100 * Writes out the encapsulated origin entry ledger report to the given reportWriterService
101 * @param reportWriterService the report to write the ledger summary report to
102 */
103 public abstract void writeLedgerSummaryReport(ReportWriterService reportWriterService);
104
105 /**
106 * Sets the holdGeneratedOriginEntries attribute value.
107 *
108 * @param holdGeneratedOriginEntries The holdGeneratedOriginEntries to set.
109 */
110 public abstract void setHoldGeneratedOriginEntries(boolean holdGeneratedOriginEntries);
111
112 /**
113 * Gets the generatedOriginEntries attribute.
114 *
115 * @return Returns the generatedOriginEntries.
116 */
117 public abstract List<OriginEntryFull> getGeneratedOriginEntries();
118
119 /**
120 * Returns the total number of balances for the previous fiscal year
121 *
122 * @return the total number of balances for the previous fiscal year
123 */
124 public abstract int getBalancesRead();
125
126 /**
127 * Returns the total number of balances selected for inclusion in this process
128 *
129 * @return the total number of balances selected for inclusion in this process
130 */
131 public abstract int getBalancesSelected();
132 }