1 PACKAGE BODY OKL_VENDORMERGE_GRP AS
2 /* $Header: OKLRVMAB.pls 120.5 2007/09/10 15:34:35 pagarg noship $ */
3
4 L_MODULE FND_LOG_MESSAGES.MODULE%TYPE;
5 L_DEBUG_ENABLED VARCHAR2(10);
6 IS_DEBUG_PROCEDURE_ON BOOLEAN;
7 IS_DEBUG_STATEMENT_ON BOOLEAN;
8 ------------------------------------------------------------------------------
9 -- PROCEDURE MERGE_VENDOR
10 ------------------------------------------------------------------------------
11 -- Start of comments
12 --
13 -- Procedure Name : MERGE_VENDOR
14 -- Description : This procedure updates OKL data when two vendors
15 -- are merged.
16 -- Business Rules : This procedure updates OKL data when two vendors
17 -- are merged.
18 --
19 -- Parameters : p_vendor_id - Represents Merge To Vendor.
20 -- p_dup_vendor_id - Represents Merge From Vendor.
21 -- p_vendor_site_id - Represents Merge To Vendor Site.
22 -- p_dup_vendor_site_id Represents Merge From Vendor Site
23 -- p_party_id - Represents Merge To Party.
24 -- P_dup_party_id - Represents Merge From Party
25 -- p_party_site_id - Represents Merge To Party Site
26 -- p_dup_party_site_id -Represents Merge From Party Site
27 --
28 -- Version : 1.0
29 -- History : 26-Dec-2006 Bug# 4541415 PAGARG created
30 --
31 -- End of comments
32 ------------------------------------------------------------------------------
33 PROCEDURE MERGE_VENDOR
34 (p_api_version IN NUMBER
35 ,p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE
36 ,p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE
37 ,p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL
38 ,p_return_status OUT NOCOPY VARCHAR2
39 ,p_msg_count OUT NOCOPY NUMBER
40 ,p_msg_data OUT NOCOPY VARCHAR2
41 ,p_vendor_id IN NUMBER
42 ,p_dup_vendor_id IN NUMBER
43 ,p_vendor_site_id IN NUMBER
44 ,p_dup_vendor_site_id IN NUMBER
45 ,p_party_id IN NUMBER
46 ,P_dup_party_id IN NUMBER
47 ,p_party_site_id IN NUMBER
48 ,p_dup_party_site_id IN NUMBER
49 )
50 IS
51 -- Variables Declarations
52 l_api_version CONSTANT NUMBER DEFAULT G_INIT_VERSION;
53 l_api_name CONSTANT VARCHAR2(30) DEFAULT 'MERGE_VENDOR';
54 l_return_status VARCHAR2(1);
55 l_counter NUMBER;
56 l_program_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||l_api_name;
57 l_last_updated_by NUMBER;
58 l_last_update_date DATE;
59 l_last_update_login NUMBER;
60 l_cplv_rec OKC_CPL_PVT.cplv_rec_type;
61 l_kplv_rec OKL_KPL_PVT.kplv_rec_type;
62
63 --This cursor fetches all those contracts, which have both source and destination
64 --Vendors as the parties to the contract
65 CURSOR chk_vendor_chr_csr (p_src_vendor_id NUMBER, p_des_vendor_id NUMBER)
66 IS
67 SELECT CHR.CONTRACT_NUMBER
68 , CHR.ID
69 FROM OKC_K_HEADERS_ALL_B CHR
70 , OKC_K_PARTY_ROLES_B CPRS
71 , OKC_K_PARTY_ROLES_B CPRD
72 WHERE CPRS.CHR_ID = CHR.ID
73 AND CPRS.DNZ_CHR_ID = CPRD.DNZ_CHR_ID
74 AND CPRS.OBJECT1_ID1 <> CPRD.OBJECT1_ID1
75 AND CPRS.OBJECT1_ID1 = p_src_vendor_id
76 AND CPRD.OBJECT1_ID1 = p_des_vendor_id
77 AND CPRS.JTOT_OBJECT1_CODE = 'OKX_VENDOR'
78 AND CPRD.JTOT_OBJECT1_CODE = 'OKX_VENDOR'
79 AND CHR.SCS_CODE = 'LEASE'
80 AND CPRS.CLE_ID IS NULL
81 AND CPRD.CLE_ID IS NULL
82 AND CPRS.CHR_ID = CPRD.CHR_ID
83 GROUP BY CHR.CONTRACT_NUMBER, CHR.ID
84 ORDER BY CHR.CONTRACT_NUMBER;
85 chk_vendor_chr_rec chk_vendor_chr_csr%ROWTYPE;
86
87 --This cursor fetches all those contracts along with the contract line id,
88 --which have both source and destination Vendors as the parties to the contract line
89 CURSOR chk_vendor_chr_ln_csr (p_src_vendor_id NUMBER, p_des_vendor_id NUMBER)
90 IS
91 SELECT CHR.CONTRACT_NUMBER
92 , CHR.ID
93 , CPRD.CLE_ID
94 FROM OKC_K_HEADERS_ALL_B CHR
95 , OKC_K_PARTY_ROLES_B CPRS
96 , OKC_K_PARTY_ROLES_B CPRD
97 WHERE CPRS.DNZ_CHR_ID = CHR.ID
98 AND CPRS.DNZ_CHR_ID = CPRD.DNZ_CHR_ID
99 AND CPRS.OBJECT1_ID1 <> CPRD.OBJECT1_ID1
100 AND CPRS.OBJECT1_ID1 = p_src_vendor_id
101 AND CPRD.OBJECT1_ID1 = p_des_vendor_id
102 AND CPRS.JTOT_OBJECT1_CODE = 'OKX_VENDOR'
103 AND CPRD.JTOT_OBJECT1_CODE = 'OKX_VENDOR'
104 AND CHR.SCS_CODE = 'LEASE'
105 AND CPRS.CHR_ID IS NULL
106 AND CPRD.CHR_ID IS NULL
107 AND CPRS.CLE_ID = CPRD.CLE_ID
108 GROUP BY CHR.CONTRACT_NUMBER, CHR.ID, CPRD.CLE_ID
109 ORDER BY CHR.CONTRACT_NUMBER;
110 chk_vendor_chr_ln_rec chk_vendor_chr_ln_csr%ROWTYPE;
111
112 --This cursor returns the Party Role Id for both source and destination vendor
113 --for a given Contract. It returns the Id for Party Role defined at Contract
114 --Header level
115 CURSOR party_role_dtls_csr (p_src_vendor_id NUMBER, p_des_vendor_id NUMBER, p_chr_id NUMBER)
116 IS
117 SELECT CPRS.ID CPRS_CPL_ID
118 , CPRD.ID CPRD_CPL_ID
119 FROM OKC_K_PARTY_ROLES_B CPRS
120 , OKC_K_PARTY_ROLES_B CPRD
121 WHERE CPRS.DNZ_CHR_ID = p_chr_id
122 AND CPRS.DNZ_CHR_ID = CPRD.DNZ_CHR_ID
123 AND CPRS.OBJECT1_ID1 <> CPRD.OBJECT1_ID1
124 AND CPRS.OBJECT1_ID1 = p_src_vendor_id
125 AND CPRD.OBJECT1_ID1 = p_des_vendor_id
126 AND CPRS.JTOT_OBJECT1_CODE = 'OKX_VENDOR'
127 AND CPRD.JTOT_OBJECT1_CODE = 'OKX_VENDOR'
128 AND CPRS.CLE_ID IS NULL
129 AND CPRD.CLE_ID IS NULL
130 AND CPRS.CHR_ID = CPRD.CHR_ID;
131 party_role_dtls_rec party_role_dtls_csr%ROWTYPE;
132
133 --This cursor returns the Party Role Id for both source and destination vendor
134 --for a given Contract Line. It returns the Id for Party Role defined at Contract
135 --Line level
136 CURSOR party_role_dtls_ln_csr (p_src_vendor_id NUMBER, p_des_vendor_id NUMBER, p_chr_id NUMBER, p_cle_id NUMBER)
137 IS
138 SELECT CPRS.ID CPRS_CPL_ID
139 , CPRD.ID CPRD_CPL_ID
140 FROM OKC_K_PARTY_ROLES_B CPRS
141 , OKC_K_PARTY_ROLES_B CPRD
142 WHERE CPRS.DNZ_CHR_ID = p_chr_id
143 AND CPRS.DNZ_CHR_ID = CPRD.DNZ_CHR_ID
144 AND CPRS.OBJECT1_ID1 <> CPRD.OBJECT1_ID1
145 AND CPRS.OBJECT1_ID1 = p_src_vendor_id
146 AND CPRD.OBJECT1_ID1 = p_des_vendor_id
147 AND CPRS.JTOT_OBJECT1_CODE = 'OKX_VENDOR'
148 AND CPRD.JTOT_OBJECT1_CODE = 'OKX_VENDOR'
149 AND CPRS.CHR_ID IS NULL
150 AND CPRD.CHR_ID IS NULL
151 AND CPRS.CLE_ID = p_cle_id
152 AND CPRS.CLE_ID = CPRD.CLE_ID;
153 party_role_dtls_ln_rec party_role_dtls_ln_csr%ROWTYPE;
154
155 --This cursor verifies whether there is passthrough setup being done at either
156 --Contract or Line level for the source/merged vendor
157 CURSOR chk_passthrough_csr (p_chr_id NUMBER, p_cle_id NUMBER, p_src_cpl_id NUMBER)
158 IS
159 SELECT 1
160 FROM OKL_PARTY_PAYMENT_HDR PPH
161 , OKL_PARTY_PAYMENT_DTLS PPD
162 WHERE DNZ_CHR_ID = p_chr_id
163 AND NVL(CLE_ID, -1) = NVL(p_cle_id, NVL(CLE_ID, -1))
164 AND PPH.ID = PPD.PAYMENT_HDR_ID
165 AND PPD.CPL_ID = p_src_cpl_id;
166 chk_passthrough_rec chk_passthrough_csr%ROWTYPE;
167
168 --This cursor is used to fetch the Line Name for the given Line Id.
169 --It is specific to Passthrough Fee line. Line Name is needed to be passed
170 --as token value in the error message
171 CURSOR fee_name_csr(p_cle_id NUMBER)
172 IS
173 SELECT STY.NAME FEE_NAME
174 FROM OKC_K_ITEMS ITM
175 , OKL_STRM_TYPE_TL STY
176 , OKC_K_LINES_B CLE
177 WHERE ITM.OBJECT1_ID1 = STY.ID
178 AND ITM.JTOT_OBJECT1_CODE = 'OKL_STRMTYP'
179 AND STY.LANGUAGE = USERENV('LANG')
180 AND ITM.CLE_ID = CLE.ID
181 AND CLE.LSE_ID = 52
182 AND CLE.ID = p_cle_id
183 UNION
184 SELECT NAME
185 FROM okc_k_lines_v
186 WHERE id = p_cle_id
187 AND lse_id = 48;
188 l_fee_name OKL_STRM_TYPE_TL.NAME%TYPE;
189
190 BEGIN
191 l_return_status := OKL_API.G_RET_STS_SUCCESS;
192 l_debug_enabled := okl_debug_pub.check_log_enabled;
193
194 l_last_updated_by := FND_GLOBAL.USER_ID;
195 l_last_update_date := TRUNC(SYSDATE);
196 l_last_update_login := FND_GLOBAL.LOGIN_ID;
197
198 is_debug_procedure_on := okl_debug_pub.check_log_on(l_module
199 ,fnd_log.level_procedure);
200
201 IF (l_debug_enabled = 'Y' AND is_debug_procedure_on) THEN
202 okl_debug_pub.log_debug(fnd_log.level_procedure
203 ,l_module
204 ,'start debug okl_vendormerge_grp.merge_vendor');
205 END IF; -- check for logging on STATEMENT level
206 is_debug_statement_on := okl_debug_pub.check_log_on(l_module
207 ,fnd_log.level_statement);
208 -- call START_ACTIVITY to create savepoint, check compatibility
209 -- and initialize message list
210 l_return_status := okl_api.start_activity(p_api_name => l_api_name
211 ,p_pkg_name => G_PKG_NAME
212 ,p_init_msg_list => p_init_msg_list
213 ,p_api_version => p_api_version
214 ,l_api_version => l_api_version
215 ,p_api_type => G_API_TYPE
216 ,x_return_status => l_return_status);
217 -- check if activity started successfully
218
219 IF (l_return_status = okl_api.g_ret_sts_unexp_error) THEN
220 RAISE okl_api.g_exception_unexpected_error;
221 ELSIF (l_return_status = okl_api.g_ret_sts_error) THEN
222 RAISE okl_api.g_exception_error;
223 END IF;
224
225 --Update OKL_TAX_ATTR_DEFINITIONS for references of Vendor Site
226 UPDATE OKL_TAX_ATTR_DEFINITIONS
227 SET VENDOR_SITE_ID = p_vendor_site_id,
228 LAST_UPDATED_BY = l_last_updated_by,
229 LAST_UPDATE_DATE = l_last_update_date,
230 LAST_UPDATE_LOGIN = l_last_update_login
231 WHERE VENDOR_SITE_ID = p_dup_vendor_site_id;
232
233 --Sales and Front End Objects
234 --Update OKL_SERVICES_B for references of Vendor
235 UPDATE OKL_SERVICES_B
236 SET SUPPLIER_ID = p_vendor_id,
237 LAST_UPDATED_BY = l_last_updated_by,
238 LAST_UPDATE_DATE = l_last_update_date,
239 LAST_UPDATE_LOGIN = l_last_update_login
240 WHERE SUPPLIER_ID = p_dup_vendor_id;
241
242 --Update OKL_ASSET_COMPONENTS_B for references of Vendor
243 UPDATE OKL_ASSET_COMPONENTS_B
244 SET SUPPLIER_ID = p_vendor_id,
245 LAST_UPDATED_BY = l_last_updated_by,
246 LAST_UPDATE_DATE = l_last_update_date,
247 LAST_UPDATE_LOGIN = l_last_update_login
248 WHERE SUPPLIER_ID = p_dup_vendor_id;
249
250 --Update OKL_COST_ADJUSTMENTS_B for references of Vendor
251 UPDATE OKL_COST_ADJUSTMENTS_B
252 SET SUPPLIER_ID = p_vendor_id,
253 LAST_UPDATED_BY = l_last_updated_by,
254 LAST_UPDATE_DATE = l_last_update_date,
255 LAST_UPDATE_LOGIN = l_last_update_login
256 WHERE SUPPLIER_ID = p_dup_vendor_id;
257
258 --Update OKL_FEES_B for references of Vendor
259 UPDATE OKL_FEES_B
260 SET SUPPLIER_ID = p_vendor_id,
261 LAST_UPDATED_BY = l_last_updated_by,
262 LAST_UPDATE_DATE = l_last_update_date,
263 LAST_UPDATE_LOGIN = l_last_update_login
264 WHERE SUPPLIER_ID = p_dup_vendor_id;
265
266 --Update OKL_LEASE_OPPS_ALL_B for references of Vendor
267 UPDATE OKL_LEASE_OPPS_ALL_B
268 SET SUPPLIER_ID = p_vendor_id,
269 LAST_UPDATED_BY = l_last_updated_by,
270 LAST_UPDATE_DATE = l_last_update_date,
271 LAST_UPDATE_LOGIN = l_last_update_login
272 WHERE SUPPLIER_ID = p_dup_vendor_id;
273
274 --Update OKL_LEASE_OPPS_ALL_B for references of Vendor
275 UPDATE OKL_LEASE_OPPS_ALL_B
276 SET ORIGINATING_VENDOR_ID = p_vendor_id,
277 LAST_UPDATED_BY = l_last_updated_by,
278 LAST_UPDATE_DATE = l_last_update_date,
279 LAST_UPDATE_LOGIN = l_last_update_login
280 WHERE ORIGINATING_VENDOR_ID = p_dup_vendor_id;
281
282 --Update OKL_LEASE_APPS_ALL_B for references of Vendor
283 UPDATE OKL_LEASE_APPS_ALL_B
284 SET ORIGINATING_VENDOR_ID = p_vendor_id,
285 LAST_UPDATED_BY = l_last_updated_by,
286 LAST_UPDATE_DATE = l_last_update_date,
287 LAST_UPDATE_LOGIN = l_last_update_login
288 WHERE ORIGINATING_VENDOR_ID = p_dup_vendor_id;
289
290 --Disbursements
291 --Update OKL_CURE_FUND_SUMS_ALL for references of Vendor
292 UPDATE OKL_CURE_FUND_SUMS_ALL
293 SET VENDOR_ID = p_vendor_id,
294 LAST_UPDATED_BY = l_last_updated_by,
295 LAST_UPDATE_DATE = l_last_update_date,
296 LAST_UPDATE_LOGIN = l_last_update_login
297 WHERE VENDOR_ID = p_dup_vendor_id;
298
299 --Update OKL_CURE_FUND_TRANS_ALL for references of Vendor
300 UPDATE OKL_CURE_FUND_TRANS_ALL
301 SET VENDOR_ID = p_vendor_id,
302 LAST_UPDATED_BY = l_last_updated_by,
303 LAST_UPDATE_DATE = l_last_update_date,
304 LAST_UPDATE_LOGIN = l_last_update_login
305 WHERE VENDOR_ID = p_dup_vendor_id;
306
307 --Update OKL_CURE_REFUND_HEADERS_B for references of Vendor Site
308 UPDATE OKL_CURE_REFUND_HEADERS_B
309 SET VENDOR_SITE_ID = p_vendor_site_id,
310 LAST_UPDATED_BY = l_last_updated_by,
311 LAST_UPDATE_DATE = l_last_update_date,
312 LAST_UPDATE_LOGIN = l_last_update_login
313 WHERE VENDOR_SITE_ID = p_dup_vendor_site_id;
314
315 --Update OKL_CURE_REFUNDS_ALL for references of Vendor Site
316 UPDATE OKL_CURE_REFUNDS_ALL
317 SET VENDOR_SITE_ID = p_vendor_site_id,
318 LAST_UPDATED_BY = l_last_updated_by,
319 LAST_UPDATE_DATE = l_last_update_date,
320 LAST_UPDATE_LOGIN = l_last_update_login
321 WHERE VENDOR_SITE_ID = p_dup_vendor_site_id;
322
323 --Update OKL_CURE_REFUND_STAGE for references of Vendor
324 UPDATE OKL_CURE_REFUND_STAGE
325 SET VENDOR_ID = p_vendor_id,
326 LAST_UPDATED_BY = l_last_updated_by,
327 LAST_UPDATE_DATE = l_last_update_date,
328 LAST_UPDATE_LOGIN = l_last_update_login
329 WHERE VENDOR_ID = p_dup_vendor_id;
330
331 --Update OKL_CURE_REPORTS_ALL for references of Vendor
332 UPDATE OKL_CURE_REPORTS_ALL
333 SET VENDOR_ID = p_vendor_id,
334 VENDOR_SITE_ID = p_vendor_site_id,
335 LAST_UPDATED_BY = l_last_updated_by,
336 LAST_UPDATE_DATE = l_last_update_date,
337 LAST_UPDATE_LOGIN = l_last_update_login
338 WHERE VENDOR_ID = p_dup_vendor_id
339 AND VENDOR_SITE_ID = p_dup_vendor_site_id;
340
341 -- OKL_TRX_AP_INVS_ALL_B
342 UPDATE OKL_TRX_AP_INVS_ALL_B
343 SET VENDOR_ID = p_vendor_id,
344 LAST_UPDATED_BY = l_last_updated_by,
345 LAST_UPDATE_DATE = l_last_update_date,
346 LAST_UPDATE_LOGIN = l_last_update_login
347 WHERE VENDOR_ID = p_dup_vendor_id;
348
349 UPDATE OKL_TRX_AP_INVS_ALL_B
350 SET IPVS_ID = p_vendor_site_id,
351 LAST_UPDATED_BY = l_last_updated_by,
352 LAST_UPDATE_DATE = l_last_update_date,
353 LAST_UPDATE_LOGIN = l_last_update_login
354 WHERE IPVS_ID = p_dup_vendor_site_id;
355
356 --Insurance Objects
357 --Update OKL_INS_POLICIES_ALL_B for references of Vendor
358 UPDATE OKL_INS_POLICIES_ALL_B
359 SET ISU_ID = p_vendor_id,
360 LAST_UPDATED_BY = l_last_updated_by,
361 LAST_UPDATE_DATE = l_last_update_date,
362 LAST_UPDATE_LOGIN = l_last_update_login
363 WHERE ISU_ID = p_dup_vendor_id;
364
365 --Update OKL_INS_PRODUCTS_B for references of Vendor
366 UPDATE OKL_INS_PRODUCTS_B
367 SET ISU_ID = p_vendor_id,
368 LAST_UPDATED_BY = l_last_updated_by,
369 LAST_UPDATE_DATE = l_last_update_date,
370 LAST_UPDATE_LOGIN = l_last_update_login
371 WHERE ISU_ID = p_dup_vendor_id;
372
373 --Update OKL_INSURER_RANKINGS for references of Vendor
374 UPDATE OKL_INSURER_RANKINGS
375 SET ISU_ID = p_vendor_id,
376 LAST_UPDATED_BY = l_last_updated_by,
377 LAST_UPDATE_DATE = l_last_update_date,
378 LAST_UPDATE_LOGIN = l_last_update_login
379 WHERE ISU_ID = p_dup_vendor_id;
380
381 --Update OKC_RULES_B for reference of Vendor in object1_id1, which will
382 --be identified based on value for JTOT_OBJECT1_CODE
383 UPDATE OKC_RULES_B RUL
384 SET OBJECT1_ID1 = TO_CHAR(p_vendor_id),
385 LAST_UPDATED_BY = l_last_updated_by,
386 LAST_UPDATE_DATE = l_last_update_date,
387 LAST_UPDATE_LOGIN = l_last_update_login
388 WHERE OBJECT1_ID1 = TO_CHAR(p_dup_vendor_id)
389 AND JTOT_OBJECT1_CODE = 'OKX_VENDOR'
390 AND EXISTS (SELECT ID
391 FROM OKL_K_HEADERS KHR
392 WHERE KHR.ID = RUL.DNZ_CHR_ID);
393
394 --Update OKC_RULES_B for reference of Vendor Site in object2_id1, which will
395 --be identified based on value for JTOT_OBJECT2_CODE
396 UPDATE OKC_RULES_B RUL
397 SET OBJECT2_ID1 = TO_CHAR(p_vendor_site_id),
398 LAST_UPDATED_BY = l_last_updated_by,
399 LAST_UPDATE_DATE = l_last_update_date,
400 LAST_UPDATE_LOGIN = l_last_update_login
401 WHERE OBJECT2_ID1 = TO_CHAR(p_dup_vendor_site_id)
402 AND JTOT_OBJECT2_CODE IN ('OKX_PAYTO', 'OKX_VENDSITE')
403 AND EXISTS (SELECT ID
404 FROM OKL_K_HEADERS KHR
405 WHERE KHR.ID = RUL.DNZ_CHR_ID);
406
407 --Update OKC_RULES_B for reference of Vendor Site in object3_id1, which will
408 --be identified based on value for JTOT_OBJECT3_CODE
409 UPDATE OKC_RULES_B RUL
410 SET OBJECT3_ID1 = TO_CHAR(p_vendor_site_id),
411 LAST_UPDATED_BY = l_last_updated_by,
412 LAST_UPDATE_DATE = l_last_update_date,
413 LAST_UPDATE_LOGIN = l_last_update_login
414 WHERE OBJECT3_ID1 = TO_CHAR(p_dup_vendor_site_id)
415 AND JTOT_OBJECT3_CODE IN ('OKX_PAYTO', 'OKX_VENDSITE')
416 AND EXISTS (SELECT ID
417 FROM OKL_K_HEADERS KHR
418 WHERE KHR.ID = RUL.DNZ_CHR_ID);
419
420 --Update OKL_SUBSIDIES_ALL_B for reference of Vendor
421 UPDATE OKL_SUBSIDIES_ALL_B
422 SET VENDOR_ID = p_vendor_id,
423 LAST_UPDATED_BY = l_last_updated_by,
424 LAST_UPDATE_DATE = l_last_update_date,
425 LAST_UPDATE_LOGIN = l_last_update_login
426 WHERE VENDOR_ID = p_dup_vendor_id;
427
428 --Update OKL_TXL_ASSETS_B for references of Vendor in SUPPLIER_ID
429 UPDATE OKL_TXL_ASSETS_B
430 SET SUPPLIER_ID = p_vendor_id,
431 LAST_UPDATED_BY = l_last_updated_by,
432 LAST_UPDATE_DATE = l_last_update_date,
433 LAST_UPDATE_LOGIN = l_last_update_login
434 WHERE SUPPLIER_ID = p_dup_vendor_id;
435
436 --Update OKL_TXL_ASSETS_B for references of Vendor in RESIDUAL_SHR_PARTY_ID
437 UPDATE OKL_TXL_ASSETS_B
438 SET RESIDUAL_SHR_PARTY_ID = p_vendor_id,
439 LAST_UPDATED_BY = l_last_updated_by,
440 LAST_UPDATE_DATE = l_last_update_date,
441 LAST_UPDATE_LOGIN = l_last_update_login
442 WHERE RESIDUAL_SHR_PARTY_ID = p_dup_vendor_id;
443
444 --Update OKL_TRX_SUBSIDY_POOLS for references of Vendor
445 UPDATE OKL_TRX_SUBSIDY_POOLS
446 SET VENDOR_ID = p_vendor_id,
447 LAST_UPDATED_BY = l_last_updated_by,
448 LAST_UPDATE_DATE = l_last_update_date,
449 LAST_UPDATE_LOGIN = l_last_update_login
450 WHERE VENDOR_ID = p_dup_vendor_id;
451
452 --Update OKL_EXT_PAY_INVS_ALL_B for references of Vendor and Vendor Site
453 --Both the updates can be done in single update as both Vendor and Vendor
454 --Site will be there together in any record
455 UPDATE OKL_EXT_PAY_INVS_ALL_B
456 SET VENDOR_ID = p_vendor_id,
457 VENDOR_SITE_ID = p_vendor_site_id,
458 LAST_UPDATED_BY = l_last_updated_by,
459 LAST_UPDATE_DATE = l_last_update_date,
460 LAST_UPDATE_LOGIN = l_last_update_login
461 WHERE VENDOR_ID = p_dup_vendor_id
462 AND VENDOR_SITE_ID = p_dup_vendor_site_id;
463
464 --Update OKL_QUOTE_SUBPOOL_USAGE for references of Vendor
465 UPDATE OKL_QUOTE_SUBPOOL_USAGE
466 SET VENDOR_ID = p_vendor_id,
467 LAST_UPDATED_BY = l_last_updated_by,
468 LAST_UPDATE_DATE = l_last_update_date,
469 LAST_UPDATE_LOGIN = l_last_update_login
470 WHERE VENDOR_ID = p_dup_vendor_id;
471
472 --Update OKL_EXT_BILLING_INTF_ALL for references of Vendor
473 UPDATE OKL_EXT_BILLING_INTF_ALL
474 SET TAX_VENDOR_ID = p_vendor_id,
475 LAST_UPDATED_BY = l_last_updated_by,
476 LAST_UPDATE_DATE = l_last_update_date,
477 LAST_UPDATE_LOGIN = l_last_update_login
478 WHERE TAX_VENDOR_ID = p_dup_vendor_id;
479
480 --Update OKL_EXT_BILLING_INTF_ALL for references of Vendor Site
481 --Need a separate update as both Vendor and Vendor Site may not be available
482 --together in all the records
483 UPDATE OKL_EXT_BILLING_INTF_ALL
484 SET TAX_VENDOR_SITE_ID = p_vendor_site_id,
485 LAST_UPDATED_BY = l_last_updated_by,
486 LAST_UPDATE_DATE = l_last_update_date,
487 LAST_UPDATE_LOGIN = l_last_update_login
488 WHERE TAX_VENDOR_SITE_ID = p_dup_vendor_site_id;
489
490 --Update OKL_CNSLD_AP_INVS_ALL for references of Vendor
491 UPDATE OKL_CNSLD_AP_INVS_ALL
492 SET VENDOR_ID = p_vendor_id,
493 LAST_UPDATED_BY = l_last_updated_by,
494 LAST_UPDATE_DATE = l_last_update_date,
495 LAST_UPDATE_LOGIN = l_last_update_login
496 WHERE VENDOR_ID = p_dup_vendor_id;
497
498 --Check if both Source and the Destination Vendor exists on the same contract
499 --at line level for the same line.
500 OPEN chk_vendor_chr_ln_csr(p_vendor_id, p_dup_vendor_id);
501 LOOP
502 FETCH chk_vendor_chr_ln_csr INTO chk_vendor_chr_ln_rec;
503 EXIT WHEN chk_vendor_chr_ln_csr%NOTFOUND;
504
505 --If there is such a contract which has both the vendors on the same line
506 --then obtain the Party Role id for these vendors for a given line.
507 OPEN party_role_dtls_ln_csr(p_dup_vendor_id, p_vendor_id, chk_vendor_chr_ln_rec.id, chk_vendor_chr_ln_rec.cle_id);
508 FETCH party_role_dtls_ln_csr INTO party_role_dtls_ln_rec;
509 CLOSE party_role_dtls_ln_csr;
510
511 --Check for Passthrough setup at Contract Lines
512 OPEN chk_passthrough_csr(chk_vendor_chr_ln_rec.id, chk_vendor_chr_ln_rec.cle_id, party_role_dtls_ln_rec.CPRS_CPL_ID);
513 FETCH chk_passthrough_csr INTO chk_passthrough_rec;
514 IF chk_passthrough_csr%FOUND
515 THEN
516 --If both the vendors are setup for Passthrough line then set the message
517 --and raise the error.
518 --Obtain the Passthrough Line name to be passed as token in error message
519 OPEN fee_name_csr(chk_vendor_chr_ln_rec.cle_id);
520 FETCH fee_name_csr INTO l_fee_name;
521 CLOSE fee_name_csr;
522 --Set the Error
523 OKL_API.SET_MESSAGE(
524 p_app_name => G_APP_NAME,
525 p_msg_name => 'OKL_VM_PASSTHROUGH_LINE_ERROR',
526 p_token1 => 'LINE',
527 p_token1_value => l_fee_name,
528 p_token2 => 'CONTRACT',
529 p_token2_value => chk_vendor_chr_ln_rec.contract_number);
530
531 l_return_status := OKL_API.G_RET_STS_ERROR;
532 RAISE OKL_API.G_EXCEPTION_ERROR;
533 ELSE
534 --If there is no passthrough setup which uses both the vendors at line level
535 --then remove the party role using source vendor for the given line.
536 l_kplv_rec.id := party_role_dtls_ln_rec.CPRS_CPL_ID;
537 l_cplv_rec.id := party_role_dtls_ln_rec.CPRS_CPL_ID;
538
539 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_PROCEDURE_ON)
540 THEN
541 OKL_DEBUG_PUB.LOG_DEBUG(
542 FND_LOG.LEVEL_PROCEDURE
543 ,L_MODULE
544 ,'begin debug call OKL_KPL_PVT.DELETE_ROW');
545 END IF;
546
547 --Remove the Party Role at the line level for the vendor getting merged
548 --Call the following API to remove the record in OKL
549 OKL_KPL_PVT.DELETE_ROW
550 (p_api_version => l_api_version,
551 p_init_msg_list => 'F',
552 x_return_status => l_return_status,
553 x_msg_count => p_msg_count,
554 x_msg_data => p_msg_data,
555 p_kplv_rec => l_kplv_rec);
556
557 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_PROCEDURE_ON)
558 THEN
559 OKL_DEBUG_PUB.LOG_DEBUG(
560 FND_LOG.LEVEL_PROCEDURE
561 ,L_MODULE
562 ,'end debug call OKL_KPL_PVT.DELETE_ROW');
563 END IF;
564
565 -- write to log
566 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_STATEMENT_ON) THEN
567 OKL_DEBUG_PUB.LOG_DEBUG(
568 FND_LOG.LEVEL_STATEMENT
569 ,L_MODULE || ' Result of OKL_KPL_PVT.DELETE_ROW'
570 ,'l_return_status ' || l_return_status);
571 END IF; -- end of statement level debug
572
573 IF(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)THEN
574 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
575 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)THEN
576 RAISE OKL_API.G_EXCEPTION_ERROR;
577 END IF;
578
579 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_PROCEDURE_ON)
580 THEN
581 OKL_DEBUG_PUB.LOG_DEBUG(
582 FND_LOG.LEVEL_PROCEDURE
583 ,L_MODULE
584 ,'begin debug call OKC_CONTRACT_PARTY_PVT.DELETE_K_PARTY_ROLE');
585 END IF;
586
587 --Remove the Party Role at the line level for the vendor getting merged
588 --Call the following API to remove the record in OKC
589 OKC_CONTRACT_PARTY_PVT.DELETE_K_PARTY_ROLE
590 (p_api_version => l_api_version,
591 p_init_msg_list => 'F',
592 x_return_status => l_return_status,
593 x_msg_count => p_msg_count,
594 x_msg_data => p_msg_data,
595 p_cplv_rec => l_cplv_rec);
596
597 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_PROCEDURE_ON)
598 THEN
599 OKL_DEBUG_PUB.LOG_DEBUG(
600 FND_LOG.LEVEL_PROCEDURE
601 ,L_MODULE
602 ,'end debug call OKC_CONTRACT_PARTY_PVT.DELETE_K_PARTY_ROLE');
603 END IF;
604
605 -- write to log
606 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_STATEMENT_ON) THEN
607 OKL_DEBUG_PUB.LOG_DEBUG(
608 FND_LOG.LEVEL_STATEMENT
609 ,L_MODULE || ' Result of OKC_CONTRACT_PARTY_PVT.DELETE_K_PARTY_ROLE'
610 ,'l_return_status ' || l_return_status);
611 END IF; -- end of statement level debug
612
613 IF(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)THEN
614 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
615 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)THEN
616 RAISE OKL_API.G_EXCEPTION_ERROR;
617 END IF;
618 END IF;
619 CLOSE chk_passthrough_csr;
620 END LOOP;
621 CLOSE chk_vendor_chr_ln_csr;
622
623 --Check if both Source and the Destination Vendor exists on the same contract
624 --at Contract Level
625 OPEN chk_vendor_chr_csr(p_dup_vendor_id, p_vendor_id);
626 LOOP
627 FETCH chk_vendor_chr_csr INTO chk_vendor_chr_rec;
628 EXIT WHEN chk_vendor_chr_csr%NOTFOUND;
629
630 --If there is such a contract which has both the vendors at Contract level
631 --then obtain the Party Role id for these vendors.
632 OPEN party_role_dtls_csr(p_dup_vendor_id, p_vendor_id, chk_vendor_chr_rec.id);
633 FETCH party_role_dtls_csr INTO party_role_dtls_rec;
634 CLOSE party_role_dtls_csr;
635
636 --Handle the Termination Quote Parties if both the vendors are parties
637 --to same termination quote
638 --Update the CPL_ID and PARTY_OBJECT1_ID1 of the merged vendor to point to
639 --destination vendor
640 UPDATE OKL_QUOTE_PARTIES QPT
641 SET PARTY_OBJECT1_ID1 = TO_CHAR(p_vendor_id),
642 LAST_UPDATED_BY = l_last_updated_by,
643 LAST_UPDATE_DATE = l_last_update_date,
644 LAST_UPDATE_LOGIN = l_last_update_login,
645 CPL_ID = party_role_dtls_rec.CPRD_CPL_ID
646 WHERE PARTY_OBJECT1_ID1 = TO_CHAR(p_dup_vendor_id)
647 AND PARTY_JTOT_OBJECT1_CODE = 'OKX_VENDOR'
648 AND CPL_ID = party_role_dtls_rec.CPRS_CPL_ID
649 AND EXISTS (SELECT 1
650 FROM OKL_TRX_QUOTES_ALL_B QTE
651 WHERE QTE.ID = QPT.QTE_ID
652 AND QTE.KHR_ID = chk_vendor_chr_rec.id
653 );
654
655 --Contract level evergreen passthrough terms and cond setup error
656 --Check for Passthrough setup at Contract Header
657 OPEN chk_passthrough_csr(chk_vendor_chr_rec.id, NULL, party_role_dtls_rec.CPRS_CPL_ID);
658 FETCH chk_passthrough_csr INTO chk_passthrough_rec;
659 IF chk_passthrough_csr%FOUND
660 THEN
661 --If both the vendors are used for Passthrough setup then set the message
662 --and raise the error.
663 --Set the Error
664 OKL_API.SET_MESSAGE(
665 p_app_name => G_APP_NAME,
666 p_msg_name => 'OKL_VM_PASSTHROUGH_HDR_ERROR',
667 p_token1 => 'CONTRACT',
668 p_token1_value => chk_vendor_chr_rec.contract_number);
669
670 l_return_status := OKL_API.G_RET_STS_ERROR;
671 RAISE OKL_API.G_EXCEPTION_ERROR;
672 ELSE
673 --If there is no passthrough setup which uses both the vendors at
674 --contract level then remove the party role for source vendor
675 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_PROCEDURE_ON)
676 THEN
677 OKL_DEBUG_PUB.LOG_DEBUG(
678 FND_LOG.LEVEL_PROCEDURE
679 ,L_MODULE
680 ,'begin debug call OKL_JTOT_CONTACT_EXTRACT_PUB.DELETE_PARTY');
681 END IF;
682
683 --Remove the Party Role from the contract for the vendor getting merged
684 OKL_JTOT_CONTACT_EXTRACT_PUB.DELETE_PARTY(
685 l_api_version
686 ,'F'
687 ,l_return_status
688 ,p_msg_count
689 ,p_msg_data
690 ,chk_vendor_chr_rec.id
691 ,party_role_dtls_rec.CPRS_CPL_ID);
692
693 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_PROCEDURE_ON)
694 THEN
695 OKL_DEBUG_PUB.LOG_DEBUG(
696 FND_LOG.LEVEL_PROCEDURE
697 ,L_MODULE
698 ,'end debug call OKL_JTOT_CONTACT_EXTRACT_PUB.DELETE_PARTY');
699 END IF;
700
701 -- write to log
702 IF(L_DEBUG_ENABLED = 'Y' AND IS_DEBUG_STATEMENT_ON) THEN
703 OKL_DEBUG_PUB.LOG_DEBUG(
704 FND_LOG.LEVEL_STATEMENT
705 ,L_MODULE || ' Result of OKL_JTOT_CONTACT_EXTRACT_PUB.DELETE_PARTY'
706 ,'l_return_status ' || l_return_status);
707 END IF; -- end of statement level debug
708
709 IF(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)THEN
710 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
711 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)THEN
712 RAISE OKL_API.G_EXCEPTION_ERROR;
713 END IF;
714 END IF;
715 CLOSE chk_passthrough_csr;
716 END LOOP;
717 CLOSE chk_vendor_chr_csr;
718
719 --Termination Quotes Objects
720 --Update OKL_QUOTE_PARTIES for references of Vendor, which will be identified
721 --based on value for PARTY_JTOT_OBJECT1_CODE
722 --This is needed for the cases in which there is only source vendor added in
723 --the contract.
724 UPDATE OKL_QUOTE_PARTIES
725 SET PARTY_OBJECT1_ID1 = TO_CHAR(p_vendor_id),
726 LAST_UPDATED_BY = l_last_updated_by,
727 LAST_UPDATE_DATE = l_last_update_date,
728 LAST_UPDATE_LOGIN = l_last_update_login
729 WHERE PARTY_OBJECT1_ID1 = TO_CHAR(p_dup_vendor_id)
730 AND PARTY_JTOT_OBJECT1_CODE = 'OKX_VENDOR';
731
732 --Update OKL_PARTY_PAYMENT_DTLS for references of Vendor and Vendor Site
733 --Passthrough setup update is fine in the case where there is only source
734 --vendor used on the setup.
735 UPDATE OKL_PARTY_PAYMENT_DTLS
736 SET VENDOR_ID = p_vendor_id,
737 PAY_SITE_ID = p_vendor_site_id,
738 LAST_UPDATED_BY = l_last_updated_by,
739 LAST_UPDATE_DATE = l_last_update_date,
740 LAST_UPDATE_LOGIN = l_last_update_login
741 WHERE VENDOR_ID = p_dup_vendor_id
742 AND PAY_SITE_ID = p_dup_vendor_site_id;
743
744 --Update OKC_K_PARTY_ROLES_B for references of Vendor
745 --This will take care of the cases where only source vendor and not the destination
746 --vendor is added to the contract. Both the vendor added to contract case is
747 --handled separately above.
748 UPDATE OKC_K_PARTY_ROLES_B CPR
749 SET OBJECT1_ID1 = TO_CHAR(p_vendor_id),
750 LAST_UPDATED_BY = l_last_updated_by,
751 LAST_UPDATE_DATE = l_last_update_date,
752 LAST_UPDATE_LOGIN = l_last_update_login
753 WHERE OBJECT1_ID1 = TO_CHAR(p_dup_vendor_id)
754 AND JTOT_OBJECT1_CODE = 'OKX_VENDOR'
755 AND EXISTS (SELECT ID
756 FROM OKL_K_HEADERS KHR
757 WHERE KHR.ID = CPR.DNZ_CHR_ID);
758
759 OKL_API.END_ACTIVITY(
760 x_msg_count => p_msg_count
761 ,x_msg_data => p_msg_data);
762
763 -- NULL is intentionally treated as false by this statement.
764 IF p_commit = fnd_api.G_TRUE
765 THEN
766 COMMIT;
767 END IF;
768
769 p_return_status := l_return_status;
770 okl_api.end_activity(x_msg_count => p_msg_count
771 ,x_msg_data => p_msg_data);
772
773 IF (l_debug_enabled = 'Y' AND is_debug_procedure_on)
774 THEN
775 okl_debug_pub.log_debug(fnd_log.level_procedure
776 ,l_module
777 ,'end debug okl_vendormerge_grp.merge_vendor');
778 END IF;
779 EXCEPTION
780 WHEN OKL_API.G_EXCEPTION_ERROR
781 THEN
782 IF chk_vendor_chr_csr%ISOPEN
783 THEN
784 CLOSE chk_vendor_chr_csr;
785 END IF;
786 IF chk_vendor_chr_ln_csr%ISOPEN
787 THEN
788 CLOSE chk_vendor_chr_ln_csr;
789 END IF;
790 IF party_role_dtls_csr%ISOPEN
791 THEN
792 CLOSE party_role_dtls_csr;
793 END IF;
794 IF party_role_dtls_ln_csr%ISOPEN
795 THEN
796 CLOSE party_role_dtls_ln_csr;
797 END IF;
798 IF chk_passthrough_csr%ISOPEN
799 THEN
800 CLOSE chk_passthrough_csr;
801 END IF;
802 IF fee_name_csr%ISOPEN
803 THEN
804 CLOSE fee_name_csr;
805 END IF;
806 p_return_status := OKL_API.HANDLE_EXCEPTIONS(
807 p_api_name => l_api_name,
808 p_pkg_name => G_PKG_NAME,
809 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
810 x_msg_count => p_msg_count,
811 x_msg_data => p_msg_data,
812 p_api_type => G_API_TYPE);
813 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR
814 THEN
815 IF chk_vendor_chr_csr%ISOPEN
816 THEN
817 CLOSE chk_vendor_chr_csr;
818 END IF;
819 IF chk_vendor_chr_ln_csr%ISOPEN
820 THEN
821 CLOSE chk_vendor_chr_ln_csr;
822 END IF;
823 IF party_role_dtls_csr%ISOPEN
824 THEN
825 CLOSE party_role_dtls_csr;
826 END IF;
827 IF party_role_dtls_ln_csr%ISOPEN
828 THEN
829 CLOSE party_role_dtls_ln_csr;
830 END IF;
831 IF chk_passthrough_csr%ISOPEN
832 THEN
833 CLOSE chk_passthrough_csr;
834 END IF;
835 IF fee_name_csr%ISOPEN
836 THEN
837 CLOSE fee_name_csr;
838 END IF;
839 p_return_status := OKL_API.HANDLE_EXCEPTIONS(
840 p_api_name => l_api_name,
841 p_pkg_name => G_PKG_NAME,
842 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
843 x_msg_count => p_msg_count,
844 x_msg_data => p_msg_data,
845 p_api_type => G_API_TYPE);
846 WHEN OTHERS
847 THEN
848 IF chk_vendor_chr_csr%ISOPEN
849 THEN
850 CLOSE chk_vendor_chr_csr;
851 END IF;
852 IF chk_vendor_chr_ln_csr%ISOPEN
853 THEN
854 CLOSE chk_vendor_chr_ln_csr;
855 END IF;
856 IF party_role_dtls_csr%ISOPEN
857 THEN
858 CLOSE party_role_dtls_csr;
859 END IF;
860 IF party_role_dtls_ln_csr%ISOPEN
861 THEN
862 CLOSE party_role_dtls_ln_csr;
863 END IF;
864 IF chk_passthrough_csr%ISOPEN
865 THEN
866 CLOSE chk_passthrough_csr;
867 END IF;
868 IF fee_name_csr%ISOPEN
869 THEN
870 CLOSE fee_name_csr;
871 END IF;
872 p_return_status := OKL_API.HANDLE_EXCEPTIONS(
873 p_api_name => l_api_name,
874 p_pkg_name => G_PKG_NAME,
875 p_exc_name => 'OTHERS',
876 x_msg_count => p_msg_count,
877 x_msg_data => p_msg_data,
878 p_api_type => G_API_TYPE);
879 END MERGE_VENDOR;
880 END OKL_VENDORMERGE_GRP;