1 PACKAGE BODY IEX_COLL_IND AS
2 /* $Header: iexvmtib.pls 120.17.12020000.2 2012/07/24 19:16:13 schekuri ship $ */
3 /*-------------------------------------------------------------------------+
4 | PUBLIC FUNCTION |
5 | |
6 | GET_AVG_DAYS_LATE |
7 | |
8 | DESCRIPTION |
9 | This function will compute for average days late |
10 | REQUIRES |
11 | |
12 | OPTIONAL |
13 | |
14 | RETURNS |
15 | Average Days Late |
16 | |
17 | NOTES |
18 | |
19 | EXAMPLE |
20 | |
21 | MODIFICATION HISTORY |
22 | |
23 +-------------------------------------------------------------------------*/
24
25 FUNCTION GET_AVG_DAYS_LATE(p_party_id IN NUMBER,
26 p_cust_account_id IN NUMBER,
27 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
28
29 l_avg_days_late NUMBER;
30 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
31 l_num_val NUMBER;
32 l_char_val VARCHAR2(1000);
33 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
34
35 BEGIN
36
37 IF p_party_id IS NOT NULL THEN
38 --Start of comment for Bug 8201317 14-Jun-2010 barathsr
39 /* SELECT sum(TRUNC(sysdate) - ps.due_date)
40 / COUNT(1)
41 INTO l_avg_days_late
42 FROM ar_payment_schedules ps, hz_cust_accounts ca
43 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
44 AND ps.class in ('INV','DEP','DM','CB')
45 AND ps.gl_date_closed > TRUNC(sysdate)
46 -- Begin fix bug #4949609-JYPARK-2/15/2006-add condition for performance
47 AND ps.status = 'OP'
48 -- End fix bug #4949609-JYPARK-2/15/2006-add condition for performance
49 AND ps.due_date < TRUNC(sysdate)
50 AND ps.payment_schedule_id <> -1
51 AND ca.cust_account_id = ps.customer_id
52 AND ca.party_id = p_party_id;
53 ELSIF p_cust_account_id IS NOT NULL THEN
54 SELECT sum(TRUNC(sysdate) - ps.due_date)
55 / COUNT(1)
56 INTO l_avg_days_late
57 FROM ar_payment_schedules ps
58 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
59 AND ps.class in ('INV','DEP','DM','CB')
60 AND ps.gl_date_closed > TRUNC(sysdate)
61 -- Begin fix bug #4949609-JYPARK-2/15/2006-add condition for performance
62 AND ps.status = 'OP'
63 -- End fix bug #4949609-JYPARK-2/15/2006-add condition for performance
64 AND ps.due_date < TRUNC(sysdate)
65 AND ps.payment_schedule_id <> -1
66 AND ps.customer_id = p_cust_account_id;
67 ELSIF p_customer_site_use_id IS NOT NULL THEN
68 SELECT sum(TRUNC(sysdate) - ps.due_date)
69 / COUNT(1)
70 INTO l_avg_days_late
71 FROM ar_payment_schedules ps
72 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
73 AND ps.class in ('INV','DEP','DM','CB')
74 AND ps.gl_date_closed > TRUNC(sysdate)
75 -- Begin fix bug #4949609-JYPARK-2/15/2006-add condition for performance
76 AND ps.status = 'OP'
77 -- End fix bug #4949609-JYPARK-2/15/2006-add condition for performance
78 AND ps.due_date < TRUNC(sysdate)
79 AND ps.payment_schedule_id <> -1
80 AND ps.customer_site_use_id = p_customer_site_use_id;*/
81 --End of comment for Bug 8201317 14-Jun-2010 barathsr
82 --Begin Bug 8201317 14-Jun-2010 barathsr
83 SELECT round(sum(TRUNC(decode(sign(gl_date_closed-trunc(sysdate)),1,sysdate,ps.gl_date_closed)) - ps.due_date)
84 / COUNT(1)) AVG_DAYS_LATE
85 INTO l_avg_days_late
86 FROM ar_payment_schedules ps, iex_delinquencies del
87 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
88 and ps.payment_schedule_id=del.payment_schedule_id
89 AND ps.class in ('INV','DEP','DM','CB')
90 AND ps.due_date <= TRUNC(sysdate)
91 AND ps.payment_schedule_id <> -1
92 AND del.party_cust_id = p_party_id;
93 ELSIF p_cust_account_id IS NOT NULL THEN
94 SELECT round(sum(TRUNC(decode(sign(gl_date_closed-trunc(sysdate)),1,sysdate,ps.gl_date_closed)) - ps.due_date)
95 / COUNT(1))AVG_DAYS_LATE
96 INTO l_avg_days_late
97 FROM ar_payment_schedules ps, iex_delinquencies del
98 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
99 and ps.payment_schedule_id=del.payment_schedule_id
100 AND ps.class in ('INV','DEP','DM','CB')
101 AND ps.due_date <= TRUNC(sysdate)
102 AND ps.payment_schedule_id <> -1
103 and ps.customer_id=p_cust_account_id;
104 ELSIF p_customer_site_use_id IS NOT NULL THEN
105 SELECT round(sum(TRUNC(decode(sign(gl_date_closed-trunc(sysdate)),1,sysdate,ps.gl_date_closed)) - ps.due_date)
106 / COUNT(1))AVG_DAYS_LATE
107 INTO l_avg_days_late
108 FROM ar_payment_schedules ps,iex_delinquencies del
109 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
110 and ps.payment_schedule_id=del.payment_schedule_id
111 AND ps.class in ('INV','DEP','DM','CB')
112 AND ps.due_date <= TRUNC(sysdate)
113 AND ps.payment_schedule_id <> -1
114 AND ps.customer_site_use_id = p_customer_site_use_id;
115 --Begin Bug 8201317 14-Jun-2010 barathsr
116 END IF;
117
118 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
119 -- RETURN TO_CHAR(TRUNC(NVL(l_avg_days_late,0)));
120
121 l_num_val := TRUNC(NVL(l_avg_days_late,0));
122 l_char_val := RTRIM(TO_CHAR(l_num_val));
123
124 RETURN l_char_val;
125 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
126
127 EXCEPTION
128 WHEN NO_DATA_FOUND THEN RETURN(TO_CHAR(0));
129
130 END GET_AVG_DAYS_LATE;
131
132
133 /*-------------------------------------------------------------------------+
134 | PUBLIC FUNCTION |
135 | |
136 | GET_WTD_DAYS_LATE |
137 | |
138 | DESCRIPTION |
139 | This function will compute for weighted average |
140 | days late |
141 | Added calls to GET_ADJ_TOTAL and GET_APPS_TOTAL |
142 | REQUIRES |
143 | |
144 | OPTIONAL |
145 | |
146 | RETURNS |
147 | Weighted Average Days Late |
148 | |
149 | NOTES |
150 | |
151 | EXAMPLE |
152 | |
153 | MODIFICATION HISTORY |
154 | |
155 +-------------------------------------------------------------------------*/
156
157 FUNCTION GET_WTD_DAYS_LATE(p_party_id IN NUMBER,
158 p_cust_account_id IN NUMBER,
159 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
160
161 l_wtd_days_late NUMBER;
162 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
163 l_num_val NUMBER;
164 l_char_val VARCHAR2(1000);
165 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
166
167 BEGIN
168
169 IF p_party_id IS NOT NULL THEN
170 --Start of comment for Bug 8201317 14-Jun-2010 barathsr
171 /* SELECT sum
172 (
173 (
174 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
175 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
176 nvl(ps.acctd_amount_due_remaining, 0)
177 ) *
178 (TRUNC(sysdate) - ps.due_date)
179 ) /
180 sum (
181 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
182 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
183 nvl(ps.acctd_amount_due_remaining, 0)
184 )
185 INTO l_wtd_days_late
186 FROM ar_payment_schedules ps, hz_cust_accounts ca
187 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
188 AND ps.class in ('INV','DEP','DM','CB')
189 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
190 --AND ps.gl_date_closed > TRUNC(sysdate)
191 --AND ps.due_date < TRUNC(sysdate)
192 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
193 -- Begin fix bug #4949609-JYPARK-2/15/2006-add condition for performance
194 AND ps.status = 'OP'
195 -- End fix bug #4949609-JYPARK-2/15/2006-add condition for performance
196 AND ps.payment_schedule_id <> -1
197 AND ps.customer_id = ca.cust_account_id
198 AND ca.party_id = p_party_id;
199 ELSIF p_cust_account_id IS NOT NULL THEN
200 SELECT sum
201 (
202 (
203 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
204 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
205 nvl(ps.acctd_amount_due_remaining, 0)
206 ) *
207 (TRUNC(sysdate) - ps.due_date)
208 ) /
209 sum (
210 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
211 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
212 nvl(ps.acctd_amount_due_remaining, 0)
213 )
214 INTO l_wtd_days_late
215 FROM ar_payment_schedules ps
216 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
217 AND ps.class in ('INV','DEP','DM','CB')
218 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
219 -- AND ps.gl_date_closed > TRUNC(sysdate)
220 -- AND ps.due_date < TRUNC(sysdate)
221 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
222 -- Begin fix bug #4949609-JYPARK-2/15/2006-add condition for performance
223 AND ps.status = 'OP'
224 -- End fix bug #4949609-JYPARK-2/15/2006-add condition for performance
225 AND ps.payment_schedule_id <> -1
226 AND ps.customer_id = p_cust_account_id;
227 ELSIF p_customer_site_use_id IS NOT NULL THEN
228 SELECT sum
229 (
230 (
231 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
232 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
233 nvl(ps.acctd_amount_due_remaining, 0)
234 ) *
235 (TRUNC(sysdate) - ps.due_date)
236 ) /
237 sum (
238 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
239 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
240 nvl(ps.acctd_amount_due_remaining, 0)
241 )
242 INTO l_wtd_days_late
243 FROM ar_payment_schedules ps
244 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
245 AND ps.class in ('INV','DEP','DM','CB')
246 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
247 -- AND ps.gl_date_closed > TRUNC(sysdate)
248 -- AND ps.due_date < TRUNC(sysdate)
249 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
250 -- Begin fix bug #4949609-JYPARK-2/15/2006-add condition for performance
251 AND ps.status = 'OP'
252 -- End fix bug #4949609-JYPARK-2/15/2006-add condition for performance
253 AND ps.payment_schedule_id <> -1
254 AND ps.customer_site_use_id = p_customer_site_use_id;*/
255 --End of comment for Bug 8201317 14-Jun-2010 barathsr
256 --Begin Bug 8201317 14-Jun-2010 barathsr
257 SELECT round(sum
258 (
259 (
260 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
261 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
262 nvl(ps.acctd_amount_due_remaining, 0)
263 ) *
264 (TRUNC(decode(sign(gl_date_closed-trunc(sysdate)),1,sysdate,ps.gl_date_closed)) - ps.due_date)
265 ) /
266 sum (
267 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
268 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
269 nvl(ps.acctd_amount_due_remaining, 0)
270 ))WTD_AVG_DAYS_LATE
271 INTO l_wtd_days_late
272 FROM ar_payment_schedules ps,iex_delinquencies del
273 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
274 and ps.payment_schedule_id=del.payment_schedule_id
275 AND ps.class in ('INV','DEP','DM','CB')
276 AND ps.due_date <= TRUNC(sysdate)
277 AND ps.payment_schedule_id <> -1
278 and del.party_cust_id=p_party_id;
279
280 ELSIF p_cust_account_id IS NOT NULL THEN
281 SELECT round(sum
282 (
283 (
284 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
285 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
286 nvl(ps.acctd_amount_due_remaining, 0)
287 ) *
288 (TRUNC(decode(sign(gl_date_closed-trunc(sysdate)),1,sysdate,ps.gl_date_closed)) - ps.due_date)
289 ) /
290 sum (
291 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
292 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
293 nvl(ps.acctd_amount_due_remaining, 0)
294 ))WTD_AVG_DAYS_LATE
295 INTO l_wtd_days_late
296 FROM ar_payment_schedules ps, iex_delinquencies del
297 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
298 and ps.payment_schedule_id=del.payment_schedule_id
299 AND ps.class in ('INV','DEP','DM','CB')
300 AND ps.due_date <= TRUNC(sysdate)
301 and ps.payment_schedule_id <> -1
302 and ps.customer_id=p_cust_account_id;
303
304 ELSIF p_customer_site_use_id IS NOT NULL THEN
305 SELECT round(sum
306 (
307 (
308 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
309 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
310 nvl(ps.acctd_amount_due_remaining, 0)
311 ) *
312 (TRUNC(decode(sign(gl_date_closed-trunc(sysdate)),1,sysdate,ps.gl_date_closed)) - ps.due_date)
313 ) /
314 sum (
315 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
316 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
317 nvl(ps.acctd_amount_due_remaining, 0)
318 ))WTD_AVG_DAYS_LATE
319 INTO l_wtd_days_late
320 FROM ar_payment_schedules ps, iex_delinquencies del
321 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
322 and ps.payment_schedule_id=del.payment_schedule_id
323 AND ps.class in ('INV','DEP','DM','CB')
324 AND ps.due_date <= TRUNC(sysdate)
325 and ps.payment_schedule_id <> -1
326 and ps.customer_site_use_id=p_customer_site_use_id;
327 --End Bug 8201317 14-Jun-2010 barathsr
328
329 END IF;
330
331 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
332 --RETURN TO_CHAR(TRUNC(NVL(l_wtd_days_late,0)));
333 l_num_val := TRUNC(NVL(l_wtd_days_late,0));
334 l_char_val := RTRIM(TO_CHAR(l_num_val));
335 RETURN l_char_val;
336 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
337
338 EXCEPTION
339 WHEN NO_DATA_FOUND THEN RETURN(TO_CHAR(0));
340 END GET_WTD_DAYS_LATE;
341
342 /*-------------------------------------------------------------------------+
343 | PUBLIC FUNCTION |
344 | |
345 | GET_WTD_DAYS_PAID |
346 | |
347 | DESCRIPTION |
348 | This function will compute for weighted average |
349 | days paid |
350 | REQUIRES |
351 | |
352 | OPTIONAL |
353 | |
354 | RETURNS |
355 | Weighted Average Days Paid |
356 | |
357 | NOTES |
358 | |
359 | EXAMPLE |
360 | |
361 | MODIFICATION HISTORY |
362 | |
363 +-------------------------------------------------------------------------*/
364
365 FUNCTION GET_WTD_DAYS_PAID(p_party_id IN NUMBER,
366 p_cust_account_id IN NUMBER,
367 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
368
369 l_wtd_days_paid NUMBER;
370 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
371 l_num_val NUMBER;
372 l_char_val VARCHAR2(1000);
373 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
374
375 BEGIN
376
377 IF p_party_id IS NOT NULL THEN
378 SELECT ROUND(SUM((ra.apply_date - ps.trx_date) * ra.amount_applied)
379 / SUM(ra.amount_applied)
380 , 0) WEIGHTED_AVG_DAYS_PAID
381 INTO l_wtd_days_paid
382 FROM ar_receivable_applications ra,
383 ar_payment_schedules ps,
384 hz_cust_accounts ca
385 WHERE ps.customer_id = ca.cust_account_id
386 AND ca.party_id = p_party_id
387 AND ra.status = 'APP'
388 AND ps.payment_schedule_id = ra.applied_payment_schedule_id
389 AND ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
390 AND ps.class in ('INV','DEP','DM','CB')
391 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
392 -- AND ps.gl_date_closed > TRUNC(sysdate)
393 -- AND ps.due_date < TRUNC(sysdate)
394 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
395 -- Begin fix bug #4949604-JYPARK-2/15/2006-add condition for performance
396 AND ps.status = 'CL'
397 -- End fix bug #4949604-JYPARK-2/15/2006-add condition for performance
398 AND ps.payment_schedule_id <> -1;
399 ELSIF p_cust_account_id IS NOT NULL THEN
400 SELECT ROUND(SUM((ra.apply_date - ps.trx_date) * ra.amount_applied)
401 / SUM(ra.amount_applied)
402 , 0) WEIGHTED_AVG_DAYS_PAID
403 INTO l_wtd_days_paid
404 FROM ar_receivable_applications ra,
405 ar_payment_schedules ps
406 WHERE ps.customer_id = p_cust_account_id
407 AND ra.status = 'APP'
408 AND ps.payment_schedule_id = ra.applied_payment_schedule_id
409 AND ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
410 AND ps.class in ('INV','DEP','DM','CB')
411 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
412 -- AND ps.gl_date_closed > TRUNC(sysdate)
413 -- AND ps.due_date < TRUNC(sysdate)
414 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
415 -- Begin fix bug #4949604-JYPARK-2/15/2006-add condition for performance
416 AND ps.status = 'CL'
417 -- End fix bug #4949604-JYPARK-2/15/2006-add condition for performance
418 AND ps.payment_schedule_id <> -1;
419 ELSIF p_customer_site_use_id IS NOT NULL THEN
420 SELECT ROUND(SUM((ra.apply_date - ps.trx_date) * ra.amount_applied)
421 / SUM(ra.amount_applied)
422 , 0) WEIGHTED_AVG_DAYS_PAID
423 INTO l_wtd_days_paid
424 FROM ar_receivable_applications ra,
425 ar_payment_schedules ps
426 WHERE ps.customer_site_use_id = p_customer_site_use_id
427 AND ra.status = 'APP'
428 AND ps.payment_schedule_id = ra.applied_payment_schedule_id
429 AND ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
430 AND ps.class in ('INV','DEP','DM','CB')
431 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
432 -- AND ps.gl_date_closed > TRUNC(sysdate)
433 -- AND ps.due_date < TRUNC(sysdate)
434 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
435 -- Begin fix bug #4949604-JYPARK-2/15/2006-add condition for performance
436 AND ps.status = 'CL'
437 -- End fix bug #4949604-JYPARK-2/15/2006-add condition for performance
438 AND ps.payment_schedule_id <> -1;
439 END IF;
440
441 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
442 --RETURN TO_CHAR(TRUNC(NVL(l_wtd_days_paid, 0)));
443 l_num_val := TRUNC(NVL(l_wtd_days_paid, 0));
444 l_char_val := RTRIM(TO_CHAR(l_num_val));
445 RETURN l_char_val;
446 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
447
448 EXCEPTION
449 WHEN NO_DATA_FOUND THEN RETURN(TO_CHAR(0));
450 END GET_WTD_DAYS_PAID;
451
452
453 /*-------------------------------------------------------------------------+
454 | PUBLIC FUNCTION |
455 | |
456 | GET_WTD_DAYS_TERMS |
457 | |
458 | DESCRIPTION |
459 | This function will compute for weighted average |
460 | days terms |
461 | REQUIRES |
462 | |
463 | OPTIONAL |
464 | |
465 | RETURNS |
466 | Weighted Average Days Terms |
467 | |
468 | NOTES |
469 | |
470 | EXAMPLE |
471 | |
472 | MODIFICATION HISTORY |
473 | |
474 +-------------------------------------------------------------------------*/
475
476 FUNCTION GET_WTD_DAYS_TERMS(p_party_id IN NUMBER,
477 p_cust_account_id IN NUMBER,
478 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
479
480 l_wtd_days_terms NUMBER;
481 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
482 l_num_val NUMBER;
483 l_char_val VARCHAR2(1000);
484 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
485
486 BEGIN
487
488 IF p_party_id IS NOT NULL THEN
489 SELECT sum
490 (
491 (
492 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
493 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
494 nvl(ps.acctd_amount_due_remaining, 0)
495 ) *
496 (ps.due_date - ps.trx_date)
497 ) /
498 sum (
499 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
500 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
501 nvl(ps.acctd_amount_due_remaining, 0)
502 )
503 INTO l_wtd_days_terms
504 FROM ar_payment_schedules ps, hz_cust_accounts ca
505 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
506 AND ps.class in ('INV','DEP','DM','CB')
507 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
508 -- AND ps.gl_date_closed > TRUNC(sysdate)
509 -- AND ps.due_date < TRUNC(sysdate)
510 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
511 AND ps.payment_schedule_id <> -1
512 AND ps.customer_id = ca.cust_account_id
513 AND ca.party_id = p_party_id;
514 ELSIF p_cust_account_id IS NOT NULL THEN
515 SELECT sum
516 (
517 (
518 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
519 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
520 nvl(ps.acctd_amount_due_remaining, 0)
521 ) *
522 (ps.due_date - ps.trx_date)
523 ) /
524 sum (
525 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
526 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
527 nvl(ps.acctd_amount_due_remaining, 0)
528 )
529 INTO l_wtd_days_terms
530 FROM ar_payment_schedules ps
531 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
532 AND ps.class in ('INV','DEP','DM','CB')
533 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
534 -- AND ps.gl_date_closed > TRUNC(sysdate)
535 -- AND ps.due_date < TRUNC(sysdate)
536 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
537 AND ps.payment_schedule_id <> -1
538 AND ps.customer_id = p_cust_account_id;
539 ELSIF p_customer_site_use_id IS NOT NULL THEN
540 SELECT sum
541 (
542 (
543 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
544 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
545 nvl(ps.acctd_amount_due_remaining, 0)
546 ) *
547 (ps.due_date - ps.trx_date)
548 ) /
549 sum (
550 GET_APPS_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) -
551 GET_ADJ_TOTAL(ps.payment_schedule_id, TRUNC(sysdate)) +
552 nvl(ps.acctd_amount_due_remaining, 0)
553 )
554 INTO l_wtd_days_terms
555 FROM ar_payment_schedules ps
556 WHERE ps.gl_date between TRUNC(add_months(sysdate, -12)) and TRUNC(sysdate)
557 AND ps.class in ('INV','DEP','DM','CB')
558 -- Begin fix bug #4917851-jypark-11/47/2005-remove invalid condition
559 -- AND ps.gl_date_closed > TRUNC(sysdate)
560 -- AND ps.due_date < TRUNC(sysdate)
561 -- End fix bug #4917851-jypark-11/47/2005-remove invalid condition
562 AND ps.payment_schedule_id <> -1
563 AND ps.customer_site_use_id = p_customer_site_use_id;
564 END IF;
565
566 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
567 --RETURN TO_CHAR(TRUNC(NVL(l_wtd_days_terms, 0)));
568 l_num_val := TRUNC(NVL(l_wtd_days_terms, 0));
569 l_char_val := RTRIM(TO_CHAR(l_num_val));
570 RETURN l_char_val;
571 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
572
573 EXCEPTION
574 WHEN NO_DATA_FOUND THEN RETURN(TO_CHAR(0));
575 END GET_WTD_DAYS_TERMS;
576
577 FUNCTION GET_CEI(p_party_id IN NUMBER,
578 p_cust_account_id IN NUMBER,
579 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
580 l_cei NUMBER;
581 l_sales NUMBER;
582 l_beg_ar NUMBER;
583 l_end_ar NUMBER;
584 l_curr_ar NUMBER;
585 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
586 l_num_val NUMBER;
587 l_char_val VARCHAR2(1000);
588 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
589
590 BEGIN
591 /*-----------------------------------------------------------------------
592 CEI = ( Beginning Receivables + ( Credit Sales/ N*) - Ending Total Receivables) * 100
593 / (Beginning Receivables + ( Credit Sales/N*) - Ending Current Receivables)
594
595 *N= Number of Months Can do this monthly, quarterly , and annually
596 */
597
598 l_sales := COMP_TOT_REC(TRUNC(add_months(sysdate, -12)), TRUNC(sysdate),
599 p_party_id, p_cust_account_id, p_customer_site_use_id);
600
601 l_beg_ar := COMP_REM_REC(to_date('01/01/1952','MM/DD/YYYY'), TRUNC(add_months(sysdate, -12)) - 1,
602 p_party_id, p_cust_account_id, p_customer_site_use_id);
603
604 l_end_ar := COMP_REM_REC(to_date('01/01/1952','MM/DD/YYYY'), TRUNC(sysdate),
605 p_party_id, p_cust_account_id, p_customer_site_use_id);
606
607 l_curr_ar := comp_curr_rec(to_date('01/01/1952','MM/DD/YYYY'), TRUNC(sysdate),
608 p_party_id, p_cust_account_id, p_customer_site_use_id);
609
610 l_cei := (l_beg_ar + (l_sales / 12) - l_end_ar) * 100 / (l_beg_ar + (l_sales / 12) - l_curr_ar);
611
612 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
613 --RETURN TO_CHAR(TRUNC(NVL(l_cei, 0)));
614 l_num_val := TRUNC(NVL(l_cei, 0));
615 l_char_val := RTRIM(TO_CHAR(l_num_val));
616 RETURN l_char_val;
617 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
618
619 EXCEPTION
620 WHEN NO_DATA_FOUND THEN
621 RETURN(TO_CHAR(0));
622 END GET_CEI;
623
624 FUNCTION GET_TRUE_DSO(p_party_id IN NUMBER,
625 p_cust_account_id IN NUMBER,
626 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
627 l_sales NUMBER;
628 l_beg_ar NUMBER;
629 l_end_ar NUMBER;
630 l_dso NUMBER;
631 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
632 l_num_val NUMBER;
633 l_char_val VARCHAR2(1000);
634 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
635
636 BEGIN
637
638 /*-----------------------------------------------------------------------
639 DSO = ( Period Average Receivables / Average Sales per day)
640
641 where tot outs rec = sum of all receivables less all receipts (use COMP_REM_REC)
642 avg sales per day = sum of all receivables (use COMP_TOT_REC) / days in period
643 -----------------------------------------------------------------------*/
644
645 l_sales := COMP_TOT_REC(TRUNC(add_months(sysdate, -12)), TRUNC(sysdate),
646 p_party_id, p_cust_account_id, p_customer_site_use_id);
647
648 l_beg_ar := COMP_REM_REC(to_date('01/01/1952','MM/DD/YYYY'), TRUNC(add_months(sysdate, -12)) - 1,
649 p_party_id, p_cust_account_id, p_customer_site_use_id);
650
651 l_end_ar := COMP_REM_REC(to_date('01/01/1952','MM/DD/YYYY'), TRUNC(sysdate),
652 p_party_id, p_cust_account_id, p_customer_site_use_id);
653
654 if ( nvl(l_sales,0) = 0 ) then
655 l_dso := 0;
656 else
657 l_dso := (((l_beg_ar + l_end_ar)/2)/l_sales)*(TRUNC(sysdate) - TRUNC(add_months(sysdate, -12)));
658 end if;
659
660 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
661 --RETURN TO_CHAR(ROUND(nvl(l_dso,0), 0));
662 l_num_val := ROUND(nvl(l_dso,0), 0);
663 l_char_val := RTRIM(TO_CHAR(l_num_val));
664 RETURN l_char_val;
665 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
666
667 END GET_TRUE_DSO;
668
669 FUNCTION GET_CONV_DSO(p_party_id IN NUMBER,
670 p_cust_account_id IN NUMBER,
671 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
672 l_conv_dso NUMBER;
673 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
674 l_num_val NUMBER;
675 l_char_val VARCHAR2(1000);
676 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
677
678 BEGIN
679 IF p_party_id IS NOT NULL THEN
680 SELECT
681 ROUND(
682 ( (SUM( DECODE(PS.CLASS,
683 'INV', 1,
684 'DM', 1,
685 'CB', 1,
686 'DEP', 1,
687 'BR', 1,
688 0)
689 * PS.ACCTD_AMOUNT_DUE_REMAINING
690 ) * MAX(SP.CER_DSO_DAYS)
691 )
692 / DECODE(
693 SUM( DECODE(PS.CLASS,
694 'INV', 1,
695 'DM', 1,
696 'DEP', 1,
697 0)
698 * DECODE(SIGN (TRUNC(SYSDATE) - PS.TRX_DATE - SP.CER_DSO_DAYS),
699 -1, (PS.AMOUNT_DUE_ORIGINAL + NVL(PS.AMOUNT_ADJUSTED,0)) * NVL(PS.EXCHANGE_RATE, 1 ),
700 0)) ,
701 0, 1,
702 SUM( DECODE(PS.CLASS,
703 'INV', 1,
704 'DM', 1,
705 'DEP', 1,
706 0)
707 * DECODE(SIGN (TRUNC(SYSDATE) - PS.TRX_DATE - SP.CER_DSO_DAYS),
708 -1, (PS.AMOUNT_DUE_ORIGINAL + NVL(PS.AMOUNT_ADJUSTED,0)) * NVL(PS.EXCHANGE_RATE, 1 ),
709 0) )
710 )
711 ), 0) /* DSO */
712 INTO l_conv_dso
713 FROM ar_system_parameters sp,
714 hz_cust_accounts cust_acct,
715 ar_payment_schedules ps
716 WHERE ps.customer_id = cust_acct.cust_account_id
717 AND cust_acct.party_id = p_party_id
718 -- Begin fix bug #5261855-jypark-06/16/2006-add addtional condition for performance
719 AND ps.status = 'OP'
720 -- End fix bug #5261855-jypark-06/16/2006-add addtional condition for performance
721 AND NVL(ps.receipt_confirmed_flag,'Y') = 'Y';
722 ELSIF p_cust_account_id IS NOT NULL THEN
723 SELECT
724 ROUND(
725 ( (SUM( DECODE(PS.CLASS,
726 'INV', 1,
727 'DM', 1,
728 'CB', 1,
729 'DEP', 1,
730 'BR', 1,
731 0)
732 * PS.ACCTD_AMOUNT_DUE_REMAINING
733 ) * MAX(SP.CER_DSO_DAYS)
734 )
735 / DECODE(
736 SUM( DECODE(PS.CLASS,
737 'INV', 1,
738 'DM', 1,
739 'DEP', 1,
740 0)
741 * DECODE(SIGN (TRUNC(SYSDATE) - PS.TRX_DATE - SP.CER_DSO_DAYS),
742 -1, (PS.AMOUNT_DUE_ORIGINAL + NVL(PS.AMOUNT_ADJUSTED,0)) * NVL(PS.EXCHANGE_RATE, 1 ),
743 0)) ,
744 0, 1,
745 SUM( DECODE(PS.CLASS,
746 'INV', 1,
747 'DM', 1,
748 'DEP', 1,
749 0)
750 * DECODE(SIGN (TRUNC(SYSDATE) - PS.TRX_DATE - SP.CER_DSO_DAYS),
751 -1, (PS.AMOUNT_DUE_ORIGINAL + NVL(PS.AMOUNT_ADJUSTED,0)) * NVL(PS.EXCHANGE_RATE, 1 ),
752 0) )
753 )
754 ), 0) /* DSO */
755 INTO l_conv_dso
756 FROM ar_system_parameters sp,
757 ar_payment_schedules ps
758 WHERE ps.customer_id = p_cust_account_id
759 -- Begin fix bug #5261855-jypark-06/16/2006-add addtional condition for performance
760 AND ps.status = 'OP'
761 -- End fix bug #5261855-jypark-06/16/2006-add addtional condition for performance
762 AND NVL(ps.receipt_confirmed_flag,'Y') = 'Y';
763
764 ELSIF p_customer_site_use_id IS NOT NULL THEN
765 SELECT
766 ROUND(
767 ( (SUM( DECODE(PS.CLASS,
768 'INV', 1,
769 'DM', 1,
770 'CB', 1,
771 'DEP', 1,
772 'BR', 1,
773 0)
774 * PS.ACCTD_AMOUNT_DUE_REMAINING
775 ) * MAX(SP.CER_DSO_DAYS)
776 )
777 / DECODE(
778 SUM( DECODE(PS.CLASS,
779 'INV', 1,
780 'DM', 1,
781 'DEP', 1,
782 0)
783 * DECODE(SIGN (TRUNC(SYSDATE) - PS.TRX_DATE - SP.CER_DSO_DAYS),
784 -1, (PS.AMOUNT_DUE_ORIGINAL + NVL(PS.AMOUNT_ADJUSTED,0)) * NVL(PS.EXCHANGE_RATE, 1 ),
785 0)) ,
786 0, 1,
787 SUM( DECODE(PS.CLASS,
788 'INV', 1,
789 'DM', 1,
790 'DEP', 1,
791 0)
792 * DECODE(SIGN (TRUNC(SYSDATE) - PS.TRX_DATE - SP.CER_DSO_DAYS),
793 -1, (PS.AMOUNT_DUE_ORIGINAL + NVL(PS.AMOUNT_ADJUSTED,0)) * NVL(PS.EXCHANGE_RATE, 1 ),
794 0) )
795 )
796 ), 0) /* DSO */
797 INTO l_conv_dso
798 FROM ar_system_parameters sp,
799 ar_payment_schedules ps
800 WHERE ps.customer_site_use_id = p_customer_site_use_id
801 -- Begin fix bug #5261855-jypark-06/16/2006-add addtional condition for performance
802 AND ps.status = 'OP'
803 -- End fix bug #5261855-jypark-06/16/2006-add addtional condition for performance
804 AND NVL(ps.receipt_confirmed_flag,'Y') = 'Y';
805
806 END IF;
807
808 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
809 --RETURN TO_CHAR(ROUND(NVL(l_conv_dso, 0)));
810 l_num_val := ROUND(NVL(l_conv_dso, 0));
811 l_char_val := RTRIM(TO_CHAR(l_num_val));
812 RETURN l_char_val;
813 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
814
815
816 EXCEPTION
817 WHEN NO_DATA_FOUND THEN RETURN(TO_CHAR(0));
818 END GET_CONV_DSO;
819
820 FUNCTION GET_NSF_STOP_PMT_COUNT(p_party_id IN NUMBER,
821 p_cust_account_id IN NUMBER,
822 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
823 l_nsf_stop_payment_count NUMBER;
824 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
825 l_num_val NUMBER;
826 l_char_val VARCHAR2(1000);
827 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
828
829 BEGIN
830
831 IF p_party_id IS NOT NULL THEN
832 SELECT COUNT(cr.cash_receipt_id) NSF_STOP_PAYMENT_COUNT
833 INTO l_nsf_stop_payment_count
834 FROM ar_cash_receipts cr,
835 ar_cash_receipt_history crh,
836 hz_cust_accounts ca
837 WHERE cr.cash_receipt_id = crh.cash_receipt_id
838 AND crh.current_record_flag = 'Y'
839 AND crh.status = 'REVERSED'
840 -- BEGIN fix bug #4483830--20050714-jypark-change query for NSF info
841 -- AND cr.status = 'REV'
842 -- AND cr.status = 'NSF' -- bug 5613019
843 AND cr.status in ('NSF','REV') -- bug 5613019
844 -- END fix bug #4483830--20050714-jypark-change query for NSF info
845 --AND cr.reversal_category = 'NSF' -- big 5613019
846 AND cr.reversal_category in ('NSF','REV') -- bug 5613019
847 AND cr.reversal_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
848 AND cr.pay_from_customer = ca.cust_account_id
849 AND ca.party_id = p_party_id;
850 ELSIF p_cust_account_id IS NOT NULL THEN
851 SELECT COUNT(cr.cash_receipt_id) NSF_STOP_PAYMENT_COUNT
852 INTO l_nsf_stop_payment_count
853 FROM ar_cash_receipts cr,
854 ar_cash_receipt_history crh
855 WHERE cr.cash_receipt_id = crh.cash_receipt_id
856 AND crh.current_record_flag = 'Y'
857 AND crh.status = 'REVERSED'
858 -- BEGIN fix bug #4483830--20050714-jypark-change query for NSF info
859 -- AND cr.status = 'REV'
860 -- AND cr.status = 'NSF' --bug 5613019
861 AND cr.status in ('NSF','REV') -- bug 5613019
862 -- END fix bug #4483830--20050714-jypark-change query for NSF info
863 --AND cr.reversal_category = 'NSF' -- bug 5613019
864 and cr.reversal_category in ('NSF','REV') -- bug 5613019
865 AND cr.reversal_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
866 AND cr.pay_from_customer = p_cust_account_id;
867 ELSIF p_customer_site_use_id IS NOT NULL THEN
868 SELECT COUNT(cr.cash_receipt_id) NSF_STOP_PAYMENT_COUNT
869 INTO l_nsf_stop_payment_count
870 FROM ar_cash_receipts cr,
871 ar_cash_receipt_history crh
872 WHERE cr.cash_receipt_id = crh.cash_receipt_id
873 AND crh.current_record_flag = 'Y'
874 AND crh.status = 'REVERSED'
875 -- BEGIN fix bug #4483830--20050714-jypark-change query for NSF info
876 -- AND cr.status = 'REV'
877 -- AND cr.status = 'NSF' --bug 5613019
878 and cr.status in ('NSF','REV') -- bug 5613019
879 -- END fix bug #4483830--20050714-jypark-change query for NSF info
880 -- AND cr.reversal_category = 'NSF' -- bug 5613019
881 and cr.reversal_category in ('NSF','REV') -- bug 5613019
882 AND cr.reversal_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
883 AND cr.customer_site_use_id = p_customer_site_use_id;
884 END IF;
885
886 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
887 --RETURN TO_CHAR(TRUNC(nvl(l_nsf_stop_payment_count, 0)));
888 l_num_val := TRUNC(nvl(l_nsf_stop_payment_count, 0));
889 l_char_val := RTRIM(TO_CHAR(l_num_val));
890 RETURN l_char_val;
891 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
892
893 EXCEPTION
894 WHEN NO_DATA_FOUND THEN RETURN(0);
895 END GET_NSF_STOP_PMT_COUNT;
896
897 FUNCTION GET_NSF_STOP_PMT_AMOUNT(p_party_id IN NUMBER,
898 p_cust_account_id IN NUMBER,
899 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
900 l_nsf_stop_payment_amount NUMBER;
901 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
902 l_num_val NUMBER;
903 l_char_val VARCHAR2(1000);
904 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
905
906 BEGIN
907
908 IF p_party_id IS NOT NULL THEN
909 SELECT SUM(cr.amount) NSF_STOP_PAYMENT_AMOUNT
910 INTO l_nsf_stop_payment_amount
911 FROM ar_cash_receipts_all cr,
912 ar_cash_receipt_history_all crh,
913 hz_cust_accounts ca
914 WHERE cr.cash_receipt_id = crh.cash_receipt_id
915 AND crh.current_record_flag = 'Y'
916 AND crh.status = 'REVERSED'
917 -- BEGIN fix bug #4483830--20050714-jypark-change query for NSF info
918 -- AND cr.status = 'REV'
919 -- AND cr.status = 'NSF' -- bug 5613019
920 and cr.status in ('NSF','REV') -- bug 5613019
921 -- END fix bug #4483830--20050714-jypark-change query for NSF info
922 -- AND cr.reversal_category = 'NSF' --bug 5613019
923 and cr.reversal_category in ('NSF','REV') -- bug 5613019
924 AND cr.reversal_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
925 AND cr.pay_from_customer = ca.cust_account_id
926 AND ca.party_id = p_party_id;
927 ELSIF p_cust_account_id IS NOT NULL THEN
928 SELECT SUM(cr.amount) NSF_STOP_PAYMENT_AMOUNT
929 INTO l_nsf_stop_payment_amount
930 FROM ar_cash_receipts_all cr,
931 ar_cash_receipt_history_all crh
932 WHERE cr.cash_receipt_id = crh.cash_receipt_id
933 AND crh.current_record_flag = 'Y'
934 AND crh.status = 'REVERSED'
935 -- BEGIN fix bug #4483830--20050714-jypark-change query for NSF info
936 -- AND cr.status = 'REV'
937 -- AND cr.status = 'NSF' -- bug 5613019
938 and cr.status in ('NSF','REV') -- bug 5613019
939 -- END fix bug #4483830--20050714-jypark-change query for NSF info
940 -- AND cr.reversal_category = 'NSF' --bug 5613019
941 and cr.reversal_category in ('NSF','REV') -- bug 5613019
942 AND cr.reversal_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
943 AND cr.pay_from_customer = p_cust_account_id;
944 ELSIF p_customer_site_use_id IS NOT NULL THEN
945 SELECT SUM(cr.amount) NSF_STOP_PAYMENT_AMOUNT
946 INTO l_nsf_stop_payment_amount
947 FROM ar_cash_receipts_all cr,
948 ar_cash_receipt_history_all crh
949 WHERE cr.cash_receipt_id = crh.cash_receipt_id
950 AND crh.current_record_flag = 'Y'
951 AND crh.status = 'REVERSED'
952 -- BEGIN fix bug #4483830--20050714-jypark-change query for NSF info
953 -- AND cr.status = 'REV'
954 -- AND cr.status = 'NSF' -- bug5613019
955 and cr.status in ('NSF','REV') -- bug 5613019
956 -- END fix bug #4483830--20050714-jypark-change query for NSF info
957 -- AND cr.reversal_category = 'NSF' -- bug 5613019
958 and cr.reversal_category in ('NSF','REV') -- bug 5613019
959 AND cr.reversal_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
960 AND cr.customer_site_use_id = p_customer_site_use_id;
961 END IF;
962
963 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
964 --RETURN TO_CHAR(nvl(l_nsf_stop_payment_amount, 0), fnd_currency.get_format_mask(g_curr_rec.base_currency, 30));
965 l_num_val := nvl(l_nsf_stop_payment_amount, 0);
966 l_char_val := RTRIM(TO_CHAR(l_num_val,fnd_currency.get_format_mask(g_curr_rec.base_currency, 30)));
967 RETURN l_char_val;
968 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
969
970 EXCEPTION
971 WHEN NO_DATA_FOUND THEN RETURN(0);
972 END GET_NSF_STOP_PMT_AMOUNT;
973
974 FUNCTION GET_SALES(p_party_id IN NUMBER,
975 p_cust_account_id IN NUMBER,
976 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
977 l_sales NUMBER;
978 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
979 l_num_val NUMBER;
980 l_char_val VARCHAR2(1000);
981 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
982
983 BEGIN
984
985 l_sales := COMP_TOT_REC(TRUNC(add_months(sysdate, -12)), TRUNC(sysdate),
986 p_party_id, p_cust_account_id, p_customer_site_use_id);
987
988 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
989 --RETURN(TO_CHAR(NVL(l_sales, 0), fnd_currency.get_format_mask(g_curr_rec.base_currency, 50)));
990 l_num_val := NVL(l_sales, 0);
991 l_char_val := RTRIM(TO_CHAR(l_num_val, fnd_currency.get_format_mask(g_curr_rec.base_currency, 50)));
992 RETURN l_char_val;
993 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
994
995 END GET_SALES;
996
997
998 FUNCTION GET_DEDUCTION(p_party_id IN NUMBER,
999 p_cust_account_id IN NUMBER,
1000 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
1001 l_adj NUMBER;
1002 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1003 l_num_val NUMBER;
1004 l_char_val VARCHAR2(1000);
1005 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1006
1007 BEGIN
1008 IF p_party_id IS NOT NULL THEN
1009 SELECT
1010 sum( nvl(adj.acctd_amount,0))
1011 INTO l_adj
1012 FROM ar_payment_schedules ps, ar_adjustments adj, hz_cust_accounts ca
1013 WHERE ps.class in ('INV', 'DM', 'CB', 'DEP' )
1014 AND ps.payment_schedule_id <> -1
1015 AND ps.gl_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
1016 AND ps.customer_id = ca.cust_account_id
1017 AND ca.party_id = p_party_id
1018 AND adj.payment_schedule_id = ps.payment_schedule_id
1019 AND adj.status = 'A'
1020 AND adj.gl_date <= TRUNC(sysdate);
1021 ELSIF p_cust_account_id IS NOT NULL THEN
1022 SELECT
1023 sum( nvl(adj.acctd_amount,0))
1024 INTO l_adj
1025 FROM ar_payment_schedules ps, ar_adjustments adj
1026 WHERE ps.class in ('INV', 'DM', 'CB', 'DEP' )
1027 AND ps.payment_schedule_id <> -1
1028 AND ps.gl_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
1029 AND ps.customer_id = p_cust_account_id
1030 AND adj.payment_schedule_id = ps.payment_schedule_id
1031 AND adj.status = 'A'
1032 AND adj.gl_date <= TRUNC(sysdate);
1033 ELSIF p_customer_site_use_id IS NOT NULL THEN
1034 SELECT
1035 sum( nvl(adj.acctd_amount,0))
1036 INTO l_adj
1037 FROM ar_payment_schedules ps, ar_adjustments adj
1038 WHERE ps.class in ('INV', 'DM', 'CB', 'DEP' )
1039 AND ps.payment_schedule_id <> -1
1040 AND ps.gl_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate)
1041 AND ps.customer_site_use_id = p_customer_site_use_id
1042 AND adj.payment_schedule_id = ps.payment_schedule_id
1043 AND adj.status = 'A'
1044 AND adj.gl_date <= TRUNC(sysdate);
1045 END IF;
1046
1047 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1048 --RETURN(TO_CHAR(nvl(l_adj, 0), fnd_currency.get_format_mask(g_curr_rec.base_currency, 50)));
1049 l_num_val := nvl(l_adj, 0);
1050 l_char_val := RTRIM(TO_CHAR(l_num_val, fnd_currency.get_format_mask(g_curr_rec.base_currency, 50)));
1051 RETURN l_char_val;
1052 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1053
1054 EXCEPTION
1055 WHEN NO_DATA_FOUND THEN RETURN(0);
1056 END GET_DEDUCTION;
1057
1058 /*-------------------------------------------------------------------------+
1059 | PUBLIC FUNCTION |
1060 | |
1061 | COMP_TOT_REC |
1062 | |
1063 | DESCRIPTION |
1064 | Given a date range, this function will compute the total original |
1065 | receivables within the date range |
1066 | If function is called with a null start date, then the function |
1067 | RETURNs total original receivables as of p_end_date |
1068 | |
1069 | REQUIRES |
1070 | start_date |
1071 | end_date |
1072 | |
1073 | OPTIONAL |
1074 | |
1075 | RETURNS |
1076 | total original receivables |
1077 | |
1078 | NOTES |
1079 | |
1080 | EXAMPLE |
1081 | |
1082 | MODIFICATION HISTORY |
1083 | |
1084 | |
1085 +-------------------------------------------------------------------------*/
1086
1087 FUNCTION COMP_TOT_REC(p_start_date IN DATE,
1088 p_end_date IN DATE,
1089 p_party_id IN NUMBER,
1090 p_cust_account_id IN NUMBER,
1091 p_customer_site_use_id IN NUMBER) RETURN NUMBER AS
1092 l_tot_rec NUMBER;
1093 l_temp_start DATE;
1094
1095 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1096 l_num_val NUMBER;
1097 l_char_val VARCHAR2(1000);
1098 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1099
1100 BEGIN
1101
1102 if p_start_date is null then
1103 -- default date to earliest date to pick up everything prior to
1104 -- p_end_date
1105 l_temp_start := to_date('01/01/1952','MM/DD/YYYY');
1106 else
1107 l_temp_start := p_start_date;
1108 end if;
1109
1110 IF p_party_id IS NOT NULL THEN
1111 SELECT SUM(arpcurr.functional_amount(
1112 ps.amount_due_original,
1113 g_curr_rec.base_currency,
1114 nvl(ps.exchange_rate,1),
1115 g_curr_rec.base_precision,
1116 g_curr_rec.base_min_acc_unit) +
1117 GET_ADJ_FOR_TOT_REC(ps.payment_schedule_id,p_end_date))
1118 INTO l_tot_rec
1119 FROM ar_payment_schedules ps,
1120 hz_cust_accounts ca
1121 WHERE ps.class in ('INV', 'DM', 'CB', 'DEP' )
1122 AND ps.payment_schedule_id <> -1
1123 AND ps.gl_date BETWEEN l_temp_start AND p_end_date
1124 AND ps.customer_id = ca.cust_account_id
1125 AND ca.party_id = p_party_id;
1126 ELSIF p_cust_account_id IS NOT NULL THEN
1127 SELECT SUM(arpcurr.functional_amount(
1128 ps.amount_due_original,
1129 g_curr_rec.base_currency,
1130 nvl(ps.exchange_rate,1),
1131 g_curr_rec.base_precision,
1132 g_curr_rec.base_min_acc_unit) +
1133 GET_ADJ_FOR_TOT_REC(ps.payment_schedule_id,p_end_date))
1134 INTO l_tot_rec
1135 FROM ar_payment_schedules ps
1136 WHERE ps.class in ('INV', 'DM', 'CB', 'DEP' )
1137 AND ps.payment_schedule_id <> -1
1138 AND ps.gl_date BETWEEN l_temp_start AND p_end_date
1139 AND ps.customer_id = p_cust_account_id;
1140 ELSIF p_customer_site_use_id IS NOT NULL THEN
1141 SELECT SUM(arpcurr.functional_amount(
1142 ps.amount_due_original,
1143 g_curr_rec.base_currency,
1144 nvl(ps.exchange_rate,1),
1145 g_curr_rec.base_precision,
1146 g_curr_rec.base_min_acc_unit) +
1147 GET_ADJ_FOR_TOT_REC(ps.payment_schedule_id,p_end_date))
1148 INTO l_tot_rec
1149 FROM ar_payment_schedules ps
1150 WHERE ps.class in ('INV', 'DM', 'CB', 'DEP' )
1151 AND ps.payment_schedule_id <> -1
1152 AND ps.gl_date BETWEEN l_temp_start AND p_end_date
1153 AND ps.customer_site_use_id = p_customer_site_use_id;
1154 END IF;
1155
1156 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1157 --RETURN(nvl(l_tot_rec,0));
1158 l_num_val := nvl(l_tot_rec, 0);
1159 RETURN l_num_val;
1160 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1161
1162 EXCEPTION
1163 WHEN NO_DATA_FOUND THEN RETURN(0);
1164 END COMP_TOT_REC;
1165
1166
1167 /*-------------------------------------------------------------------------+
1168 | PUBLIC FUNCTION |
1169 | |
1170 | COMP_REM_REC |
1171 | |
1172 | DESCRIPTION |
1173 | Given a date range, this function will compute the total remaining |
1174 | receivables within the date range |
1175 | |
1176 | REQUIRES |
1177 | start_date |
1178 | end_date |
1179 | |
1180 | OPTIONAL |
1181 | |
1182 | RETURNS |
1183 | total remaining receivables |
1184 | |
1185 | NOTES |
1186 | |
1187 | EXAMPLE |
1188 | |
1189 | MODIFICATION HISTORY |
1190 | there is no record found |
1191 +-------------------------------------------------------------------------*/
1192
1193 FUNCTION COMP_REM_REC(p_start_date IN DATE,
1194 p_end_date IN DATE,
1195 p_party_id IN NUMBER,
1196 p_cust_account_id IN NUMBER,
1197 p_customer_site_use_id IN NUMBER) RETURN NUMBER IS
1198
1199 l_rem_sales NUMBER;
1200 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1201 l_num_val NUMBER;
1202 l_char_val VARCHAR2(1000);
1203 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1204
1205 BEGIN
1206
1207 l_rem_sales := 0;
1208
1209 IF p_party_id IS NOT NULL THEN
1210 -- compute Remaining balance for given date range
1211
1212 SELECT sum(GET_APPS_TOTAL(ps.payment_schedule_id,p_end_date) -
1213 GET_ADJ_TOTAL(ps.payment_schedule_id,p_end_date) +
1214 nvl(ps.acctd_amount_due_remaining,0))
1215 INTO l_rem_sales
1216 FROM ar_payment_schedules ps,
1217 hz_cust_accounts ca
1218 WHERE ps.gl_date between p_start_date and p_end_date
1219 AND ps.class in ('INV','DEP','DM','CB')
1220 AND ps.gl_date_closed > p_end_date
1221 AND ps.customer_id = ca.cust_account_id
1222 -- Begin fix bug #4949598-JYPARK-2/15/2006-add condition for performance
1223 AND ps.status = 'OP'
1224 -- End fix bug #4949598-JYPARK-2/15/2006-add condition for performance
1225 AND ca.party_id = p_party_id;
1226 ELSIF p_cust_account_id IS NOT NULL THEN
1227 -- compute Remaining balance for given date range
1228
1229 SELECT sum(GET_APPS_TOTAL(ps.payment_schedule_id,p_end_date) -
1230 GET_ADJ_TOTAL(ps.payment_schedule_id,p_end_date) +
1231 nvl(ps.acctd_amount_due_remaining,0))
1232 INTO l_rem_sales
1233 FROM ar_payment_schedules ps
1234 WHERE ps.gl_date between p_start_date and p_end_date
1235 AND ps.class in ('INV','DEP','DM','CB')
1236 AND ps.gl_date_closed > p_end_date
1237 -- Begin fix bug #4949598-JYPARK-2/15/2006-add condition for performance
1238 AND ps.status = 'OP'
1239 -- End fix bug #4949598-JYPARK-2/15/2006-add condition for performance
1240 AND ps.customer_id = p_cust_account_id;
1241 ELSIF p_customer_site_use_id IS NOT NULL THEN
1242 -- compute Remaining balance for given date range
1243
1244 SELECT sum(GET_APPS_TOTAL(ps.payment_schedule_id,p_end_date) -
1245 GET_ADJ_TOTAL(ps.payment_schedule_id,p_end_date) +
1246 nvl(ps.acctd_amount_due_remaining,0))
1247 INTO l_rem_sales
1248 FROM ar_payment_schedules ps
1249 WHERE ps.gl_date between p_start_date and p_end_date
1250 AND ps.class in ('INV','DEP','DM','CB')
1251 AND ps.gl_date_closed > p_end_date
1252 -- Begin fix bug #4949598-JYPARK-2/15/2006-add condition for performance
1253 AND ps.status = 'OP'
1254 -- End fix bug #4949598-JYPARK-2/15/2006-add condition for performance
1255 AND ps.customer_site_use_id = p_customer_site_use_id;
1256 END IF;
1257
1258 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1259 l_num_val := (NVL(l_rem_sales,0));
1260 RETURN l_num_val;
1261 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1262
1263 EXCEPTION
1264 WHEN NO_DATA_FOUND THEN RETURN(0);
1265 END COMP_REM_REC;
1266
1267 /*-------------------------------------------------------------------------+
1268 | PUBLIC FUNCTION |
1269 | |
1270 | comp_curr_rec |
1271 | |
1272 | DESCRIPTION |
1273 | Given a date range, this function will compute the total current |
1274 | receivables within the date range |
1275 | |
1276 | REQUIRES |
1277 | start_date |
1278 | end_date |
1279 | |
1280 | OPTIONAL |
1281 | |
1282 | RETURNS |
1283 | total current receivables |
1284 | |
1285 | NOTES |
1286 | |
1287 | EXAMPLE |
1288 | |
1289 | MODIFICATION HISTORY |
1290 +-------------------------------------------------------------------------*/
1291
1292 FUNCTION COMP_CURR_REC(p_start_date IN DATE,
1293 p_end_date IN DATE,
1294 p_party_id IN NUMBER,
1295 p_cust_account_id IN NUMBER,
1296 p_customer_site_use_id IN NUMBER) RETURN NUMBER IS
1297
1298 l_curr_rec NUMBER;
1299 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1300 l_num_val NUMBER;
1301 l_char_val VARCHAR2(1000);
1302 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1303
1304 BEGIN
1305
1306 l_curr_rec := 0;
1307
1308 IF p_party_id IS NOT NULL THEN
1309 -- compute Remaining balance for given date range
1310
1311 SELECT sum(nvl(ps.acctd_amount_due_remaining,0))
1312 INTO l_curr_rec
1313 FROM ar_payment_schedules ps,
1314 hz_cust_accounts ca
1315 WHERE ps.gl_date between p_start_date and p_end_date
1316 AND ps.class in ('INV','DEP','DM','CB')
1317 AND ps.gl_date_closed > p_end_date
1318 AND ps.status = 'OP'
1319 AND ps.customer_id = ca.cust_account_id
1320 AND ca.party_id = p_party_id
1321 AND ps.due_date > p_end_date;
1322 ELSIF p_cust_account_id IS NOT NULL THEN
1323 -- compute Remaining balance for given date range
1324
1325 SELECT sum(nvl(ps.acctd_amount_due_remaining,0))
1326 INTO l_curr_rec
1327 FROM ar_payment_schedules ps
1328 WHERE ps.gl_date between p_start_date and p_end_date
1329 AND ps.class in ('INV','DEP','DM','CB')
1330 AND ps.gl_date_closed > p_end_date
1331 AND ps.status = 'OP'
1332 AND ps.customer_id = p_cust_account_id
1333 AND ps.due_date > p_end_date;
1334 ELSIF p_customer_site_use_id IS NOT NULL THEN
1335 -- compute Remaining balance for given date range
1336
1337 SELECT sum(nvl(ps.acctd_amount_due_remaining,0))
1338 INTO l_curr_rec
1339 FROM ar_payment_schedules ps
1340 WHERE ps.gl_date between p_start_date and p_end_date
1341 AND ps.class in ('INV','DEP','DM','CB')
1342 AND ps.gl_date_closed > p_end_date
1343 AND ps.status = 'OP'
1344 AND ps.customer_site_use_id = p_customer_site_use_id
1345 AND ps.due_date > p_end_date;
1346 END IF;
1347
1348 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1349 --RETURN (NVL(l_curr_rec,0));
1350 l_num_val := (NVL(l_curr_rec,0));
1351 RETURN l_num_val;
1352 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1353
1354 EXCEPTION
1355 WHEN NO_DATA_FOUND THEN RETURN(0);
1356 END COMP_CURR_REC;
1357
1358
1359 /*========================================================================
1360 | PRIVATE FUNCTION GET_APPS_TOTAL
1361 |
1362 | DESCRIPTION
1363 | Calculates the total applications against a payment_schedule
1364 |
1365 =======================================================================*/
1366
1367 FUNCTION GET_APPS_TOTAL(p_payment_schedule_id IN NUMBER,
1368 p_to_date IN DATE) RETURN NUMBER IS
1369 l_apps_tot NUMBER;
1370
1371 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1372 l_num_val NUMBER;
1373 l_char_val VARCHAR2(1000);
1374 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1375
1376 BEGIN
1377 SELECT sum( nvl(ra.acctd_amount_applied_to,0) +
1378 nvl(ra.acctd_earned_discount_taken,0) +
1379 nvl(ra.acctd_unearned_discount_taken,0))
1380 INTO l_apps_tot
1381 FROM ar_receivable_applications ra
1382 WHERE ra.applied_payment_schedule_id = p_payment_schedule_id
1383 AND ra.status = 'APP'
1384 AND nvl(ra.confirmed_flag,'Y') = 'Y'
1385 AND ra.gl_date <= p_to_date;--Added for Bug 8201317 14-Jun-2010 barathsr
1386
1387 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1388 --RETURN NVL(l_apps_tot,0);
1389 l_num_val := NVL(l_apps_tot,0);
1390 RETURN l_num_val;
1391 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1392
1393 EXCEPTION
1394 WHEN NO_DATA_FOUND THEN RETURN(0);
1395
1396 END GET_APPS_TOTAL;
1397
1398 /*========================================================================
1399 | PRIVATE FUNCTION GET_ADJ_TOTAL
1400 |
1401 | DESCRIPTION
1402 | Calculates the total adjustments against a payment_schedule
1403 |
1404 *=======================================================================*/
1405
1406 FUNCTION GET_ADJ_TOTAL(p_payment_schedule_id IN NUMBER,
1407 p_to_date IN DATE) RETURN NUMBER IS
1408 l_adj_tot NUMBER;
1409
1410 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1411 l_num_val NUMBER;
1412 l_char_val VARCHAR2(1000);
1413 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1414
1415 BEGIN
1416 SELECT sum( nvl(a.acctd_amount,0))
1417 INTO l_adj_tot
1418 FROM ar_adjustments a
1419 WHERE a.payment_schedule_id = p_payment_schedule_id
1420 AND a.status = 'A'
1421 AND a.gl_date <= p_to_date;--Added for Bug 8201317 14-Jun-2010 barathsr
1422
1423 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1424 --RETURN nvl(l_adj_tot,0);
1425 l_num_val := nvl(l_adj_tot,0);
1426 RETURN l_num_val;
1427 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1428
1429 EXCEPTION
1430 WHEN NO_DATA_FOUND THEN RETURN(0);
1431
1432 END GET_ADJ_TOTAL;
1433
1434 FUNCTION GET_ADJ_FOR_TOT_REC(p_payment_schedule_id IN NUMBER,
1435 p_to_date IN DATE) RETURN NUMBER IS
1436 l_adj_for_tot_rec NUMBER;
1437
1438 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1439 l_num_val NUMBER;
1440 l_char_val VARCHAR2(1000);
1441 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1442
1443 BEGIN
1444 SELECT sum( nvl(a.acctd_amount,0))
1445 INTO l_adj_for_tot_rec
1446 FROM ar_adjustments a
1447 WHERE a.payment_schedule_id = p_payment_schedule_id
1448 AND a.status = 'A'
1449 AND a.gl_date <= p_to_date;
1450
1451 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1452 --RETURN nvl(l_adj_for_tot_rec,0);
1453 l_num_val := nvl(l_adj_for_tot_rec,0);
1454 RETURN l_num_val;
1455 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1456
1457 EXCEPTION
1458 WHEN NO_DATA_FOUND THEN RETURN(0);
1459
1460 END GET_ADJ_FOR_TOT_REC;
1461
1462 FUNCTION GET_CREDIT_LIMIT(p_party_id IN NUMBER,
1463 p_cust_account_id IN NUMBER,
1464 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
1465 l_credit_limit NUMBER;
1466 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1467 l_num_val NUMBER;
1468 l_char_val VARCHAR2(1000);
1469 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1470 -- Start for the bug#8630157 by PNAVEENK
1471 l_conversion_type VARCHAR(30);
1472 BEGIN
1473 l_conversion_type := NVL(FND_PROFILE.VALUE('IEX_EXCHANGE_RATE_TYPE'), 'Corporate');
1474 IF p_party_id IS NOT NULL THEN
1475 -- Begin fix bug #6014218-31-May-07 gnramasa -return null when credit limits value is null instead of -2
1476 --SELECT SUM(gl_currency_api.convert_amount_sql(prof_amt.currency_code, g_curr_rec.base_currency,
1477 SELECT SUM(DECODE(prof_amt.overall_credit_limit, NULL, NULL, gl_currency_api.convert_amount_sql(prof_amt.currency_code, g_curr_rec.base_currency,
1478 -- End fix bug #6014218-31-May-07 gnramasa -return null when credit limits value is null instead of -2
1479 -- sysdate, cm_opt.default_exchange_rate_type, prof_amt.overall_credit_limit)))
1480 sysdate, l_conversion_type, prof_amt.overall_credit_limit)))
1481 INTO l_credit_limit
1482 FROM hz_customer_profiles prof, hz_cust_profile_amts prof_amt
1483 -- ar_cmgt_setup_options cm_opt
1484 WHERE prof.party_id = p_party_id
1485 AND prof.site_use_id IS NULL
1486 AND prof.status = 'A'
1487 AND prof.cust_account_profile_id = prof_amt.cust_account_profile_id
1488 AND prof_amt.cust_account_id = prof.cust_account_id
1489 --Begin-fix bug#4610424-JYPARK-09/16/2005-exclude credir limit for account
1490 AND prof.cust_account_id = -1
1491 --End-fix bug#4610424-JYPARK-09/16/2005-exclude credir limit for account
1492 AND prof_amt.site_use_id IS NULL;
1493
1494 ELSIF p_cust_account_id IS NOT NULL THEN
1495 -- Begin fix bug #6014218-31-May-07 gnramasa -return null when credit limits value is null instead of -2
1496 --SELECT SUM(gl_currency_api.convert_amount_sql(prof_amt.currency_code, g_curr_rec.base_currency,
1497 SELECT SUM(DECODE(prof_amt.overall_credit_limit, NULL, NULL, gl_currency_api.convert_amount_sql(prof_amt.currency_code, g_curr_rec.base_currency,
1498 -- End fix bug #6014218-31-May-07 gnramasa -return null when credit limits value is null instead of -2
1499 -- sysdate, cm_opt.default_exchange_rate_type, prof_amt.overall_credit_limit)))
1500 sysdate, l_conversion_type, prof_amt.overall_credit_limit)))
1501 INTO l_credit_limit
1502 FROM hz_customer_profiles prof, hz_cust_profile_amts prof_amt
1503 -- ar_cmgt_setup_options cm_opt
1504 WHERE prof.cust_account_id = p_cust_account_id
1505 AND prof.site_use_id IS NULL
1506 AND prof.status = 'A'
1507 AND prof.cust_account_profile_id = prof_amt.cust_account_profile_id
1508 AND prof_amt.cust_account_id = p_cust_account_id
1509 AND prof_amt.site_use_id IS NULL;
1510 ELSIF p_customer_site_use_id IS NOT NULL THEN
1511 -- Begin fix bug #6014218-31-May-07 gnramasa -return null when credit limits value is null instead of -2
1512 --SELECT SUM(gl_currency_api.convert_amount_sql(prof_amt.currency_code, g_curr_rec.base_currency,
1513 SELECT SUM(DECODE(prof_amt.overall_credit_limit, NULL, NULL, gl_currency_api.convert_amount_sql(prof_amt.currency_code, g_curr_rec.base_currency,
1514 -- End fix bug #6014218-31-May-07 gnramasa -return null when credit limits value is null instead of -2
1515 -- sysdate, cm_opt.default_exchange_rate_type, prof_amt.overall_credit_limit)))
1516 sysdate, l_conversion_type, prof_amt.overall_credit_limit)))
1517 INTO l_credit_limit
1518 FROM hz_customer_profiles prof, hz_cust_profile_amts prof_amt
1519 -- ar_cmgt_setup_options cm_opt
1520 WHERE prof.site_use_id = p_customer_site_use_id
1521 AND prof.status = 'A'
1522 AND prof.cust_account_profile_id = prof_amt.cust_account_profile_id
1523 AND prof_amt.site_use_id = p_customer_site_use_id;
1524 END IF;
1525 -- End for the bug#8630157 by PNAVEENK
1526 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1527 -- RETURN (TO_CHAR(nvl(l_credit_limit,0), fnd_currency.get_format_mask(g_curr_rec.base_currency, 50)));
1528 --l_num_val := nvl(l_credit_limit,0);
1529 l_num_val := l_credit_limit;
1530 l_char_val := RTRIM(TO_CHAR(l_num_val, fnd_currency.get_format_mask(g_curr_rec.base_currency, 50)));
1531 RETURN l_char_val;
1532 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1533
1534 EXCEPTION
1535 WHEN NO_DATA_FOUND THEN RETURN(0);
1536
1537 END GET_CREDIT_LIMIT;
1538
1539 FUNCTION GET_HIGH_CREDIT_YTD(p_party_id IN NUMBER,
1540 p_cust_account_id IN NUMBER,
1541 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
1542 l_high_credit_ytd NUMBER;
1543 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1544 l_num_val NUMBER;
1545 l_char_val VARCHAR2(1000);
1546 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1547 -- Start for the bug#8630157 by PNAVEENK
1548 l_conversion_type VARCHAR(30);
1549 BEGIN
1550 l_conversion_type := NVL(FND_PROFILE.VALUE('IEX_EXCHANGE_RATE_TYPE'), 'Corporate');
1551 IF p_party_id IS NOT NULL THEN
1552 SELECT MAX(gl_currency_api.convert_amount_sql(trx_summ.currency, g_curr_rec.base_currency,
1553 -- sysdate, cm_opt.default_exchange_rate_type, trx_summ.op_bal_high_watermark))
1554 sysdate, l_conversion_type , trx_summ.op_bal_high_watermark))
1555 INTO l_high_credit_ytd
1556 FROM ar_trx_summary trx_summ,ar_system_parameters asp,--Added for Bug 9404646 09-Mar-2010 barathsr
1557 -- ar_cmgt_setup_options cm_opt,
1558 hz_cust_accounts ca
1559 WHERE trx_summ.org_id=asp.org_id--Added for Bug 9404646 09-Mar-2010 barathsr
1560 AND trx_summ.cust_account_id = ca.cust_account_id
1561 AND ca.party_id = p_party_id;
1562 ELSIF p_cust_account_id IS NOT NULL THEN
1563 SELECT MAX(gl_currency_api.convert_amount_sql(trx_summ.currency, g_curr_rec.base_currency,
1564 -- sysdate, cm_opt.default_exchange_rate_type, trx_summ.op_bal_high_watermark))
1565 sysdate, l_conversion_type , trx_summ.op_bal_high_watermark))
1566 INTO l_high_credit_ytd
1567 FROM ar_trx_summary trx_summ,ar_system_parameters asp--Added for Bug 9404646 09-Mar-2010 barathsr
1568 -- ar_cmgt_setup_options cm_opt
1569 WHERE trx_summ.org_id=asp.org_id--Added for Bug 9404646 09-Mar-2010 barathsr
1570 AND trx_summ.cust_account_id = p_cust_account_id;
1571 ELSIF p_customer_site_use_id IS NOT NULL THEN
1572 SELECT MAX(gl_currency_api.convert_amount_sql(trx_summ.currency, g_curr_rec.base_currency,
1573 -- sysdate, cm_opt.default_exchange_rate_type, trx_summ.op_bal_high_watermark))
1574 sysdate, l_conversion_type , trx_summ.op_bal_high_watermark))
1575 INTO l_high_credit_ytd
1576 FROM ar_trx_summary trx_summ,ar_system_parameters asp--Added for Bug 9404646 09-Mar-2010 barathsr
1577 -- ar_cmgt_setup_options cm_opt
1578 WHERE trx_summ.org_id=asp.org_id--Added for Bug 9404646 09-Mar-2010 barathsr
1579 AND trx_summ.site_use_id = p_customer_site_use_id;
1580 END IF;
1581 -- End for the bug#8630157 by PNAVEENK
1582 --BEGIN-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1583 --RETURN TO_CHAR(nvl(l_high_credit_ytd,0), fnd_currency.get_format_mask(g_curr_rec.base_currency, 50));
1584 l_num_val := nvl(l_high_credit_ytd,0);
1585 l_char_val := RTRIM(TO_CHAR(l_num_val, fnd_currency.get_format_mask(g_curr_rec.base_currency, 50)));
1586 RETURN l_char_val;
1587 --END-FIX Bug#5247669-08/02/2006-jypark- simplified by using an intermediate varchar variable
1588
1589 EXCEPTION
1590 WHEN NO_DATA_FOUND THEN RETURN(0);
1591
1592 END GET_HIGH_CREDIT_YTD;
1593
1594 -- bug 12546745 PNAVEENK
1595
1596 function amount_due_org_ocm(p_party_id number,p_cust_account_id NUMBER ,p_customer_site_use_id number,p_start_date date, p_end_date date) return number is
1597 l_amount_due_org number;
1598 l_num_val NUMBER;
1599
1600 begin
1601
1602 IF p_party_id IS NOT NULL THEN
1603 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1604 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1605 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1606 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1607 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1608 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1609 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1610 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0))
1611 INTO l_amount_due_org
1612 from gl_sets_of_books a,
1613 ar_system_parameters b,
1614 ar_trx_summary c,
1615 hz_cust_accounts d
1616 where a.set_of_books_id = b.set_of_books_id
1617 and b.org_id = c.org_id
1618 AND c.cust_account_id = d.cust_account_id
1619 AND d.party_id = p_party_id
1620 and as_of_date BETWEEN p_start_date AND p_end_date;
1621 ELSE IF p_cust_account_id IS NOT NULL THEN
1622 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1623 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1624 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1625 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1626 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1627 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1628 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1629 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0))
1630 INTO l_amount_due_org
1631 from gl_sets_of_books a,
1632 ar_system_parameters b,
1633 ar_trx_summary c
1634 where a.set_of_books_id = b.set_of_books_id
1635 and b.org_id = c.org_id
1636 and c.cust_account_id = p_cust_account_id
1637 and as_of_date BETWEEN p_start_date AND p_end_date;
1638 ELSE IF p_customer_site_use_id IS NOT NULL THEN
1639 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1640 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1641 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1642 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1643 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1644 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1645 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1646 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0))
1647 INTO l_amount_due_org
1648 from gl_sets_of_books a,
1649 ar_system_parameters b,
1650 ar_trx_summary c
1651 where a.set_of_books_id = b.set_of_books_id
1652 and b.org_id = c.org_id
1653 AND c.site_use_id = p_customer_site_use_id
1654 and as_of_date BETWEEN p_start_date AND p_end_date;
1655 END IF;
1656 END IF;
1657 END IF;
1658
1659
1660
1661 l_num_val := ROUND(nvl(l_amount_due_org,0), 0);
1662 fnd_file.put_line(FND_FILE.LOG,' AMOUNT_DUE_ORG_OCM l_amount_due_org'|| l_num_val);
1663 RETURN l_num_val;
1664 EXCEPTION
1665 WHEN OTHERS THEN
1666 RETURN(0);
1667 END amount_due_org_ocm;
1668
1669 function get_adj_total_ocm(p_party_id number ,p_cust_account_id number ,p_customer_site_use_id number, p_start_date date, p_end_date date)
1670 return number is
1671 l_adj_total number;
1672 l_num_val NUMBER;
1673 l_char_val VARCHAR2(1000);
1674 begin
1675 IF p_party_id IS NOT NULL THEN
1676 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1677 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0))
1678 INTO l_adj_total
1679 from gl_sets_of_books a,
1680 ar_system_parameters b,
1681 ar_trx_summary c,
1682 hz_cust_accounts d
1683 where a.set_of_books_id = b.set_of_books_id
1684 and b.org_id = c.org_id
1685 AND c.cust_account_id = d.cust_account_id
1686 AND d.party_id = p_party_id
1687 and as_of_date BETWEEN p_start_date AND p_end_date;
1688 ELSE IF p_cust_account_id IS NOT NULL THEN
1689 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1690 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0))
1691 INTO l_adj_total
1692 from gl_sets_of_books a,
1693 ar_system_parameters b,
1694 ar_trx_summary c
1695 where a.set_of_books_id = b.set_of_books_id
1696 and b.org_id = c.org_id
1697 and c.cust_account_id = p_cust_account_id
1698 and as_of_date BETWEEN p_start_date AND p_end_date;
1699 ELSE IF p_customer_site_use_id IS NOT NULL THEN
1700 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1701 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0))
1702 INTO l_adj_total
1703 from gl_sets_of_books a,
1704 ar_system_parameters b,
1705 ar_trx_summary c
1706 where a.set_of_books_id = b.set_of_books_id
1707 and b.org_id = c.org_id
1708 AND c.site_use_id = p_customer_site_use_id
1709 and as_of_date BETWEEN p_start_date AND p_end_date;
1710 END IF;
1711 END IF;
1712 END IF;
1713
1714 l_num_val := ROUND(nvl(l_adj_total,0), 2);
1715 fnd_file.put_line(FND_FILE.LOG,' GET_ADJ_TOTAL_OCM l_adj_total'|| l_num_val);
1716 RETURN l_num_val;
1717 EXCEPTION
1718 WHEN OTHERS THEN
1719 RETURN(0);
1720 END get_adj_total_ocm;
1721
1722
1723 function comp_rem_rec_ocm(p_party_id number ,p_cust_account_id NUMBER ,p_customer_site_use_id number,p_start_date date,p_end_date date) return number is
1724 l_amount_due_rem number;
1725 l_num_val NUMBER;
1726
1727 begin
1728
1729 IF p_party_id IS NOT NULL THEN
1730 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1731 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1732 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1733 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1734 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1735 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1736 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1737 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0) +
1738 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1739 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)+
1740 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1741 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_cash_receipts_value),0)+
1742 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1743 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_credit_memos_value),0))
1744 INTO l_amount_due_rem
1745 from gl_sets_of_books a,
1746 ar_system_parameters b,
1747 ar_trx_summary c,
1748 hz_cust_accounts d
1749 where a.set_of_books_id = b.set_of_books_id
1750 and b.org_id = c.org_id
1751 AND c.cust_account_id = d.cust_account_id
1752 AND d.party_id = p_party_id
1753 and as_of_date BETWEEN p_start_date AND p_end_date;
1754 ELSE IF p_cust_account_id IS NOT NULL THEN
1755 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1756 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1757 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1758 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1759 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1760 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1761 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1762 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0)+
1763 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1764 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)+
1765 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1766 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_cash_receipts_value),0)+
1767 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1768 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_credit_memos_value),0))
1769 INTO l_amount_due_rem
1770 from gl_sets_of_books a,
1771 ar_system_parameters b,
1772 ar_trx_summary c
1773 where a.set_of_books_id = b.set_of_books_id
1774 and b.org_id = c.org_id
1775 and c.cust_account_id = p_cust_account_id
1776 and as_of_date BETWEEN p_start_date AND p_end_date;
1777 ELSE IF p_customer_site_use_id IS NOT NULL THEN
1778 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1779 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1780 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1781 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1782 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1783 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1784 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1785 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0)+
1786 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1787 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)+
1788 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1789 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_cash_receipts_value),0)+
1790 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1791 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_credit_memos_value),0))
1792 INTO l_amount_due_rem
1793 from gl_sets_of_books a,
1794 ar_system_parameters b,
1795 ar_trx_summary c
1796 where a.set_of_books_id = b.set_of_books_id
1797 and b.org_id = c.org_id
1798 AND c.site_use_id = p_customer_site_use_id
1799 and as_of_date BETWEEN p_start_date AND p_end_date;
1800 END IF;
1801 END IF;
1802 END IF;
1803
1804 l_num_val := ROUND(nvl(l_amount_due_rem,0), 2);
1805 fnd_file.put_line(FND_FILE.LOG,' COMP_REM_REC_OCM l_amount_due_rem '|| l_num_val);
1806 RETURN l_num_val;
1807
1808 EXCEPTION
1809 WHEN OTHERS THEN
1810 RETURN(0);
1811
1812 END comp_rem_rec_ocm;
1813
1814 PROCEDURE comp_rem_ar(p_party_id number ,p_cust_account_id NUMBER ,p_customer_site_use_id number,p_beg_ar IN OUT NOCOPY NUMBER,p_end_ar IN OUT NOCOPY NUMBER ) IS
1815 l_tot_rec NUMBER;
1816 l_tot_sales_in_year NUMBER;
1817 l_num_val NUMBER;
1818 BEGIN
1819
1820 IF p_party_id IS NOT NULL THEN
1821 select (sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1822 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_invoices_value),0)+
1823 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1824 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_deposits_value),0)+
1825 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1826 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_debit_memos_value),0)+
1827 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1828 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_chargeback_value),0) +
1829 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1830 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_bills_receivables_value),0)+
1831 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1832 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_credit_memos_value),0)))
1833 INTO l_tot_rec
1834 from ar_trx_bal_summary c, ar_system_parameters b, gl_sets_of_books a, hz_cust_accounts d
1835 where b.set_of_books_id = a.set_of_books_id
1836 AND c.cust_account_id = d.cust_account_id
1837 AND d.party_id = p_party_id
1838 and c.org_id = b.org_id;
1839
1840 SELECT SUM(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1841 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1842 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1843 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1844 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1845 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1846 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1847 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0) +
1848 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1849 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_bills_receivables_value),0)+
1850 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1851 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)+
1852 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1853 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_credit_memos_value),0)+
1854 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1855 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_cash_receipts_value),0)-
1856 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1857 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_amount),0))
1858 INTO l_tot_sales_in_year
1859 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b, hz_cust_accounts d
1860 WHERE c.org_id = b.org_id
1861 AND c.cust_account_id = d.cust_account_id
1862 AND d.party_id = p_party_id
1863 AND b.set_of_books_id = a.set_of_books_id
1864 and as_of_date between TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
1865
1866 ELSE IF p_cust_account_id IS NOT NULL THEN
1867 select (sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1868 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_invoices_value),0)+
1869 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1870 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_deposits_value),0)+
1871 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1872 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_debit_memos_value),0)+
1873 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1874 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_chargeback_value),0) +
1875 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1876 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_bills_receivables_value),0)+
1877 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1878 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_credit_memos_value),0)))
1879 INTO l_tot_rec
1880 from ar_trx_bal_summary c, ar_system_parameters b, gl_sets_of_books a
1881 where b.set_of_books_id = a.set_of_books_id
1882 AND c.cust_account_id = p_cust_account_id
1883 and c.org_id = b.org_id;
1884
1885 SELECT SUM(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1886 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1887 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1888 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1889 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1890 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1891 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1892 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0) +
1893 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1894 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_bills_receivables_value),0)+
1895 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1896 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)+
1897 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1898 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_credit_memos_value),0)+
1899 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1900 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_cash_receipts_value),0)-
1901 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1902 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_amount),0))
1903 INTO l_tot_sales_in_year
1904 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b
1905 WHERE c.org_id = b.org_id
1906 AND c.cust_account_id = p_cust_account_id
1907 AND b.set_of_books_id = a.set_of_books_id
1908 and as_of_date between TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
1909 ELSE IF p_customer_site_use_id IS NOT NULL THEN
1910 select (sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1911 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_invoices_value),0)+
1912 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1913 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_deposits_value),0)+
1914 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1915 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_debit_memos_value),0)+
1916 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1917 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_chargeback_value),0) +
1918 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1919 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_bills_receivables_value),0)+
1920 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1921 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_credit_memos_value),0)))
1922 INTO l_tot_rec
1923 from ar_trx_bal_summary c, ar_system_parameters b, gl_sets_of_books a
1924 where b.set_of_books_id = a.set_of_books_id
1925 AND c.site_use_id = p_customer_site_use_id
1926 and c.org_id = b.org_id;
1927
1928 SELECT SUM(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1929 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
1930 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1931 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
1932 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1933 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
1934 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1935 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0) +
1936 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1937 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_bills_receivables_value),0)+
1938 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1939 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)+
1940 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1941 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_credit_memos_value),0)+
1942 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1943 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_cash_receipts_value),0)-
1944 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
1945 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_amount),0))
1946 INTO l_tot_sales_in_year
1947 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b
1948 WHERE c.org_id = b.org_id
1949 AND c.site_use_id = p_customer_site_use_id
1950 AND b.set_of_books_id = a.set_of_books_id
1951 and as_of_date between TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
1952 END IF;
1953 END IF;
1954 END IF;
1955
1956
1957 l_num_val := ROUND(l_tot_rec - l_tot_sales_in_year,2);
1958 p_beg_ar := l_num_val;
1959
1960 l_num_val := ROUND(l_tot_rec,2);
1961 p_end_ar := l_num_val;
1962 fnd_file.put_line(FND_FILE.LOG,' comp_rem_ar p_beg_ar '|| p_beg_ar);
1963 fnd_file.put_line(FND_FILE.LOG,' comp_rem_ar p_end_ar '|| p_end_ar);
1964 EXCEPTION
1965 WHEN OTHERS THEN
1966 p_beg_ar := 0;
1967 p_end_ar := 0;
1968 END;
1969
1970
1971
1972 function comp_tot_rec_ocm(p_party_id NUMBER ,p_cust_account_id NUMBER ,p_customer_site_use_id NUMBER ,p_start_date date,p_end_date date) return number is
1973 l_tot_sales number;
1974 l_num_val NUMBER;
1975
1976 begin
1977 select nvl(amount_due_org_ocm(p_party_id,p_cust_account_id,p_customer_site_use_id,p_start_date,p_end_date),0)+
1978 nvl(get_adj_total_ocm(p_party_id,p_cust_account_id,p_customer_site_use_id,p_start_date , p_end_date),0)
1979 into l_tot_sales
1980 from dual;
1981
1982 l_num_val := ROUND(nvl(l_tot_sales,0), 2);
1983 fnd_file.put_line(FND_FILE.LOG,' COMP_TOT_REC_OCM l_tot_sales '|| l_num_val);
1984 RETURN l_num_val;
1985 EXCEPTION
1986 WHEN OTHERS THEN
1987 RETURN(0);
1988 END comp_tot_rec_ocm;
1989
1990 /* Invoice True DSO = (Sysdate - Invoice date) * Invoice Amount / Total Sales in Invoice Month
1991
1992 True DSO = Sum of all Invoices True DSO in last year*/
1993
1994
1995 FUNCTION get_true_dso_ocm(p_party_id number,p_cust_account_id number,p_customer_site_use_id number) RETURN VARCHAR2 IS
1996
1997
1998 /* Numerator (Sysdate - Invoice date) * Invoice Amount */
1999 cursor c_invoices_party (p_party_id number) is
2000 select (sysdate-gl_date)* amount_due_original amount, to_char(gl_date,'MM') month,payment_schedule_id
2001 from ar_payment_schedules_all a, hz_cust_accounts b
2002 where a.customer_id = b.cust_account_id
2003 AND b.party_id = p_party_id
2004 AND a.CLASS IN ('INV','DEP','DM','CB')
2005 and a.gl_date between trunc(sysdate-365) AND TRUNC(sysdate);
2006
2007 cursor c_invoices_acct (p_cust_account_id number) is
2008 select (sysdate-gl_date)* amount_due_original amount, to_char(gl_date,'MM') month,payment_schedule_id
2009 from ar_payment_schedules_all
2010 where customer_id = p_cust_account_id
2011 AND CLASS IN ('INV','DEP','DM','CB')
2012 and gl_date between trunc(sysdate-365) AND TRUNC(sysdate);
2013
2014 cursor c_invoices_site (p_customer_site_use_id number) is
2015 select (sysdate-gl_date)* amount_due_original amount, to_char(gl_date,'MM') month,payment_schedule_id
2016 from ar_payment_schedules_all
2017 where customer_site_use_id = p_customer_site_use_id
2018 AND CLASS IN ('INV','DEP','DM','CB')
2019 and gl_date between trunc(sysdate-365) AND TRUNC(sysdate);
2020
2021
2022 /*Denominator Total Sales month wise data */
2023
2024 cursor c_month_sales_party(p_party_id number) is
2025 select sum(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2026 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
2027 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2028 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
2029 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2030 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
2031 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2032 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0)+
2033 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2034 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)) amount ,to_char(c.as_of_date,'MM') month
2035 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b , hz_cust_accounts d
2036 WHERE c.cust_account_id = d.cust_account_id
2037 AND d.party_id = p_party_id
2038 and c.org_id = b.org_id
2039 AND b.set_of_books_id = a.set_of_books_id
2040 AND c.as_of_date between TRUNC(sysdate-365) AND TRUNC(sysdate)
2041 group by to_char(c.as_of_date,'MM');
2042
2043 cursor c_month_sales_acct(p_cust_account_id number) is
2044 select sum(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2045 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
2046 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2047 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
2048 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2049 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
2050 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2051 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0)+
2052 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2053 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)) amount ,to_char(c.as_of_date,'MM') month
2054 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b
2055 WHERE c.cust_account_id = p_cust_account_id
2056 and c.org_id = b.org_id
2057 AND b.set_of_books_id = a.set_of_books_id
2058 AND c.as_of_date between TRUNC(sysdate-365) AND TRUNC(sysdate)
2059 group by to_char(c.as_of_date,'MM');
2060
2061 cursor c_month_sales_site(p_customer_site_use_id number) is
2062 select sum(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2063 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
2064 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2065 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
2066 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2067 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
2068 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2069 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0)+
2070 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2071 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0)) amount ,to_char(c.as_of_date,'MM') month
2072 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b
2073 WHERE c.site_use_id = p_customer_site_use_id
2074 and c.org_id = b.org_id
2075 AND b.set_of_books_id = a.set_of_books_id
2076 AND c.as_of_date between TRUNC(sysdate-365) AND TRUNC(sysdate)
2077 group by to_char(c.as_of_date,'MM');
2078
2079 type l_month_rec is record (l_amount number,l_month number);
2080
2081 type l_month_type is table of l_month_rec
2082 index by binary_integer;
2083
2084 l_month_trx l_month_type;
2085 l_month_amounts l_month_type;
2086
2087 j number;
2088 k number;
2089 l_dso number;
2090 l_invoice_dso number;
2091 l_num_val number;
2092 l_char_val VARCHAR2(100);
2093 begin
2094 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: Start');
2095
2096 -- collect month wise total sales in last year
2097 IF p_party_id IS NOT NULL THEN
2098
2099 open c_month_sales_party(p_party_id);
2100 fetch c_month_sales_party bulk collect into l_month_trx;
2101 close c_month_sales_party;
2102
2103 ELSE IF p_cust_account_id IS NOT NULL THEN
2104
2105 open c_month_sales_acct(p_cust_account_id);
2106 fetch c_month_sales_acct bulk collect into l_month_trx;
2107 close c_month_sales_acct;
2108
2109 ELSE IF p_customer_site_use_id IS NOT NULL THEN
2110
2111 open c_month_sales_site(p_customer_site_use_id);
2112 fetch c_month_sales_site bulk collect into l_month_trx;
2113 close c_month_sales_site;
2114
2115 END IF;
2116 END IF;
2117 END IF;
2118
2119 for j in 1..12 loop
2120 l_month_amounts(j).l_amount := 0;
2121 end loop;
2122 -- assign month wise total sales from Jan to dec in l_month_amounts
2123
2124 for j in 1..l_month_trx.count loop
2125 k:= l_month_trx(j).l_month;
2126 l_month_amounts(k).l_amount := l_month_trx(j).l_amount;
2127 end loop;
2128 j:= 1;
2129 -- set sales to zero if no sales in a particular month
2130
2131 for j in 1..12 loop
2132 if l_month_amounts(j).l_amount is null then
2133 l_month_amounts(j).l_amount := 0;
2134 end if;
2135 end loop;
2136
2137 j:= 1;
2138 for j in 1..12 loop
2139 fnd_file.put_line(FND_FILE.LOG,' GET_TRUE_DSO_OCM: Total sales in month '|| j|| ' is ' || l_month_amounts(j).l_amount);
2140 end loop;
2141
2142 l_dso := 0;
2143 -- Loop throgh all open invoices in last year
2144 IF p_party_id IS NOT NULL THEN
2145 for i in c_invoices_party(p_party_id) loop
2146 begin
2147 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: Month of the Invoice ' || i.month);
2148 k := i.month;
2149 fnd_file.put_line(FND_FILE.LOG,k|| 'GET_TRUE_DSO_OCM month sales'||l_month_amounts(k).l_amount);
2150 l_invoice_dso := i.amount/l_month_amounts(i.month).l_amount;
2151 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: DSO of the invoice '||i.payment_schedule_id || ' is '|| l_invoice_dso);
2152 -- sum all invoices dso
2153 l_dso := l_dso + l_invoice_dso;
2154
2155 exception
2156 when others then
2157 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: Exception in calculating True DSO of invoice '|| i.payment_schedule_id || sqlerrm);
2158 end;
2159 end loop;
2160 ELSE IF p_cust_account_id IS NOT NULL THEN
2161 for i in c_invoices_acct(p_cust_account_id) loop
2162 begin
2163 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: Month of the Invoice ' || i.month);
2164 k := i.month;
2165 fnd_file.put_line(FND_FILE.LOG,k|| 'GET_TRUE_DSO_OCM month sales'||l_month_amounts(k).l_amount);
2166 l_invoice_dso := i.amount/l_month_amounts(i.month).l_amount;
2167 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: DSO of the invoice '||i.payment_schedule_id || ' is '|| l_invoice_dso);
2168 -- sum all invoices dso
2169 l_dso := l_dso + l_invoice_dso;
2170
2171 exception
2172 when others then
2173 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: Exception in calculating True DSO of invoice '|| i.payment_schedule_id || sqlerrm);
2174 end;
2175 end loop;
2176 ELSE IF p_customer_site_use_id IS NOT NULL THEN
2177 for i in c_invoices_site(p_customer_site_use_id) loop
2178 begin
2179 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: Month of the Invoice ' || i.month);
2180 k := i.month;
2181 fnd_file.put_line(FND_FILE.LOG,k|| 'GET_TRUE_DSO_OCM month sales'||l_month_amounts(k).l_amount);
2182 l_invoice_dso := i.amount/l_month_amounts(i.month).l_amount;
2183 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: DSO of the invoice '||i.payment_schedule_id || ' is '|| l_invoice_dso);
2184 -- sum all invoices dso
2185 l_dso := l_dso + l_invoice_dso;
2186
2187 exception
2188 when others then
2189 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: Exception in calculating True DSO of invoice '|| i.payment_schedule_id || sqlerrm);
2190 end;
2191 end loop;
2192 END IF;
2193 END IF;
2194
2195 END IF;
2196 l_num_val := ROUND(NVL(l_dso,0),2);
2197 l_char_val := RTRIM(TO_CHAR(l_num_val));
2198 fnd_file.put_line(fnd_file.LOG,'GET_TRUE_DSO_OCM: True DSO '|| l_char_val);
2199 RETURN l_char_val;
2200 exception
2201 when others then
2202 fnd_file.put_line(FND_FILE.LOG,'GET_TRUE_DSO_OCM: Exception in True DSO '|| sqlerrm);
2203 end;
2204
2205
2206 FUNCTION get_conv_dso_ocm(p_party_id number,p_cust_account_id number,p_customer_site_use_id number) RETURN VARCHAR2 IS
2207 l_conv_dso number;
2208 l_op_bal number;
2209 l_tot_bal number;
2210 l_num_val number;
2211 l_char_val VARCHAR2(1000);
2212 l_dso_days number;
2213 BEGIN
2214 --fnd_file.put_line(FND_FILE.LOG,'get_conv_dso_ocm: Start');
2215
2216 IF p_party_id IS NOT NULL THEN
2217 select (sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2218 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_invoices_value),0)+
2219 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2220 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_deposits_value),0)+
2221 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2222 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_debit_memos_value),0)+
2223 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2224 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_chargeback_value),0) +
2225 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2226 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_bills_receivables_value),0)+
2227 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2228 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_credit_memos_value),0)))
2229 INTO l_op_bal
2230 from ar_trx_bal_summary c, ar_system_parameters b, gl_sets_of_books a,hz_cust_accounts d
2231 where c.cust_account_id = d.cust_account_id
2232 AND d.party_id = p_party_id
2233 AND b.set_of_books_id = a.set_of_books_id
2234 and c.org_id = b.org_id;
2235 ELSE IF p_cust_account_id IS NOT NULL THEN
2236 select (sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2237 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_invoices_value),0)+
2238 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2239 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_deposits_value),0)+
2240 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2241 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_debit_memos_value),0)+
2242 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2243 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_chargeback_value),0) +
2244 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2245 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_bills_receivables_value),0)+
2246 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2247 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_credit_memos_value),0)))
2248 INTO l_op_bal
2249 from ar_trx_bal_summary c, ar_system_parameters b, gl_sets_of_books a
2250 where c.cust_account_id= p_cust_account_id
2251 AND b.set_of_books_id = a.set_of_books_id
2252 and c.org_id = b.org_id;
2253 ELSE IF p_customer_site_use_id IS NOT NULL THEN
2254 select (sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2255 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_invoices_value),0)+
2256 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2257 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_deposits_value),0)+
2258 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2259 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_debit_memos_value),0)+
2260 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2261 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_chargeback_value),0) +
2262 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2263 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_bills_receivables_value),0)+
2264 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2265 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.op_credit_memos_value),0)))
2266 INTO l_op_bal
2267 from ar_trx_bal_summary c, ar_system_parameters b, gl_sets_of_books a
2268 where c.site_use_id = p_customer_site_use_id
2269 AND b.set_of_books_id = a.set_of_books_id
2270 and c.org_id = b.org_id;
2271 END IF;
2272 END IF;
2273 END IF;
2274
2275 fnd_file.put_line(FND_FILE.LOG, 'GET_CONV_DSO_OCM :l_op_bal '|| l_op_bal);
2276
2277 IF p_party_id IS NOT NULL THEN
2278 SELECT SUM(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2279 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
2280 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2281 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
2282 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2283 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
2284 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2285 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0) +
2286 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2287 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_bills_receivables_value),0)+
2288 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2289 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0))
2290 INTO l_tot_bal
2291 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b, hz_cust_accounts d
2292 WHERE c.cust_account_id = d.cust_account_id
2293 AND d.party_id = p_party_id
2294 and c.org_id = b.org_id
2295 AND b.set_of_books_id = a.set_of_books_id
2296 and as_of_date between (trunc(sysdate) - b.cer_dso_days) AND TRUNC(sysdate);
2297 ELSE IF p_cust_account_id IS NOT NULL THEN
2298 SELECT SUM(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2299 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
2300 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2301 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
2302 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2303 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
2304 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2305 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0) +
2306 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2307 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_bills_receivables_value),0)+
2308 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2309 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0))
2310 INTO l_tot_bal
2311 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b
2312 WHERE c.cust_account_id = p_cust_account_id
2313 and c.org_id = b.org_id
2314 AND b.set_of_books_id = a.set_of_books_id
2315 and as_of_date between (trunc(sysdate) - b.cer_dso_days) AND TRUNC(sysdate);
2316 ELSE IF p_customer_site_use_id IS NOT NULL THEN
2317 SELECT SUM(NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2318 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_invoices_value),0) +
2319 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2320 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_deposits_value),0) +
2321 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2322 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_debit_memos_value),0) +
2323 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2324 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_chargeback_value),0) +
2325 nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2326 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_bills_receivables_value),0)+
2327 NVL(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2328 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.total_adjustments_value),0))
2329 INTO l_tot_bal
2330 FROM gl_sets_of_books a, ar_trx_summary c, ar_system_parameters b
2331 WHERE c.site_use_id = p_customer_site_use_id
2332 and c.org_id = b.org_id
2333 AND b.set_of_books_id = a.set_of_books_id
2334 and as_of_date between (trunc(sysdate) - b.cer_dso_days) AND TRUNC(sysdate);
2335 END IF;
2336 END IF;
2337 END IF;
2338
2339
2340 SELECT cer_dso_days INTO l_dso_days FROM ar_system_parameters;
2341
2342 fnd_file.put_line(FND_FILE.LOG,'GET_CONV_DSO_OCM l_tot_bal '||l_tot_bal);
2343 l_conv_dso := l_op_bal/l_tot_bal*l_dso_days;
2344 --fnd_file.put_line(FND_FILE.LOG,'l_conv_dso '||l_conv_dso);
2345 l_num_val := ROUND(nvl(l_conv_dso,0), 2);
2346 l_char_val := RTRIM(TO_CHAR(l_num_val));
2347
2348 -- fnd_file.put_line(FND_FILE.LOG, 'CUST_ACCOUNT_ID ' || p_cust_account_id);
2349 fnd_file.put_line(FND_FILE.LOG,'GET_CONV_DSO_OCM l_conv_dso '|| l_char_val);
2350 RETURN l_char_val;
2351 EXCEPTION
2352 WHEN OTHERS THEN
2353 RETURN(0);
2354 END get_conv_dso_ocm;
2355
2356
2357 FUNCTION GET_CEI_OCM(p_party_id IN NUMBER,
2358 p_cust_account_id IN NUMBER,
2359 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 AS
2360 l_cei NUMBER;
2361 l_sales NUMBER;
2362 l_beg_ar NUMBER;
2363 l_end_ar NUMBER;
2364 l_curr_ar NUMBER;
2365 l_num_val NUMBER;
2366 l_char_val VARCHAR2(1000);
2367
2368 BEGIN
2369 /*-----------------------------------------------------------------------
2370 CEI = ( Beginning Receivables + ( Credit Sales/ N*) - Ending Total Receivables) * 100
2371 / (Beginning Receivables + ( Credit Sales/N*) - Ending Current Receivables)
2372
2373 *N= Number of Months Can do this monthly, quarterly , and annually
2374 */
2375
2376 l_sales := COMP_TOT_REC_ocm(p_party_id, p_cust_account_id, p_customer_site_use_id,TRUNC(add_months(sysdate, -12)), TRUNC(sysdate));
2377
2378 -- l_beg_ar := COMP_REM_REC_ocm(p_party_id, p_cust_account_id, p_customer_site_use_id,to_date('01/01/1952','MM/DD/YYYY'), TRUNC(add_months(sysdate, -12)) - 1);
2379
2380 -- l_end_ar := COMP_REM_REC_ocm(p_party_id, p_cust_account_id, p_customer_site_use_id,to_date('01/01/1952','MM/DD/YYYY'), TRUNC(sysdate));
2381 comp_rem_ar(p_party_id, p_cust_account_id, p_customer_site_use_id,l_beg_ar,l_end_ar);
2382 l_curr_ar := comp_curr_rec(to_date('01/01/1952','MM/DD/YYYY'), TRUNC(sysdate),p_party_id, p_cust_account_id, p_customer_site_use_id);
2383
2384 fnd_file.put_line(FND_FILE.LOG, 'GET_CEI_OCM l_sales ' || l_sales);
2385 fnd_file.put_line(FND_FILE.LOG, 'GET_CEI_OCM l_beg_ar ' || l_beg_ar);
2386 fnd_file.put_line(FND_FILE.LOG, 'GET_CEI_OCM l_end_ar ' || l_end_ar);
2387 fnd_file.put_line(FND_FILE.LOG, 'GET_CEI_OCM l_curr_ar ' || l_curr_ar);
2388 fnd_file.put_line(FND_FILE.LOG, 'GET_CEI_OCM l_cei ' || l_cei);
2389
2390 l_cei := (l_beg_ar + (l_sales / 12) - l_end_ar) * 100 / (l_beg_ar + (l_sales / 12) - l_curr_ar);
2391
2392 l_num_val := ROUND(TRUNC(NVL(l_cei, 0)));
2393 l_char_val := RTRIM(TO_CHAR(l_num_val));
2394 fnd_file.put_line(FND_FILE.LOG, 'GET_CEI_OCM l_cei ' || l_char_val);
2395 RETURN l_char_val;
2396
2397 EXCEPTION
2398 WHEN NO_DATA_FOUND THEN
2399 RETURN(TO_CHAR(0));
2400 END GET_CEI_OCM;
2401
2402 FUNCTION get_sales_ocm(p_party_id number,
2403 p_cust_account_id number,
2404 p_customer_site_use_id number) RETURN VARCHAR2 IS
2405 l_sales number;
2406 l_num_val number;
2407 l_char_val VARCHAR2(1000);
2408 BEGIN
2409 l_sales := COMP_TOT_REC_ocm(p_party_id, p_cust_account_id, p_customer_site_use_id,TRUNC(add_months(sysdate, -12)), TRUNC(sysdate));
2410
2411 l_num_val := ROUND(NVL(l_sales, 0),2);
2412 l_char_val := RTRIM(TO_CHAR(l_num_val));
2413 fnd_file.put_line(FND_FILE.LOG, 'get_sales_ocm l_sales ' || l_char_val);
2414 RETURN l_char_val;
2415 EXCEPTION
2416 WHEN OTHERS THEN
2417 RETURN(TO_CHAR(0));
2418 END get_sales_ocm;
2419
2420 FUNCTION get_deduction_ocm(p_party_id number,
2421 p_cust_account_id number,
2422 p_customer_site_use_id number) RETURN VARCHAR2 IS
2423 l_adj number;
2424 l_num_val number;
2425 l_char_val VARCHAR2(1000);
2426 BEGIN
2427 l_adj := get_adj_total_ocm(p_party_id,p_cust_account_id,p_customer_site_use_id,TRUNC(add_months(sysdate, -12)),TRUNC(sysdate));
2428 l_num_val := ROUND(NVL(l_adj,0),2);
2429 l_char_val := rtrim(TO_CHAR(l_num_val));
2430 fnd_file.put_line(FND_FILE.LOG, 'get_deduction_ocm l_adj ' || l_char_val);
2431 RETURN l_char_val;
2432 EXCEPTION
2433 WHEN OTHERS THEN
2434 RETURN(TO_CHAR(0));
2435 END;
2436
2437 FUNCTION GET_NSF_STOP_PMT_COUNT_ocm(p_party_id IN NUMBER,
2438 p_cust_account_id IN NUMBER,
2439 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 IS
2440 l_nsf_count number;
2441 l_num_val NUMBER;
2442 l_char_val VARCHAR2(1000);
2443 begin
2444 IF p_party_id IS NOT NULL THEN
2445 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2446 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_count),0))
2447 INTO l_nsf_count
2448 from gl_sets_of_books a,
2449 ar_system_parameters b,
2450 ar_trx_summary c,
2451 hz_cust_accounts d
2452 where a.set_of_books_id = b.set_of_books_id
2453 and b.org_id = c.org_id
2454 AND c.cust_account_id = d.cust_account_id
2455 AND d.party_id = p_party_id
2456 and as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2457 ELSE IF p_cust_account_id IS NOT NULL THEN
2458 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2459 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_count),0))
2460 INTO l_nsf_count
2461 from gl_sets_of_books a,
2462 ar_system_parameters b,
2463 ar_trx_summary c
2464 where a.set_of_books_id = b.set_of_books_id
2465 and b.org_id = c.org_id
2466 and c.cust_account_id = p_cust_account_id
2467 and as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2468 ELSE IF p_customer_site_use_id IS NOT NULL THEN
2469 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2470 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_count),0))
2471 INTO l_nsf_count
2472 from gl_sets_of_books a,
2473 ar_system_parameters b,
2474 ar_trx_summary c
2475 where a.set_of_books_id = b.set_of_books_id
2476 and b.org_id = c.org_id
2477 AND c.site_use_id = p_customer_site_use_id
2478 and as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2479 END IF;
2480 END IF;
2481 END IF;
2482
2483 l_num_val := ROUND(nvl(l_nsf_count,0), 2);
2484 fnd_file.put_line(FND_FILE.LOG,' GET_NSF_STOP_PMT_COUNT l_nsf_count'|| l_num_val);
2485 RETURN l_num_val;
2486 EXCEPTION
2487 WHEN OTHERS THEN
2488 RETURN(0);
2489 end;
2490
2491 FUNCTION GET_NSF_STOP_PMT_AMOUNT_ocm(p_party_id IN NUMBER,
2492 p_cust_account_id IN NUMBER,
2493 p_customer_site_use_id IN NUMBER) RETURN VARCHAR2 IS
2494 l_nsf_amount number;
2495 l_num_val NUMBER;
2496 l_char_val VARCHAR2(1000);
2497 begin
2498 IF p_party_id IS NOT NULL THEN
2499 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2500 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_amount),0))
2501 INTO l_nsf_amount
2502 from gl_sets_of_books a,
2503 ar_system_parameters b,
2504 ar_trx_summary c,
2505 hz_cust_accounts d
2506 where a.set_of_books_id = b.set_of_books_id
2507 and b.org_id = c.org_id
2508 AND c.cust_account_id = d.cust_account_id
2509 AND d.party_id = p_party_id
2510 and as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2511 ELSE IF p_cust_account_id IS NOT NULL THEN
2512 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2513 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_amount),0))
2514 INTO l_nsf_amount
2515 from gl_sets_of_books a,
2516 ar_system_parameters b,
2517 ar_trx_summary c
2518 where a.set_of_books_id = b.set_of_books_id
2519 and b.org_id = c.org_id
2520 and c.cust_account_id = p_cust_account_id
2521 and as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2522 ELSE IF p_customer_site_use_id IS NOT NULL THEN
2523 select sum(nvl(gl_currency_api.convert_amount(c.currency,a.currency_code,sysdate,
2524 fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'),c.nsf_stop_payment_amount),0))
2525 INTO l_nsf_amount
2526 from gl_sets_of_books a,
2527 ar_system_parameters b,
2528 ar_trx_summary c
2529 where a.set_of_books_id = b.set_of_books_id
2530 and b.org_id = c.org_id
2531 AND c.site_use_id = p_customer_site_use_id
2532 and as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2533 END IF;
2534 END IF;
2535 END IF;
2536
2537 l_num_val := ROUND(nvl(l_nsf_amount,0), 2);
2538 fnd_file.put_line(FND_FILE.LOG,' GET_NSF_STOP_PMT_AMOUNT l_nsf_amount'|| l_num_val);
2539 RETURN l_num_val;
2540 EXCEPTION
2541 WHEN OTHERS THEN
2542 RETURN(0);
2543 END GET_NSF_STOP_PMT_AMOUNT_ocm;
2544
2545 function get_wt_avg_days_paid_late(p_party_id NUMBER ,
2546 p_cust_account_id number,
2547 p_customer_site_use_id number) RETURN VARCHAR2 IS
2548
2549 l_wt_days_paid_late number;
2550 l_num_val NUMBER;
2551 l_char_val VARCHAR2(1000);
2552
2553 BEGIN
2554 IF p_party_id IS NOT NULL THEN
2555 SELECT ROUND(SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE, fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT_DAYS_LATE,0)))) /
2556 DECODE(SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE,fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT,0)))),0,1,
2557 SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE,fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT,0))))),2)
2558 INTO l_wt_days_paid_late
2559 FROM gl_sets_of_books a,
2560 ar_system_parameters b ,
2561 ar_trx_summary c ,
2562 hz_cust_accounts d
2563 WHERE a.set_of_books_id = b.set_of_books_id
2564 AND b.org_id = c.org_id
2565 AND c.cust_account_id = d.cust_account_id
2566 AND d.party_id = p_party_id
2567 AND as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2568 ELSE IF p_cust_account_id IS NOT NULL THEN
2569 SELECT ROUND(SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE, fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT_DAYS_LATE,0)))) /
2570 DECODE(SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE,fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT,0)))),0,1,
2571 SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE,fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT,0))))),2)
2572 INTO l_wt_days_paid_late
2573 FROM gl_sets_of_books a,
2574 ar_system_parameters b ,
2575 ar_trx_summary c
2576 -- , hz_cust_accounts d commented for Bug14167214 by bibeura
2577 WHERE a.set_of_books_id = b.set_of_books_id
2578 AND b.org_id = c.org_id
2579 AND c.cust_account_id = p_cust_account_id
2580 AND as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2581 ELSE IF p_customer_site_use_id IS NOT NULL THEN
2582 SELECT ROUND(SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE, fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT_DAYS_LATE,0)))) /
2583 DECODE(SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE,fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT,0)))),0,1,
2584 SUM(gl_currency_api.convert_amount(c.currency,a.currency_code, SYSDATE,fnd_profile.value('IEX_EXCHANGE_RATE_TYPE'), (NVL(SUM_APP_AMT,0))))),2)
2585 INTO l_wt_days_paid_late
2586 FROM gl_sets_of_books a,
2587 ar_system_parameters b ,
2588 ar_trx_summary c
2589 -- , hz_cust_accounts d commented for Bug14167214 by bibeura
2590 WHERE a.set_of_books_id = b.set_of_books_id
2591 AND b.org_id = c.org_id
2592 AND c.site_use_id = p_customer_site_use_id
2593 AND as_of_date BETWEEN TRUNC(add_months(sysdate, -12)) AND TRUNC(sysdate);
2594 END IF;
2595 END IF;
2596 END IF;
2597
2598 l_num_val := ROUND(nvl(l_wt_days_paid_late,0), 2);
2599 fnd_file.put_line(FND_FILE.LOG,' get_wt_avg_days_paid_late l_wt_days_paid_late '|| l_num_val);
2600 RETURN l_num_val;
2601 EXCEPTION
2602 WHEN OTHERS THEN
2603 RETURN(0);
2604 END;
2605
2606 -- end bug 12546745
2607
2608 BEGIN
2609 --Begin bug#5208170 schekuri 29-May-2006
2610 --Commented out these as the same values are getting populated in IEX_METRIC_PVT.GET_METRIC_INFO
2611 /*SELECT sob.currency_code,
2612 c.precision,
2613 c.minimum_accountable_unit
2614 INTO g_curr_rec.base_currency,
2615 g_curr_rec.base_precision,
2616 g_curr_rec.base_min_acc_unit
2617 FROM ar_system_parameters sysp,
2618 gl_sets_of_books sob,
2619 fnd_currencies c
2620 WHERE sob.set_of_books_id = sysp.set_of_books_id
2621 AND sob.currency_code = c.currency_code;
2622
2623 -- Past Year From and To
2624 SELECT TRUNC(add_months(sysdate, - 12)) pastYearFrom ,
2625 TRUNC(sysdate) pastYearTo
2626 INTO g_curr_rec.past_year_from,
2627 g_curr_rec.past_year_to
2628 FROM dual;*/
2629 NULL;
2630 --End bug#5208170 schekuri 29-May-2006
2631 EXCEPTION
2632 WHEN OTHERS THEN
2633 NULL;
2634
2635 END;