DBA Data[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;