DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_VENDORMERGE_GRP

Source


1 PACKAGE BODY PO_VendorMerge_GRP AS
2 /* $Header: PO_VendorMerge_GRP.plb 120.7.12020000.2 2013/02/10 20:56:35 vegajula ship $ */
3 
4 g_pkg_name 	CONSTANT VARCHAR2(30):='PO_VendorMerge_GRP';
5 
6 -- Start of comments
7 --    API name 	   : Merge_Vendor
8 --    Type	   : Group.
9 --    Function	   :
10 --    Pre-reqs	   : None.
11 --    Parameters   :
12 --	IN	   : p_api_version       IN   NUMBER	       Required
13 --		     p_init_msg_list	 IN   VARCHAR2         Optional
14 --				    Default = FND_API.G_FALSE
15 --		     p_commit	    	 IN   VARCHAR2	       Optional
16 --				    Default = FND_API.G_FALSE
17 --		     p_validation_level	 IN   NUMBER	       Optional
18 --				    Default = FND_API.G_VALID_LEVEL_FULL
19 --		     parameter1
20 --		     parameter2
21 --				.
22 --				.
23 --	OUT	   : x_return_status	 OUT    VARCHAR2(1)
24 --		     x_msg_count	 OUT	NUMBER
25 --		     x_msg_data		 OUT	VARCHAR2(2000)
26 --	             parameter1
27 --		     parameter2
28 -- End of comments
29 
30 Procedure Merge_Vendor(
31             p_api_version        IN   NUMBER,
32 	    p_init_msg_list      IN   VARCHAR2 default FND_API.G_FALSE,
33 	    p_commit             IN   VARCHAR2 default FND_API.G_FALSE,
34 	    p_validation_level   IN   NUMBER   default FND_API.G_VALID_LEVEL_FULL,
35 	    x_return_status      OUT  NOCOPY VARCHAR2,
36 	    x_msg_count          OUT  NOCOPY NUMBER,
37 	    x_msg_data           OUT  NOCOPY VARCHAR2,
38 	    p_vendor_id          IN   NUMBER,
39 	    p_vendor_site_id     IN   NUMBER,
40 	    p_dup_vendor_id      IN   NUMBER,
41 	    p_dup_vendor_site_id IN   NUMBER,
42 	    p_party_id           IN   NUMBER default NULL,
43             p_dup_party_id       IN   NUMBER default NULL,
44             p_party_site_id      IN   NUMBER default NULL,
45             p_dup_party_site_id  IN   NUMBER default NULL
46 	    )
47 
48 IS
49 
50          cursor merge_autosrc_docs is
51          select distinct pad.autosource_rule_id,
52                 pad.sequence_num,
53                 pad.document_line_id
54          from   po_autosource_documents pad
55          where  pad.vendor_id = p_dup_vendor_id;
56 
57          l_api_name	      CONSTANT VARCHAR2(30)	:= 'Merge_Vendor';
58          l_api_version        CONSTANT NUMBER 	        := 1.0;
59          l_row_count	      NUMBER;
60          l_max_seq_num        number;
61          l_new_seq_num        number;
62          l_seq_num            number;
63          l_rule_id            number;
64          l_doc_line_id        number;
65 	 l_last_updated_by    number;
66 
67 	 d_progress NUMBER;
68 	 d_module   VARCHAR2(60) := 'po.plsql.PO_VendorMerge_GRP.Merge_Vendor';
69 
70 BEGIN
71 
72         d_progress := 0;
73         IF (PO_LOG.d_proc) THEN
74            PO_LOG.proc_begin(d_module);
75            PO_LOG.proc_begin(d_module, 'p_vendor_id', p_vendor_id);
76            PO_LOG.proc_begin(d_module, 'p_vendor_site_id', p_vendor_site_id);
77            PO_LOG.proc_begin(d_module, 'p_dup_vendor_id', p_dup_vendor_id);
78 	   PO_LOG.proc_begin(d_module, 'p_dup_vendor_site_id', p_dup_vendor_site_id);
79            PO_LOG.proc_begin(d_module, 'p_party_id', p_party_id);
80            PO_LOG.proc_begin(d_module, 'p_dup_party_id', p_dup_party_id);
81            PO_LOG.proc_begin(d_module, 'p_party_site_id', p_party_site_id);
82            PO_LOG.proc_begin(d_module, 'p_dup_party_site_id', p_dup_party_site_id);
83         END IF;
84 
85          --  Initialize API return status to success
86          x_return_status := FND_API.G_RET_STS_SUCCESS;
87 
88          l_last_updated_by := FND_GLOBAL.user_id;
89          -- Check for call compatibility.
90          IF NOT FND_API.Compatible_API_Call ( l_api_version  ,
91                                               p_api_version  ,
92                                               l_api_name     ,
93                                               G_PKG_NAME             )
94          THEN
95                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
96          END IF;
97 
98          -- Initialize API message list if necessary.
99          -- Initialize message list if p_init_msg_list is set to TRUE.
100          IF FND_API.to_Boolean( p_init_msg_list) THEN
101                 FND_MSG_PUB.initialize;
102          END IF;
103 
104          d_progress := 10;
105       --<Conc Mod Project- Supplier Merge Impact>
106       --Since in CLM we have Multi-Mod for Supplier Change, Supplier Merge is not required.
107       --therefore ignore CLM documents
108       --update Commercial Modifications
109       UPDATE po_headers_draft_all pohd
110       SET    pohd.vendor_id = p_vendor_id,
111              pohd.vendor_site_id = p_vendor_site_id,
112              pohd.vendor_contact_id = (SELECT vendor_contact_id
113                                        FROM   ap_supplier_contacts
114                                        WHERE org_party_site_id = (SELECT party_site_id
115                                                                   FROM   ap_supplier_sites_all
116                                                                   WHERE vendor_site_id = p_vendor_site_id)
117                                                                  AND per_party_id = (SELECT per_party_id
118                                                                                       FROM   ap_supplier_contacts
119                                                                                      WHERE vendor_contact_id = pohd.vendor_contact_id)),
120              pohd.last_updated_by = l_last_updated_by,
121              pohd.last_update_date = sysdate
122       WHERE  pohd.vendor_id = p_dup_vendor_id
123       AND pohd.vendor_site_id = p_dup_vendor_site_id
124       AND NOT EXISTS (SELECT 'Exclude CLM Document'
125                       FROM   po_doc_style_headers pods
126                       WHERE  pods.style_id = pohd.style_id
127                              AND NVL(pods.CLM_FLAG,'N') = 'Y')
128       AND EXISTS (  SELECT 'Exclude draft_type is not equal to MOD'
129                         FROM po_drafts dft
130                         WHERE dft.document_id=pohd.po_header_id
131                         AND   dft.draft_id= pohd.draft_id
132                         AND   dft.draft_type='MOD');
133 
134 
135       UPDATE  PO_GA_ORG_ASSIGN_DRAFT PGOA
136       SET     PGOA.vendor_site_id = p_vendor_site_id,
137               PGOA.last_update_date = SYSDATE,
138               PGOA.last_updated_by = l_last_updated_by,
139               PGOA.last_update_login = FND_GLOBAL.login_id
140       WHERE   PGOA.vendor_site_id = p_dup_vendor_site_id
141       AND NOT EXISTS (SELECT 'Exclude CLM Document'
142                                   FROM   po_doc_style_headers pods,
143                                          po_headers ph
144                                   WHERE  pods.style_id = ph.style_id
145                                     AND  ph.PO_HEADER_ID= pgoa.PO_HEADER_ID
146                                     AND  NVL(pods.CLM_FLAG,'N') = 'Y')
147       AND EXISTS (  SELECT 'Exclude draft_type is not equal to MOD'
148                         FROM po_drafts dft
149                         WHERE dft.document_id=pgoa.po_header_id
150                         AND   dft.draft_id= pgoa.draft_id
151                         AND   dft.draft_type='MOD');
152      --<Conc Mods Project - End>
153 
154          --Bug 5435716 START
155          --Bug 12728157
156       UPDATE po_headers ph
157       SET    ph.vendor_id = p_vendor_id,
158              ph.vendor_site_id = p_vendor_site_id,
159              ph.vendor_contact_id = (SELECT vendor_contact_id
160                                      FROM   ap_supplier_contacts
161                                      WHERE org_party_site_id = (SELECT party_site_id
162                                                                 FROM   ap_supplier_sites_all
163                                                                 WHERE vendor_site_id = p_vendor_site_id)
164                                      AND per_party_id = (SELECT per_party_id
165                                                                 FROM   ap_supplier_contacts
166                                                                WHERE vendor_contact_id = ph.vendor_contact_id)),
167            last_updated_by = l_last_updated_by,
168            last_update_date = SYSDATE
169       WHERE  ph.vendor_id = p_dup_vendor_id
170       AND ph.vendor_site_id = p_dup_vendor_site_id
171       AND NOT EXISTS (SELECT 'CLM Document'  --<Conc Mod Project>
172                       FROM   po_doc_style_headers pods
173                       WHERE  pods.style_id = ph.style_id
174                         AND  NVL(pods.CLM_FLAG,'N') = 'Y');
175 
176 
177           UPDATE po_rfq_vendors
178           SET    vendor_id        = p_vendor_id,
179                  vendor_site_id   = p_vendor_site_id,
180                  last_updated_by  = l_last_updated_by,
181                  last_update_date = sysdate
182        	 WHERE  vendor_id      = p_dup_vendor_id
183          AND    vendor_site_id = p_dup_vendor_site_id ;
184 
185           DELETE from po_rfq_vendors prv
186           WHERE  vendor_id = p_dup_vendor_id
187           AND    vendor_site_id = p_dup_vendor_site_id;
188 
189 
190          --Bug 5435716 END
191 
192          -- modify PO_HEADERS_ARCHIVE
193          UPDATE po_headers_archive pha
194          SET    pha.vendor_id      = p_vendor_id,
195           	pha.vendor_site_id = p_vendor_site_id
196        	 WHERE  pha.vendor_id      = p_dup_vendor_id
197          AND    pha.vendor_site_id = p_dup_vendor_site_id
198          AND NOT EXISTS (SELECT 'CLM Document' --<Conc Mod Project>
199                          FROM   po_doc_style_headers pods
200                          WHERE  pods.style_id = pha.style_id
201                            AND  NVL(pods.CLM_FLAG,'N') = 'Y');
202 
203         IF (PO_LOG.d_stmt) THEN
204           PO_LOG.stmt(d_module, d_progress, 'updated PO_HEADERS_ARCHIVE');
205         END IF;
206 
207 
208          -- modify PO_VENDOR_LIST_ENTRIES
209          -- bug3537645 added vendor_site_id  condition
210          UPDATE po_vendor_list_entries pv1
211          SET    pv1.vendor_id      = p_vendor_id,
212             	pv1.vendor_site_id = p_vendor_site_id
213          WHERE  pv1.vendor_id      = p_dup_vendor_id
214          AND    pv1.vendor_site_id = p_dup_vendor_site_id
215          AND    not exists
216   			(select vendor_id
217                          from po_vendor_list_entries pv2
218                          where pv2.vendor_id      = p_vendor_id
219                          and pv2.vendor_site_id   = p_vendor_site_id
220                          and pv2.vendor_list_header_id =
221                                 pv1.vendor_list_header_id);
222 
223          -- delete the vendor_list_entry if the new vendor_id would make the
224          -- record a duplicate ie. if modify_po6 had failed
225          -- Anything not moved to the new vendor would have been a duplicate
226          -- and should be deleted
227          -- DELETE from po_vendor_list_entries pvl
228          --          WHERE  vendor_id      = p_dup_vendor_id
229          --          AND    vendor_site_id = p_vendor_site_id;
230          -- Fix for 2086548 commented the above do_sql and wrote the below one
231          DELETE from po_vendor_list_entries pvl
232          WHERE  vendor_id      = p_dup_vendor_id
233          AND    vendor_site_id = p_dup_vendor_site_id ;
234 
235 
236         IF (PO_LOG.d_stmt) THEN
237           PO_LOG.stmt(d_module, d_progress, 'updated PO_VENDOR_LIST_ENTRIES');
238         END IF;
239 
240          -- modify PO_AUTOSOURCE_VENDORS
241          UPDATE po_autosource_vendors pav1
242          SET    pav1.vendor_id      = p_vendor_id
243          WHERE  pav1.vendor_id      = p_dup_vendor_id
244          AND    not exists
245  		(select vendor_id
246                 from po_autosource_vendors pav2
247                 where pav2.vendor_id      = p_vendor_id
248                 and pav2.autosource_rule_id =
249                 pav1.autosource_rule_id) ;
250 
251 
252          -- modify split
253          UPDATE po_autosource_vendors pav1
254          SET pav1.split     = (SELECT sum (pav3.split)
255                                FROM   po_autosource_vendors pav3
256                                WHERE  pav3.autosource_rule_id =
257  				      pav1.autosource_rule_id
258                   	       AND    pav3.vendor_id IN
259 	                              (p_vendor_id, p_dup_vendor_id))
260          WHERE  pav1.vendor_id      = p_vendor_id
261        	 AND    exists
262  		(select pav2.vendor_id
263                  from po_autosource_vendors pav2
264                  where pav2.vendor_id      = p_dup_vendor_id
265                  and pav2.autosource_rule_id =
266                                 pav1.autosource_rule_id) ;
267 
268 
269 
270          -- delete the autosource entry if the new vendor_id would make the
271          -- record a duplicate ie. if modify_po6 had failed
272          -- Anything not moved to the new vendor would have been a duplicate
273          -- and should be deleted
274 
275 
276          IF (p_dup_vendor_id <> p_vendor_id) THEN
277 
278          DELETE from po_autosource_vendors pavl
279          WHERE  vendor_id      = p_dup_vendor_id ;
280 
281          END IF;
282 
283         IF (PO_LOG.d_stmt) THEN
284           PO_LOG.stmt(d_module, d_progress, 'updated PO_AUTOSOURCE_VENDORS');
285         END IF;
286 
287          -- modify po_autosource_documents
288          --
289          open merge_autosrc_docs;
290 
291          loop
292               l_max_seq_num := 0;
293 
294               fetch merge_autosrc_docs into
295               l_rule_id, l_seq_num, l_doc_line_id;
296               exit when merge_autosrc_docs%notfound;
297 
298               select nvl(max(sequence_num),0)
299               into   l_max_seq_num
300               from   po_autosource_documents
301               where  autosource_rule_id  = l_rule_id
302               and    vendor_id           = p_vendor_id;
303 
304               l_new_seq_num := l_max_seq_num + 1;
305 
306               update po_autosource_documents
307               set    vendor_id          = p_vendor_id,
308                      sequence_num       = l_new_seq_num
309               where  autosource_rule_id = l_rule_id
310               and    vendor_id          = p_dup_vendor_id
311               and    sequence_num       = l_seq_num
312               and    not exists
313                     (select 'already have PAD for this rule, vendor, doc line'
314                      from   po_autosource_documents
315                      where  autosource_rule_id = l_rule_id
316                      and    vendor_id = p_vendor_id
317                      and    document_line_id = l_doc_line_id);
318 
319          end loop;
320 
321          close merge_autosrc_docs;
322 
323          -- delete the document entry if the new vendor_id would make the
324          -- record a duplicate
325 
326 
327          IF (p_dup_vendor_id <> p_vendor_id) Then
328 
329          delete from po_autosource_documents
330          where  vendor_id = p_dup_vendor_id;
331 
332          End If;
333 
334 	IF (PO_LOG.d_stmt) THEN
335           PO_LOG.stmt(d_module, d_progress, 'updated PO_AUTOSOURCE_DOCUMENTS');
336         END IF;
337 
338     -- Starting from 11i FPJ we no longer update ga org assignments based on
339     -- vendor site code. Instead we just need to update org assignment with
340     -- vendor site id that matches p_from_vendor_id
341 
342         UPDATE  po_ga_org_assignments PGOA
343         SET     PGOA.vendor_site_id = p_vendor_site_id,
344                 PGOA.last_update_date = SYSDATE,
345                 PGOA.last_updated_by = l_last_updated_by,
346                 PGOA.last_update_login = FND_GLOBAL.login_id
347         WHERE   PGOA.vendor_site_id = p_dup_vendor_site_id
348           AND   NOT EXISTS (SELECT 'CLM Document' --<Conc Mod Project>
349                                   FROM   po_doc_style_headers pods,
350                                          po_headers ph
351                                   WHERE  pods.style_id = ph.style_id
352                                     AND  ph.PO_HEADER_ID= pgoa.PO_HEADER_ID
353                                     AND  NVL(pods.CLM_FLAG,'N') = 'Y');
354 
355         UPDATE  po_ga_org_assignments_archive PGOA
356         SET     PGOA.vendor_site_id = p_vendor_site_id,
357                 PGOA.last_update_date = SYSDATE,
358                 PGOA.last_updated_by = l_last_updated_by,
359                 PGOA.last_update_login = FND_GLOBAL.login_id
360         WHERE   PGOA.vendor_site_id = p_dup_vendor_site_id
361           AND  NOT EXISTS (SELECT 'CLM Document' --<Conc Mod Project>
362                                   FROM   po_doc_style_headers pods,
363                                          po_headers ph
364                                   WHERE  pods.style_id = ph.style_id
365                                     AND  ph.PO_HEADER_ID= pgoa.PO_HEADER_ID
366                                     AND  NVL(pods.CLM_FLAG,'N') = 'Y');
367 	IF (PO_LOG.d_stmt) THEN
368           PO_LOG.stmt(d_module, d_progress, 'updated PO_GA_ORG_ASSIGNMENTS');
369         END IF;
370 
371          -- modify  PO_REQUISITION_LINES
372          UPDATE PO_REQUISITION_LINES prl
373          SET    prl.suggested_vendor_name =  (select pov1.vendor_name
374                                           from   po_vendors pov1
375                           		  where  pov1.vendor_id =
376          		                         p_vendor_id),
377                 prl.suggested_vendor_location =  (select pvs1.vendor_site_code
378  				              from   po_vendor_sites pvs1
379 					      where  pvs1.vendor_site_id =
380 				                     p_vendor_site_id)
381          WHERE  prl.suggested_vendor_name in     (select pov2.vendor_name
382  					      from   po_vendors pov2
383  					      where  pov2.vendor_id =
384   					             p_dup_vendor_id)
385  	 AND    prl.suggested_vendor_location in (select pvs2.vendor_site_code
386  					      from   po_vendor_sites pvs2
387  					      where  vendor_site_id =
388      						     p_dup_vendor_site_id)
389     AND NOT EXISTS (SELECT 'CLM Document'
390                           FROM Po_Requisition_Headers_All prha
391                           WHERE prha.Requisition_Header_Id = prl.Requisition_Header_Id
392                            AND NVL(PRHA.FEDERAL_FLAG,'N')='Y');
393 
394 
395          UPDATE po_requisition_lines prl
396          SET    prl.vendor_id     = p_vendor_id,
397 	        prl.vendor_site_id = p_vendor_site_id,
398               prl.last_update_date = sysdate,
399               prl.last_updated_by  = l_last_updated_by
400          WHERE   prl.vendor_id = p_dup_vendor_id
401          AND     prl.vendor_site_id = p_dup_vendor_site_id
402          AND NOT EXISTS (SELECT 'CLM Document'
403                           FROM Po_Requisition_Headers_All prha
404                           WHERE prha.Requisition_Header_Id = prl.Requisition_Header_Id
405                            AND NVL(PRHA.FEDERAL_FLAG,'N')='Y');
406 
407 
408          UPDATE po_requisition_lines prl
409        	 SET    prl.vendor_id       = p_vendor_id,
410 	       prl.last_update_date = sysdate,
411                prl.last_updated_by  = l_last_updated_by
412        	 WHERE  prl.vendor_id = p_dup_vendor_id
413  	 AND    prl.vendor_site_id is null
414          AND    exists
415         	( select vendor_id
416 		  from   po_vendors
417 		  where  vendor_id = p_dup_vendor_id
418  		  and    nvl(end_date_active, sysdate+1) <= sysdate)
419       AND NOT EXISTS (SELECT 'Exclude CLM Document'
420                           FROM Po_Requisition_Headers_All prha
421                           WHERE prha.Requisition_Header_Id = prl.Requisition_Header_Id
422                            AND NVL(PRHA.FEDERAL_FLAG,'N')='Y');
423 
424 	IF (PO_LOG.d_stmt) THEN
425           PO_LOG.stmt(d_module, d_progress, 'updated PO_REQUISITION_LINES');
426         END IF;
427 
428 
429        -- Update Req Template Records
430        UPDATE  po_reqexpress_lines_all PRL
431        SET     PRL.suggested_vendor_id = p_vendor_id,
432                PRL.suggested_vendor_site_id = p_vendor_site_id,
433                PRL.last_update_date = SYSDATE,
434                PRL.last_updated_by = l_last_updated_by
435        WHERE   PRL.suggested_vendor_id = p_dup_vendor_id
436        AND     PRL.suggested_vendor_site_id = p_dup_vendor_site_id;
437 
438 
439        --SQL What: update requisition template with the new supplier if supplier
440        --          site is null in the template, and the supplier is getting
441        --          invalidatad because of the merge
442        --SQL Why:  If the supplier is not active after vendor merge,the records
443        --          associated to that supplier should be moved to point to the
444        --          new supplier
445 
446        UPDATE  po_reqexpress_lines_all PRL
447        SET     PRL.suggested_vendor_id = p_vendor_id,
448                last_update_date = SYSDATE,
449                last_updated_by = l_last_updated_by
450        WHERE   PRL.suggested_vendor_id = p_dup_vendor_id
451        AND     PRL.suggested_vendor_site_id IS NULL
452        AND     EXISTS (
453                    SELECT  NULL
454                    FROM    po_vendors PV
455                    WHERE   PV.vendor_id = p_dup_vendor_id
456                    AND     NVL(PV.end_date_active, SYSDATE + 1) <= SYSDATE);
457 
458 
459 	IF (PO_LOG.d_stmt) THEN
460           PO_LOG.stmt(d_module, d_progress, 'updated PO_REQEXPRESS_LINES_ALL');
461         END IF;
462 
463          -- modify po_approved_supplier_list
464          UPDATE po_approved_supplier_list poasl1
465          SET    poasl1.vendor_id      = p_vendor_id,
466             	poasl1.vendor_site_id = p_vendor_site_id
467          WHERE  poasl1.vendor_id      = p_dup_vendor_id
468  	 AND    poasl1.vendor_site_id = p_dup_vendor_site_id
469          	AND    not exists
470   		       ( select vendor_id
471                          from   po_approved_supplier_list poasl2
472                          where  poasl2.vendor_id      = p_vendor_id
473                          and    poasl2.vendor_site_id = p_vendor_site_id
474                          and    nvl(poasl2.item_id, -99) =
475                                             nvl(poasl1.item_id, -99)
476   		         and nvl(poasl2.category_id, -99) =
477                                             nvl(poasl1.category_id, -99)
478     		         and  poasl2.using_organization_id =
479                                             poasl1.using_organization_id) ;
480          --1755383 Added the nvl condition so that null values does not result
481          --in success
482 
483          -- delete the approved_list_entry if the new vendor_id would make the
484          -- record a duplicate.
485          -- Bug: 1494378
486          DELETE from po_approved_supplier_list poasl
487   	 WHERE  vendor_id      = p_dup_vendor_id
488  	 AND    vendor_site_id = p_dup_vendor_site_id ;
489 
490          --Bug 1755383 start
491          -- modify po_approved_supplier_list
492 
493          UPDATE po_approved_supplier_list poasl1
494          SET    poasl1.vendor_id      = p_vendor_id
495          WHERE  poasl1.vendor_id      = p_dup_vendor_id
496      	 AND    poasl1.vendor_site_id is null
497          AND    exists
498 		( select vendor_id
499 		  from   po_vendors
500 		  where  vendor_id = p_dup_vendor_id
501 		  and    nvl(end_date_active, sysdate+1) <= sysdate)
502        	 AND    not exists
503 		( select vendor_id
504                   from   po_approved_supplier_list poasl2
505                   where  poasl2.vendor_id             = p_vendor_id
506                   and    poasl2.vendor_site_id is null
507                   and    nvl(poasl2.item_id, -99)     =
508                                                 nvl(poasl1.item_id, -99)
509  		  and    nvl(poasl2.category_id, -99) =
510                                                 nvl(poasl1.category_id, -99)
511 		  and    poasl2.using_organization_id =
512                                                 poasl1.using_organization_id);
513 
514          -- delete the approved_list_entry if the new vendor_id would make the
515          -- record a duplicate.
516 
517          DELETE from po_approved_supplier_list poasl
518  	 WHERE  vendor_id      = p_dup_vendor_id
519  	 AND    vendor_site_id is null
520  	 AND    exists
521  		( select vendor_id
522  		  from   po_vendors
523  		  where  vendor_id = p_dup_vendor_id
524  		  and    nvl(end_date_active, sysdate+1) <= sysdate);
525 
526 	IF (PO_LOG.d_stmt) THEN
527           PO_LOG.stmt(d_module, d_progress, 'updated PO_APPROVED_SUPPLIER_LIST');
528         END IF;
529 
530          -- modify po_asl_attributes
531          UPDATE po_asl_attributes poasl1
532          SET    poasl1.vendor_id      = p_vendor_id,
533         	poasl1.vendor_site_id = p_vendor_site_id
534          WHERE  poasl1.vendor_id      = p_dup_vendor_id
535     	 AND    poasl1.vendor_site_id = p_dup_vendor_site_id
536        	 AND    not exists
537 		(select vendor_id
538                  from po_asl_attributes poasl2
539                  where poasl2.vendor_id           = p_vendor_id
540                  and poasl2.vendor_site_id        = p_vendor_site_id
541                  and nvl(poasl2.item_id, -99)     = nvl(poasl1.item_id, -99)
542     	         and nvl(poasl2.category_id, -99) = nvl(poasl1.category_id, -99)
543  	         and poasl2.using_organization_id =
544  					poasl1.using_organization_id);
545          --1755383 Added the nvl condition so that null values does not result
546          --in success
547          -- delete the approved_list_entry if the new vendor_id would make the
548          -- record a duplicate.
549          -- DELETE from po_asl_attributes poasl
550          --           WHERE  vendor_id      = p_dup_vendor_id
551          --           AND    vendor_site_id = p_vendor_site_id ;
552          -- FIX FOR 1931927 commented the above do_sql and wrote the below one
553          DELETE from po_asl_attributes poasl
554          WHERE  vendor_id      = p_dup_vendor_id
555 	 AND    vendor_site_id = p_dup_vendor_site_id ;
556 
557 
558          --Bug 1755383 start
559 
560          UPDATE po_asl_attributes poasl1
561          SET    poasl1.vendor_id      = p_vendor_id
562          WHERE  poasl1.vendor_id      = p_dup_vendor_id
563 	 AND    poasl1.vendor_site_id is null
564          AND    exists
565 		( select vendor_id
566 		  from   po_vendors
567 		  where  vendor_id = p_dup_vendor_id
568 		  and    nvl(end_date_active, sysdate+1) <= sysdate)
569        	AND    not exists
570 		(select vendor_id
571                  from po_asl_attributes poasl2
572                  where poasl2.vendor_id      = p_vendor_id
573                  and poasl2.vendor_site_id is null
574                  and nvl(poasl2.item_id, -99) = nvl(poasl1.item_id, -99)
575    	         and nvl(poasl2.category_id, -99) = nvl(poasl1.category_id, -99)
576                  and poasl2.using_organization_id =
577  					poasl1.using_organization_id);
578 
579          -- delete the approved_list_entry if the new vendor_id would make the
580          -- record a duplicate.
581 
582          DELETE from po_asl_attributes poasl
583          WHERE  vendor_id      = p_dup_vendor_id
584  	 AND    vendor_site_id is null
585          AND    exists
586  		( select vendor_id
587      	          from   po_vendors
588  		  where  vendor_id = p_dup_vendor_id
589  		  and    nvl(end_date_active, sysdate+1) <= sysdate) ;
590 
591 	IF (PO_LOG.d_stmt) THEN
592           PO_LOG.stmt(d_module, d_progress, 'updated PO_ASL_ATTRIBUTES');
593         END IF;
594 
595 
596          -- Prepare message name
597          FND_MESSAGE.SET_NAME('PO','PO_ASL_ATTRIBUTES');
598 	 IF SQL%FOUND THEN
599 		x_return_status := FND_API.G_RET_STS_SUCCESS;
600 		l_row_count := SQL%ROWCOUNT;
601 	 ELSE
602 		x_return_status := FND_API.G_RET_STS_ERROR;
603 		l_row_count := 0;
604 	 END IF;
605 	 FND_MESSAGE.SET_TOKEN('ROWS_DELETED',l_row_count);
606 	 -- Add message to API message list.
607 	 FND_MSG_PUB.Add;
608 
609 
610          -- Get message count and if 1, return message data.
611 	 FND_MSG_PUB.Count_And_Get
612 	 (  	p_count         	=>      x_msg_count,
613 		p_data          	=>      x_msg_data
614 	 );
615 
616 
617 
618      -- Call the iSP Vendor Merge API
619      -- Commenting out POS calll as it would be called from AP directly
620 --   POS_SUP_PROF_MRG_GRP.handle_merge (
621 --                            p_new_vendor_id        => p_vendor_id,
622 --                            p_new_vendor_site_id   => p_vendor_site_id,
623 --                            p_old_vendor_id        => p_dup_vendor_id,
624 --                            p_old_vendor_site_id   => p_dup_vendor_site_id ,
625 --                            x_return_status        => x_return_status
626 --                            );
627 
628       -- Call the iP Vendor Merge API
629 
630      ICX_CAT_POPULATE_ITEM_GRP.populateVendorMerge(
631                               p_api_version    => 1.0,
632                               p_to_vendor_id => p_vendor_id,
633                               p_to_site_id   => p_vendor_site_id,
634                               p_from_vendor_id   => p_dup_vendor_id,
635                               p_from_site_id     => p_dup_vendor_site_id,
636                               x_return_status  => x_return_status
637                               );
638 
639 
640 
641 	 -- Standard check of p_commit.
642 	 IF FND_API.To_Boolean( p_commit ) THEN
643 		COMMIT WORK;
644 	 END IF;
645 
646 	 IF (PO_LOG.d_proc) THEN
647               PO_LOG.proc_end(d_module, 'x_return_status', x_return_status);
648               PO_LOG.proc_end(d_module);
649           END IF;
650 
651 
652 EXCEPTION
653 
654                 WHEN OTHERS THEN
655                 ROLLBACK;
656 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
657 
658 	        IF (PO_LOG.d_proc) THEN
659                    PO_LOG.proc_end(d_module, 'x_return_status', x_return_status);
660                    PO_LOG.proc_end(d_module);
661                 END IF;
662 
663   		FND_MSG_PUB.Count_And_Get
664     		       ( p_count         	=>      x_msg_count,
665         		 p_data          	=>      x_msg_data
666     		       );
667 
668 END Merge_Vendor;
669 
670 END PO_VendorMerge_GRP ;
671