DBA Data[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