9: rule_end_tab rule_end_tab_typ;
10: rule_set_id_tab rule_set_id_tab_typ;
11: j binary_integer:=0; -- Number of rule-sets cached in a session
12:
13: subtype varchar2s is dbms_sql.varchar2s;
14: g_rule_source varchar2s; -- Rule set cache (table)
15: g_rule_start number; -- Starting row-index of a rule-set in cache
16: g_rule_end number; -- Ending row-index of a rule-set in the cache
17:
122:
123: l_in_rule_start := 1;
124: -- The rule chunk defines the size of the pieces that we are taken out NOCOPY of
125: -- the rule source. It is set to 150 but can be changed. The real size is
126: -- defined in the dbms_sys_dbms_sql package but i could not find any
127: -- documentation on it. I tried 150 and it seemed to work fine.
128: -- Everything smaller than 150 will also work fine.
129:
130: l_rule_chunk := 150 ;
457:
458: -- This will set the rule start and rule end variables.
459: set_rule_set(rule_set_id);
460:
461: cursor_name := dbms_sql.open_cursor;
462:
463: dbms_sql.parse(cursor_name , g_rule_source , g_rule_start , g_rule_end ,
464: FALSE , dbms_sql.v7);
465:
459: set_rule_set(rule_set_id);
460:
461: cursor_name := dbms_sql.open_cursor;
462:
463: dbms_sql.parse(cursor_name , g_rule_source , g_rule_start , g_rule_end ,
464: FALSE , dbms_sql.v7);
465:
466: IF PG_DEBUG in ('Y', 'C') THEN
467: arp_util.debug('calc_applied_and_remaining: ' || '(After Parse): dbms_sql bind variables: ');
460:
461: cursor_name := dbms_sql.open_cursor;
462:
463: dbms_sql.parse(cursor_name , g_rule_source , g_rule_start , g_rule_end ,
464: FALSE , dbms_sql.v7);
465:
466: IF PG_DEBUG in ('Y', 'C') THEN
467: arp_util.debug('calc_applied_and_remaining: ' || '(After Parse): dbms_sql bind variables: ');
468: arp_util.debug('calc_applied_and_remaining: ' || ':currency : '||currency);
463: dbms_sql.parse(cursor_name , g_rule_source , g_rule_start , g_rule_end ,
464: FALSE , dbms_sql.v7);
465:
466: IF PG_DEBUG in ('Y', 'C') THEN
467: arp_util.debug('calc_applied_and_remaining: ' || '(After Parse): dbms_sql bind variables: ');
468: arp_util.debug('calc_applied_and_remaining: ' || ':currency : '||currency);
469: arp_util.debug('calc_applied_and_remaining: ' || ':amt : '||to_char(amt));
470: arp_util.debug('calc_applied_and_remaining: ' || ':line_remaining : '||to_char(t_line_remaining));
471: arp_util.debug('calc_applied_and_remaining: ' || ':freight_remaining : '||to_char(t_freight_remaining));
483:
484: -- +ve values are passed here. It will not affect the applied amounts
485: -- They will be converted back at the end of this procedure.
486:
487: dbms_sql.bind_variable(cursor_name ,':currency',currency);
488: dbms_sql.bind_variable(cursor_name ,':amt',abs(amt));
489: dbms_sql.bind_variable(cursor_name ,':line_remaining',abs(t_line_remaining) );
490: dbms_sql.bind_variable(cursor_name ,':freight_remaining',abs(t_freight_remaining));
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
484: -- +ve values are passed here. It will not affect the applied amounts
485: -- They will be converted back at the end of this procedure.
486:
487: dbms_sql.bind_variable(cursor_name ,':currency',currency);
488: dbms_sql.bind_variable(cursor_name ,':amt',abs(amt));
489: dbms_sql.bind_variable(cursor_name ,':line_remaining',abs(t_line_remaining) );
490: dbms_sql.bind_variable(cursor_name ,':freight_remaining',abs(t_freight_remaining));
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
485: -- They will be converted back at the end of this procedure.
486:
487: dbms_sql.bind_variable(cursor_name ,':currency',currency);
488: dbms_sql.bind_variable(cursor_name ,':amt',abs(amt));
489: dbms_sql.bind_variable(cursor_name ,':line_remaining',abs(t_line_remaining) );
490: dbms_sql.bind_variable(cursor_name ,':freight_remaining',abs(t_freight_remaining));
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
486:
487: dbms_sql.bind_variable(cursor_name ,':currency',currency);
488: dbms_sql.bind_variable(cursor_name ,':amt',abs(amt));
489: dbms_sql.bind_variable(cursor_name ,':line_remaining',abs(t_line_remaining) );
490: dbms_sql.bind_variable(cursor_name ,':freight_remaining',abs(t_freight_remaining));
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
487: dbms_sql.bind_variable(cursor_name ,':currency',currency);
488: dbms_sql.bind_variable(cursor_name ,':amt',abs(amt));
489: dbms_sql.bind_variable(cursor_name ,':line_remaining',abs(t_line_remaining) );
490: dbms_sql.bind_variable(cursor_name ,':freight_remaining',abs(t_freight_remaining));
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
488: dbms_sql.bind_variable(cursor_name ,':amt',abs(amt));
489: dbms_sql.bind_variable(cursor_name ,':line_remaining',abs(t_line_remaining) );
490: dbms_sql.bind_variable(cursor_name ,':freight_remaining',abs(t_freight_remaining));
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
489: dbms_sql.bind_variable(cursor_name ,':line_remaining',abs(t_line_remaining) );
490: dbms_sql.bind_variable(cursor_name ,':freight_remaining',abs(t_freight_remaining));
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
497: dbms_sql.bind_variable(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment,30);
490: dbms_sql.bind_variable(cursor_name ,':freight_remaining',abs(t_freight_remaining));
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
497: dbms_sql.bind_variable(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment,30);
498: dbms_sql.bind_variable(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment,30);
491: dbms_sql.bind_variable(cursor_name ,':charges_remaining',abs(t_charges_remaining));
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
497: dbms_sql.bind_variable(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment,30);
498: dbms_sql.bind_variable(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment,30);
499: dbms_sql.bind_variable(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment,30);
492: dbms_sql.bind_variable(cursor_name , ':line_applied',t_line_applied);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
497: dbms_sql.bind_variable(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment,30);
498: dbms_sql.bind_variable(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment,30);
499: dbms_sql.bind_variable(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment,30);
500: dbms_sql.bind_variable(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment,30);
493: dbms_sql.bind_variable(cursor_name , ':freight_applied' ,t_freight_applied );
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
497: dbms_sql.bind_variable(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment,30);
498: dbms_sql.bind_variable(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment,30);
499: dbms_sql.bind_variable(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment,30);
500: dbms_sql.bind_variable(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment,30);
501:
494: dbms_sql.bind_variable(cursor_name , ':charges_applied' ,t_charges_applied);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
497: dbms_sql.bind_variable(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment,30);
498: dbms_sql.bind_variable(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment,30);
499: dbms_sql.bind_variable(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment,30);
500: dbms_sql.bind_variable(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment,30);
501:
502: rows_processed := dbms_sql.execute(cursor_name);
495: dbms_sql.bind_variable(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment,30);
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
497: dbms_sql.bind_variable(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment,30);
498: dbms_sql.bind_variable(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment,30);
499: dbms_sql.bind_variable(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment,30);
500: dbms_sql.bind_variable(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment,30);
501:
502: rows_processed := dbms_sql.execute(cursor_name);
503: IF PG_DEBUG in ('Y', 'C') THEN
496: dbms_sql.bind_variable(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment,30);
497: dbms_sql.bind_variable(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment,30);
498: dbms_sql.bind_variable(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment,30);
499: dbms_sql.bind_variable(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment,30);
500: dbms_sql.bind_variable(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment,30);
501:
502: rows_processed := dbms_sql.execute(cursor_name);
503: IF PG_DEBUG in ('Y', 'C') THEN
504: arp_util.debug('calc_applied_and_remaining: ' || 'After dbms_sql.execute: rows_processed = : '||to_char(rows_processed));
498: dbms_sql.bind_variable(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment,30);
499: dbms_sql.bind_variable(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment,30);
500: dbms_sql.bind_variable(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment,30);
501:
502: rows_processed := dbms_sql.execute(cursor_name);
503: IF PG_DEBUG in ('Y', 'C') THEN
504: arp_util.debug('calc_applied_and_remaining: ' || 'After dbms_sql.execute: rows_processed = : '||to_char(rows_processed));
505: END IF;
506:
500: dbms_sql.bind_variable(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment,30);
501:
502: rows_processed := dbms_sql.execute(cursor_name);
503: IF PG_DEBUG in ('Y', 'C') THEN
504: arp_util.debug('calc_applied_and_remaining: ' || 'After dbms_sql.execute: rows_processed = : '||to_char(rows_processed));
505: END IF;
506:
507: dbms_sql.variable_value(cursor_name , ':line_applied',r_line_applied );
508: dbms_sql.variable_value(cursor_name , ':freight_applied',r_freight_applied );
503: IF PG_DEBUG in ('Y', 'C') THEN
504: arp_util.debug('calc_applied_and_remaining: ' || 'After dbms_sql.execute: rows_processed = : '||to_char(rows_processed));
505: END IF;
506:
507: dbms_sql.variable_value(cursor_name , ':line_applied',r_line_applied );
508: dbms_sql.variable_value(cursor_name , ':freight_applied',r_freight_applied );
509: dbms_sql.variable_value(cursor_name , ':charges_applied',r_charges_applied );
510: dbms_sql.variable_value(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment);
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
504: arp_util.debug('calc_applied_and_remaining: ' || 'After dbms_sql.execute: rows_processed = : '||to_char(rows_processed));
505: END IF;
506:
507: dbms_sql.variable_value(cursor_name , ':line_applied',r_line_applied );
508: dbms_sql.variable_value(cursor_name , ':freight_applied',r_freight_applied );
509: dbms_sql.variable_value(cursor_name , ':charges_applied',r_charges_applied );
510: dbms_sql.variable_value(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment);
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
512: dbms_sql.variable_value(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment);
505: END IF;
506:
507: dbms_sql.variable_value(cursor_name , ':line_applied',r_line_applied );
508: dbms_sql.variable_value(cursor_name , ':freight_applied',r_freight_applied );
509: dbms_sql.variable_value(cursor_name , ':charges_applied',r_charges_applied );
510: dbms_sql.variable_value(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment);
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
512: dbms_sql.variable_value(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment);
513: dbms_sql.variable_value(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment);
506:
507: dbms_sql.variable_value(cursor_name , ':line_applied',r_line_applied );
508: dbms_sql.variable_value(cursor_name , ':freight_applied',r_freight_applied );
509: dbms_sql.variable_value(cursor_name , ':charges_applied',r_charges_applied );
510: dbms_sql.variable_value(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment);
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
512: dbms_sql.variable_value(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment);
513: dbms_sql.variable_value(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment);
514: dbms_sql.variable_value(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment);
507: dbms_sql.variable_value(cursor_name , ':line_applied',r_line_applied );
508: dbms_sql.variable_value(cursor_name , ':freight_applied',r_freight_applied );
509: dbms_sql.variable_value(cursor_name , ':charges_applied',r_charges_applied );
510: dbms_sql.variable_value(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment);
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
512: dbms_sql.variable_value(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment);
513: dbms_sql.variable_value(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment);
514: dbms_sql.variable_value(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment);
515: dbms_sql.variable_value(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment);
508: dbms_sql.variable_value(cursor_name , ':freight_applied',r_freight_applied );
509: dbms_sql.variable_value(cursor_name , ':charges_applied',r_charges_applied );
510: dbms_sql.variable_value(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment);
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
512: dbms_sql.variable_value(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment);
513: dbms_sql.variable_value(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment);
514: dbms_sql.variable_value(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment);
515: dbms_sql.variable_value(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment);
516:
509: dbms_sql.variable_value(cursor_name , ':charges_applied',r_charges_applied );
510: dbms_sql.variable_value(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment);
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
512: dbms_sql.variable_value(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment);
513: dbms_sql.variable_value(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment);
514: dbms_sql.variable_value(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment);
515: dbms_sql.variable_value(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment);
516:
517: IF PG_DEBUG in ('Y', 'C') THEN
510: dbms_sql.variable_value(cursor_name , ':line_tax_treatment' ,l_line_tax_treatment);
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
512: dbms_sql.variable_value(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment);
513: dbms_sql.variable_value(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment);
514: dbms_sql.variable_value(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment);
515: dbms_sql.variable_value(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment);
516:
517: IF PG_DEBUG in ('Y', 'C') THEN
518: arp_util.debug('calc_applied_and_remaining: ' || '(After Execute): dbms_sql variable values: ');
511: dbms_sql.variable_value(cursor_name , ':freight_tax_treatment' ,l_freight_tax_treatment);
512: dbms_sql.variable_value(cursor_name , ':charges_tax_treatment' ,l_charges_tax_treatment);
513: dbms_sql.variable_value(cursor_name , ':o_line_tax_treatment' ,o_line_tax_treatment);
514: dbms_sql.variable_value(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment);
515: dbms_sql.variable_value(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment);
516:
517: IF PG_DEBUG in ('Y', 'C') THEN
518: arp_util.debug('calc_applied_and_remaining: ' || '(After Execute): dbms_sql variable values: ');
519: arp_util.debug('calc_applied_and_remaining: ' || ':currency : '||currency);
514: dbms_sql.variable_value(cursor_name , ':o_freight_tax_treatment' ,o_freight_tax_treatment);
515: dbms_sql.variable_value(cursor_name , ':o_charges_tax_treatment' ,o_charges_tax_treatment);
516:
517: IF PG_DEBUG in ('Y', 'C') THEN
518: arp_util.debug('calc_applied_and_remaining: ' || '(After Execute): dbms_sql variable values: ');
519: arp_util.debug('calc_applied_and_remaining: ' || ':currency : '||currency);
520: arp_util.debug('calc_applied_and_remaining: ' || ':line_applied : '||to_char(r_line_applied));
521: arp_util.debug('calc_applied_and_remaining: ' || ':freight_applied : '||to_char(r_freight_applied));
522: arp_util.debug('calc_applied_and_remaining: ' || ':charges_applied : '||to_char(r_charges_applied));
576: ,l_charges_tax_applied );
577:
578: END IF;
579:
580: dbms_sql.close_cursor(cursor_name);
581:
582: IF ( (sign(amt) * sign ( t_line_remaining ) < 0 )
583: OR (sign(amt) * sign ( t_freight_remaining ) < 0 )
584: OR (sign(amt) * sign ( t_charges_remaining ) < 0 )