[Home] [Help]
PACKAGE BODY: APPS.FII_AR_FACTS_AGING_PKG
Source
1 PACKAGE BODY FII_AR_FACTS_AGING_PKG AS
2 /* $Header: FIIAR19B.pls 120.16 2007/09/24 17:57:41 mmanasse ship $ */
3
4 g_sysdate_time DATE := SYSDATE;
5 g_sysdate DATE := TRUNC(SYSDATE);
6
7 g_errbuf VARCHAR2(2000) := NULL;
8 g_retcode VARCHAR2(200) := NULL;
9 g_exception_msg VARCHAR2(4000) := NULL;
10 g_prim_currency VARCHAR2(15) := NULL;
11 g_sec_currency VARCHAR2(15) := NULL;
12 g_prim_rate_type VARCHAR2(30);
13 g_sec_rate_type VARCHAR2(30);
14 g_state VARCHAR2(200);
15 g_global_start_date DATE;
16 g_debug_flag VARCHAR2(1) := NVL(FND_PROFILE.value('FII_DEBUG_MODE'), 'N');
17 g_collection_criteria VARCHAR2(2) := NVL(FND_PROFILE.value('FII_AR_COLLECTION_CRITERIA'), 'TR');
18 g_primary_mau NUMBER;
19 g_secondary_mau NUMBER;
20 g_fii_user_id NUMBER(15);
21 g_fii_login_id NUMBER(15);
22 g_fii_schema VARCHAR2(30);
23
24 G_TABLE_NOT_EXIST EXCEPTION;
25 PRAGMA EXCEPTION_INIT(G_TABLE_NOT_EXIST, -942);
26 G_LOGIN_INFO_NOT_AVABLE EXCEPTION;
27 G_MISSING_RATES EXCEPTION;
28 G_MISS_GLOBAL_PARAMS EXCEPTION;
29 G_NEED_SECONDARY_INFO EXCEPTION;
30 G_INVALID_BUCKET_DEF EXCEPTION;
31
32 --Bucket definitions for unapplied receipts
33 g_rct_bucket_name VARCHAR2(80);
34 g_rct_bucket_1_low NUMBER;
35 g_rct_bucket_1_high NUMBER;
36 g_rct_bucket_2_low NUMBER;
37 g_rct_bucket_2_high NUMBER;
38 g_rct_bucket_3_low NUMBER;
39 g_rct_bucket_3_high NUMBER;
40
41 --Bucket definitions for current receivables aging
42 g_current_bucket_name VARCHAR2(80);
43 g_current_bucket_3_low NUMBER;
44 g_current_bucket_3_high NUMBER;
45 g_current_bucket_2_low NUMBER;
46 g_current_bucket_2_high NUMBER;
47 g_current_bucket_1_low NUMBER;
48 g_current_bucket_1_high NUMBER;
49
50 --Bucket definitions for past due receivables aging
51 g_past_due_bucket_name VARCHAR2(80);
52 g_past_due_bucket_1_low NUMBER;
53 g_past_due_bucket_1_high NUMBER;
54 g_past_due_bucket_2_low NUMBER;
55 g_past_due_bucket_2_high NUMBER;
56 g_past_due_bucket_3_low NUMBER;
57 g_past_due_bucket_3_high NUMBER;
58 g_past_due_bucket_4_low NUMBER;
59 g_past_due_bucket_4_high NUMBER;
60 g_past_due_bucket_5_low NUMBER;
61 g_past_due_bucket_5_high NUMBER;
62 g_past_due_bucket_6_low NUMBER;
63 g_past_due_bucket_6_high NUMBER;
64 g_past_due_bucket_7_low NUMBER;
65 g_past_due_bucket_7_high NUMBER;
66
67 -- ===========================================================================
68 -- AR DBI Incremental Extraction
69 -- ===========================================================================
70
71 G_LAST_UPDATE_DATE DATE;
72 G_MAX_PAYMENT_SCHEDULE_ID NUMBER(15);
73 G_MAX_RECEIVABLE_APPL_ID NUMBER(15);
74
75 -- ------------------------------------------------------------
76 -- Private Functions and Procedures
77 -- ------------------------------------------------------------
78
79 ---------------------------------------------------
80 -- PROCEDURE TRUNCATE_TABLE
81 ---------------------------------------------------
82
83 PROCEDURE Truncate_table (p_table_name VARCHAR2) IS
84 l_stmt VARCHAR2(100);
85 BEGIN
86 l_stmt := 'TRUNCATE table '||g_fii_schema||'.'||p_table_name;
87 if g_debug_flag = 'Y' then
88 FII_UTIL.put_line('');
89 FII_UTIL.put_line(l_stmt);
90 end if;
91 EXECUTE IMMEDIATE l_stmt;
92
93 EXCEPTION
94 WHEN G_TABLE_NOT_EXIST THEN
95 null; -- Oracle 942, table does not exist, no actions
96 WHEN OTHERS THEN
97 g_errbuf := 'Error in Procedure: TRUNCATE_TABLE Message: '||sqlerrm;
98 RAISE;
99 END Truncate_Table;
100
101
102 -------------------------------------------------------------------
103 -- PROCEDURE GET_BUCKET_RANGES
104 -- Purpose
105 -- This procedure gets the bucket range definitions for
106 -- Current Receivables, Past Due Receivables and Unapplied Receipts
107 -------------------------------------------------------------------
108 PROCEDURE GET_BUCKET_RANGES is
109
110 l_error_bucket_name VARCHAR2 (80);
111 l_error_bucket_ranges VARCHAR2 (200);
112 l_error_bucket_start NUMBER;
113
114 BEGIN
115
116 --------------------------------------------
117 --Unapplied Receipt Bucket
118 --------------------------------------------
119 g_state := 'Getting unapplied receipts aging bucket ranges';
120 if g_debug_flag = 'Y' then
121 FII_UTIL.put_line(g_state);
122 end if;
123
124 select bb.name,
125 bbc.range1_low, bbc.range1_high-1,
126 bbc.range2_low, bbc.range2_high-1,
127 bbc.range3_low, bbc.range3_high-1
128 into g_rct_bucket_name,
129 g_rct_bucket_1_low, g_rct_bucket_1_high,
130 g_rct_bucket_2_low, g_rct_bucket_2_high,
131 g_rct_bucket_3_low, g_rct_bucket_3_high
132 from bis_bucket_customizations bbc,
133 bis_bucket_vl bb
134 where bb.short_name = 'FII_DBI_UNAPP_RECEIPT_BUCKET'
135 and bbc.bucket_id = bb.bucket_id;
136 /*
137 g_rct_bucket_name := 'FII Unapplied Receipts';
138 g_rct_bucket_1_low := 0;
139 g_rct_bucket_1_high := 30;
140 g_rct_bucket_2_low := 31;
141 g_rct_bucket_2_high := 60;--20;
142 g_rct_bucket_3_low := 61;--21;
143 g_rct_bucket_3_high := null; --always null
144 */
145 if g_debug_flag = 'Y' then
146 FII_UTIL.put_line(g_rct_bucket_name ||' bucket definition:');
147 FII_UTIL.put_line(g_rct_bucket_1_low||'-'||g_rct_bucket_1_high||', '||
148 g_rct_bucket_2_low||'-'||g_rct_bucket_2_high||', '||
149 g_rct_bucket_3_low||'-'||g_rct_bucket_3_high);
150 end if;
151 /*
152 dbms_output.put_line(g_rct_bucket_name ||' bucket definition:');
153 dbms_output.put_line(g_rct_bucket_1_low||'-'||g_rct_bucket_1_high||', '||
154 g_rct_bucket_2_low||'-'||g_rct_bucket_2_high||', '||
155 g_rct_bucket_3_low||'-'||g_rct_bucket_3_high);
156 */
157 if g_debug_flag = 'Y' then
158 FII_UTIL.put_line('Validating restrictions on '||g_rct_bucket_name||' bucket definition');
159 end if;
160
161 IF (g_rct_bucket_1_low is null
162 or g_rct_bucket_1_low <> 0
163 or (g_rct_bucket_2_low is not null and g_rct_bucket_2_low <> g_rct_bucket_1_high+1 )
164 or (g_rct_bucket_3_low is not null and g_rct_bucket_3_low <> g_rct_bucket_2_high+1 )
165 or (g_rct_bucket_2_low is null and g_rct_bucket_1_high is not null)
166 or (g_rct_bucket_3_low is null and g_rct_bucket_2_high is not null)
167 or g_rct_bucket_3_high is not null
168 or (g_rct_bucket_1_high is null and (g_rct_bucket_2_low is not null or g_rct_bucket_2_high is not null
169 or g_rct_bucket_3_low is not null)))
170 THEN
171 g_retcode := -1;
172 l_error_bucket_name := g_rct_bucket_name;
173 l_error_bucket_start := 0;
174 l_error_bucket_ranges := g_rct_bucket_1_low||'-'||g_rct_bucket_1_high||', '||
175 g_rct_bucket_2_low||'-'||g_rct_bucket_2_high||', '||
176 g_rct_bucket_3_low||'-'||g_rct_bucket_3_high;
177 fnd_message.set_name('FII','FII_INVALID_BUCKET_DEF');
178 fnd_message.set_token('BUCKET', g_rct_bucket_name, FALSE);
179 fnd_message.set_token('RANGES', l_error_bucket_ranges, FALSE);
180 fnd_message.set_token('START', l_error_bucket_start, FALSE);
181 g_errbuf := fnd_message.get;
182 RAISE G_INVALID_BUCKET_DEF;
183 END IF;
184
185 ------------------------------------------------
186 --Current receivables bucket
187 ------------------------------------------------
188 g_state := 'Getting current receivables aging bucket ranges';
189 if g_debug_flag = 'Y' then
190 FII_UTIL.put_line(g_state);
191 end if;
192
193 select bb.name,
194 bbc.range1_low, bbc.range1_high-1,
195 bbc.range2_low, bbc.range2_high-1,
196 bbc.range3_low, bbc.range3_high-1
197 into g_current_bucket_name,
198 g_current_bucket_1_low, g_current_bucket_1_high,
199 g_current_bucket_2_low, g_current_bucket_2_high,
200 g_current_bucket_3_low, g_current_bucket_3_high
201 from bis_bucket_customizations bbc,
202 bis_bucket_vl bb
203 where bb.short_name = 'FII_DBI_CURRENT_REC_BUCKET'
204 and bbc.bucket_id = bb.bucket_id;
205 /*
206 g_current_bucket_name := 'FII Current Receivables';
207 g_current_bucket_1_low := 0;
208 g_current_bucket_1_high := 30;
209 g_current_bucket_2_low := 31;
210 g_current_bucket_2_high := null;--61;
211 g_current_bucket_3_low := null;--61;
212 g_current_bucket_3_high := null; --always null
213 */
214
215 if g_debug_flag = 'Y' then
216 FII_UTIL.put_line('FII Current Receivables bucket definition:');
217 FII_UTIL.put_line(g_current_bucket_1_low||'-'||g_current_bucket_1_high||', '||
218 g_current_bucket_2_low||'-'||g_current_bucket_2_high||', '||
219 g_current_bucket_3_low||'-'||g_current_bucket_3_high);
220 end if;
221 /*
222 dbms_output.put_line('FII Current Receivables bucket definition:');
223 dbms_output.put_line(g_current_bucket_1_low||'-'||g_current_bucket_1_high||', '||
224 g_current_bucket_2_low||'-'||g_current_bucket_2_high||', '||
225 g_current_bucket_3_low||'-'||g_current_bucket_3_high);
226 */
227 if g_debug_flag = 'Y' then
228 FII_UTIL.put_line('Validating restrictions on '||g_current_bucket_name||' bucket definition');
229 end if;
230
231 IF (g_current_bucket_1_low is null
232 or g_current_bucket_1_low <> 0
233 or (g_current_bucket_2_low is not null and g_current_bucket_2_low <> g_current_bucket_1_high+1 )
234 or (g_current_bucket_3_low is not null and g_current_bucket_3_low <> g_current_bucket_2_high+1 )
235 or (g_current_bucket_2_low is null and g_current_bucket_1_high is not null)
236 or (g_current_bucket_3_low is null and g_current_bucket_2_high is not null)
237 or g_current_bucket_3_high is not null
238 or (g_current_bucket_1_high is null and (g_current_bucket_2_low is not null or g_current_bucket_2_high is not null
239 or g_current_bucket_3_low is not null)))
240
241 THEN
242 g_retcode := -1;
243 l_error_bucket_name := g_current_bucket_name;
244 l_error_bucket_ranges := g_current_bucket_1_low||'-'||g_current_bucket_1_high||', '||
245 g_current_bucket_2_low||'-'||g_current_bucket_2_high||', '||
246 g_current_bucket_3_low||'-'||g_current_bucket_3_high;
247 l_error_bucket_start := 0;
248 fnd_message.set_name('FII','FII_INVALID_BUCKET_DEF');
249 fnd_message.set_token('BUCKET', g_current_bucket_name, FALSE);
250 fnd_message.set_token('RANGES', l_error_bucket_ranges, FALSE);
251 fnd_message.set_token('START', l_error_bucket_start, FALSE);
252 g_errbuf := fnd_message.get;
253 RAISE G_INVALID_BUCKET_DEF;
254 END IF;
255
256 ------------------------------------------------
257 --Past Due receivables bucket
258 ------------------------------------------------
259 g_state := 'Getting past due receivables aging bucket ranges';
260 if g_debug_flag = 'Y' then
261 FII_UTIL.put_line(g_state);
262 end if;
263
264 select bb.name,
265 bbc.range1_low, bbc.range1_high-1,
266 bbc.range2_low, bbc.range2_high-1,
267 bbc.range3_low, bbc.range3_high-1,
268 bbc.range4_low, bbc.range4_high-1,
269 bbc.range5_low, bbc.range5_high-1,
270 bbc.range6_low, bbc.range6_high-1,
271 bbc.range7_low, bbc.range7_high-1
272 into g_past_due_bucket_name,
273 g_past_due_bucket_1_low, g_past_due_bucket_1_high,
274 g_past_due_bucket_2_low, g_past_due_bucket_2_high,
275 g_past_due_bucket_3_low, g_past_due_bucket_3_high,
276 g_past_due_bucket_4_low, g_past_due_bucket_4_high,
277 g_past_due_bucket_5_low, g_past_due_bucket_5_high,
278 g_past_due_bucket_6_low, g_past_due_bucket_6_high,
279 g_past_due_bucket_7_low, g_past_due_bucket_7_high
280 from bis_bucket_customizations bbc,
281 bis_bucket_vl bb
282 where bb.short_name = 'FII_DBI_PAST_DUE_REC_BUCKET'
283 and bbc.bucket_id = bb.bucket_id;
284 /*
285 g_past_due_bucket_name := 'FII Past Due Receivables';
286 g_past_due_bucket_1_low := 1;
287 g_past_due_bucket_1_high := null;--30;
288 g_past_due_bucket_2_low := null;--31;
289 g_past_due_bucket_2_high := null;--60;
290 g_past_due_bucket_3_low := null;--61;
291 g_past_due_bucket_3_high := null;--90;
292 g_past_due_bucket_4_low := null;--91;
293 g_past_due_bucket_4_high := null;--120;
294 g_past_due_bucket_5_low := null;--121;
295 g_past_due_bucket_5_high := null;--150;
296 g_past_due_bucket_6_low := null;--151;
297 g_past_due_bucket_6_high := null;--180;
298 g_past_due_bucket_7_low := null;--181;
299 g_past_due_bucket_7_high := null;--
300 */
301 if g_debug_flag = 'Y' then
302 FII_UTIL.put_line('FII Past Due Receivables bucket definition:');
303 FII_UTIL.put_line(g_past_due_bucket_1_low||'-'||g_past_due_bucket_1_high||', '||
304 g_past_due_bucket_2_low||'-'||g_past_due_bucket_2_high||', '||
305 g_past_due_bucket_3_low||'-'||g_past_due_bucket_3_high||', '||
306 g_past_due_bucket_4_low||'-'||g_past_due_bucket_4_high||', '||
307 g_past_due_bucket_5_low||'-'||g_past_due_bucket_5_high||', '||
308 g_past_due_bucket_6_low||'-'||g_past_due_bucket_6_high||', '||
309 g_past_due_bucket_7_low||'-'||g_past_due_bucket_7_high);
310 end if;
311 /*
312 dbms_output.put_line('FII Past Due Receivables bucket definition:');
313 dbms_output.put_line(g_past_due_bucket_1_low||'-'||g_past_due_bucket_1_high||', '||
314 g_past_due_bucket_2_low||'-'||g_past_due_bucket_2_high||', '||
315 g_past_due_bucket_3_low||'-'||g_past_due_bucket_3_high||', '||
316 g_past_due_bucket_4_low||'-'||g_past_due_bucket_4_high||', '||
317 g_past_due_bucket_5_low||'-'||g_past_due_bucket_5_high||', '||
318 g_past_due_bucket_6_low||'-'||g_past_due_bucket_6_high||', '||
319 g_past_due_bucket_7_low||'-'||g_past_due_bucket_7_high);
320 */
321 if g_debug_flag = 'Y' then
322 FII_UTIL.put_line('Validating restrictions on '||g_past_due_bucket_name||' bucket definition');
323 end if;
324
325 IF (g_past_due_bucket_1_low is null
326 or g_past_due_bucket_1_low <> 1
327 or (g_past_due_bucket_2_low is not null and g_past_due_bucket_2_low <> g_past_due_bucket_1_high+1)
328 or (g_past_due_bucket_3_low is not null and g_past_due_bucket_3_low <> g_past_due_bucket_2_high+1)
329 or (g_past_due_bucket_4_low is not null and g_past_due_bucket_4_low <> g_past_due_bucket_3_high+1)
330 or (g_past_due_bucket_5_low is not null and g_past_due_bucket_5_low <> g_past_due_bucket_4_high+1)
331 or (g_past_due_bucket_6_low is not null and g_past_due_bucket_6_low <> g_past_due_bucket_5_high+1)
332 or (g_past_due_bucket_7_low is not null and g_past_due_bucket_7_low <> g_past_due_bucket_6_high+1)
333 or (g_past_due_bucket_2_low is null and g_past_due_bucket_1_high is not null)
334 or (g_past_due_bucket_3_low is null and g_past_due_bucket_2_high is not null)
335 or (g_past_due_bucket_4_low is null and g_past_due_bucket_3_high is not null)
336 or (g_past_due_bucket_5_low is null and g_past_due_bucket_4_high is not null)
337 or (g_past_due_bucket_6_low is null and g_past_due_bucket_5_high is not null)
338 or (g_past_due_bucket_7_low is null and g_past_due_bucket_6_high is not null)
339 or g_past_due_bucket_7_high is not null
340 or (g_past_due_bucket_1_high is null and (g_past_due_bucket_2_low is not null or g_past_due_bucket_2_high is not null
341 or g_past_due_bucket_3_low is not null or g_past_due_bucket_3_high is not null
342 or g_past_due_bucket_4_low is not null or g_past_due_bucket_4_high is not null
343 or g_past_due_bucket_5_low is not null or g_past_due_bucket_5_high is not null
344 or g_past_due_bucket_6_low is not null or g_past_due_bucket_6_high is not null
345 or g_past_due_bucket_7_low is not null))
346 or (g_past_due_bucket_2_high is null and (g_past_due_bucket_3_low is not null or g_past_due_bucket_3_high is not null
347 or g_past_due_bucket_4_low is not null or g_past_due_bucket_4_high is not null
348 or g_past_due_bucket_5_low is not null or g_past_due_bucket_5_high is not null
349 or g_past_due_bucket_6_low is not null or g_past_due_bucket_6_high is not null
350 or g_past_due_bucket_7_low is not null))
351 or (g_past_due_bucket_3_high is null and (g_past_due_bucket_4_low is not null or g_past_due_bucket_4_high is not null
352 or g_past_due_bucket_5_low is not null or g_past_due_bucket_5_high is not null
353 or g_past_due_bucket_6_low is not null or g_past_due_bucket_6_high is not null
354 or g_past_due_bucket_7_low is not null))
355 or (g_past_due_bucket_4_high is null and (g_past_due_bucket_5_low is not null or g_past_due_bucket_5_high is not null
356 or g_past_due_bucket_6_low is not null or g_past_due_bucket_6_high is not null
357 or g_past_due_bucket_7_low is not null))
358 or (g_past_due_bucket_5_high is null and (g_past_due_bucket_6_low is not null or g_past_due_bucket_6_high is not null
359 or g_past_due_bucket_7_low is not null)))
360 THEN
361 g_retcode := -1;
362 l_error_bucket_name := g_past_due_bucket_name;
363 l_error_bucket_ranges := g_past_due_bucket_1_low||'-'||g_past_due_bucket_1_high||', '||
364 g_past_due_bucket_2_low||'-'||g_past_due_bucket_2_high||', '||
365 g_past_due_bucket_3_low||'-'||g_past_due_bucket_3_high||', '||
366 g_past_due_bucket_4_low||'-'||g_past_due_bucket_4_high||', '||
367 g_past_due_bucket_5_low||'-'||g_past_due_bucket_5_high||', '||
368 g_past_due_bucket_6_low||'-'||g_past_due_bucket_6_high||', '||
369 g_past_due_bucket_7_low||'-'||g_past_due_bucket_7_high;
370 l_error_bucket_start := 1;
371 fnd_message.set_name('FII','FII_INVALID_BUCKET_DEF');
372 fnd_message.set_token('BUCKET', g_past_due_bucket_name, FALSE);
373 fnd_message.set_token('RANGES', l_error_bucket_ranges, FALSE);
374 fnd_message.set_token('START', l_error_bucket_start, FALSE);
375 g_errbuf := fnd_message.get;
376 RAISE G_INVALID_BUCKET_DEF;
377 END IF;
378
379
380 EXCEPTION
381 WHEN G_INVALID_BUCKET_DEF THEN
382 g_retcode:= -1;
383 g_exception_msg := g_retcode || ':' || g_errbuf;
384 FII_UTIL.put_line('Error occured while ' || g_state);
385 FII_UTIL.put_line(g_exception_msg);
386 FII_UTIL.write_output(g_errbuf);
387 RAISE;
388 WHEN OTHERS THEN
389 g_retcode := -1;
390 g_errbuf := '
391 ---------------------------------
392 Error in Procedure: GET_BUCKET_RANGES
393 Message: '||sqlerrm;
394 RAISE;
395
396 END GET_BUCKET_RANGES;
397
398
399
400 -------------------------------------------------------------------
401 -- PROCEDURE Init
402 -- Purpose
403 -- This procedure initializes the global variables.
404 -------------------------------------------------------------------
405 PROCEDURE Init is
406
407 l_status VARCHAR2(30);
408 l_industry VARCHAR2(30);
409 l_global_param_list dbms_sql.varchar2_table;
410
411 BEGIN
412
413 if g_debug_flag = 'Y' then
414 FII_UTIL.put_line('g_collection_criteria = '||g_collection_criteria);
415 end if;
416
417 g_state := 'Initializing the global variables';
418
419 -- Find the schema owner
420 IF (FND_INSTALLATION.GET_APP_INFO('FII', l_status, l_industry, g_fii_schema)) THEN
421 NULL;
422 if g_debug_flag = 'Y' then
423 FII_UTIL.put_line('g_fii_schema is '||g_fii_schema);
424 end if;
425 END IF;
426
427 if g_debug_flag = 'Y' then
428 FII_UTIL.put_line('Initializing the Global Currency Precision');
429 end if;
430
431 g_primary_mau := nvl(fii_currency.get_mau_primary, 0.01 );
432 g_secondary_mau:= nvl(fii_currency.get_mau_secondary, 0.01);
433
434 if g_debug_flag = 'Y' then
435 FII_UTIL.put_line('Initializing the Global Currencies');
436 end if;
437
438 g_prim_currency := bis_common_parameters.get_currency_code;
439 g_sec_currency := bis_common_parameters.get_secondary_currency_code;
440
441 if g_debug_flag = 'Y' then
442 FII_UTIL.put_line('Initializing Global Currency Rate Types');
443 end if;
444
445 g_prim_rate_type := bis_common_parameters.get_rate_type;
446 g_sec_rate_type := bis_common_parameters.get_secondary_rate_type;
447
448 if g_debug_flag = 'Y' then
449 FII_UTIL.put_line('Initializing the Global Start Date');
450 end if;
451
452 g_global_start_date := to_date(fnd_profile.value('BIS_GLOBAL_START_DATE'),'MM/DD/YYYY');
453
454 if g_debug_flag = 'Y' then
455 FII_UTIL.put_line('g_global_start_date = '||g_global_start_date);
456 end if;
457
458 l_global_param_list(1) := 'BIS_GLOBAL_START_DATE';
459 l_global_param_list(2) := 'BIS_PRIMARY_CURRENCY_CODE';
460 l_global_param_list(3) := 'BIS_PRIMARY_RATE_TYPE';
461 IF (NOT bis_common_parameters.check_global_parameters(l_global_param_list)) THEN
462 RAISE G_MISS_GLOBAL_PARAMS;
463 END IF;
464
465 if ((g_sec_currency IS NULL and g_sec_rate_type IS NOT NULL) OR
466 (g_sec_currency IS NOT NULL and g_sec_rate_type IS NULL)) THEN
467 RAISE G_NEED_SECONDARY_INFO;
468 END IF;
469
470 g_fii_user_id := FND_GLOBAL.User_Id;
471 g_fii_login_id := FND_GLOBAL.Login_Id;
472
473 IF (g_fii_user_id IS NULL OR g_fii_login_id IS NULL) THEN
474 RAISE G_LOGIN_INFO_NOT_AVABLE;
475 END IF;
476
477 if g_debug_flag = 'Y' then
478 FII_UTIL.put_line('User ID: ' || g_fii_user_id || ' Login ID: ' || g_fii_login_id);
479 end if;
480
481 EXCEPTION
482 WHEN G_LOGIN_INFO_NOT_AVABLE THEN
483 g_retcode := -1;
484 g_errbuf := 'Can not get User ID and Login ID, program exit';
485 RAISE;
486
487 WHEN G_MISS_GLOBAL_PARAMS THEN
488 g_retcode := -1;
489 g_errbuf := fnd_message.get_string('FII', 'FII_BAD_GLOBAL_PARA');
490 RAISE;
491
492 WHEN G_NEED_SECONDARY_INFO THEN
493 g_retcode := -1;
494 g_errbuf := fnd_message.get_string('FII', 'FII_AP_SEC_MISS');
495 RAISE;
496
497 WHEN OTHERS THEN
498 g_retcode := -1;
499 g_errbuf := '
500 ---------------------------------
501 Error in Procedure: INIT
502 Message: '||sqlerrm;
503 RAISE;
504
505 END Init;
506
507
508 ------------------------------------
509 ---- PROCEDURE INSERT_RATES
510 ------------------------------------
511 PROCEDURE Insert_Rates IS
512
513 BEGIN
514
515 g_state := 'Loading data into rates table FII_AR_CURR_RATES_T';
516
517 if g_debug_flag = 'Y' then
518 fii_util.put_line(' ');
519 fii_util.put_line(g_state);
520 fii_util.start_timer;
521 fii_util.put_line('');
522 end if;
523
524 INSERT /*+ append */ INTO FII_AR_CURR_RATES_T
525 (SELECT sob.currency_code fc_code,
526 Decode(NVL(cur.minimum_accountable_unit,
527 power( 10, (-1 * cur.precision))),
528 null, 0.01,
529 0, 1,
530 NVL(cur.minimum_accountable_unit,
531 power( 10, (-1 * cur.precision)))) functional_mau,
532 conversion_date,
533 MAX(FII_CURRENCY.Get_FC_to_PGC_Rate (v.tc_code,
534 sob.currency_code, v.conversion_date)) prim_conversion_rate,
535 MAX(FII_CURRENCY.Get_FC_to_SGC_Rate (v.tc_code,
536 sob.currency_code, v.conversion_date)) sec_conversion_rate,
537 sysdate, --CREATION_DATE,
538 g_fii_user_id, --CREATED_BY,
539 sysdate, --LAST_UPDATE_DATE,
540 g_fii_user_id, --LAST_UPDATED_BY,
541 g_fii_login_id --LAST_UPDATE_LOGIN
542 FROM (--Currency rates for payment schedules and receipts
543 SELECT /*+ no_merge parallel(sch) */ DISTINCT
544 sch.invoice_currency_code tc_code,
545 sch.org_id,
546 trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) conversion_date
547 FROM AR_PAYMENT_SCHEDULES_ALL sch
548 WHERE sch.class IN ('INV','DM','CB','CM','DEP','BR','PMT')
549 AND decode(g_collection_criteria,
550 'GL', sch.gl_date,
551 sch.trx_date) >= g_global_start_date
552
553 UNION
554
555 --receipts created prior to GSD and applied after GSD
556 SELECT DISTINCT
557 sch.invoice_currency_code tc_code,
558 sch.org_id,
559 trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) conversion_date
560 FROM AR_PAYMENT_SCHEDULES_ALL sch,
561 AR_RECEIVABLE_APPLICATIONS_ALL app,
562 AR_PAYMENT_SCHEDULES_ALL trxsch
563 WHERE sch.class = 'PMT'
564 AND sch.payment_schedule_id = app.payment_schedule_id
565 AND app.applied_customer_trx_id = trxsch.customer_trx_id
566 AND app.status = 'APP'
567 AND decode(g_collection_criteria,
568 'GL', sch.gl_date,
569 sch.trx_date) < g_global_start_date
570 AND decode(g_collection_criteria,
571 'GL', trxsch.gl_date,
572 trxsch.trx_date) >= g_global_start_date
573 ) v,
574 ar_system_parameters_all par,
575 gl_sets_of_books sob,
576 fnd_currencies cur
577 WHERE v.org_id = par.org_id
578 AND par.set_of_books_id = sob.set_of_books_id
579 AND cur.currency_code = sob.currency_code
580 GROUP BY sob.currency_code,
581 cur.minimum_accountable_unit,
582 cur.precision,
583 conversion_date);
584
585
586 if g_debug_flag = 'Y' then
587 fii_util.put_line('Processed '||SQL%ROWCOUNT||' rows');
588 fii_util.stop_timer;
589 fii_util.print_timer('Duration');
590 end if;
591
592 COMMIT;
593 /*
594 --------------------
595 --Temporarily added to avoid: missing currency conversion rates error
596 ---------------------
597 update FII_AR_CURR_RATES_T
598 set prim_conversion_rate=1
599 where prim_conversion_rate<=0;
600
601 update FII_AR_CURR_RATES_T
602 set sec_conversion_rate=1
603 where sec_conversion_rate<=0;
604 commit;
605 ------------------------
606 */
607
608 g_state := 'Analyzing FII_AR_CURR_RATES_T table';
609 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_CURR_RATES_T');
610
611 EXCEPTION
612 WHEN OTHERS THEN
613 g_errbuf:=sqlerrm;
614 g_retcode:= -1;
615 g_exception_msg := g_retcode || ':' || g_errbuf;
616 FII_UTIL.put_line('Error occured while ' || g_state);
617 FII_UTIL.put_line(g_exception_msg);
618 RAISE;
619
620 END Insert_Rates;
621
622
623 ----------------------------------------------------------
624 -- FUNCTION VERIFY_MISSING_RATES
625 -----------------------------------------------------------
626 FUNCTION Verify_Missing_Rates RETURN NUMBER IS
627 l_miss_rates_prim NUMBER := 0;
628 l_miss_rates_sec NUMBER := 0;
629
630 --------------------------------------------------------
631 -- Cursor declaration required to generate output file
632 -- containing rows with MISSING CONVERSION RATES
633 --------------------------------------------------------
634
635 CURSOR prim_MissingRate IS
636 SELECT DISTINCT fc_code From_Currency,
637 decode(prim_conversion_rate,-3, to_date('01/01/1999','MM/DD/YYYY'),
638 conversion_date) Trx_Date
639 FROM FII_AR_CURR_RATES_T RATES
640 WHERE RATES.Prim_Conversion_Rate < 0 ;
641
642 CURSOR sec_MissingRate IS
643 SELECT DISTINCT fc_code From_Currency,
644 decode(sec_conversion_rate,-3, to_date('01/01/1999','MM/DD/YYYY'),
645 conversion_date) Trx_Date
646 FROM FII_AR_CURR_RATES_T RATES
647 WHERE RATES.Sec_Conversion_Rate < 0 ;
648
649
650 BEGIN
651 g_state := 'Checking to see which additional rates need to be defined, if any';
652
653 if g_debug_flag = 'Y' then
654 fii_util.put_line(' ');
655 fii_util.put_line(g_state);
656 fii_util.start_timer;
657 fii_util.put_line('');
658 end if;
659
660 SELECT COUNT(*)
661 INTO l_miss_rates_prim
662 FROM FII_AR_CURR_RATES_T RATES
663 WHERE RATES.Prim_Conversion_Rate < 0;
664
665 SELECT COUNT(*)
666 INTO l_miss_rates_sec
667 FROM FII_AR_CURR_RATES_T RATES
668 WHERE RATES.Sec_Conversion_Rate < 0;
669
670
671 --------------------------------------------------------
672 -- Print out missing rates report
673 --------------------------------------------------------
674
675 IF (l_miss_rates_prim > 0 OR
676 l_miss_rates_sec > 0) THEN
677 BIS_COLLECTION_UTILITIES.writeMissingRateHeader;
678
679 FOR rate_record in prim_MissingRate
680 LOOP
681 BIS_COLLECTION_UTILITIES.writeMissingRate(
682 g_prim_rate_type,
683 rate_record.from_currency,
684 g_prim_currency,
685 rate_record.trx_date);
686
687 -- dbms_output.put_line('Prim Type: '|| g_prim_rate_type||' - From: '|| rate_record.from_currency||' - Prim: '||g_prim_currency||' - Date: '||rate_record.trx_date);
688
689 END LOOP;
690
691
692 FOR rate_record in sec_MissingRate
693 LOOP
694 BIS_COLLECTION_UTILITIES.writeMissingRate(
695 g_sec_rate_type,
696 rate_record.from_currency,
697 g_sec_currency,
698 rate_record.trx_date);
699
700 -- dbms_output.put_line('Sec Type: '|| g_sec_rate_type||' - From: '|| rate_record.from_currency||' - Sec: '||g_sec_currency||' - Date: '||rate_record.trx_date);
701
702 END LOOP;
703 RETURN -1;
704
705 ELSE
706 RETURN 1;
707 END IF; /* IF (l_miss_rates_prim > 0) */
708
709 EXCEPTION
710 WHEN OTHERS THEN
711 g_errbuf:=sqlerrm;
712 g_retcode:= -1;
713 g_exception_msg := g_retcode || ':' || g_errbuf;
714 FII_UTIL.put_line('Error occured while ' || g_state);
715 FII_UTIL.put_line(g_exception_msg);
716 RAISE;
717 END Verify_Missing_Rates;
718
719
720 ------------------------------------------------------------------
721 -- Procedure POPULATE_PAYMENT_SCHEDULES
722 -- Purpose
723 -- This procedure inserts records in FII_AR_PMT_SCHEDULES_F
724 ------------------------------------------------------------------
725 PROCEDURE POPULATE_PAYMENT_SCHEDULES IS
726
727 l_max_pmt_schedule_id NUMBER(15);
728
729 BEGIN
730
731 g_state := 'Truncating table FII_AR_PMT_SCHEDULES_F';
732 TRUNCATE_TABLE('FII_AR_PMT_SCHEDULES_F');
733
734 g_state := 'Populating FII_AR_PMT_SCHEDULES_F';
735 if g_debug_flag = 'Y' then
736 FII_UTIL.put_line(g_state);
737 FII_UTIL.start_timer;
738 FII_UTIL.put_line('');
739 end if;
740
741
742 INSERT /*+ append parallel(F) */ INTO FII_AR_PMT_SCHEDULES_F F
743 (payment_schedule_id,
744 time_id,
745 class,
746 amount_due_original_trx,
747 amount_due_original_func,
748 amount_due_original_prim,
749 amount_due_original_sec,
750 amount_due_remaining_trx,
751 amount_due_remaining_func,
752 amount_due_remaining_prim,
753 amount_due_remaining_sec,
754 trx_date,
755 gl_date,
756 filter_date,
757 due_date,
758 status,
759 customer_trx_id,
760 invoice_currency_code,
761 bill_to_customer_id,
762 bill_to_site_use_id,
763 org_id,
764 user_id,
765 cust_trx_type_id,
766 transaction_number,
767 term_id,
768 terms_sequence_number,
769 batch_source_id,
770 earned_discount_amount_trx,
771 earned_discount_amount_func,
772 earned_discount_amount_prim,
773 earned_discount_amount_sec,
774 unearned_discount_amount_trx,
775 unearned_discount_amount_func,
776 unearned_discount_amount_prim,
777 unearned_discount_amount_sec,
778 adjusted_amount_trx,
779 adjusted_amount_func,
780 adjusted_amount_prim,
781 adjusted_amount_sec,
782 disputed_amount_trx,
783 disputed_amount_func,
784 disputed_amount_prim,
785 disputed_amount_sec,
786 order_ref_number,
787 actual_date_closed ,
788 exchange_rate,
789 exchange_date,
790 previous_customer_trx_id,
791 creation_date,
792 created_by,
793 last_update_date,
794 last_updated_by,
795 last_update_login)
796 SELECT /*+ parallel(SCH) parallel(TRX) parallel(RT) parallel(SOB) */
797 sch.payment_schedule_id,
798 to_number(to_char(decode(g_collection_criteria,
799 'GL', decode(tp.signed_flag, 'Y', h.gl_date, sch.gl_date),
800 decode(tp.signed_flag, 'Y', h.trx_date, sch.trx_date)) , 'J')) time_id,
801 sch.class,
802 sch.amount_due_original amount_due_original_trx,
803 NVL(ROUND(sch.amount_due_original * nvl(sch.exchange_rate,1) /
804 rt.functional_mau) * rt.functional_mau,
805 nvl(sch.amount_due_original,0)) amount_due_original_func,
806 DECODE(sch.invoice_currency_code,
807 g_prim_currency, nvl(sch.amount_due_original,0),
808 ROUND((nvl(sch.amount_due_original,0) * nvl(sch.exchange_rate,1) *
809 rt.prim_conversion_rate) / g_primary_mau) *
810 g_primary_mau) amount_due_original_prim,
811 DECODE(sch.invoice_currency_code,
812 g_sec_currency, nvl(sch.amount_due_original,0),
813 ROUND((nvl(sch.amount_due_original,0) * nvl(sch.exchange_rate,1) *
814 rt.sec_conversion_rate) / g_secondary_mau) *
815 g_secondary_mau) amount_due_original_sec,
816 sch.amount_due_remaining amount_due_remaining_trx,
817 NVL(ROUND(sch.amount_due_remaining * nvl(sch.exchange_rate,1) /
818 rt.functional_mau) * rt.functional_mau,
819 nvl(sch.amount_due_remaining,0)) amount_due_remaining_func,
820 DECODE(sch.invoice_currency_code,
821 g_prim_currency, nvl(sch.amount_due_remaining,0),
822 ROUND((nvl(sch.amount_due_remaining,0) * nvl(sch.exchange_rate,1) *
823 rt.prim_conversion_rate) / g_primary_mau ) *
824 g_primary_mau) amount_due_remaining_prim,
825 DECODE(sch.invoice_currency_code,
826 g_sec_currency, nvl(sch.amount_due_remaining,0),
827 ROUND((nvl(sch.amount_due_remaining,0) * nvl(sch.exchange_rate,1) *
828 rt.sec_conversion_rate) / g_secondary_mau) *
829 g_secondary_mau) amount_due_remaining_sec,
830 decode(tp.signed_flag, 'Y', trunc(h.trx_date), trunc(sch.trx_date)) trx_date,
831 decode(tp.signed_flag, 'Y', trunc(h.gl_date), trunc(sch.gl_date)) gl_date,
832 decode(g_collection_criteria,
833 'GL', decode(tp.signed_flag, 'Y', h.gl_date, sch.gl_date),
834 decode(tp.signed_flag, 'Y', h.trx_date, sch.trx_date)) filter_date,
835 trunc(sch.due_date),
836 sch.status,
837 sch.customer_trx_id,
838 sch.invoice_currency_code,
839 sch.customer_id bill_to_customer_id,
840 sch.customer_site_use_id bill_to_site_use_id,
841 sch.org_id,
842 sch.created_by user_id,
843 sch.cust_trx_type_id cust_trx_type_id,
844 sch.trx_number transaction_number,
845 sch.term_id,
846 sch.terms_sequence_number,
847 trx.batch_source_id,
848 sch.discount_taken_earned earned_discount_amount_trx,
849 NVL(ROUND(sch.discount_taken_earned * nvl(sch.exchange_rate,1) /
850 rt.functional_mau) * rt.functional_mau,
851 nvl(sch.discount_taken_earned,0)) earned_discount_amount_func,
852 DECODE(sch.invoice_currency_code,
853 g_prim_currency, nvl(sch.discount_taken_earned,0),
854 ROUND((nvl(sch.discount_taken_earned,0) * nvl(sch.exchange_rate,1) *
855 rt.prim_conversion_rate) / g_primary_mau) *
856 g_primary_mau) earned_discount_amount_prim,
857 DECODE(sch.invoice_currency_code,
858 g_sec_currency, nvl(sch.discount_taken_earned,0),
859 ROUND((nvl(sch.discount_taken_earned,0) * nvl(sch.exchange_rate,1) *
860 rt.sec_conversion_rate) / g_secondary_mau) *
861 g_secondary_mau) earned_discount_amount_sec,
862 nvl(sch.discount_taken_unearned,0) unearned_discount_amount_trx,
863 NVL(ROUND(sch.discount_taken_unearned * nvl(sch.exchange_rate,1) /
864 rt.functional_mau) * rt.functional_mau,
865 nvl(sch.discount_taken_unearned,0)) unearned_discount_amount_func,
866 DECODE(sch.invoice_currency_code,
867 g_prim_currency, nvl(sch.discount_taken_unearned,0),
868 ROUND((nvl(sch.discount_taken_unearned,0) * nvl(sch.exchange_rate,1) *
869 rt.prim_conversion_rate) / g_primary_mau) *
870 g_primary_mau) unearned_discount_amount_prim,
871 DECODE(sch.invoice_currency_code,
872 g_sec_currency, nvl(sch.discount_taken_unearned,0),
873 ROUND((nvl(sch.discount_taken_unearned,0) * nvl(sch.exchange_rate,1) *
874 rt.sec_conversion_rate) / g_secondary_mau) *
875 g_secondary_mau) unearned_discount_amount_sec,
876 nvl(sch.amount_adjusted,0) adjusted_amount_trx,
877 NVL(ROUND(sch.amount_adjusted * nvl(sch.exchange_rate,1) /
878 rt.functional_mau) * rt.functional_mau,
879 nvl(sch.amount_adjusted,0)) adjusted_amount_func,
880 DECODE(sch.invoice_currency_code,
881 g_prim_currency, nvl(sch.amount_adjusted,0),
882 ROUND((nvl(sch.amount_adjusted,0) * nvl(sch.exchange_rate,1) *
883 rt.prim_conversion_rate) / g_primary_mau) *
884 g_primary_mau) adjusted_amount_prim,
885 DECODE(sch.invoice_currency_code,
886 g_sec_currency, nvl(sch.amount_adjusted,0),
887 ROUND((nvl(sch.amount_adjusted,0) * nvl(sch.exchange_rate,1) *
888 rt.sec_conversion_rate) / g_secondary_mau) *
889 g_secondary_mau) adjusted_amount_sec,
890 nvl(sch.amount_in_dispute,0) disputed_amount_trx,
891 NVL(ROUND(sch.amount_in_dispute * nvl(sch.exchange_rate,1) /
892 rt.functional_mau) * rt.functional_mau ,
893 nvl(sch.amount_in_dispute,0)) disputed_amount_func,
894 DECODE(sch.invoice_currency_code,
895 g_prim_currency, nvl(sch.amount_in_dispute,0),
896 ROUND((nvl(sch.amount_in_dispute,0) * nvl(sch.exchange_rate,1) *
897 rt.prim_conversion_rate) / g_primary_mau) *
898 g_primary_mau) disputed_amount_prim,
899 DECODE(sch.invoice_currency_code,
900 g_sec_currency, nvl(sch.amount_in_dispute,0),
901 ROUND((nvl(sch.amount_in_dispute,0) * nvl(sch.exchange_rate,1) *
902 rt.sec_conversion_rate) / g_secondary_mau) *
903 g_secondary_mau) disputed_amount_sec,
904 decode(trx.batch_source_id,
905 -1, trx.ct_reference,
906 null) order_ref_number,
907 sch.actual_date_closed,
908 nvl(sch.exchange_rate,1),
909 nvl(sch.exchange_date, sch.trx_date),
910 trx.previous_customer_trx_id,
911 sysdate, --CREATION_DATE,
912 g_fii_user_id, --CREATED_BY,
913 sysdate, --LAST_UPDATE_DATE,
914 g_fii_user_id, --LAST_UPDATED_BY,
915 g_fii_login_id --LAST_UPDATE_LOGIN
916 FROM AR_PAYMENT_SCHEDULES_ALL sch,
917 RA_CUSTOMER_TRX_ALL trx,
918 FII_AR_CURR_RATES_T rt,
919 AR_SYSTEM_PARAMETERS_ALL par,
920 GL_SETS_OF_BOOKS sob,
921 AR_TRANSACTION_HISTORY_ALL h,
922 RA_CUST_TRX_TYPES_ALL tp
923 WHERE sch.class IN ('INV','DM','CB','CM','DEP','BR', 'PMT')
924 AND decode(g_collection_criteria,
925 'GL', sch.gl_date,
926 sch.trx_date) >= g_global_start_date
927 AND sch.customer_trx_id = trx.customer_trx_id (+)
928 AND sch.customer_trx_id = h.customer_trx_id (+)
929 AND sch.cust_trx_type_id = tp.cust_trx_type_id (+)
930 AND sch.org_id = tp.org_id (+)
931 AND (sch.class <> 'BR'
932 OR (sch.class = 'BR' and tp.signed_flag = 'N' and h.current_record_flag = 'Y')
933 OR (sch.class = 'BR' and tp.signed_flag = 'Y' and h.event = 'ACCEPTED'))
934
935 AND sch.org_id = par.org_id
936 AND par.set_of_books_id = sob.set_of_books_id
937 AND sob.currency_code = rt.fc_code
938 AND trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) = rt.conversion_date
939
940 UNION ALL
941
942 --PMT records which are created prior to GSD and applied after GSD
943 SELECT DISTINCT
944 sch.payment_schedule_id,
945 to_number(to_char(decode(g_collection_criteria,
946 'GL', sch.gl_date,
947 sch.trx_date), 'J')) time_id,
948 sch.class,
949 sch.amount_due_original amount_due_original_trx,
950 NVL(ROUND(sch.amount_due_original * nvl(sch.exchange_rate,1) /
951 rt.functional_mau) * rt.functional_mau,
952 nvl(sch.amount_due_original,0)) amount_due_original_func,
953 DECODE(sch.invoice_currency_code,
954 g_prim_currency, nvl(sch.amount_due_original,0),
955 ROUND((nvl(sch.amount_due_original,0) * nvl(sch.exchange_rate,1) *
956 rt.prim_conversion_rate) / g_primary_mau) *
957 g_primary_mau) amount_due_original_prim,
958 DECODE(sch.invoice_currency_code,
959 g_sec_currency, nvl(sch.amount_due_original,0),
960 ROUND((nvl(sch.amount_due_original,0) * nvl(sch.exchange_rate,1) *
961 rt.sec_conversion_rate) / g_secondary_mau) *
962 g_secondary_mau) amount_due_original_sec,
963 sch.amount_due_remaining amount_due_remaining_trx,
964 NVL(ROUND(sch.amount_due_remaining * nvl(sch.exchange_rate,1) /
965 rt.functional_mau) * rt.functional_mau,
966 nvl(sch.amount_due_remaining,0)) amount_due_remaining_func,
967 DECODE(sch.invoice_currency_code,
968 g_prim_currency, nvl(sch.amount_due_remaining,0),
969 ROUND((nvl(sch.amount_due_remaining,0) * nvl(sch.exchange_rate,1) *
970 rt.prim_conversion_rate) / g_primary_mau ) *
971 g_primary_mau) amount_due_remaining_prim,
972 DECODE(sch.invoice_currency_code,
973 g_sec_currency, nvl(sch.amount_due_remaining,0),
974 ROUND((nvl(sch.amount_due_remaining,0) * nvl(sch.exchange_rate,1) *
975 rt.sec_conversion_rate) / g_secondary_mau) *
976 g_secondary_mau) amount_due_remaining_sec,
977 sch.trx_date,
978 sch.gl_date,
979 decode(g_collection_criteria,'GL',sch.gl_date,sch.trx_date) filter_date,
980 sch.due_date,
981 sch.status,
982 sch.customer_trx_id,
983 sch.invoice_currency_code,
984 sch.customer_id bill_to_customer_id,
985 sch.customer_site_use_id bill_to_site_use_id,
986 sch.org_id,
987 sch.created_by user_id,
988 sch.cust_trx_type_id cust_trx_type_id,
989 sch.trx_number transaction_number,
990 sch.term_id,
991 sch.terms_sequence_number,
992 null batch_source_id,
993 sch.discount_taken_earned earned_discount_amount_trx,
994 NVL(ROUND(sch.discount_taken_earned * nvl(sch.exchange_rate,1) /
995 rt.functional_mau) * rt.functional_mau,
996 nvl(sch.discount_taken_earned,0)) earned_discount_amount_func,
997 DECODE(sch.invoice_currency_code,
998 g_prim_currency, nvl(sch.discount_taken_earned,0),
999 ROUND((nvl(sch.discount_taken_earned,0) * nvl(sch.exchange_rate,1) *
1000 rt.prim_conversion_rate) / g_primary_mau) *
1001 g_primary_mau) earned_discount_amount_prim,
1002 DECODE(sch.invoice_currency_code,
1003 g_sec_currency, nvl(sch.discount_taken_earned,0),
1004 ROUND((nvl(sch.discount_taken_earned,0) * nvl(sch.exchange_rate,1) *
1005 rt.sec_conversion_rate) / g_secondary_mau) *
1006 g_secondary_mau) earned_discount_amount_sec,
1007 nvl(sch.discount_taken_unearned,0) unearned_discount_amount_trx,
1008 NVL(ROUND(sch.discount_taken_unearned * nvl(sch.exchange_rate,1) /
1009 rt.functional_mau) * rt.functional_mau,
1010 nvl(sch.discount_taken_unearned,0)) unearned_discount_amount_func,
1011 DECODE(sch.invoice_currency_code,
1012 g_prim_currency, nvl(sch.discount_taken_unearned,0),
1013 ROUND((nvl(sch.discount_taken_unearned,0) * nvl(sch.exchange_rate,1) *
1014 rt.prim_conversion_rate) / g_primary_mau) *
1015 g_primary_mau) unearned_discount_amount_prim,
1016 DECODE(sch.invoice_currency_code,
1017 g_sec_currency, nvl(sch.discount_taken_unearned,0),
1018 ROUND((nvl(sch.discount_taken_unearned,0) * nvl(sch.exchange_rate,1) *
1019 rt.sec_conversion_rate) / g_secondary_mau) *
1020 g_secondary_mau) unearned_discount_amount_sec,
1021 nvl(sch.amount_adjusted,0) adjusted_amount_trx,
1022 NVL(ROUND(sch.amount_adjusted * nvl(sch.exchange_rate,1) /
1023 rt.functional_mau) * rt.functional_mau,
1024 nvl(sch.amount_adjusted,0)) adjusted_amount_func,
1025 DECODE(sch.invoice_currency_code,
1026 g_prim_currency, nvl(sch.amount_adjusted,0),
1027 ROUND((nvl(sch.amount_adjusted,0) * nvl(sch.exchange_rate,1) *
1028 rt.prim_conversion_rate) / g_primary_mau) *
1029 g_primary_mau) adjusted_amount_prim,
1030 DECODE(sch.invoice_currency_code,
1031 g_sec_currency, nvl(sch.amount_adjusted,0),
1032 ROUND((nvl(sch.amount_adjusted,0) * nvl(sch.exchange_rate,1) *
1033 rt.sec_conversion_rate) / g_secondary_mau) *
1034 g_secondary_mau) adjusted_amount_sec,
1035 nvl(sch.amount_in_dispute,0) disputed_amount_trx,
1036 NVL(ROUND(sch.amount_in_dispute * nvl(sch.exchange_rate,1) /
1037 rt.functional_mau) * rt.functional_mau ,
1038 nvl(sch.amount_in_dispute,0)) disputed_amount_func,
1039 DECODE(sch.invoice_currency_code,
1040 g_prim_currency, nvl(sch.amount_in_dispute,0),
1041 ROUND((nvl(sch.amount_in_dispute,0) * nvl(sch.exchange_rate,1) *
1042 rt.prim_conversion_rate) / g_primary_mau) *
1043 g_primary_mau) disputed_amount_prim,
1044 DECODE(sch.invoice_currency_code,
1045 g_sec_currency, nvl(sch.amount_in_dispute,0),
1046 ROUND((nvl(sch.amount_in_dispute,0) * nvl(sch.exchange_rate,1) *
1047 rt.sec_conversion_rate) / g_secondary_mau) *
1048 g_secondary_mau) disputed_amount_sec,
1049 null order_ref_number,
1050 sch.actual_date_closed,
1051 nvl(sch.exchange_rate,1),
1052 nvl(sch.exchange_date, sch.trx_date),
1053 null previous_customer_trx_id,
1054 sysdate, --CREATION_DATE,
1055 g_fii_user_id, --CREATED_BY,
1056 sysdate, --LAST_UPDATE_DATE,
1057 g_fii_user_id, --LAST_UPDATED_BY,
1058 g_fii_login_id --LAST_UPDATE_LOGIN
1059 FROM AR_PAYMENT_SCHEDULES_ALL sch,
1060 AR_RECEIVABLE_APPLICATIONS_ALL app,
1061 AR_PAYMENT_SCHEDULES_ALL trxsch,
1062 FII_AR_CURR_RATES_T rt,
1063 AR_SYSTEM_PARAMETERS_ALL par,
1064 GL_SETS_OF_BOOKS sob
1065 WHERE sch.class = 'PMT'
1066 AND sch.payment_schedule_id = app.payment_schedule_id
1067 AND app.applied_payment_schedule_id = trxsch.payment_schedule_id
1068 AND app.status = 'APP'
1069 AND decode(g_collection_criteria,
1070 'GL', sch.gl_date,
1071 sch.trx_date) < g_global_start_date
1072 AND decode(g_collection_criteria,
1073 'GL', trxsch.gl_date,
1074 trxsch.trx_date) >= g_global_start_date
1075
1076 AND sch.org_id = par.org_id
1077 AND par.set_of_books_id = sob.set_of_books_id
1078 AND sob.currency_code = rt.fc_code
1079 AND trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) = rt.conversion_date;
1080
1081
1082 if g_debug_flag = 'Y' then
1083 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_PMT_SCHEDULES_F');
1084 FII_UTIL.stop_timer;
1085 FII_UTIL.print_timer('Duration');
1086 FII_UTIL.put_line('');
1087 end if;
1088
1089 g_state := 'Analyzing FII_AR_PMT_SCHEDULES_F table';
1090 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_PMT_SCHEDULES_F');
1091
1092 g_state := 'Logging maximum payment schedule id into fii_change_log table';
1093 select nvl(max(payment_schedule_id), -999)
1094 into l_max_pmt_schedule_id
1095 from fii_ar_pmt_schedules_f;
1096
1097 INSERT INTO fii_change_log
1098 (log_item, item_value, CREATION_DATE, CREATED_BY,
1099 LAST_UPDATE_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN)
1100 (SELECT 'AR_MAX_PAYMENT_SCHEDULE_ID',
1101 l_max_pmt_schedule_id,
1102 sysdate, --CREATION_DATE,
1103 g_fii_user_id, --CREATED_BY,
1104 sysdate, --LAST_UPDATE_DATE,
1105 g_fii_user_id, --LAST_UPDATED_BY,
1106 g_fii_login_id --LAST_UPDATE_LOGIN
1107 FROM DUAL
1108 WHERE NOT EXISTS
1109 (select 1 from fii_change_log
1110 where log_item = 'AR_MAX_PAYMENT_SCHEDULE_ID'));
1111
1112 IF (SQL%ROWCOUNT = 0) THEN
1113 UPDATE fii_change_log
1114 SET item_value = l_max_pmt_schedule_id,
1115 last_update_date = g_sysdate_time,
1116 last_update_login = g_fii_login_id,
1117 last_updated_by = g_fii_user_id
1118 WHERE log_item = 'AR_MAX_PAYMENT_SCHEDULE_ID';
1119 END IF;
1120
1121 EXCEPTION
1122 WHEN OTHERS THEN
1123 g_errbuf:=sqlerrm;
1124 g_retcode:= -1;
1125 g_exception_msg := g_retcode || ':' || g_errbuf;
1126 FII_UTIL.put_line('Error occured while ' || g_state);
1127 FII_UTIL.put_line(g_exception_msg);
1128 RAISE;
1129
1130 END POPULATE_PAYMENT_SCHEDULES;
1131
1132
1133 ------------------------------------------------------------------
1134 -- Procedure POPULATE_DISPUTES
1135 -- Purpose
1136 -- This procedure inserts records in FII_AR_DISPUTE_HISTORY_F
1137 ------------------------------------------------------------------
1138 PROCEDURE POPULATE_DISPUTES IS
1139 BEGIN
1140
1141 g_state := 'Truncating table FII_AR_DISPUTE_HISTORY_F';
1142 TRUNCATE_TABLE('FII_AR_DISPUTE_HISTORY_F');
1143
1144 g_state := 'Populating FII_AR_DISPUTE_HISTORY_F';
1145 if g_debug_flag = 'Y' then
1146 FII_UTIL.put_line(g_state);
1147 FII_UTIL.start_timer;
1148 FII_UTIL.put_line('');
1149 end if;
1150
1151 INSERT INTO FII_AR_DISPUTE_HISTORY_F
1152 (dispute_history_id,
1153 time_id,
1154 dispute_amount_trx,
1155 dispute_amount_func,
1156 dispute_amount_prim,
1157 dispute_amount_sec,
1158 start_date,
1159 end_date,
1160 org_id,
1161 bill_to_customer_id,
1162 bill_to_site_use_id,
1163 payment_schedule_id,
1164 customer_trx_id,
1165 due_date,
1166 actual_date_closed,
1167 creation_date,
1168 created_by,
1169 last_update_date,
1170 last_updated_by,
1171 last_update_login)
1172 SELECT /*+ parallel(DIS) parallel(SCH) parallel(RT) parallel(SOB) */
1173 dis.dispute_history_id,
1174 to_number(to_char(dis.start_date, 'J')), --time_id,
1175 dis.dispute_amount, --dis.dispute_amount_trx
1176 NVL(ROUND(dis.dispute_amount * sch.exchange_rate / rt.functional_mau)
1177 * rt.functional_mau, nvl(dis.dispute_amount,0)), --dispute_amount_func
1178 DECODE(sch.invoice_currency_code,
1179 g_prim_currency, nvl(dis.dispute_amount,0),
1180 ROUND((nvl(dis.dispute_amount,0) * sch.exchange_rate *
1181 rt.prim_conversion_rate) / g_primary_mau) *
1182 g_primary_mau), --dispute_amount_prim
1183 DECODE(sch.invoice_currency_code,
1184 g_sec_currency, nvl(dis.dispute_amount,0),
1185 ROUND((nvl(dis.dispute_amount,0) * sch.exchange_rate *
1186 rt.sec_conversion_rate) / g_secondary_mau) *
1187 g_secondary_mau), --dispute_amount_sec
1188 dis.start_date,
1189 dis.end_date,
1190 sch.org_id,
1191 sch.bill_to_customer_id,
1192 sch.bill_to_site_use_id,
1193 dis.payment_schedule_id,
1194 sch.customer_trx_id,
1195 sch.due_date,
1196 sch.actual_date_closed,
1197 sysdate, --CREATION_DATE,
1198 g_fii_user_id, --CREATED_BY,
1199 sysdate, --LAST_UPDATE_DATE,
1200 g_fii_user_id, --LAST_UPDATED_BY,
1201 g_fii_login_id --LAST_UPDATE_LOGIN
1202 FROM AR_DISPUTE_HISTORY dis,
1203 FII_AR_PMT_SCHEDULES_F sch,
1204 FII_AR_CURR_RATES_T rt,
1205 AR_SYSTEM_PARAMETERS_ALL par,
1206 GL_SETS_OF_BOOKS sob
1207 WHERE dis.payment_schedule_id = sch.payment_schedule_id
1208 AND sch.class <> 'PMT'
1209 AND dis.start_date <= sch.actual_date_closed
1210 AND dis.start_date >= g_global_start_date
1211 AND dis.last_update_date <= g_sysdate_time --To avoid duplication in incremental
1212
1213 AND sch.org_id = par.org_id
1214 AND par.set_of_books_id = sob.set_of_books_id
1215 AND sob.currency_code = rt.fc_code
1216 AND trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) = rt.conversion_date;
1217
1218 if g_debug_flag = 'Y' then
1219 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_DISPUTE_HISTORY_F');
1220 FII_UTIL.stop_timer;
1221 FII_UTIL.print_timer('Duration');
1222 FII_UTIL.put_line('');
1223 end if;
1224
1225 g_state := 'Analyzing FII_AR_DISPUTE_HISTORY_F table';
1226 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_DISPUTE_HISTORY_F');
1227
1228 EXCEPTION
1229 WHEN OTHERS THEN
1230 g_errbuf:=sqlerrm;
1231 g_retcode:= -1;
1232 g_exception_msg := g_retcode || ':' || g_errbuf;
1233 FII_UTIL.put_line('Error occured while ' || g_state);
1234 FII_UTIL.put_line(g_exception_msg);
1235 RAISE;
1236
1237 END POPULATE_DISPUTES;
1238
1239
1240 ------------------------------------------------------------------
1241 -- Procedure POPULATE_TRANSACTIONS
1242 -- Purpose
1243 -- This procedure inserts records in FII_AR_TRANSACTIONS_F
1244 ------------------------------------------------------------------
1245 PROCEDURE POPULATE_TRANSACTIONS IS
1246 BEGIN
1247
1248 g_state := 'Truncating table MLOG$_FII_AR_TRANSACTIONS_F';
1249 TRUNCATE_TABLE('MLOG$_FII_AR_TRANSACTIONS_F');
1250 g_state := 'Truncating table FII_AR_TRANSACTIONS_F';
1251 TRUNCATE_TABLE('FII_AR_TRANSACTIONS_F');
1252
1253 g_state := 'Populating FII_AR_TRANSACTIONS_F';
1254 if g_debug_flag = 'Y' then
1255 FII_UTIL.put_line(g_state);
1256 FII_UTIL.start_timer;
1257 FII_UTIL.put_line('');
1258 end if;
1259
1260 INSERT /*+ append parallel(F) */ INTO FII_AR_TRANSACTIONS_F F
1261 (customer_trx_id,
1262 org_id,
1263 time_id,
1264 trx_date,
1265 gl_date,
1266 class,
1267 amount_due_original_trx,
1268 amount_due_original_func,
1269 amount_due_original_prim,
1270 amount_due_original_sec,
1271 bill_to_customer_id,
1272 bill_to_site_use_id,
1273 transaction_number,
1274 cust_trx_type_id,
1275 term_id,
1276 batch_source_id,
1277 filter_date,
1278 order_ref_number,
1279 invoice_currency_code,
1280 exchange_rate,
1281 exchange_date,
1282 initial_customer_trx_id,
1283 previous_customer_trx_id,
1284 user_id,
1285 ar_creation_date,
1286 INV_ba_amount_func,
1287 INV_ba_amount_prim,
1288 INV_ba_amount_sec,
1289 INV_ba_count,
1290 DM_ba_amount_func,
1291 DM_ba_amount_prim,
1292 DM_ba_amount_sec,
1293 DM_ba_count,
1294 CB_ba_amount_func,
1295 CB_ba_amount_prim,
1296 CB_ba_amount_sec,
1297 CB_ba_count,
1298 BR_ba_amount_func,
1299 BR_ba_amount_prim,
1300 BR_ba_amount_sec,
1301 BR_ba_count,
1302 DEP_ba_amount_func,
1303 DEP_ba_amount_prim,
1304 DEP_ba_amount_sec,
1305 DEP_ba_count,
1306 CM_ba_amount_func,
1307 CM_ba_amount_prim,
1308 CM_ba_amount_sec,
1309 CM_ba_count,
1310 creation_date,
1311 created_by,
1312 last_update_date,
1313 last_updated_by,
1314 last_update_login)
1315 SELECT /*+ parallel(TRX) parallel(SCH) */
1316 trx.customer_trx_id,
1317 trx.org_id,
1318 to_number(to_char(decode(g_collection_criteria,
1319 'GL', sch.gl_date,
1320 trx.trx_date), 'J')), --time_id
1321 trunc(trx.trx_date),
1322 sch.gl_date,
1323 sch.class, --class
1324 sum(nvl(sch.amount_due_original_trx,0)),
1325 sum(nvl(sch.amount_due_original_func,0)),
1326 sum(nvl(sch.amount_due_original_prim,0)),
1327 sum(nvl(sch.amount_due_original_sec,0)),
1328 NVL(trx.bill_to_customer_id, trx.drawee_id), -- drawee_id used for BR
1329 NVL(trx.bill_to_site_use_id,
1330 trx.drawee_site_use_id), --drawee_site_use_id used for BR
1331 trx.trx_number,
1332 trx.cust_trx_type_id,
1333 trx.term_id,
1334 trx.batch_source_id,
1335 decode(g_collection_criteria,'GL', sch.gl_date, trx.trx_date), --filter_date
1336 decode(trx.batch_source_id,
1337 -1, trx.ct_reference, --order_ref_number
1338 null), -- -1 indicates that the trx is a manual order entry
1339 trx.invoice_currency_code,
1340 nvl(trx.exchange_rate,1), --exchange_rate
1341 nvl(trx.exchange_date,trx.trx_date), --exchange_date
1342 trx.initial_customer_trx_id,
1343 trx.previous_customer_trx_id,
1344 trx.created_by, --user_id
1345 trx.creation_date, --ar_creation_date
1346 decode(sch.class,'INV',sum(nvl(sch.amount_due_original_func,0)),0), --INV_ba_amount_func
1347 decode(sch.class,'INV',sum(nvl(sch.amount_due_original_prim,0)),0), --INV_ba_amount_prim
1348 decode(sch.class,'INV',sum(nvl(sch.amount_due_original_sec,0)),0), --INV_ba_amount_sec
1349 decode(sch.class,'INV',1,0), --INV_ba_count
1350 decode(sch.class,'DM',sum(nvl(sch.amount_due_original_func,0)),0), --DM_ba_amount_func
1351 decode(sch.class,'DM',sum(nvl(sch.amount_due_original_prim,0)),0), --DM_ba_amount_prim
1352 decode(sch.class,'DM',sum(nvl(sch.amount_due_original_sec,0)),0), --DM_ba_amount_sec
1353 decode(sch.class,'DM',1,0), --DM_ba_count
1354 decode(sch.class,'CB',sum(nvl(sch.amount_due_original_func,0)),0), --CB_ba_amount_func
1355 decode(sch.class,'CB',sum(nvl(sch.amount_due_original_prim,0)),0), --CB_ba_amount_prim
1356 decode(sch.class,'CB',sum(nvl(sch.amount_due_original_sec,0)),0), --CB_ba_amount_sec
1357 decode(sch.class,'CB',1,0), --CB_ba_count
1358 decode(sch.class,'BR',sum(nvl(sch.amount_due_original_func,0)),0), --BR_ba_amount_func
1359 decode(sch.class,'BR',sum(nvl(sch.amount_due_original_prim,0)),0), --BR_ba_amount_prim
1360 decode(sch.class,'BR',sum(nvl(sch.amount_due_original_sec,0)),0), --BR_ba_amount_sec
1361 decode(sch.class,'BR',1,0), --BR_ba_count
1362 decode(sch.class,'DEP',sum(nvl(sch.amount_due_original_func,0)),0), --DEP_ba_amount_func
1363 decode(sch.class,'DEP',sum(nvl(sch.amount_due_original_prim,0)),0), --DEP_ba_amount_prim
1364 decode(sch.class,'DEP',sum(nvl(sch.amount_due_original_sec,0)),0), --DEP_ba_amount_sec
1365 decode(sch.class,'DEP',1,0), --DEP_ba_count
1366 decode(sch.class,'CM',sum(nvl(sch.amount_due_original_func,0)),0), --CM_ba_amount_func
1367 decode(sch.class,'CM',sum(nvl(sch.amount_due_original_prim,0)),0), --CM_ba_amount_prim
1368 decode(sch.class,'CM',sum(nvl(sch.amount_due_original_sec,0)),0), --CM_ba_amount_sec
1369 decode(sch.class,'CM',1,0), --CM_ba_count
1370 sysdate, --CREATION_DATE,
1371 g_fii_user_id, --CREATED_BY,
1372 sysdate, --LAST_UPDATE_DATE,
1373 g_fii_user_id, --LAST_UPDATED_BY,
1374 g_fii_login_id --LAST_UPDATE_LOGIN
1375 FROM ra_customer_trx_all trx,
1376 FII_AR_PMT_SCHEDULES_F sch
1377 WHERE trx.customer_trx_id = sch.customer_trx_id
1378 AND sch.class <> 'PMT'
1379 AND decode(g_collection_criteria,
1380 'GL', sch.gl_date,
1381 trx.trx_date) >= g_global_start_date
1382 GROUP BY trx.customer_trx_id,
1383 trx.org_id,
1384 to_number(to_char(trx.trx_date, 'J')), --time_id,
1385 trx.trx_date,
1386 sch.gl_date,
1387 sch.class,
1388 NVL(trx.bill_to_customer_id, trx.drawee_id),
1389 NVL(trx.bill_to_site_use_id, trx.drawee_site_use_id),
1390 trx.trx_number,
1391 trx.cust_trx_type_id,
1392 trx.term_id,
1393 trx.trx_date, --filter_date
1394 trx.invoice_currency_code,
1395 trx.exchange_rate,
1396 trx.exchange_date,
1397 trx.batch_source_id,
1398 trx.ct_reference,
1399 trx.initial_customer_trx_id,
1400 trx.previous_customer_trx_id,
1401 trx.created_by,
1402 trx.creation_date;
1403
1404 if g_debug_flag = 'Y' then
1405 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_TRANSACTIONS_F');
1406 FII_UTIL.stop_timer;
1407 FII_UTIL.print_timer('Duration');
1408 FII_UTIL.put_line('');
1409 end if;
1410
1411 g_state := 'Analyzing FII_AR_TRANSACTIONS_F table';
1412 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_TRANSACTIONS_F');
1413
1414 EXCEPTION
1415 WHEN OTHERS THEN
1416 g_errbuf:=sqlerrm;
1417 g_retcode:= -1;
1418 g_exception_msg := g_retcode || ':' || g_errbuf;
1419 FII_UTIL.put_line('Error occured while ' || g_state);
1420 FII_UTIL.put_line(g_exception_msg);
1421 RAISE;
1422
1423 END POPULATE_TRANSACTIONS;
1424
1425
1426 ------------------------------------------------------------------
1427 -- Procedure POPULATE_ADJUSTMENTS
1428 -- Purpose
1429 -- This procedure inserts records in FII_AR_ADJUSTMENTS_F
1430 ------------------------------------------------------------------
1431 PROCEDURE POPULATE_ADJUSTMENTS IS
1432 BEGIN
1433
1434 g_state := 'Truncating table FII_AR_ADJUSTMENTS_F';
1435 TRUNCATE_TABLE('FII_AR_ADJUSTMENTS_F');
1436
1437 g_state := 'Populating FII_AR_ADJUSTMENTS_F';
1438 if g_debug_flag = 'Y' then
1439 FII_UTIL.put_line(g_state);
1440 FII_UTIL.start_timer;
1441 FII_UTIL.put_line('');
1442 end if;
1443
1444 INSERT /*+ append */ INTO FII_AR_ADJUSTMENTS_F
1445 (adjustment_id,
1446 time_id ,
1447 bill_to_customer_id,
1448 bill_to_site_use_id,
1449 org_id,
1450 amount_trx,
1451 amount_func,
1452 amount_prim,
1453 amount_sec,
1454 apply_date,
1455 gl_date,
1456 filter_date,
1457 customer_trx_id,
1458 payment_schedule_id,
1459 user_id,
1460 ar_creation_date,
1461 adj_class,
1462 subsequent_trx_id,
1463 br_customer_trx_id,
1464 creation_date,
1465 created_by,
1466 last_update_date,
1467 last_updated_by,
1468 last_update_login)
1469 SELECT /*+ parallel(ADJ) parallel(TRX) parallel(TRX2) parallel(LINE) parallel(SOB) parallel(RT) */
1470 adj.adjustment_id,
1471 to_number(to_char(decode(g_collection_criteria,
1472 'GL', adj.gl_date,
1473 adj.apply_date), 'J')), --adj.time_id,
1474 trx.bill_to_customer_id, -- drawee_id only in case of BR
1475 trx.bill_to_site_use_id, -- drawee_site_use_id only in case of BR
1476 adj.org_id,
1477 adj.amount,
1478 NVL(ROUND(adj.amount * trx.exchange_rate / rt.functional_mau)
1479 * rt.functional_mau, nvl(adj.amount,0)), --adj.amount_func
1480 DECODE(trx.invoice_currency_code,
1481 g_prim_currency, nvl(adj.amount,0),
1482 ROUND((nvl(adj.amount,0) * trx.exchange_rate *
1483 rt.prim_conversion_rate) / g_primary_mau) *
1484 g_primary_mau), --adj.amount_prim
1485 DECODE(trx.invoice_currency_code,
1486 g_sec_currency, nvl(adj.amount,0),
1487 ROUND((nvl(adj.amount,0) * trx.exchange_rate *
1488 rt.sec_conversion_rate) / g_secondary_mau) *
1489 g_secondary_mau), --adj.amount_sec
1490 trunc(adj.apply_date),
1491 trunc(adj.gl_date),
1492 decode(g_collection_criteria,'GL',adj.gl_date,adj.apply_date), --filter_date
1493 adj.customer_trx_id,
1494 adj.payment_schedule_id,
1495 adj.created_by, --user_id
1496 adj.creation_date, --ar_creation_date
1497 decode(line.br_adjustment_id,
1498 null, decode(adj.chargeback_customer_trx_id,
1499 null, decode(adj.adjustment_type,'C','DEP',null),
1500 'CB'),
1501 'BR'), --adj_class
1502 adj.subsequent_trx_id,
1503 line.customer_trx_id, --br_customer_trx_id
1504 sysdate, --CREATION_DATE,
1505 g_fii_user_id, --CREATED_BY,
1506 sysdate, --LAST_UPDATE_DATE,
1507 g_fii_user_id, --LAST_UPDATED_BY,
1508 g_fii_login_id --LAST_UPDATE_LOGIN
1509 FROM AR_ADJUSTMENTS_ALL adj,
1510 FII_AR_TRANSACTIONS_F trx,
1511 FII_AR_TRANSACTIONS_F trx2, --makes sure the CM adj does not result from a GUAR
1512 RA_CUSTOMER_TRX_LINES_ALL line,
1513 FII_AR_CURR_RATES_T rt,
1514 AR_SYSTEM_PARAMETERS_ALL par,
1515 GL_SETS_OF_BOOKS sob
1516 WHERE adj.status = 'A'
1517 AND adj.customer_trx_id = trx.customer_trx_id
1518 /*AND adj.customer_trx_id = decode(trx.class,
1519 'CM', trx.previous_customer_trx_id,
1520 trx.customer_trx_id)
1521 AND decode (adj.subsequent_trx_id,
1522 null, -111, 0, -111,
1523 adj.subsequent_trx_id) = decode(trx.class,
1524 'CM', trx.customer_trx_id,
1525 -111)*/
1526 AND nvl(trx.initial_customer_trx_id, trx.customer_trx_id) =
1527 trx2.customer_trx_id --makes sure the CM adj does not result from a GUAR
1528 AND adj.adjustment_id = line.br_adjustment_id (+)
1529 AND adj.last_update_date <= g_sysdate_time --To avoid duplication in incremental
1530
1531 AND trx.org_id = par.org_id
1532 AND par.set_of_books_id = sob.set_of_books_id
1533 AND sob.currency_code = rt.fc_code
1534 AND trunc(least(nvl(trx.exchange_date,trx.trx_date),sysdate)) = rt.conversion_date;
1535 if g_debug_flag = 'Y' then
1536 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_ADJUSTMENTS_F');
1537 FII_UTIL.stop_timer;
1538 FII_UTIL.print_timer('Duration');
1539 FII_UTIL.put_line('');
1540 end if;
1541
1542 g_state := 'Analyzing FII_AR_ADJUSTMENTS_F table';
1543 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_ADJUSTMENTS_F');
1544
1545 EXCEPTION
1546 WHEN OTHERS THEN
1547 g_errbuf:=sqlerrm;
1548 g_retcode:= -1;
1549 g_exception_msg := g_retcode || ':' || g_errbuf;
1550 FII_UTIL.put_line('Error occured while ' || g_state);
1551 FII_UTIL.put_line(g_exception_msg);
1552 RAISE;
1553
1554 END POPULATE_ADJUSTMENTS;
1555
1556 ------------------------------------------------------------------
1557 -- Procedure POPULATE_RECEIPTS
1558 -- Purpose
1559 -- This procedure inserts records in FII_AR_RECEIPTS_F
1560 ------------------------------------------------------------------
1561 PROCEDURE POPULATE_RECEIPTS IS
1562
1563 l_max_rec_application_id NUMBER(15);
1564
1565 BEGIN
1566
1567 g_state := 'Truncating table MLOG$_FII_AR_RECEIPTS_F';
1568 TRUNCATE_TABLE('MLOG$_FII_AR_RECEIPTS_F');
1569 g_state := 'Truncating table FII_AR_RECEIPTS_F';
1570 TRUNCATE_TABLE('FII_AR_RECEIPTS_F');
1571
1572 g_state := 'Populating FII_AR_RECEIPTS_F';
1573 if g_debug_flag = 'Y' then
1574 FII_UTIL.put_line(g_state);
1575 FII_UTIL.start_timer;
1576 FII_UTIL.put_line('');
1577 end if;
1578
1579 INSERT /*+ append parallel(F) */ INTO FII_AR_RECEIPTS_F F
1580 (receivable_application_id,
1581 time_id,
1582 cash_receipt_id,
1583 application_status,
1584 header_status,
1585 amount_applied_rct,
1586 amount_applied_trx,
1587 amount_applied_rct_func,
1588 amount_applied_trx_func,
1589 amount_applied_rct_prim,
1590 amount_applied_trx_prim,
1591 amount_applied_rct_sec,
1592 amount_applied_trx_sec,
1593 earned_discount_amount_trx,
1594 earned_discount_amount_func,
1595 earned_discount_amount_prim,
1596 earned_discount_amount_sec,
1597 unearned_discount_amount_trx,
1598 unearned_discount_amount_func,
1599 unearned_discount_amount_prim,
1600 unearned_discount_amount_sec,
1601 apply_date,
1602 gl_date,
1603 filter_date,
1604 header_filter_date,
1605 application_type,
1606 applied_payment_schedule_id,
1607 applied_customer_trx_id,
1608 customer_trx_id,
1609 payment_schedule_id,
1610 receipt_number,
1611 receipt_type,
1612 receipt_date,
1613 rct_actual_date_closed,
1614 receipt_method_id,
1615 currency_code,
1616 user_id ,
1617 ar_creation_date,
1618 bill_to_customer_id,
1619 bill_to_site_use_id,
1620 collector_bill_to_customer_id,
1621 collector_bill_to_site_use_id,
1622 org_id,
1623 trx_date,
1624 due_date,
1625 cm_previous_customer_trx_id,
1626 total_receipt_count,
1627 creation_date,
1628 created_by,
1629 last_update_date,
1630 last_updated_by,
1631 last_update_login)
1632 SELECT app.RECEIVABLE_APPLICATION_ID,
1633 to_number(to_char(decode(g_collection_criteria,
1634 'GL',app.app_gl_date,
1635 app.apply_date), 'J')), --TIME_ID,
1636 rct.cash_receipt_id,
1637 decode(app.status,'ACTIVITY','APP',app.status) APPLICATION_STATUS,
1638 rct.status HEADER_STATUS,
1639 NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)), --AMOUNT_APPLIED_RCT,
1640 NVL(app.AMOUNT_APPLIED,0), --AMOUNT_APPLIED_TRX,
1641 app.acctd_amount_applied_from, --AMOUNT_APPLIED_RCT_FUNC,
1642 NVL(app.acctd_amount_applied_to,0), --AMOUNT_APPLIED_TRX_FUNC,
1643 DECODE(rct.cash_receipt_id,
1644 null, 0,
1645 decode (rct.currency_code,
1646 g_prim_currency, NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)),
1647 ROUND((NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)) * nvl(rct.exchange_rate,1) *
1648 nvl(rct.prim_conversion_rate,1)) / g_primary_mau) *
1649 g_primary_mau)), --AMOUNT_APPLIED_RCT_PRIM,
1650 DECODE(app.applied_payment_schedule_id,
1651 null, 0,
1652 decode (trxsch.invoice_currency_code,
1653 g_prim_currency, nvl(app.AMOUNT_APPLIED,0),
1654 ROUND((nvl(app.AMOUNT_APPLIED,0) * nvl(trxsch.exchange_rate,1) *
1655 nvl(trxsch.prim_conversion_rate,0)) / g_primary_mau) *
1656 g_primary_mau)), --AMOUNT_APPLIED_TRX_PRIM,
1657 DECODE(rct.cash_receipt_id,
1658 null, 0,
1659 decode (rct.currency_code,
1660 g_sec_currency, NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)),
1661 ROUND((NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)) * nvl(rct.exchange_rate,1) *
1662 nvl(rct.sec_conversion_rate,1)) / g_secondary_mau) *
1663 g_secondary_mau)), --AMOUNT_APPLIED_RCT_SEC,
1664 DECODE(app.applied_payment_schedule_id,
1665 null, 0,
1666 decode (trxsch.invoice_currency_code,
1667 g_sec_currency, nvl(app.AMOUNT_APPLIED,0),
1668 ROUND((nvl(app.AMOUNT_APPLIED,0) * nvl(trxsch.exchange_rate,1) *
1669 nvl(trxsch.sec_conversion_rate,0)) / g_secondary_mau) *
1670 g_secondary_mau)), --AMOUNT_APPLIED_TRX_SEC,
1671 nvl(app.EARNED_DISCOUNT_TAKEN,0), --EARNED_DISCOUNT_amount_trx,
1672 NVL(app.acctd_earned_discount_taken,
1673 nvl(app.EARNED_DISCOUNT_TAKEN,0)), --EARNED_DISCOUNT_AMOUNT_FUNC,
1674 DECODE(trxsch.invoice_currency_code,
1675 g_prim_currency, nvl(app.EARNED_DISCOUNT_TAKEN,0),
1676 ROUND((nvl(app.EARNED_DISCOUNT_TAKEN,0) * nvl(trxsch.exchange_rate,1) *
1677 nvl(trxsch.prim_conversion_rate,1)) / g_primary_mau) *
1678 g_primary_mau), --EARNED_DISCOUNT_AMOUNT_PRIM,
1679 DECODE(trxsch.invoice_currency_code,
1680 g_sec_currency, nvl(app.EARNED_DISCOUNT_TAKEN,0),
1681 ROUND((nvl(app.EARNED_DISCOUNT_TAKEN,0) * nvl(trxsch.exchange_rate,1) *
1682 nvl(trxsch.sec_conversion_rate,1)) / g_secondary_mau) *
1683 g_secondary_mau), --EARNED_DISCOUNT_AMOUNT_SEC,
1684 nvl(app.UNEARNED_DISCOUNT_TAKEN,0), --UNEARNED_DISCOUNT_amount_trx,
1685 NVL(app.acctd_unearned_discount_taken,
1686 nvl(app.UNEARNED_DISCOUNT_TAKEN,0)), --UNEARNED_DISCOUNT_AMOUNT_FUNC,
1687 DECODE(trxsch.invoice_currency_code,
1688 g_prim_currency, nvl(app.UNEARNED_DISCOUNT_TAKEN,0),
1689 ROUND((nvl(app.UNEARNED_DISCOUNT_TAKEN,0) * nvl(trxsch.exchange_rate,1) *
1690 nvl(trxsch.prim_conversion_rate,1)) / g_primary_mau) *
1691 g_primary_mau), --UNEARNED_DISCOUNT_AMOUNT_PRIM
1692 DECODE(trxsch.invoice_currency_code,
1693 g_sec_currency, nvl(app.UNEARNED_DISCOUNT_TAKEN,0),
1694 ROUND((nvl(app.UNEARNED_DISCOUNT_TAKEN,0) * nvl(trxsch.exchange_rate,1) *
1695 nvl(trxsch.sec_conversion_rate,1)) / g_secondary_mau) *
1696 g_secondary_mau), --UNEARNED_DISCOUNT_AMOUNT_SEC
1697 trunc(app.APPLY_DATE),
1698 trunc(app.RCT_GL_DATE),
1699 decode(g_collection_criteria,
1700 'GL',app.app_gl_date,
1701 app.apply_date), --FILTER_DATE,
1702 per.start_date, --decode(g_collection_criteria,'GL',app.rct_gl_date,rct.receipt_date), --HEADER_FILTER_DATE,
1703 app.APPLICATION_TYPE,
1704 app.APPLIED_PAYMENT_SCHEDULE_ID,
1705 app.applied_customer_trx_id,
1706 app.CUSTOMER_TRX_ID,
1707 app.PAYMENT_SCHEDULE_ID,
1708 rct.RECEIPT_NUMBER,
1709 rct.RECEIPT_TYPE,
1710 trunc(rct.receipt_date),
1711 rctsch.actual_date_closed, --rct_actual_date_closed
1712 rct.receipt_method_id,
1713 rct.CURRENCY_CODE,
1714 app.created_by, --USER_ID
1715 app.creation_date, --ar_creation_date
1716 decode(app.status,
1717 'UNID', -2,
1718 nvl(rctsch.bill_to_customer_id, -2)), --to avoid outer joins in MVs --bill_to_customer_id
1719 decode(app.status,
1720 'UNID', -2,
1721 nvl(rctsch.bill_to_site_use_id, -2)), --bill_to_site_use_id
1722 case when trxsch.payment_schedule_id is null
1723 or app.applied_payment_schedule_id < 0
1724 then nvl(rctsch.bill_to_customer_id,-2)
1725 else nvl(trxsch.bill_to_customer_id,-2) end, --collector_bill_to_customer_id
1726 case when trxsch.payment_schedule_id is null
1727 or app.applied_payment_schedule_id < 0
1728 then nvl(rctsch.bill_to_site_use_id,-2)
1729 else nvl(trxsch.bill_to_site_use_id,-2) end, --collector_bill_to_site_use_id
1730 app.org_id,
1731 trxsch.trx_date,
1732 trxsch.due_date,
1733 rctsch.previous_customer_trx_id, --cm_previous_customer_trx_id
1734 decode (app.receivable_application_id,
1735 MIN(app.receivable_application_id) over (partition by rct.cash_receipt_id), 1,
1736 MAX(app.receivable_application_id) over (partition by rct.cash_receipt_id),
1737 case when rct.status = 'REV' or rct.status = 'NSF' or rct.status = 'STOP'
1738 then -1 else 0 end,
1739 0), --total_receipt_count
1740 sysdate, --CREATION_DATE,
1741 g_fii_user_id, --CREATED_BY,
1742 sysdate, --LAST_UPDATE_DATE,
1743 g_fii_user_id, --LAST_UPDATED_BY,
1744 g_fii_login_id --LAST_UPDATE_LOGIN
1745 FROM (select /*+ parallel(app) */
1746 RECEIVABLE_APPLICATION_ID,
1747 cash_receipt_id,
1748 case when gl_date >= g_global_start_date then
1749 gl_date
1750 else g_global_start_date end app_gl_date,
1751 decode (application_type,
1752 'CM',gl_date,
1753 MIN(gl_date) over (partition by cash_receipt_id)) rct_gl_date, --to get the receipt creation gl_date instead of appl gl_date
1754 case when apply_date >= g_global_start_date then
1755 apply_date
1756 else g_global_start_date end apply_date,
1757 status,
1758 AMOUNT_APPLIED_FROM,
1759 AMOUNT_APPLIED,
1760 acctd_amount_applied_from,
1761 acctd_amount_applied_to,
1762 applied_customer_trx_id,
1763 EARNED_DISCOUNT_TAKEN,
1764 acctd_earned_discount_taken,
1765 UNEARNED_DISCOUNT_TAKEN,
1766 acctd_unearned_discount_taken,
1767 APPLICATION_TYPE,
1768 applied_payment_schedule_id,
1769 CUSTOMER_TRX_ID,
1770 PAYMENT_SCHEDULE_ID,
1771 created_by,
1772 creation_date,
1773 org_id
1774 from AR_RECEIVABLE_APPLICATIONS_ALL app) app,
1775
1776 FII_AR_PMT_SCHEDULES_F rctsch,
1777
1778 (select /*+ parallel(RCT) parallel(RCTRT) parallel(SOB) */
1779 rct.cash_receipt_id,
1780 rct.status,
1781 rct.currency_code,
1782 nvl(rct.exchange_rate,1) exchange_rate,
1783 rctrt.prim_conversion_rate,
1784 rctrt.sec_conversion_rate,
1785 rct.RECEIPT_NUMBER,
1786 rct.TYPE receipt_type,
1787 rct.receipt_date,
1788 rct.receipt_method_id
1789 --rct.pay_from_customer bill_to_customer_id,
1790 --NVL(rct.customer_site_use_id,
1791 -- -1) bill_to_site_use_id, --(-1 for UNAPP, UNID)
1792 --rct.customer_site_use_id
1793 from AR_CASH_RECEIPTS_ALL rct,
1794 FII_AR_CURR_RATES_T rctrt,
1795 AR_SYSTEM_PARAMETERS_ALL par,
1796 GL_SETS_OF_BOOKS sob
1797 where --rct.receipt_date >= g_global_start_date
1798 rct.org_id = par.org_id
1799 and par.set_of_books_id = sob.set_of_books_id
1800 and sob.currency_code = rctrt.fc_code
1801 and rctrt.conversion_date = trunc(least(nvl(rct.exchange_date,
1802 rct.receipt_date),sysdate))) rct,
1803
1804 (select /*+ parallel(TRXRT) parallel(TRXSCH) parallel(SOB) */
1805 trxsch.payment_schedule_id,
1806 trxsch.invoice_currency_code,
1807 trxsch.exchange_rate exchange_rate,
1808 trxrt.prim_conversion_rate,
1809 trxrt.sec_conversion_rate,
1810 trxsch.trx_date, --trx_date
1811 trxsch.due_date, --due_date
1812 trxsch.bill_to_customer_id,
1813 trxsch.bill_to_site_use_id
1814 from FII_AR_PMT_SCHEDULES_F trxsch,
1815 FII_AR_CURR_RATES_T trxrt,
1816 AR_SYSTEM_PARAMETERS_ALL par,
1817 GL_SETS_OF_BOOKS sob
1818 where trxsch.org_id = par.org_id
1819 AND par.set_of_books_id = sob.set_of_books_id
1820 AND sob.currency_code = trxrt.fc_code
1821 AND trxrt.conversion_date = trunc(least(nvl(trxsch.exchange_date,
1822 trxsch.trx_date),sysdate))) trxsch,
1823 gl_periods per,
1824 ar_system_parameters_all par,
1825 gl_sets_of_books sob
1826
1827 WHERE app.payment_schedule_id = rctsch.payment_schedule_id
1828 AND rctsch.class in ('PMT', 'CM')
1829 AND app.application_type IN ('CASH','CM')
1830 --AND (app.status IN ('UNID','UNAPP','APP')
1831 -- or app.applied_payment_schedule_id IN (-1,-4,-7))
1832 AND app.cash_receipt_id = rct.cash_receipt_id (+)
1833 AND app.applied_payment_schedule_id = trxsch.payment_schedule_id (+)
1834 AND par.org_id = app.org_id
1835 AND sob.set_of_books_id = par.set_of_books_id
1836 AND per.period_set_name = sob.period_set_name
1837 AND per.period_type = sob.accounted_period_type
1838 AND decode(application_type,
1839 'CM', app.apply_date,
1840 decode(g_collection_criteria,
1841 'GL',app.rct_gl_date,
1842 rct.receipt_date)) between per.start_date and per.end_date
1843 AND per.adjustment_period_flag = 'N'
1844 AND (case when decode(g_collection_criteria,
1845 'GL', rct_gl_date,
1846 rct.receipt_date) >= g_global_start_date
1847 then 1
1848 when decode(g_collection_criteria,
1849 'GL', rct_gl_date,
1850 rct.receipt_date) < g_global_start_date
1851 and exists (select 'x' from ar_receivable_applications_all app2
1852 where app2.cash_receipt_id = app.cash_receipt_id
1853 and decode(g_global_start_date,
1854 'GL', app2.gl_date,
1855 app2.apply_date) >= g_global_start_date
1856 and app2.status in ('APP', 'ACTIVITY'))
1857 then 1
1858 else trxsch.payment_schedule_id end) is not null;
1859
1860 if g_debug_flag = 'Y' then
1861 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_RECEIPTS_F');
1862 FII_UTIL.stop_timer;
1863 FII_UTIL.print_timer('Duration');
1864 FII_UTIL.put_line('');
1865 end if;
1866
1867 g_state := 'Analyzing FII_AR_RECEIPTS_F table';
1868 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_RECEIPTS_F');
1869
1870 g_state := 'Logging maximum receivable_application_id into fii_change_log table';
1871 select nvl(max(receivable_application_id), -999)
1872 into l_max_rec_application_id
1873 from fii_ar_receipts_f;
1874
1875 INSERT INTO fii_change_log
1876 (log_item, item_value, CREATION_DATE, CREATED_BY,
1877 LAST_UPDATE_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN)
1878 (SELECT 'AR_MAX_RECEIVABLE_APPLICATION_ID',
1879 l_max_rec_application_id,
1880 sysdate, --CREATION_DATE,
1881 g_fii_user_id, --CREATED_BY,
1882 sysdate, --LAST_UPDATE_DATE,
1883 g_fii_user_id, --LAST_UPDATED_BY,
1884 g_fii_login_id --LAST_UPDATE_LOGIN
1885 FROM DUAL
1886 WHERE NOT EXISTS
1887 (select 1 from fii_change_log
1888 where log_item = 'AR_MAX_RECEIVABLE_APPLICATION_ID'));
1889
1890 IF (SQL%ROWCOUNT = 0) THEN
1891 UPDATE fii_change_log
1892 SET item_value = l_max_rec_application_id,
1893 last_update_date = g_sysdate_time,
1894 last_update_login = g_fii_login_id,
1895 last_updated_by = g_fii_user_id
1896 WHERE log_item = 'AR_MAX_RECEIVABLE_APPLICATION_ID';
1897 END IF;
1898
1899 EXCEPTION
1900 WHEN OTHERS THEN
1901 g_errbuf:=sqlerrm;
1902 g_retcode:= -1;
1903 g_exception_msg := g_retcode || ':' || g_errbuf;
1904 FII_UTIL.put_line('Error occured while ' || g_state);
1905 FII_UTIL.put_line(g_exception_msg);
1906 RAISE;
1907
1908 END POPULATE_RECEIPTS;
1909
1910
1911 ------------------------------------------------------------------
1912 -- Procedure POPULATE_SCHEDULED_DISCOUNTS
1913 -- Purpose
1914 -- This procedure inserts records in FII_AR_SCHEDULED_DISC_F
1915 ------------------------------------------------------------------
1916 PROCEDURE POPULATE_SCHEDULED_DISCOUNTS IS
1917 BEGIN
1918
1919 g_state := 'Truncating table FII_AR_SCHEDULED_DISC_F';
1920 TRUNCATE_TABLE('FII_AR_SCHEDULED_DISC_F');
1921
1922 g_state := 'Populating FII_AR_SCHEDULED_DISC_F';
1923 if g_debug_flag = 'Y' then
1924 FII_UTIL.put_line(g_state);
1925 FII_UTIL.start_timer;
1926 FII_UTIL.put_line('');
1927 end if;
1928
1929
1930 INSERT INTO FII_AR_SCHEDULED_DISC_F
1931 (term_id,
1932 sequence_num,
1933 discount1_percent,
1934 discount1_days,
1935 discount1_date,
1936 discount1_day_of_month,
1937 discount1_months_forward,
1938 discount2_percent,
1939 discount2_days,
1940 discount2_date,
1941 discount2_day_of_month,
1942 discount2_months_forward,
1943 discount3_percent,
1944 discount3_days,
1945 discount3_date,
1946 discount3_day_of_month,
1947 discount3_months_forward,
1948 creation_date,
1949 created_by,
1950 last_update_date,
1951 last_updated_by,
1952 last_update_login)
1953 SELECT term_id,
1954 sequence_num,
1955 sum(decode(discount_num,
1956 1, discount_percent)) discount1_percent,
1957 sum(decode(discount_num,
1958 1, discount_days)) discount1_days,
1959 max(decode(discount_num,
1960 1, discount_date)) discount1_date,
1961 sum(decode(discount_num,
1962 1, discount_day_of_month)) discount1_day_of_month,
1963 sum(decode(discount_num,
1964 1, discount_months_forward)) discount1_months_forward,
1965 sum(decode(discount_num,
1966 2, discount_percent)) discount2_percent,
1967 sum(decode(discount_num,
1968 2, discount_days)) discount2_days,
1969 max(decode(discount_num,
1970 2, discount_date)) discount2_date,
1971 sum(decode(discount_num,
1972 2, discount_day_of_month)) discount2_day_of_month,
1973 sum(decode(discount_num,
1974 2, discount_months_forward)) discount2_months_forward,
1975 sum(decode(discount_num,
1976 3, discount_percent)) discount3_percent,
1977 sum(decode(discount_num,
1978 3, discount_days)) discount3_days,
1979 max(decode(discount_num,
1980 3, discount_date)) discount3_date,
1981 sum(decode(discount_num,
1982 3, discount_day_of_month)) discount3_day_of_month,
1983 sum(decode(discount_num,
1984 3, discount_months_forward)) discount3_months_forward,
1985 sysdate, --CREATION_DATE,
1986 g_fii_user_id, --CREATED_BY,
1987 sysdate, --LAST_UPDATE_DATE,
1988 g_fii_user_id, --LAST_UPDATED_BY,
1989 g_fii_login_id --LAST_UPDATE_LOGIN
1990 FROM (SELECT disc.term_id,
1991 disc.sequence_num,
1992 disc.discount_percent,
1993 disc.discount_days,
1994 disc.discount_date,
1995 disc.discount_day_of_month,
1996 disc.discount_months_forward,
1997 count(*) OVER (partition by disc.term_id, disc.sequence_num
1998 ORDER BY nvl(disc.discount_days,
1999 nvl(to_number(to_char(discount_date, 'J')),
2000 discount_months_forward)),
2001 nvl(discount_day_of_month,1)
2002 ROWS UNBOUNDED PRECEDING) discount_num
2003 FROM RA_TERMS_LINES_DISCOUNTS disc
2004 GROUP BY disc.term_id,
2005 disc.sequence_num,
2006 disc.discount_percent,
2007 disc.discount_days,
2008 disc.discount_date,
2009 disc.discount_day_of_month,
2010 disc.discount_months_forward)
2011 GROUP BY term_id,
2012 sequence_num;
2013
2014 if g_debug_flag = 'Y' then
2015 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_SCHEDULED_DISC_F');
2016 FII_UTIL.stop_timer;
2017 FII_UTIL.print_timer('Duration');
2018 FII_UTIL.put_line('');
2019 end if;
2020
2021 g_state := 'Analyzing FII_AR_SCHEDULED_DISC_F table';
2022 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_SCHEDULED_DISC_F');
2023
2024 EXCEPTION
2025 WHEN OTHERS THEN
2026 g_errbuf:=sqlerrm;
2027 g_retcode:= -1;
2028 g_exception_msg := g_retcode || ':' || g_errbuf;
2029 FII_UTIL.put_line('Error occured while ' || g_state);
2030 FII_UTIL.put_line(g_exception_msg);
2031 RAISE;
2032
2033 END POPULATE_SCHEDULED_DISCOUNTS;
2034
2035
2036 ------------------------------------------------------------------
2037 -- Procedure POPULATE_RECEIVABLES_AGING
2038 -- Purpose
2039 -- This procedure inserts records in FII_AR_AGING_RECEIVABLES
2040 ------------------------------------------------------------------
2041 PROCEDURE POPULATE_RECEIVABLES_AGING IS
2042
2043 BEGIN
2044
2045 g_state := 'Truncating table MLOG$_FII_AR_AGING_RECEIVABLES';
2046 TRUNCATE_TABLE('MLOG$_FII_AR_AGING_RECEIVABLES');
2047 g_state := 'Truncating table FII_AR_AGING_RECEIVABLES';
2048 TRUNCATE_TABLE('FII_AR_AGING_RECEIVABLES');
2049
2050 g_state := 'Truncating table FII_AR_MARKER_GT';
2051 TRUNCATE_TABLE('FII_AR_MARKER_GT');
2052
2053 Insert into fii_ar_marker_gt
2054 (marker)
2055 (SELECT 1 marker FROM DUAL WHERE g_current_bucket_3_low is not null UNION ALL
2056 SELECT 2 marker FROM DUAL WHERE g_current_bucket_2_low is not null UNION ALL
2057 SELECT 3 marker FROM DUAL UNION ALL
2058 SELECT 4 marker FROM DUAL UNION ALL
2059 SELECT 5 marker FROM DUAL WHERE g_past_due_bucket_2_low is not null UNION ALL
2060 SELECT 6 marker FROM DUAL WHERE g_past_due_bucket_3_low is not null UNION ALL
2061 SELECT 7 marker FROM DUAL WHERE g_past_due_bucket_4_low is not null UNION ALL
2062 SELECT 8 marker FROM DUAL WHERE g_past_due_bucket_5_low is not null UNION ALL
2063 SELECT 9 marker FROM DUAL WHERE g_past_due_bucket_6_low is not null UNION ALL
2064 SELECT 10 marker FROM DUAL WHERE g_past_due_bucket_7_low is not null);
2065
2066 g_state := 'Populating FII_AR_AGING_RECEIVABLES';
2067 if g_debug_flag = 'Y' then
2068 FII_UTIL.put_line(g_state);
2069 FII_UTIL.start_timer;
2070 FII_UTIL.put_line('');
2071 end if;
2072
2073 INSERT /*+ append parallel(F) */ INTO FII_AR_AGING_RECEIVABLES F
2074 (time_id,
2075 time_id_date,
2076 event_date,
2077 next_aging_date,
2078 bill_to_customer_id,
2079 bill_to_site_use_id,
2080 org_id ,
2081 customer_trx_id,
2082 payment_schedule_id,
2083 adjustment_id,
2084 receivable_application_id,
2085 appl_trx_date,
2086 trx_date,
2087 due_date,
2088 current_bucket_1_amount_trx,
2089 current_bucket_1_amount_func,
2090 current_bucket_1_amount_prim,
2091 current_bucket_1_amount_sec,
2092 current_bucket_1_count,
2093 current_bucket_2_amount_trx,
2094 current_bucket_2_amount_func,
2095 current_bucket_2_amount_prim,
2096 current_bucket_2_amount_sec,
2097 current_bucket_2_count,
2098 current_bucket_3_amount_trx,
2099 current_bucket_3_amount_func,
2100 current_bucket_3_amount_prim,
2101 current_bucket_3_amount_sec,
2102 current_bucket_3_count,
2103 past_due_bucket_1_amount_trx,
2104 past_due_bucket_1_amount_func,
2105 past_due_bucket_1_amount_prim,
2106 past_due_bucket_1_amount_sec,
2107 past_due_bucket_1_count,
2108 past_due_bucket_2_amount_trx,
2109 past_due_bucket_2_amount_func,
2110 past_due_bucket_2_amount_prim,
2111 past_due_bucket_2_amount_sec,
2112 past_due_bucket_2_count,
2113 past_due_bucket_3_amount_trx,
2114 past_due_bucket_3_amount_func,
2115 past_due_bucket_3_amount_prim,
2116 past_due_bucket_3_amount_sec,
2117 past_due_bucket_3_count,
2118 past_due_bucket_4_amount_trx,
2119 past_due_bucket_4_amount_func,
2120 past_due_bucket_4_amount_prim,
2121 past_due_bucket_4_amount_sec,
2122 past_due_bucket_4_count,
2123 past_due_bucket_5_amount_trx,
2124 past_due_bucket_5_amount_func,
2125 past_due_bucket_5_amount_prim,
2126 past_due_bucket_5_amount_sec,
2127 past_due_bucket_5_count,
2128 past_due_bucket_6_amount_trx,
2129 past_due_bucket_6_amount_func,
2130 past_due_bucket_6_amount_prim,
2131 past_due_bucket_6_amount_sec,
2132 past_due_bucket_6_count,
2133 past_due_bucket_7_amount_trx,
2134 past_due_bucket_7_amount_func,
2135 past_due_bucket_7_amount_prim,
2136 past_due_bucket_7_amount_sec,
2137 past_due_bucket_7_count,
2138 current_open_count,
2139 past_due_count,
2140 total_open_count,
2141 unaged_amount_trx,
2142 unaged_amount_func,
2143 unaged_amount_prim,
2144 unaged_amount_sec,
2145 on_acct_credit_amount_trx,
2146 on_acct_credit_amount_func,
2147 on_acct_credit_amount_prim,
2148 on_acct_credit_amount_sec,
2149 class,
2150 billing_activity_flag,
2151 billed_amount_flag,
2152 on_account_credit_flag,
2153 unapplied_deposit_flag,
2154 billing_activity_count,
2155 action,
2156 aging_flag,
2157 creation_date,
2158 created_by,
2159 last_update_date,
2160 last_updated_by,
2161 last_update_login)
2162 SELECT time_id,
2163 time_id_date,
2164 event_date,
2165 next_aging_date,
2166 bill_to_customer_id,
2167 bill_to_site_use_id,
2168 org_id,
2169 customer_trx_id,
2170 payment_schedule_id,
2171 adjustment_id,
2172 receivable_application_id,
2173 appl_trx_date,
2174 trx_date,
2175 due_date,
2176 sum(current_bucket_1_amount_trx),
2177 sum(current_bucket_1_amount_func),
2178 sum(current_bucket_1_amount_prim),
2179 sum(current_bucket_1_amount_sec),
2180 sum(current_bucket_1_count),
2181 sum(current_bucket_2_amount_trx),
2182 sum(current_bucket_2_amount_func),
2183 sum(current_bucket_2_amount_prim),
2184 sum(current_bucket_2_amount_sec),
2185 sum(current_bucket_2_count),
2186 sum(current_bucket_3_amount_trx),
2187 sum(current_bucket_3_amount_func),
2188 sum(current_bucket_3_amount_prim),
2189 sum(current_bucket_3_amount_sec),
2190 sum(current_bucket_3_count),
2191 sum(past_due_bucket_1_amount_trx),
2192 sum(past_due_bucket_1_amount_func),
2193 sum(past_due_bucket_1_amount_prim),
2194 sum(past_due_bucket_1_amount_sec),
2195 sum(past_due_bucket_1_count),
2196 sum(past_due_bucket_2_amount_trx),
2197 sum(past_due_bucket_2_amount_func),
2198 sum(past_due_bucket_2_amount_prim),
2199 sum(past_due_bucket_2_amount_sec),
2200 sum(past_due_bucket_2_count),
2201 sum(past_due_bucket_3_amount_trx),
2202 sum(past_due_bucket_3_amount_func),
2203 sum(past_due_bucket_3_amount_prim),
2204 sum(past_due_bucket_3_amount_sec),
2205 sum(past_due_bucket_3_count),
2206 sum(past_due_bucket_4_amount_trx),
2207 sum(past_due_bucket_4_amount_func),
2208 sum(past_due_bucket_4_amount_prim),
2209 sum(past_due_bucket_4_amount_sec),
2210 sum(past_due_bucket_4_count),
2211 sum(past_due_bucket_5_amount_trx),
2212 sum(past_due_bucket_5_amount_func),
2213 sum(past_due_bucket_5_amount_prim),
2214 sum(past_due_bucket_5_amount_sec),
2215 sum(past_due_bucket_5_count),
2216 sum(past_due_bucket_6_amount_trx),
2217 sum(past_due_bucket_6_amount_func),
2218 sum(past_due_bucket_6_amount_prim),
2219 sum(past_due_bucket_6_amount_sec),
2220 sum(past_due_bucket_6_count),
2221 sum(past_due_bucket_7_amount_trx),
2222 sum(past_due_bucket_7_amount_func),
2223 sum(past_due_bucket_7_amount_prim),
2224 sum(past_due_bucket_7_amount_sec),
2225 sum(past_due_bucket_7_count),
2226 sum(current_open_count),
2227 sum(past_due_count),
2228 sum(total_open_count),
2229 unaged_amount_trx,
2230 unaged_amount_func,
2231 unaged_amount_prim,
2232 unaged_amount_sec,
2233 on_acct_credit_amount_trx,
2234 on_acct_credit_amount_func,
2235 on_acct_credit_amount_prim,
2236 on_acct_credit_amount_sec,
2237 class,
2238 billing_activity_flag,
2239 billed_amount_flag,
2240 on_account_credit_flag,
2241 unapplied_deposit_flag,
2242 sum(billing_activity_count),
2243 action,
2244 aging_flag,
2245 sysdate, --CREATION_DATE,
2246 g_fii_user_id, --CREATED_BY,
2247 sysdate, --LAST_UPDATE_DATE,
2248 g_fii_user_id, --LAST_UPDATED_BY,
2249 g_fii_login_id --LAST_UPDATE_LOGIN
2250 FROM (
2251 SELECT time_id,
2252 time_id_date,
2253 next_aging_date,
2254 bill_to_customer_id,
2255 bill_to_site_use_id,
2256 org_id,
2257 customer_trx_id,
2258 payment_schedule_id,
2259 adjustment_id,
2260 receivable_application_id,
2261 appl_trx_date,
2262 trx_date,
2263 due_date,
2264 event_date,
2265 current_bucket_1_amount_trx,
2266 current_bucket_1_amount_func,
2267 current_bucket_1_amount_prim,
2268 current_bucket_1_amount_sec,
2269 (case when current_bucket_1_amount_func = current_bucket_1_amt_func_cum
2270 AND current_bucket_1_amount_func <> 0
2271 then 1
2272 when current_bucket_1_amt_func_cum = 0
2273 AND current_bucket_1_amount_func <>0
2274 then -1
2275 else 0 end) current_bucket_1_count,
2276 current_bucket_2_amount_trx,
2277 current_bucket_2_amount_func,
2278 current_bucket_2_amount_prim,
2279 current_bucket_2_amount_sec,
2280 (case when current_bucket_2_amount_func = current_bucket_2_amt_func_cum
2281 AND current_bucket_2_amount_func <>0
2282 then 1
2283 when current_bucket_2_amt_func_cum = 0
2284 AND current_bucket_2_amount_func <>0
2285 then -1
2286 else 0 end) current_bucket_2_count,
2287 current_bucket_3_amount_trx,
2288 current_bucket_3_amount_func,
2289 current_bucket_3_amount_prim,
2290 current_bucket_3_amount_sec,
2291 (case when current_bucket_3_amount_func = current_bucket_3_amt_func_cum
2292 AND current_bucket_3_amount_func <> 0
2293 then 1
2294 when current_bucket_3_amt_func_cum = 0
2295 AND current_bucket_3_amount_func <> 0
2296 then -1
2297 else 0 end) current_bucket_3_count,
2298 past_due_bucket_1_amount_trx,
2299 past_due_bucket_1_amount_func,
2300 past_due_bucket_1_amount_prim,
2301 past_due_bucket_1_amount_sec,
2302 (case when past_due_bucket_1_amount_func = past_due_bucket_1_amt_func_cum
2303 AND past_due_bucket_1_amount_func <> 0
2304 then 1
2305 when past_due_bucket_1_amt_func_cum = 0
2306 AND past_due_bucket_1_amount_func <> 0
2307 then -1
2308 else 0 end) past_due_bucket_1_count,
2309 past_due_bucket_2_amount_trx,
2310 past_due_bucket_2_amount_func,
2311 past_due_bucket_2_amount_prim,
2312 past_due_bucket_2_amount_sec,
2313 (case when past_due_bucket_2_amount_func = past_due_bucket_2_amt_func_cum
2314 AND past_due_bucket_2_amount_func <> 0
2315 then 1
2316 when past_due_bucket_2_amt_func_cum = 0
2317 AND past_due_bucket_2_amount_func <> 0
2318 then -1
2319 else 0 end) past_due_bucket_2_count,
2320 past_due_bucket_3_amount_trx,
2321 past_due_bucket_3_amount_func,
2322 past_due_bucket_3_amount_prim,
2323 past_due_bucket_3_amount_sec,
2324 (case when past_due_bucket_3_amount_func = past_due_bucket_3_amt_func_cum
2325 AND past_due_bucket_3_amount_func <> 0
2326 then 1
2327 when past_due_bucket_3_amt_func_cum = 0
2328 AND past_due_bucket_3_amount_func <> 0
2329 then -1
2330 else 0 end) past_due_bucket_3_count,
2331 past_due_bucket_4_amount_trx,
2332 past_due_bucket_4_amount_func,
2333 past_due_bucket_4_amount_prim,
2334 past_due_bucket_4_amount_sec,
2335 (case when past_due_bucket_4_amount_func = past_due_bucket_4_amt_func_cum
2336 AND past_due_bucket_4_amount_func <> 0
2337 then 1
2338 when past_due_bucket_4_amt_func_cum = 0
2339 AND past_due_bucket_4_amount_func <> 0
2340 then -1
2341 else 0 end) past_due_bucket_4_count,
2342 past_due_bucket_5_amount_trx,
2343 past_due_bucket_5_amount_func,
2344 past_due_bucket_5_amount_prim,
2345 past_due_bucket_5_amount_sec,
2346 (case when past_due_bucket_5_amount_func = past_due_bucket_5_amt_func_cum
2347 AND past_due_bucket_5_amount_func <> 0
2348 then 1
2349 when past_due_bucket_5_amt_func_cum = 0
2350 AND past_due_bucket_5_amount_func <> 0
2351 then -1
2352 else 0 end) past_due_bucket_5_count,
2353 past_due_bucket_6_amount_trx,
2354 past_due_bucket_6_amount_func,
2355 past_due_bucket_6_amount_prim,
2356 past_due_bucket_6_amount_sec,
2357 (case when past_due_bucket_6_amount_func = past_due_bucket_6_amt_func_cum
2358 AND past_due_bucket_6_amount_func <> 0
2359 then 1
2360 when past_due_bucket_6_amt_func_cum = 0
2361 AND past_due_bucket_6_amount_func <> 0
2362 then -1
2363 else 0 end) past_due_bucket_6_count,
2364 past_due_bucket_7_amount_trx,
2365 past_due_bucket_7_amount_func,
2366 past_due_bucket_7_amount_prim,
2367 past_due_bucket_7_amount_sec,
2368 (case when past_due_bucket_7_amount_func = past_due_bucket_7_amt_func_cum
2369 AND past_due_bucket_7_amount_func <> 0
2370 then 1
2371 when past_due_bucket_7_amt_func_cum = 0
2372 AND past_due_bucket_7_amount_func <> 0
2373 then -1
2374 else 0 end) past_due_bucket_7_count,
2375 (case when current_open_amount_func = current_open_amt_func_cum
2376 and current_open_amount_func <> 0
2377 then 1
2378 when current_open_amt_func_cum = 0
2379 and current_open_amount_func <> 0
2380 then -1
2381 else 0 end) current_open_count,
2382 (case when past_due_amount_func = past_due_amt_func_cum
2383 and past_due_amount_func <> 0
2384 then 1
2385 when past_due_amt_func_cum = 0
2386 and past_due_amount_func <> 0
2387 then -1
2388 else 0 end) past_due_count,
2389 (case when total_open_amount_func = total_open_amt_func_cum
2390 and total_open_amount_func <> 0
2391 then 1
2392 when total_open_amt_func_cum = 0
2393 and total_open_amount_func <> 0
2394 then -1
2395 else 0 end) total_open_count,
2396 unaged_amount_trx,
2397 unaged_amount_func,
2398 unaged_amount_prim,
2399 unaged_amount_sec,
2400 on_acct_credit_amount_trx,
2401 on_acct_credit_amount_func,
2402 on_acct_credit_amount_prim,
2403 on_acct_credit_amount_sec,
2404 class,
2405 billing_activity_flag,
2406 billed_amount_flag,
2407 on_account_credit_flag,
2408 unapplied_deposit_flag,
2409 (case when billing_activity_flag = 'Y'
2410 and payment_schedule_id = min_payment_schedule_id
2411 then 1
2412 else 0 end) billing_activity_count,
2413 action,
2414 actual_date_closed,
2415 aging_flag
2416 FROM (
2417 SELECT time_id,
2418 time_id_date,
2419 next_aging_date,
2420 bill_to_customer_id,
2421 bill_to_site_use_id,
2422 org_id,
2423 customer_trx_id,
2424 payment_schedule_id,
2425 adjustment_id,
2426 receivable_application_id,
2427 appl_trx_date,
2428 trx_date,
2429 due_date,
2430 event_date,
2431 MIN(payment_schedule_id) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) min_payment_schedule_id,
2432 current_bucket_1_amount_trx,
2433 current_bucket_1_amount_func,
2434 current_bucket_1_amount_prim,
2435 current_bucket_1_amount_sec,
2436 SUM(current_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) current_bucket_1_amt_func_cum,
2437 current_bucket_2_amount_trx,
2438 current_bucket_2_amount_func,
2439 current_bucket_2_amount_prim,
2440 current_bucket_2_amount_sec,
2441 SUM(current_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) current_bucket_2_amt_func_cum,
2442 current_bucket_3_amount_trx,
2443 current_bucket_3_amount_func,
2444 current_bucket_3_amount_prim,
2445 current_bucket_3_amount_sec,
2446 SUM(current_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) current_bucket_3_amt_func_cum,
2447 past_due_bucket_1_amount_trx,
2448 past_due_bucket_1_amount_func,
2449 past_due_bucket_1_amount_prim,
2450 past_due_bucket_1_amount_sec,
2451 SUM(past_due_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_1_amt_func_cum,
2452 past_due_bucket_2_amount_trx,
2453 past_due_bucket_2_amount_func,
2454 past_due_bucket_2_amount_prim,
2455 past_due_bucket_2_amount_sec,
2456 SUM(past_due_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_2_amt_func_cum,
2457 past_due_bucket_3_amount_trx,
2458 past_due_bucket_3_amount_func,
2459 past_due_bucket_3_amount_prim,
2460 past_due_bucket_3_amount_sec,
2461 SUM(past_due_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_3_amt_func_cum,
2462 past_due_bucket_4_amount_trx,
2463 past_due_bucket_4_amount_func,
2464 past_due_bucket_4_amount_prim,
2465 past_due_bucket_4_amount_sec,
2466 SUM(past_due_bucket_4_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_4_amt_func_cum,
2467 past_due_bucket_5_amount_trx,
2468 past_due_bucket_5_amount_func,
2469 past_due_bucket_5_amount_prim,
2470 past_due_bucket_5_amount_sec,
2471 SUM(past_due_bucket_5_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_5_amt_func_cum,
2472 past_due_bucket_6_amount_trx,
2473 past_due_bucket_6_amount_func,
2474 past_due_bucket_6_amount_prim,
2475 past_due_bucket_6_amount_sec,
2476 SUM(past_due_bucket_6_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_6_amt_func_cum,
2477 past_due_bucket_7_amount_trx,
2478 past_due_bucket_7_amount_func,
2479 past_due_bucket_7_amount_prim,
2480 past_due_bucket_7_amount_sec,
2481 SUM(past_due_bucket_7_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_7_amt_func_cum,
2482 (current_bucket_1_amount_func+current_bucket_2_amount_func
2483 + current_bucket_3_amount_func) current_open_amount_func,
2484 (SUM(current_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2485 + SUM(current_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2486 + SUM(current_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)) current_open_amt_func_cum,
2487 (past_due_bucket_1_amount_func
2488 + past_due_bucket_2_amount_func+past_due_bucket_3_amount_func
2489 + past_due_bucket_4_amount_func+past_due_bucket_5_amount_func
2490 + past_due_bucket_6_amount_func+past_due_bucket_7_amount_func) past_due_amount_func,
2491 (SUM(past_due_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY event_date ROWS UNBOUNDED PRECEDING)
2492 + SUM(past_due_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2493 + SUM(past_due_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2494 + SUM(past_due_bucket_4_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2495 + SUM(past_due_bucket_5_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2496 + SUM(past_due_bucket_6_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2497 + SUM(past_due_bucket_7_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)) past_due_amt_func_cum,
2498 (current_bucket_1_amount_func+current_bucket_2_amount_func
2499 + current_bucket_3_amount_func+past_due_bucket_1_amount_func
2500 + past_due_bucket_2_amount_func+past_due_bucket_3_amount_func
2501 + past_due_bucket_4_amount_func+past_due_bucket_5_amount_func
2502 + past_due_bucket_6_amount_func+past_due_bucket_7_amount_func) total_open_amount_func,
2503 (SUM(current_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2504 + SUM(current_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2505 + SUM(current_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2506 + SUM(past_due_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2507 + SUM(past_due_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2508 + SUM(past_due_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2509 + SUM(past_due_bucket_4_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2510 + SUM(past_due_bucket_5_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2511 + SUM(past_due_bucket_6_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
2512 + SUM(past_due_bucket_7_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)) total_open_amt_func_cum,
2513 unaged_amount_trx,
2514 unaged_amount_func,
2515 unaged_amount_prim,
2516 unaged_amount_sec,
2517 on_acct_credit_amount_trx,
2518 on_acct_credit_amount_func,
2519 on_acct_credit_amount_prim,
2520 on_acct_credit_amount_sec,
2521 class,
2522 billing_activity_flag,
2523 billed_amount_flag,
2524 on_account_credit_flag,
2525 unapplied_deposit_flag,
2526 action,
2527 actual_date_closed,
2528 aging_flag
2529 FROM
2530 (SELECT
2531 to_number(to_char(decode(g_collection_criteria,
2532 'GL', case when gl_date >= event_date
2533 then gl_date
2534 else decode(aging_flag, 'N', gl_date, event_date) end,
2535 event_date), 'J')) time_id,
2536 decode(g_collection_criteria,
2537 'GL', case when gl_date >= event_date
2538 then gl_date
2539 else decode(aging_flag, 'N', gl_date, event_date) end,
2540 event_date) time_id_date,
2541 next_aging_date,
2542 bill_to_customer_id,
2543 bill_to_site_use_id,
2544 org_id,
2545 customer_trx_id,
2546 payment_schedule_id,
2547 adjustment_id,
2548 receivable_application_id,
2549 appl_trx_date,
2550 trx_date,
2551 due_date,
2552 event_date,
2553 (case when marker=1
2554 then bucket_amount_trx
2555 when marker=2 and aging_flag='Y'
2556 then -1*bucket_amount_trx
2557 else 0 end) current_bucket_3_amount_trx,
2558 (case when marker=1
2559 then bucket_amount_func
2560 when marker=2 and aging_flag='Y'
2561 then -1*bucket_amount_func
2562 else 0 end) current_bucket_3_amount_func,
2563 (case when marker=1
2564 then bucket_amount_prim
2565 when marker=2 and aging_flag='Y'
2566 then -1*bucket_amount_prim
2567 else 0 end) current_bucket_3_amount_prim,
2568 (case when marker=1
2569 then bucket_amount_sec
2570 when marker=2 and aging_flag='Y'
2571 then -1*bucket_amount_sec
2572 else 0 end) current_bucket_3_amount_sec,
2573 ----------------
2574 (case when marker=2
2575 then bucket_amount_trx
2576 when marker=3 and aging_flag='Y'
2577 then -1*bucket_amount_trx
2578 else 0 end) current_bucket_2_amount_trx,
2579 (case when marker=2
2580 then bucket_amount_func
2581 when marker=3 and aging_flag='Y'
2582 then -1*bucket_amount_func
2583 else 0 end) current_bucket_2_amount_func,
2584 (case when marker=2
2585 then bucket_amount_prim
2586 when marker=3 and aging_flag='Y'
2587 then -1*bucket_amount_prim
2588 else 0 end) current_bucket_2_amount_prim,
2589 (case when marker=2
2590 then bucket_amount_sec
2591 when marker=3 and aging_flag='Y'
2592 then -1*bucket_amount_sec
2593 else 0 end) current_bucket_2_amount_sec,
2594 ----------------
2595 (case when marker=3
2596 then bucket_amount_trx
2597 when marker=4 and aging_flag='Y'
2598 then -1*bucket_amount_trx
2599 else 0 end) current_bucket_1_amount_trx,
2600 (case when marker=3
2601 then bucket_amount_func
2602 when marker=4 and aging_flag='Y'
2603 then -1*bucket_amount_func
2604 else 0 end) current_bucket_1_amount_func,
2605 (case when marker=3
2606 then bucket_amount_prim
2607 when marker=4 and aging_flag='Y'
2608 then -1*bucket_amount_prim
2609 else 0 end) current_bucket_1_amount_prim,
2610 (case when marker=3
2611 then bucket_amount_sec
2612 when marker=4 and aging_flag='Y'
2613 then -1*bucket_amount_sec
2614 else 0 end) current_bucket_1_amount_sec,
2615 ----------------
2616 (case when marker=4
2617 then bucket_amount_trx
2618 when marker=5 and aging_flag='Y'
2619 then -1*bucket_amount_trx
2620 else 0 end) past_due_bucket_1_amount_trx,
2621 (case when marker=4
2622 then bucket_amount_func
2623 when marker=5 and aging_flag='Y'
2624 then -1*bucket_amount_func
2625 else 0 end) past_due_bucket_1_amount_func,
2626 (case when marker=4
2627 then bucket_amount_prim
2628 when marker=5 and aging_flag='Y'
2629 then -1*bucket_amount_prim
2630 else 0 end) past_due_bucket_1_amount_prim,
2631 (case when marker=4
2632 then bucket_amount_sec
2633 when marker=5 and aging_flag='Y'
2634 then -1*bucket_amount_sec
2635 else 0 end) past_due_bucket_1_amount_sec,
2636 ------------------
2637 (case when marker=5
2638 then bucket_amount_trx
2639 when marker=6 and aging_flag='Y'
2640 then -1*bucket_amount_trx
2641 else 0 end) past_due_bucket_2_amount_trx,
2642 (case when marker=5
2643 then bucket_amount_func
2644 when marker=6 and aging_flag='Y'
2645 then -1*bucket_amount_func
2646 else 0 end) past_due_bucket_2_amount_func,
2647 (case when marker=5
2648 then bucket_amount_prim
2649 when marker=6 and aging_flag='Y'
2650 then -1*bucket_amount_prim
2651 else 0 end) past_due_bucket_2_amount_prim,
2652 (case when marker=5
2653 then bucket_amount_sec
2654 when marker=6 and aging_flag='Y'
2655 then -1*bucket_amount_sec
2656 else 0 end) past_due_bucket_2_amount_sec,
2657 ------------------
2658 (case when marker=6
2659 then bucket_amount_trx
2660 when marker=7 and aging_flag='Y'
2661 then -1*bucket_amount_trx
2662 else 0 end) past_due_bucket_3_amount_trx,
2663 (case when marker=6
2664 then bucket_amount_func
2665 when marker=7 and aging_flag='Y'
2666 then -1*bucket_amount_func
2667 else 0 end) past_due_bucket_3_amount_func,
2668 (case when marker=6
2669 then bucket_amount_prim
2670 when marker=7 and aging_flag='Y'
2671 then -1*bucket_amount_prim
2672 else 0 end) past_due_bucket_3_amount_prim,
2673 (case when marker=6
2674 then bucket_amount_sec
2675 when marker=7 and aging_flag='Y'
2676 then -1*bucket_amount_sec
2677 else 0 end) past_due_bucket_3_amount_sec,
2678 ------------------
2679 (case when marker=7
2680 then bucket_amount_trx
2681 when marker=8 and aging_flag='Y'
2682 then -1*bucket_amount_trx
2683 else 0 end) past_due_bucket_4_amount_trx,
2684 (case when marker=7
2685 then bucket_amount_func
2686 when marker=8 and aging_flag='Y'
2687 then -1*bucket_amount_func
2688 else 0 end) past_due_bucket_4_amount_func,
2689 (case when marker=7
2690 then bucket_amount_prim
2691 when marker=8 and aging_flag='Y'
2692 then -1*bucket_amount_prim
2693 else 0 end) past_due_bucket_4_amount_prim,
2694 (case when marker=7
2695 then bucket_amount_sec
2696 when marker=8 and aging_flag='Y'
2697 then -1*bucket_amount_sec
2698 else 0 end) past_due_bucket_4_amount_sec,
2699 ---------------
2700 (case when marker=8
2701 then bucket_amount_trx
2702 when marker=9 and aging_flag='Y'
2703 then -1*bucket_amount_trx
2704 else 0 end) past_due_bucket_5_amount_trx,
2705 (case when marker=8
2706 then bucket_amount_func
2707 when marker=9 and aging_flag='Y'
2708 then -1*bucket_amount_func
2709 else 0 end) past_due_bucket_5_amount_func,
2710 (case when marker=8
2711 then bucket_amount_prim
2712 when marker=9 and aging_flag='Y'
2713 then -1*bucket_amount_prim
2714 else 0 end) past_due_bucket_5_amount_prim,
2715 (case when marker=8
2716 then bucket_amount_sec
2717 when marker=9 and aging_flag='Y'
2718 then -1*bucket_amount_sec
2719 else 0 end) past_due_bucket_5_amount_sec,
2720 ---------------
2721 (case when marker=9
2722 then bucket_amount_trx
2723 when marker=10 and aging_flag='Y'
2724 then -1*bucket_amount_trx
2725 else 0 end) past_due_bucket_6_amount_trx,
2726 (case when marker=9
2727 then bucket_amount_func
2728 when marker=10 and aging_flag='Y'
2729 then -1*bucket_amount_func
2730 else 0 end) past_due_bucket_6_amount_func,
2731 (case when marker=9
2732 then bucket_amount_prim
2733 when marker=10 and aging_flag='Y'
2734 then -1*bucket_amount_prim
2735 else 0 end) past_due_bucket_6_amount_prim,
2736 (case when marker=9
2737 then bucket_amount_sec
2738 when marker=10 and aging_flag='Y'
2739 then -1*bucket_amount_sec
2740 else 0 end) past_due_bucket_6_amount_sec,
2741 ---------------
2742 (case when marker=10
2743 then bucket_amount_trx
2744 else 0 end) past_due_bucket_7_amount_trx,
2745 (case when marker=10
2746 then bucket_amount_func
2747 else 0 end) past_due_bucket_7_amount_func,
2748 (case when marker=10
2749 then bucket_amount_prim
2750 else 0 end) past_due_bucket_7_amount_prim,
2751 (case when marker=10
2752 then bucket_amount_sec
2753 else 0 end) past_due_bucket_7_amount_sec,
2754 ---------------
2755 decode(aging_flag,'N',unaged_amount_trx, 0) unaged_amount_trx,
2756 decode(aging_flag,'N',unaged_amount_func, 0) unaged_amount_func,
2757 decode(aging_flag,'N',unaged_amount_prim, 0) unaged_amount_prim,
2758 decode(aging_flag,'N',unaged_amount_sec, 0) unaged_amount_sec,
2759 decode(aging_flag,'N',on_acct_credit_amount_trx, 0) on_acct_credit_amount_trx,
2760 decode(aging_flag,'N',on_acct_credit_amount_func, 0) on_acct_credit_amount_func,
2761 decode(aging_flag,'N',on_acct_credit_amount_prim, 0) on_acct_credit_amount_prim,
2762 decode(aging_flag,'N',on_acct_credit_amount_sec, 0) on_acct_credit_amount_sec,
2763 class,
2764 decode(aging_flag,'N',billing_activity_flag, 'N') billing_activity_flag,
2765 decode(aging_flag,'N',billed_amount_flag, 'N') billed_amount_flag,
2766 on_account_credit_flag,
2767 decode(aging_flag,'N',unapplied_deposit_flag, 'N') unapplied_deposit_flag,
2768 action,
2769 actual_date_closed,
2770 aging_flag
2771 FROM
2772 (SELECT /*+ parallel(M) */
2773 m.marker,
2774 v.bill_to_customer_id,
2775 v.bill_to_site_use_id,
2776 v.org_id,
2777 v.customer_trx_id,
2778 v.payment_schedule_id,
2779 v.adjustment_id,
2780 v.receivable_application_id,
2781 v.appl_trx_date,
2782 v.due_date,
2783 v.trx_date,
2784 v.gl_date,
2785 v.bucket_amount_trx,
2786 v.bucket_amount_func,
2787 v.bucket_amount_prim,
2788 v.bucket_amount_sec,
2789 v.unaged_amount_trx,
2790 v.unaged_amount_func,
2791 v.unaged_amount_prim,
2792 v.unaged_amount_sec,
2793 v.on_acct_credit_amount_trx,
2794 v.on_acct_credit_amount_func,
2795 v.on_acct_credit_amount_prim,
2796 v.on_acct_credit_amount_sec,
2797 v.class,
2798 v.billing_activity_flag,
2799 v.billed_amount_flag,
2800 v.on_account_credit_flag,
2801 v.unapplied_deposit_flag,
2802 v.action,
2803 v.actual_date_closed,
2804 decode(m.marker,
2805 1, case when trunc(v.appl_trx_date)<=trunc(v.due_date)-g_current_bucket_3_low
2806 then appl_trx_date
2807 else null end,
2808 2, case when g_current_bucket_2_high is not null
2809 and trunc(v.appl_trx_date) < trunc(v.due_date)-g_current_bucket_2_high
2810 and actual_date_closed >= trunc(v.due_date)-g_current_bucket_2_high
2811 and trunc(v.due_date)-g_current_bucket_2_high <= g_sysdate
2812 then trunc(v.due_date)-g_current_bucket_2_high
2813 when g_current_bucket_2_high is not null
2814 and trunc(v.appl_trx_date) >= trunc(v.due_date)-g_current_bucket_2_high
2815 and trunc(v.appl_trx_date) <= trunc(v.due_date)-g_current_bucket_2_low
2816 then v.appl_trx_date
2817 when g_current_bucket_2_high is null
2818 and trunc(v.appl_trx_date) <= trunc(v.due_date)-g_current_bucket_2_low
2819 then v.appl_trx_date
2820 else null end,
2821 3, case when g_current_bucket_1_high is not null
2822 and trunc(v.appl_trx_date) < trunc(v.due_date)-g_current_bucket_1_high
2823 and actual_date_closed >= trunc(v.due_date)-g_current_bucket_1_high
2824 and trunc(v.due_date)-g_current_bucket_1_high <= g_sysdate
2825 then trunc(v.due_date)-g_current_bucket_1_high
2826 when g_current_bucket_1_high is not null
2827 and trunc(v.appl_trx_date) >= trunc(v.due_date)-g_current_bucket_1_high
2828 and trunc(v.appl_trx_date) <= trunc(v.due_date) - g_current_bucket_1_low
2829 then v.appl_trx_date
2830 when g_current_bucket_1_high is null
2831 and trunc(v.appl_trx_date) <= trunc(v.due_date) - g_current_bucket_1_low
2832 then v.appl_trx_date
2833 else null end,
2834 4, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_1_low
2835 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_1_low
2836 and trunc(v.due_date)+g_past_due_bucket_1_low <= g_sysdate
2837 then trunc(v.due_date) + g_past_due_bucket_1_low
2838 when g_past_due_bucket_1_high is not null
2839 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_1_low
2840 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_1_high
2841 then v.appl_trx_date
2842 when g_past_due_bucket_1_high is null
2843 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_1_low
2844 then v.appl_trx_date
2845 else null end,
2846 5, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_2_low
2847 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_2_low
2848 and trunc(v.due_date)+g_past_due_bucket_2_low <= g_sysdate
2849 then trunc(v.due_date) + g_past_due_bucket_2_low
2850 when g_past_due_bucket_2_high is not null
2851 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_2_low
2852 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_2_high
2853 then v.appl_trx_date
2854 when g_past_due_bucket_2_high is null
2855 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_2_low
2856 then v.appl_trx_date
2857 else null end,
2858 6, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_3_low
2859 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_3_low
2860 and trunc(v.due_date)+g_past_due_bucket_3_low <= g_sysdate
2861 then trunc(v.due_date) + g_past_due_bucket_3_low
2862 when g_past_due_bucket_3_high is not null
2863 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_3_low
2864 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_3_high
2865 then v.appl_trx_date
2866 when g_past_due_bucket_3_high is null
2867 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_3_low
2868 then v.appl_trx_date
2869 else null end,
2870 7, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_4_low
2871 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_4_low
2872 and trunc(v.due_date)+g_past_due_bucket_4_low <= g_sysdate
2873 then trunc(v.due_date) + g_past_due_bucket_4_low
2874 when g_past_due_bucket_4_high is not null
2875 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_4_low
2876 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_4_high
2877 then v.appl_trx_date
2878 when g_past_due_bucket_4_high is null
2879 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_4_low
2880 then v.appl_trx_date
2881 else null end,
2882 8, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_5_low
2883 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_5_low
2884 and trunc(v.due_date)+g_past_due_bucket_5_low <= g_sysdate
2885 then trunc(v.due_date) + g_past_due_bucket_5_low
2886 when g_past_due_bucket_5_high is not null
2887 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_5_low
2888 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_5_high
2889 then v.appl_trx_date
2890 when g_past_due_bucket_5_high is null
2891 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_5_low
2892 then v.appl_trx_date
2893 else null end,
2894 9, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_6_low
2895 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_6_low
2896 and trunc(v.due_date)+g_past_due_bucket_6_low <= g_sysdate
2897 then trunc(v.due_date) + g_past_due_bucket_6_low
2898 when g_past_due_bucket_6_high is not null
2899 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_6_low
2900 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_6_high
2901 then v.appl_trx_date
2902 when g_past_due_bucket_6_high is null
2903 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_6_low
2904 then v.appl_trx_date
2905 else null end,
2906 10, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_7_low
2907 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_7_low
2908 and trunc(v.due_date)+g_past_due_bucket_7_low <= g_sysdate
2909 then trunc(v.due_date) + g_past_due_bucket_7_low
2910 when trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_7_low
2911 then v.appl_trx_date
2912 else null end) event_date,
2913 decode(m.marker,
2914 1, case when actual_date_closed >= trunc(v.due_date)-g_current_bucket_2_high
2915 then trunc(v.due_date)-g_current_bucket_2_high
2916 else null end,
2917 2, case when actual_date_closed >= trunc(v.due_date)-g_current_bucket_1_high
2918 then trunc(v.due_date)-g_current_bucket_1_high
2919 else null end,
2920 3, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_1_low
2921 then trunc(v.due_date)+g_past_due_bucket_1_low
2922 else null end,
2923 4, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_2_low
2924 then trunc(v.due_date)+g_past_due_bucket_2_low
2925 else null end,
2926 5, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_3_low
2927 then trunc(v.due_date)+g_past_due_bucket_3_low
2928 else null end,
2929 6, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_4_low
2930 then trunc(v.due_date)+g_past_due_bucket_4_low
2931 else null end,
2932 7, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_5_low
2933 then trunc(v.due_date)+g_past_due_bucket_5_low
2934 else null end,
2935 8, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_6_low
2936 then trunc(v.due_date)+g_past_due_bucket_6_low
2937 else null end,
2938 9, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_7_low
2939 then trunc(v.due_date)+g_past_due_bucket_7_low
2940 else null end,
2941 10, null) next_aging_date,
2942 decode(m.marker,
2943 1, 'N',
2944 2, case when g_current_bucket_2_high is not null
2945 and trunc(v.appl_trx_date) < trunc(v.due_date)-g_current_bucket_2_high
2946 and actual_date_closed >= trunc(v.due_date)-g_current_bucket_2_high
2947 and trunc(v.due_date)-g_current_bucket_2_high <= g_sysdate
2948 then 'Y'
2949 else 'N' end,
2950 3, case when g_current_bucket_1_high is not null
2951 and trunc(v.appl_trx_date) < trunc(v.due_date)-g_current_bucket_1_high
2952 and actual_date_closed >= trunc(v.due_date)-g_current_bucket_1_high
2953 and trunc(v.due_date)-g_current_bucket_1_high <= g_sysdate
2954 then 'Y'
2955 else 'N' end,
2956 4, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_1_low
2957 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_1_low
2958 and trunc(v.due_date)+g_past_due_bucket_1_low <= g_sysdate
2959 then 'Y'
2960 else 'N' end,
2961 5, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_2_low
2962 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_2_low
2963 and trunc(v.due_date)+g_past_due_bucket_2_low <= g_sysdate
2964 then 'Y'
2965 else 'N' end,
2966 6, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_3_low
2967 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_3_low
2968 and trunc(v.due_date)+g_past_due_bucket_3_low <= g_sysdate
2969 then 'Y'
2970 else 'N' end,
2971 7, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_4_low
2972 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_4_low
2973 and trunc(v.due_date)+g_past_due_bucket_4_low <= g_sysdate
2974 then 'Y'
2975 else 'N' end,
2976 8, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_5_low
2977 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_5_low
2978 and trunc(v.due_date)+g_past_due_bucket_5_low <= g_sysdate
2979 then 'Y'
2980 else 'N' end,
2981 9, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_6_low
2982 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_6_low
2983 and trunc(v.due_date)+g_past_due_bucket_6_low <= g_sysdate
2984 then 'Y'
2985 else 'N' end,
2986 10, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_7_low
2987 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_7_low
2988 and trunc(v.due_date)+g_past_due_bucket_7_low <= g_sysdate
2989 then 'Y'
2990 else 'N' end) aging_flag
2991 FROM (--Payment Schedules
2992 select /*+ parallel(SCH) */
2993 sch.bill_to_customer_id,
2994 sch.bill_to_site_use_id,
2995 sch.org_id,
2996 sch.customer_trx_id,
2997 sch.payment_schedule_id,
2998 null adjustment_id,
2999 null receivable_application_id,
3000 sch.trx_date appl_trx_date,
3001 sch.trx_date,
3002 sch.due_date,
3003 sch.gl_date,
3004 decode(sch.class,
3005 'CM',0,
3006 sch.amount_due_original_trx) bucket_amount_trx,
3007 decode(sch.class,
3008 'CM',0,
3009 sch.amount_due_original_func) bucket_amount_func,
3010 decode(sch.class,
3011 'CM',0,
3012 sch.amount_due_original_prim) bucket_amount_prim,
3013 decode(sch.class,
3014 'CM',0,
3015 sch.amount_due_original_sec) bucket_amount_sec,
3016 sch.amount_due_original_trx unaged_amount_trx,
3017 sch.amount_due_original_func unaged_amount_func,
3018 sch.amount_due_original_prim unaged_amount_prim,
3019 sch.amount_due_original_sec unaged_amount_sec,
3020 decode (sch.class, 'CM', sch.amount_due_original_trx, 0) on_acct_credit_amount_trx,
3021 decode (sch.class, 'CM', sch.amount_due_original_func, 0) on_acct_credit_amount_func,
3022 decode (sch.class, 'CM', sch.amount_due_original_prim, 0) on_acct_credit_amount_prim,
3023 decode (sch.class, 'CM', sch.amount_due_original_sec, 0) on_acct_credit_amount_sec,
3024 sch.class,
3025 'Y' billing_activity_flag,
3026 case when sch.class not in ('CB', 'BR')
3027 and dso.dso_value = 'Y' then
3028 'Y'
3029 else 'N' end billed_amount_flag,
3030 null on_account_credit_flag, --no longer used after adding on_acct_credit_amount in bug 6053566
3031 decode(sch.class,'DEP','Y','N') unapplied_deposit_flag,
3032 'Transaction' action,
3033 sch.actual_date_closed
3034 from fii_ar_pmt_schedules_f sch,
3035 fii_ar_dso_setup dso
3036 where sch.class <> 'PMT'
3037 and dso.dso_group='TC'
3038 and dso.dso_type = sch.class
3039
3040 union all
3041
3042 --Applications
3043 select /*+ parallel(RCT) parallel(SCH) */
3044 rct.collector_bill_to_customer_id,
3045 rct.collector_bill_to_site_use_id,
3046 rct.org_id,
3047 sch.customer_trx_id,
3048 sch.payment_schedule_id,
3049 null adjustment_id,
3050 rct.receivable_application_id,
3051 rct.apply_date appl_trx_date,
3052 sch.trx_date,
3053 sch.due_date,
3054 decode(g_collection_criteria,
3055 'GL', rct.filter_date,
3056 null) gl_date,
3057 -1*(rct.amount_applied_trx
3058 +nvl(rct.earned_discount_amount_trx,0)
3059 +nvl(rct.unearned_discount_amount_trx,0)) bucket_amount_trx,
3060 -1*(rct.amount_applied_trx_func
3061 +nvl(rct.earned_discount_amount_func,0)
3062 +nvl(rct.unearned_discount_amount_func,0)) bucket_amount_func,
3063 -1*(rct.amount_applied_trx_prim
3064 +nvl(rct.earned_discount_amount_prim,0)
3065 +nvl(rct.unearned_discount_amount_prim,0)) bucket_amount_prim,
3066 -1*(rct.amount_applied_trx_sec
3067 +nvl(rct.earned_discount_amount_sec,0)
3068 +nvl(rct.unearned_discount_amount_sec,0)) bucket_amount_sec,
3069 -1*rct.amount_applied_trx unaged_amount_trx,
3070 -1*rct.amount_applied_trx_func unaged_amount_func,
3071 -1*rct.amount_applied_trx_prim unaged_amount_prim,
3072 -1*rct.amount_applied_trx_sec unaged_amount_sec,
3073 --Added for bug 6053566
3074 case when rct.application_type = 'CASH' and sch.class = 'CM'
3075 then rct.amount_applied_trx
3076 when rct.application_type = 'CM'
3077 then -1*rct.amount_applied_rct
3078 else 0 end on_acct_credit_amount_trx,
3079 case when rct.application_type = 'CASH' and sch.class = 'CM'
3080 then rct.amount_applied_trx_func
3081 when rct.application_type = 'CM'
3082 then -1*rct.amount_applied_rct_func
3083 else 0 end on_acct_credit_amount_func,
3084 case when rct.application_type = 'CASH' and sch.class = 'CM'
3085 then rct.amount_applied_trx_prim
3086 when rct.application_type = 'CM'
3087 then -1*rct.amount_applied_rct_prim
3088 else 0 end on_acct_credit_amount_prim,
3089 case when rct.application_type = 'CASH' and sch.class = 'CM'
3090 then rct.amount_applied_trx_sec
3091 when rct.application_type = 'CM'
3092 then -1*rct.amount_applied_rct_sec
3093 else 0 end on_acct_credit_amount_sec,
3094
3095 sch.class,
3096 'N' billing_activity_flag,
3097 'N' billed_amount_flag,
3098 null on_account_credit_flag, --this is no longer used after adding on_acct_credit_amount in bug 6053566
3099 case when rct.application_type = 'CM' and sch.class='DEP'
3100 and rct.cm_previous_customer_trx_id is not null
3101 then 'Y'
3102 else 'N' end unapplied_deposit_flag,
3103 'Application' action,
3104 sch.actual_date_closed
3105 from fii_ar_receipts_f rct,
3106 fii_ar_pmt_schedules_f sch
3107 where rct.application_status = 'APP'
3108 and sch.class <> 'PMT'
3109 and rct.applied_payment_schedule_id = sch.payment_schedule_id
3110
3111 union all
3112
3113 --Adjustments
3114 select /*+ parallel(ADJ) parallel(SCH) */
3115 adj.bill_to_customer_id,
3116 adj.bill_to_site_use_id,
3117 adj.org_id,
3118 sch.customer_trx_id,
3119 sch.payment_schedule_id,
3120 adj.adjustment_id,
3121 null receivable_application_id,
3122 adj.apply_date appl_trx_date,
3123 sch.trx_date,
3124 sch.due_date,
3125 adj.gl_date,
3126 adj.amount_trx bucket_amount_trx,
3127 adj.amount_func bucket_amount_func,
3128 adj.amount_prim bucket_amount_prim,
3129 adj.amount_sec bucket_amount_sec,
3130 adj.amount_trx unaged_amount_trx,
3131 adj.amount_func unaged_amount_func,
3132 adj.amount_prim unaged_amount_prim,
3133 adj.amount_sec unaged_amount_sec,
3134 0 on_acct_credit_amount_trx,
3135 0 on_acct_credit_amount_func,
3136 0 on_acct_credit_amount_prim,
3137 0 on_acct_credit_amount_sec,
3138 sch.class,
3139 'N' billing_activity_flag,
3140 case when sch.class not in ('CB', 'BR')
3141 and (adj.adj_class not in ('CB', 'BR') or adj.adj_class is null)
3142 and schdso.dso_value = 'Y'
3143 and (adjdso.dso_value is null or adjdso.dso_value = 'Y')
3144 then 'Y'
3145 else 'N' end billed_amount_flag,
3146 null on_account_credit_flag,
3147 decode(adj.adj_class,'DEP','Y','N') unapplied_deposit_flag,
3148 'Adjustment' action,
3149 sch.actual_date_closed
3150 from fii_ar_adjustments_f adj,
3151 fii_ar_pmt_schedules_f sch,
3152 fii_ar_dso_setup schdso,
3153 fii_ar_dso_setup adjdso
3154 where adj.payment_schedule_id = sch.payment_schedule_id
3155 and sch.class <> 'PMT'
3156 and schdso.dso_group='TC'
3157 and schdso.dso_type = sch.class
3158 and nvl(adjdso.dso_group,'TC')='TC'
3159 and adj.adj_class = adjdso.dso_type (+) ) v,
3160 fii_ar_marker_gt m)
3161 WHERE event_date is not null)
3162 GROUP BY time_id,
3163 time_id_date,
3164 bill_to_customer_id,
3165 bill_to_site_use_id,
3166 org_id,
3167 customer_trx_id,
3168 payment_schedule_id,
3169 adjustment_id,
3170 receivable_application_id,
3171 appl_trx_date,
3172 trx_date,
3173 due_date,
3174 event_date,
3175 current_bucket_1_amount_trx,
3176 current_bucket_1_amount_func,
3177 current_bucket_1_amount_prim,
3178 current_bucket_1_amount_sec,
3179 current_bucket_2_amount_trx,
3180 current_bucket_2_amount_func,
3181 current_bucket_2_amount_prim,
3182 current_bucket_2_amount_sec,
3183 current_bucket_3_amount_trx,
3184 current_bucket_3_amount_func,
3185 current_bucket_3_amount_prim,
3186 current_bucket_3_amount_sec,
3187 past_due_bucket_1_amount_trx,
3188 past_due_bucket_1_amount_func,
3189 past_due_bucket_1_amount_prim,
3190 past_due_bucket_1_amount_sec,
3191 past_due_bucket_2_amount_trx,
3192 past_due_bucket_2_amount_func,
3193 past_due_bucket_2_amount_prim,
3194 past_due_bucket_2_amount_sec,
3195 past_due_bucket_3_amount_trx,
3196 past_due_bucket_3_amount_func,
3197 past_due_bucket_3_amount_prim,
3198 past_due_bucket_3_amount_sec,
3199 past_due_bucket_4_amount_trx,
3200 past_due_bucket_4_amount_func,
3201 past_due_bucket_4_amount_prim,
3202 past_due_bucket_4_amount_sec,
3203 past_due_bucket_5_amount_trx,
3204 past_due_bucket_5_amount_func,
3205 past_due_bucket_5_amount_prim,
3206 past_due_bucket_5_amount_sec,
3207 past_due_bucket_6_amount_trx,
3208 past_due_bucket_6_amount_func,
3209 past_due_bucket_6_amount_prim,
3210 past_due_bucket_6_amount_sec,
3211 past_due_bucket_7_amount_trx,
3212 past_due_bucket_7_amount_func,
3213 past_due_bucket_7_amount_prim,
3214 past_due_bucket_7_amount_sec,
3215 next_aging_date,
3216 unaged_amount_trx,
3217 unaged_amount_func,
3218 unaged_amount_prim,
3219 unaged_amount_sec,
3220 on_acct_credit_amount_trx,
3221 on_acct_credit_amount_func,
3222 on_acct_credit_amount_prim,
3223 on_acct_credit_amount_sec,
3224 class,
3225 billing_activity_flag,
3226 billed_amount_flag,
3227 on_account_credit_flag,
3228 unapplied_deposit_flag,
3229 action,
3230 actual_date_closed,
3231 aging_flag
3232
3233 --order by payment_schedule_id, event_date, receivable_application_id, adjustment_id
3234 )
3235 )
3236 GROUP BY time_id,
3237 time_id_date,
3238 event_date,
3239 bill_to_customer_id,
3240 bill_to_site_use_id,
3241 org_id,
3242 customer_trx_id,
3243 payment_schedule_id,
3244 adjustment_id,
3245 receivable_application_id,
3246 appl_trx_date,
3247 trx_date,
3248 due_date,
3249 next_aging_date,
3250 unaged_amount_trx,
3251 unaged_amount_func,
3252 unaged_amount_prim,
3253 unaged_amount_sec,
3254 on_acct_credit_amount_trx,
3255 on_acct_credit_amount_func,
3256 on_acct_credit_amount_prim,
3257 on_acct_credit_amount_sec,
3258 class,
3259 billing_activity_flag,
3260 billed_amount_flag,
3261 on_account_credit_flag,
3262 unapplied_deposit_flag,
3263 action,
3264 aging_flag;
3265
3266
3267 if g_debug_flag = 'Y' then
3268 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_AGING_RECEIVABLES');
3269 FII_UTIL.stop_timer;
3270 FII_UTIL.print_timer('Duration');
3271 FII_UTIL.put_line('');
3272 end if;
3273
3274 g_state := 'Analyzing FII_AR_AGING_RECEIVABLES table';
3275 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_AGING_RECEIVABLES');
3276
3277 EXCEPTION
3278 WHEN OTHERS THEN
3279 g_errbuf:=sqlerrm;
3280 g_retcode:= -1;
3281 g_exception_msg := g_retcode || ':' || g_errbuf;
3282 FII_UTIL.put_line('Error occured while ' || g_state);
3283 FII_UTIL.put_line(g_exception_msg);
3284 RAISE;
3285
3286 END POPULATE_RECEIVABLES_AGING;
3287
3288
3289 ------------------------------------------------------------------
3290 -- Procedure POPULATE_RECEIPTS_AGING
3291 -- Purpose
3292 -- This procedure inserts records in FII_AR_AGING_RECEIPTS
3293 ------------------------------------------------------------------
3294 PROCEDURE POPULATE_RECEIPTS_AGING IS
3295
3296 BEGIN
3297
3298 g_state := 'Truncating table MLOG$_FII_AR_AGING_RECEIPTS';
3299 TRUNCATE_TABLE('MLOG$_FII_AR_AGING_RECEIPTS');
3300 g_state := 'Truncating table FII_AR_AGING_RECEIPTS';
3301 TRUNCATE_TABLE('FII_AR_AGING_RECEIPTS');
3302
3303 g_state := 'Truncating table FII_AR_MARKER_GT';
3304 TRUNCATE_TABLE('FII_AR_MARKER_GT');
3305
3306 Insert into fii_ar_marker_gt
3307 (marker)
3308 (SELECT 1 marker FROM DUAL UNION ALL
3309 SELECT 2 marker FROM DUAL WHERE g_rct_bucket_2_low is not null UNION ALL
3310 SELECT 3 marker FROM DUAL WHERE g_rct_bucket_3_low is not null);
3311
3312 g_state := 'Populating FII_AR_AGING_RECEIPTS';
3313 if g_debug_flag = 'Y' then
3314 FII_UTIL.put_line(g_state);
3315 FII_UTIL.start_timer;
3316 FII_UTIL.put_line('');
3317 end if;
3318
3319
3320 INSERT /*+ append parallel(F) */ INTO FII_AR_AGING_RECEIPTS F
3321 (time_id,
3322 event_date,
3323 next_aging_date,
3324 bill_to_customer_id,
3325 bill_to_site_use_id,
3326 org_id,
3327 cash_receipt_id,
3328 aging_bucket_1_amount_func,
3329 aging_bucket_1_amount_prim,
3330 aging_bucket_1_amount_sec,
3331 aging_bucket_1_count,
3332 aging_bucket_2_amount_func,
3333 aging_bucket_2_amount_prim,
3334 aging_bucket_2_amount_sec,
3335 aging_bucket_2_count,
3336 aging_bucket_3_amount_func,
3337 aging_bucket_3_amount_prim,
3338 aging_bucket_3_amount_sec,
3339 aging_bucket_3_count,
3340 total_unapplied_count,
3341 creation_date,
3342 created_by,
3343 last_update_date,
3344 last_updated_by,
3345 last_update_login)
3346 SELECT time_id,
3347 event_date,
3348 next_aging_date,
3349 bill_to_customer_id,
3350 bill_to_site_use_id,
3351 org_id,
3352 cash_receipt_id,
3353 sum(aging_bucket_1_amount_func),
3354 sum(aging_bucket_1_amount_prim),
3355 sum(aging_bucket_1_amount_sec),
3356 sum(aging_bucket_1_count),
3357 sum(aging_bucket_2_amount_func),
3358 sum(aging_bucket_2_amount_prim),
3359 sum(aging_bucket_2_amount_sec),
3360 sum(aging_bucket_2_count),
3361 sum(aging_bucket_3_amount_func),
3362 sum(aging_bucket_3_amount_prim),
3363 sum(aging_bucket_3_amount_sec),
3364 sum(aging_bucket_3_count),
3365 sum(total_unapplied_count),
3366 sysdate, --CREATION_DATE,
3367 g_fii_user_id, --CREATED_BY,
3368 sysdate, --LAST_UPDATE_DATE,
3369 g_fii_user_id, --LAST_UPDATED_BY,
3370 g_fii_login_id --LAST_UPDATE_LOGIN
3371 FROM
3372 (SELECT time_id,
3373 next_aging_date,
3374 bill_to_customer_id,
3375 bill_to_site_use_id,
3376 org_id,
3377 cash_receipt_id,
3378 event_date,
3379 aging_bucket_1_amount_func,
3380 aging_bucket_1_amount_prim,
3381 aging_bucket_1_amount_sec,
3382 (case when aging_bucket_1_amount_func = aging_bucket_1_amt_func_cum
3383 AND aging_bucket_1_amount_func <>0
3384 then 1
3385 when aging_bucket_1_amt_func_cum = 0
3386 AND aging_bucket_1_amount_func <>0
3387 then -1
3388 else 0 end) aging_bucket_1_count,
3389 aging_bucket_2_amount_func,
3390 aging_bucket_2_amount_prim,
3391 aging_bucket_2_amount_sec,
3392 (case when aging_bucket_2_amount_func = aging_bucket_2_amt_func_cum
3393 AND aging_bucket_2_amount_func <>0
3394 then 1
3395 when aging_bucket_2_amt_func_cum = 0
3396 AND aging_bucket_2_amount_func <>0
3397 then -1
3398 else 0 end) aging_bucket_2_count,
3399 aging_bucket_3_amount_func,
3400 aging_bucket_3_amount_prim,
3401 aging_bucket_3_amount_sec,
3402 (case when aging_bucket_3_amount_func = aging_bucket_3_amt_func_cum
3403 AND aging_bucket_3_amount_func <>0
3404 then 1
3405 when aging_bucket_3_amt_func_cum = 0
3406 AND aging_bucket_3_amount_func <>0
3407 then -1
3408 else 0 end) aging_bucket_3_count,
3409 (case when total_unapplied_amount_func = total_unapplied_amt_func_cum
3410 AND total_unapplied_amount_func <>0
3411 then 1
3412 when total_unapplied_amt_func_cum = 0
3413 AND total_unapplied_amount_func <>0
3414 then -1
3415 else 0 end) total_unapplied_count,
3416 aging_flag
3417 FROM
3418 (SELECT time_id,
3419 next_aging_date,
3420 bill_to_customer_id,
3421 bill_to_site_use_id,
3422 org_id,
3423 cash_receipt_id,
3424 receivable_application_id,
3425 event_date,
3426 aging_bucket_1_amount_func,
3427 aging_bucket_1_amount_prim,
3428 aging_bucket_1_amount_sec,
3429 SUM(aging_bucket_1_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) aging_bucket_1_amt_func_cum,
3430 aging_bucket_2_amount_func,
3431 aging_bucket_2_amount_prim,
3432 aging_bucket_2_amount_sec,
3433 SUM(aging_bucket_2_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) aging_bucket_2_amt_func_cum,
3434 aging_bucket_3_amount_func,
3435 aging_bucket_3_amount_prim,
3436 aging_bucket_3_amount_sec,
3437 SUM(aging_bucket_3_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) aging_bucket_3_amt_func_cum,
3438 (aging_bucket_1_amount_func
3439 + aging_bucket_2_amount_func
3440 + aging_bucket_3_amount_func) total_unapplied_amount_func,
3441 (SUM(aging_bucket_1_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
3442 + SUM(aging_bucket_2_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
3443 + SUM(aging_bucket_3_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)) total_unapplied_amt_func_cum,
3444 aging_flag
3445 FROM
3446 (SELECT --to_number(to_char(event_date, 'J')) time_id,
3447 to_number(to_char(decode(g_collection_criteria,
3448 'GL', case when gl_date >= event_date
3449 then gl_date
3450 else decode(aging_flag,'N',gl_date,event_date) end,
3451 event_date), 'J')) time_id,
3452 next_aging_date,
3453 bill_to_customer_id,
3454 bill_to_site_use_id,
3455 org_id,
3456 cash_receipt_id,
3457 receivable_application_id,
3458 event_date,
3459 (case when marker=1
3460 then bucket_amount_func
3461 when marker=2 and aging_flag='Y'
3462 then -1*bucket_amount_func
3463 else 0 end) aging_bucket_1_amount_func,
3464 (case when marker=1
3465 then bucket_amount_prim
3466 when marker=2 and aging_flag='Y'
3467 then -1*bucket_amount_prim
3468 else 0 end) aging_bucket_1_amount_prim,
3469 (case when marker=1
3470 then bucket_amount_sec
3471 when marker=2 and aging_flag='Y'
3472 then -1*bucket_amount_sec
3473 else 0 end) aging_bucket_1_amount_sec,
3474 ----------------
3475 (case when marker=2
3476 then bucket_amount_func
3477 when marker=3 and aging_flag='Y'
3478 then -1*bucket_amount_func
3479 else 0 end) aging_bucket_2_amount_func,
3480 (case when marker=2
3481 then bucket_amount_prim
3482 when marker=3 and aging_flag='Y'
3483 then -1*bucket_amount_prim
3484 else 0 end) aging_bucket_2_amount_prim,
3485 (case when marker=2
3486 then bucket_amount_sec
3487 when marker=3 and aging_flag='Y'
3488 then -1*bucket_amount_sec
3489 else 0 end) aging_bucket_2_amount_sec,
3490 ----------------
3491 (case when marker=3
3492 then bucket_amount_func
3493 else 0 end) aging_bucket_3_amount_func,
3494 (case when marker=3
3495 then bucket_amount_prim
3496 else 0 end) aging_bucket_3_amount_prim,
3497 (case when marker=3
3498 then bucket_amount_sec
3499 else 0 end) aging_bucket_3_amount_sec,
3500 ---------------
3501 aging_flag
3502 FROM
3503 (SELECT m.marker,
3504 v.bill_to_customer_id,
3505 v.bill_to_site_use_id,
3506 v.org_id,
3507 v.cash_receipt_id,
3508 v.receivable_application_id,
3509 v.apply_date,
3510 v.gl_date,
3511 v.bucket_amount_func,
3512 v.bucket_amount_prim,
3513 v.bucket_amount_sec,
3514 decode(m.marker,
3515 1, case when (g_rct_bucket_1_high is not null AND trunc(v.apply_date) between trunc(v.receipt_date) and trunc(v.receipt_date)+g_rct_bucket_1_high)
3516 then v.apply_date
3517 when (g_rct_bucket_1_high is null AND trunc(v.apply_date) >= trunc(v.receipt_date))
3518 then v.apply_date
3519 else null end,
3520 2, case when trunc(v.apply_date) < trunc(v.receipt_date)+g_rct_bucket_2_low
3521 and trunc(receipt_date) + g_rct_bucket_2_low <= g_sysdate
3522 and trunc(receipt_date) + g_rct_bucket_2_low <= trunc(rct_actual_date_closed)
3523 then trunc(receipt_date) + g_rct_bucket_2_low
3524 when (g_rct_bucket_2_high is not null AND trunc(v.apply_date) between trunc(v.receipt_date)+g_rct_bucket_2_low and trunc(v.receipt_date)+g_rct_bucket_2_high)
3525 then trunc(v.apply_date)
3526 when (g_rct_bucket_2_high is null AND trunc(v.apply_date) >= trunc(v.receipt_date)+g_rct_bucket_2_low)
3527 then trunc(v.apply_date)
3528 else null end,
3529 3, case when trunc(v.apply_date) < trunc(v.receipt_date)+g_rct_bucket_3_low
3530 and trunc(receipt_date) + g_rct_bucket_3_low <= g_sysdate
3531 and trunc(receipt_date) + g_rct_bucket_3_low <= trunc(rct_actual_date_closed)
3532 then trunc(receipt_date) + g_rct_bucket_3_low
3533 when trunc(v.apply_date) >= trunc(v.receipt_date)+g_rct_bucket_3_low
3534 then trunc(v.apply_date)
3535 else null end) event_date,
3536 decode(m.marker,
3537 1, case when trunc(rct_actual_date_closed) >= trunc(v.receipt_date) + g_rct_bucket_2_low
3538 then trunc(v.receipt_date) + g_rct_bucket_2_low
3539 else null end,
3540 2, case when trunc(rct_actual_date_closed) >= trunc(receipt_date) + g_rct_bucket_3_low
3541 then trunc(receipt_date) + g_rct_bucket_3_low
3542 else null end,
3543 3, null) next_aging_date,
3544 decode(m.marker,
3545 1, 'N',
3546 2, case when trunc(v.apply_date) < trunc(v.receipt_date)+g_rct_bucket_2_low
3547 and trunc(receipt_date) + g_rct_bucket_2_low <= g_sysdate
3548 then 'Y'
3549 else'N' end,
3550 3, case when trunc(v.apply_date) < trunc(v.receipt_date)+g_rct_bucket_3_low
3551 and trunc(receipt_date) + g_rct_bucket_3_low <= g_sysdate
3552 then 'Y'
3553 else 'N' end) aging_flag
3554 FROM (--Unapplied Receipts
3555 select /*+ parallel(rct) */ rct.apply_date,
3556 rct.receipt_date,
3557 decode(g_collection_criteria,
3558 'GL', rct.filter_date,
3559 null) gl_date,
3560 rct.rct_actual_date_closed,
3561 rct.bill_to_customer_id,
3562 rct.bill_to_site_use_id,
3563 rct.org_id,
3564 rct.cash_receipt_id,
3565 rct.receivable_application_id,
3566 rct.amount_applied_rct_func bucket_amount_func,
3567 rct.amount_applied_rct_prim bucket_amount_prim,
3568 rct.amount_applied_rct_sec bucket_amount_sec
3569 from fii_ar_receipts_f rct
3570 where rct.application_status in ('UNAPP','UNID')
3571 and rct.header_status not in ('REV', 'NSF', 'STOP')
3572 --and nvl(rct.applied_payment_schedule_id,-999) <> -1 --exclude on-account receipts
3573 --and nvl(rct.applied_payment_schedule_id,-999) <> -4 --exclude claims
3574 --and nvl(rct.applied_payment_schedule_id,-999) <> -7 --exclude prepayments
3575 and nvl(rct.applied_payment_schedule_id,1) > 0 --exclude all special applications
3576 and rct.application_type = 'CASH'
3577 and rct.amount_applied_rct_func <> 0) v,
3578 (select /*+ parallel(t) */ *
3579 from fii_ar_marker_gt t) m)
3580 WHERE event_date is not null)
3581 GROUP BY time_id,
3582 bill_to_customer_id,
3583 bill_to_site_use_id,
3584 org_id,
3585 cash_receipt_id,
3586 receivable_application_id,
3587 event_date,
3588 aging_bucket_1_amount_func,
3589 aging_bucket_1_amount_prim,
3590 aging_bucket_1_amount_sec,
3591 aging_bucket_2_amount_func,
3592 aging_bucket_2_amount_prim,
3593 aging_bucket_2_amount_sec,
3594 aging_bucket_3_amount_func,
3595 aging_bucket_3_amount_prim,
3596 aging_bucket_3_amount_sec,
3597 next_aging_date,
3598 aging_flag
3599
3600 order by receivable_application_id, event_date
3601 )
3602 )
3603 GROUP BY time_id,
3604 event_date,
3605 bill_to_customer_id,
3606 bill_to_site_use_id,
3607 org_id,
3608 cash_receipt_id,
3609 next_aging_date
3610 HAVING sum(aging_bucket_1_amount_func) <> 0
3611 or
3612 sum(aging_bucket_2_amount_func) <> 0
3613 or
3614 sum(aging_bucket_3_amount_func) <>0;
3615
3616 if g_debug_flag = 'Y' then
3617 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_AGING_RECEIPTS');
3618 FII_UTIL.stop_timer;
3619 FII_UTIL.print_timer('Duration');
3620 FII_UTIL.put_line('');
3621 end if;
3622
3623 g_state := 'Analyzing FII_AR_AGING_RECEIPTS table';
3624 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_AGING_RECEIPTS');
3625
3626 EXCEPTION
3627 WHEN OTHERS THEN
3628 g_errbuf:=sqlerrm;
3629 g_retcode:= -1;
3630 g_exception_msg := g_retcode || ':' || g_errbuf;
3631 FII_UTIL.put_line('Error occured while ' || g_state);
3632 FII_UTIL.put_line(g_exception_msg);
3633 RAISE;
3634
3635 END POPULATE_RECEIPTS_AGING;
3636
3637
3638 PROCEDURE POPULATE_DISPUTES_AGING IS
3639
3640 BEGIN
3641
3642 g_state := 'Truncating table MLOG$_FII_AR_AGING_DISPUTES';
3643 TRUNCATE_TABLE('MLOG$_FII_AR_AGING_DISPUTES');
3644 g_state := 'Truncating table FII_AR_AGING_DISPUTES';
3645 TRUNCATE_TABLE('FII_AR_AGING_DISPUTES');
3646
3647 g_state := 'Populating FII_AR_AGING_DISPUTES';
3648 if g_debug_flag = 'Y' then
3649 FII_UTIL.put_line(g_state);
3650 FII_UTIL.start_timer;
3651 FII_UTIL.put_line('');
3652 end if;
3653
3654 INSERT /*+ append parallel(D) */ INTO FII_AR_AGING_DISPUTES D
3655 (time_id,
3656 event_date,
3657 next_aging_date,
3658 bill_to_customer_id,
3659 bill_to_site_use_id,
3660 org_id,
3661 customer_trx_id,
3662 payment_schedule_id,
3663 due_date,
3664 current_dispute_amount_func,
3665 current_dispute_amount_prim,
3666 current_dispute_amount_sec,
3667 current_dispute_count,
3668 past_due_dispute_amount_func,
3669 past_due_dispute_amount_prim,
3670 past_due_dispute_amount_sec,
3671 past_due_dispute_count,
3672 creation_date,
3673 created_by,
3674 last_update_date,
3675 last_updated_by,
3676 last_update_login)
3677 SELECT time_id,
3678 event_date,
3679 next_aging_date,
3680 bill_to_customer_id,
3681 bill_to_site_use_id,
3682 org_id,
3683 customer_trx_id,
3684 payment_schedule_id,
3685 due_date,
3686 sum(current_dispute_amount_func),
3687 sum(current_dispute_amount_prim),
3688 sum(current_dispute_amount_sec),
3689 sum(current_dispute_count),
3690 sum(past_due_dispute_amount_func),
3691 sum(past_due_dispute_amount_prim),
3692 sum(past_due_dispute_amount_sec),
3693 sum(past_due_dispute_count),
3694 sysdate, --CREATION_DATE,
3695 g_fii_user_id, --CREATED_BY,
3696 sysdate, --LAST_UPDATE_DATE,
3697 g_fii_user_id, --LAST_UPDATED_BY,
3698 g_fii_login_id --LAST_UPDATE_LOGIN
3699 FROM (
3700
3701 SELECT time_id,
3702 event_date,
3703 next_aging_date,
3704 bill_to_customer_id,
3705 bill_to_site_use_id,
3706 org_id,
3707 customer_trx_id,
3708 payment_schedule_id,
3709 due_date,
3710 current_dispute_amount_func,
3711 current_dispute_amount_prim,
3712 current_dispute_amount_sec,
3713 SUM(current_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) current_dispute_amount_funcc,
3714 (case when current_dispute_amount_func = SUM(current_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
3715 and current_dispute_amount_func <> 0
3716 then 1
3717 when SUM(current_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) = 0
3718 AND current_dispute_amount_func <> 0
3719 then -1
3720 else 0 end) current_dispute_count,
3721 past_due_dispute_amount_func,
3722 past_due_dispute_amount_prim,
3723 past_due_dispute_amount_sec,
3724 SUM(past_due_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_dispute_amount_funcc,
3725 (case when past_due_dispute_amount_func = SUM(past_due_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
3726 and past_due_dispute_amount_func <> 0
3727 then 1
3728 when SUM(past_due_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) = 0
3729 and past_due_dispute_amount_func <> 0
3730 then -1
3731 else 0 end) past_due_dispute_count,
3732
3733 aging_flag
3734 FROM
3735 (SELECT to_number(to_char(event_date, 'J')) time_id,
3736 event_date,
3737 next_aging_date,
3738 bill_to_customer_id,
3739 bill_to_site_use_id,
3740 org_id,
3741 customer_trx_id,
3742 payment_schedule_id,
3743 due_date,
3744 (case when marker=1
3745 then bucket_amount_func
3746 when marker=2 and aging_flag='Y'
3747 then -1*bucket_amount_func
3748 else 0 end) current_dispute_amount_func,
3749 (case when marker=1
3750 then bucket_amount_prim
3751 when marker=2 and aging_flag='Y'
3752 then -1*bucket_amount_prim
3753 else 0 end) current_dispute_amount_prim,
3754 (case when marker=1
3755 then bucket_amount_sec
3756 when marker=2 and aging_flag='Y'
3757 then -1*bucket_amount_sec
3758 else 0 end) current_dispute_amount_sec,
3759 ----------------
3760 (case when marker=2
3761 then bucket_amount_func
3762 else 0 end) past_due_dispute_amount_func,
3763 (case when marker=2
3764 then bucket_amount_prim
3765 else 0 end) past_due_dispute_amount_prim,
3766 (case when marker=2
3767 then bucket_amount_sec
3768 else 0 end) past_due_dispute_amount_sec,
3769 ---------------
3770 aging_flag
3771 FROM
3772 (SELECT m.marker,
3773 v.time_id,
3774 v.bill_to_customer_id,
3775 v.bill_to_site_use_id,
3776 v.org_id,
3777 v.customer_trx_id,
3778 v.payment_schedule_id,
3779 v.due_date,
3780 v.bucket_amount_func,
3781 v.bucket_amount_prim,
3782 v.bucket_amount_sec,
3783 decode(m.marker,
3784 1, case when trunc(v.start_date)<=trunc(v.due_date)
3785 then v.start_date
3786 else null end,
3787 2, case when trunc(v.start_date) <= trunc(v.due_date)
3788 and actual_date_closed >= trunc(v.due_date)+1
3789 and trunc(v.due_date)+1 <= g_sysdate
3790 then trunc(v.due_date)+1
3791 when trunc(v.start_date) >= trunc(v.due_date)+1
3792 then trunc(v.start_date)
3793 else null end) event_date,
3794 decode(m.marker,
3795 1, case when trunc(v.due_date)+1 <= actual_date_closed
3796 then trunc(v.due_date)+1 end,
3797 2, null) next_aging_date,
3798 decode(m.marker,
3799 1, 'N',
3800 2, case when trunc(v.start_date) <= trunc(v.due_date)
3801 and v.actual_date_closed >= trunc(v.due_date)+1
3802 and trunc(v.due_date)+1 <= g_sysdate
3803 then 'Y'
3804 else 'N' end) aging_flag
3805 FROM (--Disputes
3806 select /*+ parallel(dis) */ dis.time_id,
3807 dis.start_date,
3808 dis.bill_to_customer_id,
3809 dis.bill_to_site_use_id,
3810 dis.org_id,
3811 --dis.dispute_history_id,
3812 dis.customer_trx_id,
3813 dis.payment_schedule_id,
3814 dis.due_date,
3815 dis.actual_date_closed,
3816 sum(dis.dispute_amount_func) bucket_amount_func,
3817 sum(dis.dispute_amount_prim) bucket_amount_prim,
3818 sum(dis.dispute_amount_sec) bucket_amount_sec
3819 from fii_ar_dispute_history_f dis
3820 group by dis.time_id,
3821 dis.start_date,
3822 dis.bill_to_customer_id,
3823 dis.bill_to_site_use_id,
3824 dis.org_id,
3825 dis.customer_trx_id,
3826 dis.payment_schedule_id,
3827 dis.due_date,
3828 dis.actual_date_closed
3829
3830 union --changed from union all to union as sugested by perf. team
3831
3832 --Disputes that are ended
3833 select to_number(to_char(end_date, 'J')) time_id,
3834 least(end_date, actual_date_closed) start_date,
3835 bill_to_customer_id,
3836 bill_to_site_use_id,
3837 org_id,
3838 customer_trx_id,
3839 payment_schedule_id,
3840 due_date,
3841 actual_date_closed,
3842 -1*bucket_amount_func,
3843 -1*bucket_amount_prim,
3844 -1*bucket_amount_sec
3845 from
3846 (select /*+ parallel(dis) */ null time_id,
3847 max(nvl(dis.end_date, to_date('12/31/4712','MM/DD/YYYY'))) end_date,
3848 dis.bill_to_customer_id,
3849 dis.bill_to_site_use_id,
3850 dis.org_id,
3851 dis.customer_trx_id,
3852 dis.payment_schedule_id,
3853 dis.due_date,
3854 dis.actual_date_closed,
3855 sum(dis.dispute_amount_func) bucket_amount_func,
3856 sum(dis.dispute_amount_prim) bucket_amount_prim,
3857 sum(dis.dispute_amount_sec) bucket_amount_sec
3858 from fii_ar_dispute_history_f dis
3859 group by dis.bill_to_customer_id,
3860 dis.bill_to_site_use_id,
3861 dis.org_id,
3862 dis.customer_trx_id,
3863 dis.payment_schedule_id,
3864 dis.due_date,
3865 dis.actual_date_closed)
3866 where least(end_date, actual_date_closed) <> to_date('12/31/4712','MM/DD/YYYY')) v,
3867 (SELECT 1 marker FROM DUAL UNION ALL
3868 SELECT 2 marker FROM DUAL) m)
3869 WHERE event_date is not null)
3870 /* GROUP BY time_id,
3871 event_date,
3872 next_aging_date,
3873 bill_to_customer_id,
3874 bill_to_site_use_id,
3875 org_id,
3876 --dispute_history_id,
3877 customer_trx_id,
3878 payment_schedule_id,
3879 due_date,
3880 current_dispute_amount_func,
3881 current_dispute_amount_prim,
3882 current_dispute_amount_sec,
3883 past_due_dispute_amount_func,
3884 past_due_dispute_amount_prim,
3885 past_due_dispute_amount_sec,
3886 aging_flag
3887 */
3888 order by payment_schedule_id, event_date
3889
3890 )
3891 GROUP BY time_id,
3892 event_date,
3893 next_aging_date,
3894 bill_to_customer_id,
3895 bill_to_site_use_id,
3896 org_id,
3897 --dispute_history_id,
3898 customer_trx_id,
3899 payment_schedule_id,
3900 due_date
3901 HAVING sum(current_dispute_amount_func) <> 0
3902 or
3903 sum(past_due_dispute_amount_func) <> 0;
3904
3905
3906 if g_debug_flag = 'Y' then
3907 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_AGING_DISPUTES');
3908 FII_UTIL.stop_timer;
3909 FII_UTIL.print_timer('Duration');
3910 FII_UTIL.put_line('');
3911 end if;
3912
3913 g_state := 'Analyzing FII_AR_AGING_DISPUTES table';
3914 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_AGING_DISPUTES');
3915
3916 EXCEPTION
3917 WHEN OTHERS THEN
3918 g_errbuf:=sqlerrm;
3919 g_retcode:= -1;
3920 g_exception_msg := g_retcode || ':' || g_errbuf;
3921 FII_UTIL.put_line('Error occured while ' || g_state);
3922 FII_UTIL.put_line(g_exception_msg);
3923 RAISE;
3924
3925 END POPULATE_DISPUTES_AGING;
3926
3927
3928 PROCEDURE POPULATE_HELPER_TABLES IS
3929
3930 l_class_category VARCHAR2(30) := NVL(fnd_profile.value('BIS_CUST_CLASS_TYPE'),'-1');
3931 l_unassigned_message VARCHAR2(30) := FND_MESSAGE.get_string('BIS', 'EDW_UNASSIGNED');
3932
3933 BEGIN
3934
3935 g_state := 'Truncating table: fii_ar_help_mkt_classes';
3936 TRUNCATE_TABLE('FII_AR_HELP_MKT_CLASSES');
3937
3938 g_state := 'Populating fii_ar_help_mkt_classes';
3939 if g_debug_flag = 'Y' then
3940 FII_UTIL.put_line(g_state);
3941 FII_UTIL.start_timer;
3942 FII_UTIL.put_line('');
3943 end if;
3944
3945 INSERT into fii_ar_help_mkt_classes
3946 (class_category,
3947 class_code,
3948 class_name,
3949 creation_date,
3950 created_by,
3951 last_update_date,
3952 last_updated_by,
3953 last_update_login )
3954 SELECT c.lookup_type class_category,
3955 c.lookup_code class_code,
3956 c.meaning name,
3957 sysdate, --CREATION_DATE,
3958 g_fii_user_id, --CREATED_BY,
3959 sysdate, --LAST_UPDATE_DATE,
3960 g_fii_user_id, --LAST_UPDATED_BY,
3961 g_fii_login_id --LAST_UPDATE_LOGIN
3962 FROM fnd_lookup_values c
3963 WHERE c.lookup_type = l_class_category
3964 AND nvl(c.language, userenv('LANG')) = userenv('LANG')
3965 AND nvl(view_application_id, 222) = 222
3966 AND exists (select 'x' from fii_party_mkt_class hz where hz.class_code = c.lookup_code)
3967
3968 Union ALL
3969 SELECT l_class_category class_category,
3970 '-1' class_code,
3971 l_unassigned_message class_name,
3972 sysdate, --CREATION_DATE,
3973 g_fii_user_id, --CREATED_BY,
3974 sysdate, --LAST_UPDATE_DATE,
3975 g_fii_user_id, --LAST_UPDATED_BY,
3976 g_fii_login_id --LAST_UPDATE_LOGIN
3977 FROM dual;
3978
3979 if g_debug_flag = 'Y' then
3980 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_HELP_MKT_CLASSES');
3981 FII_UTIL.stop_timer;
3982 FII_UTIL.print_timer('Duration');
3983 FII_UTIL.put_line('');
3984 end if;
3985
3986 g_state := 'Truncating table: FII_AR_HELP_COLLECTORS';
3987 TRUNCATE_TABLE('FII_AR_HELP_COLLECTORS');
3988
3989 g_state := 'Populating FII_AR_HELP_COLLECTORS';
3990 if g_debug_flag = 'Y' then
3991 FII_UTIL.put_line(g_state);
3992 FII_UTIL.start_timer;
3993 FII_UTIL.put_line('');
3994 end if;
3995
3996 INSERT into fii_ar_help_collectors
3997 (collector_id,
3998 name,
3999 creation_date,
4000 created_by,
4001 last_update_date,
4002 last_updated_by,
4003 last_update_login )
4004 SELECT c.collector_id,
4005 c.name,
4006 sysdate, --CREATION_DATE,
4007 g_fii_user_id, --CREATED_BY,
4008 sysdate, --LAST_UPDATE_DATE,
4009 g_fii_user_id, --LAST_UPDATED_BY,
4010 g_fii_login_id --LAST_UPDATE_LOGIN
4011 FROM ar_collectors c
4012 WHERE exists (select 'x' from fii_collectors hz where hz.collector_id = c.collector_id);
4013
4014 if g_debug_flag = 'Y' then
4015 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_HELP_COLLECTORS');
4016 FII_UTIL.stop_timer;
4017 FII_UTIL.print_timer('Duration');
4018 FII_UTIL.put_line('');
4019 end if;
4020
4021 g_state := 'Analyzing FII_AR_HELP_MKT_CLASSES table';
4022 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_HELP_MKT_CLASSES');
4023 g_state := 'Analyzing FII_AR_HELP_COLLECTORS table';
4024 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_HELP_COLLECTORS');
4025
4026 commit;
4027
4028 EXCEPTION
4029 WHEN OTHERS THEN
4030 g_errbuf:=sqlerrm;
4031 g_retcode:= -1;
4032 g_exception_msg := g_retcode || ':' || g_errbuf;
4033 FII_UTIL.put_line('Error occured while ' || g_state);
4034 FII_UTIL.put_line(g_exception_msg);
4035 RAISE;
4036
4037 END POPULATE_HELPER_TABLES;
4038
4039
4040 -- ------------------------------------------------------------
4041 -- Public Functions and Procedures
4042 -- ------------------------------------------------------------
4043
4044 -----------------------------------------------------------
4045 -- Procedure
4046 -- Collect()
4047 -- Purpose
4048 -- This Collect routine handles all procedures involved in populating FII
4049 -- AR fact and aging tables in initial load.
4050
4051 -----------------------------------------------------------
4052 -- PROCEDURE COLLECT
4053 -----------------------------------------------------------
4054 Procedure Collect(Errbuf IN OUT NOCOPY VARCHAR2,
4055 Retcode IN OUT NOCOPY VARCHAR2
4056 ) IS
4057 l_dir VARCHAR2(400);
4058
4059 BEGIN
4060 g_state := 'Inside the procedure COLLECT';
4061 if g_debug_flag = 'Y' then
4062 FII_UTIL.put_line(g_state);
4063 end if;
4064
4065 Retcode := 0;
4066
4067 ------------------------------------------------------
4068 -- Set default directory in case if the profile option
4069 -- BIS_DEBUG_LOG_DIRECTORY is not set up
4070 ------------------------------------------------------
4071 l_dir:=FII_UTIL.get_utl_file_dir;
4072
4073 ----------------------------------------------------------------
4074 -- FII_UTIL.initialize will get profile options FII_DEBUG_MODE
4075 -- and BIS_DEBUG_LOG_DIRECTORY and set up the directory where
4076 -- the log files and output files are written to
4077 ----------------------------------------------------------------
4078 FII_UTIL.initialize('FII_AR_FACTS_AGING_INIT.log','FII_AR_FACTS_AGING_INIT.out',l_dir, 'FII_AR_FACTS_AGING_INIT');
4079
4080 EXECUTE IMMEDIATE 'ALTER SESSION SET MAX_DUMP_FILE_SIZE=UNLIMITED';
4081 EXECUTE IMMEDIATE 'alter session enable parallel dml';
4082
4083 if g_debug_flag = 'Y' then
4084 FII_UTIL.put_line('-------------------------------------------------');
4085 FII_UTIL.put_line('Calling the Init procedure to initialize the global variables');
4086 FII_UTIL.put_line('-------------------------------------------------');
4087 end if;
4088
4089 INIT;
4090
4091 if g_debug_flag = 'Y' then
4092 FII_UTIL.put_line('-------------------------------------------------');
4093 FII_UTIL.put_line('Populating fii_ar_setup with ''BIS: Party Market Classification Type''');
4094 FII_UTIL.put_line('-------------------------------------------------');
4095 end if;
4096
4097 UPDATE FII_AR_SETUP
4098 SET class_category = nvl(fnd_profile.value('BIS_CUST_CLASS_TYPE'),-1),
4099 LAST_UPDATE_DATE = sysdate,
4100 LAST_UPDATED_BY = g_fii_user_id,
4101 LAST_UPDATE_LOGIN = g_fii_login_id;
4102
4103 IF SQL%ROWCOUNT = 0 THEN
4104
4105 INSERT INTO FII_AR_SETUP
4106 (class_category,
4107 CREATION_DATE,
4108 CREATED_BY,
4109 LAST_UPDATE_DATE,
4110 LAST_UPDATED_BY,
4111 LAST_UPDATE_LOGIN)
4112 VALUES (fnd_profile.value('BIS_CUST_CLASS_TYPE'),
4113 sysdate, --CREATION_DATE,
4114 g_fii_user_id, --CREATED_BY,
4115 sysdate, --LAST_UPDATE_DATE,
4116 g_fii_user_id, --LAST_UPDATED_BY,
4117 g_fii_login_id);--LAST_UPDATE_LOGIN
4118
4119 END IF;
4120
4121 if g_debug_flag = 'Y' then
4122 FII_UTIL.put_line('-------------------------------------------------');
4123 FII_UTIL.put_line('Populating dimension helper tables fii_ar_help_mkt_classes and fii_ar_help_collectors');
4124 FII_UTIL.put_line('-------------------------------------------------');
4125 end if;
4126
4127 POPULATE_HELPER_TABLES;
4128
4129
4130 if g_debug_flag = 'Y' then
4131 FII_UTIL.put_line('-------------------------------------------------');
4132 FII_UTIL.put_line('Calling the GET_BUCKET_RANGES procedure to load and validate bucket range definitions');
4133 FII_UTIL.put_line('-------------------------------------------------');
4134 end if;
4135
4136 GET_BUCKET_RANGES;
4137
4138
4139 g_state := 'Truncating table FII_AR_CURR_RATES_T';
4140 TRUNCATE_TABLE('FII_AR_CURR_RATES_T');
4141 if g_debug_flag = 'Y' then
4142 FII_UTIL.put_line('-------------------------------------------------');
4143 FII_UTIL.put_line('Calling the Insert_Rates procedure to insert the missing rate info');
4144 FII_UTIL.put_line('-------------------------------------------------');
4145 end if;
4146
4147 INSERT_RATES;
4148
4149
4150 if g_debug_flag = 'Y' then
4151 FII_UTIL.put_line('-------------------------------------------------');
4152 FII_UTIL.put_line('Calling the Verify_Missing_Rates procedure');
4153 FII_UTIL.put_line('-------------------------------------------------');
4154 end if;
4155
4156 IF (VERIFY_MISSING_RATES = -1) THEN
4157 g_retcode := -1;
4158 g_errbuf := fnd_message.get_string('FII', 'FII_MISS_EXCH_RATE_FOUND');
4159
4160 RAISE G_MISSING_RATES;
4161
4162
4163 -----------------------------------------------------------------------
4164 -- If there are no missing exchange rate records, then insert
4165 -- records into the fact and aging tables
4166 -----------------------------------------------------------------------
4167 ELSE
4168
4169
4170 if g_debug_flag = 'Y' then
4171 FII_UTIL.put_line('-------------------------------------------------');
4172 FII_UTIL.put_line('Calling procedure POPULATE_PAYMENT_SCHEDULES');
4173 FII_UTIL.put_line('-------------------------------------------------');
4174 end if;
4175 POPULATE_PAYMENT_SCHEDULES;
4176
4177
4178 if g_debug_flag = 'Y' then
4179 FII_UTIL.put_line('-------------------------------------------------');
4180 FII_UTIL.put_line('Calling procedure POPULATE_DISPUTES');
4181 FII_UTIL.put_line('-------------------------------------------------');
4182 end if;
4183 POPULATE_DISPUTES;
4184
4185
4186 if g_debug_flag = 'Y' then
4187 FII_UTIL.put_line('-------------------------------------------------');
4188 FII_UTIL.put_line('Calling procedure POPULATE_TRANSACTIONS');
4189 FII_UTIL.put_line('-------------------------------------------------');
4190 end if;
4191 POPULATE_TRANSACTIONS;
4192
4193
4194 if g_debug_flag = 'Y' then
4195 FII_UTIL.put_line('-------------------------------------------------');
4196 FII_UTIL.put_line('Calling procedure POPULATE_ADJUSTMENTS');
4197 FII_UTIL.put_line('-------------------------------------------------');
4198 end if;
4199 POPULATE_ADJUSTMENTS;
4200
4201
4202 if g_debug_flag = 'Y' then
4203 FII_UTIL.put_line('-------------------------------------------------');
4204 FII_UTIL.put_line('Calling procedure POPULATE_RECEIPTS');
4205 FII_UTIL.put_line('-------------------------------------------------');
4206 end if;
4207 POPULATE_RECEIPTS;
4208
4209
4210 if g_debug_flag = 'Y' then
4211 FII_UTIL.put_line('-------------------------------------------------');
4212 FII_UTIL.put_line('Calling procedure POPULATE_SCHEDULED_DISCOUNTS');
4213 FII_UTIL.put_line('-------------------------------------------------');
4214 end if;
4215 POPULATE_SCHEDULED_DISCOUNTS;
4216
4217
4218 if g_debug_flag = 'Y' then
4219 FII_UTIL.put_line('-------------------------------------------------');
4220 FII_UTIL.put_line('Calling procedure POPULATE_RECEIVABLES_AGING');
4221 FII_UTIL.put_line('-------------------------------------------------');
4222 end if;
4223 POPULATE_RECEIVABLES_AGING;
4224
4225
4226 if g_debug_flag = 'Y' then
4227 FII_UTIL.put_line('-------------------------------------------------');
4228 FII_UTIL.put_line('Calling procedure POPULATE_RECEIPTS_AGING');
4229 FII_UTIL.put_line('-------------------------------------------------');
4230 end if;
4231 POPULATE_RECEIPTS_AGING;
4232
4233
4234 if g_debug_flag = 'Y' then
4235 FII_UTIL.put_line('-------------------------------------------------');
4236 FII_UTIL.put_line('Calling procedure POPULATE_DISPUTES_AGING');
4237 FII_UTIL.put_line('-------------------------------------------------');
4238 FII_UTIL.put_line('');
4239 end if;
4240 POPULATE_DISPUTES_AGING;
4241
4242 g_state := 'Logging program sysdate as ar_last_update_date in fii_change_log table';
4243
4244 INSERT INTO fii_change_log
4245 (log_item, item_value, CREATION_DATE, CREATED_BY,
4246 LAST_UPDATE_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN)
4247 (SELECT 'AR_LAST_UPDATE_DATE',
4248 to_char(g_sysdate_time,'MM/DD/YYYY HH24:MI:SS'),
4249 sysdate, --CREATION_DATE,
4250 g_fii_user_id, --CREATED_BY,
4251 sysdate, --LAST_UPDATE_DATE,
4252 g_fii_user_id, --LAST_UPDATED_BY,
4253 g_fii_login_id --LAST_UPDATE_LOGIN
4254 FROM DUAL
4255 WHERE NOT EXISTS
4256 (select 1 from fii_change_log
4257 where log_item = 'AR_LAST_UPDATE_DATE'));
4258
4259 IF (SQL%ROWCOUNT = 0) THEN
4260 UPDATE fii_change_log
4261 SET item_value = to_char(g_sysdate_time,'MM/DD/YYYY HH24:MI:SS'),
4262 last_update_date = g_sysdate_time,
4263 last_update_login = g_fii_login_id,
4264 last_updated_by = g_fii_user_id
4265 WHERE log_item = 'AR_LAST_UPDATE_DATE';
4266 END IF;
4267
4268
4269 END IF;
4270
4271 COMMIT;
4272
4273 if g_debug_flag = 'Y' then
4274 FII_UTIL.put_line('return code is ' || retcode);
4275 end if;
4276
4277 g_retcode := 0;
4278
4279 EXCEPTION
4280 WHEN OTHERS THEN
4281 ROLLBACK;
4282 g_retcode:= -1;
4283 retcode := g_retcode;
4284 g_exception_msg := g_retcode || ':' || g_errbuf;
4285 if g_debug_flag = 'Y' then
4286 FII_UTIL.put_line('Error occured while: ' || g_state);
4287 end if;
4288 FII_UTIL.put_line(g_exception_msg);
4289 /*
4290 dbms_output.put_line('Error occured while: ' || g_state);
4291 dbms_output.put_line('Error Message: ' || g_exception_msg);
4292 */
4293 END;
4294
4295 -- ===========================================================================
4296 -- AR DBI Incremental Extraction
4297 -- ===========================================================================
4298
4299 ------------------------------------
4300 ---- PROCEDURE Inc_Prepare
4301 ------------------------------------
4302 PROCEDURE Inc_Prepare IS
4303
4304 BEGIN
4305
4306 g_state := 'Getting data from fii_change_log';
4307 if g_debug_flag = 'Y' then
4308 FII_UTIL.put_line(g_state);
4309 FII_UTIL.put_line('');
4310 end if;
4311
4312 select to_date(item_value,'MM/DD/YYYY HH24:MI:SS') into G_LAST_UPDATE_DATE
4313 from fii_change_log
4314 where log_item = 'AR_LAST_UPDATE_DATE';
4315
4316 select item_value into G_MAX_PAYMENT_SCHEDULE_ID
4317 from fii_change_log
4318 where log_item = 'AR_MAX_PAYMENT_SCHEDULE_ID';
4319
4320 select item_value into G_MAX_RECEIVABLE_APPL_ID
4321 from fii_change_log
4322 where log_item = 'AR_MAX_RECEIVABLE_APPLICATION_ID';
4323
4324 if g_debug_flag = 'Y' then
4325 FII_UTIL.put_line('G_LAST_UPDATE_DATE is ' ||
4326 to_char(G_LAST_UPDATE_DATE,'MM/DD/YYYY HH24:MI:SS'));
4327 FII_UTIL.put_line('G_MAX_PAYMENT_SCHEDULE_ID is ' ||
4328 G_MAX_PAYMENT_SCHEDULE_ID);
4329 FII_UTIL.put_line('G_MAX_RECEIVABLE_APPL_ID is ' ||
4330 G_MAX_RECEIVABLE_APPL_ID);
4331 FII_UTIL.put_line('');
4332 end if;
4333
4334 g_state := 'Populating FII_AR_PAYSCH_INSERT_GT';
4335 if g_debug_flag = 'Y' then
4336 FII_UTIL.put_line(g_state);
4337 FII_UTIL.start_timer;
4338 FII_UTIL.put_line('');
4339 end if;
4340
4341 -- PaySch Insert
4342 insert into FII_AR_PAYSCH_INSERT_GT
4343 (
4344 payment_schedule_id,
4345 customer_trx_id,
4346 class,
4347 gl_date,
4348 trx_date
4349 )
4350 select PAYMENT_SCHEDULE_ID
4351 , CUSTOMER_TRX_ID
4352 , class
4353 , gl_date
4354 , trx_date
4355 from ar_payment_schedules_all
4356 where PAYMENT_SCHEDULE_ID > G_MAX_PAYMENT_SCHEDULE_ID
4357 and class in ('INV', 'DM', 'CB', 'CM', 'DEP', 'BR', 'PMT')
4358 and decode(g_collection_criteria, 'GL', gl_date, trx_date) >=
4359 g_global_start_date
4360
4361 union all
4362
4363 select distinct sch.PAYMENT_SCHEDULE_ID
4364 , sch.CUSTOMER_TRX_ID
4365 , sch.class
4366 , sch.gl_date
4367 , sch.trx_date
4368 from ar_payment_schedules_all sch,
4369 ar_receivable_applications_all app,
4370 ar_payment_schedules_all trxsch
4371 where sch.PAYMENT_SCHEDULE_ID > G_MAX_PAYMENT_SCHEDULE_ID
4372 and sch.class in ('PMT')
4373 and decode(g_collection_criteria, 'GL', sch.gl_date, sch.trx_date) <
4374 g_global_start_date
4375 and app.status = 'APP'
4376 and sch.payment_schedule_id = app.payment_schedule_id
4377 and app.applied_payment_schedule_id = trxsch.payment_schedule_id
4378 and decode(g_collection_criteria, 'GL', trxsch.gl_date, trxsch.trx_date) >=
4379 g_global_start_date
4380 ;
4381
4382 if g_debug_flag = 'Y' then
4383 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_PAYSCH_INSERT_GT');
4384 FII_UTIL.stop_timer;
4385 FII_UTIL.print_timer('Duration');
4386 FII_UTIL.put_line('');
4387 end if;
4388
4389 g_state := 'Populating FII_AR_DISP_UPDATE_GT';
4390 if g_debug_flag = 'Y' then
4391 FII_UTIL.put_line(g_state);
4392 FII_UTIL.start_timer;
4393 FII_UTIL.put_line('');
4394 end if;
4395
4396 -- PaySch Update 1
4397 insert into FII_AR_DISP_UPDATE_GT
4398 (
4399 payment_schedule_id,
4400 dispute_history_id,
4401 dispute_amount,
4402 start_date,
4403 end_date,
4404 last_update_date
4405 )
4406 select PAYMENT_SCHEDULE_ID
4407 , dispute_history_id
4408 , dispute_amount
4409 , start_date
4410 , end_date
4411 , last_update_date
4412 from ar_dispute_history
4413 -- Update end_date, but not LAST_UPDATE_DATE
4414 where PAYMENT_SCHEDULE_ID in (
4415 select PAYMENT_SCHEDULE_ID
4416 from ar_dispute_history
4417 where LAST_UPDATE_DATE > G_LAST_UPDATE_DATE
4418 and start_date >= g_global_start_date
4419 and LAST_UPDATE_DATE <= g_sysdate_time
4420 )
4421 ;
4422
4423 if g_debug_flag = 'Y' then
4424 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_DISP_UPDATE_GT');
4425 FII_UTIL.stop_timer;
4426 FII_UTIL.print_timer('Duration');
4427 FII_UTIL.put_line('');
4428 end if;
4429
4430 g_state := 'Populating FII_AR_ADJ_UPDATE_GT';
4431 if g_debug_flag = 'Y' then
4432 FII_UTIL.put_line(g_state);
4433 FII_UTIL.start_timer;
4434 FII_UTIL.put_line('');
4435 end if;
4436
4437 -- PaySch Update 2
4438 insert into FII_AR_ADJ_UPDATE_GT
4439 (
4440 payment_schedule_id,
4441 adjustment_id,
4442 adjustment_type,
4443 customer_trx_id,
4444 subsequent_trx_id,
4445 chargeback_customer_trx_id,
4446 org_id,
4447 amount,
4448 status,
4449 created_by,
4450 creation_date,
4451 gl_date,
4452 apply_date,
4453 last_update_date
4454 )
4455 select PAYMENT_SCHEDULE_ID
4456 , adjustment_id
4457 , adjustment_type
4458 , customer_trx_id
4459 , subsequent_trx_id
4460 , chargeback_customer_trx_id
4461 , org_id
4462 , amount
4463 , status
4464 , created_by
4465 , creation_date
4466 , gl_date
4467 , apply_date
4468 , last_update_date
4469 from ar_adjustments_all
4470 where LAST_UPDATE_DATE > G_LAST_UPDATE_DATE
4471 and STATUS = 'A'
4472 and last_update_date <= g_sysdate_time
4473 ;
4474
4475 if g_debug_flag = 'Y' then
4476 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_ADJ_UPDATE_GT');
4477 FII_UTIL.stop_timer;
4478 FII_UTIL.print_timer('Duration');
4479 FII_UTIL.put_line('');
4480 end if;
4481
4482 g_state := 'Populating FII_AR_RECAPP_INSERT_GT';
4483 if g_debug_flag = 'Y' then
4484 FII_UTIL.put_line(g_state);
4485 FII_UTIL.start_timer;
4486 FII_UTIL.put_line('');
4487 end if;
4488
4489 -- PaySch Update 3
4490 insert into FII_AR_RECAPP_INSERT_GT
4491 (
4492 applied_payment_schedule_id,
4493 payment_schedule_id,
4494 applied_customer_trx_id,
4495 customer_trx_id,
4496 receivable_application_id,
4497 application_type,
4498 cash_receipt_id,
4499 org_id,
4500 status,
4501 created_by,
4502 creation_date,
4503 gl_date,
4504 apply_date,
4505 amount_applied_from,
4506 amount_applied,
4507 acctd_amount_applied_from,
4508 acctd_amount_applied_to,
4509 earned_discount_taken,
4510 acctd_earned_discount_taken,
4511 unearned_discount_taken,
4512 acctd_unearned_discount_taken
4513 )
4514 select APPLIED_PAYMENT_SCHEDULE_ID
4515 , payment_schedule_id
4516 , applied_customer_trx_id
4517 , CUSTOMER_TRX_ID
4518 , RECEIVABLE_APPLICATION_ID
4519 , application_type
4520 , cash_receipt_id
4521 , org_id
4522 , status
4523 , created_by
4524 , creation_date
4525 , gl_date
4526 , apply_date
4527 , AMOUNT_APPLIED_FROM
4528 , AMOUNT_APPLIED
4529 , acctd_amount_applied_from
4530 , acctd_amount_applied_to
4531 , EARNED_DISCOUNT_TAKEN
4532 , acctd_earned_discount_taken
4533 , UNEARNED_DISCOUNT_TAKEN
4534 , acctd_unearned_discount_taken
4535 from ar_receivable_applications_all app
4536 -- To calculate rct_gl_date
4537 where exists (select 'x' from ar_receivable_applications_all app2
4538 where app2.RECEIVABLE_APPLICATION_ID > G_MAX_RECEIVABLE_APPL_ID
4539 and app2.cash_receipt_id = app.cash_receipt_id
4540
4541 and (app2.status in ('APP', 'ACTIVITY')
4542 or application_type = 'CASH') )
4543
4544 union all
4545
4546 select APPLIED_PAYMENT_SCHEDULE_ID
4547 , payment_schedule_id
4548 , applied_customer_trx_id
4549 , CUSTOMER_TRX_ID
4550 , RECEIVABLE_APPLICATION_ID
4551 , application_type
4552 , cash_receipt_id
4553 , org_id
4554 , status
4555 , created_by
4556 , creation_date
4557 , gl_date
4558 , apply_date
4559 , AMOUNT_APPLIED_FROM
4560 , AMOUNT_APPLIED
4561 , acctd_amount_applied_from
4562 , acctd_amount_applied_to
4563 , EARNED_DISCOUNT_TAKEN
4564 , acctd_earned_discount_taken
4565 , UNEARNED_DISCOUNT_TAKEN
4566 , acctd_unearned_discount_taken
4567 from ar_receivable_applications_all app
4568 -- To calculate rct_gl_date
4569 where exists (select 'x' from ar_receivable_applications_all app2
4570 where app2.RECEIVABLE_APPLICATION_ID > G_MAX_RECEIVABLE_APPL_ID
4571 and app2.customer_trx_id = app.customer_trx_id
4572 and application_type = 'CM')
4573 ;
4574
4575 if g_debug_flag = 'Y' then
4576 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_RECAPP_INSERT_GT');
4577 FII_UTIL.stop_timer;
4578 FII_UTIL.print_timer('Duration');
4579 FII_UTIL.put_line('');
4580 end if;
4581
4582 g_state := 'Populating FII_AR_TRANS_DELETE_GT';
4583 if g_debug_flag = 'Y' then
4584 FII_UTIL.put_line(g_state);
4585 FII_UTIL.start_timer;
4586 FII_UTIL.put_line('');
4587 end if;
4588
4589 -- PaySch Delete 1
4590 insert into FII_AR_TRANS_DELETE_GT
4591 (
4592 customer_trx_id
4593 )
4594 select CUSTOMER_TRX_ID
4595 from ra_customer_trx_all
4596 where LAST_UPDATE_DATE > G_LAST_UPDATE_DATE
4597 and COMPLETE_FLAG = 'N'
4598 and last_update_date <= g_sysdate_time
4599 ;
4600
4601 if g_debug_flag = 'Y' then
4602 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_TRANS_DELETE_GT');
4603 FII_UTIL.stop_timer;
4604 FII_UTIL.print_timer('Duration');
4605 FII_UTIL.put_line('');
4606 end if;
4607
4608 -- PaySch Delete 2
4609 /*
4610 insert into FII_AR_PAYSCH_DELETE_PAYSCH_GT
4611 select CUSTOMER_TRX_ID
4612 from ar_payment_schedules_all
4613 where PAYMENT_SCHEDULE_ID > G_MAX_PAYMENT_SCHEDULE_ID;
4614 */
4615
4616 g_state := 'Populating FII_AR_RECAPP_DELETE_GT';
4617 if g_debug_flag = 'Y' then
4618 FII_UTIL.put_line(g_state);
4619 FII_UTIL.start_timer;
4620 FII_UTIL.put_line('');
4621 end if;
4622
4623 -- PaySch Delete 3
4624 insert into FII_AR_RECAPP_DELETE_GT
4625 (
4626 receivable_application_id,
4627 payment_schedule_id,
4628 CASH_RECEIPT_ID
4629 )
4630 select RECEIVABLE_APPLICATION_ID, PAYMENT_SCHEDULE_ID, CASH_RECEIPT_ID
4631 from fii_ar_receipts_f
4632 where CASH_RECEIPT_ID in (
4633 select CASH_RECEIPT_ID from FII_AR_RECEIPTS_DELETE_T
4634 where CREATION_DATE <= g_sysdate_time
4635 )
4636 ;
4637
4638 if g_debug_flag = 'Y' then
4639 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_RECAPP_DELETE_GT');
4640 FII_UTIL.stop_timer;
4641 FII_UTIL.print_timer('Duration');
4642 FII_UTIL.put_line('');
4643 end if;
4644
4645 g_state := 'Populating FII_AR_PAYSCH_MERGE_GT';
4646 if g_debug_flag = 'Y' then
4647 FII_UTIL.put_line(g_state);
4648 FII_UTIL.start_timer;
4649 FII_UTIL.put_line('');
4650 end if;
4651
4652 insert into FII_AR_PAYSCH_MERGE_GT
4653 (
4654 class,
4655 org_id,
4656 invoice_currency_code,
4657 exchange_rate,
4658 exchange_date,
4659 gl_date,
4660 trx_date,
4661 due_date,
4662 actual_date_closed,
4663 payment_schedule_id,
4664 trx_number,
4665 customer_trx_id,
4666 cust_trx_type_id,
4667 customer_id,
4668 customer_site_use_id,
4669 amount_due_original,
4670 amount_due_remaining,
4671 discount_taken_earned,
4672 discount_taken_unearned,
4673 amount_adjusted,
4674 amount_in_dispute,
4675 status,
4676 term_id,
4677 terms_sequence_number,
4678 created_by
4679 )
4680 select class
4681 , org_id
4682 , invoice_currency_code
4683 , exchange_rate
4684 , exchange_date
4685 , trunc(gl_date)
4686 , trunc(trx_date)
4687 , trunc(due_date)
4688 , actual_date_closed
4689 , payment_schedule_id
4690 , trx_number
4691 , customer_trx_id
4692 , cust_trx_type_id
4693 , customer_id
4694 , customer_site_use_id
4695 , amount_due_original
4696 , amount_due_remaining
4697 , discount_taken_earned
4698 , discount_taken_unearned
4699 , amount_adjusted
4700 , amount_in_dispute
4701 , status
4702 , term_id
4703 , terms_sequence_number
4704 , created_by
4705 from ar_payment_schedules_all
4706 where PAYMENT_SCHEDULE_ID in (
4707 -- PaySch Insert
4708 select PAYMENT_SCHEDULE_ID
4709 from FII_AR_PAYSCH_INSERT_GT
4710 union all
4711 -- PaySch Update 1
4712 select PAYMENT_SCHEDULE_ID
4713 from FII_AR_DISP_UPDATE_GT
4714 union all
4715 -- PaySch Update 2
4716 select PAYMENT_SCHEDULE_ID
4717 from FII_AR_ADJ_UPDATE_GT
4718 union all
4719 -- PaySch Update 3
4720 select APPLIED_PAYMENT_SCHEDULE_ID
4721 from FII_AR_RECAPP_INSERT_GT
4722 union all
4723 -- PaySch Update 3 (receipt rates)
4724 select PAYMENT_SCHEDULE_ID
4725 from FII_AR_RECAPP_INSERT_GT
4726 )
4727 and CLASS IN ('INV', 'DM', 'CB', 'CM', 'DEP', 'BR', 'PMT');
4728 --and decode(g_collection_criteria, 'GL', gl_date, trx_date) >= g_global_start_date;
4729
4730 if g_debug_flag = 'Y' then
4731 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_PAYSCH_MERGE_GT');
4732 FII_UTIL.stop_timer;
4733 FII_UTIL.print_timer('Duration');
4734 FII_UTIL.put_line('');
4735 end if;
4736
4737 g_state := 'Populating FII_AR_PAYSCH_DELETE_GT';
4738 if g_debug_flag = 'Y' then
4739 FII_UTIL.put_line(g_state);
4740 FII_UTIL.start_timer;
4741 FII_UTIL.put_line('');
4742 end if;
4743
4744 insert into FII_AR_PAYSCH_DELETE_GT
4745 (
4746 payment_schedule_id
4747 )
4748 select PAYMENT_SCHEDULE_ID
4749 from fii_ar_pmt_schedules_f
4750 where CUSTOMER_TRX_ID in (
4751 -- PaySch Delete 1
4752 select CUSTOMER_TRX_ID
4753 from FII_AR_TRANS_DELETE_GT
4754 union all
4755 -- PaySch Delete 2
4756 select CUSTOMER_TRX_ID
4757 from FII_AR_PAYSCH_INSERT_GT -- FII_AR_PAYSCH_DELETE_PAYSCH_GT
4758 )
4759 union
4760 -- PaySch Delete 3
4761 select PAYMENT_SCHEDULE_ID
4762 from FII_AR_RECAPP_DELETE_GT
4763 ;
4764
4765 if g_debug_flag = 'Y' then
4766 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_PAYSCH_DELETE_GT');
4767 FII_UTIL.stop_timer;
4768 FII_UTIL.print_timer('Duration');
4769 FII_UTIL.put_line('');
4770 end if;
4771
4772 EXCEPTION
4773
4774 WHEN OTHERS THEN
4775 g_retcode := -1;
4776 g_errbuf := '
4777 ---------------------------------
4778 Error in Procedure: Inc_Prepare
4779 Message: '||sqlerrm;
4780 g_exception_msg := g_retcode || ':' || g_errbuf;
4781 FII_UTIL.put_line('Error occured while ' || g_state);
4782 FII_UTIL.put_line(g_exception_msg);
4783 RAISE;
4784
4785 END Inc_Prepare;
4786
4787 ------------------------------------
4788 ---- PROCEDURE Inc_RATES
4789 ------------------------------------
4790 PROCEDURE Inc_RATES IS
4791
4792 BEGIN
4793
4794 g_state := 'Loading data into rates table FII_AR_CURR_RATES_T';
4795
4796 if g_debug_flag = 'Y' then
4797 fii_util.put_line(' ');
4798 fii_util.put_line(g_state);
4799 fii_util.start_timer;
4800 fii_util.put_line('');
4801 end if;
4802
4803 INSERT /*+ append */ INTO FII_AR_CURR_RATES_T
4804 (SELECT sob.currency_code fc_code,
4805 Decode(NVL(cur.minimum_accountable_unit,
4806 power( 10, (-1 * cur.precision))),
4807 null, 0.01,
4808 0, 1,
4809 NVL(cur.minimum_accountable_unit,
4810 power( 10, (-1 * cur.precision)))) functional_mau,
4811 conversion_date,
4812 MAX(FII_CURRENCY.Get_FC_to_PGC_Rate (v.tc_code,
4813 sob.currency_code, v.conversion_date)) prim_conversion_rate,
4814 MAX(FII_CURRENCY.Get_FC_to_SGC_Rate (v.tc_code,
4815 sob.currency_code, v.conversion_date)) sec_conversion_rate,
4816 sysdate, --CREATION_DATE,
4817 g_fii_user_id, --CREATED_BY,
4818 sysdate, --LAST_UPDATE_DATE,
4819 g_fii_user_id, --LAST_UPDATED_BY,
4820 g_fii_login_id --LAST_UPDATE_LOGIN
4821 FROM (--Currency rates for payment schedules and receipts
4822 SELECT /*+ no_merge parallel(sch) */ DISTINCT
4823 sch.invoice_currency_code tc_code,
4824 sch.org_id,
4825 trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) conversion_date
4826 FROM FII_AR_PAYSCH_MERGE_GT sch
4827 --WHERE sch.class IN ('INV','DM','CB','CM','DEP','BR','PMT')
4828 --AND sch.trx_date >= g_global_start_date
4829 ) v,
4830 ar_system_parameters_all par,
4831 gl_sets_of_books sob,
4832 fnd_currencies cur
4833 WHERE v.org_id = par.org_id
4834 AND par.set_of_books_id = sob.set_of_books_id
4835 AND cur.currency_code = sob.currency_code
4836 GROUP BY sob.currency_code,
4837 cur.minimum_accountable_unit,
4838 cur.precision,
4839 conversion_date);
4840
4841
4842 if g_debug_flag = 'Y' then
4843 fii_util.put_line('Processed '||SQL%ROWCOUNT||' rows');
4844 fii_util.stop_timer;
4845 fii_util.print_timer('Duration');
4846 end if;
4847
4848 COMMIT;
4849 /*
4850 --------------------
4851 --Temporarily added to avoid: missing currency conversion rates error
4852 ---------------------
4853 update FII_AR_CURR_RATES_T
4854 set prim_conversion_rate=1
4855 where prim_conversion_rate<=0;
4856
4857 update FII_AR_CURR_RATES_T
4858 set sec_conversion_rate=1
4859 where sec_conversion_rate<=0;
4860 commit;
4861 ------------------------
4862 */
4863
4864 g_state := 'Analyzing FII_AR_CURR_RATES_T table';
4865 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_CURR_RATES_T');
4866
4867 EXCEPTION
4868 WHEN OTHERS THEN
4869 g_errbuf:=sqlerrm;
4870 g_retcode:= -1;
4871 g_exception_msg := g_retcode || ':' || g_errbuf;
4872 FII_UTIL.put_line('Error occured while ' || g_state);
4873 FII_UTIL.put_line(g_exception_msg);
4874 RAISE;
4875
4876 END Inc_RATES;
4877
4878 ------------------------------------------------------------------
4879 -- Procedure Inc_PAYMENT_SCHEDULES
4880 -- Purpose
4881 -- This procedure manipulates records in FII_AR_PMT_SCHEDULES_F
4882 ------------------------------------------------------------------
4883 PROCEDURE Inc_PAYMENT_SCHEDULES IS
4884
4885 l_max_pmt_schedule_id NUMBER(15);
4886
4887 BEGIN
4888
4889 /*
4890 g_state := 'Truncating table FII_AR_PMT_SCHEDULES_F';
4891 TRUNCATE_TABLE('FII_AR_PMT_SCHEDULES_F');
4892 */
4893
4894 g_state := 'Deleting records from FII_AR_PMT_SCHEDULES_F';
4895 if g_debug_flag = 'Y' then
4896 FII_UTIL.put_line(g_state);
4897 FII_UTIL.start_timer;
4898 FII_UTIL.put_line('');
4899 end if;
4900
4901 delete from fii_ar_pmt_schedules_f
4902 where PAYMENT_SCHEDULE_ID in (
4903 -- PaySch Delete 1 2 3
4904 select PAYMENT_SCHEDULE_ID
4905 from FII_AR_PAYSCH_DELETE_GT
4906 );
4907
4908 if g_debug_flag = 'Y' then
4909 FII_UTIL.put_line('Deleted ' ||SQL%ROWCOUNT|| ' records from FII_AR_PMT_SCHEDULES_F');
4910 FII_UTIL.stop_timer;
4911 FII_UTIL.print_timer('Duration');
4912 FII_UTIL.put_line('');
4913 end if;
4914
4915 commit;
4916
4917 g_state := 'Merging into FII_AR_PMT_SCHEDULES_F';
4918 if g_debug_flag = 'Y' then
4919 FII_UTIL.put_line(g_state);
4920 FII_UTIL.start_timer;
4921 FII_UTIL.put_line('');
4922 end if;
4923
4924 merge into fii_ar_pmt_schedules_f old using (
4925 -- POPULATE_PAYMENT_SCHEDULES
4926 SELECT sch.payment_schedule_id,
4927 to_number(to_char(decode(g_collection_criteria,
4928 'GL', sch.gl_date,
4929 sch.trx_date), 'J')) time_id,
4930 sch.class,
4931 sch.amount_due_original amount_due_original_trx,
4932 NVL(ROUND(sch.amount_due_original * nvl(sch.exchange_rate,1) /
4933 rt.functional_mau) * rt.functional_mau,
4934 nvl(sch.amount_due_original,0)) amount_due_original_func,
4935 DECODE(sch.invoice_currency_code,
4936 g_prim_currency, nvl(sch.amount_due_original,0),
4937 ROUND((nvl(sch.amount_due_original,0) * nvl(sch.exchange_rate,1) *
4938 rt.prim_conversion_rate) / g_primary_mau) *
4939 g_primary_mau) amount_due_original_prim,
4940 DECODE(sch.invoice_currency_code,
4941 g_sec_currency, nvl(sch.amount_due_original,0),
4942 ROUND((nvl(sch.amount_due_original,0) * nvl(sch.exchange_rate,1) *
4943 rt.sec_conversion_rate) / g_secondary_mau) *
4944 g_secondary_mau) amount_due_original_sec,
4945 sch.amount_due_remaining amount_due_remaining_trx,
4946 NVL(ROUND(sch.amount_due_remaining * nvl(sch.exchange_rate,1) /
4947 rt.functional_mau) * rt.functional_mau,
4948 nvl(sch.amount_due_remaining,0)) amount_due_remaining_func,
4949 DECODE(sch.invoice_currency_code,
4950 g_prim_currency, nvl(sch.amount_due_remaining,0),
4951 ROUND((nvl(sch.amount_due_remaining,0) * nvl(sch.exchange_rate,1) *
4952 rt.prim_conversion_rate) / g_primary_mau ) *
4953 g_primary_mau) amount_due_remaining_prim,
4954 DECODE(sch.invoice_currency_code,
4955 g_sec_currency, nvl(sch.amount_due_remaining,0),
4956 ROUND((nvl(sch.amount_due_remaining,0) * nvl(sch.exchange_rate,1) *
4957 rt.sec_conversion_rate) / g_secondary_mau) *
4958 g_secondary_mau) amount_due_remaining_sec,
4959 trunc(sch.trx_date) trx_date,
4960 trunc(sch.gl_date) gl_date,
4961 decode(g_collection_criteria,'GL',sch.gl_date,sch.trx_date) filter_date,
4962 trunc(sch.due_date) due_date,
4963 sch.status,
4964 sch.customer_trx_id,
4965 sch.invoice_currency_code,
4966 sch.customer_id bill_to_customer_id,
4967 sch.customer_site_use_id bill_to_site_use_id,
4968 sch.org_id,
4969 sch.created_by user_id,
4970 sch.cust_trx_type_id cust_trx_type_id,
4971 sch.trx_number transaction_number,
4972 sch.term_id,
4973 sch.terms_sequence_number,
4974 trx.batch_source_id,
4975 sch.discount_taken_earned earned_discount_amount_trx,
4976 NVL(ROUND(sch.discount_taken_earned * nvl(sch.exchange_rate,1) /
4977 rt.functional_mau) * rt.functional_mau,
4978 nvl(sch.discount_taken_earned,0)) earned_discount_amount_func,
4979 DECODE(sch.invoice_currency_code,
4980 g_prim_currency, nvl(sch.discount_taken_earned,0),
4981 ROUND((nvl(sch.discount_taken_earned,0) * nvl(sch.exchange_rate,1) *
4982 rt.prim_conversion_rate) / g_primary_mau) *
4983 g_primary_mau) earned_discount_amount_prim,
4984 DECODE(sch.invoice_currency_code,
4985 g_sec_currency, nvl(sch.discount_taken_earned,0),
4986 ROUND((nvl(sch.discount_taken_earned,0) * nvl(sch.exchange_rate,1) *
4987 rt.sec_conversion_rate) / g_secondary_mau) *
4988 g_secondary_mau) earned_discount_amount_sec,
4989 nvl(sch.discount_taken_unearned,0) unearned_discount_amount_trx,
4990 NVL(ROUND(sch.discount_taken_unearned * nvl(sch.exchange_rate,1) /
4991 rt.functional_mau) * rt.functional_mau,
4992 nvl(sch.discount_taken_unearned,0)) unearned_discount_amount_func,
4993 DECODE(sch.invoice_currency_code,
4994 g_prim_currency, nvl(sch.discount_taken_unearned,0),
4995 ROUND((nvl(sch.discount_taken_unearned,0) * nvl(sch.exchange_rate,1) *
4996 rt.prim_conversion_rate) / g_primary_mau) *
4997 g_primary_mau) unearned_discount_amount_prim,
4998 DECODE(sch.invoice_currency_code,
4999 g_sec_currency, nvl(sch.discount_taken_unearned,0),
5000 ROUND((nvl(sch.discount_taken_unearned,0) * nvl(sch.exchange_rate,1) *
5001 rt.sec_conversion_rate) / g_secondary_mau) *
5002 g_secondary_mau) unearned_discount_amount_sec,
5003 nvl(sch.amount_adjusted,0) adjusted_amount_trx,
5004 NVL(ROUND(sch.amount_adjusted * nvl(sch.exchange_rate,1) /
5005 rt.functional_mau) * rt.functional_mau,
5006 nvl(sch.amount_adjusted,0)) adjusted_amount_func,
5007 DECODE(sch.invoice_currency_code,
5008 g_prim_currency, nvl(sch.amount_adjusted,0),
5009 ROUND((nvl(sch.amount_adjusted,0) * nvl(sch.exchange_rate,1) *
5010 rt.prim_conversion_rate) / g_primary_mau) *
5011 g_primary_mau) adjusted_amount_prim,
5012 DECODE(sch.invoice_currency_code,
5013 g_sec_currency, nvl(sch.amount_adjusted,0),
5014 ROUND((nvl(sch.amount_adjusted,0) * nvl(sch.exchange_rate,1) *
5015 rt.sec_conversion_rate) / g_secondary_mau) *
5016 g_secondary_mau) adjusted_amount_sec,
5017 nvl(sch.amount_in_dispute,0) disputed_amount_trx,
5018 NVL(ROUND(sch.amount_in_dispute * nvl(sch.exchange_rate,1) /
5019 rt.functional_mau) * rt.functional_mau ,
5020 nvl(sch.amount_in_dispute,0)) disputed_amount_func,
5021 DECODE(sch.invoice_currency_code,
5022 g_prim_currency, nvl(sch.amount_in_dispute,0),
5023 ROUND((nvl(sch.amount_in_dispute,0) * nvl(sch.exchange_rate,1) *
5024 rt.prim_conversion_rate) / g_primary_mau) *
5025 g_primary_mau) disputed_amount_prim,
5026 DECODE(sch.invoice_currency_code,
5027 g_sec_currency, nvl(sch.amount_in_dispute,0),
5028 ROUND((nvl(sch.amount_in_dispute,0) * nvl(sch.exchange_rate,1) *
5029 rt.sec_conversion_rate) / g_secondary_mau) *
5030 g_secondary_mau) disputed_amount_sec,
5031 decode(trx.batch_source_id,
5032 -1, trx.ct_reference,
5033 null) order_ref_number,
5034 sch.actual_date_closed,
5035 nvl(sch.exchange_rate,1) EXCHANGE_RATE,
5036 nvl(sch.exchange_date, sch.trx_date) EXCHANGE_DATE,
5037 trx.previous_customer_trx_id,
5038 sysdate CREATION_DATE,
5039 g_fii_user_id CREATED_BY,
5040 sysdate LAST_UPDATE_DATE,
5041 g_fii_user_id LAST_UPDATED_BY,
5042 g_fii_login_id LAST_UPDATE_LOGIN
5043 FROM FII_AR_PAYSCH_MERGE_GT sch,
5044 RA_CUSTOMER_TRX_ALL trx,
5045 FII_AR_CURR_RATES_T rt,
5046 AR_SYSTEM_PARAMETERS_ALL par,
5047 GL_SETS_OF_BOOKS sob
5048 WHERE sch.class IN ('INV','DM','CB','CM','DEP','BR', 'PMT')
5049 /*AND decode(g_collection_criteria,
5050 'GL', sch.gl_date,
5051 sch.trx_date) >= g_global_start_date */
5052 AND sch.customer_trx_id = trx.customer_trx_id (+)
5053
5054 AND sch.org_id = par.org_id
5055 AND par.set_of_books_id = sob.set_of_books_id
5056 AND sob.currency_code = rt.fc_code
5057 AND trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) = rt.conversion_date
5058 ) dlt
5059 on ( old.PAYMENT_SCHEDULE_ID = dlt.PAYMENT_SCHEDULE_ID )
5060 when matched then update set
5061 -- old.PAYMENT_SCHEDULE_ID = dlt.PAYMENT_SCHEDULE_ID,
5062 -- old.TIME_ID = dlt.TIME_ID,
5063 -- old.CLASS = dlt.CLASS,
5064 -- old.AMOUNT_DUE_ORIGINAL_TRX = dlt.AMOUNT_DUE_ORIGINAL_TRX,
5065 -- old.AMOUNT_DUE_ORIGINAL_FUNC = dlt.AMOUNT_DUE_ORIGINAL_FUNC,
5066 -- old.AMOUNT_DUE_ORIGINAL_PRIM = dlt.AMOUNT_DUE_ORIGINAL_PRIM,
5067 -- old.AMOUNT_DUE_ORIGINAL_SEC = dlt.AMOUNT_DUE_ORIGINAL_SEC,
5068 old.AMOUNT_DUE_REMAINING_TRX = dlt.AMOUNT_DUE_REMAINING_TRX,
5069 old.AMOUNT_DUE_REMAINING_FUNC = dlt.AMOUNT_DUE_REMAINING_FUNC,
5070 old.AMOUNT_DUE_REMAINING_PRIM = dlt.AMOUNT_DUE_REMAINING_PRIM,
5071 old.AMOUNT_DUE_REMAINING_SEC = dlt.AMOUNT_DUE_REMAINING_SEC,
5072 -- old.TRX_DATE = dlt.TRX_DATE,
5073 -- old.GL_DATE = dlt.GL_DATE,
5074 -- old.FILTER_DATE = dlt.FILTER_DATE,
5075 old.DUE_DATE = dlt.DUE_DATE,
5076 old.STATUS = dlt.STATUS,
5077 -- old.CUSTOMER_TRX_ID = dlt.CUSTOMER_TRX_ID,
5078 -- old.INVOICE_CURRENCY_CODE = dlt.INVOICE_CURRENCY_CODE,
5079 -- old.BILL_TO_CUSTOMER_ID = dlt.BILL_TO_CUSTOMER_ID,
5080 -- old.BILL_TO_SITE_USE_ID = dlt.BILL_TO_SITE_USE_ID,
5081 -- old.ORG_ID = dlt.ORG_ID,
5082 -- old.USER_ID = dlt.USER_ID,
5083 -- old.CUST_TRX_TYPE_ID = dlt.CUST_TRX_TYPE_ID,
5084 -- old.TRANSACTION_NUMBER = dlt.TRANSACTION_NUMBER,
5085 old.TERM_ID = dlt.TERM_ID,
5086 old.terms_sequence_number = dlt.terms_sequence_number,
5087 -- old.BATCH_SOURCE_ID = dlt.BATCH_SOURCE_ID,
5088 old.EARNED_DISCOUNT_AMOUNT_TRX = dlt.EARNED_DISCOUNT_AMOUNT_TRX,
5089 old.EARNED_DISCOUNT_AMOUNT_FUNC = dlt.EARNED_DISCOUNT_AMOUNT_FUNC,
5090 old.EARNED_DISCOUNT_AMOUNT_PRIM = dlt.EARNED_DISCOUNT_AMOUNT_PRIM,
5091 old.EARNED_DISCOUNT_AMOUNT_SEC = dlt.EARNED_DISCOUNT_AMOUNT_SEC,
5092 old.UNEARNED_DISCOUNT_AMOUNT_TRX = dlt.UNEARNED_DISCOUNT_AMOUNT_TRX,
5093 old.UNEARNED_DISCOUNT_AMOUNT_FUNC = dlt.UNEARNED_DISCOUNT_AMOUNT_FUNC,
5094 old.UNEARNED_DISCOUNT_AMOUNT_PRIM = dlt.UNEARNED_DISCOUNT_AMOUNT_PRIM,
5095 old.UNEARNED_DISCOUNT_AMOUNT_SEC = dlt.UNEARNED_DISCOUNT_AMOUNT_SEC,
5096 old.ADJUSTED_AMOUNT_TRX = dlt.ADJUSTED_AMOUNT_TRX,
5097 old.ADJUSTED_AMOUNT_FUNC = dlt.ADJUSTED_AMOUNT_FUNC,
5098 old.ADJUSTED_AMOUNT_PRIM = dlt.ADJUSTED_AMOUNT_PRIM,
5099 old.ADJUSTED_AMOUNT_SEC = dlt.ADJUSTED_AMOUNT_SEC,
5100 old.DISPUTED_AMOUNT_TRX = dlt.DISPUTED_AMOUNT_TRX,
5101 old.DISPUTED_AMOUNT_FUNC = dlt.DISPUTED_AMOUNT_FUNC,
5102 old.DISPUTED_AMOUNT_PRIM = dlt.DISPUTED_AMOUNT_PRIM,
5103 old.DISPUTED_AMOUNT_SEC = dlt.DISPUTED_AMOUNT_SEC,
5104 old.ORDER_REF_NUMBER = dlt.ORDER_REF_NUMBER,
5105 old.ACTUAL_DATE_CLOSED = dlt.ACTUAL_DATE_CLOSED,
5106 old.EXCHANGE_RATE = dlt.EXCHANGE_RATE,
5107 old.EXCHANGE_DATE = dlt.EXCHANGE_DATE,
5108 old.PREVIOUS_CUSTOMER_TRX_ID = dlt.PREVIOUS_CUSTOMER_TRX_ID,
5109 -- old.CREATION_DATE = dlt.CREATION_DATE,
5110 -- old.CREATED_BY = dlt.CREATED_BY,
5111 old.LAST_UPDATE_DATE = dlt.LAST_UPDATE_DATE,
5112 old.LAST_UPDATED_BY = dlt.LAST_UPDATED_BY,
5113 old.LAST_UPDATE_LOGIN = dlt.LAST_UPDATE_LOGIN
5114 when not matched then insert
5115 (
5116 PAYMENT_SCHEDULE_ID,
5117 TIME_ID,
5118 CLASS,
5119 AMOUNT_DUE_ORIGINAL_TRX,
5120 AMOUNT_DUE_ORIGINAL_FUNC,
5121 AMOUNT_DUE_ORIGINAL_PRIM,
5122 AMOUNT_DUE_ORIGINAL_SEC,
5123 AMOUNT_DUE_REMAINING_TRX,
5124 AMOUNT_DUE_REMAINING_FUNC,
5125 AMOUNT_DUE_REMAINING_PRIM,
5126 AMOUNT_DUE_REMAINING_SEC,
5127 TRX_DATE,
5128 GL_DATE,
5129 FILTER_DATE,
5130 DUE_DATE,
5131 STATUS,
5132 CUSTOMER_TRX_ID,
5133 INVOICE_CURRENCY_CODE,
5134 BILL_TO_CUSTOMER_ID,
5135 BILL_TO_SITE_USE_ID,
5136 ORG_ID,
5137 USER_ID,
5138 CUST_TRX_TYPE_ID,
5139 TRANSACTION_NUMBER,
5140 TERM_ID,
5141 terms_sequence_number,
5142 BATCH_SOURCE_ID,
5143 EARNED_DISCOUNT_AMOUNT_TRX,
5144 EARNED_DISCOUNT_AMOUNT_FUNC,
5145 EARNED_DISCOUNT_AMOUNT_PRIM,
5146 EARNED_DISCOUNT_AMOUNT_SEC,
5147 UNEARNED_DISCOUNT_AMOUNT_TRX,
5148 UNEARNED_DISCOUNT_AMOUNT_FUNC,
5149 UNEARNED_DISCOUNT_AMOUNT_PRIM,
5150 UNEARNED_DISCOUNT_AMOUNT_SEC,
5151 ADJUSTED_AMOUNT_TRX,
5152 ADJUSTED_AMOUNT_FUNC,
5153 ADJUSTED_AMOUNT_PRIM,
5154 ADJUSTED_AMOUNT_SEC,
5155 DISPUTED_AMOUNT_TRX,
5156 DISPUTED_AMOUNT_FUNC,
5157 DISPUTED_AMOUNT_PRIM,
5158 DISPUTED_AMOUNT_SEC,
5159 ORDER_REF_NUMBER,
5160 ACTUAL_DATE_CLOSED,
5161 EXCHANGE_RATE,
5162 EXCHANGE_DATE,
5163 PREVIOUS_CUSTOMER_TRX_ID,
5164 CREATION_DATE,
5165 CREATED_BY,
5166 LAST_UPDATE_DATE,
5167 LAST_UPDATED_BY,
5168 LAST_UPDATE_LOGIN
5169 )
5170 values(
5171 dlt.PAYMENT_SCHEDULE_ID,
5172 dlt.TIME_ID,
5173 dlt.CLASS,
5174 dlt.AMOUNT_DUE_ORIGINAL_TRX,
5175 dlt.AMOUNT_DUE_ORIGINAL_FUNC,
5176 dlt.AMOUNT_DUE_ORIGINAL_PRIM,
5177 dlt.AMOUNT_DUE_ORIGINAL_SEC,
5178 dlt.AMOUNT_DUE_REMAINING_TRX,
5179 dlt.AMOUNT_DUE_REMAINING_FUNC,
5180 dlt.AMOUNT_DUE_REMAINING_PRIM,
5181 dlt.AMOUNT_DUE_REMAINING_SEC,
5182 dlt.TRX_DATE,
5183 dlt.GL_DATE,
5184 dlt.FILTER_DATE,
5185 dlt.DUE_DATE,
5186 dlt.STATUS,
5187 dlt.CUSTOMER_TRX_ID,
5188 dlt.INVOICE_CURRENCY_CODE,
5189 dlt.BILL_TO_CUSTOMER_ID,
5190 dlt.BILL_TO_SITE_USE_ID,
5191 dlt.ORG_ID,
5192 dlt.USER_ID,
5193 dlt.CUST_TRX_TYPE_ID,
5194 dlt.TRANSACTION_NUMBER,
5195 dlt.TERM_ID,
5196 dlt.terms_sequence_number,
5197 dlt.BATCH_SOURCE_ID,
5198 dlt.EARNED_DISCOUNT_AMOUNT_TRX,
5199 dlt.EARNED_DISCOUNT_AMOUNT_FUNC,
5200 dlt.EARNED_DISCOUNT_AMOUNT_PRIM,
5201 dlt.EARNED_DISCOUNT_AMOUNT_SEC,
5202 dlt.UNEARNED_DISCOUNT_AMOUNT_TRX,
5203 dlt.UNEARNED_DISCOUNT_AMOUNT_FUNC,
5204 dlt.UNEARNED_DISCOUNT_AMOUNT_PRIM,
5205 dlt.UNEARNED_DISCOUNT_AMOUNT_SEC,
5206 dlt.ADJUSTED_AMOUNT_TRX,
5207 dlt.ADJUSTED_AMOUNT_FUNC,
5208 dlt.ADJUSTED_AMOUNT_PRIM,
5209 dlt.ADJUSTED_AMOUNT_SEC,
5210 dlt.DISPUTED_AMOUNT_TRX,
5211 dlt.DISPUTED_AMOUNT_FUNC,
5212 dlt.DISPUTED_AMOUNT_PRIM,
5213 dlt.DISPUTED_AMOUNT_SEC,
5214 dlt.ORDER_REF_NUMBER,
5215 dlt.ACTUAL_DATE_CLOSED,
5216 dlt.EXCHANGE_RATE,
5217 dlt.EXCHANGE_DATE,
5218 dlt.PREVIOUS_CUSTOMER_TRX_ID,
5219 dlt.CREATION_DATE,
5220 dlt.CREATED_BY,
5221 dlt.LAST_UPDATE_DATE,
5222 dlt.LAST_UPDATED_BY,
5223 dlt.LAST_UPDATE_LOGIN
5224 );
5225
5226 if g_debug_flag = 'Y' then
5227 FII_UTIL.put_line('Merged ' ||SQL%ROWCOUNT|| ' records into FII_AR_PMT_SCHEDULES_F');
5228 FII_UTIL.stop_timer;
5229 FII_UTIL.print_timer('Duration');
5230 FII_UTIL.put_line('');
5231 end if;
5232
5233 g_state := 'Analyzing FII_AR_PMT_SCHEDULES_F table';
5234 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_PMT_SCHEDULES_F');
5235
5236 g_state := 'Logging maximum payment schedule id into fii_change_log table';
5237 select nvl(max(payment_schedule_id), -999)
5238 into l_max_pmt_schedule_id
5239 from fii_ar_pmt_schedules_f;
5240
5241 INSERT INTO fii_change_log
5242 (log_item, item_value, CREATION_DATE, CREATED_BY,
5243 LAST_UPDATE_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN)
5244 (SELECT 'AR_MAX_PAYMENT_SCHEDULE_ID',
5245 l_max_pmt_schedule_id,
5246 sysdate, --CREATION_DATE,
5247 g_fii_user_id, --CREATED_BY,
5248 sysdate, --LAST_UPDATE_DATE,
5249 g_fii_user_id, --LAST_UPDATED_BY,
5250 g_fii_login_id --LAST_UPDATE_LOGIN
5251 FROM DUAL
5252 WHERE NOT EXISTS
5253 (select 1 from fii_change_log
5254 where log_item = 'AR_MAX_PAYMENT_SCHEDULE_ID'));
5255
5256 IF (SQL%ROWCOUNT = 0) THEN
5257 UPDATE fii_change_log
5258 SET item_value = l_max_pmt_schedule_id,
5259 last_update_date = g_sysdate_time,
5260 last_update_login = g_fii_login_id,
5261 last_updated_by = g_fii_user_id
5262 WHERE log_item = 'AR_MAX_PAYMENT_SCHEDULE_ID';
5263 END IF;
5264
5265 EXCEPTION
5266 WHEN OTHERS THEN
5267 g_errbuf:=sqlerrm;
5268 g_retcode:= -1;
5269 g_exception_msg := g_retcode || ':' || g_errbuf;
5270 FII_UTIL.put_line('Error occured while ' || g_state);
5271 FII_UTIL.put_line(g_exception_msg);
5272 RAISE;
5273
5274 END Inc_PAYMENT_SCHEDULES;
5275
5276 ------------------------------------------------------------------
5277 -- Procedure Inc_DISPUTES
5278 -- Purpose
5279 -- This procedure manipulates records in FII_AR_DISPUTE_HISTORY_F
5280 ------------------------------------------------------------------
5281 PROCEDURE Inc_DISPUTES IS
5282 BEGIN
5283
5284 /*
5285 g_state := 'Truncating table FII_AR_DISPUTE_HISTORY_F';
5286 TRUNCATE_TABLE('FII_AR_DISPUTE_HISTORY_F');
5287 */
5288
5289 g_state := 'Deleting FII_AR_DISPUTE_HISTORY_F';
5290 if g_debug_flag = 'Y' then
5291 FII_UTIL.put_line(g_state);
5292 FII_UTIL.start_timer;
5293 FII_UTIL.put_line('');
5294 end if;
5295
5296 delete from fii_ar_dispute_history_f
5297 where PAYMENT_SCHEDULE_ID in (
5298 -- PaySch Delete 1 2 3
5299 select PAYMENT_SCHEDULE_ID
5300 from FII_AR_PAYSCH_DELETE_GT
5301 );
5302
5303 if g_debug_flag = 'Y' then
5304 FII_UTIL.put_line('Deleted ' ||SQL%ROWCOUNT|| ' records from FII_AR_DISPUTE_HISTORY_F');
5305 FII_UTIL.stop_timer;
5306 FII_UTIL.print_timer('Duration');
5307 FII_UTIL.put_line('');
5308 end if;
5309
5310 commit;
5311
5312 g_state := 'Merging into FII_AR_DISPUTE_HISTORY_F';
5313 if g_debug_flag = 'Y' then
5314 FII_UTIL.put_line(g_state);
5315 FII_UTIL.start_timer;
5316 FII_UTIL.put_line('');
5317 end if;
5318
5319 merge into fii_ar_dispute_history_f old using (
5320 -- POPULATE_DISPUTES
5321 SELECT dis.dispute_history_id,
5322 to_number(to_char(dis.start_date, 'J')) time_id,
5323 dis.dispute_amount dispute_amount_trx,
5324 NVL(ROUND(dis.dispute_amount * sch.exchange_rate / rt.functional_mau)
5325 * rt.functional_mau, nvl(dis.dispute_amount,0)) dispute_amount_func,
5326 DECODE(sch.invoice_currency_code,
5327 g_prim_currency, nvl(dis.dispute_amount,0),
5328 ROUND((nvl(dis.dispute_amount,0) * sch.exchange_rate *
5329 rt.prim_conversion_rate) / g_primary_mau) *
5330 g_primary_mau) dispute_amount_prim,
5331 DECODE(sch.invoice_currency_code,
5332 g_sec_currency, nvl(dis.dispute_amount,0),
5333 ROUND((nvl(dis.dispute_amount,0) * sch.exchange_rate *
5334 rt.sec_conversion_rate) / g_secondary_mau) *
5335 g_secondary_mau) dispute_amount_sec,
5336 dis.start_date,
5337 dis.end_date,
5338 sch.org_id,
5339 sch.bill_to_customer_id,
5340 sch.bill_to_site_use_id,
5341 dis.payment_schedule_id,
5342 sch.customer_trx_id,
5343 sch.due_date,
5344 sch.actual_date_closed,
5345 sysdate CREATION_DATE,
5346 g_fii_user_id CREATED_BY,
5347 sysdate LAST_UPDATE_DATE,
5348 g_fii_user_id LAST_UPDATED_BY,
5349 g_fii_login_id LAST_UPDATE_LOGIN
5350 FROM /* (
5351 select * from FII_AR_DISP_UPDATE_GT
5352 -- where start_date >= g_global_start_date
5353 -- and last_update_date <= g_sysdate_time
5354 ) */
5355 FII_AR_DISP_UPDATE_GT dis,
5356 -- FII_AR_PMT_SCHEDULES_F sch, --> FII_AR_PAYSCH_MERGE_GT
5357 ( select
5358 actual_date_closed,
5359 sch.customer_id bill_to_customer_id,
5360 sch.customer_site_use_id bill_to_site_use_id,
5361 class,
5362 customer_trx_id,
5363 due_date,
5364 nvl(sch.exchange_date, sch.trx_date) exchange_date,
5365 nvl(sch.exchange_rate,1) exchange_rate,
5366 invoice_currency_code,
5367 org_id,
5368 payment_schedule_id,
5369 trx_date
5370 from FII_AR_PAYSCH_MERGE_GT sch
5371 ) sch,
5372 FII_AR_CURR_RATES_T rt,
5373 AR_SYSTEM_PARAMETERS_ALL par,
5374 GL_SETS_OF_BOOKS sob
5375 WHERE dis.payment_schedule_id = sch.payment_schedule_id
5376 AND sch.class <> 'PMT'
5377 AND dis.start_date <= sch.actual_date_closed
5378 AND dis.start_date >= g_global_start_date
5379 AND dis.last_update_date <= g_sysdate_time --To avoid duplication in incremental
5380
5381 AND sch.org_id = par.org_id
5382 AND par.set_of_books_id = sob.set_of_books_id
5383 AND sob.currency_code = rt.fc_code
5384 AND trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) = rt.conversion_date
5385 ) dlt
5386 on ( old.DISPUTE_HISTORY_ID = dlt.DISPUTE_HISTORY_ID )
5387 when matched then update set
5388 -- old.DISPUTE_HISTORY_ID = dlt.DISPUTE_HISTORY_ID,
5389 -- old.TIME_ID = dlt.TIME_ID,
5390 -- old.DISPUTE_AMOUNT_TRX = dlt.DISPUTE_AMOUNT_TRX,
5391 -- old.DISPUTE_AMOUNT_FUNC = dlt.DISPUTE_AMOUNT_FUNC,
5392 -- old.DISPUTE_AMOUNT_PRIM = dlt.DISPUTE_AMOUNT_PRIM,
5393 -- old.DISPUTE_AMOUNT_SEC = dlt.DISPUTE_AMOUNT_SEC,
5394 -- old.START_DATE = dlt.START_DATE,
5395 old.END_DATE = dlt.END_DATE,
5396 -- old.ORG_ID = dlt.ORG_ID,
5397 -- old.BILL_TO_CUSTOMER_ID = dlt.BILL_TO_CUSTOMER_ID,
5398 -- old.BILL_TO_SITE_USE_ID = dlt.BILL_TO_SITE_USE_ID,
5399 -- old.PAYMENT_SCHEDULE_ID = dlt.PAYMENT_SCHEDULE_ID,
5400 -- old.CUSTOMER_TRX_ID = dlt.CUSTOMER_TRX_ID,
5401 old.DUE_DATE = dlt.DUE_DATE,
5402 old.ACTUAL_DATE_CLOSED = dlt.ACTUAL_DATE_CLOSED,
5403 -- old.CREATION_DATE = dlt.CREATION_DATE,
5404 -- old.CREATED_BY = dlt.CREATED_BY,
5405 old.LAST_UPDATE_DATE = dlt.LAST_UPDATE_DATE,
5406 old.LAST_UPDATED_BY = dlt.LAST_UPDATED_BY,
5407 old.LAST_UPDATE_LOGIN = dlt.LAST_UPDATE_LOGIN
5408 when not matched then insert
5409 (
5410 DISPUTE_HISTORY_ID,
5411 TIME_ID,
5412 DISPUTE_AMOUNT_TRX,
5413 DISPUTE_AMOUNT_FUNC,
5414 DISPUTE_AMOUNT_PRIM,
5415 DISPUTE_AMOUNT_SEC,
5416 START_DATE,
5417 END_DATE,
5418 ORG_ID,
5419 BILL_TO_CUSTOMER_ID,
5420 BILL_TO_SITE_USE_ID,
5421 PAYMENT_SCHEDULE_ID,
5422 CUSTOMER_TRX_ID,
5423 DUE_DATE,
5424 ACTUAL_DATE_CLOSED,
5425 CREATION_DATE,
5426 CREATED_BY,
5427 LAST_UPDATE_DATE,
5428 LAST_UPDATED_BY,
5429 LAST_UPDATE_LOGIN
5430 )
5431 values(
5432 dlt.DISPUTE_HISTORY_ID,
5433 dlt.TIME_ID,
5434 dlt.DISPUTE_AMOUNT_TRX,
5435 dlt.DISPUTE_AMOUNT_FUNC,
5436 dlt.DISPUTE_AMOUNT_PRIM,
5437 dlt.DISPUTE_AMOUNT_SEC,
5438 dlt.START_DATE,
5439 dlt.END_DATE,
5440 dlt.ORG_ID,
5441 dlt.BILL_TO_CUSTOMER_ID,
5442 dlt.BILL_TO_SITE_USE_ID,
5443 dlt.PAYMENT_SCHEDULE_ID,
5444 dlt.CUSTOMER_TRX_ID,
5445 dlt.DUE_DATE,
5446 dlt.ACTUAL_DATE_CLOSED,
5447 dlt.CREATION_DATE,
5448 dlt.CREATED_BY,
5449 dlt.LAST_UPDATE_DATE,
5450 dlt.LAST_UPDATED_BY,
5451 dlt.LAST_UPDATE_LOGIN
5452 );
5453
5454 if g_debug_flag = 'Y' then
5455 FII_UTIL.put_line('Merged ' ||SQL%ROWCOUNT|| ' records into FII_AR_DISPUTE_HISTORY_F');
5456 FII_UTIL.stop_timer;
5457 FII_UTIL.print_timer('Duration');
5458 FII_UTIL.put_line('');
5459 end if;
5460
5461 g_state := 'Analyzing FII_AR_DISPUTE_HISTORY_F table';
5462 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_DISPUTE_HISTORY_F');
5463
5464 EXCEPTION
5465 WHEN OTHERS THEN
5466 g_errbuf:=sqlerrm;
5467 g_retcode:= -1;
5468 g_exception_msg := g_retcode || ':' || g_errbuf;
5469 FII_UTIL.put_line('Error occured while ' || g_state);
5470 FII_UTIL.put_line(g_exception_msg);
5471 RAISE;
5472
5473 END Inc_DISPUTES;
5474
5475
5476 ------------------------------------------------------------------
5477 -- Procedure Inc_TRANSACTIONS
5478 -- Purpose
5479 -- This procedure manipulates records in FII_AR_TRANSACTIONS_F
5480 ------------------------------------------------------------------
5481 PROCEDURE Inc_TRANSACTIONS IS
5482 BEGIN
5483
5484 /*
5485 g_state := 'Truncating table MLOG$_FII_AR_TRANSACTIONS_F';
5486 TRUNCATE_TABLE('MLOG$_FII_AR_TRANSACTIONS_F');
5487 g_state := 'Truncating table FII_AR_TRANSACTIONS_F';
5488 TRUNCATE_TABLE('FII_AR_TRANSACTIONS_F');
5489 */
5490
5491 g_state := 'Deleting FII_AR_TRANSACTIONS_F';
5492 if g_debug_flag = 'Y' then
5493 FII_UTIL.put_line(g_state);
5494 FII_UTIL.start_timer;
5495 FII_UTIL.put_line('');
5496 end if;
5497
5498 delete from fii_ar_transactions_f
5499 where CUSTOMER_TRX_ID in (
5500 -- Trans Delete
5501 select CUSTOMER_TRX_ID
5502 from FII_AR_TRANS_DELETE_GT
5503 );
5504
5505 if g_debug_flag = 'Y' then
5506 FII_UTIL.put_line('Deleted ' ||SQL%ROWCOUNT|| ' records from FII_AR_TRANSACTIONS_F');
5507 FII_UTIL.stop_timer;
5508 FII_UTIL.print_timer('Duration');
5509 FII_UTIL.put_line('');
5510 end if;
5511
5512 commit;
5513
5514 g_state := 'Merging into FII_AR_TRANSACTIONS_F';
5515 if g_debug_flag = 'Y' then
5516 FII_UTIL.put_line(g_state);
5517 FII_UTIL.start_timer;
5518 FII_UTIL.put_line('');
5519 end if;
5520
5521 merge into fii_ar_transactions_f old using (
5522 -- POPULATE_TRANSACTIONS
5523 SELECT trx.customer_trx_id,
5524 trx.org_id,
5525 to_number(to_char(decode(g_collection_criteria,
5526 'GL', sch.gl_date,
5527 trx.trx_date), 'J')) time_id,
5528 trunc(trx.trx_date) trx_date,
5529 trunc(sch.gl_date) gl_date,
5530 sch.class, --class
5531 sum(nvl(sch.amount_due_original_trx,0)) AMOUNT_DUE_ORIGINAL_TRX,
5532 sum(nvl(sch.amount_due_original_func,0)) AMOUNT_DUE_ORIGINAL_FUNC,
5533 sum(nvl(sch.amount_due_original_prim,0)) AMOUNT_DUE_ORIGINAL_PRIM,
5534 sum(nvl(sch.amount_due_original_sec,0)) AMOUNT_DUE_ORIGINAL_SEC,
5535 NVL(trx.bill_to_customer_id, trx.drawee_id) BILL_TO_CUSTOMER_ID, -- drawee_id used for BR
5536 NVL(trx.bill_to_site_use_id,
5537 trx.drawee_site_use_id) BILL_TO_SITE_USE_ID, --drawee_site_use_id used for BR
5538 trx.trx_number TRANSACTION_NUMBER,
5539 trx.cust_trx_type_id,
5540 trx.term_id,
5541 trx.batch_source_id,
5542 decode(g_collection_criteria,'GL', sch.gl_date, trx.trx_date) filter_date,
5543 decode(trx.batch_source_id,
5544 -1, trx.ct_reference,
5545 null) order_ref_number, -- -1 indicates that the trx is a manual order entry
5546 trx.invoice_currency_code,
5547 nvl(trx.exchange_rate,1) exchange_rate,
5548 nvl(trx.exchange_date,trx.trx_date) exchange_date,
5549 trx.initial_customer_trx_id,
5550 trx.previous_customer_trx_id,
5551 trx.created_by user_id,
5552 trx.creation_date ar_creation_date,
5553 decode(sch.class,'INV',sum(nvl(sch.amount_due_original_func,0)),0) INV_ba_amount_func,
5554 decode(sch.class,'INV',sum(nvl(sch.amount_due_original_prim,0)),0) INV_ba_amount_prim,
5555 decode(sch.class,'INV',sum(nvl(sch.amount_due_original_sec,0)),0) INV_ba_amount_sec,
5556 decode(sch.class,'INV',1,0) INV_ba_count,
5557 decode(sch.class,'DM',sum(nvl(sch.amount_due_original_func,0)),0) DM_ba_amount_func,
5558 decode(sch.class,'DM',sum(nvl(sch.amount_due_original_prim,0)),0) DM_ba_amount_prim,
5559 decode(sch.class,'DM',sum(nvl(sch.amount_due_original_sec,0)),0) DM_ba_amount_sec,
5560 decode(sch.class,'DM',1,0) DM_ba_count,
5561 decode(sch.class,'CB',sum(nvl(sch.amount_due_original_func,0)),0) CB_ba_amount_func,
5562 decode(sch.class,'CB',sum(nvl(sch.amount_due_original_prim,0)),0) CB_ba_amount_prim,
5563 decode(sch.class,'CB',sum(nvl(sch.amount_due_original_sec,0)),0) CB_ba_amount_sec,
5564 decode(sch.class,'CB',1,0) CB_ba_count,
5565 decode(sch.class,'BR',sum(nvl(sch.amount_due_original_func,0)),0) BR_ba_amount_func,
5566 decode(sch.class,'BR',sum(nvl(sch.amount_due_original_prim,0)),0) BR_ba_amount_prim,
5567 decode(sch.class,'BR',sum(nvl(sch.amount_due_original_sec,0)),0) BR_ba_amount_sec,
5568 decode(sch.class,'BR',1,0) BR_ba_count,
5569 decode(sch.class,'DEP',sum(nvl(sch.amount_due_original_func,0)),0) DEP_ba_amount_func,
5570 decode(sch.class,'DEP',sum(nvl(sch.amount_due_original_prim,0)),0) DEP_ba_amount_prim,
5571 decode(sch.class,'DEP',sum(nvl(sch.amount_due_original_sec,0)),0) DEP_ba_amount_sec,
5572 decode(sch.class,'DEP',1,0) DEP_ba_count,
5573 decode(sch.class,'CM',sum(nvl(sch.amount_due_original_func,0)),0) CM_ba_amount_func,
5574 decode(sch.class,'CM',sum(nvl(sch.amount_due_original_prim,0)),0) CM_ba_amount_prim,
5575 decode(sch.class,'CM',sum(nvl(sch.amount_due_original_sec,0)),0) CM_ba_amount_sec,
5576 decode(sch.class,'CM',1,0) CM_ba_count,
5577 sysdate CREATION_DATE,
5578 g_fii_user_id CREATED_BY,
5579 sysdate LAST_UPDATE_DATE,
5580 g_fii_user_id LAST_UPDATED_BY,
5581 g_fii_login_id LAST_UPDATE_LOGIN
5582 FROM (
5583 select * from ra_customer_trx_all
5584 where CUSTOMER_TRX_ID in (
5585 -- Trans Insert, Update
5586 select CUSTOMER_TRX_ID
5587 from FII_AR_PAYSCH_INSERT_GT
5588 where CLASS <> 'PMT'
5589 -- and decode(g_collection_criteria, 'GL', gl_date, trx_date) >= g_global_start_date
5590 )
5591 ) trx,
5592 -- FII_AR_PMT_SCHEDULES_F sch --> FII_AR_PAYSCH_MERGE_GT
5593 ( select
5594 NVL(ROUND(sch.amount_due_original * nvl(sch.exchange_rate,1) /
5595 rt.functional_mau) * rt.functional_mau,
5596 nvl(sch.amount_due_original,0)) amount_due_original_func,
5597 DECODE(sch.invoice_currency_code,
5598 g_prim_currency, nvl(sch.amount_due_original,0),
5599 ROUND((nvl(sch.amount_due_original,0) *
5600 nvl(sch.exchange_rate,1) *
5601 rt.prim_conversion_rate) / g_primary_mau) *
5602 g_primary_mau) amount_due_original_prim,
5603 DECODE(sch.invoice_currency_code,
5604 g_sec_currency, nvl(sch.amount_due_original,0),
5605 ROUND((nvl(sch.amount_due_original,0) *
5606 nvl(sch.exchange_rate,1) *
5607 rt.sec_conversion_rate) / g_secondary_mau) *
5608 g_secondary_mau) amount_due_original_sec,
5609 sch.amount_due_original amount_due_original_trx,
5610 class,
5611 customer_trx_id,
5612 gl_date
5613 from FII_AR_PAYSCH_MERGE_GT sch,
5614 FII_AR_CURR_RATES_T rt,
5615 AR_SYSTEM_PARAMETERS_ALL par,
5616 GL_SETS_OF_BOOKS sob
5617 WHERE sch.org_id = par.org_id
5618 AND par.set_of_books_id = sob.set_of_books_id
5619 AND sob.currency_code = rt.fc_code
5620 AND trunc(least(nvl(sch.exchange_date,sch.trx_date),sysdate)) = rt.conversion_date
5621 ) sch
5622 WHERE trx.customer_trx_id = sch.customer_trx_id
5623 AND sch.class <> 'PMT'
5624 AND decode(g_collection_criteria,
5625 'GL', sch.gl_date,
5626 trx.trx_date) >= g_global_start_date
5627 GROUP BY trx.customer_trx_id,
5628 trx.org_id,
5629 to_number(to_char(trx.trx_date, 'J')), --time_id,
5630 trx.trx_date,
5631 sch.gl_date,
5632 sch.class,
5633 NVL(trx.bill_to_customer_id, trx.drawee_id),
5634 NVL(trx.bill_to_site_use_id, trx.drawee_site_use_id),
5635 trx.trx_number,
5636 trx.cust_trx_type_id,
5637 trx.term_id,
5638 trx.trx_date, --filter_date
5639 trx.invoice_currency_code,
5640 trx.exchange_rate,
5641 trx.exchange_date,
5642 trx.batch_source_id,
5643 trx.ct_reference,
5644 trx.initial_customer_trx_id,
5645 trx.previous_customer_trx_id,
5646 trx.created_by,
5647 trx.creation_date
5648 ) dlt
5649 on ( old.CUSTOMER_TRX_ID = dlt.CUSTOMER_TRX_ID )
5650 when matched then update set
5651 -- old.CUSTOMER_TRX_ID = dlt.CUSTOMER_TRX_ID,
5652 -- old.ORG_ID = dlt.ORG_ID,
5653 -- old.TIME_ID = dlt.TIME_ID,
5654 -- old.TRX_DATE = dlt.TRX_DATE,
5655 -- old.GL_DATE = dlt.GL_DATE,
5656 -- old.CLASS = dlt.CLASS,
5657 old.AMOUNT_DUE_ORIGINAL_TRX = dlt.AMOUNT_DUE_ORIGINAL_TRX,
5658 old.AMOUNT_DUE_ORIGINAL_FUNC = dlt.AMOUNT_DUE_ORIGINAL_FUNC,
5659 old.AMOUNT_DUE_ORIGINAL_PRIM = dlt.AMOUNT_DUE_ORIGINAL_PRIM,
5660 old.AMOUNT_DUE_ORIGINAL_SEC = dlt.AMOUNT_DUE_ORIGINAL_SEC,
5661 -- old.BILL_TO_CUSTOMER_ID = dlt.BILL_TO_CUSTOMER_ID,
5662 -- old.BILL_TO_SITE_USE_ID = dlt.BILL_TO_SITE_USE_ID,
5663 -- old.TRANSACTION_NUMBER = dlt.TRANSACTION_NUMBER,
5664 -- old.CUST_TRX_TYPE_ID = dlt.CUST_TRX_TYPE_ID,
5665 -- old.TERM_ID = dlt.TERM_ID,
5666 -- old.BATCH_SOURCE_ID = dlt.BATCH_SOURCE_ID,
5667 -- old.FILTER_DATE = dlt.FILTER_DATE,
5668 old.ORDER_REF_NUMBER = dlt.ORDER_REF_NUMBER,
5669 -- old.INVOICE_CURRENCY_CODE = dlt.INVOICE_CURRENCY_CODE,
5670 -- old.EXCHANGE_RATE = dlt.EXCHANGE_RATE,
5671 -- old.EXCHANGE_DATE = dlt.EXCHANGE_DATE,
5672 old.INITIAL_CUSTOMER_TRX_ID = dlt.INITIAL_CUSTOMER_TRX_ID,
5673 -- old.PREVIOUS_CUSTOMER_TRX_ID = dlt.PREVIOUS_CUSTOMER_TRX_ID,
5674 -- old.USER_ID = dlt.USER_ID,
5675 -- old.AR_CREATION_DATE = dlt.AR_CREATION_DATE,
5676 old.INV_BA_AMOUNT_FUNC = dlt.INV_BA_AMOUNT_FUNC,
5677 old.INV_BA_AMOUNT_PRIM = dlt.INV_BA_AMOUNT_PRIM,
5678 old.INV_BA_AMOUNT_SEC = dlt.INV_BA_AMOUNT_SEC,
5679 -- old.INV_BA_COUNT = dlt.INV_BA_COUNT,
5680 old.DM_BA_AMOUNT_FUNC = dlt.DM_BA_AMOUNT_FUNC,
5681 old.DM_BA_AMOUNT_PRIM = dlt.DM_BA_AMOUNT_PRIM,
5682 old.DM_BA_AMOUNT_SEC = dlt.DM_BA_AMOUNT_SEC,
5683 -- old.DM_BA_COUNT = dlt.DM_BA_COUNT,
5684 old.CB_BA_AMOUNT_FUNC = dlt.CB_BA_AMOUNT_FUNC,
5685 old.CB_BA_AMOUNT_PRIM = dlt.CB_BA_AMOUNT_PRIM,
5686 old.CB_BA_AMOUNT_SEC = dlt.CB_BA_AMOUNT_SEC,
5687 -- old.CB_BA_COUNT = dlt.CB_BA_COUNT,
5688 old.BR_BA_AMOUNT_FUNC = dlt.BR_BA_AMOUNT_FUNC,
5689 old.BR_BA_AMOUNT_PRIM = dlt.BR_BA_AMOUNT_PRIM,
5690 old.BR_BA_AMOUNT_SEC = dlt.BR_BA_AMOUNT_SEC,
5691 -- old.BR_BA_COUNT = dlt.BR_BA_COUNT,
5692 old.DEP_BA_AMOUNT_FUNC = dlt.DEP_BA_AMOUNT_FUNC,
5693 old.DEP_BA_AMOUNT_PRIM = dlt.DEP_BA_AMOUNT_PRIM,
5694 old.DEP_BA_AMOUNT_SEC = dlt.DEP_BA_AMOUNT_SEC,
5695 -- old.DEP_BA_COUNT = dlt.DEP_BA_COUNT,
5696 old.CM_BA_AMOUNT_FUNC = dlt.CM_BA_AMOUNT_FUNC,
5697 old.CM_BA_AMOUNT_PRIM = dlt.CM_BA_AMOUNT_PRIM,
5698 old.CM_BA_AMOUNT_SEC = dlt.CM_BA_AMOUNT_SEC,
5699 -- old.CM_BA_COUNT = dlt.CM_BA_COUNT,
5700 -- old.CREATION_DATE = dlt.CREATION_DATE,
5701 -- old.CREATED_BY = dlt.CREATED_BY,
5702 old.LAST_UPDATE_DATE = dlt.LAST_UPDATE_DATE,
5703 old.LAST_UPDATED_BY = dlt.LAST_UPDATED_BY,
5704 old.LAST_UPDATE_LOGIN = dlt.LAST_UPDATE_LOGIN
5705 when not matched then insert
5706 (
5707 CUSTOMER_TRX_ID,
5708 ORG_ID,
5709 TIME_ID,
5710 TRX_DATE,
5711 GL_DATE,
5712 CLASS,
5713 AMOUNT_DUE_ORIGINAL_TRX,
5714 AMOUNT_DUE_ORIGINAL_FUNC,
5715 AMOUNT_DUE_ORIGINAL_PRIM,
5716 AMOUNT_DUE_ORIGINAL_SEC,
5717 BILL_TO_CUSTOMER_ID,
5718 BILL_TO_SITE_USE_ID,
5719 TRANSACTION_NUMBER,
5720 CUST_TRX_TYPE_ID,
5721 TERM_ID,
5722 BATCH_SOURCE_ID,
5723 FILTER_DATE,
5724 ORDER_REF_NUMBER,
5725 INVOICE_CURRENCY_CODE,
5726 EXCHANGE_RATE,
5727 EXCHANGE_DATE,
5728 INITIAL_CUSTOMER_TRX_ID,
5729 PREVIOUS_CUSTOMER_TRX_ID,
5730 USER_ID,
5731 AR_CREATION_DATE,
5732 INV_BA_AMOUNT_FUNC,
5733 INV_BA_AMOUNT_PRIM,
5734 INV_BA_AMOUNT_SEC,
5735 INV_BA_COUNT,
5736 DM_BA_AMOUNT_FUNC,
5737 DM_BA_AMOUNT_PRIM,
5738 DM_BA_AMOUNT_SEC,
5739 DM_BA_COUNT,
5740 CB_BA_AMOUNT_FUNC,
5741 CB_BA_AMOUNT_PRIM,
5742 CB_BA_AMOUNT_SEC,
5743 CB_BA_COUNT,
5744 BR_BA_AMOUNT_FUNC,
5745 BR_BA_AMOUNT_PRIM,
5746 BR_BA_AMOUNT_SEC,
5747 BR_BA_COUNT,
5748 DEP_BA_AMOUNT_FUNC,
5749 DEP_BA_AMOUNT_PRIM,
5750 DEP_BA_AMOUNT_SEC,
5751 DEP_BA_COUNT,
5752 CM_BA_AMOUNT_FUNC,
5753 CM_BA_AMOUNT_PRIM,
5754 CM_BA_AMOUNT_SEC,
5755 CM_BA_COUNT,
5756 CREATION_DATE,
5757 CREATED_BY,
5758 LAST_UPDATE_DATE,
5759 LAST_UPDATED_BY,
5760 LAST_UPDATE_LOGIN
5761 )
5762 values(
5763 dlt.CUSTOMER_TRX_ID,
5764 dlt.ORG_ID,
5765 dlt.TIME_ID,
5766 dlt.TRX_DATE,
5767 dlt.GL_DATE,
5768 dlt.CLASS,
5769 dlt.AMOUNT_DUE_ORIGINAL_TRX,
5770 dlt.AMOUNT_DUE_ORIGINAL_FUNC,
5771 dlt.AMOUNT_DUE_ORIGINAL_PRIM,
5772 dlt.AMOUNT_DUE_ORIGINAL_SEC,
5773 dlt.BILL_TO_CUSTOMER_ID,
5774 dlt.BILL_TO_SITE_USE_ID,
5775 dlt.TRANSACTION_NUMBER,
5776 dlt.CUST_TRX_TYPE_ID,
5777 dlt.TERM_ID,
5778 dlt.BATCH_SOURCE_ID,
5779 dlt.FILTER_DATE,
5780 dlt.ORDER_REF_NUMBER,
5781 dlt.INVOICE_CURRENCY_CODE,
5782 dlt.EXCHANGE_RATE,
5783 dlt.EXCHANGE_DATE,
5784 dlt.INITIAL_CUSTOMER_TRX_ID,
5785 dlt.PREVIOUS_CUSTOMER_TRX_ID,
5786 dlt.USER_ID,
5787 dlt.AR_CREATION_DATE,
5788 dlt.INV_BA_AMOUNT_FUNC,
5789 dlt.INV_BA_AMOUNT_PRIM,
5790 dlt.INV_BA_AMOUNT_SEC,
5791 dlt.INV_BA_COUNT,
5792 dlt.DM_BA_AMOUNT_FUNC,
5793 dlt.DM_BA_AMOUNT_PRIM,
5794 dlt.DM_BA_AMOUNT_SEC,
5795 dlt.DM_BA_COUNT,
5796 dlt.CB_BA_AMOUNT_FUNC,
5797 dlt.CB_BA_AMOUNT_PRIM,
5798 dlt.CB_BA_AMOUNT_SEC,
5799 dlt.CB_BA_COUNT,
5800 dlt.BR_BA_AMOUNT_FUNC,
5801 dlt.BR_BA_AMOUNT_PRIM,
5802 dlt.BR_BA_AMOUNT_SEC,
5803 dlt.BR_BA_COUNT,
5804 dlt.DEP_BA_AMOUNT_FUNC,
5805 dlt.DEP_BA_AMOUNT_PRIM,
5806 dlt.DEP_BA_AMOUNT_SEC,
5807 dlt.DEP_BA_COUNT,
5808 dlt.CM_BA_AMOUNT_FUNC,
5809 dlt.CM_BA_AMOUNT_PRIM,
5810 dlt.CM_BA_AMOUNT_SEC,
5811 dlt.CM_BA_COUNT,
5812 dlt.CREATION_DATE,
5813 dlt.CREATED_BY,
5814 dlt.LAST_UPDATE_DATE,
5815 dlt.LAST_UPDATED_BY,
5816 dlt.LAST_UPDATE_LOGIN
5817 );
5818
5819 if g_debug_flag = 'Y' then
5820 FII_UTIL.put_line('Merged ' ||SQL%ROWCOUNT|| ' records into FII_AR_TRANSACTIONS_F');
5821 FII_UTIL.stop_timer;
5822 FII_UTIL.print_timer('Duration');
5823 FII_UTIL.put_line('');
5824 end if;
5825
5826 g_state := 'Analyzing FII_AR_TRANSACTIONS_F table';
5827 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_TRANSACTIONS_F');
5828
5829 EXCEPTION
5830 WHEN OTHERS THEN
5831 g_errbuf:=sqlerrm;
5832 g_retcode:= -1;
5833 g_exception_msg := g_retcode || ':' || g_errbuf;
5834 FII_UTIL.put_line('Error occured while ' || g_state);
5835 FII_UTIL.put_line(g_exception_msg);
5836 RAISE;
5837
5838 END Inc_TRANSACTIONS;
5839
5840
5841 ------------------------------------------------------------------
5842 -- Procedure Inc_ADJUSTMENTS
5843 -- Purpose
5844 -- This procedure manipulates records in FII_AR_ADJUSTMENTS_F
5845 ------------------------------------------------------------------
5846 PROCEDURE Inc_ADJUSTMENTS IS
5847 BEGIN
5848
5849 /*
5850 g_state := 'Truncating table FII_AR_ADJUSTMENTS_F';
5851 TRUNCATE_TABLE('FII_AR_ADJUSTMENTS_F');
5852 */
5853
5854 g_state := 'Merging into FII_AR_ADJUSTMENTS_F';
5855 if g_debug_flag = 'Y' then
5856 FII_UTIL.put_line(g_state);
5857 FII_UTIL.start_timer;
5858 FII_UTIL.put_line('');
5859 end if;
5860
5861 merge into fii_ar_adjustments_f old using (
5862 /* insert into fii_ar_adjustments_f
5863 (
5864 ADJUSTMENT_ID,
5865 TIME_ID,
5866 BILL_TO_CUSTOMER_ID,
5867 BILL_TO_SITE_USE_ID,
5868 ORG_ID,
5869 AMOUNT_TRX,
5870 AMOUNT_FUNC,
5871 AMOUNT_PRIM,
5872 AMOUNT_SEC,
5873 APPLY_DATE,
5874 GL_DATE,
5875 FILTER_DATE,
5876 CUSTOMER_TRX_ID,
5877 PAYMENT_SCHEDULE_ID,
5878 USER_ID,
5879 AR_CREATION_DATE,
5880 ADJ_CLASS,
5881 SUBSEQUENT_TRX_ID,
5882 BR_CUSTOMER_TRX_ID,
5883 CREATION_DATE,
5884 CREATED_BY,
5885 LAST_UPDATE_DATE,
5886 LAST_UPDATED_BY,
5887 LAST_UPDATE_LOGIN
5888 )*/
5889 -- POPULATE_ADJUSTMENTS
5890 SELECT adj.adjustment_id,
5891 to_number(to_char(decode(g_collection_criteria,
5892 'GL', adj.gl_date,
5893 adj.apply_date), 'J')) time_id,
5894 trx.bill_to_customer_id, -- drawee_id only in case of BR
5895 trx.bill_to_site_use_id, -- drawee_site_use_id only in case of BR
5896 adj.org_id,
5897 adj.amount AMOUNT_TRX,
5898 NVL(ROUND(adj.amount * trx.exchange_rate / rt.functional_mau)
5899 * rt.functional_mau, nvl(adj.amount,0)) amount_func,
5900 DECODE(trx.invoice_currency_code,
5901 g_prim_currency, nvl(adj.amount,0),
5902 ROUND((nvl(adj.amount,0) * trx.exchange_rate *
5903 rt.prim_conversion_rate) / g_primary_mau) *
5904 g_primary_mau) amount_prim,
5905 DECODE(trx.invoice_currency_code,
5906 g_sec_currency, nvl(adj.amount,0),
5907 ROUND((nvl(adj.amount,0) * trx.exchange_rate *
5908 rt.sec_conversion_rate) / g_secondary_mau) *
5909 g_secondary_mau) amount_sec,
5910 trunc(adj.apply_date) apply_date,
5911 trunc(adj.gl_date) gl_date,
5912 decode(g_collection_criteria,'GL',adj.gl_date,adj.apply_date) filter_date,
5913 adj.customer_trx_id,
5914 adj.payment_schedule_id,
5915 adj.created_by user_id,
5916 adj.creation_date ar_creation_date,
5917 decode(line.br_adjustment_id,
5918 null, decode(adj.chargeback_customer_trx_id,
5919 null, decode(adj.adjustment_type,'C','DEP',null),
5920 'CB'),
5921 'BR') adj_class,
5922 adj.subsequent_trx_id,
5923 line.customer_trx_id br_customer_trx_id,
5924 sysdate CREATION_DATE,
5925 g_fii_user_id CREATED_BY,
5926 sysdate LAST_UPDATE_DATE,
5927 g_fii_user_id LAST_UPDATED_BY,
5928 g_fii_login_id LAST_UPDATE_LOGIN
5929 FROM /* (
5930 select * from FII_AR_ADJ_UPDATE_GT
5931 -- where last_update_date <= g_sysdate_time
5932 ) */
5933 FII_AR_ADJ_UPDATE_GT adj,
5934 FII_AR_TRANSACTIONS_F trx,
5935 FII_AR_TRANSACTIONS_F trx2, --makes sure the CM adj does not result from a GUAR
5936 RA_CUSTOMER_TRX_LINES_ALL line,
5937 FII_AR_CURR_RATES_T rt,
5938 AR_SYSTEM_PARAMETERS_ALL par,
5939 GL_SETS_OF_BOOKS sob
5940 WHERE adj.status = 'A'
5941 AND adj.customer_trx_id = trx.customer_trx_id
5942 /*AND adj.customer_trx_id = decode(trx.class,
5943 'CM', trx.previous_customer_trx_id,
5944 trx.customer_trx_id)
5945 AND decode (adj.subsequent_trx_id,
5946 null, -111, 0, -111,
5947 adj.subsequent_trx_id) = decode(trx.class,
5948 'CM', trx.customer_trx_id,
5949 -111) */
5950 AND nvl(trx.initial_customer_trx_id, trx.customer_trx_id) =
5951 trx2.customer_trx_id --makes sure the CM adj does not result from a GUAR
5952 AND adj.adjustment_id = line.br_adjustment_id (+)
5953 AND adj.last_update_date <= g_sysdate_time --To avoid duplication in incremental
5954
5955 AND trx.org_id = par.org_id
5956 AND par.set_of_books_id = sob.set_of_books_id
5957 AND sob.currency_code = rt.fc_code
5958 AND trunc(least(nvl(trx.exchange_date,trx.trx_date),sysdate)) = rt.conversion_date
5959
5960 ) dlt
5961 on ( old.ADJUSTMENT_ID = dlt.ADJUSTMENT_ID )
5962 when matched then update set
5963 -- old.ADJUSTMENT_ID = dlt.ADJUSTMENT_ID,
5964 old.TIME_ID = dlt.TIME_ID,
5965 old.BILL_TO_CUSTOMER_ID = dlt.BILL_TO_CUSTOMER_ID,
5966 old.BILL_TO_SITE_USE_ID = dlt.BILL_TO_SITE_USE_ID,
5967 old.ORG_ID = dlt.ORG_ID,
5968 old.AMOUNT_TRX = dlt.AMOUNT_TRX,
5969 old.AMOUNT_FUNC = dlt.AMOUNT_FUNC,
5970 old.AMOUNT_PRIM = dlt.AMOUNT_PRIM,
5971 old.AMOUNT_SEC = dlt.AMOUNT_SEC,
5972 old.APPLY_DATE = dlt.APPLY_DATE,
5973 old.GL_DATE = dlt.GL_DATE,
5974 old.FILTER_DATE = dlt.FILTER_DATE,
5975 old.CUSTOMER_TRX_ID = dlt.CUSTOMER_TRX_ID,
5976 old.PAYMENT_SCHEDULE_ID = dlt.PAYMENT_SCHEDULE_ID,
5977 old.USER_ID = dlt.USER_ID,
5978 -- old.AR_CREATION_DATE = dlt.AR_CREATION_DATE,
5979 old.ADJ_CLASS = dlt.ADJ_CLASS,
5980 old.SUBSEQUENT_TRX_ID = dlt.SUBSEQUENT_TRX_ID,
5981 old.BR_CUSTOMER_TRX_ID = dlt.BR_CUSTOMER_TRX_ID,
5982 -- old.CREATION_DATE = dlt.CREATION_DATE,
5983 -- old.CREATED_BY = dlt.CREATED_BY,
5984 old.LAST_UPDATE_DATE = dlt.LAST_UPDATE_DATE,
5985 old.LAST_UPDATED_BY = dlt.LAST_UPDATED_BY,
5986 old.LAST_UPDATE_LOGIN = dlt.LAST_UPDATE_LOGIN
5987 when not matched then insert
5988 (
5989 ADJUSTMENT_ID,
5990 TIME_ID,
5991 BILL_TO_CUSTOMER_ID,
5992 BILL_TO_SITE_USE_ID,
5993 ORG_ID,
5994 AMOUNT_TRX,
5995 AMOUNT_FUNC,
5996 AMOUNT_PRIM,
5997 AMOUNT_SEC,
5998 APPLY_DATE,
5999 GL_DATE,
6000 FILTER_DATE,
6001 CUSTOMER_TRX_ID,
6002 PAYMENT_SCHEDULE_ID,
6003 USER_ID,
6004 AR_CREATION_DATE,
6005 ADJ_CLASS,
6006 SUBSEQUENT_TRX_ID,
6007 BR_CUSTOMER_TRX_ID,
6008 CREATION_DATE,
6009 CREATED_BY,
6010 LAST_UPDATE_DATE,
6011 LAST_UPDATED_BY,
6012 LAST_UPDATE_LOGIN
6013 )
6014 values(
6015 dlt.ADJUSTMENT_ID,
6016 dlt.TIME_ID,
6017 dlt.BILL_TO_CUSTOMER_ID,
6018 dlt.BILL_TO_SITE_USE_ID,
6019 dlt.ORG_ID,
6020 dlt.AMOUNT_TRX,
6021 dlt.AMOUNT_FUNC,
6022 dlt.AMOUNT_PRIM,
6023 dlt.AMOUNT_SEC,
6024 dlt.APPLY_DATE,
6025 dlt.GL_DATE,
6026 dlt.FILTER_DATE,
6027 dlt.CUSTOMER_TRX_ID,
6028 dlt.PAYMENT_SCHEDULE_ID,
6029 dlt.USER_ID,
6030 dlt.AR_CREATION_DATE,
6031 dlt.ADJ_CLASS,
6032 dlt.SUBSEQUENT_TRX_ID,
6033 dlt.BR_CUSTOMER_TRX_ID,
6034 dlt.CREATION_DATE,
6035 dlt.CREATED_BY,
6036 dlt.LAST_UPDATE_DATE,
6037 dlt.LAST_UPDATED_BY,
6038 dlt.LAST_UPDATE_LOGIN
6039 );
6040
6041
6042 if g_debug_flag = 'Y' then
6043 FII_UTIL.put_line('Merged ' ||SQL%ROWCOUNT|| ' records into FII_AR_ADJUSTMENTS_F');
6044 FII_UTIL.stop_timer;
6045 FII_UTIL.print_timer('Duration');
6046 FII_UTIL.put_line('');
6047 end if;
6048
6049 g_state := 'Analyzing FII_AR_ADJUSTMENTS_F table';
6050 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_ADJUSTMENTS_F');
6051
6052 EXCEPTION
6053 WHEN OTHERS THEN
6054 g_errbuf:=sqlerrm;
6055 g_retcode:= -1;
6056 g_exception_msg := g_retcode || ':' || g_errbuf;
6057 FII_UTIL.put_line('Error occured while ' || g_state);
6058 FII_UTIL.put_line(g_exception_msg);
6059 RAISE;
6060
6061 END Inc_ADJUSTMENTS;
6062
6063 ------------------------------------------------------------------
6064 -- Procedure Inc_RECEIPTS
6065 -- Purpose
6066 -- This procedure manipulates records in FII_AR_RECEIPTS_F
6067 ------------------------------------------------------------------
6068 PROCEDURE Inc_RECEIPTS IS
6069
6070 l_max_rec_application_id NUMBER(15);
6071
6072 BEGIN
6073
6074 /*
6075 g_state := 'Truncating table MLOG$_FII_AR_RECEIPTS_F';
6076 TRUNCATE_TABLE('MLOG$_FII_AR_RECEIPTS_F');
6077 g_state := 'Truncating table FII_AR_RECEIPTS_F';
6078 TRUNCATE_TABLE('FII_AR_RECEIPTS_F');
6079 */
6080
6081 g_state := 'Populating FII_AR_RECAPP_MERGE_GT';
6082 if g_debug_flag = 'Y' then
6083 FII_UTIL.put_line(g_state);
6084 FII_UTIL.start_timer;
6085 FII_UTIL.put_line('');
6086 end if;
6087
6088 insert into FII_AR_RECAPP_MERGE_GT
6089 (
6090 receivable_application_id,
6091 time_id,
6092 cash_receipt_id,
6093 application_status,
6094 header_status,
6095 amount_applied_rct,
6096 amount_applied_trx,
6097 amount_applied_rct_func,
6098 amount_applied_trx_func,
6099 amount_applied_rct_prim,
6100 amount_applied_trx_prim,
6101 amount_applied_rct_sec,
6102 amount_applied_trx_sec,
6103 earned_discount_amount_trx,
6104 earned_discount_amount_func,
6105 earned_discount_amount_prim,
6106 earned_discount_amount_sec,
6107 unearned_discount_amount_trx,
6108 unearned_discount_amount_func,
6109 unearned_discount_amount_prim,
6110 unearned_discount_amount_sec,
6111 apply_date,
6112 gl_date,
6113 filter_date,
6114 header_filter_date,
6115 application_type,
6116 applied_payment_schedule_id,
6117 applied_customer_trx_id,
6118 customer_trx_id,
6119 payment_schedule_id,
6120 receipt_number,
6121 receipt_type,
6122 receipt_date,
6123 rct_actual_date_closed,
6124 receipt_method_id,
6125 currency_code,
6126 user_id,
6127 ar_creation_date,
6128 bill_to_customer_id,
6129 bill_to_site_use_id,
6130 collector_bill_to_customer_id,
6131 collector_bill_to_site_use_id,
6132 org_id,
6133 trx_date,
6134 due_date,
6135 cm_previous_customer_trx_id,
6136 total_receipt_count,
6137 creation_date,
6138 created_by,
6139 last_update_date,
6140 last_updated_by,
6141 last_update_login,
6142 trxsch_payment_schedule_id
6143 )
6144 -- POPULATE_RECEIPTS
6145 SELECT app.RECEIVABLE_APPLICATION_ID,
6146 to_number(to_char(decode(g_collection_criteria,
6147 'GL',app.app_gl_date,
6148 app.apply_date), 'J')) TIME_ID,
6149 rct.cash_receipt_id,
6150 decode(app.status,'ACTIVITY','APP',app.status) APPLICATION_STATUS,
6151 rct.status HEADER_STATUS,
6152 NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)) AMOUNT_APPLIED_RCT,
6153 NVL(app.AMOUNT_APPLIED,0) AMOUNT_APPLIED_TRX,
6154 app.acctd_amount_applied_from AMOUNT_APPLIED_RCT_FUNC,
6155 NVL(app.acctd_amount_applied_to,0) AMOUNT_APPLIED_TRX_FUNC,
6156 DECODE(rct.cash_receipt_id,
6157 null, 0,
6158 decode (rct.currency_code,
6159 g_prim_currency, NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)),
6160 ROUND((NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)) * nvl(rct.exchange_rate,1) *
6161 nvl(rct.prim_conversion_rate,1)) / g_primary_mau) *
6162 g_primary_mau)) AMOUNT_APPLIED_RCT_PRIM,
6163 DECODE(app.applied_payment_schedule_id,
6164 null, 0,
6165 decode (trxsch.invoice_currency_code,
6166 g_prim_currency, nvl(app.AMOUNT_APPLIED,0),
6167 ROUND((nvl(app.AMOUNT_APPLIED,0) * nvl(trxsch.exchange_rate,1) *
6168 nvl(trxsch.prim_conversion_rate,0)) / g_primary_mau) *
6169 g_primary_mau)) AMOUNT_APPLIED_TRX_PRIM,
6170 DECODE(rct.cash_receipt_id,
6171 null, 0,
6172 decode (rct.currency_code,
6173 g_sec_currency, NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)),
6174 ROUND((NVL(app.AMOUNT_APPLIED_FROM, nvl(app.AMOUNT_APPLIED,0)) * nvl(rct.exchange_rate,1) *
6175 nvl(rct.sec_conversion_rate,1)) / g_secondary_mau) *
6176 g_secondary_mau)) AMOUNT_APPLIED_RCT_SEC,
6177 DECODE(app.applied_payment_schedule_id,
6178 null, 0,
6179 decode (trxsch.invoice_currency_code,
6180 g_sec_currency, nvl(app.AMOUNT_APPLIED,0),
6181 ROUND((nvl(app.AMOUNT_APPLIED,0) * nvl(trxsch.exchange_rate,1) *
6182 nvl(trxsch.sec_conversion_rate,0)) / g_secondary_mau) *
6183 g_secondary_mau)) AMOUNT_APPLIED_TRX_SEC,
6184 nvl(app.EARNED_DISCOUNT_TAKEN,0) EARNED_DISCOUNT_amount_trx,
6185 NVL(app.acctd_earned_discount_taken,
6186 nvl(app.EARNED_DISCOUNT_TAKEN,0)) EARNED_DISCOUNT_AMOUNT_FUNC,
6187 DECODE(trxsch.invoice_currency_code,
6188 g_prim_currency, nvl(app.EARNED_DISCOUNT_TAKEN,0),
6189 ROUND((nvl(app.EARNED_DISCOUNT_TAKEN,0) * nvl(trxsch.exchange_rate,1) *
6190 nvl(trxsch.prim_conversion_rate,1)) / g_primary_mau) *
6191 g_primary_mau) EARNED_DISCOUNT_AMOUNT_PRIM,
6192 DECODE(trxsch.invoice_currency_code,
6193 g_sec_currency, nvl(app.EARNED_DISCOUNT_TAKEN,0),
6194 ROUND((nvl(app.EARNED_DISCOUNT_TAKEN,0) * nvl(trxsch.exchange_rate,1) *
6195 nvl(trxsch.sec_conversion_rate,1)) / g_secondary_mau) *
6196 g_secondary_mau) EARNED_DISCOUNT_AMOUNT_SEC,
6197 nvl(app.UNEARNED_DISCOUNT_TAKEN,0) UNEARNED_DISCOUNT_amount_trx,
6198 NVL(app.acctd_unearned_discount_taken,
6199 nvl(app.UNEARNED_DISCOUNT_TAKEN,0)) UNEARNED_DISCOUNT_AMOUNT_FUNC,
6200 DECODE(trxsch.invoice_currency_code,
6201 g_prim_currency, nvl(app.UNEARNED_DISCOUNT_TAKEN,0),
6202 ROUND((nvl(app.UNEARNED_DISCOUNT_TAKEN,0) * nvl(trxsch.exchange_rate,1) *
6203 nvl(trxsch.prim_conversion_rate,1)) / g_primary_mau) *
6204 g_primary_mau) UNEARNED_DISCOUNT_AMOUNT_PRIM,
6205 DECODE(trxsch.invoice_currency_code,
6206 g_sec_currency, nvl(app.UNEARNED_DISCOUNT_TAKEN,0),
6207 ROUND((nvl(app.UNEARNED_DISCOUNT_TAKEN,0) * nvl(trxsch.exchange_rate,1) *
6208 nvl(trxsch.sec_conversion_rate,1)) / g_secondary_mau) *
6209 g_secondary_mau) UNEARNED_DISCOUNT_AMOUNT_SEC,
6210 trunc(app.APPLY_DATE),
6211 trunc(app.RCT_GL_DATE),
6212 decode(g_collection_criteria,
6213 'GL',app.app_gl_date,
6214 app.apply_date) FILTER_DATE,
6215 per.start_date, --decode(g_collection_criteria,'GL',app.rct_gl_date,rct.receipt_date), --HEADER_FILTER_DATE,
6216 app.APPLICATION_TYPE,
6217 app.APPLIED_PAYMENT_SCHEDULE_ID,
6218 app.applied_customer_trx_id,
6219 app.CUSTOMER_TRX_ID,
6220 app.PAYMENT_SCHEDULE_ID,
6221 rct.RECEIPT_NUMBER,
6222 rct.RECEIPT_TYPE,
6223 trunc(rct.receipt_date),
6224 rctsch.actual_date_closed rct_actual_date_closed,
6225 rct.receipt_method_id,
6226 rct.CURRENCY_CODE,
6227 app.created_by USER_ID,
6228 app.creation_date ar_creation_date,
6229 decode(app.status,
6230 'UNID', -2,
6231 nvl(rctsch.bill_to_customer_id, -2)) bill_to_customer_id, --to avoid outer joins in MVs
6232 decode(app.status,
6233 'UNID', -2,
6234 nvl(rctsch.bill_to_site_use_id, -2)) bill_to_site_use_id,
6235 case when trxsch.payment_schedule_id is null
6236 or app.applied_payment_schedule_id < 0
6237 then nvl(rctsch.bill_to_customer_id,-2)
6238 else nvl(trxsch.bill_to_customer_id,-2) end collector_bill_to_customer_id,
6239 case when trxsch.payment_schedule_id is null
6240 or app.applied_payment_schedule_id < 0
6241 then nvl(rctsch.bill_to_site_use_id,-2)
6242 else nvl(trxsch.bill_to_site_use_id,-2) end COLLECTOR_BILL_TO_SITE_USE_ID,
6243 app.org_id,
6244 trxsch.trx_date,
6245 trxsch.due_date,
6246 rctsch.previous_customer_trx_id cm_previous_customer_trx_id,
6247 decode (app.receivable_application_id,
6248 MIN(app.receivable_application_id) over (partition by rct.cash_receipt_id), 1,
6249 MAX(app.receivable_application_id) over (partition by rct.cash_receipt_id),
6250 case when rct.status = 'REV' or rct.status = 'NSF' or rct.status = 'STOP'
6251 then -1 else 0 end,
6252 0) total_receipt_count,
6253 sysdate CREATION_DATE,
6254 g_fii_user_id CREATED_BY,
6255 sysdate LAST_UPDATE_DATE,
6256 g_fii_user_id LAST_UPDATED_BY,
6257 g_fii_login_id LAST_UPDATE_LOGIN,
6258 trxsch.payment_schedule_id trxsch_payment_schedule_id
6259 FROM (select RECEIVABLE_APPLICATION_ID,
6260 cash_receipt_id,
6261 case when gl_date >= g_global_start_date then
6262 gl_date
6263 else g_global_start_date end app_gl_date,
6264 decode (application_type,
6265 'CM',gl_date,
6266 MIN(gl_date) over (partition by cash_receipt_id)) rct_gl_date, --to get the receipt creation gl_date instead of appl gl_date
6267 case when apply_date >= g_global_start_date then
6268 apply_date
6269 else g_global_start_date end apply_date,
6270 status,
6271 AMOUNT_APPLIED_FROM,
6272 AMOUNT_APPLIED,
6273 acctd_amount_applied_from,
6274 acctd_amount_applied_to,
6275 applied_customer_trx_id,
6276 EARNED_DISCOUNT_TAKEN,
6277 acctd_earned_discount_taken,
6278 UNEARNED_DISCOUNT_TAKEN,
6279 acctd_unearned_discount_taken,
6280 APPLICATION_TYPE,
6281 applied_payment_schedule_id,
6282 CUSTOMER_TRX_ID,
6283 PAYMENT_SCHEDULE_ID,
6284 created_by,
6285 creation_date,
6286 org_id
6287 from FII_AR_RECAPP_INSERT_GT) app,
6288 FII_AR_PMT_SCHEDULES_F rctsch, --> FII_AR_PAYSCH_MERGE_GT
6289 -- previous_customer_trx_id needs
6290 -- a join to AR_PAYMENT_SCHEDULES_ALL
6291 (select rct.cash_receipt_id,
6292 rct.status,
6293 rct.currency_code,
6294 nvl(rct.exchange_rate,1) exchange_rate,
6295 rctrt.prim_conversion_rate,
6296 rctrt.sec_conversion_rate,
6297 rct.RECEIPT_NUMBER,
6298 rct.TYPE receipt_type,
6299 rct.receipt_date,
6300 rct.receipt_method_id
6301 --rct.pay_from_customer bill_to_customer_id,
6302 --NVL(rct.customer_site_use_id,
6303 -- -1) bill_to_site_use_id, --(-1 for UNAPP, UNID)
6304 --rct.customer_site_use_id
6305 from AR_CASH_RECEIPTS_ALL rct,
6306 FII_AR_CURR_RATES_T rctrt,
6307 AR_SYSTEM_PARAMETERS_ALL par,
6308 GL_SETS_OF_BOOKS sob
6309 where --rct.receipt_date >= g_global_start_date
6310 rct.org_id = par.org_id
6311 and par.set_of_books_id = sob.set_of_books_id
6312 and sob.currency_code = rctrt.fc_code
6313 and rctrt.conversion_date = trunc(least(nvl(rct.exchange_date,
6314 rct.receipt_date),sysdate))) rct,
6315
6316 (select trxsch.payment_schedule_id,
6317 trxsch.invoice_currency_code,
6318 trxsch.exchange_rate exchange_rate,
6319 trxrt.prim_conversion_rate,
6320 trxrt.sec_conversion_rate,
6321 trxsch.trx_date, --trx_date
6322 trxsch.due_date, --due_date
6323 trxsch.bill_to_customer_id,
6324 trxsch.bill_to_site_use_id
6325 from -- FII_AR_PMT_SCHEDULES_F trxsch, --> FII_AR_PAYSCH_MERGE_GT
6326 ( select
6327 sch.customer_id bill_to_customer_id,
6328 sch.customer_site_use_id bill_to_site_use_id,
6329 due_date,
6330 nvl(sch.exchange_rate,1) exchange_rate,
6331 invoice_currency_code,
6332 payment_schedule_id,
6333 trx_date,
6334 org_id,
6335 nvl(sch.exchange_date, sch.trx_date) exchange_date
6336 from FII_AR_PAYSCH_MERGE_GT sch
6337 ) trxsch,
6338 FII_AR_CURR_RATES_T trxrt,
6339 AR_SYSTEM_PARAMETERS_ALL par,
6340 GL_SETS_OF_BOOKS sob
6341 where trxsch.org_id = par.org_id
6342 AND par.set_of_books_id = sob.set_of_books_id
6343 AND sob.currency_code = trxrt.fc_code
6344 AND trxrt.conversion_date = trunc(least(nvl(trxsch.exchange_date,
6345 trxsch.trx_date),sysdate))) trxsch,
6346
6347 gl_periods per,
6348 ar_system_parameters_all par,
6349 gl_sets_of_books sob
6350
6351 WHERE app.payment_schedule_id = rctsch.payment_schedule_id
6352 AND rctsch.class in ('PMT', 'CM')
6353 AND app.application_type IN ('CASH','CM')
6354 --AND (app.status IN ('UNID','UNAPP','APP')
6355 -- or app.applied_payment_schedule_id IN (-1,-4,-7))
6356 AND app.cash_receipt_id = rct.cash_receipt_id (+)
6357 AND app.applied_payment_schedule_id = trxsch.payment_schedule_id (+)
6358 AND par.org_id = app.org_id
6359 AND sob.set_of_books_id = par.set_of_books_id
6360 AND per.period_set_name = sob.period_set_name
6361 AND per.period_type = sob.accounted_period_type
6362 AND decode(application_type,
6363 'CM', app.apply_date,
6364 decode(g_collection_criteria,
6365 'GL',app.rct_gl_date,
6366 rct.receipt_date)) between per.start_date and per.end_date
6367 AND per.adjustment_period_flag = 'N'
6368 /*
6369 AND (case when app.applied_payment_schedule_id is null
6370 or app.applied_payment_schedule_id < 0
6371 then case when --rct.receipt_date >= g_global_start_date
6372 decode(g_collection_criteria,
6373 'GL', rct_gl_date,
6374 rct.receipt_date) >= g_global_start_date
6375 then 1
6376 else null end
6377 else trxsch.payment_schedule_id end) is not null
6378 */
6379 ;
6380
6381 if g_debug_flag = 'Y' then
6382 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into FII_AR_RECAPP_MERGE_GT');
6383 FII_UTIL.stop_timer;
6384 FII_UTIL.print_timer('Duration');
6385 FII_UTIL.put_line('');
6386 end if;
6387
6388 g_state := 'Deleting FII_AR_RECEIPTS_F';
6389 if g_debug_flag = 'Y' then
6390 FII_UTIL.put_line(g_state);
6391 FII_UTIL.start_timer;
6392 FII_UTIL.put_line('');
6393 end if;
6394
6395 delete from fii_ar_receipts_f
6396 where RECEIVABLE_APPLICATION_ID in (
6397 select RECEIVABLE_APPLICATION_ID
6398 from FII_AR_RECAPP_MERGE_GT
6399 where (case when applied_payment_schedule_id is null
6400 or applied_payment_schedule_id < 0
6401 then case when --receipt_date >= g_global_start_date
6402 decode(g_collection_criteria,
6403 'GL', gl_date,
6404 receipt_date) >= g_global_start_date
6405 then 1
6406 else null end
6407 else trxsch_payment_schedule_id end) is null
6408 union all
6409 select RECEIVABLE_APPLICATION_ID
6410 from FII_AR_RECAPP_DELETE_GT
6411 );
6412
6413 if g_debug_flag = 'Y' then
6414 FII_UTIL.put_line('Deleted ' ||SQL%ROWCOUNT|| ' records from FII_AR_RECEIPTS_F');
6415 FII_UTIL.stop_timer;
6416 FII_UTIL.print_timer('Duration');
6417 FII_UTIL.put_line('');
6418 end if;
6419
6420 commit;
6421
6422 g_state := 'Merging into FII_AR_RECEIPTS_F';
6423 if g_debug_flag = 'Y' then
6424 FII_UTIL.put_line(g_state);
6425 FII_UTIL.start_timer;
6426 FII_UTIL.put_line('');
6427 end if;
6428
6429 merge into fii_ar_receipts_f old using (
6430 select
6431 RECEIVABLE_APPLICATION_ID,
6432 TIME_ID,
6433 CASH_RECEIPT_ID,
6434 APPLICATION_STATUS,
6435 HEADER_STATUS,
6436 AMOUNT_APPLIED_RCT,
6437 AMOUNT_APPLIED_TRX,
6438 AMOUNT_APPLIED_RCT_FUNC,
6439 AMOUNT_APPLIED_TRX_FUNC,
6440 AMOUNT_APPLIED_RCT_PRIM,
6441 AMOUNT_APPLIED_TRX_PRIM,
6442 AMOUNT_APPLIED_RCT_SEC,
6443 AMOUNT_APPLIED_TRX_SEC,
6444 EARNED_DISCOUNT_AMOUNT_TRX,
6445 EARNED_DISCOUNT_AMOUNT_FUNC,
6446 EARNED_DISCOUNT_AMOUNT_PRIM,
6447 EARNED_DISCOUNT_AMOUNT_SEC,
6448 UNEARNED_DISCOUNT_AMOUNT_TRX,
6449 UNEARNED_DISCOUNT_AMOUNT_FUNC,
6450 UNEARNED_DISCOUNT_AMOUNT_PRIM,
6451 UNEARNED_DISCOUNT_AMOUNT_SEC,
6452 APPLY_DATE,
6453 GL_DATE,
6454 FILTER_DATE,
6455 HEADER_FILTER_DATE,
6456 APPLICATION_TYPE,
6457 APPLIED_PAYMENT_SCHEDULE_ID,
6458 APPLIED_CUSTOMER_TRX_ID,
6459 CUSTOMER_TRX_ID,
6460 PAYMENT_SCHEDULE_ID,
6461 RECEIPT_NUMBER,
6462 RECEIPT_TYPE,
6463 RECEIPT_DATE,
6464 RCT_ACTUAL_DATE_CLOSED,
6465 RECEIPT_METHOD_ID,
6466 CURRENCY_CODE,
6467 USER_ID,
6468 AR_CREATION_DATE,
6469 BILL_TO_CUSTOMER_ID,
6470 BILL_TO_SITE_USE_ID,
6471 COLLECTOR_BILL_TO_CUSTOMER_ID,
6472 COLLECTOR_BILL_TO_SITE_USE_ID,
6473 ORG_ID,
6474 TRX_DATE,
6475 DUE_DATE,
6476 CM_PREVIOUS_CUSTOMER_TRX_ID,
6477 TOTAL_RECEIPT_COUNT,
6478 CREATION_DATE,
6479 CREATED_BY,
6480 LAST_UPDATE_DATE,
6481 LAST_UPDATED_BY,
6482 LAST_UPDATE_LOGIN
6483 from FII_AR_RECAPP_MERGE_GT
6484 /* where (case when applied_payment_schedule_id is null
6485 or applied_payment_schedule_id < 0
6486 then case when --receipt_date >= g_global_start_date
6487 decode(g_collection_criteria,
6488 'GL', gl_date,
6489 receipt_date) >= g_global_start_date
6490 then 1
6491 else null end
6492 else trxsch_payment_schedule_id end) is not null
6493 */
6494 ) dlt
6495 on ( old.RECEIVABLE_APPLICATION_ID = dlt.RECEIVABLE_APPLICATION_ID )
6496 when matched then update set
6497 -- old.RECEIVABLE_APPLICATION_ID = dlt.RECEIVABLE_APPLICATION_ID,
6498 -- old.TIME_ID = dlt.TIME_ID,
6499 -- old.CASH_RECEIPT_ID = dlt.CASH_RECEIPT_ID,
6500 -- old.APPLICATION_STATUS = dlt.APPLICATION_STATUS,
6501 old.HEADER_STATUS = dlt.HEADER_STATUS,
6502 -- old.AMOUNT_APPLIED_RCT = dlt.AMOUNT_APPLIED_RCT,
6503 -- old.AMOUNT_APPLIED_TRX = dlt.AMOUNT_APPLIED_TRX,
6504 -- old.AMOUNT_APPLIED_RCT_FUNC = dlt.AMOUNT_APPLIED_RCT_FUNC,
6505 -- old.AMOUNT_APPLIED_TRX_FUNC = dlt.AMOUNT_APPLIED_TRX_FUNC,
6506 -- old.AMOUNT_APPLIED_RCT_PRIM = dlt.AMOUNT_APPLIED_RCT_PRIM,
6507 -- old.AMOUNT_APPLIED_TRX_PRIM = dlt.AMOUNT_APPLIED_TRX_PRIM,
6508 -- old.AMOUNT_APPLIED_RCT_SEC = dlt.AMOUNT_APPLIED_RCT_SEC,
6509 -- old.AMOUNT_APPLIED_TRX_SEC = dlt.AMOUNT_APPLIED_TRX_SEC,
6510 -- old.EARNED_DISCOUNT_AMOUNT_TRX = dlt.EARNED_DISCOUNT_AMOUNT_TRX,
6511 -- old.EARNED_DISCOUNT_AMOUNT_FUNC = dlt.EARNED_DISCOUNT_AMOUNT_FUNC,
6512 -- old.EARNED_DISCOUNT_AMOUNT_PRIM = dlt.EARNED_DISCOUNT_AMOUNT_PRIM,
6513 -- old.EARNED_DISCOUNT_AMOUNT_SEC = dlt.EARNED_DISCOUNT_AMOUNT_SEC,
6514 -- old.UNEARNED_DISCOUNT_AMOUNT_TRX = dlt.UNEARNED_DISCOUNT_AMOUNT_TRX,
6515 -- old.UNEARNED_DISCOUNT_AMOUNT_FUNC = dlt.UNEARNED_DISCOUNT_AMOUNT_FUNC,
6516 -- old.UNEARNED_DISCOUNT_AMOUNT_PRIM = dlt.UNEARNED_DISCOUNT_AMOUNT_PRIM,
6517 -- old.UNEARNED_DISCOUNT_AMOUNT_SEC = dlt.UNEARNED_DISCOUNT_AMOUNT_SEC,
6518 -- old.APPLY_DATE = dlt.APPLY_DATE,
6519 -- old.GL_DATE = dlt.GL_DATE,
6520 -- old.FILTER_DATE = dlt.FILTER_DATE,
6521 -- old.HEADER_FILTER_DATE = dlt.HEADER_FILTER_DATE,
6522 -- old.APPLICATION_TYPE = dlt.APPLICATION_TYPE,
6523 -- old.APPLIED_PAYMENT_SCHEDULE_ID = dlt.APPLIED_PAYMENT_SCHEDULE_ID,
6524 -- old.APPLIED_CUSTOMER_TRX_ID = dlt.APPLIED_CUSTOMER_TRX_ID,
6525 -- old.CUSTOMER_TRX_ID = dlt.CUSTOMER_TRX_ID,
6526 -- old.PAYMENT_SCHEDULE_ID = dlt.PAYMENT_SCHEDULE_ID,
6527 -- old.RECEIPT_NUMBER = dlt.RECEIPT_NUMBER,
6528 -- old.RECEIPT_TYPE = dlt.RECEIPT_TYPE,
6529 -- old.RECEIPT_DATE = dlt.RECEIPT_DATE,
6530 old.RCT_ACTUAL_DATE_CLOSED = dlt.RCT_ACTUAL_DATE_CLOSED,
6531 -- old.RECEIPT_METHOD_ID = dlt.RECEIPT_METHOD_ID,
6532 -- old.CURRENCY_CODE = dlt.CURRENCY_CODE,
6533 -- old.USER_ID = dlt.USER_ID,
6534 -- old.AR_CREATION_DATE = dlt.AR_CREATION_DATE,
6535 old.BILL_TO_CUSTOMER_ID = dlt.BILL_TO_CUSTOMER_ID,
6536 old.BILL_TO_SITE_USE_ID = dlt.BILL_TO_SITE_USE_ID,
6537 old.COLLECTOR_BILL_TO_CUSTOMER_ID = dlt.COLLECTOR_BILL_TO_CUSTOMER_ID,
6538 old.COLLECTOR_BILL_TO_SITE_USE_ID = dlt.COLLECTOR_BILL_TO_SITE_USE_ID,
6539 -- old.ORG_ID = dlt.ORG_ID,
6540 -- old.TRX_DATE = dlt.TRX_DATE,
6541 old.DUE_DATE = dlt.DUE_DATE,
6542 -- old.CM_PREVIOUS_CUSTOMER_TRX_ID = dlt.CM_PREVIOUS_CUSTOMER_TRX_ID,
6543 -- old.TOTAL_RECEIPT_COUNT = dlt.TOTAL_RECEIPT_COUNT,
6544 -- old.CREATION_DATE = dlt.CREATION_DATE,
6545 -- old.CREATED_BY = dlt.CREATED_BY,
6546 old.LAST_UPDATE_DATE = dlt.LAST_UPDATE_DATE,
6547 old.LAST_UPDATED_BY = dlt.LAST_UPDATED_BY,
6548 old.LAST_UPDATE_LOGIN = dlt.LAST_UPDATE_LOGIN
6549 when not matched then insert
6550 (
6551 RECEIVABLE_APPLICATION_ID,
6552 TIME_ID,
6553 CASH_RECEIPT_ID,
6554 APPLICATION_STATUS,
6555 HEADER_STATUS,
6556 AMOUNT_APPLIED_RCT,
6557 AMOUNT_APPLIED_TRX,
6558 AMOUNT_APPLIED_RCT_FUNC,
6559 AMOUNT_APPLIED_TRX_FUNC,
6560 AMOUNT_APPLIED_RCT_PRIM,
6561 AMOUNT_APPLIED_TRX_PRIM,
6562 AMOUNT_APPLIED_RCT_SEC,
6563 AMOUNT_APPLIED_TRX_SEC,
6564 EARNED_DISCOUNT_AMOUNT_TRX,
6565 EARNED_DISCOUNT_AMOUNT_FUNC,
6566 EARNED_DISCOUNT_AMOUNT_PRIM,
6567 EARNED_DISCOUNT_AMOUNT_SEC,
6568 UNEARNED_DISCOUNT_AMOUNT_TRX,
6569 UNEARNED_DISCOUNT_AMOUNT_FUNC,
6570 UNEARNED_DISCOUNT_AMOUNT_PRIM,
6571 UNEARNED_DISCOUNT_AMOUNT_SEC,
6572 APPLY_DATE,
6573 GL_DATE,
6574 FILTER_DATE,
6575 HEADER_FILTER_DATE,
6576 APPLICATION_TYPE,
6577 APPLIED_PAYMENT_SCHEDULE_ID,
6578 APPLIED_CUSTOMER_TRX_ID,
6579 CUSTOMER_TRX_ID,
6580 PAYMENT_SCHEDULE_ID,
6581 RECEIPT_NUMBER,
6582 RECEIPT_TYPE,
6583 RECEIPT_DATE,
6584 RCT_ACTUAL_DATE_CLOSED,
6585 RECEIPT_METHOD_ID,
6586 CURRENCY_CODE,
6587 USER_ID,
6588 AR_CREATION_DATE,
6589 BILL_TO_CUSTOMER_ID,
6590 BILL_TO_SITE_USE_ID,
6591 COLLECTOR_BILL_TO_CUSTOMER_ID,
6592 COLLECTOR_BILL_TO_SITE_USE_ID,
6593 ORG_ID,
6594 TRX_DATE,
6595 DUE_DATE,
6596 CM_PREVIOUS_CUSTOMER_TRX_ID,
6597 TOTAL_RECEIPT_COUNT,
6598 CREATION_DATE,
6599 CREATED_BY,
6600 LAST_UPDATE_DATE,
6601 LAST_UPDATED_BY,
6602 LAST_UPDATE_LOGIN
6603 )
6604 values(
6605 dlt.RECEIVABLE_APPLICATION_ID,
6606 dlt.TIME_ID,
6607 dlt.CASH_RECEIPT_ID,
6608 dlt.APPLICATION_STATUS,
6609 dlt.HEADER_STATUS,
6610 dlt.AMOUNT_APPLIED_RCT,
6611 dlt.AMOUNT_APPLIED_TRX,
6612 dlt.AMOUNT_APPLIED_RCT_FUNC,
6613 dlt.AMOUNT_APPLIED_TRX_FUNC,
6614 dlt.AMOUNT_APPLIED_RCT_PRIM,
6615 dlt.AMOUNT_APPLIED_TRX_PRIM,
6616 dlt.AMOUNT_APPLIED_RCT_SEC,
6617 dlt.AMOUNT_APPLIED_TRX_SEC,
6618 dlt.EARNED_DISCOUNT_AMOUNT_TRX,
6619 dlt.EARNED_DISCOUNT_AMOUNT_FUNC,
6620 dlt.EARNED_DISCOUNT_AMOUNT_PRIM,
6621 dlt.EARNED_DISCOUNT_AMOUNT_SEC,
6622 dlt.UNEARNED_DISCOUNT_AMOUNT_TRX,
6623 dlt.UNEARNED_DISCOUNT_AMOUNT_FUNC,
6624 dlt.UNEARNED_DISCOUNT_AMOUNT_PRIM,
6625 dlt.UNEARNED_DISCOUNT_AMOUNT_SEC,
6626 dlt.APPLY_DATE,
6627 dlt.GL_DATE,
6628 dlt.FILTER_DATE,
6629 dlt.HEADER_FILTER_DATE,
6630 dlt.APPLICATION_TYPE,
6631 dlt.APPLIED_PAYMENT_SCHEDULE_ID,
6632 dlt.APPLIED_CUSTOMER_TRX_ID,
6633 dlt.CUSTOMER_TRX_ID,
6634 dlt.PAYMENT_SCHEDULE_ID,
6635 dlt.RECEIPT_NUMBER,
6636 dlt.RECEIPT_TYPE,
6637 dlt.RECEIPT_DATE,
6638 dlt.RCT_ACTUAL_DATE_CLOSED,
6639 dlt.RECEIPT_METHOD_ID,
6640 dlt.CURRENCY_CODE,
6641 dlt.USER_ID,
6642 dlt.AR_CREATION_DATE,
6643 dlt.BILL_TO_CUSTOMER_ID,
6644 dlt.BILL_TO_SITE_USE_ID,
6645 dlt.COLLECTOR_BILL_TO_CUSTOMER_ID,
6646 dlt.COLLECTOR_BILL_TO_SITE_USE_ID,
6647 dlt.ORG_ID,
6648 dlt.TRX_DATE,
6649 dlt.DUE_DATE,
6650 dlt.CM_PREVIOUS_CUSTOMER_TRX_ID,
6651 dlt.TOTAL_RECEIPT_COUNT,
6652 dlt.CREATION_DATE,
6653 dlt.CREATED_BY,
6654 dlt.LAST_UPDATE_DATE,
6655 dlt.LAST_UPDATED_BY,
6656 dlt.LAST_UPDATE_LOGIN
6657 );
6658
6659 if g_debug_flag = 'Y' then
6660 FII_UTIL.put_line('Merged ' ||SQL%ROWCOUNT|| ' records into FII_AR_RECEIPTS_F');
6661 FII_UTIL.stop_timer;
6662 FII_UTIL.print_timer('Duration');
6663 FII_UTIL.put_line('');
6664 end if;
6665
6666 g_state := 'Analyzing FII_AR_RECEIPTS_F table';
6667 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'FII_AR_RECEIPTS_F');
6668
6669 g_state := 'Logging maximum receivable_application_id into fii_change_log table';
6670 select nvl(max(receivable_application_id), -999)
6671 into l_max_rec_application_id
6672 from fii_ar_receipts_f;
6673
6674 INSERT INTO fii_change_log
6675 (log_item, item_value, CREATION_DATE, CREATED_BY,
6676 LAST_UPDATE_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN)
6677 (SELECT 'AR_MAX_RECEIVABLE_APPLICATION_ID',
6678 l_max_rec_application_id,
6679 sysdate, --CREATION_DATE,
6680 g_fii_user_id, --CREATED_BY,
6681 sysdate, --LAST_UPDATE_DATE,
6682 g_fii_user_id, --LAST_UPDATED_BY,
6683 g_fii_login_id --LAST_UPDATE_LOGIN
6684 FROM DUAL
6685 WHERE NOT EXISTS
6686 (select 1 from fii_change_log
6687 where log_item = 'AR_MAX_RECEIVABLE_APPLICATION_ID'));
6688
6689 IF (SQL%ROWCOUNT = 0) THEN
6690 UPDATE fii_change_log
6691 SET item_value = l_max_rec_application_id,
6692 last_update_date = g_sysdate_time,
6693 last_update_login = g_fii_login_id,
6694 last_updated_by = g_fii_user_id
6695 WHERE log_item = 'AR_MAX_RECEIVABLE_APPLICATION_ID';
6696 END IF;
6697
6698 EXCEPTION
6699 WHEN OTHERS THEN
6700 g_errbuf:=sqlerrm;
6701 g_retcode:= -1;
6702 g_exception_msg := g_retcode || ':' || g_errbuf;
6703 FII_UTIL.put_line('Error occured while ' || g_state);
6704 FII_UTIL.put_line(g_exception_msg);
6705 RAISE;
6706
6707 END Inc_RECEIPTS;
6708
6709
6710 ------------------------------------------------------------------
6711 -- Procedure Inc_RECEIVABLES_AGING
6712 -- Purpose
6713 -- This procedure inserts records in fii_ar_aging_receivables
6714 -- for incremental load
6715 ------------------------------------------------------------------
6716 PROCEDURE Inc_RECEIVABLES_AGING IS
6717 BEGIN
6718
6719 g_state := 'Populating fii_ar_aging_receivables in incremental mode';
6720 if g_debug_flag = 'Y' then
6721 FII_UTIL.put_line(g_state);
6722 FII_UTIL.start_timer;
6723 FII_UTIL.put_line('');
6724 end if;
6725
6726 --Remove 3
6727 INSERT INTO fii_ar_aging_receivables
6728 (time_id,
6729 time_id_date,
6730 event_date,
6731 next_aging_date,
6732 bill_to_customer_id,
6733 bill_to_site_use_id,
6734 org_id ,
6735 customer_trx_id,
6736 payment_schedule_id,
6737 adjustment_id,
6738 receivable_application_id,
6739 appl_trx_date,
6740 trx_date,
6741 due_date,
6742 current_bucket_1_amount_trx,
6743 current_bucket_1_amount_func,
6744 current_bucket_1_amount_prim,
6745 current_bucket_1_amount_sec,
6746 current_bucket_1_count,
6747 current_bucket_2_amount_trx,
6748 current_bucket_2_amount_func,
6749 current_bucket_2_amount_prim,
6750 current_bucket_2_amount_sec,
6751 current_bucket_2_count,
6752 current_bucket_3_amount_trx,
6753 current_bucket_3_amount_func,
6754 current_bucket_3_amount_prim,
6755 current_bucket_3_amount_sec,
6756 current_bucket_3_count,
6757 past_due_bucket_1_amount_trx,
6758 past_due_bucket_1_amount_func,
6759 past_due_bucket_1_amount_prim,
6760 past_due_bucket_1_amount_sec,
6761 past_due_bucket_1_count,
6762 past_due_bucket_2_amount_trx,
6763 past_due_bucket_2_amount_func,
6764 past_due_bucket_2_amount_prim,
6765 past_due_bucket_2_amount_sec,
6766 past_due_bucket_2_count,
6767 past_due_bucket_3_amount_trx,
6768 past_due_bucket_3_amount_func,
6769 past_due_bucket_3_amount_prim,
6770 past_due_bucket_3_amount_sec,
6771 past_due_bucket_3_count,
6772 past_due_bucket_4_amount_trx,
6773 past_due_bucket_4_amount_func,
6774 past_due_bucket_4_amount_prim,
6775 past_due_bucket_4_amount_sec,
6776 past_due_bucket_4_count,
6777 past_due_bucket_5_amount_trx,
6778 past_due_bucket_5_amount_func,
6779 past_due_bucket_5_amount_prim,
6780 past_due_bucket_5_amount_sec,
6781 past_due_bucket_5_count,
6782 past_due_bucket_6_amount_trx,
6783 past_due_bucket_6_amount_func,
6784 past_due_bucket_6_amount_prim,
6785 past_due_bucket_6_amount_sec,
6786 past_due_bucket_6_count,
6787 past_due_bucket_7_amount_trx,
6788 past_due_bucket_7_amount_func,
6789 past_due_bucket_7_amount_prim,
6790 past_due_bucket_7_amount_sec,
6791 past_due_bucket_7_count,
6792 current_open_count,
6793 past_due_count,
6794 total_open_count,
6795 unaged_amount_trx,
6796 unaged_amount_func,
6797 unaged_amount_prim,
6798 unaged_amount_sec,
6799 on_acct_credit_amount_trx,
6800 on_acct_credit_amount_func,
6801 on_acct_credit_amount_prim,
6802 on_acct_credit_amount_sec,
6803 class,
6804 billing_activity_flag,
6805 billed_amount_flag,
6806 on_account_credit_flag,
6807 unapplied_deposit_flag,
6808 billing_activity_count,
6809 action,
6810 aging_flag,
6811 creation_date,
6812 created_by,
6813 last_update_date,
6814 last_updated_by,
6815 last_update_login)
6816 SELECT time_id,
6817 time_id_date,
6818 event_date,
6819 next_aging_date,
6820 bill_to_customer_id,
6821 bill_to_site_use_id,
6822 org_id,
6823 customer_trx_id,
6824 payment_schedule_id,
6825 adjustment_id,
6826 receivable_application_id,
6827 appl_trx_date,
6828 trx_date,
6829 due_date,
6830 sum(current_bucket_1_amount_trx),
6831 sum(current_bucket_1_amount_func),
6832 sum(current_bucket_1_amount_prim),
6833 sum(current_bucket_1_amount_sec),
6834 sum(current_bucket_1_count),
6835 sum(current_bucket_2_amount_trx),
6836 sum(current_bucket_2_amount_func),
6837 sum(current_bucket_2_amount_prim),
6838 sum(current_bucket_2_amount_sec),
6839 sum(current_bucket_2_count),
6840 sum(current_bucket_3_amount_trx),
6841 sum(current_bucket_3_amount_func),
6842 sum(current_bucket_3_amount_prim),
6843 sum(current_bucket_3_amount_sec),
6844 sum(current_bucket_3_count),
6845 sum(past_due_bucket_1_amount_trx),
6846 sum(past_due_bucket_1_amount_func),
6847 sum(past_due_bucket_1_amount_prim),
6848 sum(past_due_bucket_1_amount_sec),
6849 sum(past_due_bucket_1_count),
6850 sum(past_due_bucket_2_amount_trx),
6851 sum(past_due_bucket_2_amount_func),
6852 sum(past_due_bucket_2_amount_prim),
6853 sum(past_due_bucket_2_amount_sec),
6854 sum(past_due_bucket_2_count),
6855 sum(past_due_bucket_3_amount_trx),
6856 sum(past_due_bucket_3_amount_func),
6857 sum(past_due_bucket_3_amount_prim),
6858 sum(past_due_bucket_3_amount_sec),
6859 sum(past_due_bucket_3_count),
6860 sum(past_due_bucket_4_amount_trx),
6861 sum(past_due_bucket_4_amount_func),
6862 sum(past_due_bucket_4_amount_prim),
6863 sum(past_due_bucket_4_amount_sec),
6864 sum(past_due_bucket_4_count),
6865 sum(past_due_bucket_5_amount_trx),
6866 sum(past_due_bucket_5_amount_func),
6867 sum(past_due_bucket_5_amount_prim),
6868 sum(past_due_bucket_5_amount_sec),
6869 sum(past_due_bucket_5_count),
6870 sum(past_due_bucket_6_amount_trx),
6871 sum(past_due_bucket_6_amount_func),
6872 sum(past_due_bucket_6_amount_prim),
6873 sum(past_due_bucket_6_amount_sec),
6874 sum(past_due_bucket_6_count),
6875 sum(past_due_bucket_7_amount_trx),
6876 sum(past_due_bucket_7_amount_func),
6877 sum(past_due_bucket_7_amount_prim),
6878 sum(past_due_bucket_7_amount_sec),
6879 sum(past_due_bucket_7_count),
6880 sum(current_open_count),
6881 sum(past_due_count),
6882 sum(total_open_count),
6883 unaged_amount_trx,
6884 unaged_amount_func,
6885 unaged_amount_prim,
6886 unaged_amount_sec,
6887 on_acct_credit_amount_trx,
6888 on_acct_credit_amount_func,
6889 on_acct_credit_amount_prim,
6890 on_acct_credit_amount_sec,
6891 class,
6892 billing_activity_flag,
6893 billed_amount_flag,
6894 on_account_credit_flag,
6895 unapplied_deposit_flag,
6896 sum(billing_activity_count),
6897 action,
6898 aging_flag,
6899 sysdate, --CREATION_DATE,
6900 g_fii_user_id, --CREATED_BY,
6901 sysdate, --LAST_UPDATE_DATE,
6902 g_fii_user_id, --LAST_UPDATED_BY,
6903 g_fii_login_id --LAST_UPDATE_LOGIN
6904 FROM (
6905 SELECT time_id,
6906 time_id_date,
6907 next_aging_date,
6908 bill_to_customer_id,
6909 bill_to_site_use_id,
6910 org_id,
6911 customer_trx_id,
6912 payment_schedule_id,
6913 adjustment_id,
6914 receivable_application_id,
6915 appl_trx_date,
6916 trx_date,
6917 due_date,
6918 event_date,
6919 current_bucket_1_amount_trx,
6920 current_bucket_1_amount_func,
6921 current_bucket_1_amount_prim,
6922 current_bucket_1_amount_sec,
6923 (case when current_bucket_1_amount_func = current_bucket_1_amt_func_cum
6924 AND current_bucket_1_amount_func <> 0
6925 then 1
6926 when current_bucket_1_amt_func_cum = 0
6927 AND current_bucket_1_amount_func <>0
6928 then -1
6929 else 0 end) current_bucket_1_count,
6930 current_bucket_2_amount_trx,
6931 current_bucket_2_amount_func,
6932 current_bucket_2_amount_prim,
6933 current_bucket_2_amount_sec,
6934 (case when current_bucket_2_amount_func = current_bucket_2_amt_func_cum
6935 AND current_bucket_2_amount_func <>0
6936 then 1
6937 when current_bucket_2_amt_func_cum = 0
6938 AND current_bucket_2_amount_func <>0
6939 then -1
6940 else 0 end) current_bucket_2_count,
6941 current_bucket_3_amount_trx,
6942 current_bucket_3_amount_func,
6943 current_bucket_3_amount_prim,
6944 current_bucket_3_amount_sec,
6945 (case when current_bucket_3_amount_func = current_bucket_3_amt_func_cum
6946 AND current_bucket_3_amount_func <> 0
6947 then 1
6948 when current_bucket_3_amt_func_cum = 0
6949 AND current_bucket_3_amount_func <> 0
6950 then -1
6951 else 0 end) current_bucket_3_count,
6952 past_due_bucket_1_amount_trx,
6953 past_due_bucket_1_amount_func,
6954 past_due_bucket_1_amount_prim,
6955 past_due_bucket_1_amount_sec,
6956 (case when past_due_bucket_1_amount_func = past_due_bucket_1_amt_func_cum
6957 AND past_due_bucket_1_amount_func <> 0
6958 then 1
6959 when past_due_bucket_1_amt_func_cum = 0
6960 AND past_due_bucket_1_amount_func <> 0
6961 then -1
6962 else 0 end) past_due_bucket_1_count,
6963 past_due_bucket_2_amount_trx,
6964 past_due_bucket_2_amount_func,
6965 past_due_bucket_2_amount_prim,
6966 past_due_bucket_2_amount_sec,
6967 (case when past_due_bucket_2_amount_func = past_due_bucket_2_amt_func_cum
6968 AND past_due_bucket_2_amount_func <> 0
6969 then 1
6970 when past_due_bucket_2_amt_func_cum = 0
6971 AND past_due_bucket_2_amount_func <> 0
6972 then -1
6973 else 0 end) past_due_bucket_2_count,
6974 past_due_bucket_3_amount_trx,
6975 past_due_bucket_3_amount_func,
6976 past_due_bucket_3_amount_prim,
6977 past_due_bucket_3_amount_sec,
6978 (case when past_due_bucket_3_amount_func = past_due_bucket_3_amt_func_cum
6979 AND past_due_bucket_3_amount_func <> 0
6980 then 1
6981 when past_due_bucket_3_amt_func_cum = 0
6982 AND past_due_bucket_3_amount_func <> 0
6983 then -1
6984 else 0 end) past_due_bucket_3_count,
6985 past_due_bucket_4_amount_trx,
6986 past_due_bucket_4_amount_func,
6987 past_due_bucket_4_amount_prim,
6988 past_due_bucket_4_amount_sec,
6989 (case when past_due_bucket_4_amount_func = past_due_bucket_4_amt_func_cum
6990 AND past_due_bucket_4_amount_func <> 0
6991 then 1
6992 when past_due_bucket_4_amt_func_cum = 0
6993 AND past_due_bucket_4_amount_func <> 0
6994 then -1
6995 else 0 end) past_due_bucket_4_count,
6996 past_due_bucket_5_amount_trx,
6997 past_due_bucket_5_amount_func,
6998 past_due_bucket_5_amount_prim,
6999 past_due_bucket_5_amount_sec,
7000 (case when past_due_bucket_5_amount_func = past_due_bucket_5_amt_func_cum
7001 AND past_due_bucket_5_amount_func <> 0
7002 then 1
7003 when past_due_bucket_5_amt_func_cum = 0
7004 AND past_due_bucket_5_amount_func <> 0
7005 then -1
7006 else 0 end) past_due_bucket_5_count,
7007 past_due_bucket_6_amount_trx,
7008 past_due_bucket_6_amount_func,
7009 past_due_bucket_6_amount_prim,
7010 past_due_bucket_6_amount_sec,
7011 (case when past_due_bucket_6_amount_func = past_due_bucket_6_amt_func_cum
7012 AND past_due_bucket_6_amount_func <> 0
7013 then 1
7014 when past_due_bucket_6_amt_func_cum = 0
7015 AND past_due_bucket_6_amount_func <> 0
7016 then -1
7017 else 0 end) past_due_bucket_6_count,
7018 past_due_bucket_7_amount_trx,
7019 past_due_bucket_7_amount_func,
7020 past_due_bucket_7_amount_prim,
7021 past_due_bucket_7_amount_sec,
7022 (case when past_due_bucket_7_amount_func = past_due_bucket_7_amt_func_cum
7023 AND past_due_bucket_7_amount_func <> 0
7024 then 1
7025 when past_due_bucket_7_amt_func_cum = 0
7026 AND past_due_bucket_7_amount_func <> 0
7027 then -1
7028 else 0 end) past_due_bucket_7_count,
7029 (case when current_open_amount_func = current_open_amt_func_cum
7030 and current_open_amount_func <> 0
7031 then 1
7032 when current_open_amt_func_cum = 0
7033 and current_open_amount_func <> 0
7034 then -1
7035 else 0 end) current_open_count,
7036 (case when past_due_amount_func = past_due_amt_func_cum
7037 and past_due_amount_func <> 0
7038 then 1
7039 when past_due_amt_func_cum = 0
7040 and past_due_amount_func <> 0
7041 then -1
7042 else 0 end) past_due_count,
7043 (case when total_open_amount_func = total_open_amt_func_cum
7044 and total_open_amount_func <> 0
7045 then 1
7046 when total_open_amt_func_cum = 0
7047 and total_open_amount_func <>0
7048 then -1
7049 else 0 end) total_open_count,
7050 unaged_amount_trx,
7051 unaged_amount_func,
7052 unaged_amount_prim,
7053 unaged_amount_sec,
7054 on_acct_credit_amount_trx,
7055 on_acct_credit_amount_func,
7056 on_acct_credit_amount_prim,
7057 on_acct_credit_amount_sec,
7058 class,
7059 billing_activity_flag,
7060 billed_amount_flag,
7061 on_account_credit_flag,
7062 unapplied_deposit_flag,
7063 (case when billing_activity_flag = 'Y'
7064 and payment_schedule_id = min_payment_schedule_id
7065 then 1
7066 else 0 end) billing_activity_count,
7067 action,
7068 actual_date_closed,
7069 aging_flag
7070 FROM (
7071 SELECT time_id,
7072 time_id_date,
7073 next_aging_date,
7074 bill_to_customer_id,
7075 bill_to_site_use_id,
7076 org_id,
7077 customer_trx_id,
7078 payment_schedule_id,
7079 adjustment_id,
7080 receivable_application_id,
7081 appl_trx_date,
7082 trx_date,
7083 due_date,
7084 event_date,
7085 MIN(payment_schedule_id) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) min_payment_schedule_id,
7086 current_bucket_1_amount_trx,
7087 current_bucket_1_amount_func,
7088 current_bucket_1_amount_prim,
7089 current_bucket_1_amount_sec,
7090 SUM(current_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) current_bucket_1_amt_func_cum,
7091 current_bucket_2_amount_trx,
7092 current_bucket_2_amount_func,
7093 current_bucket_2_amount_prim,
7094 current_bucket_2_amount_sec,
7095 SUM(current_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) current_bucket_2_amt_func_cum,
7096 current_bucket_3_amount_trx,
7097 current_bucket_3_amount_func,
7098 current_bucket_3_amount_prim,
7099 current_bucket_3_amount_sec,
7100 SUM(current_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) current_bucket_3_amt_func_cum,
7101 past_due_bucket_1_amount_trx,
7102 past_due_bucket_1_amount_func,
7103 past_due_bucket_1_amount_prim,
7104 past_due_bucket_1_amount_sec,
7105 SUM(past_due_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_1_amt_func_cum,
7106 past_due_bucket_2_amount_trx,
7107 past_due_bucket_2_amount_func,
7108 past_due_bucket_2_amount_prim,
7109 past_due_bucket_2_amount_sec,
7110 SUM(past_due_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_2_amt_func_cum,
7111 past_due_bucket_3_amount_trx,
7112 past_due_bucket_3_amount_func,
7113 past_due_bucket_3_amount_prim,
7114 past_due_bucket_3_amount_sec,
7115 SUM(past_due_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_3_amt_func_cum,
7116 past_due_bucket_4_amount_trx,
7117 past_due_bucket_4_amount_func,
7118 past_due_bucket_4_amount_prim,
7119 past_due_bucket_4_amount_sec,
7120 SUM(past_due_bucket_4_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_4_amt_func_cum,
7121 past_due_bucket_5_amount_trx,
7122 past_due_bucket_5_amount_func,
7123 past_due_bucket_5_amount_prim,
7124 past_due_bucket_5_amount_sec,
7125 SUM(past_due_bucket_5_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_5_amt_func_cum,
7126 past_due_bucket_6_amount_trx,
7127 past_due_bucket_6_amount_func,
7128 past_due_bucket_6_amount_prim,
7129 past_due_bucket_6_amount_sec,
7130 SUM(past_due_bucket_6_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_6_amt_func_cum,
7131 past_due_bucket_7_amount_trx,
7132 past_due_bucket_7_amount_func,
7133 past_due_bucket_7_amount_prim,
7134 past_due_bucket_7_amount_sec,
7135 SUM(past_due_bucket_7_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_bucket_7_amt_func_cum,
7136 (current_bucket_1_amount_func+current_bucket_2_amount_func
7137 + current_bucket_3_amount_func) current_open_amount_func,
7138 (SUM(current_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7139 + SUM(current_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7140 + SUM(current_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)) current_open_amt_func_cum,
7141 (past_due_bucket_1_amount_func
7142 + past_due_bucket_2_amount_func+past_due_bucket_3_amount_func
7143 + past_due_bucket_4_amount_func+past_due_bucket_5_amount_func
7144 + past_due_bucket_6_amount_func+past_due_bucket_7_amount_func) past_due_amount_func,
7145 (SUM(past_due_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7146 + SUM(past_due_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7147 + SUM(past_due_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7148 + SUM(past_due_bucket_4_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7149 + SUM(past_due_bucket_5_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7150 + SUM(past_due_bucket_6_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7151 + SUM(past_due_bucket_7_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)) past_due_amt_func_cum,
7152 (current_bucket_1_amount_func+current_bucket_2_amount_func
7153 + current_bucket_3_amount_func+past_due_bucket_1_amount_func
7154 + past_due_bucket_2_amount_func+past_due_bucket_3_amount_func
7155 + past_due_bucket_4_amount_func+past_due_bucket_5_amount_func
7156 + past_due_bucket_6_amount_func+past_due_bucket_7_amount_func) total_open_amount_func,
7157 (SUM(current_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7158 + SUM(current_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7159 + SUM(current_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7160 + SUM(past_due_bucket_1_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7161 + SUM(past_due_bucket_2_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7162 + SUM(past_due_bucket_3_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7163 + SUM(past_due_bucket_4_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7164 + SUM(past_due_bucket_5_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7165 + SUM(past_due_bucket_6_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
7166 + SUM(past_due_bucket_7_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)) total_open_amt_func_cum,
7167 unaged_amount_trx,
7168 unaged_amount_func,
7169 unaged_amount_prim,
7170 unaged_amount_sec,
7171 on_acct_credit_amount_trx,
7172 on_acct_credit_amount_func,
7173 on_acct_credit_amount_prim,
7174 on_acct_credit_amount_sec,
7175 class,
7176 billing_activity_flag,
7177 billed_amount_flag,
7178 on_account_credit_flag,
7179 unapplied_deposit_flag,
7180 action,
7181 actual_date_closed,
7182 aging_flag
7183 FROM
7184 (SELECT to_number(to_char(decode(g_collection_criteria,
7185 'GL', case when gl_date >= event_date
7186 then gl_date
7187 else decode(aging_flag, 'N', gl_date, event_date) end,
7188 event_date), 'J')) time_id,
7189 decode(g_collection_criteria,
7190 'GL', case when gl_date >= event_date
7191 then gl_date
7192 else decode(aging_flag, 'N', gl_date, event_date) end,
7193 event_date) time_id_date,
7194 next_aging_date,
7195 bill_to_customer_id,
7196 bill_to_site_use_id,
7197 org_id,
7198 customer_trx_id,
7199 payment_schedule_id,
7200 adjustment_id,
7201 receivable_application_id,
7202 appl_trx_date,
7203 trx_date,
7204 due_date,
7205 event_date,
7206 (case when marker=1
7207 then bucket_amount_trx
7208 when marker=2 and aging_flag='Y'
7209 then -1*bucket_amount_trx
7210 else 0 end) current_bucket_3_amount_trx,
7211 (case when marker=1
7212 then bucket_amount_func
7213 when marker=2 and aging_flag='Y'
7214 then -1*bucket_amount_func
7215 else 0 end) current_bucket_3_amount_func,
7216 (case when marker=1
7217 then bucket_amount_prim
7218 when marker=2 and aging_flag='Y'
7219 then -1*bucket_amount_prim
7220 else 0 end) current_bucket_3_amount_prim,
7221 (case when marker=1
7222 then bucket_amount_sec
7223 when marker=2 and aging_flag='Y'
7224 then -1*bucket_amount_sec
7225 else 0 end) current_bucket_3_amount_sec,
7226 ----------------
7227 (case when marker=2
7228 then bucket_amount_trx
7229 when marker=3 and aging_flag='Y'
7230 then -1*bucket_amount_trx
7231 else 0 end) current_bucket_2_amount_trx,
7232 (case when marker=2
7233 then bucket_amount_func
7234 when marker=3 and aging_flag='Y'
7235 then -1*bucket_amount_func
7236 else 0 end) current_bucket_2_amount_func,
7237 (case when marker=2
7238 then bucket_amount_prim
7239 when marker=3 and aging_flag='Y'
7240 then -1*bucket_amount_prim
7241 else 0 end) current_bucket_2_amount_prim,
7242 (case when marker=2
7243 then bucket_amount_sec
7244 when marker=3 and aging_flag='Y'
7245 then -1*bucket_amount_sec
7246 else 0 end) current_bucket_2_amount_sec,
7247 ----------------
7248 (case when marker=3
7249 then bucket_amount_trx
7250 when marker=4 and aging_flag='Y'
7251 then -1*bucket_amount_trx
7252 else 0 end) current_bucket_1_amount_trx,
7253 (case when marker=3
7254 then bucket_amount_func
7255 when marker=4 and aging_flag='Y'
7256 then -1*bucket_amount_func
7257 else 0 end) current_bucket_1_amount_func,
7258 (case when marker=3
7259 then bucket_amount_prim
7260 when marker=4 and aging_flag='Y'
7261 then -1*bucket_amount_prim
7262 else 0 end) current_bucket_1_amount_prim,
7263 (case when marker=3
7264 then bucket_amount_sec
7265 when marker=4 and aging_flag='Y'
7266 then -1*bucket_amount_sec
7267 else 0 end) current_bucket_1_amount_sec,
7268 ----------------
7269 (case when marker=4
7270 then bucket_amount_trx
7271 when marker=5 and aging_flag='Y'
7272 then -1*bucket_amount_trx
7273 else 0 end) past_due_bucket_1_amount_trx,
7274 (case when marker=4
7275 then bucket_amount_func
7276 when marker=5 and aging_flag='Y'
7277 then -1*bucket_amount_func
7278 else 0 end) past_due_bucket_1_amount_func,
7279 (case when marker=4
7280 then bucket_amount_prim
7281 when marker=5 and aging_flag='Y'
7282 then -1*bucket_amount_prim
7283 else 0 end) past_due_bucket_1_amount_prim,
7284 (case when marker=4
7285 then bucket_amount_sec
7286 when marker=5 and aging_flag='Y'
7287 then -1*bucket_amount_sec
7288 else 0 end) past_due_bucket_1_amount_sec,
7289 ------------------
7290 (case when marker=5
7291 then bucket_amount_trx
7292 when marker=6 and aging_flag='Y'
7293 then -1*bucket_amount_trx
7294 else 0 end) past_due_bucket_2_amount_trx,
7295 (case when marker=5
7296 then bucket_amount_func
7297 when marker=6 and aging_flag='Y'
7298 then -1*bucket_amount_func
7299 else 0 end) past_due_bucket_2_amount_func,
7300 (case when marker=5
7301 then bucket_amount_prim
7302 when marker=6 and aging_flag='Y'
7303 then -1*bucket_amount_prim
7304 else 0 end) past_due_bucket_2_amount_prim,
7305 (case when marker=5
7306 then bucket_amount_sec
7307 when marker=6 and aging_flag='Y'
7308 then -1*bucket_amount_sec
7309 else 0 end) past_due_bucket_2_amount_sec,
7310 ------------------
7311 (case when marker=6
7312 then bucket_amount_trx
7313 when marker=7 and aging_flag='Y'
7314 then -1*bucket_amount_trx
7315 else 0 end) past_due_bucket_3_amount_trx,
7316 (case when marker=6
7317 then bucket_amount_func
7318 when marker=7 and aging_flag='Y'
7319 then -1*bucket_amount_func
7320 else 0 end) past_due_bucket_3_amount_func,
7321 (case when marker=6
7322 then bucket_amount_prim
7323 when marker=7 and aging_flag='Y'
7324 then -1*bucket_amount_prim
7325 else 0 end) past_due_bucket_3_amount_prim,
7326 (case when marker=6
7327 then bucket_amount_sec
7328 when marker=7 and aging_flag='Y'
7329 then -1*bucket_amount_sec
7330 else 0 end) past_due_bucket_3_amount_sec,
7331 ------------------
7332 (case when marker=7
7333 then bucket_amount_trx
7334 when marker=8 and aging_flag='Y'
7335 then -1*bucket_amount_trx
7336 else 0 end) past_due_bucket_4_amount_trx,
7337 (case when marker=7
7338 then bucket_amount_func
7339 when marker=8 and aging_flag='Y'
7340 then -1*bucket_amount_func
7341 else 0 end) past_due_bucket_4_amount_func,
7342 (case when marker=7
7343 then bucket_amount_prim
7344 when marker=8 and aging_flag='Y'
7345 then -1*bucket_amount_prim
7346 else 0 end) past_due_bucket_4_amount_prim,
7347 (case when marker=7
7348 then bucket_amount_sec
7349 when marker=8 and aging_flag='Y'
7350 then -1*bucket_amount_sec
7351 else 0 end) past_due_bucket_4_amount_sec,
7352 ---------------
7353 (case when marker=8
7354 then bucket_amount_trx
7355 when marker=9 and aging_flag='Y'
7356 then -1*bucket_amount_trx
7357 else 0 end) past_due_bucket_5_amount_trx,
7358 (case when marker=8
7359 then bucket_amount_func
7360 when marker=9 and aging_flag='Y'
7361 then -1*bucket_amount_func
7362 else 0 end) past_due_bucket_5_amount_func,
7363 (case when marker=8
7364 then bucket_amount_prim
7365 when marker=9 and aging_flag='Y'
7366 then -1*bucket_amount_prim
7367 else 0 end) past_due_bucket_5_amount_prim,
7368 (case when marker=8
7369 then bucket_amount_sec
7370 when marker=9 and aging_flag='Y'
7371 then -1*bucket_amount_sec
7372 else 0 end) past_due_bucket_5_amount_sec,
7373 ---------------
7374 (case when marker=9
7375 then bucket_amount_trx
7376 when marker=10 and aging_flag='Y'
7377 then -1*bucket_amount_trx
7378 else 0 end) past_due_bucket_6_amount_trx,
7379 (case when marker=9
7380 then bucket_amount_func
7381 when marker=10 and aging_flag='Y'
7382 then -1*bucket_amount_func
7383 else 0 end) past_due_bucket_6_amount_func,
7384 (case when marker=9
7385 then bucket_amount_prim
7386 when marker=10 and aging_flag='Y'
7387 then -1*bucket_amount_prim
7388 else 0 end) past_due_bucket_6_amount_prim,
7389 (case when marker=9
7390 then bucket_amount_sec
7391 when marker=10 and aging_flag='Y'
7392 then -1*bucket_amount_sec
7393 else 0 end) past_due_bucket_6_amount_sec,
7394 ---------------
7395 (case when marker=10
7396 then bucket_amount_trx
7397 else 0 end) past_due_bucket_7_amount_trx,
7398 (case when marker=10
7399 then bucket_amount_func
7400 else 0 end) past_due_bucket_7_amount_func,
7401 (case when marker=10
7402 then bucket_amount_prim
7403 else 0 end) past_due_bucket_7_amount_prim,
7404 (case when marker=10
7405 then bucket_amount_sec
7406 else 0 end) past_due_bucket_7_amount_sec,
7407 ---------------
7408 decode(aging_flag,'N',unaged_amount_trx, 0) unaged_amount_trx,
7409 decode(aging_flag,'N',unaged_amount_func, 0) unaged_amount_func,
7410 decode(aging_flag,'N',unaged_amount_prim, 0) unaged_amount_prim,
7411 decode(aging_flag,'N',unaged_amount_sec, 0) unaged_amount_sec,
7412 decode(aging_flag,'N',on_acct_credit_amount_trx, 0) on_acct_credit_amount_trx,
7413 decode(aging_flag,'N',on_acct_credit_amount_func, 0) on_acct_credit_amount_func,
7414 decode(aging_flag,'N',on_acct_credit_amount_prim, 0) on_acct_credit_amount_prim,
7415 decode(aging_flag,'N',on_acct_credit_amount_sec, 0) on_acct_credit_amount_sec,
7416 class,
7417 decode(aging_flag,'N',billing_activity_flag, 'N') billing_activity_flag,
7418 decode(aging_flag,'N',billed_amount_flag, 'N') billed_amount_flag,
7419 null on_account_credit_flag,
7420 decode(aging_flag,'N',unapplied_deposit_flag, 'N') unapplied_deposit_flag,
7421 action,
7422 actual_date_closed,
7423 aging_flag
7424 FROM
7425 (SELECT m.marker,
7426 v.bill_to_customer_id,
7427 v.bill_to_site_use_id,
7428 v.org_id,
7429 v.customer_trx_id,
7430 v.payment_schedule_id,
7431 v.adjustment_id,
7432 v.receivable_application_id,
7433 v.appl_trx_date,
7434 v.due_date,
7435 v.trx_date,
7436 v.gl_date,
7437 v.bucket_amount_trx,
7438 v.bucket_amount_func,
7439 v.bucket_amount_prim,
7440 v.bucket_amount_sec,
7441 v.unaged_amount_trx,
7442 v.unaged_amount_func,
7443 v.unaged_amount_prim,
7444 v.unaged_amount_sec,
7445 v.on_acct_credit_amount_trx,
7446 v.on_acct_credit_amount_func,
7447 v.on_acct_credit_amount_prim,
7448 v.on_acct_credit_amount_sec,
7449 v.class,
7450 v.billing_activity_flag,
7451 v.billed_amount_flag,
7452 v.on_account_credit_flag,
7453 v.unapplied_deposit_flag,
7454 v.action,
7455 v.actual_date_closed,
7456 decode(m.marker,
7457 1, case when trunc(v.appl_trx_date)<=trunc(v.due_date)-g_current_bucket_3_low
7458 then appl_trx_date
7459 else null end,
7460 2, case when g_current_bucket_2_high is not null
7461 and trunc(v.appl_trx_date) < trunc(v.due_date)-g_current_bucket_2_high
7462 and actual_date_closed >= trunc(v.due_date)-g_current_bucket_2_high
7463 and trunc(v.due_date)-g_current_bucket_2_high <= g_sysdate
7464 then trunc(v.due_date)-g_current_bucket_2_high
7465 when g_current_bucket_2_high is not null
7466 and trunc(v.appl_trx_date) >= trunc(v.due_date)-g_current_bucket_2_high
7467 and trunc(v.appl_trx_date) <= trunc(v.due_date)-g_current_bucket_2_low
7468 then v.appl_trx_date
7469 when g_current_bucket_2_high is null
7470 and trunc(v.appl_trx_date) <= trunc(v.due_date)-g_current_bucket_2_low
7471 then v.appl_trx_date
7472 else null end,
7473 3, case when g_current_bucket_1_high is not null
7474 and trunc(v.appl_trx_date) < trunc(v.due_date)-g_current_bucket_1_high
7475 and actual_date_closed >= trunc(v.due_date)-g_current_bucket_1_high
7476 and trunc(v.due_date)-g_current_bucket_1_high <= g_sysdate
7477 then trunc(v.due_date)-g_current_bucket_1_high
7478 when g_current_bucket_1_high is not null
7479 and trunc(v.appl_trx_date) >= trunc(v.due_date)-g_current_bucket_1_high
7480 and trunc(v.appl_trx_date) <= trunc(v.due_date) - g_current_bucket_1_low
7481 then v.appl_trx_date
7482 when g_current_bucket_1_high is null
7483 and trunc(v.appl_trx_date) <= trunc(v.due_date) - g_current_bucket_1_low
7484 then v.appl_trx_date
7485 else null end,
7486 4, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_1_low
7487 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_1_low
7488 and trunc(v.due_date)+g_past_due_bucket_1_low <= g_sysdate
7489 then trunc(v.due_date) + g_past_due_bucket_1_low
7490 when g_past_due_bucket_1_high is not null
7491 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_1_low
7492 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_1_high
7493 then v.appl_trx_date
7494 when g_past_due_bucket_1_high is null
7495 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_1_low
7496 then v.appl_trx_date
7497 else null end,
7498 5, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_2_low
7499 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_2_low
7500 and trunc(v.due_date)+g_past_due_bucket_2_low <= g_sysdate
7501 then trunc(v.due_date) + g_past_due_bucket_2_low
7502 when g_past_due_bucket_2_high is not null
7503 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_2_low
7504 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_2_high
7505 then v.appl_trx_date
7506 when g_past_due_bucket_2_high is null
7507 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_2_low
7508 then v.appl_trx_date
7509 else null end,
7510 6, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_3_low
7511 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_3_low
7512 and trunc(v.due_date)+g_past_due_bucket_3_low <= g_sysdate
7513 then trunc(v.due_date) + g_past_due_bucket_3_low
7514 when g_past_due_bucket_3_high is not null
7515 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_3_low
7516 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_3_high
7517 then v.appl_trx_date
7518 when g_past_due_bucket_3_high is null
7519 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_3_low
7520 then v.appl_trx_date
7521 else null end,
7522 7, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_4_low
7523 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_4_low
7524 and trunc(v.due_date)+g_past_due_bucket_4_low <= g_sysdate
7525 then trunc(v.due_date) + g_past_due_bucket_4_low
7526 when g_past_due_bucket_4_high is not null
7527 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_4_low
7528 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_4_high
7529 then v.appl_trx_date
7530 when g_past_due_bucket_4_high is null
7531 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_4_low
7532 then v.appl_trx_date
7533 else null end,
7534 8, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_5_low
7535 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_5_low
7536 and trunc(v.due_date)+g_past_due_bucket_5_low <= g_sysdate
7537 then trunc(v.due_date) + g_past_due_bucket_5_low
7538 when g_past_due_bucket_5_high is not null
7539 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_5_low
7540 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_5_high
7541 then v.appl_trx_date
7542 when g_past_due_bucket_5_high is null
7543 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_5_low
7544 then v.appl_trx_date
7545 else null end,
7546 9, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_6_low
7547 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_6_low
7548 and trunc(v.due_date)+g_past_due_bucket_6_low <= g_sysdate
7549 then trunc(v.due_date) + g_past_due_bucket_6_low
7550 when g_past_due_bucket_6_high is not null
7551 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_6_low
7552 and trunc(v.appl_trx_date)<=trunc(v.due_date)+ g_past_due_bucket_6_high
7553 then v.appl_trx_date
7554 when g_past_due_bucket_6_high is null
7555 and trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_6_low
7556 then v.appl_trx_date
7557 else null end,
7558 10, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_7_low
7559 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_7_low
7560 and trunc(v.due_date)+g_past_due_bucket_7_low <= g_sysdate
7561 then trunc(v.due_date) + g_past_due_bucket_7_low
7562 when trunc(v.appl_trx_date) >= trunc(v.due_date) + g_past_due_bucket_7_low
7563 then v.appl_trx_date
7564 else null end) event_date,
7565 decode(m.marker,
7566 1, case when actual_date_closed >= trunc(v.due_date)-g_current_bucket_2_high
7567 then trunc(v.due_date)-g_current_bucket_2_high
7568 else null end,
7569 2, case when actual_date_closed >= trunc(v.due_date)-g_current_bucket_1_high
7570 then trunc(v.due_date)-g_current_bucket_1_high
7571 else null end,
7572 3, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_1_low
7573 then trunc(v.due_date)+g_past_due_bucket_1_low
7574 else null end,
7575 4, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_2_low
7576 then trunc(v.due_date)+g_past_due_bucket_2_low
7577 else null end,
7578 5, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_3_low
7579 then trunc(v.due_date)+g_past_due_bucket_3_low
7580 else null end,
7581 6, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_4_low
7582 then trunc(v.due_date)+g_past_due_bucket_4_low
7583 else null end,
7584 7, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_5_low
7585 then trunc(v.due_date)+g_past_due_bucket_5_low
7586 else null end,
7587 8, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_6_low
7588 then trunc(v.due_date)+g_past_due_bucket_6_low
7589 else null end,
7590 9, case when actual_date_closed >= trunc(v.due_date)+g_past_due_bucket_7_low
7591 then trunc(v.due_date)+g_past_due_bucket_7_low
7592 else null end,
7593 10, null) next_aging_date,
7594 decode(m.marker,
7595 1, 'N',
7596 2, case when g_current_bucket_2_high is not null
7597 and trunc(v.appl_trx_date) < trunc(v.due_date)-g_current_bucket_2_high
7598 and actual_date_closed >= trunc(v.due_date)-g_current_bucket_2_high
7599 and trunc(v.due_date)-g_current_bucket_2_high <= g_sysdate
7600 then 'Y'
7601 else 'N' end,
7602 3, case when g_current_bucket_1_high is not null
7603 and trunc(v.appl_trx_date) < trunc(v.due_date)-g_current_bucket_1_high
7604 and actual_date_closed >= trunc(v.due_date)-g_current_bucket_1_high
7605 and trunc(v.due_date)-g_current_bucket_1_high <= g_sysdate
7606 then 'Y'
7607 else 'N' end,
7608 4, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_1_low
7609 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_1_low
7610 and trunc(v.due_date)+g_past_due_bucket_1_low <= g_sysdate
7611 then 'Y'
7612 else 'N' end,
7613 5, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_2_low
7614 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_2_low
7615 and trunc(v.due_date)+g_past_due_bucket_2_low <= g_sysdate
7616 then 'Y'
7617 else 'N' end,
7618 6, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_3_low
7619 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_3_low
7620 and trunc(v.due_date)+g_past_due_bucket_3_low <= g_sysdate
7621 then 'Y'
7622 else 'N' end,
7623 7, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_4_low
7624 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_4_low
7625 and trunc(v.due_date)+g_past_due_bucket_4_low <= g_sysdate
7626 then 'Y'
7627 else 'N' end,
7628 8, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_5_low
7629 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_5_low
7630 and trunc(v.due_date)+g_past_due_bucket_5_low <= g_sysdate
7631 then 'Y'
7632 else 'N' end,
7633 9, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_6_low
7634 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_6_low
7635 and trunc(v.due_date)+g_past_due_bucket_6_low <= g_sysdate
7636 then 'Y'
7637 else 'N' end,
7638 10, case when trunc(v.appl_trx_date) < trunc(v.due_date) + g_past_due_bucket_7_low
7639 and actual_date_closed >= trunc(v.due_date) + g_past_due_bucket_7_low
7640 and trunc(v.due_date)+g_past_due_bucket_7_low <= g_sysdate
7641 then 'Y'
7642 else 'N' end) aging_flag
7643 FROM (--Payment Schedules
7644 select sch.bill_to_customer_id,
7645 sch.bill_to_site_use_id,
7646 sch.org_id,
7647 sch.customer_trx_id,
7648 sch.payment_schedule_id,
7649 null adjustment_id,
7650 null receivable_application_id,
7651 sch.trx_date appl_trx_date,
7652 sch.trx_date,
7653 sch.due_date,
7654 sch.gl_date,
7655 decode(sch.class,
7656 'CM',0,
7657 sch.amount_due_original_trx) bucket_amount_trx,
7658 decode(sch.class,
7659 'CM',0,
7660 sch.amount_due_original_func) bucket_amount_func,
7661 decode(sch.class,
7662 'CM',0,
7663 sch.amount_due_original_prim) bucket_amount_prim,
7664 decode(sch.class,
7665 'CM',0,
7666 sch.amount_due_original_sec) bucket_amount_sec,
7667 sch.amount_due_original_trx unaged_amount_trx,
7668 sch.amount_due_original_func unaged_amount_func,
7669 sch.amount_due_original_prim unaged_amount_prim,
7670 sch.amount_due_original_sec unaged_amount_sec,
7671 decode (sch.class, 'CM', sch.amount_due_original_trx, 0) on_acct_credit_amount_trx,
7672 decode (sch.class, 'CM', sch.amount_due_original_func, 0) on_acct_credit_amount_func,
7673 decode (sch.class, 'CM', sch.amount_due_original_prim, 0) on_acct_credit_amount_prim,
7674 decode (sch.class, 'CM', sch.amount_due_original_sec, 0) on_acct_credit_amount_sec,
7675 sch.class,
7676 'Y' billing_activity_flag,
7677 case when sch.class not in ('CB', 'BR')
7678 and dso.dso_value = 'Y' then
7679 'Y'
7680 else 'N' end billed_amount_flag,
7681 null on_account_credit_flag,
7682 decode(sch.class,'DEP','Y','N') unapplied_deposit_flag,
7683 'Transaction' action,
7684 sch.actual_date_closed
7685 from fii_ar_pmt_schedules_f sch,
7686 fii_ar_dso_setup dso,
7687 fii_ar_paysch_merge_gt gt
7688 where sch.class <> 'PMT'
7689 and dso.dso_group='TC'
7690 and dso.dso_type = sch.class
7691 and sch.customer_trx_id = gt.customer_trx_id
7692
7693 union all
7694
7695 --Applications
7696 select rct.collector_bill_to_customer_id,
7697 rct.collector_bill_to_site_use_id,
7698 rct.org_id,
7699 sch.customer_trx_id,
7700 sch.payment_schedule_id,
7701 null adjustment_id,
7702 rct.receivable_application_id,
7703 rct.apply_date appl_trx_date,
7704 sch.trx_date,
7705 sch.due_date,
7706 decode(g_collection_criteria,
7707 'GL', rct.filter_date,
7708 null) gl_date,
7709 -1*(rct.amount_applied_trx
7710 +nvl(rct.earned_discount_amount_trx,0)
7711 +nvl(rct.unearned_discount_amount_trx,0)) bucket_amount_trx,
7712 -1*(rct.amount_applied_trx_func
7713 +nvl(rct.earned_discount_amount_func,0)
7714 +nvl(rct.unearned_discount_amount_func,0)) bucket_amount_func,
7715 -1*(rct.amount_applied_trx_prim
7716 +nvl(rct.earned_discount_amount_prim,0)
7717 +nvl(rct.unearned_discount_amount_prim,0)) bucket_amount_prim,
7718 -1*(rct.amount_applied_trx_sec
7719 +nvl(rct.earned_discount_amount_sec,0)
7720 +nvl(rct.unearned_discount_amount_sec,0)) bucket_amount_sec,
7721 -1*rct.amount_applied_trx unaged_amount_trx,
7722 -1*rct.amount_applied_trx_func unaged_amount_func,
7723 -1*rct.amount_applied_trx_prim unaged_amount_prim,
7724 -1*rct.amount_applied_trx_sec unaged_amount_sec,
7725 --Added for bug 6053566
7726 case when rct.application_type = 'CASH' and sch.class = 'CM'
7727 then rct.amount_applied_trx
7728 when rct.application_type = 'CM'
7729 then -1*rct.amount_applied_rct
7730 else 0 end on_acct_credit_amount_trx,
7731 case when rct.application_type = 'CASH' and sch.class = 'CM'
7732 then rct.amount_applied_trx_func
7733 when rct.application_type = 'CM'
7734 then -1*rct.amount_applied_rct_func
7735 else 0 end on_acct_credit_amount_func,
7736 case when rct.application_type = 'CASH' and sch.class = 'CM'
7737 then rct.amount_applied_trx_prim
7738 when rct.application_type = 'CM'
7739 then -1*rct.amount_applied_rct_prim
7740 else 0 end on_acct_credit_amount_prim,
7741 case when rct.application_type = 'CASH' and sch.class = 'CM'
7742 then rct.amount_applied_trx_sec
7743 when rct.application_type = 'CM'
7744 then -1*rct.amount_applied_rct_sec
7745 else 0 end on_acct_credit_amount_sec,
7746 sch.class,
7747 'N' billing_activity_flag,
7748 'N' billed_amount_flag,
7749 null on_account_credit_flag,
7750 case when rct.application_type = 'CM' and sch.class='DEP'
7751 and rct.cm_previous_customer_trx_id is not null
7752 then 'Y'
7753 else 'N' end unapplied_deposit_flag,
7754 'Application' action,
7755 sch.actual_date_closed
7756 from fii_ar_receipts_f rct,
7757 fii_ar_pmt_schedules_f sch,
7758 FII_AR_PAYSCH_MERGE_GT gt
7759 where rct.application_status = 'APP'
7760 and sch.class <> 'PMT'
7761 and rct.applied_payment_schedule_id = sch.payment_schedule_id
7762 and rct.applied_customer_trx_id = gt.customer_trx_id
7763
7764 union all
7765
7766 --Adjustments
7767 select adj.bill_to_customer_id,
7768 adj.bill_to_site_use_id,
7769 adj.org_id,
7770 sch.customer_trx_id,
7771 sch.payment_schedule_id,
7772 adj.adjustment_id,
7773 null receivable_application_id,
7774 adj.apply_date appl_trx_date,
7775 sch.trx_date,
7776 sch.due_date,
7777 adj.gl_date,
7778 adj.amount_trx bucket_amount_trx,
7779 adj.amount_func bucket_amount_func,
7780 adj.amount_prim bucket_amount_prim,
7781 adj.amount_sec bucket_amount_sec,
7782 adj.amount_trx unaged_amount_trx,
7783 adj.amount_func unaged_amount_func,
7784 adj.amount_prim unaged_amount_prim,
7785 adj.amount_sec unaged_amount_sec,
7786 0 on_acct_credit_amount_trx,
7787 0 on_acct_credit_amount_func,
7788 0 on_acct_credit_amount_prim,
7789 0 on_acct_credit_amount_sec,
7790 sch.class,
7791 'N' billing_activity_flag,
7792 case when sch.class not in ('CB', 'BR')
7793 and (adj.adj_class not in ('CB', 'BR') or adj.adj_class is not null)
7794 and schdso.dso_value = 'Y'
7795 and (adjdso.dso_value is null or adjdso.dso_value = 'Y')
7796 then 'Y'
7797 else 'N' end billed_amount_flag,
7798 null on_account_credit_flag,
7799 decode(adj.adj_class,'DEP','Y','N') unapplied_deposit_flag,
7800 'Adjustment' action,
7801 sch.actual_date_closed
7802 from fii_ar_adjustments_f adj,
7803 fii_ar_pmt_schedules_f sch,
7804 fii_ar_dso_setup schdso,
7805 fii_ar_dso_setup adjdso,
7806 FII_AR_PAYSCH_MERGE_GT gt
7807 where adj.payment_schedule_id = sch.payment_schedule_id
7808 and sch.class <> 'PMT'
7809 and schdso.dso_group='TC'
7810 and schdso.dso_type = sch.class
7811 and nvl(adjdso.dso_group,'TC')='TC'
7812 and adj.adj_class = adjdso.dso_type (+)
7813 and adj.customer_trx_id = gt.customer_trx_id) v,
7814 (SELECT 1 marker FROM DUAL WHERE g_current_bucket_3_low is not null UNION ALL
7815 SELECT 2 marker FROM DUAL WHERE g_current_bucket_2_low is not null UNION ALL
7816 SELECT 3 marker FROM DUAL UNION ALL
7817 SELECT 4 marker FROM DUAL UNION ALL
7818 SELECT 5 marker FROM DUAL WHERE g_past_due_bucket_2_low is not null UNION ALL
7819 SELECT 6 marker FROM DUAL WHERE g_past_due_bucket_3_low is not null UNION ALL
7820 SELECT 7 marker FROM DUAL WHERE g_past_due_bucket_4_low is not null UNION ALL
7821 SELECT 8 marker FROM DUAL WHERE g_past_due_bucket_5_low is not null UNION ALL
7822 SELECT 9 marker FROM DUAL WHERE g_past_due_bucket_6_low is not null UNION ALL
7823 SELECT 10 marker FROM DUAL WHERE g_past_due_bucket_7_low is not null) m)
7824 WHERE event_date is not null)
7825 GROUP BY time_id,
7826 time_id_date,
7827 bill_to_customer_id,
7828 bill_to_site_use_id,
7829 org_id,
7830 customer_trx_id,
7831 payment_schedule_id,
7832 adjustment_id,
7833 receivable_application_id,
7834 appl_trx_date,
7835 trx_date,
7836 due_date,
7837 event_date,
7838 current_bucket_1_amount_trx,
7839 current_bucket_1_amount_func,
7840 current_bucket_1_amount_prim,
7841 current_bucket_1_amount_sec,
7842 current_bucket_2_amount_trx,
7843 current_bucket_2_amount_func,
7844 current_bucket_2_amount_prim,
7845 current_bucket_2_amount_sec,
7846 current_bucket_3_amount_trx,
7847 current_bucket_3_amount_func,
7848 current_bucket_3_amount_prim,
7849 current_bucket_3_amount_sec,
7850 past_due_bucket_1_amount_trx,
7851 past_due_bucket_1_amount_func,
7852 past_due_bucket_1_amount_prim,
7853 past_due_bucket_1_amount_sec,
7854 past_due_bucket_2_amount_trx,
7855 past_due_bucket_2_amount_func,
7856 past_due_bucket_2_amount_prim,
7857 past_due_bucket_2_amount_sec,
7858 past_due_bucket_3_amount_trx,
7859 past_due_bucket_3_amount_func,
7860 past_due_bucket_3_amount_prim,
7861 past_due_bucket_3_amount_sec,
7862 past_due_bucket_4_amount_trx,
7863 past_due_bucket_4_amount_func,
7864 past_due_bucket_4_amount_prim,
7865 past_due_bucket_4_amount_sec,
7866 past_due_bucket_5_amount_trx,
7867 past_due_bucket_5_amount_func,
7868 past_due_bucket_5_amount_prim,
7869 past_due_bucket_5_amount_sec,
7870 past_due_bucket_6_amount_trx,
7871 past_due_bucket_6_amount_func,
7872 past_due_bucket_6_amount_prim,
7873 past_due_bucket_6_amount_sec,
7874 past_due_bucket_7_amount_trx,
7875 past_due_bucket_7_amount_func,
7876 past_due_bucket_7_amount_prim,
7877 past_due_bucket_7_amount_sec,
7878 next_aging_date,
7879 unaged_amount_trx,
7880 unaged_amount_func,
7881 unaged_amount_prim,
7882 unaged_amount_sec,
7883 on_acct_credit_amount_trx,
7884 on_acct_credit_amount_func,
7885 on_acct_credit_amount_prim,
7886 on_acct_credit_amount_sec,
7887 class,
7888 billing_activity_flag,
7889 billed_amount_flag,
7890 on_account_credit_flag,
7891 unapplied_deposit_flag,
7892 action,
7893 actual_date_closed,
7894 aging_flag
7895 )
7896 ) inc_ag
7897 WHERE NOT EXISTS
7898 (SELECT 1
7899 FROM fii_ar_aging_receivables ag
7900 WHERE ag.time_id = inc_ag.time_id
7901 AND ag.customer_trx_id = inc_ag.customer_trx_id
7902 AND ag.payment_schedule_id = inc_ag.payment_schedule_id
7903 AND nvl(ag.adjustment_id,-1) = nvl(inc_ag.adjustment_id,-1)
7904 AND nvl(ag.receivable_application_id,-1) = nvl(inc_ag.receivable_application_id,-1))
7905 GROUP BY time_id,
7906 time_id_date,
7907 event_date,
7908 bill_to_customer_id,
7909 bill_to_site_use_id,
7910 org_id,
7911 customer_trx_id,
7912 payment_schedule_id,
7913 adjustment_id,
7914 receivable_application_id,
7915 appl_trx_date,
7916 trx_date,
7917 due_date,
7918 next_aging_date,
7919 unaged_amount_trx,
7920 unaged_amount_func,
7921 unaged_amount_prim,
7922 unaged_amount_sec,
7923 on_acct_credit_amount_trx,
7924 on_acct_credit_amount_func,
7925 on_acct_credit_amount_prim,
7926 on_acct_credit_amount_sec,
7927 class,
7928 billing_activity_flag,
7929 billed_amount_flag,
7930 on_account_credit_flag,
7931 unapplied_deposit_flag,
7932 action,
7933 aging_flag;
7934
7935 if g_debug_flag = 'Y' then
7936 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into fii_ar_aging_receivables in incremental mode');
7937 FII_UTIL.stop_timer;
7938 FII_UTIL.print_timer('Duration');
7939 FII_UTIL.put_line('');
7940 end if;
7941
7942 g_state := 'Analyzing fii_ar_aging_receivables table';
7943 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'fii_ar_aging_receivables');
7944
7945 EXCEPTION
7946 WHEN OTHERS THEN
7947 g_errbuf:=sqlerrm;
7948 g_retcode:= -1;
7949 g_exception_msg := g_retcode || ':' || g_errbuf;
7950 FII_UTIL.put_line('Error occured while ' || g_state);
7951 FII_UTIL.put_line(g_exception_msg);
7952 RAISE;
7953
7954 END Inc_RECEIVABLES_AGING;
7955
7956
7957 ------------------------------------------------------------------
7958 -- Procedure Inc_RECEIPTS_AGING
7959 -- Purpose
7960 -- This procedure inserts records in fii_ar_aging_receipts
7961 ------------------------------------------------------------------
7962 PROCEDURE Inc_RECEIPTS_AGING IS
7963
7964 type time_id_type IS TABLE OF fii_ar_aging_receipts.time_id%type;
7965 type event_date_type IS TABLE OF fii_ar_aging_receipts.event_date%type;
7966 type bill_to_customer_id_type IS TABLE OF fii_ar_aging_receipts.bill_to_customer_id%type;
7967 type bill_to_site_use_id_type IS TABLE OF fii_ar_aging_receipts.bill_to_site_use_id%type;
7968 type org_id_type IS TABLE OF fii_ar_aging_receipts.org_id%type;
7969 type cash_receipt_id_type IS TABLE OF fii_ar_aging_receipts.cash_receipt_id%type;
7970 type bucket_1_amount_func_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_1_amount_func%type;
7971 type bucket_1_amount_prim_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_1_amount_prim%type;
7972 type bucket_1_amount_sec_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_1_amount_sec%type;
7973 type bucket_1_count_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_1_count%type;
7974 type bucket_2_amount_func_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_2_amount_func%type;
7975 type bucket_2_amount_prim_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_2_amount_prim%type;
7976 type bucket_2_amount_sec_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_2_amount_sec%type;
7977 type bucket_2_count_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_2_count%type;
7978 type bucket_3_amount_func_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_3_amount_func%type;
7979 type bucket_3_amount_prim_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_3_amount_prim%type;
7980 type bucket_3_amount_sec_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_3_amount_sec%type;
7981 type bucket_3_count_type IS TABLE OF fii_ar_aging_receipts.aging_bucket_3_count%type;
7982 type total_unapplied_count_type IS TABLE OF fii_ar_aging_receipts.total_unapplied_count%type;
7983 type next_aging_date_type IS TABLE OF fii_ar_aging_receipts.next_aging_date%type;
7984 time_id_MS time_id_type;
7985 event_date_MS event_date_type;
7986 bill_to_customer_id_MS bill_to_customer_id_type;
7987 bill_to_site_use_id_MS bill_to_site_use_id_type;
7988 org_id_MS org_id_type;
7989 cash_receipt_id_MS cash_receipt_id_type;
7990 bucket_1_amount_func_MS bucket_1_amount_func_type;
7991 bucket_1_amount_prim_MS bucket_1_amount_prim_type;
7992 bucket_1_amount_sec_MS bucket_1_amount_sec_type;
7993 bucket_1_count_MS bucket_1_count_type;
7994 bucket_2_amount_func_MS bucket_2_amount_func_type;
7995 bucket_2_amount_prim_MS bucket_2_amount_prim_type;
7996 bucket_2_amount_sec_MS bucket_2_amount_sec_type;
7997 bucket_2_count_MS bucket_2_count_type;
7998 bucket_3_amount_func_MS bucket_3_amount_func_type;
7999 bucket_3_amount_prim_MS bucket_3_amount_prim_type;
8000 bucket_3_amount_sec_MS bucket_3_amount_sec_type;
8001 bucket_3_count_MS bucket_3_count_type;
8002 total_unapplied_count_MS total_unapplied_count_type;
8003 next_aging_date_MS next_aging_date_type;
8004
8005 BEGIN
8006
8007 g_state := 'Populating memory structures for fii_ar_aging_receipts';
8008 if g_debug_flag = 'Y' then
8009 FII_UTIL.put_line(g_state);
8010 FII_UTIL.start_timer;
8011 FII_UTIL.put_line('');
8012 end if;
8013
8014 --INSERT INTO fii_ar_aging_receipts_t
8015 SELECT time_id,
8016 event_date,
8017 next_aging_date,
8018 bill_to_customer_id,
8019 bill_to_site_use_id,
8020 org_id,
8021 cash_receipt_id,
8022 sum(aging_bucket_1_amount_func),
8023 sum(aging_bucket_1_amount_prim),
8024 sum(aging_bucket_1_amount_sec),
8025 sum(aging_bucket_1_count),
8026 sum(aging_bucket_2_amount_func),
8027 sum(aging_bucket_2_amount_prim),
8028 sum(aging_bucket_2_amount_sec),
8029 sum(aging_bucket_2_count),
8030 sum(aging_bucket_3_amount_func),
8031 sum(aging_bucket_3_amount_prim),
8032 sum(aging_bucket_3_amount_sec),
8033 sum(aging_bucket_3_count),
8034 sum(total_unapplied_count)
8035 --sysdate, --CREATION_DATE,
8036 --g_fii_user_id, --CREATED_BY,
8037 --sysdate, --LAST_UPDATE_DATE,
8038 --g_fii_user_id, --LAST_UPDATED_BY,
8039 --g_fii_login_id --LAST_UPDATE_LOGIN
8040 BULK COLLECT INTO --RctAgingMS
8041 time_id_MS,
8042 event_date_MS,
8043 next_aging_date_MS,
8044 bill_to_customer_id_MS,
8045 bill_to_site_use_id_MS,
8046 org_id_MS,
8047 cash_receipt_id_MS,
8048 bucket_1_amount_func_MS,
8049 bucket_1_amount_prim_MS,
8050 bucket_1_amount_sec_MS,
8051 bucket_1_count_MS,
8052 bucket_2_amount_func_MS,
8053 bucket_2_amount_prim_MS,
8054 bucket_2_amount_sec_MS,
8055 bucket_2_count_MS,
8056 bucket_3_amount_func_MS,
8057 bucket_3_amount_prim_MS,
8058 bucket_3_amount_sec_MS,
8059 bucket_3_count_MS,
8060 total_unapplied_count_MS
8061 FROM
8062 (SELECT time_id,
8063 next_aging_date,
8064 bill_to_customer_id,
8065 bill_to_site_use_id,
8066 org_id,
8067 cash_receipt_id,
8068 event_date,
8069 aging_bucket_1_amount_func,
8070 aging_bucket_1_amount_prim,
8071 aging_bucket_1_amount_sec,
8072 (case when aging_bucket_1_amount_func = aging_bucket_1_amt_func_cum
8073 AND aging_bucket_1_amount_func <>0
8074 then 1
8075 when aging_bucket_1_amt_func_cum = 0
8076 AND aging_bucket_1_amount_func <>0
8077 then -1
8078 else 0 end) aging_bucket_1_count,
8079 aging_bucket_2_amount_func,
8080 aging_bucket_2_amount_prim,
8081 aging_bucket_2_amount_sec,
8082 (case when aging_bucket_2_amount_func = aging_bucket_2_amt_func_cum
8083 AND aging_bucket_2_amount_func <>0
8084 then 1
8085 when aging_bucket_2_amt_func_cum = 0
8086 AND aging_bucket_2_amount_func <>0
8087 then -1
8088 else 0 end) aging_bucket_2_count,
8089 aging_bucket_3_amount_func,
8090 aging_bucket_3_amount_prim,
8091 aging_bucket_3_amount_sec,
8092 (case when aging_bucket_3_amount_func = aging_bucket_3_amt_func_cum
8093 AND aging_bucket_3_amount_func <>0
8094 then 1
8095 when aging_bucket_3_amt_func_cum = 0
8096 AND aging_bucket_3_amount_func <>0
8097 then -1
8098 else 0 end) aging_bucket_3_count,
8099 (case when total_unapplied_amount_func = total_unapplied_amt_func_cum
8100 AND total_unapplied_amount_func <>0
8101 then 1
8102 when total_unapplied_amt_func_cum = 0
8103 AND total_unapplied_amount_func <>0
8104 then -1
8105 else 0 end) total_unapplied_count,
8106 aging_flag
8107 FROM
8108 (SELECT time_id,
8109 next_aging_date,
8110 bill_to_customer_id,
8111 bill_to_site_use_id,
8112 org_id,
8113 cash_receipt_id,
8114 event_date,
8115 aging_bucket_1_amount_func,
8116 aging_bucket_1_amount_prim,
8117 aging_bucket_1_amount_sec,
8118 SUM(aging_bucket_1_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) aging_bucket_1_amt_func_cum,
8119 aging_bucket_2_amount_func,
8120 aging_bucket_2_amount_prim,
8121 aging_bucket_2_amount_sec,
8122 SUM(aging_bucket_2_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) aging_bucket_2_amt_func_cum,
8123 aging_bucket_3_amount_func,
8124 aging_bucket_3_amount_prim,
8125 aging_bucket_3_amount_sec,
8126 SUM(aging_bucket_3_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) aging_bucket_3_amt_func_cum,
8127 (aging_bucket_1_amount_func
8128 + aging_bucket_2_amount_func
8129 + aging_bucket_3_amount_func) total_unapplied_amount_func,
8130 (SUM(aging_bucket_1_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
8131 + SUM(aging_bucket_2_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
8132 + SUM(aging_bucket_3_amount_func) OVER (partition by cash_receipt_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)) total_unapplied_amt_func_cum,
8133 aging_flag
8134 FROM
8135 (SELECT to_number(to_char(decode(g_collection_criteria,
8136 'GL', case when gl_date >= event_date
8137 then gl_date
8138 else decode(aging_flag,'N',gl_date,event_date) end,
8139 event_date), 'J')) time_id,
8140 next_aging_date,
8141 bill_to_customer_id,
8142 bill_to_site_use_id,
8143 org_id,
8144 cash_receipt_id,
8145 receivable_application_id,
8146 event_date,
8147 (case when marker=1
8148 then bucket_amount_func
8149 when marker=2 and aging_flag='Y'
8150 then -1*bucket_amount_func
8151 else 0 end) aging_bucket_1_amount_func,
8152 (case when marker=1
8153 then bucket_amount_prim
8154 when marker=2 and aging_flag='Y'
8155 then -1*bucket_amount_prim
8156 else 0 end) aging_bucket_1_amount_prim,
8157 (case when marker=1
8158 then bucket_amount_sec
8159 when marker=2 and aging_flag='Y'
8160 then -1*bucket_amount_sec
8161 else 0 end) aging_bucket_1_amount_sec,
8162 ----------------
8163 (case when marker=2
8164 then bucket_amount_func
8165 when marker=3 and aging_flag='Y'
8166 then -1*bucket_amount_func
8167 else 0 end) aging_bucket_2_amount_func,
8168 (case when marker=2
8169 then bucket_amount_prim
8170 when marker=3 and aging_flag='Y'
8171 then -1*bucket_amount_prim
8172 else 0 end) aging_bucket_2_amount_prim,
8173 (case when marker=2
8174 then bucket_amount_sec
8175 when marker=3 and aging_flag='Y'
8176 then -1*bucket_amount_sec
8177 else 0 end) aging_bucket_2_amount_sec,
8178 ----------------
8179 (case when marker=3
8180 then bucket_amount_func
8181 else 0 end) aging_bucket_3_amount_func,
8182 (case when marker=3
8183 then bucket_amount_prim
8184 else 0 end) aging_bucket_3_amount_prim,
8185 (case when marker=3
8186 then bucket_amount_sec
8187 else 0 end) aging_bucket_3_amount_sec,
8188 ---------------
8189 aging_flag
8190 FROM
8191 (SELECT m.marker,
8192 v.bill_to_customer_id,
8193 v.bill_to_site_use_id,
8194 v.org_id,
8195 v.cash_receipt_id,
8196 v.receivable_application_id,
8197 v.apply_date,
8198 v.gl_date,
8199 v.bucket_amount_func,
8200 v.bucket_amount_prim,
8201 v.bucket_amount_sec,
8202 decode(m.marker,
8203 1, case when (g_rct_bucket_1_high is not null AND trunc(v.apply_date) between trunc(v.receipt_date) and trunc(v.receipt_date)+g_rct_bucket_1_high)
8204 then v.apply_date
8205 when (g_rct_bucket_1_high is null AND trunc(v.apply_date) >= trunc(v.receipt_date))
8206 then v.apply_date
8207 else null end,
8208 2, case when trunc(v.apply_date) < trunc(v.receipt_date)+g_rct_bucket_2_low
8209 and trunc(receipt_date) + g_rct_bucket_2_low <= g_sysdate
8210 and trunc(receipt_date) + g_rct_bucket_2_low <= trunc(rct_actual_date_closed)
8211 then trunc(receipt_date) + g_rct_bucket_2_low
8212 when (g_rct_bucket_2_high is not null AND trunc(v.apply_date) between trunc(v.receipt_date)+g_rct_bucket_2_low and trunc(v.receipt_date)+g_rct_bucket_2_high)
8213 then trunc(v.apply_date)
8214 when (g_rct_bucket_2_high is null AND trunc(v.apply_date) >= trunc(v.receipt_date)+g_rct_bucket_2_low)
8215 then trunc(v.apply_date)
8216 else null end,
8217 3, case when trunc(v.apply_date) < trunc(v.receipt_date)+g_rct_bucket_3_low
8218 and trunc(receipt_date) + g_rct_bucket_3_low <= g_sysdate
8219 and trunc(receipt_date) + g_rct_bucket_3_low <= trunc(rct_actual_date_closed)
8220 then trunc(receipt_date) + g_rct_bucket_3_low
8221 when trunc(v.apply_date) >= trunc(v.receipt_date)+g_rct_bucket_3_low
8222 then trunc(v.apply_date)
8223 else null end) event_date,
8224 decode(m.marker,
8225 1, case when trunc(rct_actual_date_closed) >= trunc(v.receipt_date) + g_rct_bucket_2_low
8226 then trunc(v.receipt_date) + g_rct_bucket_2_low
8227 else null end,
8228 2, case when trunc(rct_actual_date_closed) >= trunc(receipt_date) + g_rct_bucket_3_low
8229 then trunc(receipt_date) + g_rct_bucket_3_low
8230 else null end,
8231 3, null) next_aging_date,
8232 decode(m.marker,
8233 1, 'N',
8234 2, case when trunc(v.apply_date) < trunc(v.receipt_date)+g_rct_bucket_2_low
8235 and trunc(receipt_date) + g_rct_bucket_2_low <= g_sysdate
8236 then 'Y'
8237 else'N' end,
8238 3, case when trunc(v.apply_date) < trunc(v.receipt_date)+g_rct_bucket_3_low
8239 and trunc(receipt_date) + g_rct_bucket_3_low <= g_sysdate
8240 then 'Y'
8241 else 'N' end) aging_flag
8242 FROM (--Unapplied Receipts
8243 select gt.apply_date,
8244 gt.receipt_date,
8245 gt.gl_date,
8246 gt.rct_actual_date_closed,
8247 gt.bill_to_customer_id,
8248 gt.bill_to_site_use_id,
8249 gt.org_id,
8250 gt.cash_receipt_id,
8251 gt.receivable_application_id,
8252 gt.amount_applied_rct_func bucket_amount_func,
8253 gt.amount_applied_rct_prim bucket_amount_prim,
8254 gt.amount_applied_rct_sec bucket_amount_sec
8255 from FII_AR_RECAPP_MERGE_GT gt
8256 where gt.application_status in ('UNAPP','UNID')
8257 and gt.header_status not in ('REV', 'NSF', 'STOP')
8258 and nvl(gt.applied_payment_schedule_id,1) > 0 --exclude all special applications
8259 and gt.application_type = 'CASH'
8260 and gt.amount_applied_rct_func <> 0) v,
8261 (SELECT 1 marker FROM DUAL UNION ALL
8262 SELECT 2 marker FROM DUAL WHERE g_rct_bucket_2_low is not null UNION ALL
8263 SELECT 3 marker FROM DUAL WHERE g_rct_bucket_3_low is not null) m)
8264 WHERE event_date is not null)
8265 GROUP BY time_id,
8266 bill_to_customer_id,
8267 bill_to_site_use_id,
8268 org_id,
8269 cash_receipt_id,
8270 receivable_application_id,
8271 event_date,
8272 aging_bucket_1_amount_func,
8273 aging_bucket_1_amount_prim,
8274 aging_bucket_1_amount_sec,
8275 aging_bucket_2_amount_func,
8276 aging_bucket_2_amount_prim,
8277 aging_bucket_2_amount_sec,
8278 aging_bucket_3_amount_func,
8279 aging_bucket_3_amount_prim,
8280 aging_bucket_3_amount_sec,
8281 next_aging_date,
8282 aging_flag
8283
8284 order by receivable_application_id, event_date
8285 )
8286 )
8287 GROUP BY time_id,
8288 event_date,
8289 bill_to_customer_id,
8290 bill_to_site_use_id,
8291 org_id,
8292 cash_receipt_id,
8293 next_aging_date
8294 HAVING sum(aging_bucket_1_amount_func) <> 0
8295 or
8296 sum(aging_bucket_2_amount_func) <> 0
8297 or
8298 sum(aging_bucket_3_amount_func) <>0;
8299
8300 if g_debug_flag = 'Y' then
8301 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into memory structures related to fii_ar_aging_receipts.');
8302 FII_UTIL.stop_timer;
8303 FII_UTIL.print_timer('Duration');
8304 FII_UTIL.put_line('');
8305 end if;
8306
8307 g_state := 'Updating fii_ar_aging_receipts';
8308 if g_debug_flag = 'Y' then
8309 FII_UTIL.put_line(g_state);
8310 FII_UTIL.start_timer;
8311 FII_UTIL.put_line('');
8312 end if;
8313
8314 IF time_id_MS.First is not null Then
8315
8316 FORALL i in time_id_MS.First..time_id_MS.Last
8317 UPDATE fii_ar_aging_receipts ag
8318 SET ag.aging_bucket_1_amount_func = bucket_1_amount_func_MS(i),
8319 ag.aging_bucket_1_amount_prim = bucket_1_amount_prim_MS(i),
8320 ag.aging_bucket_1_amount_sec = bucket_1_amount_sec_MS(i),
8321 ag.aging_bucket_1_count = bucket_1_count_MS(i),
8322 ag.aging_bucket_2_amount_func = bucket_2_amount_func_MS(i),
8323 ag.aging_bucket_2_amount_prim = bucket_2_amount_prim_MS(i),
8324 ag.aging_bucket_2_amount_sec = bucket_2_amount_sec_MS(i),
8325 ag.aging_bucket_2_count = bucket_2_count_MS(i),
8326 ag.aging_bucket_3_amount_func = bucket_3_amount_func_MS(i),
8327 ag.aging_bucket_3_amount_prim = bucket_3_amount_prim_MS(i),
8328 ag.aging_bucket_3_amount_sec = bucket_3_amount_sec_MS(i),
8329 ag.aging_bucket_3_count = bucket_3_count_MS(i),
8330 ag.next_aging_date = next_aging_date_MS(i),
8331 ag.last_update_date = sysdate,
8332 ag.last_update_login = g_fii_login_id
8333 WHERE ag.time_id = time_id_MS(i)
8334 AND ag.cash_receipt_id = cash_receipt_id_MS(i)
8335 AND (ag.aging_bucket_1_amount_func <> bucket_1_amount_func_MS(i)
8336 OR ag.aging_bucket_2_amount_func <> bucket_2_amount_func_MS(i)
8337 OR ag.aging_bucket_3_amount_func <> bucket_3_amount_func_MS(i));
8338
8339 End If;
8340
8341 if g_debug_flag = 'Y' then
8342 FII_UTIL.put_line('Updated ' ||SQL%ROWCOUNT|| ' records in fii_ar_aging_receipts');
8343 FII_UTIL.stop_timer;
8344 FII_UTIL.print_timer('Duration');
8345 FII_UTIL.put_line('');
8346 end if;
8347
8348 g_state := 'Inserting into fii_ar_aging_receipts';
8349 if g_debug_flag = 'Y' then
8350 FII_UTIL.put_line(g_state);
8351 FII_UTIL.start_timer;
8352 FII_UTIL.put_line('');
8353 end if;
8354
8355 IF time_id_MS.First is not null Then
8356
8357 FORALL i in time_id_MS.First..time_id_MS.Last
8358 INSERT INTO fii_ar_aging_receipts ag
8359 SELECT time_id_MS(i), event_date_MS(i), next_aging_date_MS(i), bill_to_customer_id_MS(i),
8360 bill_to_site_use_id_MS(i), org_id_MS(i), cash_receipt_id_MS(i),
8361 bucket_1_amount_func_MS(i), bucket_1_amount_prim_MS(i), bucket_1_amount_sec_MS(i), bucket_1_count_MS(i),
8362 bucket_2_amount_func_MS(i), bucket_2_amount_prim_MS(i), bucket_2_amount_sec_MS(i), bucket_2_count_MS(i),
8363 bucket_3_amount_func_MS(i), bucket_3_amount_prim_MS(i), bucket_3_amount_sec_MS(i), bucket_3_count_MS(i),
8364 total_unapplied_count_MS(i), sysdate, g_fii_user_id, sysdate, g_fii_user_id, g_fii_login_id
8365 FROM DUAL
8366 WHERE NOT EXISTS
8367 (SELECT 1
8368 FROM fii_ar_aging_receipts ag
8369 WHERE ag.time_id = time_id_MS(i)
8370 AND ag.cash_receipt_id = cash_receipt_id_MS(i));
8371
8372 End If;
8373
8374 if g_debug_flag = 'Y' then
8375 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into fii_ar_aging_receipts');
8376 FII_UTIL.stop_timer;
8377 FII_UTIL.print_timer('Duration');
8378 FII_UTIL.put_line('');
8379 end if;
8380
8381 g_state := 'Analyzing fii_ar_aging_receipts table';
8382 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'fii_ar_aging_receipts');
8383
8384 EXCEPTION
8385 WHEN OTHERS THEN
8386 g_errbuf:=sqlerrm;
8387 g_retcode:= -1;
8388 g_exception_msg := g_retcode || ':' || g_errbuf;
8389 FII_UTIL.put_line('Error occured while ' || g_state);
8390 FII_UTIL.put_line(g_exception_msg);
8391 RAISE;
8392
8393 END Inc_RECEIPTS_AGING;
8394
8395 ------------------------------------------------------------------
8396 -- Procedure Inc_DISPUTES_AGING
8397 -- Purpose
8398 -- This procedure inserts records in fii_ar_aging_receipts
8399 ------------------------------------------------------------------
8400 PROCEDURE Inc_DISPUTES_AGING IS
8401
8402 BEGIN
8403
8404 g_state := 'Inserting into fii_ar_aging_disputes';
8405 if g_debug_flag = 'Y' then
8406 FII_UTIL.put_line(g_state);
8407 FII_UTIL.start_timer;
8408 FII_UTIL.put_line('');
8409 end if;
8410
8411 INSERT INTO FII_AR_AGING_DISPUTES
8412 (time_id,
8413 event_date,
8414 next_aging_date,
8415 bill_to_customer_id,
8416 bill_to_site_use_id,
8417 org_id,
8418 customer_trx_id,
8419 payment_schedule_id,
8420 due_date,
8421 current_dispute_amount_func,
8422 current_dispute_amount_prim,
8423 current_dispute_amount_sec,
8424 current_dispute_count,
8425 past_due_dispute_amount_func,
8426 past_due_dispute_amount_prim,
8427 past_due_dispute_amount_sec,
8428 past_due_dispute_count,
8429 creation_date,
8430 created_by,
8431 last_update_date,
8432 last_updated_by,
8433 last_update_login)
8434 SELECT time_id,
8435 event_date,
8436 next_aging_date,
8437 bill_to_customer_id,
8438 bill_to_site_use_id,
8439 org_id,
8440 customer_trx_id,
8441 payment_schedule_id,
8442 due_date,
8443 sum(current_dispute_amount_func),
8444 sum(current_dispute_amount_prim),
8445 sum(current_dispute_amount_sec),
8446 sum(current_dispute_count),
8447 sum(past_due_dispute_amount_func),
8448 sum(past_due_dispute_amount_prim),
8449 sum(past_due_dispute_amount_sec),
8450 sum(past_due_dispute_count),
8451 sysdate CREATION_DATE,
8452 g_fii_user_id CREATED_BY,
8453 sysdate LAST_UPDATE_DATE,
8454 g_fii_user_id LAST_UPDATED_BY,
8455 g_fii_login_id LAST_UPDATE_LOGIN
8456 FROM (
8457 SELECT time_id,
8458 event_date,
8459 next_aging_date,
8460 bill_to_customer_id,
8461 bill_to_site_use_id,
8462 org_id,
8463 customer_trx_id,
8464 payment_schedule_id,
8465 due_date,
8466 current_dispute_amount_func,
8467 current_dispute_amount_prim,
8468 current_dispute_amount_sec,
8469 SUM(current_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) current_dispute_amount_funcc,
8470 (case when current_dispute_amount_func = SUM(current_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
8471 and current_dispute_amount_func <> 0
8472 then 1
8473 when SUM(current_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) = 0
8474 AND current_dispute_amount_func <> 0
8475 then -1
8476 else 0 end) current_dispute_count,
8477 past_due_dispute_amount_func,
8478 past_due_dispute_amount_prim,
8479 past_due_dispute_amount_sec,
8480 SUM(past_due_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) past_due_dispute_amount_funcc,
8481 (case when past_due_dispute_amount_func = SUM(past_due_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING)
8482 and past_due_dispute_amount_func <> 0
8483 then 1
8484 when SUM(past_due_dispute_amount_func) OVER (partition by customer_trx_id ORDER BY time_id ROWS UNBOUNDED PRECEDING) = 0
8485 and past_due_dispute_amount_func <> 0
8486 then -1
8487 else 0 end) past_due_dispute_count,
8488
8489 aging_flag
8490 FROM
8491 (SELECT to_number(to_char(event_date, 'J')) time_id,
8492 event_date,
8493 next_aging_date,
8494 bill_to_customer_id,
8495 bill_to_site_use_id,
8496 org_id,
8497 customer_trx_id,
8498 payment_schedule_id,
8499 due_date,
8500 (case when marker=1
8501 then bucket_amount_func
8502 when marker=2 and aging_flag='Y'
8503 then -1*bucket_amount_func
8504 else 0 end) current_dispute_amount_func,
8505 (case when marker=1
8506 then bucket_amount_prim
8507 when marker=2 and aging_flag='Y'
8508 then -1*bucket_amount_prim
8509 else 0 end) current_dispute_amount_prim,
8510 (case when marker=1
8511 then bucket_amount_sec
8512 when marker=2 and aging_flag='Y'
8513 then -1*bucket_amount_sec
8514 else 0 end) current_dispute_amount_sec,
8515 ----------------
8516 (case when marker=2
8517 then bucket_amount_func
8518 else 0 end) past_due_dispute_amount_func,
8519 (case when marker=2
8520 then bucket_amount_prim
8521 else 0 end) past_due_dispute_amount_prim,
8522 (case when marker=2
8523 then bucket_amount_sec
8524 else 0 end) past_due_dispute_amount_sec,
8525 ---------------
8526 aging_flag
8527 FROM
8528 (SELECT m.marker,
8529 v.time_id,
8530 v.bill_to_customer_id,
8531 v.bill_to_site_use_id,
8532 v.org_id,
8533 v.customer_trx_id,
8534 v.payment_schedule_id,
8535 v.due_date,
8536 v.bucket_amount_func,
8537 v.bucket_amount_prim,
8538 v.bucket_amount_sec,
8539 decode(m.marker,
8540 1, case when trunc(v.start_date)<=trunc(v.due_date)
8541 then v.start_date
8542 else null end,
8543 2, case when trunc(v.start_date) <= trunc(v.due_date)
8544 and actual_date_closed >= trunc(v.due_date)+1
8545 and trunc(v.due_date)+1 <= g_sysdate
8546 then trunc(v.due_date)+1
8547 when trunc(v.start_date) >= trunc(v.due_date)+1
8548 then trunc(v.start_date)
8549 else null end) event_date,
8550 decode(m.marker,
8551 1, case when trunc(v.due_date)+1 <= actual_date_closed
8552 then trunc(v.due_date)+1 end,
8553 2, null) next_aging_date,
8554 decode(m.marker,
8555 1, 'N',
8556 2, case when trunc(v.start_date) <= trunc(v.due_date)
8557 and v.actual_date_closed >= trunc(v.due_date)+1
8558 and trunc(v.due_date)+1 <= g_sysdate
8559 then 'Y'
8560 else 'N' end) aging_flag
8561 FROM (--Disputes
8562 select dis.time_id,
8563 dis.start_date,
8564 dis.bill_to_customer_id,
8565 dis.bill_to_site_use_id,
8566 dis.org_id,
8567 --dis.dispute_history_id,
8568 dis.customer_trx_id,
8569 dis.payment_schedule_id,
8570 dis.due_date,
8571 dis.actual_date_closed,
8572 sum(dis.dispute_amount_func) bucket_amount_func,
8573 sum(dis.dispute_amount_prim) bucket_amount_prim,
8574 sum(dis.dispute_amount_sec) bucket_amount_sec
8575 from fii_ar_dispute_history_f dis,
8576 (select distinct customer_trx_id
8577 from fii_ar_disp_update_gt dis_gt,
8578 fii_ar_dispute_history_f f
8579 where dis_gt.payment_schedule_id = f.payment_schedule_id) gt
8580 where dis.customer_trx_id = gt.customer_trx_id
8581 group by dis.time_id,
8582 dis.start_date,
8583 dis.bill_to_customer_id,
8584 dis.bill_to_site_use_id,
8585 dis.org_id,
8586 dis.customer_trx_id,
8587 dis.payment_schedule_id,
8588 dis.due_date,
8589 dis.actual_date_closed
8590
8591 union all
8592
8593 --Disputes that are ended
8594 select to_number(to_char(end_date, 'J')) time_id,
8595 least(end_date, actual_date_closed) start_date,
8596 bill_to_customer_id,
8597 bill_to_site_use_id,
8598 org_id,
8599 customer_trx_id,
8600 payment_schedule_id,
8601 due_date,
8602 actual_date_closed,
8603 -1*bucket_amount_func,
8604 -1*bucket_amount_prim,
8605 -1*bucket_amount_sec
8606 from
8607 (select null time_id,
8608 max(nvl(dis.end_date, to_date('12/31/4712','MM/DD/YYYY'))) end_date,
8609 dis.bill_to_customer_id,
8610 dis.bill_to_site_use_id,
8611 dis.org_id,
8612 dis.customer_trx_id,
8613 dis.payment_schedule_id,
8614 dis.due_date,
8615 dis.actual_date_closed,
8616 sum(dis.dispute_amount_func) bucket_amount_func,
8617 sum(dis.dispute_amount_prim) bucket_amount_prim,
8618 sum(dis.dispute_amount_sec) bucket_amount_sec
8619 from fii_ar_dispute_history_f dis,
8620 (select distinct customer_trx_id
8621 from fii_ar_disp_update_gt dis_gt,
8622 fii_ar_dispute_history_f f
8623 where dis_gt.payment_schedule_id = f.payment_schedule_id) gt
8624 where dis.customer_trx_id = gt.customer_trx_id
8625 group by dis.bill_to_customer_id,
8626 dis.bill_to_site_use_id,
8627 dis.org_id,
8628 dis.customer_trx_id,
8629 dis.payment_schedule_id,
8630 dis.due_date,
8631 dis.actual_date_closed)
8632 where least(end_date, actual_date_closed) <> to_date('12/31/4712','MM/DD/YYYY')) v,
8633 (SELECT 1 marker FROM DUAL UNION ALL
8634 SELECT 2 marker FROM DUAL) m)
8635 WHERE event_date is not null)
8636 /* GROUP BY time_id,
8637 event_date,
8638 next_aging_date,
8639 bill_to_customer_id,
8640 bill_to_site_use_id,
8641 org_id,
8642 --dispute_history_id,
8643 customer_trx_id,
8644 payment_schedule_id,
8645 due_date,
8646 current_dispute_amount_func,
8647 current_dispute_amount_prim,
8648 current_dispute_amount_sec,
8649 past_due_dispute_amount_func,
8650 past_due_dispute_amount_prim,
8651 past_due_dispute_amount_sec,
8652 aging_flag
8653 */
8654 order by payment_schedule_id, event_date
8655
8656 ) inc_ag
8657 WHERE NOT EXISTS
8658 (SELECT 1
8659 FROM fii_ar_aging_disputes ag
8660 WHERE ag.time_id = inc_ag.time_id
8661 AND ag.payment_schedule_id = inc_ag.payment_schedule_id)
8662 GROUP BY time_id,
8663 event_date,
8664 next_aging_date,
8665 bill_to_customer_id,
8666 bill_to_site_use_id,
8667 org_id,
8668 --dispute_history_id,
8669 customer_trx_id,
8670 payment_schedule_id,
8671 due_date
8672 HAVING sum(current_dispute_amount_func) <> 0
8673 or
8674 sum(past_due_dispute_amount_func) <> 0;
8675
8676
8677
8678 if g_debug_flag = 'Y' then
8679 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' records into fii_ar_aging_disputes.');
8680 FII_UTIL.stop_timer;
8681 FII_UTIL.print_timer('Duration');
8682 FII_UTIL.put_line('');
8683 end if;
8684
8685 g_state := 'Analyzing fii_ar_aging_disputes table';
8686 FND_STATS.GATHER_TABLE_STATS(g_fii_schema,'fii_ar_aging_disputes');
8687
8688 EXCEPTION
8689 WHEN OTHERS THEN
8690 g_errbuf:=sqlerrm;
8691 g_retcode:= -1;
8692 g_exception_msg := g_retcode || ':' || g_errbuf;
8693 FII_UTIL.put_line('Error occured while ' || g_state);
8694 FII_UTIL.put_line(g_exception_msg);
8695 RAISE;
8696
8697 END Inc_DISPUTES_AGING;
8698
8699 ------------------------------------------------------------------
8700 -- Procedure CLEAN_REC_AGING
8701 -- Purpose
8702 -- This procedure deletes records from fii_ar_aging_receivables
8703 -- that comply with either one of the following cases:
8704 -- 1- Records with customer_trx_id corresponding to an incompleted trx
8705 -- 2- Records that correspond to transactions that have passed from
8706 -- a state of complete to incomplete and then back to complete since the
8707 -- last run.
8708 -- 3- Records that correspond to transactions that have been updated
8709 -- after initial load (new appl or adj) and having event_date >
8710 -- min update date.
8711 ------------------------------------------------------------------
8712 PROCEDURE CLEAN_REC_AGING IS
8713
8714 type payment_schedule_id_type is table of NUMBER(15);
8715 type customer_trx_id_type is table of NUMBER(15);
8716 type min_date_type is table of DATE;
8717 sch_id_array payment_schedule_id_type;
8718 trx_id_array customer_trx_id_type;
8719 min_date_array min_date_type;
8720
8721 BEGIN
8722
8723 g_state := 'Started CLEAN_REC_AGING';
8724 if g_debug_flag = 'Y' then
8725 FII_UTIL.put_line(g_state);
8726 end if;
8727
8728 SELECT payment_schedule_id, customer_trx_id, min_date
8729 BULK COLLECT INTO sch_id_array, trx_id_array, min_date_array
8730 FROM (--Case 1 and Case 2
8731 select payment_schedule_id, null customer_trx_id, null min_date
8732 from fii_ar_paysch_delete_gt
8733
8734 union all
8735
8736 --Case 3
8737 select null payment_schedule_id, customer_trx_id, min(min_date) min_date
8738 from
8739 (select applied_customer_trx_id customer_trx_id, min(decode(g_collection_criteria, 'GL', gl_date, apply_date)) min_date
8740 from FII_AR_RECAPP_INSERT_GT
8741 where applied_payment_schedule_id > 0
8742 group by applied_customer_trx_id
8743
8744 union all
8745
8746 select customer_trx_id, min(decode(g_collection_criteria, 'GL', gl_date, apply_date)) min_date
8747 from FII_AR_ADJ_UPDATE_GT
8748 group by customer_trx_id)
8749 group by customer_trx_id
8750 );
8751
8752
8753 g_state := 'Deleting from fii_ar_aging_receivables';
8754 if g_debug_flag = 'Y' then
8755 FII_UTIL.put_line(g_state);
8756 end if;
8757
8758 IF trx_id_array.First is not null Then
8759
8760 FORALL i in trx_id_array.First..trx_id_array.Last
8761 DELETE FROM fii_ar_aging_receivables ag
8762 WHERE (sch_id_array(i) is not null
8763 and ag.payment_schedule_id = sch_id_array(i))
8764 OR (sch_id_array(i) is null
8765 and ag.customer_trx_id = trx_id_array(i)
8766 and ag.event_date >= min_date_array(i));
8767 End If;
8768
8769 if g_debug_flag = 'Y' then
8770 FII_UTIL.put_line('Deleted ' ||SQL%ROWCOUNT|| ' records from fii_ar_aging_receivables.');
8771 FII_UTIL.stop_timer;
8772 FII_UTIL.print_timer('Duration');
8773 FII_UTIL.put_line('');
8774 end if;
8775
8776 EXCEPTION
8777 WHEN OTHERS THEN
8778 g_errbuf:=sqlerrm;
8779 g_retcode:= -1;
8780 g_exception_msg := g_retcode || ':' || g_errbuf;
8781 FII_UTIL.put_line('Error occured while ' || g_state);
8782 FII_UTIL.put_line(g_exception_msg);
8783 RAISE;
8784
8785 --dbms_output.put_line('Error occured while ' || g_state);
8786 --dbms_output.put_line(g_exception_msg);
8787
8788 END;
8789
8790 ------------------------------------------------------------------
8791 -- Procedure CLEAN_RCT_AGING
8792 -- Purpose
8793 -- This procedure deletes records from fii_ar_aging_receipts
8794 -- that comply with either one of the following cases:
8795 -- 1- Deleted receipts
8796 -- 2- event_date > actual_date_closed of closed receipts
8797 -- 3- Bug 5862579: Receipts in aging table that are now reveresed.
8798 ------------------------------------------------------------------
8799 PROCEDURE CLEAN_RCT_AGING IS
8800
8801 type cash_receipt_id_type is table of NUMBER(15);
8802 type actual_date_closed_type is table of NUMBER;
8803 rct_id_array cash_receipt_id_type;
8804 date_closed_array actual_date_closed_type;
8805
8806 BEGIN
8807
8808 g_state := 'Started CLEAN_RCT_AGING';
8809 if g_debug_flag = 'Y' then
8810 FII_UTIL.put_line(g_state);
8811 end if;
8812
8813 SELECT cash_receipt_id, actual_date_closed
8814 BULK COLLECT INTO rct_id_array, date_closed_array
8815 FROM (--Case 1
8816 select cash_receipt_id, 1 actual_date_closed
8817 from FII_AR_RECAPP_DELETE_GT
8818
8819 union all
8820
8821 --Cases 2
8822 select distinct ag.cash_receipt_id, to_number(to_char(rct.rct_actual_date_closed, 'J')) actual_date_closed
8823 from fii_ar_receipts_f rct,
8824 fii_ar_aging_receipts ag
8825 where rct.cash_receipt_id = ag.cash_receipt_id
8826 and rct.receivable_application_id <= G_MAX_RECEIVABLE_APPL_ID
8827 and to_number(to_char(rct.rct_actual_date_closed, 'J')) < ag.time_id
8828
8829 union all
8830
8831 --Case 3
8832 select ag.cash_receipt_id, 1 actual_date_closed
8833 from fii_ar_receipts_f rct,
8834 fii_ar_aging_receipts ag
8835 where rct.cash_receipt_id = ag.cash_receipt_id
8836 and rct.receivable_application_id <= G_MAX_RECEIVABLE_APPL_ID
8837 and rct.header_status in ('REV','NSF','STOP') );
8838
8839 g_state := 'Deleting from fii_ar_aging_receipts';
8840 if g_debug_flag = 'Y' then
8841 FII_UTIL.put_line(g_state);
8842 end if;
8843
8844 If rct_id_array.First is not null Then
8845
8846 FORALL i in rct_id_array.First..rct_id_array.Last
8847 DELETE FROM fii_ar_aging_receipts ag
8848 WHERE ag.cash_receipt_id = rct_id_array(i)
8849 AND ag.time_id > date_closed_array(i);
8850
8851 End If;
8852
8853 if g_debug_flag = 'Y' then
8854 FII_UTIL.put_line('Deleted ' ||SQL%ROWCOUNT|| ' records from fii_ar_aging_receipts.');
8855 FII_UTIL.stop_timer;
8856 FII_UTIL.print_timer('Duration');
8857 FII_UTIL.put_line('');
8858 end if;
8859
8860 EXCEPTION
8861 WHEN OTHERS THEN
8862 g_errbuf:=sqlerrm;
8863 g_retcode:= -1;
8864 g_exception_msg := g_retcode || ':' || g_errbuf;
8865 FII_UTIL.put_line('Error occured while ' || g_state);
8866 FII_UTIL.put_line(g_exception_msg);
8867 RAISE;
8868
8869 END;
8870
8871 ------------------------------------------------------------------
8872 -- Procedure CLEAN_DISP_AGING
8873 -- Purpose
8874 -- This procedure deletes records from fii_ar_aging_disputes
8875 -- that comply with either one of the following cases:
8876 -- 1- incompleted trx(s)
8877 -- 2- C-I-C trx(s)
8878 -- 3- event_date > actual_date_closed in GT table of updated trx(s)
8879 -- 4- event_date > end_date of updated disputes
8880 ------------------------------------------------------------------
8881 PROCEDURE CLEAN_DISP_AGING IS
8882
8883 type payment_schedule_id_type is table of NUMBER(15);
8884 type customer_trx_id_type is table of NUMBER(15);
8885 type min_date_type is table of DATE;
8886 sch_id_array payment_schedule_id_type;
8887 trx_id_array customer_trx_id_type;
8888 min_date_array min_date_type;
8889
8890 BEGIN
8891
8892 g_state := 'Started CLEAN_DISP_AGING';
8893 if g_debug_flag = 'Y' then
8894 FII_UTIL.put_line(g_state);
8895 end if;
8896
8897 SELECT payment_schedule_id, customer_trx_id, min_date
8898 BULK COLLECT INTO sch_id_array, trx_id_array, min_date_array
8899 FROM (--Case 1 and 2
8900 select payment_schedule_id, null customer_trx_id, to_date(1, 'J') min_date
8901 from fii_ar_paysch_delete_gt
8902
8903 union all
8904
8905 --Case 3
8906 select null payment_schedule_id, gt.customer_trx_id, gt.actual_date_closed min_date
8907 from fii_ar_paysch_merge_gt gt,
8908 fii_ar_aging_disputes ag
8909 where ag.payment_schedule_id = gt.payment_schedule_id
8910 and ag.event_date >= gt.actual_date_closed
8911
8912 union all
8913
8914 --Case 4
8915 select null payment_schedule_id, ag.customer_trx_id, gt.end_date min_date
8916 from fii_ar_disp_update_gt gt,
8917 fii_ar_aging_disputes ag
8918 where ag.payment_schedule_id = gt.payment_schedule_id
8919 and ag.event_date >= gt.end_date
8920 );
8921
8922 g_state := 'Deleting from fii_ar_aging_disputes';
8923 if g_debug_flag = 'Y' then
8924 FII_UTIL.put_line(g_state);
8925 end if;
8926
8927 If min_date_array.First is not null Then
8928
8929 FORALL i in min_date_array.First..min_date_array.Last
8930 DELETE FROM fii_ar_aging_disputes ag
8931 WHERE (sch_id_array(i) is not null
8932 and ag.payment_schedule_id = sch_id_array(i))
8933 OR (trx_id_array(i) is not null
8934 and ag.customer_trx_id = trx_id_array(i)
8935 and ag.event_date >= min_date_array(i));
8936
8937 End If;
8938
8939 if g_debug_flag = 'Y' then
8940 FII_UTIL.put_line('Deleted ' ||SQL%ROWCOUNT|| ' records from fii_ar_aging_disputes.');
8941 FII_UTIL.stop_timer;
8942 FII_UTIL.print_timer('Duration');
8943 FII_UTIL.put_line('');
8944 end if;
8945
8946 EXCEPTION
8947 WHEN OTHERS THEN
8948 g_errbuf:=sqlerrm;
8949 g_retcode:= -1;
8950 g_exception_msg := g_retcode || ':' || g_errbuf;
8951 FII_UTIL.put_line('Error occured while ' || g_state);
8952 FII_UTIL.put_line(g_exception_msg);
8953 RAISE;
8954
8955 --dbms_output.put_line('Error occured while ' || g_state);
8956 --dbms_output.put_line(g_exception_msg);
8957
8958 END CLEAN_DISP_AGING;
8959
8960 ------------------------------------------------------------------
8961 -- Procedure POPULATE_INCREMENTAL_IDS
8962 -- Purpose
8963 -- This procedure detects new/updated receipts and adjustments.
8964 -- It also detects records in fii_ar_aging_receivables that have not been
8965 -- completely aged.
8966 -- Corresponding customer_trx_id(s) are populated in FII_AR_PAYSCH_MERGE_GT
8967 ------------------------------------------------------------------
8968 PROCEDURE POPULATE_INCREMENTAL_IDS IS
8969
8970 BEGIN
8971
8972 g_state := 'Populating FII_AR_PAYSCH_MERGE_GT from fii_ar_aging_receivables';
8973 if g_debug_flag = 'Y' then
8974 FII_UTIL.put_line(g_state);
8975 end if;
8976
8977 --FII_AR_PAYSCH_MERGE_GT already contains:
8978 --trx_ids of new payment schedules
8979 --trx_ids that have new applications
8980 --trx_ids that have new or updated adjustments
8981
8982 --Insert trx ids that are already in aging table but not yet aged completely
8983 INSERT INTO FII_AR_PAYSCH_MERGE_GT
8984 (customer_trx_id)
8985 (select distinct ag.customer_trx_id
8986 from fii_ar_aging_receivables ag
8987 where ag.next_aging_date > G_LAST_UPDATE_DATE --'15-APR-2005'
8988 and ag.next_aging_date <= g_sysdate --'20-MAY-2005'
8989 and not exists
8990 (select 1
8991 from fii_ar_paysch_merge_gt t
8992 where t.customer_trx_id = ag.customer_trx_id));
8993
8994 if g_debug_flag = 'Y' then
8995 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' additional records into FII_AR_PAYSCH_MERGE_GT.');
8996 FII_UTIL.stop_timer;
8997 FII_UTIL.print_timer('Duration');
8998 FII_UTIL.put_line('');
8999 end if;
9000
9001 EXCEPTION
9002 WHEN OTHERS THEN
9003 g_errbuf:=sqlerrm;
9004 g_retcode:= -1;
9005 g_exception_msg := g_retcode || ':' || g_errbuf;
9006 FII_UTIL.put_line('Error occured while ' || g_state);
9007 FII_UTIL.put_line(g_exception_msg);
9008 RAISE;
9009
9010 END;
9011
9012
9013 ------------------------------------------------------------------
9014 -- Procedure POPULATE_INCREMENTAL_RCT_IDS
9015 -- Purpose
9016 -- This procedure detects new unapplied receipts.
9017 -- It also detects records in fii_ar_aging_receipts that have not been
9018 -- completely aged.
9019 -- Corresponding cash_receipt_id(s) are populated in FII_AR_RECAPP_MERGE_GT
9020 ------------------------------------------------------------------
9021 PROCEDURE POPULATE_INCREMENTAL_RCT_IDS IS
9022
9023 BEGIN
9024
9025 g_state := 'Populating FII_AR_INC_RCT_AGING_T from fii_ar_receipts_f';
9026 if g_debug_flag = 'Y' then
9027 FII_UTIL.put_line(g_state);
9028 end if;
9029
9030 --trx_ids that have new applications
9031 --These are already in FII_AR_RECAPP_MERGE_GT
9032
9033 g_state := 'Populating FII_AR_RECAPP_MERGE_GT from fii_ar_aging_receipts';
9034 if g_debug_flag = 'Y' then
9035 FII_UTIL.put_line(g_state);
9036 end if;
9037
9038 --Insert rct ids that are already in aging table but not yet aged completely
9039 INSERT INTO FII_AR_RECAPP_MERGE_GT
9040 ( receivable_application_id,
9041 time_id,
9042 cash_receipt_id,
9043 application_status,
9044 header_status,
9045 amount_applied_rct,
9046 amount_applied_trx,
9047 amount_applied_rct_func,
9048 amount_applied_trx_func,
9049 amount_applied_rct_prim,
9050 amount_applied_trx_prim,
9051 amount_applied_rct_sec,
9052 amount_applied_trx_sec,
9053 earned_discount_amount_trx,
9054 earned_discount_amount_func,
9055 earned_discount_amount_prim,
9056 earned_discount_amount_sec,
9057 unearned_discount_amount_trx,
9058 unearned_discount_amount_func,
9059 unearned_discount_amount_prim,
9060 unearned_discount_amount_sec,
9061 apply_date,
9062 gl_date,
9063 filter_date,
9064 header_filter_date,
9065 application_type,
9066 applied_payment_schedule_id,
9067 applied_customer_trx_id,
9068 customer_trx_id,
9069 payment_schedule_id,
9070 receipt_number,
9071 receipt_type,
9072 receipt_date,
9073 rct_actual_date_closed,
9074 receipt_method_id,
9075 currency_code,
9076 user_id,
9077 ar_creation_date,
9078 bill_to_customer_id,
9079 bill_to_site_use_id,
9080 collector_bill_to_customer_id,
9081 collector_bill_to_site_use_id,
9082 org_id,
9083 trx_date,
9084 due_date,
9085 cm_previous_customer_trx_id,
9086 total_receipt_count,
9087 creation_date,
9088 created_by,
9089 last_update_date,
9090 last_updated_by,
9091 last_update_login
9092 )
9093 (SELECT receivable_application_id,
9094 time_id,
9095 rct.cash_receipt_id,
9096 application_status,
9097 header_status,
9098 amount_applied_rct,
9099 amount_applied_trx,
9100 amount_applied_rct_func,
9101 amount_applied_trx_func,
9102 amount_applied_rct_prim,
9103 amount_applied_trx_prim,
9104 amount_applied_rct_sec,
9105 amount_applied_trx_sec,
9106 earned_discount_amount_trx,
9107 earned_discount_amount_func,
9108 earned_discount_amount_prim,
9109 earned_discount_amount_sec,
9110 unearned_discount_amount_trx,
9111 unearned_discount_amount_func,
9112 unearned_discount_amount_prim,
9113 unearned_discount_amount_sec,
9114 apply_date,
9115 gl_date,
9116 filter_date,
9117 header_filter_date,
9118 application_type,
9119 applied_payment_schedule_id,
9120 applied_customer_trx_id,
9121 customer_trx_id,
9122 payment_schedule_id,
9123 receipt_number,
9124 receipt_type,
9125 receipt_date,
9126 rct_actual_date_closed,
9127 receipt_method_id,
9128 currency_code,
9129 user_id,
9130 ar_creation_date,
9131 bill_to_customer_id,
9132 bill_to_site_use_id,
9133 collector_bill_to_customer_id,
9134 collector_bill_to_site_use_id,
9135 org_id,
9136 trx_date,
9137 due_date,
9138 cm_previous_customer_trx_id,
9139 total_receipt_count,
9140 creation_date,
9141 created_by,
9142 last_update_date,
9143 last_updated_by,
9144 last_update_login
9145 from fii_ar_receipts_f rct,
9146 (select distinct ag.cash_receipt_id
9147 from fii_ar_aging_receipts ag
9148 where ag.next_aging_date > G_LAST_UPDATE_DATE --'15-APR-2005'
9149 and ag.next_aging_date <= g_sysdate --'20-MAY-2005'
9150 and not exists
9151 (select 1
9152 from FII_AR_RECAPP_MERGE_GT t
9153 where t.cash_receipt_id = ag.cash_receipt_id
9154 and t.application_status in ('UNAPP','UNID')
9155 and t.header_status not in ('REV', 'NSF', 'STOP')
9156 and nvl(t.applied_payment_schedule_id,1) > 0 --exclude all special applications
9157 and t.application_type = 'CASH'
9158 and t.amount_applied_rct_func <> 0)) ag
9159 where rct.cash_receipt_id = ag.cash_receipt_id
9160 and rct.application_status in ('UNAPP','UNID')
9161 and rct.header_status not in ('REV', 'NSF', 'STOP')
9162 and nvl(rct.applied_payment_schedule_id,1) > 0 --exclude all special applications
9163 and rct.application_type = 'CASH'
9164 and rct.amount_applied_rct_func <> 0);
9165
9166 if g_debug_flag = 'Y' then
9167 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' additional records into FII_AR_RECAPP_MERGE_GT.');
9168 FII_UTIL.stop_timer;
9169 FII_UTIL.print_timer('Duration');
9170 FII_UTIL.put_line('');
9171 end if;
9172
9173 EXCEPTION
9174 WHEN OTHERS THEN
9175 g_errbuf:=sqlerrm;
9176 g_retcode:= -1;
9177 g_exception_msg := g_retcode || ':' || g_errbuf;
9178 FII_UTIL.put_line('Error occured while ' || g_state);
9179 FII_UTIL.put_line(g_exception_msg);
9180 RAISE;
9181
9182 END;
9183
9184 ------------------------------------------------------------------
9185 -- Procedure POPULATE_INCREMENTAL_DISP_IDS
9186 -- Purpose
9187 -- Ages inc disputes:
9188 -- a- New and Updated disputes with last_update_date > MAX
9189 -- b- Non-completely aged disputes
9190 ------------------------------------------------------------------
9191 PROCEDURE POPULATE_INCREMENTAL_DISP_IDS IS
9192
9193 BEGIN
9194
9195 g_state := 'Populating FII_AR_DISP_UPDATE_GT from fii_ar_aging_disputes';
9196 if g_debug_flag = 'Y' then
9197 FII_UTIL.put_line(g_state);
9198 end if;
9199
9200 --FII_AR_DISP_UPDATE_GT already contains:
9201 --sch_ids of new and updated disputes
9202
9203 --Insert sch ids that are already in aging table but not yet aged completely
9204 INSERT INTO FII_AR_DISP_UPDATE_GT
9205 (payment_schedule_id)
9206 (select distinct ag.payment_schedule_id
9207 from fii_ar_aging_disputes ag
9208 where ag.next_aging_date > G_LAST_UPDATE_DATE --'15-APR-2005'
9209 and ag.next_aging_date <= g_sysdate --'20-MAY-2005'
9210 and not exists
9211 (select 1
9212 from FII_AR_DISP_UPDATE_GT t
9213 where t.payment_schedule_id = ag.payment_schedule_id));
9214
9215 if g_debug_flag = 'Y' then
9216 FII_UTIL.put_line('Inserted ' ||SQL%ROWCOUNT|| ' additional records into FII_AR_DISP_UPDATE_GT.');
9217 FII_UTIL.stop_timer;
9218 FII_UTIL.print_timer('Duration');
9219 FII_UTIL.put_line('');
9220 end if;
9221
9222 EXCEPTION
9223 WHEN OTHERS THEN
9224 g_errbuf:=sqlerrm;
9225 g_retcode:= -1;
9226 g_exception_msg := g_retcode || ':' || g_errbuf;
9227 FII_UTIL.put_line('Error occured while ' || g_state);
9228 FII_UTIL.put_line(g_exception_msg);
9229 RAISE;
9230
9231 END POPULATE_INCREMENTAL_DISP_IDS;
9232
9233
9234 -----------------------------------------------------------
9235 -- Procedure
9236 -- Inc_Extraction()
9237 -- Purpose
9238 -- This routine handles all procedures involved in populating FII
9239 -- AR DBI fact tables in incremental load.
9240
9241 -----------------------------------------------------------
9242 -- PROCEDURE Inc_Extraction
9243 -----------------------------------------------------------
9244 Procedure Inc_Extraction( Errbuf IN OUT NOCOPY VARCHAR2,
9245 Retcode IN OUT NOCOPY VARCHAR2
9246 ) IS
9247 l_dir VARCHAR2(400);
9248
9249 BEGIN
9250 g_state := 'Inside the procedure Inc_Extraction';
9251 if g_debug_flag = 'Y' then
9252 FII_UTIL.put_line(g_state);
9253 end if;
9254
9255 Retcode := 0;
9256
9257 ------------------------------------------------------
9258 -- Set default directory in case if the profile option
9259 -- BIS_DEBUG_LOG_DIRECTORY is not set up
9260 ------------------------------------------------------
9261 l_dir:=FII_UTIL.get_utl_file_dir;
9262
9263 ----------------------------------------------------------------
9264 -- FII_UTIL.initialize will get profile options FII_DEBUG_MODE
9265 -- and BIS_DEBUG_LOG_DIRECTORY and set up the directory where
9266 -- the log files and output files are written to
9267 ----------------------------------------------------------------
9268 FII_UTIL.initialize('FII_AR_FACTS_AGING_INIT.log','FII_AR_FACTS_AGING_INIT.out',l_dir, 'FII_AR_FACTS_AGING_INIT');
9269
9270 EXECUTE IMMEDIATE 'ALTER SESSION SET MAX_DUMP_FILE_SIZE=UNLIMITED';
9271
9272 if g_debug_flag = 'Y' then
9273 FII_UTIL.put_line('-------------------------------------------------');
9274 FII_UTIL.put_line('Calling the Init procedure to initialize the global variables');
9275 FII_UTIL.put_line('-------------------------------------------------');
9276 end if;
9277
9278 INIT;
9279
9280 if g_debug_flag = 'Y' then
9281 FII_UTIL.put_line('-------------------------------------------------');
9282 FII_UTIL.put_line('Populating dimension helper tables fii_ar_help_mkt_classes and fii_ar_help_collectors');
9283 FII_UTIL.put_line('-------------------------------------------------');
9284 end if;
9285
9286 POPULATE_HELPER_TABLES;
9287
9288 if g_debug_flag = 'Y' then
9289 FII_UTIL.put_line('-------------------------------------------------');
9290 FII_UTIL.put_line('Calling the Inc_Prepare procedure to prepare for the incremental load');
9291 FII_UTIL.put_line('-------------------------------------------------');
9292 end if;
9293
9294 Inc_Prepare;
9295
9296
9297 if g_debug_flag = 'Y' then
9298 FII_UTIL.put_line('-------------------------------------------------');
9299 FII_UTIL.put_line('Calling the GET_BUCKET_RANGES procedure to load and validate bucket range definitions');
9300 FII_UTIL.put_line('-------------------------------------------------');
9301 end if;
9302
9303 GET_BUCKET_RANGES;
9304
9305
9306 g_state := 'Truncating table FII_AR_CURR_RATES_T';
9307 TRUNCATE_TABLE('FII_AR_CURR_RATES_T');
9308
9309 if g_debug_flag = 'Y' then
9310 FII_UTIL.put_line('-------------------------------------------------');
9311 FII_UTIL.put_line('Calling the Inc_RATES procedure to insert the missing rate info');
9312 FII_UTIL.put_line('-------------------------------------------------');
9313 end if;
9314
9315 Inc_RATES;
9316
9317 if g_debug_flag = 'Y' then
9318 FII_UTIL.put_line('-------------------------------------------------');
9319 FII_UTIL.put_line('Calling the Verify_Missing_Rates procedure');
9320 FII_UTIL.put_line('-------------------------------------------------');
9321 end if;
9322
9323 IF (VERIFY_MISSING_RATES = -1) THEN
9324 g_retcode := -1;
9325 g_errbuf := fnd_message.get_string('FII', 'FII_MISS_EXCH_RATE_FOUND');
9326
9327 RAISE G_MISSING_RATES;
9328
9329 -----------------------------------------------------------------------
9330 -- If there are no missing exchange rate records, then insert
9331 -- records into the fact and aging tables
9332 -----------------------------------------------------------------------
9333 ELSE
9334
9335 if g_debug_flag = 'Y' then
9336 FII_UTIL.put_line('-------------------------------------------------');
9337 FII_UTIL.put_line('Calling procedure Inc_PAYMENT_SCHEDULES');
9338 FII_UTIL.put_line('-------------------------------------------------');
9339 end if;
9340 Inc_PAYMENT_SCHEDULES;
9341
9342
9343 if g_debug_flag = 'Y' then
9344 FII_UTIL.put_line('-------------------------------------------------');
9345 FII_UTIL.put_line('Calling procedure Inc_DISPUTES');
9346 FII_UTIL.put_line('-------------------------------------------------');
9347 end if;
9348 Inc_DISPUTES;
9349
9350
9351 if g_debug_flag = 'Y' then
9352 FII_UTIL.put_line('-------------------------------------------------');
9353 FII_UTIL.put_line('Calling procedure Inc_TRANSACTIONS');
9354 FII_UTIL.put_line('-------------------------------------------------');
9355 end if;
9356 Inc_TRANSACTIONS;
9357
9358
9359 if g_debug_flag = 'Y' then
9360 FII_UTIL.put_line('-------------------------------------------------');
9361 FII_UTIL.put_line('Calling procedure Inc_ADJUSTMENTS');
9362 FII_UTIL.put_line('-------------------------------------------------');
9363 end if;
9364 Inc_ADJUSTMENTS;
9365
9366
9367 if g_debug_flag = 'Y' then
9368 FII_UTIL.put_line('-------------------------------------------------');
9369 FII_UTIL.put_line('Calling procedure Inc_RECEIPTS');
9370 FII_UTIL.put_line('-------------------------------------------------');
9371 end if;
9372 Inc_RECEIPTS;
9373
9374
9375 /*
9376 if g_debug_flag = 'Y' then
9377 FII_UTIL.put_line('-------------------------------------------------');
9378 FII_UTIL.put_line('Calling procedure POPULATE_SCHEDULED_DISCOUNTS');
9379 FII_UTIL.put_line('-------------------------------------------------');
9380 end if;
9381 POPULATE_SCHEDULED_DISCOUNTS;
9382 */
9383
9384 ----------------------------------------------------------
9385 ---------- Inc load of FII_AR_AGING_RECEIVABLES-----------
9386 ----------------------------------------------------------
9387 if g_debug_flag = 'Y' then
9388 FII_UTIL.put_line('-------------------------------------------------');
9389 FII_UTIL.put_line('Calling the CLEAN_REC_AGING procedure to delete from fii_ar_aging_receivables');
9390 FII_UTIL.put_line('-------------------------------------------------');
9391 end if;
9392 CLEAN_REC_AGING;
9393
9394 if g_debug_flag = 'Y' then
9395 FII_UTIL.put_line('-------------------------------------------------');
9396 FII_UTIL.put_line('Calling the POPULATE_INCREMENTAL_IDS procedure');
9397 FII_UTIL.put_line('-------------------------------------------------');
9398 end if;
9399 POPULATE_INCREMENTAL_IDS;
9400
9401 if g_debug_flag = 'Y' then
9402 FII_UTIL.put_line('-------------------------------------------------');
9403 FII_UTIL.put_line('Calling procedure Inc_RECEIVABLES_AGING');
9404 FII_UTIL.put_line('-------------------------------------------------');
9405 end if;
9406 Inc_RECEIVABLES_AGING;
9407
9408 ----------------------------------------------------------
9409 ---------- Inc load of FII_AR_AGING_RECEIPTS--------------
9410 ----------------------------------------------------------
9411 if g_debug_flag = 'Y' then
9412 FII_UTIL.put_line('-------------------------------------------------');
9413 FII_UTIL.put_line('Calling the CLEAN_RCT_AGING procedure to delete from fii_ar_aging_receipts');
9414 FII_UTIL.put_line('-------------------------------------------------');
9415 end if;
9416 CLEAN_RCT_AGING;
9417
9418 if g_debug_flag = 'Y' then
9419 FII_UTIL.put_line('-------------------------------------------------');
9420 FII_UTIL.put_line('Calling the POPULATE_INCREMENTAL_RCT_IDS procedure');
9421 FII_UTIL.put_line('-------------------------------------------------');
9422 end if;
9423 POPULATE_INCREMENTAL_RCT_IDS;
9424
9425 if g_debug_flag = 'Y' then
9426 FII_UTIL.put_line('-------------------------------------------------');
9427 FII_UTIL.put_line('Calling procedure Inc_RECEIPTS_AGING');
9428 FII_UTIL.put_line('-------------------------------------------------');
9429 end if;
9430 Inc_RECEIPTS_AGING;
9431
9432 ----------------------------------------------------------
9433 ---------- Inc load of FII_AR_AGING_DISPUTES--------------
9434 ----------------------------------------------------------
9435 if g_debug_flag = 'Y' then
9436 FII_UTIL.put_line('-------------------------------------------------');
9437 FII_UTIL.put_line('Calling the CLEAN_DISP_AGING procedure to delete from fii_ar_aging_disputes');
9438 FII_UTIL.put_line('-------------------------------------------------');
9439 end if;
9440 CLEAN_DISP_AGING;
9441
9442 if g_debug_flag = 'Y' then
9443 FII_UTIL.put_line('-------------------------------------------------');
9444 FII_UTIL.put_line('Calling the POPULATE_INCREMENTAL_DISP_IDS procedure');
9445 FII_UTIL.put_line('-------------------------------------------------');
9446 end if;
9447 POPULATE_INCREMENTAL_DISP_IDS;
9448
9449 if g_debug_flag = 'Y' then
9450 FII_UTIL.put_line('-------------------------------------------------');
9451 FII_UTIL.put_line('Calling procedure Inc_DISPUTES_AGING');
9452 FII_UTIL.put_line('-------------------------------------------------');
9453 FII_UTIL.put_line('');
9454 end if;
9455 Inc_DISPUTES_AGING;
9456
9457
9458 g_state := 'Logging program sysdate as ar_last_update_date in fii_change_log table';
9459
9460 INSERT INTO fii_change_log
9461 (log_item, item_value, CREATION_DATE, CREATED_BY,
9462 LAST_UPDATE_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN)
9463 (SELECT 'AR_LAST_UPDATE_DATE',
9464 to_char(g_sysdate_time,'MM/DD/YYYY HH24:MI:SS'),
9465 sysdate, --CREATION_DATE,
9466 g_fii_user_id, --CREATED_BY,
9467 sysdate, --LAST_UPDATE_DATE,
9468 g_fii_user_id, --LAST_UPDATED_BY,
9469 g_fii_login_id --LAST_UPDATE_LOGIN
9470 FROM DUAL
9471 WHERE NOT EXISTS
9472 (select 1 from fii_change_log
9473 where log_item = 'AR_LAST_UPDATE_DATE'));
9474
9475 IF (SQL%ROWCOUNT = 0) THEN
9476 UPDATE fii_change_log
9477 SET item_value = to_char(g_sysdate_time,'MM/DD/YYYY HH24:MI:SS'),
9478 last_update_date = g_sysdate_time,
9479 last_update_login = g_fii_login_id,
9480 last_updated_by = g_fii_user_id
9481 WHERE log_item = 'AR_LAST_UPDATE_DATE';
9482 END IF;
9483
9484 delete from FII_AR_RECEIPTS_DELETE_T
9485 where CREATION_DATE <= g_sysdate_time;
9486
9487 END IF;
9488
9489 COMMIT;
9490
9491 if g_debug_flag = 'Y' then
9492 FII_UTIL.put_line('return code is ' || retcode);
9493 end if;
9494
9495 g_retcode := 0;
9496
9497 EXCEPTION
9498 WHEN OTHERS THEN
9499 ROLLBACK;
9500 g_retcode:= -1;
9501 retcode := g_retcode;
9502 g_exception_msg := g_retcode || ':' || g_errbuf;
9503 if g_debug_flag = 'Y' then
9504 FII_UTIL.put_line('Error occured while: ' || g_state);
9505 end if;
9506 FII_UTIL.put_line(g_exception_msg);
9507
9508 -- dbms_output.put_line('Error occured while: ' || g_state);
9509 -- dbms_output.put_line('Error Message: ' || g_exception_msg);
9510
9511 END Inc_Extraction;
9512
9513 FUNCTION Delete_CashReceipt_Sub (
9514 p_subscription_guid IN RAW,
9515 p_event IN OUT NOCOPY WF_EVENT_T
9516 ) RETURN VARCHAR2 IS
9517 l_key VARCHAR2(240);
9518 l_pos NUMBER;
9519 l_id VARCHAR2(240);
9520 BEGIN
9521 l_key := p_event.GetEventKey();
9522 -- l_pos := instr(l_key, '_');
9523 -- l_id := substr(l_key, 1, l_pos - 1);
9524 insert into FII_AR_RECEIPTS_DELETE_T (
9525 EVENT_KEY,
9526 CASH_RECEIPT_ID,
9527 CREATION_DATE,
9528 CREATED_BY,
9529 LAST_UPDATE_DATE,
9530 LAST_UPDATED_BY,
9531 LAST_UPDATE_LOGIN
9532 )
9533 values(
9534 l_key,
9535 0, -- to_number(l_id),
9536 sysdate,
9537 111,
9538 sysdate,
9539 111,
9540 111
9541 );
9542 -- commit;
9543 return 'SUCCESS';
9544 EXCEPTION
9545 WHEN OTHERS THEN
9546 return 'ERROR';
9547 END Delete_CashReceipt_Sub;
9548
9549 END FII_AR_FACTS_AGING_PKG;
9550