DBA Data[Home] [Help]

PACKAGE BODY: APPS.AP_AUTOMATIC_PROPAGATION_PKG

Source


1 PACKAGE BODY AP_AUTOMATIC_PROPAGATION_PKG AS
2 /* $Header: apautprb.pls 120.6 2011/02/23 12:12:34 ankuprad noship $ */
3 
4 FUNCTION Get_Affected_Invoices_Count(
5    P_external_bank_account_id iby_ext_bank_accounts.ext_bank_account_id%TYPE,
6    P_vendor_id                ap_suppliers.vendor_id%TYPE,
7    P_vendor_site_id           ap_supplier_sites.vendor_site_id%TYPE DEFAULT NULL,
8    P_party_Site_Id            ap_supplier_sites.party_site_id%TYPE  DEFAULT NULL,
9    P_org_id                   ap_invoices.org_id%TYPE  DEFAULT NULL
10   ) RETURN NUMBER IS
11   l_affected_invoices NUMBER := 0;
12 BEGIN
13   BEGIN
14     --Address + OU level checking
15     IF (P_party_Site_Id IS NOT NULL and P_org_Id IS NOT NULL) THEN
16       SELECT COUNT(DISTINCT ai.invoice_id)
17       INTO   l_affected_invoices
18       FROM   ap_invoices_all ai, ap_payment_schedules_all aps
19       WHERE  aps.external_bank_account_id  = p_external_bank_account_id
20          AND    ai.invoice_id                 = aps.invoice_id
21       -- AND    ai.payment_status_flag        IN ('N','P') /* Bug 11783234 Exclude 'partial paid payment schedules' status */
22          AND    ai.payment_status_flag        = 'N'
23          AND    ai.cancelled_date             IS NULL
24          AND    ai.vendor_id                = p_vendor_id
25          AND    ai.org_id                   = p_org_id
26          AND    (ai.party_site_id           = p_party_site_id
27 	         or ( ai.party_site_id is null
28 		      and  ai.vendor_site_id in (select vendor_site_id
29 		                                 from ap_supplier_sites ass
30 		                                 where ass.party_site_id = p_party_site_id
31 					           and ass.vendor_id   = p_vendor_id)
32                     )
33 		 )
34          AND    aps.checkrun_id		      IS NULL; /* Bug 11783234 Added condition to remove selected invoices from this API */
35 
36     --Address level checking
37     ELSIF (P_party_Site_Id IS NOT NULL) THEN
38       SELECT COUNT(DISTINCT ai.invoice_id)
39       INTO   l_affected_invoices
40       FROM   ap_invoices_all ai, ap_payment_schedules_all aps
41       WHERE  aps.external_bank_account_id  = p_external_bank_account_id
42          AND    ai.invoice_id                 = aps.invoice_id
43       -- AND    ai.payment_status_flag        IN ('N','P') /* Bug 11783234 Exclude 'partial paid payment schedules' status */
44 	 AND    ai.payment_status_flag        = 'N'
45          AND    ai.cancelled_date             IS NULL
46          AND    ai.vendor_id                = p_vendor_id
47          AND    (ai.party_site_id           = p_party_site_id
48 	         or ( ai.party_site_id is null
49 		      and  ai.vendor_site_id in (select vendor_site_id
50 		                                 from ap_supplier_sites ass
51 		                                 where ass.party_site_id = p_party_site_id
52 					           and ass.vendor_id   = p_vendor_id)
53                     )
54 		 )
55           AND   aps.checkrun_id			IS NULL; /* Bug 11783234 Added condition to remove selected invoices from this API */
56 
57         --Supplier Site level checking
58     ELSIF p_vendor_site_id IS NOT NULL THEN
59       SELECT COUNT(DISTINCT ai.invoice_id)
60       INTO   l_affected_invoices
61       FROM   ap_invoices_all ai, ap_payment_schedules_all aps
62       WHERE  aps.external_bank_account_id  = p_external_bank_account_id
63         AND    ai.invoice_id                 = aps.invoice_id
64     --  AND    ai.payment_status_flag        IN ('N','P') /* Bug 11783234 Exclude 'partial paid payment schedules' status */
65         AND    ai.payment_status_flag        = 'N'
66         AND    ai.cancelled_date             IS NULL
67         AND    ai.vendor_id                  = p_vendor_id
68         AND    ai.vendor_site_id             = p_vendor_site_id
69 	AND    aps.checkrun_id		     IS NULL; /* Bug 11783234 Added condition to remove selected invoices from this API */
70               --Supplier level checking
71     ELSE
72       SELECT COUNT(DISTINCT ai.invoice_id)
73       INTO   l_affected_invoices
74       FROM   ap_invoices_all ai, ap_payment_schedules_all aps
75       WHERE  aps.external_bank_account_id  = p_external_bank_account_id
76         AND    ai.invoice_id                 = aps.invoice_id
77      -- AND    ai.payment_status_flag        IN ('N','P') /* Bug 11783234 Exclude 'partial paid payment schedules' status */
78         AND    ai.payment_status_flag        = 'N'
79         AND    ai.cancelled_date             IS NULL
80         AND    ai.vendor_id                  = p_vendor_id
81 	AND    aps.checkrun_id	             IS  NULL; /* Bug 11783234 Added condition to remove selected invoices from this API */
82     END IF;
83 
84   EXCEPTION
85     WHEN NO_DATA_FOUND THEN
86       l_affected_invoices := 0;
87   END;
88   RETURN l_affected_invoices;
89 END Get_Affected_Invoices_Count;
90 
91 /* Bug 10634847  Added API to return selected invoices for payments count */
92 FUNCTION Get_Selected_Invoices_Count(
93    P_external_bank_account_id iby_ext_bank_accounts.ext_bank_account_id%TYPE,
94    P_vendor_id                ap_suppliers.vendor_id%TYPE,
95    P_vendor_site_id           ap_supplier_sites.vendor_site_id%TYPE DEFAULT NULL,
96    P_party_Site_Id            ap_supplier_sites.party_site_id%TYPE  DEFAULT NULL,
97    P_org_id                   ap_invoices.org_id%TYPE  DEFAULT NULL
98   ) RETURN NUMBER IS
99   l_affected_invoices NUMBER := 0;
100 
101 G_LEVEL_STATEMENT       CONSTANT NUMBER       := FND_LOG.LEVEL_STATEMENT;
102 G_CURRENT_RUNTIME_LEVEL CONSTANT NUMBER       := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
103 G_MODULE_NAME           CONSTANT VARCHAR2(50) := 'AP_AUTOMATIC_PROPAGATION_PKG';
104 
105 l_api_name              VARCHAR2(100) := 'Get_Selected_Invoices_Count';
106 l_debug_info            varchar2(3000);
107 
108 BEGIN
109 -- Added debug messages for bug 10634847
110     l_debug_info := 'ENTER Get_Selected_Invoices_Count';
114 
111     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
112        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
113     END IF;
115     l_debug_info := 'P_org_Id :'||P_org_Id;
116     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
117        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
118     END IF;
119 
120     l_debug_info := 'p_vendor_id :'||p_vendor_id;
121     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
122        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
123     END IF;
124 
125 
126     l_debug_info := 'P_party_Site_Id :'||P_party_Site_Id;
127     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
128        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
129     END IF;
130 
131   BEGIN
132     --Address + OU level checking
133     IF (P_party_Site_Id IS NOT NULL and P_org_Id IS NOT NULL) THEN
134       SELECT COUNT(DISTINCT ai.invoice_id)
135       INTO   l_affected_invoices
136       FROM   ap_invoices_all ai, ap_payment_schedules_all aps
137       WHERE  aps.external_bank_account_id  = p_external_bank_account_id
138          AND    ai.invoice_id                 = aps.invoice_id
139          AND    ai.payment_status_flag        IN ('N','P')
140          AND    ai.cancelled_date             IS NULL
141          AND    ai.vendor_id                = p_vendor_id
142          AND    ai.org_id                   = p_org_id
143          AND    (ai.party_site_id           = p_party_site_id
144 	         or ( ai.party_site_id is null
145 		      and  ai.vendor_site_id in (select vendor_site_id
146 		                                 from ap_supplier_sites ass
147 		                                 where ass.party_site_id = p_party_site_id
148 					           and ass.vendor_id   = p_vendor_id)
149                     )
150 		 )
151 	AND aps.checkrun_id			IS NOT NULL;
152 
153     --Address level checking
154     ELSIF (P_party_Site_Id IS NOT NULL) THEN
155       SELECT COUNT(DISTINCT ai.invoice_id)
156       INTO   l_affected_invoices
157       FROM   ap_invoices_all ai, ap_payment_schedules_all aps
158       WHERE  aps.external_bank_account_id  = p_external_bank_account_id
159          AND    ai.invoice_id                 = aps.invoice_id
160          AND    ai.payment_status_flag        IN ('N','P')
161          AND    ai.cancelled_date             IS NULL
162          AND    ai.vendor_id                = p_vendor_id
163          AND    (ai.party_site_id           = p_party_site_id
164 	         or ( ai.party_site_id is null
165 		      and  ai.vendor_site_id in (select vendor_site_id
166 		                                 from ap_supplier_sites ass
167 		                                 where ass.party_site_id = p_party_site_id
168 					           and ass.vendor_id   = p_vendor_id)
169                     )
170 		 )
171 	AND aps.checkrun_id			IS NOT NULL;
172 
173         --Supplier Site level checking
174     ELSIF p_vendor_site_id IS NOT NULL THEN
175       SELECT COUNT(DISTINCT ai.invoice_id)
176       INTO   l_affected_invoices
177       FROM   ap_invoices_all ai, ap_payment_schedules_all aps
178       WHERE  aps.external_bank_account_id  = p_external_bank_account_id
179         AND    ai.invoice_id                 = aps.invoice_id
180         AND    ai.payment_status_flag        IN ('N','P')
181         AND    ai.cancelled_date             IS NULL
182         AND    ai.vendor_id                  = p_vendor_id
183         AND    ai.vendor_site_id             = p_vendor_site_id
184 	AND aps.checkrun_id	         	IS NOT NULL;
185               --Supplier level checking
186     ELSE
187       SELECT COUNT(DISTINCT ai.invoice_id)
188       INTO   l_affected_invoices
189       FROM   ap_invoices_all ai, ap_payment_schedules_all aps
190       WHERE  aps.external_bank_account_id  = p_external_bank_account_id
191         AND    ai.invoice_id                 = aps.invoice_id
192         AND    ai.payment_status_flag        IN ('N','P')
193         AND    ai.cancelled_date             IS NULL
194         AND    ai.vendor_id                  = p_vendor_id
195 	AND aps.checkrun_id			IS NOT NULL;
196     END IF;
197 
198   EXCEPTION
199     WHEN OTHERS THEN
200       l_affected_invoices := 0;
201       l_debug_info := 'Exception occured in Get_Selected_Invoices_Count  :'||SQLERRM;
202 				IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
203 	                            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
204 		                END IF;
205   END;
206   RETURN l_affected_invoices;
207 END Get_Selected_Invoices_Count;
208 
209 PROCEDURE Update_Payment_Schedules (
210     p_from_bank_account_id iby_ext_bank_accounts.ext_bank_account_id%TYPE,
211     p_to_bank_account_id   iby_ext_bank_accounts.ext_bank_account_id%TYPE,
212     p_vendor_id            ap_suppliers.vendor_id%TYPE,
213     P_vendor_site_id       ap_supplier_sites.vendor_site_id%TYPE DEFAULT NULL,
214     P_party_Site_Id        ap_supplier_sites.party_site_id%TYPE  DEFAULT NULL,
215     P_org_id               ap_invoices.org_id%TYPE  DEFAULT NULL,
216     P_party_id             ap_suppliers.party_id%TYPE	DEFAULT NULL			-- Added for bug 9410719
217    ) IS
218 
219 -- Added for bug 9410719
220 G_LEVEL_STATEMENT       CONSTANT NUMBER       := FND_LOG.LEVEL_STATEMENT;
221 G_CURRENT_RUNTIME_LEVEL CONSTANT NUMBER       := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
222 G_MODULE_NAME           CONSTANT VARCHAR2(50) := 'AP_AUTOMATIC_PROPAGATION_PKG';
223 
224 l_api_name              VARCHAR2(100) := 'Update_Payment_Schedules';
225 l_debug_info            varchar2(3000);
226 
227 l_to_bank_account_id    iby_ext_bank_accounts.ext_bank_account_id%TYPE;
228 P_org_type		IBY_EXTERNAL_PAYEES_ALL.org_type%TYPE	:= 'OPERATING_UNIT';
229 P_pmt_function		IBY_EXTERNAL_PAYEES_ALL.payment_function%TYPE	:= 'PAYABLES_DISB';
230 
231 BEGIN
235        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
232    -- Added debug messages for bug 9410719
233     l_debug_info := 'ENTER Update_Payment_Schedules';
234     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
236     END IF;
237 
238     l_debug_info := 'P_org_Id :'||P_org_Id;
239     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
240        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
241     END IF;
242 
243     l_debug_info := 'P_from_bank_account_id :'||p_from_bank_account_id;
244     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
245        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
246     END IF;
247 
248     l_debug_info := 'p_vendor_id :'||p_vendor_id;
249     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
250        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
251     END IF;
252 
253     l_debug_info := 'p_party_id :'||p_party_id;
254     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
255        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
256     END IF;
257 
258     l_debug_info := 'P_party_Site_Id :'||P_party_Site_Id;
259     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
260        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
261     END IF;
262 
263     l_debug_info := 'Calling IBY_DISBURSE_UI_API_PUB_PKG.intialize';
264     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
265        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
266     END IF;
267 
268     IBY_DISBURSE_UI_API_PUB_PKG.initialize;
269 
270    IF (P_party_Site_Id IS NOT NULL and P_org_Id IS NOT NULL) THEN
271 	-- Added For Loop/IBY Call for bug 9410719
272 	FOR x IN (SELECT aps.invoice_id, aps.payment_num, ai.payment_currency_code, ai.vendor_site_id
273                   FROM   ap_payment_schedules_all aps,ap_invoices_all ai
274                   WHERE  aps.invoice_id = ai.invoice_id
275                   AND    aps.external_bank_account_id = p_from_bank_account_id
276 		   -- Added the below two condition for the bug 10401158
277                   AND    aps.checkrun_id is NULL
278                   AND    nvl(aps.payment_status_flag , 'N') = 'N'
279                   AND    ai.payment_status_flag        IN ('N','P')
280                   AND    ai.cancelled_date             IS NULL
281                   AND    ai.vendor_id                  = p_vendor_id
282                   AND    ai.org_id                     = p_org_id
283                   AND   (ai.party_site_id              = p_party_site_id
284                          OR   (ai.party_site_id is NULL
285                                AND  ai.vendor_site_id in (SELECT vendor_site_id
286                                                           FROM ap_supplier_sites ass
287                                                           WHERE ass.party_site_id = p_party_site_id
288                                                           AND ass.vendor_id   = p_vendor_id)
289                               )
290                         )
291                   )
292           LOOP
293                 BEGIN
294 			IBY_DISBURSE_UI_API_PUB_PKG.get_default_bank_acct(x.payment_currency_code,
295 				                                          P_party_id,
296 					                                  P_party_Site_Id,
297 						                          x.vendor_site_id,
298 							                  P_org_id,
299 								          P_org_type,
300 									  P_pmt_function,
301 									  p_from_bank_account_id,
302 	                                                                  l_to_bank_account_id
303 		                                                         );
304 
305 			l_debug_info := '1. l_to_bank_account_id returned :'||p_to_bank_account_id;
306 	                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
307 	                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
308 	                END IF;
309 
310 
311 			UPDATE ap_payment_schedules_all aps
312 			SET aps.external_bank_account_id = l_to_bank_account_id,
313 		            last_update_date  = SYSDATE,
314 			    last_updated_by   = FND_GLOBAL.user_id,
315 		            last_update_login = FND_GLOBAL.login_id
316 		        WHERE aps.invoice_id = x.invoice_id -- Added and commented below code for bug 9410719
317 			AND   aps.payment_num = x.payment_num;
318 
319 			--Bug10065192: Update the bank at invoice header level, so recalculation of
320 			--payment schedules does not reinstate the inactive bank
321 			UPDATE ap_invoices_all ai
322 			SET ai.external_bank_account_id = l_to_bank_account_id,
323 		        ai.last_update_date  = SYSDATE,
324 			    ai.last_updated_by   = FND_GLOBAL.user_id,
325 		        ai.last_update_login = FND_GLOBAL.login_id
326 		    WHERE ai.invoice_id = x.invoice_id;
327 
328 /*			WHERE aps.invoice_id IN
329            (SELECT DISTINCT ai.invoice_id
330             FROM   ap_invoices_all ai, ap_payment_schedules_all aps
331             WHERE  aps.external_bank_account_id  = p_from_bank_account_id
332             AND    ai.invoice_id                 = aps.invoice_id
333             AND    ai.payment_status_flag        IN ('N','P')
334             AND    ai.cancelled_date             IS NULL
335             AND    ai.vendor_id                  = p_vendor_id
336             AND    ai.org_id                     = p_org_id
337             AND   (ai.party_site_id           = p_party_site_id
338 	           or ( ai.party_site_id is null
339 		      and  ai.vendor_site_id in (select vendor_site_id
340 		                                 from ap_supplier_sites ass
341 		                                 where ass.party_site_id = p_party_site_id
342 					           and ass.vendor_id   = p_vendor_id)
343                      )
344 		   )
345 	    );
346   */
350 				l_debug_info := 'Exception occured when party_site_id and org_id is not null :'||SQLERRM;
347 -- Added Exception handling for above code for bug 9410719
348 		EXCEPTION
349 			WHEN OTHERS THEN
351 				IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
352 	                            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
353 		                END IF;
354                 END;
355           END LOOP;
356 
357    ELSIF (P_party_Site_Id IS NOT NULL) THEN
358 	-- Added For Loop/IBY Call for bug 9410719
359 	FOR x IN (SELECT aps.invoice_id, aps.payment_num, ai.payment_currency_code, ai.vendor_site_id, ai.org_id
360                   FROM ap_payment_schedules_all aps,ap_invoices_all ai
361                   WHERE aps.invoice_id		    = ai.invoice_id
362                   AND aps.external_bank_account_id  = p_from_bank_account_id
363 		  -- Added the below two condition for the bug 10401158
364                   AND    aps.checkrun_id is NULL
365                   AND    nvl(aps.payment_status_flag , 'N') = 'N'
366                   AND    ai.payment_status_flag     IN ('N','P')
367                   AND    ai.cancelled_date          IS NULL
368                   AND    ai.vendor_id               = p_vendor_id
369                   AND   (ai.party_site_id           = p_party_site_id
370                           OR (ai.party_site_id IS NULL
371                               AND  ai.vendor_site_id IN (SELECT vendor_site_id
372                                                          FROM ap_supplier_sites ass
373                                                          WHERE ass.party_site_id = p_party_site_id
374                                                          AND ass.vendor_id   = p_vendor_id)
375                               )
376                           )
377                   )
378           LOOP
379                 BEGIN
380 			IBY_DISBURSE_UI_API_PUB_PKG.get_default_bank_acct(x.payment_currency_code,
381 				                                          P_party_id,
382 					                                  P_party_Site_Id,
383 						                          x.vendor_site_id,
384 							                  x.org_id,
385 								          P_org_type,
386 									  P_pmt_function,
387 									  p_from_bank_account_id,
388 	                                                                  l_to_bank_account_id
389 		                                                          );
390 
391 			l_debug_info := '2. l_to_bank_account_id returned :'||p_to_bank_account_id;
392 	                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
393 			     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
394 	                END IF;
395 
396 			UPDATE ap_payment_schedules_all aps
397 		        SET aps.external_bank_account_id = l_to_bank_account_id,
398 		            last_update_date  = SYSDATE,
399 		            last_updated_by   = FND_GLOBAL.user_id,
400 		            last_update_login = FND_GLOBAL.login_id
401 		        WHERE aps.invoice_id = x.invoice_id -- Added and commented below code for bug 9410719
402 			AND   aps.payment_num = x.payment_num;
403 
404 			--Bug10065192: Update the bank at invoice header level, so recalculation of
405 			--payment schedules does not reinstate the inactive bank
406 			UPDATE ap_invoices_all ai
407 			SET ai.external_bank_account_id = l_to_bank_account_id,
408 		        ai.last_update_date  = SYSDATE,
409 			    ai.last_updated_by   = FND_GLOBAL.user_id,
410 		        ai.last_update_login = FND_GLOBAL.login_id
411 		    WHERE ai.invoice_id = x.invoice_id;
412 
413 /*			WHERE aps.invoice_id IN
414            (SELECT DISTINCT ai.invoice_id
415             FROM   ap_invoices_all ai, ap_payment_schedules_all aps
416             WHERE  aps.external_bank_account_id  = p_from_bank_account_id
417             AND    ai.invoice_id                 = aps.invoice_id
418             AND    ai.payment_status_flag        IN ('N','P')
419             AND    ai.cancelled_date             IS NULL
420             AND    ai.vendor_id                  = p_vendor_id
421             AND   (ai.party_site_id           = p_party_site_id
422 	           or ( ai.party_site_id is null
423 		      and  ai.vendor_site_id in (select vendor_site_id
424 		                                 from ap_supplier_sites ass
425 		                                 where ass.party_site_id = p_party_site_id
426 					           and ass.vendor_id   = p_vendor_id)
427                      )
428 		   )
429 	    );
430  */
431 -- Added Exception handling for above code for bug 9410719
432 		EXCEPTION
433                     WHEN OTHERS THEN
434                          l_debug_info := 'Exception occured when party_site_id is not null :'||SQLERRM;
435                          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
436                             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
437                          END IF;
438                 END;
439         END LOOP;
440 
441    ELSIF (p_vendor_site_id IS NOT NULL) THEN
442 	-- Added For Loop/IBY Call for bug 9410719
443 	FOR x in (SELECT aps.invoice_id, aps.payment_num, ai.payment_currency_code, ai.party_site_id, ai.org_id
444                   FROM ap_payment_schedules_all aps,ap_invoices_all ai
445                   WHERE aps.invoice_id = ai.invoice_id
446                   AND aps.external_bank_account_id     = p_from_bank_account_id
447 		  -- Added the below two condition for the bug 10401158
448                   AND    aps.checkrun_id is NULL
449                   AND    nvl(aps.payment_status_flag , 'N') = 'N'
450                   AND    ai.payment_status_flag        IN ('N','P')
451 	          AND    ai.cancelled_date             IS NULL
452 		  AND    ai.vendor_id                  = p_vendor_id
453                   AND    ai.vendor_site_id             = p_vendor_site_id
454                  )
455         LOOP
456             BEGIN
460                                                                   P_vendor_site_id,
457 		IBY_DISBURSE_UI_API_PUB_PKG.get_default_bank_acct(x.payment_currency_code,
458                                                                   P_party_id,
459                                                                   x.party_Site_Id,
461                                                                   x.org_id,
462                                                                   P_org_type,
463                                                                   P_pmt_function,
464 								  p_from_bank_account_id,
465                                                                   l_to_bank_account_id
466                                                                   );
467 
468                 l_debug_info := '3. l_to_bank_account_id returned :'||p_to_bank_account_id;
469                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
470                      FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
471                 END IF;
472 
473 	       UPDATE ap_payment_schedules_all aps
474 	       SET aps.external_bank_account_id = l_to_bank_account_id,
475 	            last_update_date  = SYSDATE,
476 		    last_updated_by   = FND_GLOBAL.user_id,
477 	            last_update_login = FND_GLOBAL.login_id
478 		WHERE aps.invoice_id = x.invoice_id -- Added and commented below code for bug 9410719
479 		AND   aps.payment_num = x.payment_num;
480 
481 		--Bug10065192: Update the bank at invoice header level, so recalculation of
482 		--payment schedules does not reinstate the inactive bank
483 		UPDATE ap_invoices_all ai
484 		SET ai.external_bank_account_id = l_to_bank_account_id,
485 			ai.last_update_date  = SYSDATE,
486 			ai.last_updated_by   = FND_GLOBAL.user_id,
487 			ai.last_update_login = FND_GLOBAL.login_id
488 		WHERE ai.invoice_id = x.invoice_id;
489 
490 /*		WHERE aps.invoice_id IN
491            (SELECT DISTINCT ai.invoice_id
492             FROM   ap_invoices_all ai, ap_payment_schedules_all aps
493             WHERE  aps.external_bank_account_id  = p_from_bank_account_id
494             AND    ai.invoice_id                 = aps.invoice_id
495             AND    ai.payment_status_flag        IN ('N','P')
496             AND    ai.cancelled_date             IS NULL
497             AND    ai.vendor_id                  = p_vendor_id
498             AND    ai.vendor_site_id             = p_vendor_site_id);
499 */
500 -- Added Exception handling for above code for bug 9410719
501 	   EXCEPTION
502                   WHEN OTHERS THEN
503                        l_debug_info := 'Exception occured when vendor_site_id is not null :'||SQLERRM;
504                        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
505                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
506                        END IF;
507            END;
508         END LOOP;
509 
510    ELSE
511    -- Added For Loop/IBY Call for bug 9410719
512 	FOR x in (SELECT aps.invoice_id, aps.payment_num, ai.payment_currency_code, ai.party_site_id, ai.org_id, ai.vendor_site_id
513                   FROM ap_payment_schedules_all aps,ap_invoices_all ai
514                   WHERE aps.invoice_id		       = ai.invoice_id
515                   AND aps.external_bank_account_id     = p_from_bank_account_id
516 		  -- Added the below two condition for the bug 10401158
517                   AND    aps.checkrun_id is NULL
518                   AND    nvl(aps.payment_status_flag , 'N') = 'N'
519                   AND    ai.payment_status_flag        IN ('N','P')
520                   AND    ai.cancelled_date             IS NULL
521                   AND    ai.vendor_id                  = p_vendor_id
522                   )
523         LOOP
524             BEGIN
525                 IBY_DISBURSE_UI_API_PUB_PKG.get_default_bank_acct(x.payment_currency_code,
526                                                                   P_party_id,
527                                                                   x.party_Site_Id,
528                                                                   x.vendor_site_id,
529                                                                   x.org_id,
530                                                                   P_org_type,
531                                                                   P_pmt_function,
532 								  p_from_bank_account_id,
533                                                                   l_to_bank_account_id
534                                                                   );
535 
536                 l_debug_info := '4. l_to_bank_account_id returned :'||p_to_bank_account_id;
537                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
538                      FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
539                 END IF;
540 
541 
542 		UPDATE ap_payment_schedules_all aps
543 		SET aps.external_bank_account_id = l_to_bank_account_id,
544 	            last_update_date  = SYSDATE,
545 	            last_updated_by   = FND_GLOBAL.user_id,
546 	            last_update_login = FND_GLOBAL.login_id
547 		WHERE aps.invoice_id = x.invoice_id -- Added and commented below code for bug 9410719
548 		AND   aps.payment_num = x.payment_num;
549 
550 		--Bug10065192: Update the bank at invoice header level, so recalculation of
551 		--payment schedules does not reinstate the inactive bank
552 		UPDATE ap_invoices_all ai
553 		SET ai.external_bank_account_id = l_to_bank_account_id,
554 			ai.last_update_date  = SYSDATE,
555 			ai.last_updated_by   = FND_GLOBAL.user_id,
556 			ai.last_update_login = FND_GLOBAL.login_id
557 		WHERE ai.invoice_id = x.invoice_id;
558 
559 /*		WHERE aps.invoice_id IN
560            (SELECT DISTINCT ai.invoice_id
561             FROM   ap_invoices_all ai, ap_payment_schedules_all aps
562             WHERE  aps.external_bank_account_id  = p_from_bank_account_id
563             AND    ai.invoice_id                 = aps.invoice_id
564             AND    ai.payment_status_flag        IN ('N','P')
565             AND    ai.cancelled_date             IS NULL
566             AND    ai.vendor_id                  = p_vendor_id)
567 */
568 	    EXCEPTION
569                 WHEN OTHERS THEN
570                      l_debug_info := 'Exception occured when vendor_id is not null :'||SQLERRM;
571                      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
572                         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
573                      END IF;
574             END;
575         END LOOP;
576  END IF;
577 EXCEPTION WHEN OTHERS THEN
578 	l_debug_info := 'Exception occured :'||SQLERRM;
579 	IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
580 	    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
581 	END IF;
582 
583 END Update_Payment_Schedules;
584 
585 END AP_AUTOMATIC_PROPAGATION_PKG;