1 PACKAGE ARP_CALCULATE_DISCOUNT AUTHID CURRENT_USER AS
2 /* $Header: ARRUDISS.pls 120.3 2006/07/26 07:29:44 naneja ship $ */
3 --
4 -- CONSTANTS
5 --
6 AR_NO_TERM CONSTANT NUMBER := 0;
7 AR_DIRECT_DISC CONSTANT NUMBER := 0;
8 AR_DEFAULT_DISC CONSTANT NUMBER := 1;
9 AR_DIRECT_NEW_DISC CONSTANT NUMBER := 2;
10 AR_DEFAULT_NEW_DISC CONSTANT NUMBER := 3;
11 AR_EARNED_INDICATOR CONSTANT CHAR := 'E';
12 AR_BOTH_INDICATOR CONSTANT CHAR := 'B';
13 FIELD_LENGTH CONSTANT NUMBER := 30;
14 --AR_M_FAILURE CONSTANT NUMBER := 0;
15 --AR_M_NO_RECORD CONSTANT NUMBER := 4;
16 --AR_M_SUCCESS CONSTANT NUMBER := 1;
17 --
18 -- AR/TA Changes
19 -- Global variables included as part of TA customization for enhanced
20 -- discount Calculation
21 --
22 g_error_buf VARCHAR2(2000) ;
23 g_called_from VARCHAR2(20) ;
24 g_profile_id NUMBER ;
25 g_discount_basis VARCHAR2(1);
26 g_discount_date_basis VARCHAR2(30) ;
27 g_discount_date_value DATE ;
28 g_grace_days_used NUMBER(15) ;
29 g_full_discount_flag VARCHAR2(1) ;
30 g_max_allowed_discount NUMBER ;
31 g_discount_percentage NUMBER ;
32 g_org_seg_val VARCHAR2(30) ;
33 g_cust_seg_val VARCHAR2(30) ;
34 g_lob_seg_val VARCHAR2(30) ;
35 g_flex_seg_val VARCHAR2(30) ;
36 g_flex_comments ra_cust_trx_line_gl_dist_all.comments%TYPE;
37 g_rec_account_id ra_cust_trx_line_gl_dist.code_combination_id%TYPE;
38 g_batch_name VARCHAR2(25) ;
39 g_transmission_request_id NUMBER ;
40
41 --
42 TYPE discount_record_type IS RECORD
43 (
44 input_amt NUMBER,
45 grace_days NUMBER,
46 apply_date DATE,
47 disc_partial_pmt_flag VARCHAR2(2),
48 calc_disc_on_lines VARCHAR2(2),
49 earned_both_flag VARCHAR2(2),
50 earned_disc_pct NUMBER,
51 best_disc_pct NUMBER,
52 adjusted_ado NUMBER,
53 max_disc NUMBER,
54 out_earned_disc NUMBER,
55 out_unearned_disc NUMBER,
56 out_amt_to_apply NUMBER,
57 out_discount_date DATE,
58 use_max_cash_flag VARCHAR2(2),
59 default_amt_app VARCHAR2(241),
60 close_invoice_flag VARCHAR2(2)
61 );
62 --
63
64 PROCEDURE get_discount_percentages(
65 p_disc_rec IN OUT NOCOPY arp_calculate_discount.discount_record_type,
66 p_ps_rec IN OUT NOCOPY ar_payment_schedules%ROWTYPE
67 );
68
69 PROCEDURE get_payment_schedule_info(
70 p_disc_rec IN OUT NOCOPY arp_calculate_discount.discount_record_type,
71 p_ps_rec IN OUT NOCOPY ar_payment_schedules%ROWTYPE
72 );
73
74 PROCEDURE correct_lines_only_discounts(
75 p_disc_rec IN OUT NOCOPY arp_calculate_discount.discount_record_type,
76 p_ps_rec IN ar_payment_schedules%ROWTYPE );
77
78 PROCEDURE determine_max_allowed_disc(
79 p_mode IN number,
80 p_disc_rec IN OUT NOCOPY arp_calculate_discount.discount_record_type,
81 p_ps_rec IN ar_payment_schedules%ROWTYPE );
82
83 /*FP bug 5335376 for Bug 5223829 introduced new parameters for handling iReceivables case*/
84 PROCEDURE calculate_discounts (
85 p_input_amt IN NUMBER,
86 p_grace_days IN NUMBER,
87 p_apply_date IN DATE,
88 p_disc_partial_pmt_flag IN VARCHAR2,
89 p_calc_disc_on_lines IN VARCHAR2,
90 p_earned_both_flag IN VARCHAR2,
91 p_use_max_cash_flag IN VARCHAR2,
92 p_default_amt_app IN VARCHAR2,
93 p_earned_disc_pct IN OUT NOCOPY NUMBER,
94 p_best_disc_pct IN OUT NOCOPY NUMBER,
95 p_out_earned_disc IN OUT NOCOPY NUMBER,
96 p_out_unearned_disc IN OUT NOCOPY NUMBER,
97 p_out_discount_date IN OUT NOCOPY DATE,
98 p_out_amt_to_apply IN OUT NOCOPY NUMBER,
99 p_close_invoice_flag IN VARCHAR2,
100 p_payment_schedule_id IN ar_payment_schedules.payment_schedule_id%TYPE,
101 p_term_id IN ar_payment_schedules.term_id%TYPE,
102 p_terms_sequence_number IN ar_payment_schedules.terms_sequence_number%TYPE,
103 p_trx_date IN ar_payment_schedules.trx_date%TYPE,
104 p_amt_due_original IN ar_payment_schedules.amount_due_original%TYPE,
105 p_amt_due_remaining IN ar_payment_schedules.amount_due_remaining%TYPE,
106 p_disc_earned IN ar_payment_schedules.discount_taken_earned%TYPE,
107 p_disc_unearned IN ar_payment_schedules.discount_taken_unearned%TYPE,
108 p_lines_original IN ar_payment_schedules.amount_line_items_original%TYPE,
109 p_invoice_currency_code IN ar_payment_schedules.invoice_currency_code%TYPE,
110 p_select_flag IN VARCHAR2,
111 p_mode IN NUMBER,
112 p_error_code IN OUT NOCOPY NUMBER,
113 p_cash_receipt_id IN NUMBER,
114 p_called_from IN VARCHAR2 DEFAULT 'AR',
115 p_amt_in_dispute IN ar_payment_schedules.amount_in_dispute%TYPE DEFAULT NULL);
116 --
117
118 -- Bug 627518: original routine will now call the overloaded function which
119 -- will take cash_receipt_id as an additional argument for CPG
120
121
122 PROCEDURE discounts_cover(
123 p_mode IN VARCHAR2,
124 p_invoice_currency_code IN ar_cash_receipts.currency_code%TYPE,
125 p_ps_id IN ar_payment_schedules.payment_schedule_id%TYPE,
126 p_term_id IN ra_terms.term_id%TYPE,
127 p_terms_sequence_number IN ar_payment_schedules.terms_sequence_number%TYPE,
128 p_trx_date IN ar_payment_schedules.trx_date%TYPE,
129 p_apply_date IN ar_cash_receipts.receipt_date%TYPE,
130 p_grace_days IN NUMBER,
131 p_default_amt_apply_flag IN VARCHAR2,
132 p_partial_discount_flag IN VARCHAR2,
133 p_calc_discount_on_lines_flag IN VARCHAR2,
134 p_allow_overapp_flag IN VARCHAR2,
135 p_close_invoice_flag IN VARCHAR2,
136 p_earned_disc_pct IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
137 p_best_disc_pct IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
138 p_input_amount IN ar_payment_schedules.amount_due_original%TYPE,
139 p_amount_due_original IN ar_payment_schedules.amount_due_original%TYPE,
140 p_amount_due_remaining IN ar_payment_schedules.amount_due_remaining%TYPE,
141 p_discount_taken_earned IN ar_payment_schedules.amount_due_original%TYPE,
142 p_discount_taken_unearned IN ar_payment_schedules.amount_due_original%TYPE,
143 p_amount_line_items_original IN ar_payment_schedules.amount_line_items_original%TYPE,
144 p_out_discount_date IN OUT NOCOPY DATE,
145 p_out_earned_discount IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
146 p_out_unearned_discount IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
147 p_out_amount_to_apply IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
148 p_out_discount_to_take IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
149 p_module_name IN VARCHAR2,
150 p_module_version IN VARCHAR2,
151 p_allow_discount IN VARCHAR2 DEFAULT 'Y' ); /* Bug fix 3450317 */
152 --
153 PROCEDURE discounts_cover(
154 p_mode IN VARCHAR2,
155 p_invoice_currency_code IN ar_cash_receipts.currency_code%TYPE,
156 p_ps_id IN ar_payment_schedules.payment_schedule_id%TYPE,
157 p_term_id IN ra_terms.term_id%TYPE,
158 p_terms_sequence_number IN ar_payment_schedules.terms_sequence_number%TYPE,
159 p_trx_date IN ar_payment_schedules.trx_date%TYPE,
160 p_apply_date IN ar_cash_receipts.receipt_date%TYPE,
161 p_grace_days IN NUMBER,
162 p_default_amt_apply_flag IN VARCHAR2,
163 p_partial_discount_flag IN VARCHAR2,
164 p_calc_discount_on_lines_flag IN VARCHAR2,
165 p_allow_overapp_flag IN VARCHAR2,
166 p_close_invoice_flag IN VARCHAR2,
167 p_earned_disc_pct IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
168 p_best_disc_pct IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
169 p_input_amount IN ar_payment_schedules.amount_due_original%TYPE,
170 p_amount_due_original IN ar_payment_schedules.amount_due_original%TYPE,
171 p_amount_due_remaining IN ar_payment_schedules.amount_due_remaining%TYPE,
172 p_discount_taken_earned IN ar_payment_schedules.amount_due_original%TYPE,
173 p_discount_taken_unearned IN ar_payment_schedules.amount_due_original%TYPE,
174 p_amount_line_items_original IN ar_payment_schedules.amount_line_items_original%TYPE,
175 p_out_discount_date IN OUT NOCOPY DATE,
176 p_out_earned_discount IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
177 p_out_unearned_discount IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
178 p_out_amount_to_apply IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
179 p_out_discount_to_take IN OUT NOCOPY ar_payment_schedules.amount_due_original%TYPE,
180 p_module_name IN VARCHAR2,
181 p_module_version IN VARCHAR2,
182 p_cash_receipt_id IN NUMBER,
183 p_allow_discount IN VARCHAR2 DEFAULT 'Y' ); /* Bug fix 3450317 */
184
185 /* AR/TA Changes : added this procedure to initialize the value of
186 the package variable g_called_from */
187
188 PROCEDURE set_g_called_from(p_called_from IN varchar2);
189
190 ar_m_fail EXCEPTION;
191 ar_m_no_rec EXCEPTION;
192 END ARP_CALCULATE_DISCOUNT;