1 PACKAGE BODY FA_SORP_UTIL_PVT as
2 /* $Header: FAVSPUTB.pls 120.2.12010000.1 2009/07/21 12:37:48 glchen noship $ */
3
4 -- Determine if debug is enabled
5
6
7 /* This function must be used only when the cache information is not available.
8 Whenever possible, please check whether SORP is enabled using sorp_enabled_flag
9 available in cache */
10 /*#
11 * Thus function accepts a Book Type Code and returns True if SORP
12 * is enabled for that book. False otherwise.
13 * @param p_book_type_code The book for which SORP enabled check must be performed
14 * @rep:scope private
15 * @rep:lifecycle active
16 * @rep:displayname Is SORP Enabled
17 * @rep:compatibility S
18 */
19 FUNCTION IS_SORP_ENABLED(p_book_type_code FA_BOOK_CONTROLS.BOOK_TYPE_CODE%TYPE,
20 p_log_level_rec IN fa_api_types.log_level_rec_type default null)
21 RETURN BOOLEAN
22 IS
23 l_sorp_enabled_flag VARCHAR2(1);
24 l_calling_fn varchar2(35) := 'FA_SORP_UTIL_PVT.IS_SORP_ENABLED';
25 BEGIN
26 IF (p_log_level_rec.statement_level) then
27 fa_debug_pkg.add
28 (l_calling_fn,
29 'Book Type Code Passed is ',
30 p_book_type_code, p_log_level_rec => p_log_level_rec);
31 End If;
32
33 SELECT SORP_ENABLED_FLAG
34 INTO l_sorp_enabled_flag
35 FROM FA_BOOK_CONTROLS
36 WHERE BOOK_TYPE_CODE = p_book_type_code;
37
38 IF (p_log_level_rec.statement_level) then
39 fa_debug_pkg.add
40 (l_calling_fn,
41 'SORP Enabled Flag is ',
42 l_sorp_enabled_flag, p_log_level_rec => p_log_level_rec);
43 End If;
44
45 IF l_sorp_enabled_flag = 'Y' Then
46 RETURN TRUE;
47 Else
48 RETURN FALSE;
49 End If;
50
51 EXCEPTION
52 WHEN NO_DATA_FOUND THEN
53 RETURN FALSE;
54 WHEN OTHERS THEN
55 fa_srvr_msg.add_sql_error
56 (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
57 RETURN FALSE;
58 END IS_SORP_ENABLED;
59
60
61 /*#
62 * Thus function is used to create neutralizing accounting entries for SORP
63 * compliance. This is an overloaded function which is called from several locations
64 * like revaluation, depreciation, impairments, transfers, etc. This overloaded
65 * function is a simplified version of the main create_sorp_neutral_acct function.
66 * @param p_amount The amount for which neutralizing entrie needs to be created
67 * @param p_reversal 'Y' indicates that a reversal entrie needs to be created
68 * @param p_adj Adjustment record needs to be populated with information like book, etc
69 * @param p_created_by standard who column information
70 * @param p_creation_date standard who column information
71 * @rep:scope private
72 * @rep:lifecycle active
73 * @rep:displayname create_sorp_neutral_acct
74 * @rep:compatibility S
75 */
76 FUNCTION create_sorp_neutral_acct (
77 p_amount IN NUMBER,
78 p_reversal IN VARCHAR2,
79 p_adj IN OUT NOCOPY FA_ADJUST_TYPE_PKG.FA_ADJ_ROW_STRUCT,
80 p_created_by IN NUMBER,
81 p_creation_date IN DATE
82 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
83 RETURN BOOLEAN IS
84 pos_err EXCEPTION;
85 l_calling_fn varchar2(60) := 'create_sorp_neutral_acct (overloaded)';
86 l_mode varchar2(20) := 'neutralizing';
87 BEGIN
88
89 if (p_log_level_rec.statement_level) then
90 fa_debug_pkg.add(l_calling_fn,'Entering overloaded function', 'true', p_log_level_rec => p_log_level_rec);
91 fa_debug_pkg.add(l_calling_fn,'p_amount', p_amount, p_log_level_rec => p_log_level_rec);
92 fa_debug_pkg.add(l_calling_fn,'p_reversal', p_reversal, p_log_level_rec => p_log_level_rec);
93 fa_debug_pkg.add(l_calling_fn,'p_adj.book_type_code', p_adj.book_type_code, p_log_level_rec => p_log_level_rec);
94 fa_debug_pkg.add(l_calling_fn,'p_created_by', p_created_by, p_log_level_rec => p_log_level_rec);
95 fa_debug_pkg.add(l_calling_fn,'p_creation_date', p_creation_date, p_log_level_rec => p_log_level_rec);
96 end if;
97
98 if not create_sorp_neutral_acct(
99 p_amount => p_amount,
100 p_reversal => p_reversal,
101 p_adj => p_adj,
102 p_created_by => p_created_by,
103 p_creation_date => p_creation_date,
104 p_last_update_date => NULL,
105 p_last_updated_by => NULL,
106 p_last_update_login => NULL,
107 p_who_mode => 'CREATE',
108 p_log_level_rec => p_log_level_rec) then
109 fa_debug_pkg.add(l_calling_fn,'create_sorp_neutral_acct', 'failed', p_log_level_rec => p_log_level_rec);
110 return false;
111 end if;
112
113 return true;
114 EXCEPTION
115 WHEN OTHERS THEN
116 fa_debug_pkg.add(l_calling_fn,'unexpected error', l_mode, p_log_level_rec => p_log_level_rec);
117 return false;
118 END create_sorp_neutral_acct;
119
120
121 /*#
122 * Thus function is used to create neutralizing accounting entries for SORP
123 * compliance. This is a generic function which is called from several locations
124 * like revaluation, depreciation, impairments, transfers, etc
125 * @param p_amount The amount for which neutralizing entrie needs to be created
126 * @param p_reversal 'Y' indicates that a reversal entrie needs to be created
127 * @param p_adj Adjustment record needs to be populated with information like book, etc
128 * @param p_created_by standard who column information
129 * @param p_creation_date standard who column information
130 * @param p_last_update_date standard who column information
131 * @param p_last_updated_by standard who column information
132 * @param p_last_update_login standard who column information
133 * @param p_who_mode Indicates what kind of data need to be inserted into the who
134 * columns of fa_adjusments. In FA, some pieces of code insert the
135 * created by information and other places the updated by information for the
136 * who columns of FA_ADJUSTMENTS. Thus this column has been added to make
137 * this function generic and insert the appropriate data as required depending
138 * on where it is called from
139 * @rep:scope private
140 * @rep:lifecycle active
141 * @rep:displayname create_sorp_neutral_acct
142 * @rep:compatibility S
143 */
144 FUNCTION create_sorp_neutral_acct (
145 p_amount IN NUMBER,
146 p_reversal IN VARCHAR2,
147 p_adj IN OUT NOCOPY FA_ADJUST_TYPE_PKG.FA_ADJ_ROW_STRUCT,
148 p_created_by IN NUMBER,
149 p_creation_date IN DATE,
150 p_last_update_date IN DATE,
151 p_last_updated_by IN NUMBER,
152 p_last_update_login IN NUMBER,
153 p_who_mode IN VARCHAR2
154 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
155
156 RETURN BOOLEAN IS
157 pos_err EXCEPTION;
158 l_calling_fn varchar2(60) := 'create_sorp_neutral_acct';
159 l_mode varchar2(20) := 'neutralizing';
160 l_leveling_flag boolean;
161 BEGIN
162
163 if (p_log_level_rec.statement_level) then
164 fa_debug_pkg.add(l_calling_fn,'p_amount', p_amount, p_log_level_rec => p_log_level_rec);
165 fa_debug_pkg.add(l_calling_fn,'p_reversal', p_reversal, p_log_level_rec => p_log_level_rec);
166 fa_debug_pkg.add(l_calling_fn,'p_adj.book_type_code', p_adj.book_type_code, p_log_level_rec => p_log_level_rec);
167 fa_debug_pkg.add(l_calling_fn,'p_created_by', p_created_by, p_log_level_rec => p_log_level_rec);
168 fa_debug_pkg.add(l_calling_fn,'p_creation_date', p_creation_date, p_log_level_rec => p_log_level_rec);
169 fa_debug_pkg.add(l_calling_fn,'p_last_update_date', p_last_update_date, p_log_level_rec => p_log_level_rec);
170 fa_debug_pkg.add(l_calling_fn,'p_last_updated_by', p_last_updated_by, p_log_level_rec => p_log_level_rec);
171 fa_debug_pkg.add(l_calling_fn,'p_last_update_login', p_last_update_login, p_log_level_rec => p_log_level_rec);
172 fa_debug_pkg.add(l_calling_fn,'p_who_mode', p_who_mode, p_log_level_rec => p_log_level_rec);
173 fa_debug_pkg.add(l_calling_fn,'p_adj.leveling_flag',p_adj.leveling_flag, p_log_level_rec => p_log_level_rec);
174 end if;
175
176 l_leveling_flag := p_adj.leveling_flag;
177 p_adj.leveling_flag := FALSE;
178
179 if (p_amount <> 0) then
180 --******************************************************
181 -- Capital Adjustment
182 --******************************************************
183 p_adj.adjustment_amount := p_amount;
184 p_adj.adjustment_type := 'CAPITAL ADJ';
185 p_adj.account_type := 'CAPITAL_ADJ_ACCT';
186 p_adj.account := fa_cache_pkg.fazccb_record.capital_adj_acct;
187 if p_reversal = 'Y' then
188 p_adj.debit_credit_flag := 'CR';
189 else
190 p_adj.debit_credit_flag := 'DR';
191 end if;
192
193 if (p_log_level_rec.statement_level) then
194 fa_debug_pkg.add(l_calling_fn,'Calling faxinaj for ', 'Impairment
195 Neutralizing Entry - Capital Adjustment', p_log_level_rec => p_log_level_rec);
196 end if;
197
198 if p_who_mode = 'CREATE' then
199 if not FA_INS_ADJUST_PKG.faxinaj (p_adj,
200 p_creation_date,
201 p_created_by, p_log_level_rec => p_log_level_rec) then
202 raise pos_err;
203 end if;
204 else
205 if not FA_INS_ADJUST_PKG.faxinaj (p_adj,
206 p_last_update_date,
207 p_last_updated_by,
208 p_last_update_login
209 , p_log_level_rec => p_log_level_rec) then
210 raise pos_err;
211 end if;
212 end if;
213
214 --******************************************************
215 -- General Fund
216 --******************************************************
217 p_adj.adjustment_amount := p_amount;
218 p_adj.adjustment_type := 'GENERAL FUND';
219 p_adj.account_type := 'GENERAL_FUND_ACCT';
220 p_adj.account := fa_cache_pkg.fazccb_record.general_fund_acct;
221 if p_reversal = 'Y' then
222 p_adj.debit_credit_flag := 'DR';
223 else
224 p_adj.debit_credit_flag := 'CR';
225 end if;
226
227 if (p_log_level_rec.statement_level) then
228 fa_debug_pkg.add(l_calling_fn,'Calling faxinaj for ', 'Impairment
229 Neutralizing Entry - General Fund Balance', p_log_level_rec => p_log_level_rec);
230 end if;
231
232 if p_who_mode = 'CREATE' then
233 if not FA_INS_ADJUST_PKG.faxinaj (p_adj,
234 p_creation_date,
235 p_created_by, p_log_level_rec => p_log_level_rec) then
236 raise pos_err;
237 end if;
238 else
239 if not FA_INS_ADJUST_PKG.faxinaj (p_adj,
240 p_last_update_date,
241 p_last_updated_by,
242 p_last_update_login
243 , p_log_level_rec => p_log_level_rec) then
244 raise pos_err;
245 end if;
246 end if;
247 end if; --End If (p_amount <> 0)
248
249 if (p_log_level_rec.statement_level) then
250 fa_debug_pkg.add(l_calling_fn,'create_sorp_neutral_acct completed', 'Success', p_log_level_rec => p_log_level_rec);
251 end if;
252
253 p_adj.leveling_flag := l_leveling_flag;
254
255 return true;
256
257 EXCEPTION
258 WHEN pos_err THEN
259
260 if (p_log_level_rec.statement_level) then
261 fa_debug_pkg.add(l_calling_fn,'exception at create_sorp_neutral_acct', 'pos_err', p_log_level_rec => p_log_level_rec);
262 fa_debug_pkg.add(l_calling_fn,'sqlerrm', substrb(sqlerrm, 1, 200));
263 end if;
264
265 return false;
266
267 WHEN OTHERS THEN
268
269 if (p_log_level_rec.statement_level) then
270 fa_debug_pkg.add(l_calling_fn,'exception at create_sorp_neutral_acct', 'OTHERS', p_log_level_rec => p_log_level_rec);
271 fa_debug_pkg.add(l_calling_fn,'sqlerrm', substrb(sqlerrm, 1, 200));
272 end if;
273
274 return false;
275
276 END create_sorp_neutral_acct;
277
278 END FA_SORP_UTIL_PVT;