The following lines contain the word 'select', 'insert', 'update' or 'delete':
p_select_flag IN BOOLEAN,
p_ps_rec IN OUT NOCOPY ar_payment_schedules%ROWTYPE );
| p_select_flag - Select Flag |
| p_mode - Mode |
| |
| IN OUT: |
| p_disc_rec - Discount Record |
| p_ps_rec - Payment Schedule Record |
| |
| OUT: |
| |
| |
| RETURNS : NONE |
| |
| |
| NOTES |
| |
| MODIFICATION HISTORY - Created by Shiv Ragunat - 05/24/95 |
| 26-Feb-1998 Debbie Jancis Added cash_receipt_id to arguments as |
| per cpg bug 627518. |
| 10-APR-2000 skoukunt Fix bug 1164810, default amount applied |
| when the profile AR: Cash Default Amount|
| Applied OPTION set to Remaining Amount |
| of the Invoice |
| 04/25/02 S.Nambiar Bug 2334691 - If the discount on partial
| payment flag is 'Y' in system option, then
| check the partial payment flag on payment
| term,and take the flag from payment term. But
| if the flag is 'N' in system option, then
| no matter what payment term flag says,partial
| discounts should not be allowed. |
| corrected the issue caused by 2144705 |
| |
+===========================================================================*/
--
/*FP bug 5335376 for 5223829 introduced new parameters*/
PROCEDURE calculate_discounts (
p_input_amt IN NUMBER,
p_grace_days IN NUMBER,
p_apply_date IN DATE,
p_disc_partial_pmt_flag IN VARCHAR2,
p_calc_disc_on_lines IN VARCHAR2,
p_earned_both_flag IN VARCHAR2,
p_use_max_cash_flag IN VARCHAR2,
p_default_amt_app IN VARCHAR2,
p_earned_disc_pct IN OUT NOCOPY NUMBER,
p_best_disc_pct IN OUT NOCOPY NUMBER,
p_out_earned_disc IN OUT NOCOPY NUMBER,
p_out_unearned_disc IN OUT NOCOPY NUMBER,
p_out_discount_date IN OUT NOCOPY DATE,
p_out_amt_to_apply IN OUT NOCOPY NUMBER,
p_close_invoice_flag IN VARCHAR2,
p_payment_schedule_id IN ar_payment_schedules.payment_schedule_id%TYPE,
p_term_id IN ar_payment_schedules.term_id%TYPE,
p_terms_sequence_number IN ar_payment_schedules.terms_sequence_number%TYPE,
p_trx_date IN ar_payment_schedules.trx_date%TYPE,
p_amt_due_original IN ar_payment_schedules.amount_due_original%TYPE,
p_amt_due_remaining IN ar_payment_schedules.amount_due_remaining%TYPE,
p_disc_earned IN ar_payment_schedules.discount_taken_earned%TYPE,
p_disc_unearned IN ar_payment_schedules.discount_taken_unearned%TYPE,
p_lines_original IN ar_payment_schedules.amount_line_items_original%TYPE,
p_invoice_currency_code IN ar_payment_schedules.invoice_currency_code%TYPE,
p_select_flag IN VARCHAR2,
p_mode IN NUMBER,
p_error_code IN OUT NOCOPY NUMBER,
p_cash_receipt_id IN NUMBER,
p_called_from IN VARCHAR2,
p_amt_in_dispute IN ar_payment_schedules.amount_in_dispute%TYPE) IS
--
l_ps_rec ar_payment_schedules%ROWTYPE;
l_select_flag BOOLEAN;
IF (p_select_flag = 'Y')
THEN
IF PG_DEBUG in ('Y', 'C') THEN
arp_standard.debug( 'l_select_flag: TRUE' );
l_select_flag := TRUE;
arp_standard.debug( 'l_select_flag: FALSE' );
l_select_flag := FALSE;
check_input( l_disc_rec, l_select_flag, l_ps_rec) ;
SELECT DECODE( fc.minimum_accountable_unit,
NULL, ROUND( p_out_earned_disc, fc.precision ),
ROUND( p_out_earned_disc/fc.minimum_accountable_unit ) *
( fc.minimum_accountable_unit )
),
DECODE( fc.minimum_accountable_unit,
NULL, ROUND( p_out_unearned_disc, fc.precision ),
ROUND( p_out_unearned_disc/fc.minimum_accountable_unit ) *
( fc.minimum_accountable_unit )
),
DECODE( fc.minimum_accountable_unit,
NULL, ROUND( p_out_amt_to_apply, fc.precision ),
ROUND( p_out_amt_to_apply/fc.minimum_accountable_unit ) *
( fc.minimum_accountable_unit )
)
INTO p_out_earned_disc,
p_out_unearned_disc,
p_out_amt_to_apply
FROM fnd_currencies fc
WHERE fc.currency_code = l_ps_rec.invoice_currency_code;
/* 9214034 - The original select from dual
caused random ORA-6502 errors when called
from iReceivables. Replaced with direct
assignment and init. */
arp_standard.init_standard;
SELECT DECODE( fc.minimum_accountable_unit,
NULL, ROUND( ((p_out_earned_disc/(l_ps_rec.amount_due_remaining-p_out_earned_disc))
*p_input_amt), fc.precision ),
ROUND( ((p_out_earned_disc/(l_ps_rec.amount_due_remaining-p_out_earned_disc))
*p_input_amt)
/fc.minimum_accountable_unit ) *
( fc.minimum_accountable_unit )
)
INTO p_out_earned_disc
FROM fnd_currencies fc
WHERE fc.currency_code = l_ps_rec.invoice_currency_code;
| P_SELECT_FLAG.
+===========================================================================*/
PROCEDURE get_discount_percentages(
p_disc_rec IN OUT NOCOPY arp_calculate_discount.discount_record_type,
p_ps_rec IN OUT NOCOPY ar_payment_schedules%ROWTYPE
) IS
BEGIN
IF PG_DEBUG in ('Y', 'C') THEN
arp_standard.debug( 'arp_calculate_discount.'||
'get_discount_percentages()+' );
| Select Payment Schedule info and populate payment schedule record and |
| two discount record values (calc_disc_on_lines and discount_ |
| partial_payment_flag. |
| |
| |
| SCOPE - PRIVATE |
| |
| EXTERNAL PROCEDURES/FUNCTIONS ACCESSED - NONE |
| |
| ARGUMENTS : IN: |
| |
| IN OUT: |
| p_disc_rec - Discount Record |
| p_ps_rec - Payment Schedule Record |
| |
| OUT: |
| |
| RETURNS : NONE |
| |
| |
| NOTES |
| |
| MODIFICATION HISTORY - Created by Shiv Ragunat - 05/24/95 |
| |
+===========================================================================*/
PROCEDURE get_payment_schedule_info(
p_disc_rec IN OUT NOCOPY arp_calculate_discount.discount_record_type,
p_ps_rec IN OUT NOCOPY ar_payment_schedules%ROWTYPE
) IS
l_payment_schedule_id NUMBER;
SELECT ps.term_id,
ps.terms_sequence_number,
ps.trx_date,
ps.amount_due_original,
ps.amount_due_remaining,
NVL(ps.discount_taken_earned, 0),
NVL(ps.discount_taken_unearned, 0),
NVL(ps.amount_line_items_original, 0),
ps.invoice_currency_code,
ps.amount_in_dispute, /*FP Bug 5335376 for Bug 5223829 assign value of dispute*/
t.calc_discount_on_lines_flag,
t.partial_discount_flag
INTO p_ps_rec.term_id,
p_ps_rec.terms_sequence_number,
p_ps_rec.trx_date,
p_ps_rec.amount_due_original,
p_ps_rec.amount_due_remaining,
p_ps_rec.discount_taken_earned,
p_ps_rec.discount_taken_unearned,
p_ps_rec.amount_line_items_original,
p_ps_rec.invoice_currency_code,
p_ps_rec.amount_in_dispute,/*FP 5335376 for Bug 5223829 assign value of dispute*/
p_disc_rec.calc_disc_on_lines,
p_disc_rec.disc_partial_pmt_flag
FROM ar_payment_schedules ps, ra_terms t
WHERE ps.payment_schedule_id = l_payment_schedule_id
AND ps.term_id = t.term_id(+);
| NVL(,0) instead into SELECT.
+===========================================================================*/
PROCEDURE get_best_discount_percentage(
p_disc_rec IN OUT NOCOPY discount_record_type,
p_ps_rec IN ar_payment_schedules%ROWTYPE
) IS
BEGIN
IF PG_DEBUG in ('Y', 'C') THEN
arp_standard.debug( 'arp_calculate_discount.'||
'get_best_discount_percentage()+' );
SELECT NVL(MAX(discount_percent),0) * 0.01
INTO p_disc_rec.best_disc_pct
FROM RA_TERMS_LINES_DISCOUNTS tld
WHERE
tld.term_id = p_ps_rec.term_id
AND tld.sequence_num = p_ps_rec.terms_sequence_number;
SELECT
td.discount_percent
, td.discount_date
FROM ar_trx_discounts_v td
WHERE
td.payment_schedule_id = p_ps_rec.payment_schedule_id
AND p_calculated_date <= td.discount_date
ORDER BY
td.discount_date ASC;
SELECT nvl(sum(line_adjusted),0), sum(amount), nvl(sum(tax_adjusted),0)
INTO l_line_adjusted, l_amount_adjusted, l_tax_line_adjusted
FROM AR_ADJUSTMENTS
WHERE payment_schedule_id = p_ps_rec.payment_schedule_id
AND status = 'A';
SELECT nvl(sum(line_applied),0), sum(amount_applied),
nvl(sum(tax_applied),0)
INTO l_line_applied, l_amount_applied, l_tax_line_applied
FROM AR_RECEIVABLE_APPLICATIONS
WHERE application_type = 'CM'
AND applied_payment_schedule_id = p_ps_rec.payment_schedule_id
AND status = 'APP'
AND application_rule in ('65','66','67');
SELECT nvl(sum(
DECODE(rctl.line_type, 'LINE', rctl.extended_amount,
DECODE(p_disc_rec.calc_disc_on_lines, 'F',
rctl.extended_amount, 0))),0)
INTO l_numerator
FROM
ra_customer_trx_lines rctl,
ar_payment_schedules ps
WHERE
rctl.line_type IN ('LINE','TAX')
AND nvl(rctl.inventory_item_id,-1) <> l_inventory_item_id
AND nvl(rctl.link_to_cust_trx_line_id,-1)
NOT IN (
SELECT rctl2.customer_trx_line_id
FROM
ra_customer_trx_lines rctl2,
ar_payment_schedules ps2
WHERE
nvl(rctl2.inventory_item_id,-1) = l_inventory_item_id
AND rctl2.customer_trx_id = ps2.customer_trx_id
AND ps2.payment_schedule_id = p_ps_rec.payment_schedule_id
)
AND rctl.customer_trx_id = ps.customer_trx_id
AND ps.payment_schedule_id = p_ps_rec.payment_schedule_id;
SELECT nvl(tax_original,0)
INTO l_tax_original
FROM ar_payment_schedules
WHERE payment_schedule_id = p_ps_rec.payment_schedule_id;
SELECT nvl(freight_original,0)
INTO l_freight_original
FROM ar_payment_schedules
WHERE payment_schedule_id = p_ps_rec.payment_schedule_id;
arp_standard.debug( 'Selecting from database ' );
SELECT sum(amount)
INTO l_amount_adjusted
FROM AR_ADJUSTMENTS
WHERE payment_schedule_id = p_ps_rec.payment_schedule_id
AND status = 'A';
SELECT sum(amount_applied)
INTO l_amount_applied
FROM AR_RECEIVABLE_APPLICATIONS
WHERE application_type = 'CM'
AND applied_payment_schedule_id = p_ps_rec.payment_schedule_id
AND status = 'APP'
AND application_rule in ('65','66','67','75');
/* 9214034 - The original select from dual
caused random ORA-6502 errors when called
from iReceivables. Replaced with direct
assignment and init. */
arp_standard.init_standard;
select nvl(sum(amount_applied),0),
nvl(sum(earned_discount_taken),0),
nvl(sum(unearned_discount_taken),0)
into l_amount_applied_to, l_earned_discount_taken,
l_unearned_discount_taken
from ar_receivable_applications
where applied_payment_schedule_id =
p_ps_rec.payment_schedule_id
and application_type = 'CASH'
and status = 'APP';
| the select flag is checked and if not valid then error is returned. |
| |
| SCOPE - PRIVATE |
| |
| EXETERNAL PROCEDURES/FUNCTIONS ACCESSED - NONE |
| |
| ARGUMENTS : IN: |
| p_disc_rec - Discount Record |
| p_select_flag - Select Flag |
| |
| IN OUT: |
| p_ps_rec - Payment Schedule Record |
| |
| OUT: |
| |
| RETURNS : TRUE / FALSE |
| |
| MODIFICATION HISTORY - Created by Shiv Ragunat - 05/25/95 |
| |
| T Schraid - 07/26/96 Modified to allow new discount bases: |
| 'I', 'L', 'T', 'F'. Retained original |
| values of 'Y' and 'N'. |
+===========================================================================*/
PROCEDURE check_input(
p_disc_rec IN discount_record_type,
p_select_flag IN BOOLEAN,
p_ps_rec IN OUT NOCOPY ar_payment_schedules%ROWTYPE ) IS
BEGIN
IF PG_DEBUG in ('Y', 'C') THEN
arp_standard.debug( 'arp_calculate_discount.check_input() +' );
IF p_select_flag = FALSE
THEN
IF p_ps_rec.term_id IS NOT NULL AND p_ps_rec.terms_sequence_number IS NOT NULL
THEN
IF p_disc_rec.disc_partial_pmt_flag <> 'Y' AND
p_disc_rec.disc_partial_pmt_flag <> 'N'
THEN
IF PG_DEBUG in ('Y', 'C') THEN
arp_standard.debug( 'arp_calculate_discount.check_input : Invalid value for p_disc_rec.disc_partial_pmt_flag' );
IF ( p_select_flag <> TRUE AND p_select_flag <> FALSE ) THEN
IF PG_DEBUG in ('Y', 'C') THEN
arp_standard.debug( 'arp_calculate_discount.check_input : Invalid value for p_select_flag. Must be TRUE or FALSE.' );
IF p_select_flag = FALSE
THEN
IF ( p_ps_rec.term_id IS NULL )
THEN
p_ps_rec.term_id := AR_NO_TERM;
l_select_flag CHAR := 'N';
l_select_flag,
p_mode,
l_error_code,
p_cash_receipt_id );