[Home] [Help]
PACKAGE BODY: APPS.ARP_NON_DB_PKG
Source
1 PACKAGE BODY ARP_NON_DB_PKG AS
2 /* $Header: ARXNODBB.pls 120.7 2005/10/30 04:28:06 appldev ship $ */
3
4 /***************************************************************************
5 Declare Private Procedures
6 ****************************************************************************/
7
8 PG_DEBUG varchar2(1) := NVL(FND_PROFILE.value('AFLOG_ENABLED'), 'N');
9
10 PROCEDURE raise_error( p_message_code IN VARCHAR2 );
11
12 -- PUBLIC procedures
13
14 PROCEDURE check_natural_application(
15 p_creation_sign IN VARCHAR2,
16 p_allow_overapplication_flag IN VARCHAR2,
17 p_natural_app_only_flag IN VARCHAR2,
18 p_sign_of_ps IN VARCHAR2 DEFAULT '-',
19 p_chk_overapp_if_zero IN VARCHAR2 DEFAULT 'N',
20 p_payment_amount IN NUMBER,
21 p_discount_taken IN NUMBER,
22 p_amount_due_remaining IN NUMBER,
23 p_amount_due_original IN NUMBER,
24 event IN VARCHAR2 DEFAULT NULL,
25 p_lockbox_record IN BOOLEAN DEFAULT FALSE) IS
26
27 l_message_name VARCHAR2(50);
28
29 BEGIN
30 IF PG_DEBUG in ('Y', 'C') THEN
31 arp_standard.debug('raise_error: ' || 'arp_non_db_pkg.check_natural_application(1)+');
32 END IF;
33 arp_non_db_pkg.check_natural_application(
34 p_creation_sign,
35 p_allow_overapplication_flag,
36 p_natural_app_only_flag,
37 p_sign_of_ps,
38 p_chk_overapp_if_zero,
39 p_payment_amount,
40 p_discount_taken,
41 p_amount_due_remaining,
42 p_amount_due_original,
43 event,
44 l_message_name,
45 p_lockbox_record);
46
47 IF ( l_message_name IS NOT NULL)
48 THEN
49 arp_non_db_pkg.raise_error( l_message_name );
50 END IF;
51 IF PG_DEBUG in ('Y', 'C') THEN
52 arp_standard.debug('raise_error: ' || 'arp_non_db_pkg.check_natural_application(1)-');
53 END IF;
54
55 EXCEPTION
56 WHEN OTHERS THEN
57
58 -- 12/5/1995 H.Kaukovuo Added debug statements for problem solving.
59 IF PG_DEBUG in ('Y', 'C') THEN
60 arp_standard.debug('-- ARP_NON_DB_PK.RAISE_ERROR: EXCEPTION');
61 arp_standard.debug('raise_error: ' || '-- Printing out NOCOPY package parameters:');
62 arp_standard.debug('raise_error: ' || '-- p_creation_sign = '||p_creation_sign);
63 arp_standard.debug('raise_error: ' || '-- p_allow_overapplication_flag = '||
64 p_allow_overapplication_flag);
65 arp_standard.debug('raise_error: ' || '-- p_natural_app_only_flag = '||
66 p_natural_app_only_flag);
67 arp_standard.debug('raise_error: ' || '-- p_sign_of_ps = '||p_sign_of_ps);
68 arp_standard.debug('raise_error: ' || '-- p_chk_overapp_if_zero = '||p_chk_overapp_if_zero);
69 arp_standard.debug('raise_error: ' || '-- p_payment_amount = '||to_char(p_payment_amount));
70 arp_standard.debug('raise_error: ' || '-- p_discount_taken = '||to_char(p_discount_taken));
71 arp_standard.debug('raise_error: ' || '-- p_amount_due_remaining = '||
72 to_char(p_amount_due_remaining));
73 arp_standard.debug('raise_error: ' || '-- p_amount_due_original = '||
74 to_char(p_amount_due_original));
75 arp_standard.debug('raise_error: ' || '-- event = '||event);
76 END IF;
77 RAISE;
78
79 END;
80
81
82 PROCEDURE check_natural_application(
83 p_creation_sign IN VARCHAR2,
84 p_allow_overapplication_flag IN VARCHAR2,
85 p_natural_app_only_flag IN VARCHAR2,
86 p_sign_of_ps IN VARCHAR2,
87 p_chk_overapp_if_zero IN VARCHAR2,
88 p_payment_amount IN NUMBER,
89 p_discount_taken IN NUMBER,
90 p_amount_due_remaining IN NUMBER,
91 p_amount_due_original IN NUMBER,
92 event IN VARCHAR2,
93 p_message_name OUT NOCOPY VARCHAR2,
94 p_lockbox_record IN BOOLEAN DEFAULT FALSE) IS
95 l_payment_amount NUMBER;
96 l_sign_value_of_ps NUMBER := 0;
97 l_temp_amount NUMBER := 0;
98 l_debug VARCHAR2(5) := 'N';
99 l_message_name VARCHAR2(50); /*Bug 3842116*/
100
101 BEGIN
102 IF PG_DEBUG in ('Y', 'C') THEN
103 arp_standard.debug('raise_error: ' || 'arp_non_db_pkg.check_natural_application(2)+');
104 END IF;
105
106 p_message_name := NULL;
107
108 -- 12/5/95 H.Kaukovuo
109 -- This 'IF' is needed because this package can be used in client
110 -- site and we don't want to have unnecessary network rounds.
111 -- Normally these kind of IF statements are NOT needed.
112 IF (l_debug='Y') THEN
113 -- +----------------------------------------------------------+
114 -- | This is for debug purposes. Comment out NOCOPY when not needed. |
115 -- +----------------------------------------------------------+
116 IF PG_DEBUG in ('Y', 'C') THEN
117 arp_standard.debug('raise_error: ' || '-- p_creation_sign ='||p_creation_sign);
118 arp_standard.debug('raise_error: ' || '-- p_allow_overapplication_flag ='||
119 p_allow_overapplication_flag);
120 arp_standard.debug('raise_error: ' || '-- p_natural_app_only_flag ='||
121 p_natural_app_only_flag);
122 arp_standard.debug('raise_error: ' || '-- p_sign_of_ps ='||p_sign_of_ps);
123 arp_standard.debug('raise_error: ' || '-- p_chk_overapp_if_zero ='||p_chk_overapp_if_zero);
124 arp_standard.debug('raise_error: ' || '-- p_payment_amount ='||to_char(p_payment_amount));
125 arp_standard.debug('raise_error: ' || '-- p_discount_taken ='||to_char(p_discount_taken));
126 arp_standard.debug('raise_error: ' || '-- p_amount_due_remaining='||
127 to_char(p_amount_due_remaining));
128 arp_standard.debug('raise_error: ' || '-- p_amount_due_original='||
129 to_char(p_amount_due_original));
130 arp_standard.debug('raise_error: ' || '-- event ='||event);
131 END IF;
132 END IF;
133
134 /*----------------------------+
135 | Checking out NOCOPY the parameters |
136 +----------------------------*/
137 IF PG_DEBUG in ('Y', 'C') THEN
138 arp_standard.debug('raise_error: ' || '-- Checking out NOCOPY the parameters');
139 END IF;
140 IF ( p_creation_sign IS NULL ) THEN
141 p_message_name := 'AR_CKAP_CRE_SIGN_NULL';
142
143 ELSIF ( p_allow_overapplication_flag IS NULL ) THEN
144 p_message_name := 'AR_CKAP_OVERAPP_FLAG_NULL';
145
146 ELSIF ( p_natural_app_only_flag IS NULL ) THEN
147 p_message_name := 'AR_CKAP_NAT_FLAG_NULL';
148
149 ELSIF ( ( p_sign_of_ps <> '-' ) AND
150 ( p_sign_of_ps <> '+' ) ) THEN
151 p_message_name := 'AR_CKAP_SIGN_INVALID';
152 END IF;
153
154 --
155 -- If allow over application, return AR_CKAP_SUCCESS.
156 --
157 IF ( p_allow_overapplication_flag = 'Y' ) THEN
158 RETURN;
159 END IF;
160
161 /***********************************************************************
162 -- If sign = '-' then l_payment_amount = (-1) * (payment_amount + disc)
163 -- else l_payment_amount = (payment_amount + disc)
164 ************************************************************************/
165
166 l_payment_amount := NVL( p_payment_amount, 0 ) +
167 NVL( p_discount_taken, 0 );
168 IF ( p_sign_of_ps = '-' ) THEN
169 l_payment_amount := (-1) * l_payment_amount;
170 END IF;
171
172 --
173 -- IF amount_due_remaining is not zero, Use the sign of ADR
174 -- as the sign of payment schedule.
175 --
176 IF PG_DEBUG in ('Y', 'C') THEN
177 arp_standard.debug('raise_error: ' || '-- Checking amount due remaining');
178 END IF;
179
180 IF ( NVL( p_amount_due_remaining, 0 ) < 0 ) THEN
181 l_sign_value_of_ps:= -1;
182 ELSIF ( NVL( p_amount_due_remaining, 0 ) > 0 ) THEN
183 l_sign_value_of_ps := 1;
184 --
185 -- Else if, amount_due_original is zero, Use the sign of ADO
186 -- as the sign of payment schedule.
187 --
188 ELSE
189 IF ( NVL( p_amount_due_original, 0 ) < 0 ) THEN
190 l_sign_value_of_ps:= -1;
191 ELSIF ( NVL( p_amount_due_original, 0 ) > 0 ) THEN
192 l_sign_value_of_ps:= 1;
193 --
194 -- Else if, ADO AND ADR is zero, Use the sign of ADO
195 -- as the sign of payment schedule.
196 --
197 ELSE
198 --
199 -- Check if chk_overapp_if_zero = Y. If so, then if
200 -- payment_amount <> 0, return failure, else if amount = 0,
201 -- return success.
202 --
203 IF ( p_chk_overapp_if_zero = 'Y' ) THEN
204 IF ( l_payment_amount <> 0 AND NOT(p_lockbox_record)) THEN
205 p_message_name := 'AR_CKAP_OVERAPP';
206 ELSE
207 RETURN;
208 END IF;
209 END IF;
210 END IF;
211 --
212 -- check the creation_sign. The amount changed should only make the
213 -- amount_due_remaining go to where the creation_sign allows
214 --
215
216 arp_non_db_pkg.check_creation_sign( p_creation_sign,
217 l_payment_amount, event,
218 l_message_name); /*Bug 3842116*/
219 IF l_message_name IS NOT NULL /*Bug 3842116*/
220 THEN
221 p_message_name := 'AR_CKAP_OVERAPP';
222 END IF;
223 END IF;
224
225 --
226 -- Then check whether it violates overapplication flag and natural
227 -- application flag.
228 --
229 l_temp_amount := NVL( p_amount_due_remaining, 0 ) + l_payment_amount;
230 IF ( ( l_sign_value_of_ps * l_temp_amount ) < 0 AND NOT(p_lockbox_record)) THEN
231 p_message_name := 'AR_CKAP_OVERAPP';
232 END IF;
233 --
234 -- check natural application
235 --
236
237 IF (p_natural_app_only_flag = 'Y') THEN
238 IF ( l_payment_amount < 0 ) THEN
239 l_temp_amount := -1;
240 ELSIF ( l_payment_amount > 0 ) THEN
241 l_temp_amount := 1;
242 ELSE
243 l_temp_amount := 0;
244 END IF;
245
246 -- 11/27/1995 H.Kaukovuo Changed "<>1" to "= 1"
247 IF (( l_sign_value_of_ps * l_temp_amount ) = 1) THEN
248 p_message_name := 'AR_CKAP_NATURALAPP';
249 END IF;
250 END IF;
251
252 IF PG_DEBUG in ('Y', 'C') THEN
253 arp_standard.debug('raise_error: ' || 'arp_non_db_pkg.check_natural_application(2)-'|| p_message_name);
254 END IF;
255
256 END check_natural_application;
257
258
259 PROCEDURE check_creation_sign(
260 p_creation_sign IN VARCHAR2,
261 p_amount IN NUMBER,
262 event IN VARCHAR2,
263 p_message_name OUT NOCOPY VARCHAR2) IS
264 BEGIN
265 IF PG_DEBUG in ('Y', 'C') THEN
266 arp_standard.debug('raise_error: ' || 'arp_non_db_pkg.check_creation_sign(1)+');
267 END IF;
268 p_message_name := NULL;
269
270 IF ( p_creation_sign = 'A' ) THEN
271 RETURN;
272 ELSIF ( p_creation_sign = 'P' ) THEN
273 IF ( NVL( p_amount, 0 ) < 0 ) THEN
274 p_message_name := 'AR_CKAP_CT_SIGN';
275 END IF;
276 ELSIF ( p_creation_sign = 'N' ) THEN
277 IF ( NVL( p_amount, 0 ) > 0 ) THEN
278 p_message_name := 'AR_CKAP_CT_SIGN';
279 END IF;
280 ELSE
281 p_message_name := 'AR_CKAP_INV_CT_SIGN';
282 END IF;
283 IF PG_DEBUG in ('Y', 'C') THEN
284 arp_standard.debug('raise_error: ' || 'arp_non_db_pkg.check_creation_sign(1)-');
285 END IF;
286 END check_creation_sign;
287
288
289 PROCEDURE check_creation_sign(
290 p_creation_sign IN VARCHAR2,
291 p_amount IN NUMBER,
292 event IN VARCHAR2 DEFAULT NULL ) IS
293
294 l_message_name VARCHAR2(50);
295
296 BEGIN
297 IF PG_DEBUG in ('Y', 'C') THEN
298 arp_standard.debug('raise_error: ' || 'arp_non_db_pkg.check_creation_sign(2)+');
299 END IF;
300 check_creation_sign(
301 p_creation_sign,
302 p_amount,
303 event,
304 l_message_name );
305
306 IF ( l_message_name IS NOT NULL )
307 THEN
308 arp_non_db_pkg.raise_error(l_message_name);
309 END IF;
310
311 IF PG_DEBUG in ('Y', 'C') THEN
312 arp_standard.debug('raise_error: ' || 'arp_non_db_pkg.check_creation_sign(2)-');
313 END IF;
314 END check_creation_sign;
315
316
317 /*------------------------------------------------------------------------+
318 | This procedure does a RAISE app_exception.application_exception that is |
319 | compatible with forms and Server side. |
320 | History:
321 | 1/25/1996 Harri Kaukovuo Changed to use
322 | app_exception.raise_exception because
323 | of ORA-6512 errors.
324 | 03-FEB-00 Saloni Shah Added fnd_msg_pub.add |
325 +------------------------------------------------------------------------*/
326 PROCEDURE raise_error( p_message_code IN VARCHAR2 ) IS
327 BEGIN
328
329 fnd_message.set_name('AR', p_message_code);
330 fnd_msg_pub.add;
331 --sbkini bug 2115049
332 fnd_message.set_name('AR',p_message_code);
333 -- end bug 2115049
334 app_exception.raise_exception;
335
336 END raise_error;
337
338 END ARP_NON_DB_PKG;