[Home] [Help]
PACKAGE BODY: APPS.PV_TERR_ASSIGN_PUB
Source
1 PACKAGE BODY PV_TERR_ASSIGN_PUB AS
2 /* $Header: pvxpptab.pls 120.6 2006/05/04 03:19:21 rdsharma ship $ */
3
4 -- Start of Comments
5 --
6 -- NAME
7 -- PV_TERR_ASSIGN_PUB
8 --
9 -- PURPOSE
10 -- This package is a public API for manipulating Channel Team related info into
11 -- PRM. It contains specification for pl/sql records and tables and the
12 -- Public API's for access and channel team manipulation
13 --
14 -- Procedures:
15 -- Create_Channel_Team
16 -- Create_Online_Channel_Team
17 -- Create_Vad_Channel_Team
18 -- Update_Channel_Team
19 --
20 -- NOTES
21 -- This package is for public use.
22 --
23 -- HISTORY
24 -- 12/08/05 PINAGARA Fixes for SQL Repository violations(Bug # 4869726)
25 -- 07/27/05 PINAGARA Restructured the APIs for easier handling
26 -- 07/24/03 RDSHARMA Created
27 --
28 -- End of Comments
29
30 g_pkg_name CONSTANT VARCHAR2(30):='PV_TERR_ASSIGN_PUB';
31
32 PROCEDURE Write_Log(p_which number, p_mssg varchar2) IS
33 BEGIN
34 FND_FILE.put(p_which, p_mssg);
35 FND_FILE.NEW_LINE(p_which, 1);
36 END Write_Log;
37
38 -- Start of Comments
39 --
40 -- Funtion name : chk_prtnr_qflr_enabled
41 -- Type : Public
42 -- Function : The purpose of this function is to find out, whether
43 -- the supplied partner qualifiers is enabled or not.
44 --
45 -- Pre-reqs :
46 --
47 -- Paramaeters :
48 -- IN :
49 -- p_prtnr_qualifier IN NUMBER
50 -- OUT :
51 --
52 -- Version :
53 -- Initial version 1.0
54 --
55 -- Notes: Procedure to find out, whther the supplied partner qualifier
56 -- is enabled in the Qualifier Setup.
57 --
58 --
59 -- End of Comments
60 FUNCTION chk_prtnr_qflr_enabled (p_prtnr_qualifier IN NUMBER )
61 RETURN VARCHAR2
62 IS
63
64 l_prtnr_qlfr_enabled VARCHAR2(1) ;
65
66 CURSOR l_prtnr_qflr_csr(cv_prtnr_qualifier NUMBER) IS
67 SELECT nvl(partner.Enabled_Flag,'N')
68 FROM JTF_QUAL_USGS_ALL partner
69 WHERE partner.org_id= 204
70 AND partner.Seeded_Qual_Id = cv_prtnr_qualifier
71 AND partner.QUAL_TYPE_USG_ID=-1701 ;
72
73 BEGIN
74
75 l_prtnr_qlfr_enabled := 'N';
76
77 OPEN l_prtnr_qflr_csr(p_prtnr_qualifier);
78 FETCH l_prtnr_qflr_csr INTO l_prtnr_qlfr_enabled ;
79 CLOSE l_prtnr_qflr_csr ;
80
81 return l_prtnr_qlfr_enabled;
82
83
84 END chk_prtnr_qflr_enabled ;
85
86 -- Start of Comments
87 --
88 -- Funtion name : chk_partner_qflr_updated
89 -- Type : Public
90 -- Function : The purpose of this function is to find out, whether
91 -- any of the updated partner qualifiers is enabled or not.
92 --
93 -- Pre-reqs :
94 --
95 -- Paramaeters :
96 -- IN :
97 -- p_upd_prtnr_qflr_flg_rec IN prtnr_qflr_flg_rec_type
98 -- OUT :
99 --
100 -- Version :
101 -- Initial version 1.0
102 --
103 -- Notes: Procedure to find out, whther the updated partner qualifier
104 -- is enabled in the Qualifier Setup.
105 --
106 --
107 -- End of Comments
108 FUNCTION chk_partner_qflr_updated(p_upd_prtnr_qflr_flg_rec IN prtnr_qflr_flg_rec_type )
109 RETURN VARCHAR2
110 IS
111 l_prtnr_qflr_enabled VARCHAR2(1) ;
112
113 BEGIN
114
115 l_prtnr_qflr_enabled := 'N';
116 /* Partner Qualifier Enabled Check for Partner_Name. */
117 IF (p_upd_prtnr_qflr_flg_rec.partner_name_flg = 'Y' ) THEN
118 IF ( chk_prtnr_qflr_enabled(g_partner_name) = 'Y') THEN
119 l_prtnr_qflr_enabled := 'Y';
120 return l_prtnr_qflr_enabled;
121 END IF;
122 ELSIF (p_upd_prtnr_qflr_flg_rec.partner_name_flg = 'U') THEN
123 IF ( chk_prtnr_qflr_enabled(g_partner_name)= 'Y') THEN
124 l_prtnr_qflr_enabled := 'U';
125 END IF;
126 END IF;
127
128 /* Partner Qualifier Enabled Check for Area Code. */
129 IF (p_upd_prtnr_qflr_flg_rec.area_code_flg = 'Y' )THEN
130 IF ( chk_prtnr_qflr_enabled(g_area_code)= 'Y') THEN
131 l_prtnr_qflr_enabled := 'Y';
132 return l_prtnr_qflr_enabled;
133 END IF;
134 ELSIF (p_upd_prtnr_qflr_flg_rec.area_code_flg = 'U') THEN
135 IF ( chk_prtnr_qflr_enabled(g_area_code)= 'Y') THEN
136 l_prtnr_qflr_enabled := 'U';
137 END IF;
138 END IF;
139
140 /* Partner Qualifier Enabled Check for City. */
141 IF (p_upd_prtnr_qflr_flg_rec.city_flg = 'Y' ) THEN
142 IF ( chk_prtnr_qflr_enabled(g_city)= 'Y') THEN
143 l_prtnr_qflr_enabled := 'Y';
144 return l_prtnr_qflr_enabled;
145 END IF;
146 ELSIF (p_upd_prtnr_qflr_flg_rec.city_flg = 'U') THEN
147 IF ( chk_prtnr_qflr_enabled(g_city)= 'Y') THEN
148 l_prtnr_qflr_enabled := 'U';
149 END IF;
150 END IF;
151
152 /* Partner Qualifier Enabled Check for Country. */
153 IF (p_upd_prtnr_qflr_flg_rec.country_flg = 'Y' ) THEN
154 IF ( chk_prtnr_qflr_enabled(g_country)= 'Y') THEN
155 l_prtnr_qflr_enabled := 'Y';
156 return l_prtnr_qflr_enabled;
157 END IF;
158 ELSIF (p_upd_prtnr_qflr_flg_rec.country_flg = 'U') THEN
159 IF ( chk_prtnr_qflr_enabled(g_country)= 'Y') THEN
160 l_prtnr_qflr_enabled := 'U';
161 END IF;
162 END IF;
163
164 /* Partner Qualifier Enabled Check for County. */
165 IF (p_upd_prtnr_qflr_flg_rec.county_flg = 'Y' ) THEN
166 IF ( chk_prtnr_qflr_enabled(g_county)= 'Y') THEN
167 l_prtnr_qflr_enabled := 'Y';
168 return l_prtnr_qflr_enabled;
169 END IF;
170 ELSIF (p_upd_prtnr_qflr_flg_rec.county_flg = 'U') THEN
171 IF ( chk_prtnr_qflr_enabled(g_county)= 'Y') THEN
172 l_prtnr_qflr_enabled := 'U';
173 END IF;
174 END IF;
175
176 /* Partner Qualifier Enabled Check for Postal Code. */
177 IF (p_upd_prtnr_qflr_flg_rec.postal_code_flg = 'Y' ) THEN
178 IF ( chk_prtnr_qflr_enabled(g_postal_code)= 'Y') THEN
179 l_prtnr_qflr_enabled := 'Y';
180 return l_prtnr_qflr_enabled;
181 END IF;
182 ELSIF (p_upd_prtnr_qflr_flg_rec.postal_code_flg = 'U') THEN
183 IF ( chk_prtnr_qflr_enabled(g_postal_code)= 'Y') THEN
184 l_prtnr_qflr_enabled := 'U';
185 END IF;
186 END IF;
187
188 /* Partner Qualifier Enabled Check for Province. */
189 IF (p_upd_prtnr_qflr_flg_rec.province_flg = 'Y' ) THEN
190 IF ( chk_prtnr_qflr_enabled(g_province)= 'Y') THEN
191 l_prtnr_qflr_enabled := 'Y';
192 return l_prtnr_qflr_enabled;
193 END IF;
194 ELSIF (p_upd_prtnr_qflr_flg_rec.province_flg = 'U') THEN
195 IF ( chk_prtnr_qflr_enabled(g_province)= 'Y') THEN
196 l_prtnr_qflr_enabled := 'U';
197 END IF;
198 END IF;
199
200 /* Partner Qualifier Enabled Check for State. */
201 IF (p_upd_prtnr_qflr_flg_rec.state_flg = 'Y' ) THEN
202 IF ( chk_prtnr_qflr_enabled(g_state)= 'Y') THEN
203 l_prtnr_qflr_enabled := 'Y';
204 return l_prtnr_qflr_enabled;
205 END IF;
206 ELSIF (p_upd_prtnr_qflr_flg_rec.state_flg = 'U') THEN
207 IF ( chk_prtnr_qflr_enabled(g_state)= 'Y') THEN
208 l_prtnr_qflr_enabled := 'U';
209 END IF;
210 END IF;
211
212 /* Partner Qualifier Enabled Check for Annual Revenue. */
213 IF (p_upd_prtnr_qflr_flg_rec.Annual_Revenue_flg = 'Y' ) THEN
214 IF ( chk_prtnr_qflr_enabled(g_Annual_Revenue)= 'Y') THEN
215 l_prtnr_qflr_enabled := 'Y';
216 return l_prtnr_qflr_enabled;
217 END IF;
218 ELSIF (p_upd_prtnr_qflr_flg_rec.Annual_Revenue_flg = 'U') THEN
219 IF ( chk_prtnr_qflr_enabled(g_Annual_Revenue)= 'Y') THEN
220 l_prtnr_qflr_enabled := 'U';
221 END IF;
222 END IF;
223
224 /* Partner Qualifier Enabled Check for Number Of Employees. */
225 IF (p_upd_prtnr_qflr_flg_rec.number_of_employee_flg = 'Y' ) THEN
226 IF ( chk_prtnr_qflr_enabled(g_number_of_employee)= 'Y') THEN
227 l_prtnr_qflr_enabled := 'Y';
228 return l_prtnr_qflr_enabled;
229 END IF;
230 ELSIF (p_upd_prtnr_qflr_flg_rec.number_of_employee_flg = 'U') THEN
231 IF ( chk_prtnr_qflr_enabled(g_number_of_employee)= 'Y') THEN
232 l_prtnr_qflr_enabled := 'U';
233 END IF;
234 END IF;
235
236 /* Partner Qualifier Enabled Check for Customer Category Code. */
237 IF (p_upd_prtnr_qflr_flg_rec.cust_catgy_code_flg = 'Y' ) THEN
238 IF ( chk_prtnr_qflr_enabled(g_cust_catgy_code)= 'Y') THEN
239 l_prtnr_qflr_enabled := 'Y';
240 return l_prtnr_qflr_enabled;
241 END IF;
242 ELSIF (p_upd_prtnr_qflr_flg_rec.cust_catgy_code_flg = 'U') THEN
243 IF ( chk_prtnr_qflr_enabled(g_cust_catgy_code)= 'Y') THEN
244 l_prtnr_qflr_enabled := 'U';
245 END IF;
246 END IF;
247
248 /* Partner Qualifier Enabled Check for Partner Type. */
249 IF (p_upd_prtnr_qflr_flg_rec.partner_type_flg = 'Y' ) THEN
250 IF ( chk_prtnr_qflr_enabled(g_partner_type)= 'Y') THEN
251 l_prtnr_qflr_enabled := 'Y';
252 return l_prtnr_qflr_enabled;
253 END IF;
254 ELSIF (p_upd_prtnr_qflr_flg_rec.partner_type_flg = 'U') THEN
255 IF ( chk_prtnr_qflr_enabled(g_partner_type)= 'Y') THEN
256 l_prtnr_qflr_enabled := 'U';
257 END IF;
258 END IF;
259
260 /* Partner Qualifier Enabled Check for Partner Level. */
261 IF (p_upd_prtnr_qflr_flg_rec.partner_level_flg = 'Y' ) THEN
262 IF ( chk_prtnr_qflr_enabled(g_partner_level)= 'Y') THEN
263 l_prtnr_qflr_enabled := 'Y';
264 return l_prtnr_qflr_enabled;
265 END IF;
266 ELSIF (p_upd_prtnr_qflr_flg_rec.partner_level_flg = 'U') THEN
267 IF ( chk_prtnr_qflr_enabled(g_partner_level)= 'Y') THEN
268 l_prtnr_qflr_enabled := 'U';
269 END IF;
270 END IF;
271
272 return l_prtnr_qflr_enabled;
273
274 END chk_partner_qflr_updated;
275
276
277
278 -- Start of Comments
279 --
280 -- Funtion name : GET_RES_FROM_TEAM_GROUP
281 -- Type : Public
282 -- Function : The purpose of this procedure is to explode the resources,
283 -- if the resource_type is 'RS_TEAM' or 'RS_GROUP'.
284 --
285 -- Pre-reqs :
286 --
287 -- Paramaeters :
288 -- IN :
289 -- P_RESOURCE_ID IN NUMBER,
290 -- P_RESOURCE_TYPE IN VARCHAR2,
291 -- OUT :
292 -- X_RESOURCE_REC OUT PV_TERR_ASSIGN_PUB.ResourceRec
293 --
294 -- Version :
295 -- Initial version 1.0
296 --
297 -- Notes: Procedure to explode the resource team or resource group upto
298 -- individual level.
299 --
300 --
301 -- End of Comments
302 PROCEDURE GET_RES_FROM_TEAM_GROUP(
303 P_RESOURCE_ID IN NUMBER,
304 P_RESOURCE_TYPE IN VARCHAR2,
305 X_RESOURCE_REC OUT NOCOPY PV_TERR_ASSIGN_PUB.ResourceRec
306 )
307 IS
308
309 l_resource_group_id number;
310 l_resource_team_id number;
311
312 BEGIN
313
314 if (p_resource_type is null OR p_resource_id is null) then
315
316 return;
317 end if;
318 /* PINAGARA: introduced m.group_id = u.group_id join condition as bug fix # 4869726 */
319 if p_resource_type = 'RS_GROUP' then
320
321 l_resource_group_id := p_resource_id;
322
323 SELECT resource_id, person_id, resource_category, group_id
324 BULK COLLECT INTO
325 x_resource_rec.resource_id,
326 x_resource_rec.person_id,
327 x_resource_rec.resource_category,
328 x_resource_rec.group_id
329 FROM
330 ( SELECT distinct m.resource_id resource_id,
331 m.person_id person_id,
332 res.category resource_category,
333 m.group_id group_id
334 FROM jtf_rs_groups_b g,
335 jtf_rs_group_usages u,
336 jtf_rs_group_members m,
337 jtf_rs_role_relations rr,
338 jtf_rs_roles_b r,
339 jtf_rs_resource_extns res
340 WHERE g.group_id = l_resource_group_id
341 AND sysdate between nvl(g.start_date_active,sysdate) and
342 nvl(g.end_date_active,sysdate)
343 AND u.group_id = g.group_id
344 AND u.usage = 'PRM'
345 AND m.group_id = g.group_id
346 AND m.group_id = u.group_id
347 AND m.group_member_id = rr.role_resource_id
348 AND rr.role_resource_type = 'RS_GROUP_MEMBER'
349 AND NVL(rr.delete_flag,'N') <> 'Y'
350 AND sysdate between rr.start_date_active and
351 nvl(rr.end_date_active,sysdate)
352 AND rr.role_id = r.role_id
353 AND r.role_code in ('CHANNEL_MANAGER', 'CHANNEL_REP')
354 AND r.role_type_code = 'PRM'
355 AND r.active_flag = 'Y'
356 AND r.member_flag = 'Y'
357 AND res.resource_id = m.resource_id
358 AND res.category IN ('EMPLOYEE', 'PARTY')
359 AND sysdate between nvl(res.start_date_active,sysdate) and
360 nvl(res.end_date_active,sysdate)
361 AND res.user_id IS NOT NULL ) j
362 WHERE j.group_id = l_resource_group_id;
363
364
365 end if;
366
367 if p_resource_type = 'RS_TEAM' then
368
369 l_resource_team_id := p_resource_id;
370
371 SELECT resource_id, person_id, resource_category, group_id
372 BULK COLLECT INTO
373 x_resource_rec.resource_id,
374 x_resource_rec.person_id,
375 x_resource_rec.resource_category,
376 x_resource_rec.group_id
377 FROM (
378 SELECT min(tm.team_resource_id) resource_id,
379 min(tm.person_id) person_id,
380 min(g.group_id) group_id,
381 min(t.team_id) team_id,
382 tres.category resource_category
383 FROM jtf_rs_team_members tm,
384 jtf_rs_teams_b t,
385 jtf_rs_team_usages tu,
386 jtf_rs_role_relations trr,
387 jtf_rs_roles_b tr,
388 jtf_rs_resource_extns tres,
389 (
390 SELECT m.group_id group_id,
391 m.resource_id resource_id
392 FROM jtf_rs_group_members m,
393 jtf_rs_groups_b g,
394 jtf_rs_group_usages u,
395 jtf_rs_role_relations rr,
396 jtf_rs_roles_b r,
397 jtf_rs_resource_extns res
398 WHERE m.group_id = g.group_id
399 AND sysdate BETWEEN nvl(g.start_date_active,sysdate)
400 AND nvl(g.end_date_active,sysdate)
401 AND u.group_id = g.group_id
402 AND u.usage = 'PRM'
403 AND m.group_member_id = rr.role_resource_id
404 AND rr.role_resource_type = 'RS_GROUP_MEMBER'
405 AND rr.delete_flag <> 'Y'
406 AND sysdate between rr.start_date_active
407 AND nvl(rr.end_date_active,sysdate)
408 AND rr.role_id = r.role_id
409 AND r.role_type_code in ('PRM')
410 AND r.active_flag = 'Y'
411 AND res.resource_id = m.resource_id
412 AND sysdate between nvl(res.start_date_active,sysdate) and
413 nvl(res.end_date_active,sysdate)
414 AND res.category IN ('EMPLOYEE','PARTY') ) g /* Added PARTY category also */
415 WHERE tm.team_id = t.team_id
416 AND sysdate between nvl(t.start_date_active,sysdate)
417 AND nvl(t.end_date_active,sysdate)
418 AND tu.team_id = t.team_id
419 AND tu.usage = 'PRM'
420 AND tm.team_member_id = trr.role_resource_id
421 AND tm.delete_flag <> 'Y'
422 AND tm.resource_type = 'INDIVIDUAL'
423 AND trr.role_resource_type = 'RS_TEAM_MEMBER'
424 AND trr.delete_flag <> 'Y'
425 AND sysdate between trr.start_date_active
426 AND nvl(trr.end_date_active,sysdate)
427 AND trr.role_id = tr.role_id
428 AND tr.role_type_code in ('PRM')
429 AND tr.active_flag = 'Y'
430 AND tres.resource_id = tm.team_resource_id
431 AND sysdate between nvl(tres.start_date_active,sysdate) and
432 nvl(tres.end_date_active,sysdate)
433 AND tres.category IN ('EMPLOYEE','PARTY')
434 AND tm.team_resource_id = g.resource_id
435 GROUP BY tm.team_member_id, tm.team_resource_id, tm.person_id, tres.category
436 UNION
437 SELECT min(m.resource_id) resource_id,
438 min(m.person_id) person_id,
439 min(m.group_id) group_id,
440 min(jtm.team_id) team_id,
441 res.category resource_category
442 FROM jtf_rs_group_members m,
443 jtf_rs_groups_b g,
444 jtf_rs_group_usages u,
445 jtf_rs_role_relations rr,
446 jtf_rs_roles_b r,
447 jtf_rs_resource_extns res,
448 (
449 SELECT tm.team_resource_id group_id, t.team_id team_id
450 FROM jtf_rs_team_members tm,
451 jtf_rs_teams_b t,
452 jtf_rs_team_usages tu,
453 jtf_rs_role_relations trr,
454 jtf_rs_roles_b tr,
455 jtf_rs_resource_extns tres
456 WHERE tm.team_id = t.team_id
457 AND sysdate between nvl(t.start_date_active,sysdate)
458 and nvl(t.end_date_active,sysdate)
459 AND tu.team_id = t.team_id
460 AND tu.usage = 'PRM'
461 AND tm.team_member_id = trr.role_resource_id
462 AND tm.delete_flag <> 'Y'
463 AND tm.resource_type = 'GROUP'
464 AND trr.role_resource_type = 'RS_TEAM_MEMBER'
465 AND trr.delete_flag <> 'Y'
466 AND sysdate between trr.start_date_active and
467 nvl(trr.end_date_active,sysdate)
468 AND trr.role_id = tr.role_id
469 AND tr.role_type_code in ('PRM')
470 AND tr.active_flag = 'Y'
471 AND tres.resource_id = tm.team_resource_id
472 AND sysdate between nvl(tres.start_date_active,sysdate) and
473 nvl(tres.end_date_active,sysdate)
474 AND tres.category IN ('EMPLOYEE','PARTY') ) jtm
475 WHERE m.group_id = g.group_id
476 AND sysdate between nvl(g.start_date_active,sysdate) and
477 nvl(g.end_date_active,sysdate)
478 AND u.group_id = g.group_id
479 AND u.usage = 'PRM'
480 AND m.group_member_id = rr.role_resource_id
481 AND rr.role_resource_type = 'RS_GROUP_MEMBER'
482 AND rr.delete_flag <> 'Y'
483 AND sysdate between rr.start_date_active and
484 nvl(rr.end_date_active,sysdate)
485 AND rr.role_id = r.role_id
486 AND r.role_type_code in ( 'PRM')
487 AND r.active_flag = 'Y'
488 AND res.resource_id = m.resource_id
489 AND res.category IN ('EMPLOYEE','PARTY')
490 AND sysdate between nvl(res.start_date_active,sysdate) and
491 nvl(res.end_date_active,sysdate)
492 AND jtm.group_id = g.group_id
493 group by m.resource_id, m.person_id, m.group_id, res.category ) j
494 where
495 j.team_id = l_resource_team_id
496 and j.resource_category IN ('EMPLOYEE', 'PARTY');
497
498 end if;
499
500 EXCEPTION
501 WHEN others THEN
502 PVX_UTILITY_PVT.debug_message('Exception: others in Get_resource_from_team_group');
503 PVX_UTILITY_PVT.debug_message('SQLCODE ' || to_char(SQLCODE) ||
504 'SQLERRM ' || substr(SQLERRM, 1, 100));
505 END GET_RES_FROM_TEAM_GROUP;
506
507 -- Start of Comments
508 --
509 -- Funtion name : check_resource_exist
510 -- Type : Private
511 -- Function : The purpose of this function is to to check, whether the
512 -- given resource and the partner org record does not exists
513 -- in the PV_PARTNER_ACCESSES table.
514 --
515 -- Pre-reqs :
516 --
517 -- Paramaeters :
518 -- IN :
519 -- p_partner_id IN NUMBER,
520 -- p_resource_id IN NUMBER
521 -- OUT :
522 --
523 -- Version :
524 -- Initial version 1.0
525 --
526 -- Notes: Function for checking the existence of a given partner_id
527 -- and the resource_id.
528 --
529 --
530 -- End of Comments
531 FUNCTION check_resource_exist(p_partner_id IN NUMBER , p_resource_id IN NUMBER)
532 RETURN VARCHAR2
533 IS
534 l_resource_exist VARCHAR2(1) ;
535
536 CURSOR l_chk_resource_exist_csr(cv_partner_id NUMBER, cv_resource_id NUMBER) IS
537 SELECT 'Y'
538 FROM PV_PARTNER_ACCESSES
539 WHERE partner_id = cv_partner_id
540 AND resource_id = cv_resource_id ;
541 BEGIN
542 l_resource_exist := 'N';
543 OPEN l_chk_resource_exist_csr(p_partner_id, p_resource_id );
544 FETCH l_chk_resource_exist_csr INTO l_resource_exist;
545
546 IF ( l_chk_resource_exist_csr%NOTFOUND ) THEN
547 l_resource_exist := 'N';
548 END IF;
549 CLOSE l_chk_resource_exist_csr;
550
551 return l_resource_exist;
552 END check_resource_exist;
553
554 -- Start of Comments
555 --
556 -- Funtion name : check_channel_team_exist
557 -- Type : Private
558 -- Function : The purpose of this function is to to check, whether there is any channel team
559 -- assigned for this PARTNER
560 --
561 -- Pre-reqs :
562 --
563 -- Paramaeters :
564 -- IN :
565 -- p_partner_id IN NUMBER,
566 -- OUT :
567 --
568 -- Version :
569 -- Initial version 1.0
570 --
571 -- Notes: Function for checking the existence of a channel team
572 --
573 --
574 -- End of Comments
575 FUNCTION check_channel_team_exist(p_partner_id IN NUMBER )
576 RETURN VARCHAR2
577 IS
578 l_exist VARCHAR2(1) ;
579
580 CURSOR l_chk_channel_team_exist_csr(cv_partner_id NUMBER) IS
581 SELECT 'Y'
582 FROM PV_PARTNER_ACCESSES
583 WHERE partner_id = cv_partner_id;
584 BEGIN
585 l_exist := 'N';
586 OPEN l_chk_channel_team_exist_csr(p_partner_id);
587 FETCH l_chk_channel_team_exist_csr INTO l_exist;
588
589 IF ( l_chk_channel_team_exist_csr%NOTFOUND ) THEN
590 l_exist := 'N';
591 END IF;
592 CLOSE l_chk_channel_team_exist_csr;
593
594 return l_exist;
595 END check_channel_team_exist;
596 -- Start of Comments
597 --
598 -- Funtion name : Check_Territory_Exist
599 -- Type : Private
600 -- Function : The purpose of this function is to to check, whether for
601 -- the given territory_id and the partner_access_id, record
602 -- exists in the PV_TAP_ACCESS_TERRS table or not.
603 --
604 -- Pre-reqs :
605 --
606 -- Paramaeters :
607 -- IN :
608 -- p_terr_id IN NUMBER,
609 -- p_partner_access_id IN NUMBER
610 -- OUT :
611 --
612 -- Version :
613 -- Initial version 1.0
614 --
615 -- Notes: Function for checking the existence of a record for a given
616 -- terr_id and the partner_access_id
617 --
618 --
619 -- End of Comments
620 FUNCTION Check_Territory_Exist(p_terr_id IN NUMBER , p_partner_access_id IN NUMBER)
621 RETURN VARCHAR2
622 IS
623 l_territory_exist VARCHAR2(1) ;
624 CURSOR l_chk_terr_exist_csr(cv_terr_id NUMBER, cv_partner_access_id NUMBER) IS
625 SELECT 'Y'
626 FROM PV_TAP_ACCESS_TERRS
627 WHERE terr_id = cv_terr_id
628 AND partner_access_id = cv_partner_access_id ;
629 BEGIN
630 l_territory_exist := 'N';
631 OPEN l_chk_terr_exist_csr(p_terr_id, p_partner_access_id );
632 FETCH l_chk_terr_exist_csr INTO l_territory_exist;
633 CLOSE l_chk_terr_exist_csr;
634
635 return nvl(l_territory_exist,'N');
636 END Check_Territory_Exist;
637
638 -- Start of Comments
639 --
640 -- Funtion name : Chk_Res_Is_Vad_Employee
641 -- Type : Private
642 -- Function : The purpose of this procedure is to check, whether the resource
643 -- belongs to the supplied vad_partner_id is an employee also of
644 -- that vad organization.
645 --
646 -- Pre-reqs :
647 --
648 -- Paramaeters :
649 -- IN :
650 -- p_vad_partner_id IN NUMBER,
651 -- p_resource_id IN NUMBER,
652 --
653 -- OUT :
654 --
655 --
656 -- Version :
657 -- Initial version 1.0
658 --
659 -- Notes: Function for checking the existence of a given partner_id
660 -- and the resource_id.
661 --
662 --
663 -- End of Comments
664
665 FUNCTION Chk_Res_Is_Vendor_CM(p_resource_id IN NUMBER )
666 RETURN VARCHAR2
667 IS
668
669 l_res_is_vendor_CM VARCHAR2(1) ;
670
671 /* PINAGARA: Introduced jtf_rs_groups_b table as bug fix for 4869726 */
672 CURSOR l_res_is_vendor_CM_csr(cv_resource_id NUMBER) IS
673 SELECT 'Y'
674 FROM jtf_rs_resource_extns RES,
675 jtf_rs_group_members GRPMEM,
676 jtf_rs_group_usages GRPUSG,
677 jtf_rs_role_relations ROLRELAT ,
678 jtf_rs_roles_vl ROLE,
679 jtf_rs_groups_b b
680
681 WHERE RES.resource_id = cv_resource_id
682 AND RES.category = 'EMPLOYEE'
683 AND sysdate between nvl(RES.start_date_active,sysdate) and
684 nvl(RES.end_date_active,sysdate)
685 AND RES.resource_id = GRPMEM.resource_id
686 AND nvl(GRPMEM.delete_flag, 'N') = 'N'
687 AND GRPMEM.group_id = GRPUSG.group_id
688 AND GRPMEM.group_id = b.group_id
689 AND b.group_id = GRPUSG.group_id
690 AND GRPUSG.usage IN ('PRM')
691 AND GRPMEM.group_member_id=ROLRELAT.role_resource_id
692 AND ROLRELAT.role_resource_type = 'RS_GROUP_MEMBER'
693 AND NVL(ROLRELAT.delete_flag,'N') = 'N'
694 AND ROLRELAT.start_date_active <= sysdate
695 AND NVL(ROLRELAT.end_date_active,sysdate) >= sysdate
696 AND ROLRELAT.role_id = ROLE.ROLE_ID
697 AND ROLE.role_code in( 'CHANNEL_MANAGER' ,'CHANNEL_REP')
698 AND ROLE.role_type_code in ('PRM')
699 AND ROLE.MEMBER_FLAG = 'Y' ;
700
701 BEGIN
702 l_res_is_vendor_CM := 'N';
703 OPEN l_res_is_vendor_CM_csr( p_resource_id);
704 FETCH l_res_is_vendor_CM_csr INTO l_res_is_vendor_CM ;
705
706 IF (l_res_is_vendor_CM_csr%NOTFOUND) THEN
707 l_res_is_vendor_CM := 'N' ;
708 END IF;
709
710 CLOSE l_res_is_vendor_CM_csr;
711 return l_res_is_vendor_CM;
712
713 END Chk_Res_Is_Vendor_CM;
714
715 -- Start of Comments
716 --
717 -- Funtion name : Chk_Res_Is_Vad_CM
718 -- Type : Private
719 -- Function : The purpose of this procedure is to check, whether the resource
720 -- belongs to the supplied vad_partner_id is an employee also of
721 -- that vad organization.
722 --
723 -- Pre-reqs :
724 --
725 -- Paramaeters :
726 -- IN :
727 -- p_vad_partner_id IN NUMBER,
728 -- p_resource_id IN NUMBER,
729 --
730 -- OUT :
731 --
732 --
733 -- Version :
734 -- Initial version 1.0
735 --
736 -- Notes: Function for checking the existence of a given partner_id
737 -- and the resource_id.
738 --
739 --
740 -- End of Comments
741 FUNCTION Chk_Res_Is_Vad_CM(p_res_vad_partner_id IN NUMBER,
742 p_resource_id IN NUMBER )
743 RETURN VARCHAR2
744 IS
745 l_res_is_vad_employee VARCHAR2(1) ;
746 l_is_vad_partner VARCHAR2(1) ;
747
748 -- Changed the logic to fix the SQL Repository violation
749 -- by checking the partner_type check first and then checking the
750 -- resource.
751 CURSOR l_is_vad_partner_csr(cv_partner_id NUMBER) IS
752 SELECT 'Y'
753 FROM pv_enty_attr_values ATTR
754 WHERE ATTR.entity_id = cv_partner_id
755 AND ATTR.entity= 'PARTNER'
756 AND ATTR.attribute_id = 3
757 AND ATTR.attr_value = 'VAD'
758 AND ATTR.latest_flag = 'Y'
759 AND ATTR.enabled_flag = 'Y' ;
760
761 CURSOR l_res_is_vad_emp_csr(cv_partner_id NUMBER, cv_resource_id NUMBER) IS
762 -- PINAGARA Changed the code to use subquery as a fix for bug # 4869726
763 SELECT 'Y'
764 FROM
765 pv_partner_profiles PROFILE,
766 hz_relationships HZPR_PART_CONT ,
767 hz_parties CONTACT ,
768 jtf_rs_resource_extns RES
769 WHERE
770 PROFILE.partner_id = cv_partner_id
771 AND PROFILE.partner_party_id = HZPR_PART_CONT.object_id
772 AND HZPR_PART_CONT.RELATIONSHIP_TYPE = 'EMPLOYMENT'
773 AND HZPR_PART_CONT.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
774 AND HZPR_PART_CONT.OBJECT_TABLE_NAME = 'HZ_PARTIES'
775 AND HZPR_PART_CONT.status = 'A'
776 AND HZPR_PART_CONT.start_date <= SYSDATE
777 AND NVL(HZPR_PART_CONT.end_date,SYSDATE) >= SYSDATE
778 AND HZPR_PART_CONT.subject_id = CONTACT.PARTY_ID
779 AND HZPR_PART_CONT.subject_type = 'PERSON'
780 AND HZPR_PART_CONT.party_id = RES.source_id
781 AND RES.category = 'PARTY'
782 AND RES.resource_id = cv_resource_id -- 100000944 100069925
783 AND sysdate between nvl(RES.start_date_active,sysdate) and
784 nvl(RES.end_date_active,sysdate)
785 AND RES.resource_id IN (
786 SELECT GRPMEM.resource_id
787 FROM
788 jtf_rs_group_members GRPMEM,
789 jtf_rs_groups_b GROUPB,
790 jtf_rs_group_usages GRPUSG,
791 jtf_rs_role_relations ROLRELAT ,
792 jtf_rs_roles_vl ROLE
793
794 WHERE GRPMEM.resource_id = RES.resource_id
795 AND nvl(GRPMEM.delete_flag, 'N') = 'N'
796 AND GRPMEM.group_id = GROUPB.group_id
797 AND GROUPB.group_id = GRPUSG.group_id
798 AND GRPUSG.usage IN ('PRM')
799 AND GRPMEM.group_member_id=ROLRELAT.role_resource_id
800 AND ROLRELAT.role_resource_type = 'RS_GROUP_MEMBER'
801 AND NVL(ROLRELAT.delete_flag,'N') = 'N'
802 AND ROLRELAT.start_date_active <= sysdate
803 AND NVL(ROLRELAT.end_date_active,sysdate) >= sysdate
804 AND ROLRELAT.role_id = ROLE.ROLE_ID
805 AND ROLE.role_code in( 'CHANNEL_MANAGER' ,'CHANNEL_REP')
806 AND ROLE.role_type_code in ('PRM')
807 AND ROLE.MEMBER_FLAG = 'Y') ;
808
809 BEGIN
810 l_res_is_vad_employee := 'N';
811 l_is_vad_partner := 'N';
812
813 OPEN l_is_vad_partner_csr(p_res_vad_partner_id);
814 FETCH l_is_vad_partner_csr INTO l_is_vad_partner ;
815
816 IF ( l_is_vad_partner_csr%FOUND) THEN
817 OPEN l_res_is_vad_emp_csr(p_res_vad_partner_id, p_resource_id);
818 FETCH l_res_is_vad_emp_csr INTO l_res_is_vad_employee ;
819 CLOSE l_res_is_vad_emp_csr;
820 END IF;
821
822 CLOSE l_res_is_vad_emp_csr;
823 return l_res_is_vad_employee;
824
825 END Chk_Res_Is_Vad_CM;
826
827 -- Start of Comments
828 --
829 -- Funtion name : Chk_To_Create_Access_Rec
830 -- Type : Private
831 -- Function : The purpose of this procedure is to check, whether we can cretae a
832 -- record in PV_PARTNER_ACCESSES table for the supplied resource_id
833 -- and the given partner_id.
834 --
835 -- Pre-reqs :
836 --
837 -- Paramaeters :
838 -- IN :
839 -- p_partner_id IN NUMBER,
840 -- p_resource_id IN NUMBER,
841 -- p_resource_category IN VARCHAR2,
842 -- p_partner_type IN NUMBER
843 -- OUT :
844 -- x_res_created_flg OUT NOCOPY VARCHAR2,
845 -- x_partner_access_id OUT NOCOPY NUMBER
846 --
847 -- Version :
848 -- Initial version 1.0
849 --
850 -- Notes: Function for checking the existence of a given partner_id
851 -- and the resource_id.
852 --
853 --
854 -- End of Comments
855 PROCEDURE Chk_To_Create_Access_Rec(
856 p_partner_id IN NUMBER,
857 p_resource_id IN NUMBER,
858 p_resource_category IN VARCHAR2,
859 p_partner_type IN VARCHAR2,
860 p_vad_partner_id IN NUMBER,
861 x_return_status OUT NOCOPY VARCHAR2,
862 x_msg_count OUT NOCOPY NUMBER,
863 x_msg_data OUT NOCOPY VARCHAR2,
864 x_res_created_flg OUT NOCOPY VARCHAR2,
865 x_tap_created_flg OUT NOCOPY VARCHAR2,
866 x_partner_access_id OUT NOCOPY NUMBER)
867 IS
868 l_res_created_flg VARCHAR2(1) ;
869 l_tap_created_flg VARCHAR2(1) ;
870 l_partner_access_id NUMBER;
871 l_VAD_partner_id NUMBER;
872 l_partner_access_rec PV_Partner_Accesses_PVT.partner_access_rec_type;
873
874 l_return_status VARCHAR2(1);
875 l_msg_count NUMBER;
876 l_msg_data VARCHAR(2000);
877
878 -- Cursor l_chk_resource_exist_csr to check whether given resource_id and partner_id exists in
879 -- PV_PARTNER_ACCESSES table or not.
880 CURSOR l_chk_resource_exist_csr (cv_partner_id IN NUMBER, cv_resource_id IN NUMBER) IS
881 SELECT partner_access_id,
882 created_by_tap_flag
883 FROM PV_PARTNER_ACCESSES
884 WHERE partner_id = cv_partner_id
885 AND resource_id = cv_resource_id;
886
887 CURSOR l_VAD_Org_csr(cv_resource_id IN NUMBER) IS
888 SELECT source_org_id
889 FROM jtf_rs_resource_extns RES
890 WHERE resource_id = cv_resource_id;
891
892 BEGIN
893
894 -- Initialize the return status
895 x_return_status := FND_API.g_ret_sts_success;
896 /* Logic for Resource Validation, whether the resource is a 'EMPLOYEE' or a 'PARTY' */
897 l_res_created_flg := 'N' ;
898 l_tap_created_flg := 'N' ;
899 l_res_created_flg := 'N' ;
900 l_partner_access_id := -1;
901 OPEN l_chk_resource_exist_csr( p_partner_id, p_resource_id);
902 FETCH l_chk_resource_exist_csr INTO l_partner_access_id, l_tap_created_flg ;
903
904 /************************************ MODIFIED LOGIC *******************************************/
905
906 IF (l_chk_resource_exist_csr%NOTFOUND) THEN
907
908 CLOSE l_chk_resource_exist_csr;
909 l_partner_access_rec.vad_partner_id := NULL;
910 IF ( p_vad_partner_id IS NULL or p_vad_partner_id = FND_API.G_MISS_NUM ) THEN
911 IF (p_partner_type <> 'VAD' ) THEN
912 IF ( p_resource_category = 'EMPLOYEE' ) THEN
913 IF ( chk_res_is_Vendor_CM(p_resource_id) = 'Y' ) THEN
914 l_res_created_flg := 'Y';
915 END IF;
916 ELSIF ( p_resource_category = 'PARTY' ) THEN
917 OPEN l_VAD_Org_csr(p_resource_id);
918 FETCH l_VAD_Org_csr INTO l_VAD_partner_id;
919 IF ( l_VAD_Org_csr%FOUND ) THEN
920 CLOSE l_VAD_Org_csr;
921 IF (Chk_Res_Is_Vad_CM(l_VAD_partner_id, p_resource_id )= 'Y' ) THEN
922 l_res_created_flg := 'Y';
923 l_partner_access_rec.vad_partner_id := l_vad_partner_id;
924 END IF;
925 ELSE
926 CLOSE l_VAD_Org_csr;
927 END IF;
928 END IF;
929 ELSIF (p_partner_type = 'VAD') THEN
930 IF ( p_resource_category = 'EMPLOYEE' ) THEN
931 IF ( chk_res_is_Vendor_CM(p_resource_id) = 'Y' ) THEN
932 l_res_created_flg := 'Y';
933 END IF;
934 END IF;
935 END IF;
936 ELSE /* p_vad_partner_id IS NOT NULL */
937 IF (p_partner_type ='VAD' ) THEN
938 l_res_created_flg := 'E' ;
939 ELSE /* ELSE part of p_partner_type IS NOT 'VAD' */
940 IF ( p_resource_category = 'EMPLOYEE' ) THEN
941 IF ( chk_res_is_Vendor_CM(p_resource_id) = 'Y' ) THEN
942 l_res_created_flg := 'Y';
943 END IF;
944 ELSIF (p_resource_category = 'PARTY') THEN
945 OPEN l_VAD_Org_csr(p_resource_id);
946 FETCH l_VAD_Org_csr INTO l_VAD_partner_id;
947 IF ( l_VAD_Org_csr%FOUND ) THEN
948 CLOSE l_VAD_Org_csr;
949 IF (Chk_Res_Is_Vad_CM(l_VAD_partner_id, p_resource_id )= 'Y' ) THEN
950 l_res_created_flg := 'Y';
951 l_partner_access_rec.vad_partner_id := l_vad_partner_id;
952 END IF;
953 ELSE
954 CLOSE l_VAD_Org_csr;
955 END IF;
956 END IF;
957 END IF;
958 END IF; -- l_chk_resource_exist_csr%NOTFOUND
959
960 /********************************** END MODIFIED LOGIC ******************************************/
961 IF ( l_res_created_flg = 'Y') THEN
962 /* Set the p_partner_access_rec record */
963 l_partner_access_rec.partner_id := p_partner_id;
964 l_partner_access_rec.resource_id := p_resource_id;
965 l_partner_access_rec.keep_flag := 'N';
966 l_partner_access_rec.created_by_tap_flag := 'Y';
967 l_partner_access_rec.access_type := 'F';
968
969 PV_Partner_Accesses_PVT.Create_Partner_Accesses(
970 p_api_version_number => 1.0,
971 p_init_msg_list => FND_API.G_FALSE,
972 p_commit => FND_API.G_FALSE,
973 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
974 x_return_status => l_return_status,
975 x_msg_count => l_msg_count,
976 x_msg_data => l_msg_data,
977 p_partner_access_rec => l_partner_access_rec,
978 x_partner_access_id => l_partner_access_id );
979
980 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
981 IF (l_return_status = FND_API.G_RET_STS_ERROR ) THEN
982 RAISE FND_API.G_EXC_ERROR;
983 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
984 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
985 END IF;
986 END IF; /* l_return_status <> FND_API.G_RET_STS_SUCCESS */
987
988 END IF; /* l_res_created_flg = 'Y' */
989
990 -- Store output variables
991 x_res_created_flg := l_res_created_flg;
992 x_partner_access_id := l_partner_access_id ;
993 x_tap_created_flg := l_tap_created_flg;
994 END IF;
995
996 EXCEPTION
997 WHEN FND_API.g_exc_error THEN
998 x_return_status := FND_API.g_ret_sts_error;
999 FND_MSG_PUB.count_and_get (
1000 p_encoded => FND_API.g_false
1001 ,p_count => x_msg_count
1002 ,p_data => x_msg_data
1003 );
1004
1005 -- Debug Message
1006 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1007 hz_utility_v2pub.debug_return_messages (
1008 x_msg_count, x_msg_data, 'ERROR');
1009 hz_utility_v2pub.debug('Create_Channel_Team (-)');
1010 END IF;
1011
1012 WHEN FND_API.g_exc_unexpected_error THEN
1013 x_return_status := FND_API.g_ret_sts_unexp_error ;
1014 FND_MSG_PUB.count_and_get (
1015 p_encoded => FND_API.g_false
1016 ,p_count => x_msg_count
1017 ,p_data => x_msg_data
1018 );
1019 -- Debug Message
1020 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1021 hz_utility_v2pub.debug_return_messages (
1022 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
1023 hz_utility_v2pub.debug('Create_Channel_Team (-)');
1024 END IF;
1025
1026 WHEN OTHERS THEN
1027 x_return_status := FND_API.g_ret_sts_unexp_error ;
1028
1029 FND_MSG_PUB.count_and_get(
1030 p_encoded => FND_API.g_false
1031 ,p_count => x_msg_count
1032 ,p_data => x_msg_data
1033 );
1034
1035 -- Debug Message
1036 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1037 hz_utility_v2pub.debug_return_messages (
1038 x_msg_count, x_msg_data, 'SQL ERROR');
1039 hz_utility_v2pub.debug('Create_Channel_Team (-)');
1040 END IF;
1041 END Chk_To_Create_Access_Rec;
1042
1043 -- Start of Comments
1044 --
1045 -- Funtion name : Cr_Login_User_Access_Rec
1046 -- Type : Private
1047 -- Function : The purpose of this procedure is to add the logged-in user to
1048 -- PV_PARTNER_ACCESSES table as a Channel team member, if the logged
1049 -- in user has a 'CHANNEL_MANAGER' or CHANNEL_REP' role.
1050 --
1051 -- Pre-reqs :
1052 --
1053 -- Paramaeters :
1054 -- IN :
1055 -- p_partner_id IN NUMBER,
1056 -- p_login_user_id IN NUMBER,
1057 -- OUT :
1058 -- x_cm_added OUT VARCHAR2
1059 --
1060 -- Version :
1061 -- Initial version 1.0
1062 --
1063 -- Notes: Function for checking the existence of a given partner_id
1064 -- and the resource_id.
1065 --
1066 --
1067 -- End of Comments
1068 PROCEDURE Cr_Login_User_Access_Rec(
1069 p_partner_id IN NUMBER,
1070 p_login_user_id IN NUMBER,
1071 x_return_status OUT NOCOPY VARCHAR2,
1072 x_msg_count OUT NOCOPY NUMBER,
1073 x_msg_data OUT NOCOPY VARCHAR2,
1074 x_cm_added OUT NOCOPY VARCHAR2,
1075 x_res_created_flg OUT NOCOPY VARCHAR2,
1076 x_partner_access_id OUT NOCOPY NUMBER )
1077 IS
1078
1079 -- CURSOR to check, the logged-in user(Vendor Employee) has
1080 -- a CHANNEL_MANAGER or 'CHANNEL_REP' role.
1081
1082 CURSOR l_get_resource_id_csr (cv_user_id NUMBER) IS
1083 SELECT resource_id
1084 FROM jtf_rs_resource_extns
1085 WHERE user_id = cv_user_id
1086 AND sysdate between nvl(start_date_active,sysdate) and
1087 nvl(end_date_active,sysdate);
1088
1089 CURSOR l_user_exists_csr(cv_partner_id NUMBER,
1090 cv_resource_id NUMBER ) IS
1091 SELECT 'Y'
1092 FROM PV_PARTNER_ACCESSES
1093 WHERE partner_id = cv_partner_id
1094 AND resource_id = cv_resource_id;
1095
1096 l_resource_id NUMBER ;
1097 l_return_status VARCHAR2(1);
1098 l_msg_count NUMBER;
1099 l_msg_data VARCHAR(2000);
1100 l_resource_category VARCHAR2(30);
1101 l_res_created_flg VARCHAR2(1) ;
1102 l_partner_access_id NUMBER;
1103 l_cm_added VARCHAR2(1) ;
1104 l_user_exists VARCHAR2(1) ;
1105 l_partner_access_rec PV_Partner_Accesses_PVT.partner_access_rec_type;
1106
1107 BEGIN
1108
1109 l_res_created_flg := 'N';
1110 l_cm_added := 'N';
1111 l_user_exists := 'N';
1112
1113 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1114 PVX_Utility_PVT.debug_message('Procedure : Cr_Login_User_Access_Rec Start');
1115 END IF;
1116
1117 OPEN l_get_resource_id_csr(p_login_user_id) ;
1118 FETCH l_get_resource_id_csr INTO l_resource_id ;
1119
1120 IF (l_get_resource_id_csr%FOUND) THEN
1121 CLOSE l_get_resource_id_csr;
1122 IF (Chk_Res_Is_Vendor_CM(l_resource_id) = 'Y' ) THEN
1123
1124 OPEN l_user_exists_csr(p_partner_id, l_resource_id);
1125 FETCH l_user_exists_csr INTO l_user_exists ;
1126 IF (l_user_exists_csr%NOTFOUND ) THEN
1127 /* Call Chk_To_Create_Access_Rec procedure to create the logged
1128 in user record in the PV_PARTNER_ACCESSES table */
1129 /* Set the p_partner_access_rec record */
1130 l_partner_access_rec.partner_id := p_partner_id;
1131 l_partner_access_rec.resource_id := l_resource_id;
1132 l_partner_access_rec.keep_flag := 'Y';
1133 l_partner_access_rec.created_by_tap_flag := 'N';
1134 l_partner_access_rec.access_type := 'F';
1135
1136 PV_Partner_Accesses_PVT.Create_Partner_Accesses(
1137 p_api_version_number => 1.0,
1138 p_init_msg_list => FND_API.G_FALSE,
1139 p_commit => FND_API.G_FALSE,
1140 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1141 x_return_status => l_return_status,
1142 x_msg_count => l_msg_count,
1143 x_msg_data => l_msg_data,
1144 p_partner_access_rec => l_partner_access_rec,
1145 x_partner_access_id => l_partner_access_id );
1146
1147 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1148 IF (l_return_status = FND_API.G_RET_STS_ERROR ) THEN
1149 RAISE FND_API.G_EXC_ERROR;
1150 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1151 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1152 END IF;
1153 END IF; /* l_return_status <> FND_API.G_RET_STS_SUCCESS */
1154
1155 -- Store the output variables.
1156 x_res_created_flg := 'Y';
1157 x_partner_access_id := l_partner_access_id;
1158 x_cm_added := 'Y';
1159 END IF; /* l_user_exists = 'Y' */
1160 CLOSE l_user_exists_csr;
1161 END IF ; /*Chk_Res_Is_Vendor_CM(l_resource_id) = 'Y'*/
1162 ELSE
1163 CLOSE l_get_resource_id_csr;
1164 END IF; /* (l_get_resource_id_csr%FOUND) */
1165
1166 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1167 PVX_Utility_PVT.debug_message('Procedure : Cr_Login_User_Access_Rec End');
1168 END IF;
1169
1170 EXCEPTION
1171 WHEN FND_API.g_exc_error THEN
1172 x_return_status := FND_API.g_ret_sts_error;
1173 FND_MSG_PUB.count_and_get (
1174 p_encoded => FND_API.g_false
1175 ,p_count => x_msg_count
1176 ,p_data => x_msg_data
1177 );
1178
1179 -- Debug Message
1180 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1181 hz_utility_v2pub.debug_return_messages (
1182 x_msg_count, x_msg_data, 'ERROR');
1183 hz_utility_v2pub.debug('Cr_Login_User_Access_Rec(-)');
1184 END IF;
1185
1186 WHEN FND_API.g_exc_unexpected_error THEN
1187 x_return_status := FND_API.g_ret_sts_unexp_error ;
1188 FND_MSG_PUB.count_and_get (
1189 p_encoded => FND_API.g_false
1190 ,p_count => x_msg_count
1191 ,p_data => x_msg_data
1192 );
1193 -- Debug Message
1194 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1195 hz_utility_v2pub.debug_return_messages (
1196 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
1197 hz_utility_v2pub.debug('Cr_Login_User_Access_Rec(-)');
1198 END IF;
1199
1200 WHEN OTHERS THEN
1201 x_return_status := FND_API.g_ret_sts_unexp_error ;
1202
1203 FND_MSG_PUB.count_and_get(
1204 p_encoded => FND_API.g_false
1205 ,p_count => x_msg_count
1206 ,p_data => x_msg_data
1207 );
1208
1209 -- Debug Message
1210 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1211 hz_utility_v2pub.debug_return_messages (
1212 x_msg_count, x_msg_data, 'SQL ERROR');
1213 hz_utility_v2pub.debug('Cr_Login_User_Access_Rec(-)');
1214 END IF;
1215 END Cr_Login_User_Access_Rec;
1216
1217 -- Start of Comments
1218 --
1219 -- Funtion name : TAP_Get_Channel_Team
1220 -- Type : Private
1221 -- Function : The purpose of this function is to get the Channel Manager and
1222 -- Channel Rep by calling the JTF owned Territroy Assignment API.
1223 --
1224 -- Pre-reqs :
1225 --
1226 -- Paramaeters :
1227 -- IN :
1228 -- p_prtnr_qualifier_rec IN QUALIFIER_REC_TYPE,
1229 --
1230 -- OUT :
1231 -- x_return_Status OUT NOCOPY VARCHAR2,
1232 -- x_msg_Count OUT NOCOPY NUMBER,
1233 -- x_msg_Data OUT NOCOPY VARCHAR2,
1234 -- x_winners_rec OUT NOCOPY JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type
1235 --
1236 -- Version :
1237 -- Initial version 1.0
1238 --
1239 -- Notes: Function for checking the existence of a given partner_id
1240 -- and the resource_id.
1241 --
1242 --
1243 -- End of Comments
1244 PROCEDURE TAP_Get_Channel_Team(
1245 p_prtnr_qualifier_rec IN partner_qualifiers_rec_type,
1246 x_return_Status OUT NOCOPY VARCHAR2,
1247 x_msg_Count OUT NOCOPY NUMBER,
1248 x_msg_Data OUT NOCOPY VARCHAR2,
1249 x_winners_rec OUT NOCOPY JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type
1250 ) IS
1251
1252 CURSOR l_get_Currency(cv_party_id NUMBER) IS
1253 SELECT pref_functional_currency
1254 FROM HZ_ORGANIZATION_PROFILES
1255 WHERE effective_end_date is NULL
1256 AND party_id = cv_party_id;
1257
1258 l_counter NUMBER;
1259 l_winners_rec JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type;
1260 l_gen_bulk_rec JTF_TERR_ASSIGN_PUB.bulk_trans_rec_type;
1261 l_return_status VARCHAR2(1);
1262 l_msg_count NUMBER;
1263 l_msg_data VARCHAR(2000);
1264 l_curr_code VARCHAR2(30):= null;
1265
1266 BEGIN
1267 -- Debug Message
1268 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1269 PVX_Utility_PVT.debug_message('Procedure TAP_Get_Channel_Managers Start.');
1270 END IF;
1271
1272 -- Initialize API return status to SUCCESS
1273 x_return_status := FND_API.G_RET_STS_SUCCESS;
1274
1275 -- Initialize message list.
1276 FND_MSG_PUB.initialize;
1277
1278 -- bulk_trans_rec_type instantiation
1279 -- logic control properties
1280 l_gen_bulk_rec.trans_object_id := JTF_TERR_NUMBER_LIST(null);
1281 l_gen_bulk_rec.trans_detail_object_id := JTF_TERR_NUMBER_LIST(null);
1282
1283 l_gen_bulk_rec.SQUAL_CHAR01.EXTEND;
1284 l_gen_bulk_rec.SQUAL_CHAR02.EXTEND;
1285 l_gen_bulk_rec.SQUAL_CHAR03.EXTEND;
1286 l_gen_bulk_rec.SQUAL_CHAR04.EXTEND;
1287 l_gen_bulk_rec.SQUAL_CHAR05.EXTEND;
1288 l_gen_bulk_rec.SQUAL_CHAR06.EXTEND;
1289 l_gen_bulk_rec.SQUAL_CHAR07.EXTEND;
1290 l_gen_bulk_rec.SQUAL_CHAR08.EXTEND;
1291 l_gen_bulk_rec.SQUAL_CHAR09.EXTEND;
1292 l_gen_bulk_rec.SQUAL_CHAR10.EXTEND;
1293 l_gen_bulk_rec.SQUAL_CHAR11.EXTEND;
1294 l_gen_bulk_rec.SQUAL_CHAR12.EXTEND;
1295 l_gen_bulk_rec.SQUAL_CHAR13.EXTEND;
1296 l_gen_bulk_rec.SQUAL_CHAR14.EXTEND;
1297 l_gen_bulk_rec.SQUAL_CHAR15.EXTEND;
1298 l_gen_bulk_rec.SQUAL_CHAR16.EXTEND;
1299 l_gen_bulk_rec.SQUAL_CHAR17.EXTEND;
1300 l_gen_bulk_rec.SQUAL_CHAR18.EXTEND;
1301 l_gen_bulk_rec.SQUAL_CHAR19.EXTEND;
1302 l_gen_bulk_rec.SQUAL_CHAR20.EXTEND;
1303
1304 l_gen_bulk_rec.SQUAL_NUM01.EXTEND;
1305 l_gen_bulk_rec.SQUAL_NUM02.EXTEND;
1306 l_gen_bulk_rec.SQUAL_NUM03.EXTEND;
1307 l_gen_bulk_rec.SQUAL_NUM04.EXTEND;
1308 l_gen_bulk_rec.SQUAL_NUM05.EXTEND;
1309 l_gen_bulk_rec.SQUAL_NUM06.EXTEND;
1310 l_gen_bulk_rec.SQUAL_NUM07.EXTEND;
1311 l_gen_bulk_rec.SQUAL_NUM08.EXTEND;
1312 l_gen_bulk_rec.SQUAL_NUM09.EXTEND;
1313 l_gen_bulk_rec.SQUAL_NUM10.EXTEND;
1314 l_gen_bulk_rec.SQUAL_NUM11.EXTEND;
1315 l_gen_bulk_rec.SQUAL_NUM12.EXTEND;
1316 l_gen_bulk_rec.SQUAL_NUM13.EXTEND;
1317 l_gen_bulk_rec.SQUAL_NUM14.EXTEND;
1318 l_gen_bulk_rec.SQUAL_NUM15.EXTEND;
1319 l_gen_bulk_rec.SQUAL_NUM16.EXTEND;
1320 l_gen_bulk_rec.SQUAL_NUM17.EXTEND;
1321 l_gen_bulk_rec.SQUAL_NUM18.EXTEND;
1322 l_gen_bulk_rec.SQUAL_NUM19.EXTEND;
1323 l_gen_bulk_rec.SQUAL_NUM20.EXTEND;
1324
1325 /* Added for Currency Code suggested by ARPATEL in bug #3556250 */
1326 l_gen_bulk_rec.SQUAL_CURC01.EXTEND;
1327
1328 -- transaction qualifier values
1329 l_gen_bulk_rec.SQUAL_CHAR01(1) := p_prtnr_qualifier_rec.partner_name; -- Partner Name Range
1330 l_gen_bulk_rec.SQUAL_CHAR02(1) := p_prtnr_qualifier_rec.city; -- City
1331 l_gen_bulk_rec.SQUAL_CHAR03(1) := p_prtnr_qualifier_rec.county; -- County
1332 l_gen_bulk_rec.SQUAL_CHAR04(1) := p_prtnr_qualifier_rec.state; -- State
1333 l_gen_bulk_rec.SQUAL_CHAR05(1) := p_prtnr_qualifier_rec.province; -- Province
1334 l_gen_bulk_rec.SQUAL_CHAR06(1) := p_prtnr_qualifier_rec.postal_code; -- Postal Code
1335 l_gen_bulk_rec.SQUAL_CHAR07(1) := p_prtnr_qualifier_rec.country; -- Country
1336 l_gen_bulk_rec.SQUAL_CHAR08(1) := p_prtnr_qualifier_rec.area_code; -- Area Code
1337 l_gen_bulk_rec.SQUAL_CHAR09(1) := p_prtnr_qualifier_rec.customer_category_code; -- Customer Category
1338 l_gen_bulk_rec.SQUAL_CHAR10(1) := null;
1339 l_gen_bulk_rec.SQUAL_CHAR11(1) := null;
1340 l_gen_bulk_rec.SQUAL_CHAR12(1) := null;
1341 l_gen_bulk_rec.SQUAL_CHAR13(1) := null;
1342 l_gen_bulk_rec.SQUAL_CHAR14(1) := null;
1343 l_gen_bulk_rec.SQUAL_CHAR15(1) := null;
1344 l_gen_bulk_rec.SQUAL_CHAR16(1) := null;
1345 l_gen_bulk_rec.SQUAL_CHAR17(1) := null;
1346 l_gen_bulk_rec.SQUAL_CHAR18(1) := p_prtnr_qualifier_rec.partner_type;
1347 l_gen_bulk_rec.SQUAL_CHAR19(1) := p_prtnr_qualifier_rec.partner_level;
1348 l_gen_bulk_rec.SQUAL_CHAR20(1) := null;
1349
1350 -- transaction qualifier values
1351 l_gen_bulk_rec.SQUAL_NUM01(1) := p_prtnr_qualifier_rec.party_id; -- PARTY_ID
1352 l_gen_bulk_rec.SQUAL_NUM02(1) := null;
1353 l_gen_bulk_rec.SQUAL_NUM03(1) := null;
1354 l_gen_bulk_rec.SQUAL_NUM04(1) := null;
1355 l_gen_bulk_rec.SQUAL_NUM05(1) := p_prtnr_qualifier_rec.number_of_employee; -- Number of Employees
1356 l_gen_bulk_rec.SQUAL_NUM06(1) := p_prtnr_qualifier_rec.Annual_Revenue; -- Company Annual Revenue
1357 l_gen_bulk_rec.SQUAL_NUM07(1) := null;
1358 l_gen_bulk_rec.SQUAL_NUM08(1) := null;
1359 l_gen_bulk_rec.SQUAL_NUM09(1) := null;
1360 l_gen_bulk_rec.SQUAL_NUM10(1) := null;
1361 l_gen_bulk_rec.SQUAL_NUM11(1) := null;
1362 l_gen_bulk_rec.SQUAL_NUM12(1) := null;
1363 l_gen_bulk_rec.SQUAL_NUM13(1) := null;
1364 l_gen_bulk_rec.SQUAL_NUM14(1) := null;
1365 l_gen_bulk_rec.SQUAL_NUM15(1) := null;
1366 l_gen_bulk_rec.SQUAL_NUM16(1) := null;
1367 l_gen_bulk_rec.SQUAL_NUM17(1) := null;
1368 l_gen_bulk_rec.SQUAL_NUM18(1) := null;
1369 l_gen_bulk_rec.SQUAL_NUM19(1) := null;
1370 l_gen_bulk_rec.SQUAL_NUM20(1) := null;
1371
1372 /* Added by Rahul for Currency code suggested by ARPATEL 04/19/2004 in bug# 3556250 */
1373 OPEN l_get_Currency(p_prtnr_qualifier_rec.party_id);
1374 FETCH l_get_Currency INTO l_curr_code;
1375 CLOSE l_get_Currency;
1376
1377 l_gen_bulk_rec.SQUAL_CURC01(1) := l_curr_code;
1378
1379 IF (FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)) THEN
1380 PVX_UTILITY_PVT.debug_message('Partner Details - Partner Type:'||p_prtnr_qualifier_rec.partner_type);
1381 PVX_UTILITY_PVT.debug_message('party_id = ' || to_char(p_prtnr_qualifier_rec.party_id));
1382 PVX_UTILITY_PVT.debug_message('prtnr name Range= ' || p_prtnr_qualifier_rec.partner_name);
1383 PVX_UTILITY_PVT.debug_message('city = ' || p_prtnr_qualifier_rec.city);
1384 PVX_UTILITY_PVT.debug_message('county = ' || p_prtnr_qualifier_rec.county);
1385 PVX_UTILITY_PVT.debug_message('country = ' || p_prtnr_qualifier_rec.country);
1386 PVX_UTILITY_PVT.debug_message('state = ' || p_prtnr_qualifier_rec.state);
1387 PVX_UTILITY_PVT.debug_message('postal_code = ' || p_prtnr_qualifier_rec.postal_code);
1388 PVX_UTILITY_PVT.debug_message('area_code = ' || p_prtnr_qualifier_rec.area_code);
1389 PVX_UTILITY_PVT.debug_message('province = ' || p_prtnr_qualifier_rec.province);
1390 PVX_UTILITY_PVT.debug_message('Customer Catgy = ' || p_prtnr_qualifier_rec.customer_category_code);
1391 PVX_UTILITY_PVT.debug_message('Partner Level = ' || p_prtnr_qualifier_rec.partner_level);
1392 PVX_UTILITY_PVT.debug_message('employees_total = ' || to_char(p_prtnr_qualifier_rec.number_of_employee));
1393 PVX_UTILITY_PVT.debug_message('Annual_Revenue = ' || to_char(p_prtnr_qualifier_rec.Annual_Revenue));
1394 END IF;
1395
1396 JTF_TERR_ASSIGN_PUB.get_winners
1397 ( p_api_version_number => 1.0,
1398 p_use_type => 'RESOURCE',
1399 p_source_id => -1700,
1400 p_trans_id => -1701,
1401 p_trans_rec => l_gen_bulk_rec,
1402 p_resource_type => FND_API.G_MISS_CHAR,
1403 p_role => FND_API.G_MISS_CHAR,
1404 p_top_level_terr_id => FND_API.G_MISS_NUM,
1405 p_num_winners => FND_API.G_MISS_NUM,
1406 x_return_status => l_return_status,
1407 x_msg_count => l_msg_count,
1408 x_msg_data => l_msg_data,
1409 x_winners_rec => l_winners_rec
1410 );
1411
1412 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1413 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1414 RAISE FND_API.G_EXC_ERROR;
1415 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1416 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1417 END IF;
1418 END IF;
1419
1420 IF (FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)) THEN
1421 IF (l_winners_rec.resource_id.count > 0 ) THEN
1422 FOR k IN 1..l_winners_rec.resource_id.last
1423 LOOP
1424 PVX_UTILITY_PVT.debug_message('Resource Id = '||to_char(l_winners_rec.resource_id(k)));
1425 END LOOP;
1426 END IF;
1427 END IF;
1428 -- -------------------------------------------------------------------------
1429 -- Print out winners and assign to the output parameters.
1430 -- -------------------------------------------------------------------------
1431 x_winners_rec := l_winners_rec;
1432
1433 EXCEPTION
1434 WHEN FND_API.g_exc_error THEN
1435 x_return_status := FND_API.g_ret_sts_error;
1436 FND_MSG_PUB.count_and_get (
1437 p_encoded => FND_API.g_false
1438 ,p_count => x_msg_count
1439 ,p_data => x_msg_data
1440 );
1441
1442 -- Debug Message
1443 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1444 hz_utility_v2pub.debug_return_messages (
1445 x_msg_count, x_msg_data, 'ERROR');
1446 hz_utility_v2pub.debug('TAP_Get_Channel_Team(-)');
1447 END IF;
1448
1449 WHEN FND_API.g_exc_unexpected_error THEN
1450 x_return_status := FND_API.g_ret_sts_unexp_error ;
1451 FND_MSG_PUB.count_and_get (
1452 p_encoded => FND_API.g_false
1453 ,p_count => x_msg_count
1454 ,p_data => x_msg_data
1455 );
1456 -- Debug Message
1457 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1458 hz_utility_v2pub.debug_return_messages (
1459 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
1460 hz_utility_v2pub.debug('TAP_Get_Channel_Team(-)');
1461 END IF;
1462
1463 WHEN OTHERS THEN
1464 x_return_status := FND_API.g_ret_sts_unexp_error ;
1465
1466 FND_MSG_PUB.count_and_get(
1467 p_encoded => FND_API.g_false
1468 ,p_count => x_msg_count
1469 ,p_data => x_msg_data
1470 );
1471
1472 -- Debug Message
1473 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1474 hz_utility_v2pub.debug_return_messages (
1475 x_msg_count, x_msg_data, 'SQL ERROR');
1476 hz_utility_v2pub.debug('TAP_Get_Channel_Team(-)');
1477 END IF;
1478
1479 END TAP_Get_Channel_Team;
1480
1481 -- Start of Comments
1482 --
1483 -- API name : Process_TAP_Resources
1484 -- Type : Public
1485 -- Function : The purpose of this procedure is to processes all the resources
1486 -- retunred by Tap_Get_Channel_Team for a given Partner_id.
1487 --
1488 -- Pre-reqs :
1489 --
1490 -- Paramaeters :
1491 -- IN :
1492 -- p_partner_id IN NUMBER
1493 -- p_partner_type IN VARCHAR2
1494 -- p_vad_partner_id IN NUMBER
1495 -- p_mode IN VARCHAR2
1496 -- p_winners_rec IN JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type
1497 -- OUT :
1498 -- x_return_status OUT VARCHAR2(1)
1499 -- x_msg_count OUT NUMBER
1500 -- x_msg_data OUT VARCHAR2(2000)
1501 -- x_prtnr_access_id_tbl OUT JTF_NUMBER_TABLE
1502 --
1503 -- Version :
1504 -- Initial version 1.0
1505 --
1506 -- Notes: API for creating a Channel Team for a Partner Organization.
1507 --
1508 --
1509 -- End of Comments
1510 PROCEDURE Process_TAP_Resources(
1511 p_partner_id IN NUMBER,
1512 p_partner_type IN VARCHAR2,
1513 p_vad_partner_id IN NUMBER,
1514 p_winners_rec IN JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type,
1515 x_return_status OUT NOCOPY VARCHAR2,
1516 x_msg_count OUT NOCOPY NUMBER,
1517 x_msg_data OUT NOCOPY VARCHAR2,
1518 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type)
1519 IS
1520
1521 -- Get the Individual resource information
1522 CURSOR l_get_res_category(cv_resource_id NUMBER) IS
1523 SELECT category
1524 FROM jtf_rs_resource_extns res,
1525 jtf_rs_role_relations rr,
1526 jtf_rs_roles_b r
1527 WHERE res.resource_id = cv_resource_id
1528 AND res.resource_id = rr.role_resource_id
1529 AND rr.role_resource_type ='RS_INDIVIDUAL'
1530 AND NVL(rr.delete_flag,'N') <> 'Y'
1531 AND sysdate between rr.start_date_active and
1532 nvl(rr.end_date_active,sysdate)
1533 AND rr.role_id = r.role_id
1534 AND r.role_code in ('CHANNEL_MANAGER', 'CHANNEL_REP')
1535 AND r.role_type_code = 'PRM'
1536 AND r.active_flag = 'Y'
1537 AND r.member_flag = 'Y';
1538
1539 l_api_name CONSTANT VARCHAR2(30) := 'Process_TAP_Resources';
1540 l_winners_rec JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type := p_winners_rec;
1541 l_partner_id NUMBER ;
1542 l_res_category VARCHAR2(30);
1543 l_return_status VARCHAR2(1);
1544 l_msg_count NUMBER;
1545 l_msg_data VARCHAR(2000);
1546 l_res_created_flg VARCHAR2(1);
1547 l_tap_created_flg VARCHAR2(1);
1548 l_partner_access_id NUMBER;
1549 l_territory_access_rec PV_TAP_ACCESS_TERRS_PVT.TAP_ACCESS_TERRS_REC_TYPE ;
1550 l_resource_cnt NUMBER ;
1551 l_resource_rec PV_TERR_ASSIGN_PUB.ResourceRec;
1552 l_partner_type VARCHAR2(500) ;
1553 j_index NUMBER;
1554
1555
1556 BEGIN
1557 --------------- INSERTION OF THE LOGIC BEGIN ---------------------------
1558 -- Debug Message
1559 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1560 PVX_Utility_PVT.debug_message('Procedure Process_TAP_Resources Start.');
1561 END IF;
1562
1563 -- Initialize the return status
1564 x_return_status := FND_API.g_ret_sts_success;
1565
1566 l_partner_id := p_partner_id;
1567 l_resource_cnt := 0;
1568 l_partner_type := p_partner_type;
1569
1570 -- Check all the returned resources.
1571 IF ( l_winners_rec.resource_id.last > 0 ) THEN
1572 FOR i_index IN 1..l_winners_rec.resource_id.last
1573 LOOP
1574 -- Check if the returned resources are of type 'RS_TEAM' or 'RS_GROUP'
1575 IF l_winners_rec.resource_type(i_index) = 'RS_TEAM' or
1576 l_winners_rec.resource_type(i_index) = 'RS_GROUP' THEN
1577
1578
1579 GET_RES_FROM_TEAM_GROUP(
1580 P_RESOURCE_ID => l_winners_rec.resource_id(i_index),
1581 P_RESOURCE_TYPE => l_winners_rec.resource_type(i_index),
1582 X_RESOURCE_REC => l_resource_rec );
1583
1584 IF ( l_resource_rec.resource_id.count > 0) THEN
1585
1586 FOR j_index IN 1..l_resource_rec.resource_id.last
1587 LOOP
1588
1589 Chk_To_Create_Access_Rec(
1590 p_partner_id => l_partner_id,
1591 p_resource_id => l_resource_rec.resource_id(j_index),
1592 p_resource_category => l_resource_rec.resource_category(j_index),
1593 p_partner_type => l_partner_type,
1594 p_vad_partner_id => p_vad_partner_id,
1595 x_return_status => l_return_status,
1596 x_msg_count => l_msg_count,
1597 x_msg_data => l_msg_data,
1598 x_res_created_flg => l_res_created_flg,
1599 x_tap_created_flg => l_tap_created_flg,
1600 x_partner_access_id => l_partner_access_id);
1601
1602 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1603 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1604 RAISE FND_API.G_EXC_ERROR;
1605 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1606 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1607 END IF;
1608 END IF; /* l_return_status <> FND_API.G_RET_STS_SUCCESS */
1609
1610 IF ( l_res_created_flg = 'Y' OR
1611 ( l_res_created_flg = 'N' AND l_partner_access_id IS NOT NULL AND l_tap_created_flg = 'Y' ) )THEN
1612
1613 -- Setting the Territory Accesses record
1614 l_territory_access_rec.partner_access_id := l_partner_access_id;
1615 l_territory_access_rec.terr_id := l_winners_rec.terr_id(i_index);
1616 l_territory_access_rec.object_version_number := 1;
1617
1618 --- ====== Check for duplicate territory record for a given partner access id
1619 IF ( Check_Territory_Exist(
1620 l_territory_access_rec.partner_access_id,
1621 l_territory_access_rec.terr_id ) = 'N' ) THEN
1622
1623 --- Create a Territory Accesses record for the given Partner_access_id.
1624 PV_TAP_ACCESS_TERRS_PVT.Create_Tap_Access_Terrs(
1625 p_api_version_number => 1.0,
1626 p_init_msg_list => FND_API.G_FALSE,
1627 p_commit => FND_API.G_FALSE,
1628 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1629 x_return_status => l_return_status,
1630 x_msg_count => l_msg_count,
1631 x_msg_data => l_msg_data,
1632 p_tap_access_terrs_rec => l_territory_access_rec);
1633
1634 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1635 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1636 RAISE FND_API.G_EXC_ERROR;
1637 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1638 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1639 END IF;
1640 END IF; /* l_return_status <> FND_API.G_RET_STS_SUCCESS */
1641
1642 END IF; /*** Check_Territory_Exist ***/
1643
1644 ELSIF (l_res_created_flg = 'E') THEN
1645 -- Raise and Error that a VAD cannot create another VAD partner_type
1646 RAISE FND_API.G_EXC_ERROR;
1647 END IF; /* l_res_created_flg = 'N' */
1648
1649
1650 l_resource_cnt := l_resource_cnt + 1;
1651 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id := l_partner_access_id;
1652
1653 END LOOP; /* j_index IN 1..l_resource_rec.resource_id.last */
1654 END IF; /* l_resource_rec.resource_id.count > 0 */
1655
1656 ELSIF ( l_winners_rec.resource_type(i_index) = 'RS_EMPLOYEE' OR
1657 l_winners_rec.resource_type(i_index) = 'RS_PARTY' ) THEN
1658 --------------------- Portion for Individual resources -----------------------
1659 OPEN l_get_res_category(l_winners_rec.resource_id(i_index));
1660 FETCH l_get_res_category INTO l_res_category ;
1661
1662 IF ( l_get_res_category%FOUND ) THEN
1663
1664 CLOSE l_get_res_category;
1665 Chk_To_Create_Access_Rec(
1666 p_partner_id => l_partner_id,
1667 p_resource_id => l_winners_rec.resource_id(i_index),
1668 p_resource_category => l_res_category,
1669 p_partner_type => l_partner_type,
1670 p_vad_partner_id => p_vad_partner_id,
1671 x_return_status => l_return_status,
1672 x_msg_count => l_msg_count,
1673 x_msg_data => l_msg_data,
1674 x_res_created_flg => l_res_created_flg,
1675 x_tap_created_flg => l_tap_created_flg,
1676 x_partner_access_id => l_partner_access_id);
1677
1678 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1679 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1680 RAISE FND_API.G_EXC_ERROR;
1681 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1682 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1683 END IF;
1684 END IF; /* l_return_status <> FND_API.G_RET_STS_SUCCESS */
1685
1686 IF ( l_res_created_flg = 'Y' OR
1687 ( l_res_created_flg = 'N' AND l_partner_access_id IS NOT NULL AND l_tap_created_flg = 'Y' ) )THEN
1688 /*** Setting the Territory Accesses record ***/
1689 l_territory_access_rec.partner_access_id := l_partner_access_id;
1690 l_territory_access_rec.terr_id := l_winners_rec.terr_id(i_index);
1691 l_territory_access_rec.object_version_number := 1;
1692
1693 /*** Check for duplicate territory record for a given terr_id and partner_access_id ***/
1694 IF ( Check_Territory_Exist(
1695 l_territory_access_rec.partner_access_id,
1696 l_territory_access_rec.terr_id ) = 'N' ) THEN
1697
1698 /* Create a Territory Accesses record for the given Partner_access_id */
1699 PV_TAP_ACCESS_TERRS_PVT.Create_Tap_Access_Terrs(
1700 p_api_version_number => 1.0,
1701 p_init_msg_list => FND_API.G_FALSE,
1702 p_commit => FND_API.G_FALSE,
1703 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1704 x_return_status => l_return_status,
1705 x_msg_count => l_msg_count,
1706 x_msg_data => l_msg_data,
1707 p_tap_access_terrs_rec => l_territory_access_rec);
1708
1709 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1710 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1711 RAISE FND_API.G_EXC_ERROR;
1712 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1713 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1714 END IF;
1715 END IF; /* l_return_status <> FND_API.G_RET_STS_SUCCESS */
1716
1717 END IF; /*** Check for check_Territory_Exist ***/
1718 l_resource_cnt := l_resource_cnt + 1;
1719 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id := l_partner_access_id;
1720 ELSIF (l_res_created_flg = 'E') THEN
1721 -- Raise and Error that a VAD cannot create another VAD partner_type
1722 -- fnd_message.Set_Name('PV', 'PV_VAD_CANNOT_CREATE_VAD_PTYPE');
1723 -- fnd_msg_pub.Add;
1724 RAISE FND_API.G_EXC_ERROR;
1725 END IF; /* l_resource_create_flg = 'E' */
1726 ELSE
1727 CLOSE l_get_res_category;
1728 END IF; /* l_get_res_category */
1729 END IF; -- l_winners_rec.resource_type(i_index) = 'RS_EMPLOYEE' or 'RS_PARTY'
1730 END LOOP; -- FOR i_index IN 1..l_winners_rec.resource_id.last
1731 END IF; -- l_winners_rec.resource_id.last
1732
1733 EXCEPTION
1734 WHEN FND_API.g_exc_error THEN
1735 x_return_status := FND_API.g_ret_sts_error;
1736 FND_MSG_PUB.count_and_get (
1737 p_encoded => FND_API.g_false
1738 ,p_count => x_msg_count
1739 ,p_data => x_msg_data
1740 );
1741
1742 -- Debug Message
1743 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1744 hz_utility_v2pub.debug_return_messages (
1745 x_msg_count, x_msg_data, 'ERROR');
1746 hz_utility_v2pub.debug('Process_TAP_Resources (-)');
1747 END IF;
1748
1749 WHEN FND_API.g_exc_unexpected_error THEN
1750 x_return_status := FND_API.g_ret_sts_unexp_error ;
1751 FND_MSG_PUB.count_and_get (
1752 p_encoded => FND_API.g_false
1753 ,p_count => x_msg_count
1754 ,p_data => x_msg_data
1755 );
1756
1757 -- Debug Message
1758 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1759 hz_utility_v2pub.debug_return_messages (
1760 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
1761 hz_utility_v2pub.debug('Process_TAP_Resources (-)');
1762 END IF;
1763
1764 WHEN OTHERS THEN
1765 x_return_status := FND_API.g_ret_sts_unexp_error ;
1766
1767 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1768 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1769 END IF;
1770
1771 FND_MSG_PUB.count_and_get(
1772 p_encoded => FND_API.g_false
1773 ,p_count => x_msg_count
1774 ,p_data => x_msg_data
1775 );
1776
1777 -- Debug Message
1778 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1779 hz_utility_v2pub.debug_return_messages (
1780 x_msg_count, x_msg_data, 'SQL ERROR');
1781 hz_utility_v2pub.debug('Process_TAP_Resources (-)');
1782 END IF;
1783 END Process_TAP_Resources;
1784
1785 -- Start of Comments
1786 --
1787 -- API name : Get_Partner_Details
1788 -- Type : Public
1789 -- Function : The purpose of this procedure is to build a partner qualifiers
1790 -- table for a given party_id
1791 --
1792 -- Pre-reqs :
1793 --
1794 -- Paramaeters :
1795 -- IN :
1796 -- p_party_id IN NUMBER
1797 -- OUT :
1798 -- x_return_status OUT VARCHAR2(1)
1799 -- x_msg_count OUT NUMBER
1800 -- x_msg_data OUT VARCHAR2(2000)
1801 -- x_partner_qualifiers_tbl OUT partner_qualifiers_tbl_type
1802 --
1803 -- Version :
1804 -- Initial version 1.0
1805 --
1806 -- Notes: API for creating a Channel Team for a Partner Organization.
1807 --
1808 --
1809 -- End of Comments
1810 PROCEDURE get_partner_details (
1811 p_party_id IN NUMBER,
1812 x_return_status OUT NOCOPY VARCHAR2,
1813 x_msg_count OUT NOCOPY NUMBER,
1814 x_msg_data OUT NOCOPY VARCHAR2,
1815 x_partner_qualifiers_tbl OUT NOCOPY partner_qualifiers_tbl_type )
1816 IS
1817 -- Cursor l_partner_details_csr, which takes party_id as an input paramter, and gives
1818 -- the Partners details.
1819 CURSOR l_partner_details_csr(cv_party_id NUMBER) IS
1820 SELECT PARTY.party_id party_id,
1821 SITE.party_site_id party_site_id,
1822 PARTY.city city,
1823 PARTY.country country,
1824 PARTY.county county,
1825 PARTY.state state,
1826 PARTY.province province,
1827 PARTY.postal_code postal_code,
1828 PARTY.primary_phone_area_code phone_area_code,
1829 PARTY.employees_total employees_total,
1830 upper(PARTY.party_name) party_name,
1831 PARTY.category_code category_code,
1832 PARTY.curr_fy_potential_revenue annual_revenue
1833 FROM HZ_PARTY_SITES SITE,
1834 HZ_PARTIES PARTY
1835 WHERE SITE.status = 'A'
1836 AND SITE.identifying_address_flag = 'Y'
1837 AND PARTY.party_id = cv_party_id
1838 AND SITE.party_id = PARTY.party_id
1839 AND PARTY.party_type = 'ORGANIZATION'
1840 AND PARTY.status = 'A';
1841
1842 /********* Commented out.
1843 SELECT PARTY.party_id party_id,
1844 SITE.party_site_id party_site_id,
1845 LOC.city city,
1846 LOC.country country,
1847 LOC.county county,
1848 LOC.state state,
1849 LOC.province province,
1850 LOC.postal_code postal_code,
1851 CNTPNT.phone_area_code phone_area_code,
1852 PARTY.employees_total employees_total,
1853 upper(PARTY.party_name) party_name,
1854 PARTY.category_code category_code,
1855 PARTY.curr_fy_potential_revenue annual_revenue
1856 FROM HZ_PARTY_SITES SITE,
1857 HZ_CONTACT_POINTS CNTPNT,
1858 HZ_LOCATIONS LOC,
1859 HZ_PARTIES PARTY
1860 WHERE SITE.status = 'A'
1861 AND SITE.identifying_address_flag = 'Y'
1862 AND PARTY.party_id = cv_party_id
1863 AND SITE.party_id = PARTY.party_id
1864 AND PARTY.party_type = 'ORGANIZATION'
1865 AND PARTY.status = 'A'
1866 AND CNTPNT.owner_table_name(+) = 'HZ_PARTY_SITES'
1867 AND CNTPNT.owner_table_id(+) = SITE.party_site_id
1868 AND CNTPNT.status(+) = 'A'
1869 AND CNTPNT.primary_flag(+) = 'Y'
1870 AND CNTPNT.contact_point_type(+) = 'PHONE'
1871 AND LOC.location_id = SITE.location_id
1872 UNION ALL
1873 SELECT to_number(null) party_id,
1874 to_number(NULL) party_site_id ,
1875 to_char(NULL) city ,
1876 to_char(NULL) country,
1877 to_char(NULL) county ,
1878 to_char(NULL) state ,
1879 to_char(NULL) province ,
1880 to_char(NULL) postal_code ,
1881 CP.phone_area_code phone_area_code,
1882 PARTY.employees_total employees_total,
1883 upper(PARTY.party_name) party_name,
1884 PARTY.category_code category_code,
1885 PARTY.curr_fy_potential_revenue annual_revenue
1886 FROM HZ_CONTACT_POINTS CP,
1887 HZ_PARTIES PARTY
1888 WHERE CP.owner_table_name(+) = 'HZ_PARTIES'
1889 AND CP.owner_table_id(+) = PARTY.party_id
1890 AND PARTY.party_id = cv_party_id
1891 AND PARTY.party_type = 'ORGANIZATION'
1892 AND PARTY.status = 'A'
1893 AND CP.status(+) = 'A'
1894 AND CP.primary_flag(+) = 'Y'
1895 AND CP.contact_point_type(+) = 'PHONE';
1896 *************/
1897
1898
1899 l_partner_qualifiers_tbl partner_qualifiers_tbl_type ;
1900 rec_index NUMBER := 0;
1901 lc_party_id NUMBER := 0;
1902 l_partner_rec l_partner_details_csr%ROWTYPE;
1903 BEGIN
1904
1905 -- Initialize API return status to SUCCESS
1906 x_return_status := FND_API.G_RET_STS_SUCCESS;
1907 rec_index := 0;
1908
1909 -- FOR l_partner_rec IN l_partner_details_csr(p_party_id) LOOP
1910 OPEN l_partner_details_csr(p_party_id);
1911 LOOP
1912 FETCH l_partner_details_csr INTO l_partner_rec;
1913 EXIT WHEN l_partner_details_csr%NOTFOUND;
1914 rec_index := rec_index + 1;
1915 l_partner_qualifiers_tbl(rec_index).party_id := l_partner_rec.party_id;
1916 l_partner_qualifiers_tbl(rec_index).party_site_id := l_partner_rec.party_site_id;
1917 l_partner_qualifiers_tbl(rec_index).city := l_partner_rec.city ;
1918 l_partner_qualifiers_tbl(rec_index).country := l_partner_rec.country ;
1919 l_partner_qualifiers_tbl(rec_index).county := l_partner_rec.county;
1920 l_partner_qualifiers_tbl(rec_index).state := l_partner_rec.state;
1921 l_partner_qualifiers_tbl(rec_index).province := l_partner_rec.province;
1922 l_partner_qualifiers_tbl(rec_index).postal_code:= l_partner_rec.postal_code;
1923 l_partner_qualifiers_tbl(rec_index).area_code := l_partner_rec.phone_area_code;
1924 l_partner_qualifiers_tbl(rec_index).number_of_employee := l_partner_rec.employees_total;
1925 l_partner_qualifiers_tbl(rec_index).partner_name:= l_partner_rec.party_name;
1926 l_partner_qualifiers_tbl(rec_index).customer_category_code := l_partner_rec.category_code;
1927 l_partner_qualifiers_tbl(rec_index).Annual_Revenue := l_partner_rec.annual_revenue;
1928 END LOOP;
1929 CLOSE l_partner_details_csr;
1930
1931 IF ( rec_index = 0 ) THEN
1932 fnd_message.Set_Name('PV', 'PV_API_NO_PARTNER_PARTY_ID');
1933 fnd_msg_pub.Add;
1934 RAISE FND_API.G_EXC_ERROR;
1935 END IF;
1936
1937 -- Debug Message
1938 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1939 PVX_Utility_PVT.debug_message('After successfully getting the Partner Details ***************');
1940 END IF;
1941
1942 -- Store in the output variable.
1943 x_partner_qualifiers_tbl := l_partner_qualifiers_tbl;
1944
1945 -- Standard call to get message count and if count is 1, get message info.
1946 FND_MSG_PUB.Count_And_Get
1947 (p_count => x_msg_count,
1948 p_data => x_msg_data
1949 );
1950
1951 EXCEPTION
1952 WHEN FND_API.g_exc_error THEN
1953 x_return_status := FND_API.g_ret_sts_error;
1954 IF l_partner_details_csr%ISOPEN THEN
1955 CLOSE l_partner_details_csr;
1956 END IF;
1957
1958 FND_MSG_PUB.count_and_get (
1959 p_encoded => FND_API.g_false
1960 ,p_count => x_msg_count
1961 ,p_data => x_msg_data
1962 );
1963
1964 -- Debug Message
1965 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1966 hz_utility_v2pub.debug_return_messages (
1967 x_msg_count, x_msg_data, 'ERROR');
1968 hz_utility_v2pub.debug('get_partner_details (-)');
1969 END IF;
1970
1971 WHEN FND_API.g_exc_unexpected_error THEN
1972 x_return_status := FND_API.g_ret_sts_unexp_error ;
1973 IF l_partner_details_csr%ISOPEN THEN
1974 CLOSE l_partner_details_csr;
1975 END IF;
1976 FND_MSG_PUB.count_and_get (
1977 p_encoded => FND_API.g_false
1978 ,p_count => x_msg_count
1979 ,p_data => x_msg_data
1980 );
1981 -- Debug Message
1982 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1983 hz_utility_v2pub.debug_return_messages (
1984 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
1985 hz_utility_v2pub.debug('get_partner_details (-)');
1986 END IF;
1987
1988 WHEN OTHERS THEN
1989 x_return_status := FND_API.g_ret_sts_unexp_error ;
1990
1991 IF l_partner_details_csr%ISOPEN THEN
1992 CLOSE l_partner_details_csr;
1993 END IF;
1994
1995 FND_MSG_PUB.count_and_get(
1996 p_encoded => FND_API.g_false
1997 ,p_count => x_msg_count
1998 ,p_data => x_msg_data
1999 );
2000
2001 -- Debug Message
2002 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2003 hz_utility_v2pub.debug_return_messages (
2004 x_msg_count, x_msg_data, 'SQL ERROR');
2005 hz_utility_v2pub.debug('get_partner_details (-)');
2006 END IF;
2007
2008 END get_partner_details;
2009
2010 -- Start of Comments
2011 --
2012 -- API name : Delete_Channel_Team
2013 -- Type : Private
2014 -- Function : The purpose of this procedure is to delete a Channel
2015 -- team for a given Partner_id in the PV_PARTNER_ACCESSES
2016 -- table and also delete the territory information for that
2017 -- Channel team member from PV_TAP_ACCESS_TERRS table.
2018 --
2019 -- Pre-reqs : It deletes the Channel team members, if any exists in the
2020 -- PV_PARTNER_ACCESSES table for a given partner_id. It also
2021 -- deletes the information about territory for that channel
2022 -- team member, if any exists in the PV_TAP_ACCESS_TERRS table.
2023 --
2024 -- Paramaeters :
2025 -- IN :
2026 -- p_partner_id IN NUMBER
2027 --
2028 -- OUT :
2029 -- x_return_status OUT VARCHAR2(1)
2030 -- x_msg_count OUT NUMBER
2031 -- x_msg_data OUT VARCHAR2(2000)
2032 --
2033 -- Version :
2034 -- Initial version 1.0
2035 --
2036 -- Notes: API for deleting a Channel Team for a gievn Partner Organization.
2037 --
2038 --
2039 -- End of Comments
2040
2041 PROCEDURE Delete_Channel_Team(
2042 p_partner_id IN NUMBER ,
2043 x_return_status OUT NOCOPY VARCHAR2,
2044 x_msg_count OUT NOCOPY NUMBER,
2045 x_msg_data OUT NOCOPY VARCHAR2 )
2046 IS
2047
2048 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Channel_Team';
2049 l_return_status VARCHAR2(1);
2050 l_msg_count NUMBER;
2051 l_msg_data VARCHAR(2000);
2052 l_partner_id NUMBER;
2053
2054 -- Cursor l_channel_team_csr to get all the channel team members for a given
2055 -- partner_id, which we have to delete from PV_PARTNER_ACCESSES table.
2056 CURSOR l_channel_team_csr (cv_partner_id IN NUMBER) IS
2057 SELECT partner_access_id, object_version_number
2058 FROM PV_PARTNER_ACCESSES
2059 WHERE partner_id = cv_partner_id
2060 AND KEEP_FLAG = 'N'
2061 AND CREATED_BY_TAP_FLAG = 'Y';
2062
2063 -- Cursor l_territory_csr to get all the territory record for a given
2064 -- partner_access_id, which we have to delete from PV_TAP_ACCESS_TERRS table.
2065 CURSOR l_territory_csr (cv_partner_access_id IN NUMBER) IS
2066 SELECT partner_access_id, terr_id, object_version_number
2067 FROM PV_TAP_ACCESS_TERRS
2068 WHERE partner_access_id = cv_partner_access_id;
2069
2070 BEGIN
2071
2072 -- Debug Message
2073 IF (FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)) THEN
2074 PVX_UTILITY_PVT.debug_message('Private Procedure: ' || l_api_name || 'start');
2075 END IF;
2076
2077 -- Initialize API return status to SUCCESS
2078 x_return_status := FND_API.G_RET_STS_SUCCESS;
2079
2080 -- Find out all the Channel Team members for a given partner_id from l_channel_team_csr.
2081 FOR l_channel_team_rec IN l_channel_team_csr(p_partner_id)
2082 LOOP
2083 /*** First Delete, if any territory record exists in the PV_TAP_ACCESS_TERRS table for
2084 a gievn partner_access_id ***/
2085
2086 FOR l_territory_rec IN l_territory_csr( l_channel_team_rec.partner_access_id)
2087 LOOP
2088 -- Delete the Territory record for the given PARTNER_ACCESS_ID and TERR_ID
2089 -- from PV_TAP_ACCESS_TERRS table.
2090
2091 PV_TAP_ACCESS_TERRS_PVT.Delete_Tap_Access_Terrs(
2092 p_api_version_number => 1.0,
2093 p_init_msg_list => FND_API.G_FALSE,
2094 p_commit => FND_API.G_FALSE,
2095 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
2096 x_return_status => l_return_status,
2097 x_msg_count => l_msg_count,
2098 x_msg_data => l_msg_data,
2099 p_partner_access_id => l_territory_rec.partner_access_id,
2100 p_terr_id => l_territory_rec.terr_id,
2101 p_object_version_number => l_territory_rec.object_version_number );
2102
2103 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2104 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
2105 RAISE FND_API.G_EXC_ERROR;
2106 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2107 -- FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
2108 -- FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TAP_ACCESS_TERRS_PVT.Delete_Tap_Access_Terrs');
2109 -- FND_MSG_PUB.Add;
2110 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2111 END IF;
2112 END IF;
2113
2114 END LOOP; /* FOR l_territory_rec IN l_territory_csr( l_channel_team_rec.partner_access_id) */
2115
2116 -- Delete the Partner Access record for the given PARTNER_ACCESS_ID
2117 -- from PV_PARTNER_ACCESSES table.
2118 PV_Partner_Accesses_PVT.Delete_Partner_Accesses(
2119 p_api_version_number => 1.0,
2120 p_init_msg_list => FND_API.G_FALSE,
2121 p_commit => FND_API.G_FALSE,
2122 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
2123 x_return_status => l_return_status,
2124 x_msg_count => l_msg_count,
2125 x_msg_data => l_msg_data,
2126 p_partner_access_id => l_channel_team_rec.partner_access_id,
2127 p_object_version_number => l_channel_team_rec.object_version_number );
2128
2129 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2130 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
2131 RAISE FND_API.G_EXC_ERROR;
2132 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2133 -- FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
2134 -- FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_Partner_Accesses_PVT.Delete_Partner_Accesses');
2135 -- FND_MSG_PUB.Add;
2136 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2137 END IF;
2138 END IF;
2139 END LOOP; /* FOR l_channel_team_rec IN l_channel_team_csr(p_partner_id) */
2140
2141 -- Debug Message
2142 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2143 PVX_UTILITY_PVT.debug_message('Private Procedure: ' || l_api_name || 'end.');
2144 END IF;
2145
2146 -- Standard call to get message count and if count is 1, get message info.
2147 FND_MSG_PUB.Count_And_Get
2148 (p_count => x_msg_count,
2149 p_data => x_msg_data
2150 );
2151
2152 EXCEPTION
2153 WHEN FND_API.g_exc_error THEN
2154 x_return_status := FND_API.g_ret_sts_error;
2155 FND_MSG_PUB.count_and_get (
2156 p_encoded => FND_API.g_false
2157 ,p_count => x_msg_count
2158 ,p_data => x_msg_data
2159 );
2160
2161 -- Debug Message
2162 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2163 hz_utility_v2pub.debug_return_messages (
2164 x_msg_count, x_msg_data, 'ERROR');
2165 hz_utility_v2pub.debug('Delete_Channel_Team (-)');
2166 END IF;
2167
2168 WHEN FND_API.g_exc_unexpected_error THEN
2169 x_return_status := FND_API.g_ret_sts_unexp_error ;
2170 FND_MSG_PUB.count_and_get (
2171 p_encoded => FND_API.g_false
2172 ,p_count => x_msg_count
2173 ,p_data => x_msg_data
2174 );
2175 -- Debug Message
2176 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2177 hz_utility_v2pub.debug_return_messages (
2178 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
2179 hz_utility_v2pub.debug('Delete_Channel_Team (-)');
2180 END IF;
2181
2182 WHEN OTHERS THEN
2183 x_return_status := FND_API.g_ret_sts_unexp_error ;
2184
2185 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
2186 THEN
2187 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
2188 END IF;
2189
2190 FND_MSG_PUB.count_and_get(
2191 p_encoded => FND_API.g_false
2192 ,p_count => x_msg_count
2193 ,p_data => x_msg_data
2194 );
2195
2196 -- Debug Message
2197 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2198 hz_utility_v2pub.debug_return_messages (
2199 x_msg_count, x_msg_data, 'SQL ERROR');
2200 hz_utility_v2pub.debug('Delete_Channel_Team (-)');
2201 END IF;
2202
2203 END Delete_Channel_Team;
2204
2205 -- Start of Comments
2206 --
2207 -- API name : Create_Terr_Channel_Team
2208 -- Type : Public
2209 -- Function : The purpose of this procedure is to create a Channel
2210 -- team based on the territory for a partner
2211 --
2212 -- Pre-reqs : Resources returned should have a "Channel Manager" or
2213 -- "Channel Rep" role at group level.
2214 --
2215 -- Paramaeters :
2216 -- IN :
2217 -- p_api_version_number IN NUMBER,
2218 -- p_init_msg_list IN VARCHAR2
2219 -- p_commit IN VARCHAR2
2220 -- p_validation_level IN NUMBER
2221 --
2222 -- p_partner_id IN NUMBER
2223 -- p_vad_partner_id IN NUMBER
2224 -- p_mode IN VARCHAR2
2225 -- p_login_user IN NUMBER
2226 -- p_partner_qualifiers_tbl IN partner_qualifiers_tbl_type,
2227 -- OUT :
2228 -- x_return_status OUT VARCHAR2(1)
2229 -- x_msg_count OUT NUMBER
2230 -- x_msg_data OUT VARCHAR2(2000)
2231 -- x_prtnr_access_id_tbl OUT JTF_NUMBER_TABLE
2232 --
2233 -- Version :
2234 -- Initial version 1.0
2235 --
2236 -- Notes: API for creating a Channel Team for a Partner Organization.
2237 --
2238 --
2239 -- End of Comments
2240
2241 PROCEDURE Create_Terr_Channel_Team (
2242 p_api_version_number IN NUMBER ,
2243 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE ,
2244 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
2245 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL ,
2246 p_partner_id IN NUMBER ,
2247 p_vad_partner_id IN NUMBER ,
2248 p_mode IN VARCHAR2 ,
2249 p_login_user IN NUMBER ,
2250 p_partner_qualifiers_tbl IN partner_qualifiers_tbl_type,
2251 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type,
2252 x_return_status OUT NOCOPY VARCHAR2,
2253 x_msg_count OUT NOCOPY NUMBER,
2254 x_msg_data OUT NOCOPY VARCHAR2
2255 ) IS
2256
2257 l_api_name CONSTANT VARCHAR2(30) := 'Create_Terr_Channel_Team';
2258 l_api_version_number CONSTANT NUMBER := 1.0;
2259 l_return_status VARCHAR2(1);
2260 l_msg_count NUMBER;
2261 l_msg_data VARCHAR(2000);
2262 l_changed_partner_rec PV_BATCH_CHG_PRTNR_PVT.batch_chg_prtnrs_rec_type ;
2263
2264 -- Local variable declaration for all the Partner Qualifiers.
2265 l_party_site_id NUMBER;
2266 l_party_id NUMBER;
2267 l_partner_party_id NUMBER;
2268 l_city VARCHAR2(60);
2269 l_country VARCHAR2(60);
2270 l_county VARCHAR2(60);
2271 l_state VARCHAR2(60);
2272 l_province VARCHAR2(60);
2273 l_postal_code VARCHAR2(60);
2274 l_phone_area_code VARCHAR2(10);
2275 l_employees_total NUMBER;
2276 l_party_name VARCHAR2(360);
2277 l_category_code VARCHAR2(30);
2278 l_curr_fy_potential_revenue NUMBER;
2279 l_partner_types PV_ENTY_ATTR_VALUE_PUB.attr_value_tbl_type;
2280 l_prtnr_access_id_tbl JTF_NUMBER_TABLE;
2281 l_vad_prtnr_access_id_tbl prtnr_aces_tbl_type;
2282 l_partner_id NUMBER;
2283 l_partner_types_cnt NUMBER := 0;
2284 i NUMBER := 0;
2285 l_partner_qualifier_rec partner_qualifiers_rec_type ;
2286 l_winners_rec JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type;
2287 l_ind_winners_rec JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type;
2288 l_resource_cnt NUMBER := 0;
2289 l_cm_added VARCHAR2(1) := 'N' ;
2290 l_partner_level VARCHAR2(30);
2291 l_resource_rec PV_TERR_ASSIGN_PUB.ResourceRec;
2292 l_partner_access_id_tbl prtnr_aces_tbl_type;
2293 l_partner_qualifiers_tbl partner_qualifiers_tbl_type;
2294
2295 -- Cursor l_party_id_csr to get the party_id and partner_level for a given partner_id.
2296 CURSOR l_party_id_csr (cv_partner_id NUMBER) IS
2297 SELECT partner_party_id, pacv.attr_code
2298 FROM pv_partner_profiles ppp,
2299 PV_ATTRIBUTE_CODES_VL pacv
2300 WHERE ppp.partner_id = cv_partner_id
2301 AND ppp.status = 'A'
2302 AND ppp.partner_level = pacv.ATTR_CODE_ID(+);
2303
2304 -- Cursor l_partner_types_csr, which takes partner_id as an input paramter, and gives
2305 -- the Partners types.
2306 CURSOR l_partner_type_csr (cv_partner_id NUMBER) IS
2307 SELECT attr_value
2308 FROM pv_enty_attr_values
2309 WHERE attribute_id = 3
2310 AND entity= 'PARTNER'
2311 AND entity_id = cv_partner_id
2312 AND latest_flag = 'Y';
2313
2314 -- Cursor l_chk_territory_exist_csr to check whether given partner_access_id and terr_id exists in
2315 -- PV_TAP_ACCESS_TERRS table or not.
2316 CURSOR l_chk_territory_exist_csr (cv_partner_access_id IN NUMBER, cv_terr_id IN NUMBER) IS
2317 SELECT 'Y'
2318 FROM PV_TAP_ACCESS_TERRS
2319 WHERE partner_access_id = cv_partner_access_id
2320 AND terr_id = cv_terr_id;
2321
2322 BEGIN
2323
2324 -- Standard call to check for call compatibility.
2325 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2326 p_api_version_number,
2327 l_api_name,
2328 G_PKG_NAME)
2329 THEN
2330 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2331 END IF;
2332
2333 -- Initialize message list if p_init_msg_list is set to TRUE.
2334 IF FND_API.to_Boolean( p_init_msg_list )
2335 THEN
2336 FND_MSG_PUB.initialize;
2337 END IF;
2338
2339 -- Debug Message
2340 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2341 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || ' Start');
2342 END IF;
2343
2344 -- Initialize API return status to SUCCESS
2345 x_return_status := FND_API.G_RET_STS_SUCCESS;
2346
2347 -- =========================================================================
2348 -- Validate Environment
2349 -- =========================================================================
2350
2351 IF p_partner_id IS NULL OR p_partner_id = FND_API.g_miss_num THEN
2352 fnd_message.Set_Name('PV', 'PV_REQUIRED_VALIDATION');
2353 fnd_message.set_token('FIELD', 'PARTNER_ID');
2354 fnd_msg_pub.Add;
2355 RAISE FND_API.G_EXC_ERROR;
2356 ELSE
2357 l_partner_id := p_partner_id;
2358 END IF;
2359
2360
2361 -- Procesing of TAP returned resources with 'CHANNEL_MANAGER' or 'CHANNEL_REP' role.
2362 -- Debug Message
2363
2364 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2365 PVX_Utility_PVT.debug_message('START : Procesing of TAP returned resources with CHANNEL_MANAGER or CHANNEL_REP role.');
2366 END IF;
2367
2368 -- Get the Partner Party Id for the given Partner_Id
2369 OPEN l_party_id_csr(l_partner_id);
2370 FETCH l_party_id_csr INTO l_partner_party_id, l_partner_level;
2371 IF l_party_id_csr%NOTFOUND THEN
2372 CLOSE l_party_id_csr;
2373 -- Raise an error saying partner is not active
2374 fnd_message.Set_Name('PV', 'PV_PARTNER_NOT_ACTIVE');
2375 fnd_msg_pub.Add;
2376 RAISE FND_API.G_EXC_ERROR;
2377 ELSE
2378 CLOSE l_party_id_csr;
2379 END IF;
2380
2381 -- Get the Partner Types details from l_partner_type_csr CURSOR.
2382 l_partner_types_cnt := 0;
2383 FOR prtnr_type_rec IN l_partner_type_csr(l_partner_id)
2384 LOOP
2385 l_partner_types_cnt := l_partner_types_cnt + 1;
2386 l_partner_types(l_partner_types_cnt).attr_value := prtnr_type_rec.attr_value ;
2387 END LOOP;
2388
2389
2390
2391 l_partner_qualifiers_tbl := p_partner_qualifiers_tbl;
2392
2393 IF ( l_partner_qualifiers_tbl.count >= 0) THEN
2394 FOR i IN 1..l_partner_qualifiers_tbl.last
2395 LOOP
2396 l_party_site_id := l_partner_qualifiers_tbl(i).party_site_id;
2397 l_city := l_partner_qualifiers_tbl(i).city ;
2398 l_country := l_partner_qualifiers_tbl(i).country;
2399 l_county := l_partner_qualifiers_tbl(i).county;
2400 l_state := l_partner_qualifiers_tbl(i).state;
2401 l_province := l_partner_qualifiers_tbl(i).province;
2402 l_postal_code := l_partner_qualifiers_tbl(i).postal_code;
2403 l_phone_area_code := l_partner_qualifiers_tbl(i).area_code;
2404 l_employees_total := l_partner_qualifiers_tbl(i).number_of_employee;
2405 l_party_name := l_partner_qualifiers_tbl(i).partner_name;
2406 l_category_code := l_partner_qualifiers_tbl(i).customer_category_code;
2407 l_curr_fy_potential_revenue := l_partner_qualifiers_tbl(i).annual_revenue;
2408
2409 -- Process with each partner type, one by one record.
2410 FOR j IN 1..l_partner_types_cnt
2411 LOOP
2412 -- Make a place to store the Partner qualifiers in the l_partner_qualifier_tbl.
2413 --l_partner_qualifier_tbl.extend;
2414 --l_partner_qualifier_rec := g_miss_partner_qualifiers_rec;
2415
2416 -- Initilize the Partner Qualifers table with valid values.
2417 l_partner_qualifier_rec.partner_name := l_party_name;
2418 l_partner_qualifier_rec.party_id := l_partner_party_id;
2419 l_partner_qualifier_rec.area_code := l_phone_area_code;
2420 l_partner_qualifier_rec.city := l_city ;
2421 l_partner_qualifier_rec.country := l_country ;
2422 l_partner_qualifier_rec.county := l_county ;
2423 l_partner_qualifier_rec.postal_code := l_postal_code;
2424 l_partner_qualifier_rec.province := l_province ;
2425 l_partner_qualifier_rec.state := l_state;
2426 l_partner_qualifier_rec.annual_Revenue := l_curr_fy_potential_revenue;
2427 l_partner_qualifier_rec.number_of_employee := l_employees_total;
2428 l_partner_qualifier_rec.customer_category_code := l_category_code ;
2429 l_partner_qualifier_rec.partner_type := l_partner_types(j).attr_value;
2430 l_partner_qualifier_rec.partner_level := l_partner_level;
2431
2432 -- Debug Message
2433 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2434 PVX_Utility_PVT.debug_message('START : -- Call the TAP_Get_Channel_Team API ');
2435 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner_name => '|| l_partner_qualifier_rec.party_site_id);
2436 PVX_Utility_PVT.debug_message('('||to_char(i)||') city => '|| l_partner_qualifier_rec.city);
2437 PVX_Utility_PVT.debug_message('('||to_char(i)||') country => '|| l_partner_qualifier_rec.country);
2438 PVX_Utility_PVT.debug_message('('||to_char(i)||') county => '|| l_partner_qualifier_rec.county);
2439 PVX_Utility_PVT.debug_message('('||to_char(i)||') state => '|| l_partner_qualifier_rec.state);
2440 PVX_Utility_PVT.debug_message('('||to_char(i)||') province => '|| l_partner_qualifier_rec.province);
2441 PVX_Utility_PVT.debug_message('('||to_char(i)||') postal_code => '|| l_partner_qualifier_rec.postal_code);
2442 PVX_Utility_PVT.debug_message('('||to_char(i)||') area_code => '|| l_partner_qualifier_rec.area_code);
2443 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner_name => '|| l_partner_qualifier_rec.partner_name);
2444 PVX_Utility_PVT.debug_message('('||to_char(i)||') annual_revenue => '|| l_partner_qualifier_rec.annual_revenue);
2445 PVX_Utility_PVT.debug_message('('||to_char(i)||') number_of_employee => '|| l_partner_qualifier_rec.number_of_employee);
2446 PVX_Utility_PVT.debug_message('('||to_char(i)||') customer_category_code => '|| l_partner_qualifier_rec.customer_category_code);
2447 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner type => '|| l_partner_qualifier_rec.partner_type);
2448 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner level => '|| l_partner_qualifier_rec.partner_level);
2449 END IF;
2450
2451 -- Call the TAP_Get_Channel_Team API
2452 TAP_Get_Channel_Team(
2453 p_prtnr_qualifier_rec => l_partner_qualifier_rec,
2454 x_return_Status => l_return_status,
2455 x_msg_Count => l_msg_count,
2456 x_msg_Data => l_msg_data,
2457 x_winners_rec => l_winners_rec ) ;
2458
2459 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2460 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2461 RAISE FND_API.G_EXC_ERROR;
2462 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2463 -- FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
2464 -- FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.TAP_Get_Channel_Team');
2465 -- FND_MSG_PUB.Add;
2466 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2467 END IF;
2468 END IF;
2469
2470 -- Debug Message
2471 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2472 PVX_Utility_PVT.debug_message('SUCCESSFULLY END : -- TAP_Get_Channel_Team ');
2473 END IF;
2474
2475
2476 IF ( l_winners_rec.resource_id.count > 0) THEN
2477 -- Call the Process_TAP_Resource procedure to process all the returned resources
2478 -- from TAP_Get_Channel_Team
2479 Process_TAP_Resources(
2480 p_partner_id => l_partner_id,
2481 p_partner_type => l_partner_types(j).attr_value,
2482 p_vad_partner_id => p_vad_partner_id,
2483 p_winners_rec => l_winners_rec,
2484 x_return_status => l_return_status,
2485 x_msg_count => l_msg_count,
2486 x_msg_data => l_msg_data,
2487 x_prtnr_access_id_tbl => l_partner_access_id_tbl);
2488
2489 IF (l_partner_access_id_tbl.count > 0 ) THEN
2490 l_resource_cnt := l_resource_cnt + l_partner_access_id_tbl.count ;
2491 END IF;
2492 END IF;
2493 END LOOP; -- FOR j IN 1..l_partner_types_cnt
2494 END LOOP; -- FOR i IN 1..l_partner_qualifiers_tbl.party_name.last
2495
2496 END IF; --( l_partner_qualifiers_tbl.last > 0)
2497
2498 IF (l_resource_cnt> 0 ) THEN
2499 l_cm_added := 'Y';
2500 ELSE
2501 l_cm_added := 'N';
2502 END IF;
2503
2504 -- End of Procesing of TAP returned resources with 'CHANNEL_MANAGER' or 'CHANNEL_REP' role.
2505
2506 EXCEPTION
2507 WHEN FND_API.g_exc_error THEN
2508 x_return_status := FND_API.g_ret_sts_error;
2509 FND_MSG_PUB.count_and_get (
2510 p_encoded => FND_API.g_false
2511 ,p_count => x_msg_count
2512 ,p_data => x_msg_data
2513 );
2514
2515 -- Debug Message
2516 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2517 hz_utility_v2pub.debug_return_messages (
2518 x_msg_count, x_msg_data, 'ERROR');
2519 hz_utility_v2pub.debug('Create_Terr_Channel_Team (-)');
2520 END IF;
2521
2522 WHEN FND_API.g_exc_unexpected_error THEN
2523
2524 x_return_status := FND_API.g_ret_sts_unexp_error ;
2525 FND_MSG_PUB.count_and_get (
2526 p_encoded => FND_API.g_false
2527 ,p_count => x_msg_count
2528 ,p_data => x_msg_data
2529 );
2530 -- Debug Message
2531 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2532 hz_utility_v2pub.debug_return_messages (
2533 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
2534 hz_utility_v2pub.debug('Create_Terr_Channel_Team (-)');
2535 END IF;
2536
2537 WHEN OTHERS THEN
2538
2539 x_return_status := FND_API.g_ret_sts_unexp_error ;
2540
2541 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
2542 THEN
2543 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
2544 END IF;
2545
2546 FND_MSG_PUB.count_and_get(
2547 p_encoded => FND_API.g_false
2548 ,p_count => x_msg_count
2549 ,p_data => x_msg_data
2550 );
2551
2552 -- Debug Message
2553 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2554 hz_utility_v2pub.debug_return_messages (
2555 x_msg_count, x_msg_data, 'SQL ERROR');
2556 hz_utility_v2pub.debug('Create_Terr_Channel_Team (-)');
2557 END IF;
2558
2559
2560 end Create_Terr_Channel_Team;
2561
2562
2563 -- Start of Comments
2564 --
2565 -- API name : Create_User_Channel_Team
2566 -- Type : Public
2567 -- Function : The purpose of this procedure is to create a Channel
2568 -- team based on the logged in User for a partner
2569 --
2570 -- Pre-reqs : User and his associated team should have a "Channel Manager" or
2571 -- "Channel Rep" role at group level.
2572 --
2573 -- Paramaeters :
2574 -- IN :
2575 -- p_api_version_number IN NUMBER,
2576 -- p_init_msg_list IN VARCHAR2
2577 -- p_commit IN VARCHAR2
2578 -- p_validation_level IN NUMBER
2579 --
2580 -- p_partner_id IN NUMBER
2581 -- p_vad_partner_id IN NUMBER
2582 -- p_mode IN VARCHAR2
2583 -- p_login_user IN NUMBER
2584 -- OUT :
2585 -- x_return_status OUT VARCHAR2(1)
2586 -- x_msg_count OUT NUMBER
2587 -- x_msg_data OUT VARCHAR2(2000)
2588 -- x_prtnr_access_id_tbl INOUT JTF_NUMBER_TABLE
2589 --
2590 -- Version :
2591 -- Initial version 1.0
2592 --
2593 -- Notes: API for creating a Channel Team for a Partner Organization.
2594 --
2595 --
2596 -- End of Comments
2597
2598 PROCEDURE Create_User_Channel_Team (
2599 p_api_version_number IN NUMBER ,
2600 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE ,
2601 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
2602 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL ,
2603 p_partner_id IN NUMBER ,
2604 p_vad_partner_id IN NUMBER ,
2605 p_mode IN VARCHAR2 ,
2606 p_login_user IN NUMBER ,
2607 x_return_status OUT NOCOPY VARCHAR2,
2608 x_msg_count OUT NOCOPY NUMBER,
2609 x_msg_data OUT NOCOPY VARCHAR2,
2610 x_prtnr_access_id_tbl IN OUT NOCOPY prtnr_aces_tbl_type
2611 ) IS
2612
2613 l_api_name CONSTANT VARCHAR2(30) := 'Create_User_Channel_Team';
2614 l_api_version_number CONSTANT NUMBER := 1.0;
2615 l_return_status VARCHAR2(1);
2616 l_msg_count NUMBER;
2617 l_msg_data VARCHAR(2000);
2618
2619 -- Local variable declaration
2620
2621 l_vad_prtnr_access_id_tbl prtnr_aces_tbl_type;
2622 l_partner_id NUMBER;
2623 i NUMBER := 0;
2624 l_partner_access_id NUMBER := 0;
2625 l_partner_access_rec PV_Partner_Accesses_PVT.partner_access_rec_type;
2626 l_resource_cnt NUMBER := 0;
2627 l_cm_added VARCHAR2(1) := 'N' ;
2628 l_res_created_flg VARCHAR2(1) := 'N' ;
2629 l_login_user_id NUMBER;
2630 l_def_cm number;
2631
2632
2633 -- Get the value of Profile PV_DEFAULT_CM.
2634 CURSOR l_get_default_cm_csr(cv_profile_name IN VARCHAR2) IS
2635 SELECT nvl(fnd_profile.value(cv_profile_name),0) from dual;
2636
2637 BEGIN
2638
2639 -- Standard call to check for call compatibility.
2640 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2641 p_api_version_number,
2642 l_api_name,
2643 G_PKG_NAME)
2644 THEN
2645 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2646 END IF;
2647
2648 -- Initialize message list if p_init_msg_list is set to TRUE.
2649 IF FND_API.to_Boolean( p_init_msg_list )
2650 THEN
2651 FND_MSG_PUB.initialize;
2652 END IF;
2653
2654 -- Debug Message
2655 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2656 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || ' Start');
2657 END IF;
2658
2659 -- Initialize API return status to SUCCESS
2660 x_return_status := FND_API.G_RET_STS_SUCCESS;
2661
2662 -- =========================================================================
2663 -- Validate Environment
2664 -- =========================================================================
2665
2666 IF p_partner_id IS NULL OR p_partner_id = FND_API.g_miss_num THEN
2667 fnd_message.Set_Name('PV', 'PV_REQUIRED_VALIDATION');
2668 fnd_message.set_token('FIELD', 'PARTNER_ID');
2669 fnd_msg_pub.Add;
2670 RAISE FND_API.G_EXC_ERROR;
2671 ELSE
2672 l_partner_id := p_partner_id;
2673 END IF;
2674
2675 -- STEP (i) :
2676 -- Logic for inserting the logged in user's(Vendor employee) resource_id in the
2677 -- PV_PARTNER_ACCESSES table, IF the user is playing a role of
2678 -- 'CHANNEL_MANAGER' or 'CHANNEL_REP'
2679
2680 IF (p_mode <> 'UPDATE') THEN
2681 IF (p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num) THEN
2682 IF (p_login_user IS NULL OR p_login_user = FND_API.g_miss_num) THEN
2683 l_login_user_id := FND_GLOBAL.user_id;
2684 ELSE
2685 l_login_user_id := p_login_user;
2686 END IF;
2687
2688 Cr_Login_User_Access_Rec(
2689 p_partner_id => l_partner_id,
2690 p_login_user_id => l_login_user_id,
2691 x_return_status => l_return_status,
2692 x_msg_count => l_msg_count,
2693 x_msg_data => l_msg_data,
2694 x_cm_added => l_cm_added,
2695 x_res_created_flg => l_res_created_flg,
2696 x_partner_access_id => l_partner_access_id);
2697
2698 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2699 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2700 RAISE FND_API.G_EXC_ERROR;
2701 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2702 -- FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
2703 -- FND_MESSAGE.SET_TOKEN('API_NAME', 'Cr_Login_User_Access_Rec');
2704 -- FND_MSG_PUB.Add;
2705 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2706 END IF;
2707 END IF; -- l_return_status <> FND_API.G_RET_STS_SUCCESS
2708
2709 IF (l_cm_added = 'Y' ) THEN
2710
2711 l_resource_cnt := x_prtnr_access_id_tbl.count();
2712 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id:= l_partner_access_id ;
2713 -- l_resource_cnt := l_resource_cnt + 1;
2714 END IF;
2715 END IF; -- p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num
2716 END IF; -- p_mode <> 'UPDATE'
2717
2718
2719 -- Step2: If p_vad_partner_id is not null, then add all the CMs( Employees Of VAD Organinzation)
2720 -- to the p_partner_id's channel team. Ensure that you check for duplicates in access table. No territory
2721 -- records are added. set tap created flag to 'N' and keep flag = 'Y'
2722 IF ( NOT(p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num) ) THEN
2723
2724 -- Debug Message
2725 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2726 PVX_Utility_PVT.debug_message('START : Step3: If p_vad_partner_id is not null, then all the CMs( Employees of VAD Organization.');
2727 END IF;
2728
2729 -- Get the VAD Channel Team -
2730 Create_VAD_Channel_Team(
2731 p_api_version_number => 1.0 ,
2732 p_init_msg_list => FND_API.G_FALSE ,
2733 p_commit => FND_API.G_FALSE ,
2734 p_validation_level => FND_API.G_VALID_LEVEL_FULL ,
2735 x_return_status => l_return_status,
2736 x_msg_count => l_msg_count,
2737 x_msg_data => l_msg_data,
2738 p_partner_id => l_partner_id,
2739 p_vad_partner_id => p_vad_partner_id,
2740 x_prtnr_access_id_tbl => l_vad_prtnr_access_id_tbl );
2741
2742 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2743 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2744 RAISE FND_API.G_EXC_ERROR;
2745 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2746 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
2747 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.Create_VAD_Channel_Team');
2748 FND_MSG_PUB.Add;
2749 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2750 END IF;
2751 END IF;
2752
2753 --- ===================================================================
2754 --- Store the returned resources from Create_VAD_Channel_Team procedure
2755 --- to the main output variable x_prtnr_access_id_tbl.
2756 --- ===================================================================
2757 IF (l_vad_prtnr_access_id_tbl.count > 0 ) THEN
2758 l_cm_added := 'Y';
2759 FOR k_index IN 1..l_vad_prtnr_access_id_tbl.last
2760 LOOP
2761 l_resource_cnt := l_resource_cnt + 1;
2762 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id := l_vad_prtnr_access_id_tbl(k_index).partner_access_id;
2763 END LOOP;
2764 END IF;
2765
2766 -- Debug Message
2767 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2768 PVX_Utility_PVT.debug_message('SUCCESSFULLY END : Step3.');
2769 END IF;
2770
2771 END IF; -- l_vad_partner_id IS NOT NULL OR l_vad_partner_id <> FND_API.g_miss_num
2772
2773 -- Assign Default Channel Manager as a Channel Team member, if both the above (Logged_in_User and
2774 -- TAP procedure call failed to add any channel team member.
2775 -- Debug Message
2776
2777 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2778 PVX_Utility_PVT.debug_message('START : Step4: Assign Default Channel Manager as a Channel Team member : l_cm_added => '||l_cm_added );
2779 END IF;
2780
2781 if x_prtnr_access_id_tbl.count > 0 then
2782 l_cm_added := 'Y';
2783 end if;
2784
2785 IF ( l_cm_added <> 'Y' ) THEN
2786
2787 OPEN l_get_default_cm_csr('PV_DEFAULT_CM');
2788 FETCH l_get_default_cm_csr INTO l_def_cm;
2789 CLOSE l_get_default_cm_csr;
2790
2791 IF (l_def_cm = 0 ) THEN
2792 FND_MESSAGE.SET_NAME('PV', 'PV_NO_DEFAULT_CMM');
2793 FND_MSG_PUB.Add;
2794 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2795 END IF;
2796 -- Set the p_partner_access_rec record
2797 l_partner_access_rec.partner_id := l_partner_id;
2798 l_partner_access_rec.resource_id := fnd_profile.value('PV_DEFAULT_CM');
2799 l_partner_access_rec.keep_flag := 'Y';
2800 l_partner_access_rec.created_by_tap_flag := 'Y';
2801 l_partner_access_rec.access_type := 'F';
2802
2803 --- ==================================================================
2804 --- Before adding the default CM, check to see if there are any CMs
2805 --- added manually for a given p_partner_id.If yes, skip adding the
2806 --- default CM.
2807 --- ==================================================================
2808 IF (check_channel_team_exist(
2809 p_partner_id => l_partner_id) = 'N') THEN
2810
2811
2812 PV_Partner_Accesses_PVT.Create_Partner_Accesses(
2813 p_api_version_number => 1.0,
2814 p_init_msg_list => FND_API.G_FALSE,
2815 p_commit => FND_API.G_FALSE,
2816 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
2817 x_return_status => l_return_status,
2818 x_msg_count => l_msg_count,
2819 x_msg_data => l_msg_data,
2820 p_partner_access_rec => l_partner_access_rec,
2821 x_partner_access_id => l_partner_access_id );
2822
2823 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2824 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2825 RAISE FND_API.G_EXC_ERROR;
2826 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2827 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
2828 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_Partner_Accesses_PVT.Create_Partner_Accesses');
2829 FND_MSG_PUB.Add;
2830 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2831 END IF;
2832 END IF; -- l_return_status <> FND_API.G_RET_STS_SUCCESS
2833
2834 -- Store the PARTNER_ACCESS_ID in the Out variable
2835 l_resource_cnt := l_resource_cnt + 1;
2836 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id := l_partner_access_id;
2837
2838 END IF ; -- check_resource_exist
2839 END IF; -- l_cm_added <> 'Y'
2840
2841 -- Standard check for p_commit
2842 IF FND_API.to_Boolean( p_commit )
2843 THEN
2844 COMMIT WORK;
2845 END IF;
2846
2847 -- Debug Message
2848 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2849 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || 'end');
2850 END IF;
2851
2852 -- Standard call to get message count and if count is 1, get message info.
2853 FND_MSG_PUB.Count_And_Get
2854 (p_count => x_msg_count,
2855 p_data => x_msg_data
2856 );
2857
2858 EXCEPTION
2859 WHEN FND_API.g_exc_error THEN
2860 x_return_status := FND_API.g_ret_sts_error;
2861 FND_MSG_PUB.count_and_get (
2862 p_encoded => FND_API.g_false
2863 ,p_count => x_msg_count
2864 ,p_data => x_msg_data
2865 );
2866
2867 -- Debug Message
2868 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2869 hz_utility_v2pub.debug_return_messages (
2870 x_msg_count, x_msg_data, 'ERROR');
2871 hz_utility_v2pub.debug('Create_User_Channel_Team (-)');
2872 END IF;
2873
2874 WHEN FND_API.g_exc_unexpected_error THEN
2875
2876 x_return_status := FND_API.g_ret_sts_unexp_error ;
2877 FND_MSG_PUB.count_and_get (
2878 p_encoded => FND_API.g_false
2879 ,p_count => x_msg_count
2880 ,p_data => x_msg_data
2881 );
2882 -- Debug Message
2883 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2884 hz_utility_v2pub.debug_return_messages (
2885 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
2886 hz_utility_v2pub.debug('Create_User_Channel_Team (-)');
2887 END IF;
2888
2889 WHEN OTHERS THEN
2890
2891 x_return_status := FND_API.g_ret_sts_unexp_error ;
2892
2893 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
2894 THEN
2895 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
2896 END IF;
2897
2898 FND_MSG_PUB.count_and_get(
2899 p_encoded => FND_API.g_false
2900 ,p_count => x_msg_count
2901 ,p_data => x_msg_data
2902 );
2903
2904 -- Debug Message
2905 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
2906 hz_utility_v2pub.debug_return_messages (
2907 x_msg_count, x_msg_data, 'SQL ERROR');
2908 hz_utility_v2pub.debug('Create_User_Channel_Team (-)');
2909 END IF;
2910
2911
2912 end Create_User_Channel_Team;
2913
2914 -- Start of Comments
2915 --
2916 -- NAME
2917 -- PV_TERR_ASSIGN_PUB
2918 --
2919 -- PURPOSE
2920 -- This package is a public API to create the channel team based on the user as well
2921 -- as the pre defined qualifiers for the partner. This API inturn calls apis to create
2922 -- the channel team based on territory as well as the logged in user.
2923 --
2924 -- Procedures:
2925 -- Do_Create_Channel_Team
2926 --
2927 -- NOTES
2928 -- This package is for private use only
2929 --
2930 -- Pre-reqs : Existing resource should have a "Channel Manager" or
2931 -- "Channel Rep" role at group level.
2932 --
2933 -- Paramaeters :
2934 -- IN :
2935 -- p_api_version_number IN NUMBER,
2936 -- p_init_msg_list IN VARCHAR2
2937 -- p_commit IN VARCHAR2
2938 -- p_validation_level IN NUMBER
2939 -- p_partner_id IN NUMBER
2940 -- p_vad_partner_id IN NUMBER
2941 -- p_mode IN VARCHAR2
2942 -- p_login_user IN NUMBER ,
2943 -- p_partner_qualifiers_tbl IN partner_qualifiers_tbl_type,
2944 --
2945 --
2946 -- OUT :
2947 -- x_return_status OUT VARCHAR2(1)
2948 -- x_msg_count OUT NUMBER
2949 -- x_msg_data OUT VARCHAR2(2000)
2950 -- x_prtnr_access_id_tbl OUT PV_TERR_ASSIGN_PUB.PartnerAccessRec
2951 --
2952 -- Version :
2953 -- Initial version 1.0
2954 --
2955 -- HISTORY
2956 -- 07/27/05 pinagara Created
2957 --
2958 -- End of Comments
2959
2960
2961
2962 PROCEDURE Do_Create_Channel_Team
2963 ( p_api_version_number IN NUMBER ,
2964 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE ,
2965 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
2966 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL ,
2967 p_partner_id IN NUMBER ,
2968 p_vad_partner_id IN NUMBER ,
2969 p_mode IN VARCHAR2 ,
2970 p_login_user IN NUMBER ,
2971 p_partner_qualifiers_tbl IN partner_qualifiers_tbl_type,
2972 x_return_status OUT NOCOPY VARCHAR2,
2973 x_msg_count OUT NOCOPY NUMBER,
2974 x_msg_data OUT NOCOPY VARCHAR2,
2975 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type
2976 )IS
2977
2978 l_api_name CONSTANT VARCHAR2(30) := 'Create_Channel_Team';
2979 l_api_version_number CONSTANT NUMBER := 1.0;
2980 l_return_status VARCHAR2(1);
2981 l_msg_count NUMBER;
2982 l_msg_data VARCHAR(2000);
2983 l_partner_id NUMBER;
2984 l_prtnr_access_id_tbl JTF_NUMBER_TABLE;
2985 l_tap_assign_online VARCHAR2(1);
2986 l_changed_partner_rec PV_BATCH_CHG_PRTNR_PVT.Batch_Chg_Prtnrs_Rec_Type;
2987 l_partner_access_id_tbl prtnr_aces_tbl_type ;
2988 l_partner_exist VARCHAR2(1):= 'N';
2989 l_login_user NUMBER := FND_GLOBAL.user_id;
2990 l_mode VARCHAR2(10);
2991 l_processed_flag VARCHAR2(1) := 'P';
2992 l_object_version_number NUMBER ;
2993
2994 -- Cursor l_chk_partner_exist_csr to check whether given partner_id exists in
2995 -- PV_TAP_BATCH_CHG_PARTNERS table or not.
2996 CURSOR l_chk_partner_exist_csr (cv_partner_id IN NUMBER) IS
2997 SELECT processed_flag, object_version_number
2998 FROM PV_TAP_BATCH_CHG_PARTNERS
2999 WHERE partner_id = cv_partner_id;
3000
3001 -- Get the value of Profile PV_TAP_ASSIGN_ONLINE.
3002 CURSOR l_get_tap_prfl_value_csr(cv_profile_name IN VARCHAR2) IS
3003 SELECT fnd_profile.value(cv_profile_name) from dual;
3004
3005 BEGIN
3006
3007 -- Standard Start of API savepoint
3008 SAVEPOINT create_channel_team_pub;
3009
3010 -- Standard call to check for call compatibility.
3011 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
3012 p_api_version_number,
3013 l_api_name,
3014 G_PKG_NAME)
3015 THEN
3016 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3017 END IF;
3018
3019 -- Initialize message list if p_init_msg_list is set to TRUE.
3020 IF FND_API.to_Boolean( p_init_msg_list )
3021 THEN
3022 FND_MSG_PUB.initialize;
3023 END IF;
3024
3025 -- Debug Message
3026 IF (FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW)) THEN
3027 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || ' Start');
3028 END IF;
3029
3030 -- Initialize API return status to SUCCESS
3031 x_return_status := FND_API.G_RET_STS_SUCCESS;
3032
3033 -- =========================================================================
3034 -- Validate Environment
3035 -- =========================================================================
3036
3037 IF p_partner_id IS NULL OR p_partner_id = FND_API.g_miss_num
3038 THEN
3039 fnd_message.Set_Name('PV', 'PV_REQUIRED_VALIDATION');
3040 fnd_message.set_token('FIELD', 'PARTNER_ID');
3041 fnd_msg_pub.Add;
3042 RAISE FND_API.G_EXC_ERROR;
3043 ELSE
3044 l_partner_id := p_partner_id;
3045 END IF;
3046
3047 IF p_mode IS NULL OR p_mode = FND_API.g_miss_char
3048 THEN
3049 l_mode := 'CREATE';
3050 ELSE
3051 l_mode := p_mode ;
3052 END IF;
3053
3054 -- Local variable initialization - Get the Profile value for PV_TAP_ASSIGN_ONLINE profile.
3055 OPEN l_get_tap_prfl_value_csr('PV_TAP_ASSIGN_ONLINE');
3056 FETCH l_get_tap_prfl_value_csr INTO l_tap_assign_online;
3057 CLOSE l_get_tap_prfl_value_csr;
3058
3059 IF ( l_tap_assign_online = 'Y' ) THEN
3060
3061 IF ( l_mode = 'UPDATE' ) THEN
3062
3063 -- Call the Delete_Channel_Team for a given Partner_id
3064 Delete_Channel_Team(
3065 p_partner_id => l_partner_id ,
3066 x_return_status => l_return_status,
3067 x_msg_count => l_msg_count,
3068 x_msg_data => l_msg_data );
3069
3070
3071 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3072 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3073 RAISE FND_API.G_EXC_ERROR;
3074 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3075 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3076 END IF;
3077 END IF;
3078
3079 END IF; /*** p_mode = 'UPDATE' ***/
3080
3081 Create_Terr_Channel_Team(
3082 p_api_version_number => 1.0,
3083 p_init_msg_list => FND_API.G_FALSE,
3084 p_commit => FND_API.G_FALSE,
3085 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
3086 x_return_status => l_return_status,
3087 x_msg_count => l_msg_count,
3088 x_msg_data => l_msg_data,
3089 p_partner_id => l_partner_id,
3090 p_vad_partner_id => p_vad_partner_id,
3091 p_mode => p_mode,
3092 p_partner_qualifiers_tbl => p_partner_qualifiers_tbl,
3093 p_login_user => p_login_user,
3094
3095 x_prtnr_access_id_tbl=> l_partner_access_id_tbl );
3096
3097
3098 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3099 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3100 RAISE FND_API.G_EXC_ERROR;
3101 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3102 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3103 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.Create_Terr_Channel_Team');
3104 FND_MSG_PUB.Add;
3105 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3106 END IF;
3107 END IF;
3108
3109 -- Store the output variables
3110 x_prtnr_access_id_tbl := l_partner_access_id_tbl;
3111
3112 ELSIF ( l_tap_assign_online = 'N' ) THEN
3113
3114 -- Initialize the l_changed_partner_rec.partner_id
3115 l_changed_partner_rec.partner_id := l_partner_id;
3116 l_changed_partner_rec.vad_partner_id := p_vad_partner_id;
3117 l_changed_partner_rec.processed_flag := 'P';
3118
3119 -- Check if the supplied partner_id already exist in PV_TAP_BATCH_CHG_PARTNERS table
3120 -- then do not insert the record for that partner_id.
3121 OPEN l_chk_partner_exist_csr(l_partner_id);
3122 FETCH l_chk_partner_exist_csr INTO l_processed_flag, l_object_version_number;
3123
3124 IF (l_chk_partner_exist_csr%NOTFOUND ) THEN
3125
3126 CLOSE l_chk_partner_exist_csr;
3127 -- Call the Create_Batch_Chg_Partners API from PV_BATCH_CHG_PRTNR_PVT
3128 -- to create a record in PV_TAP_BATCH_CHG_PARTNERS table.
3129
3130 PV_BATCH_CHG_PRTNR_PVT.Create_Batch_Chg_Partners(
3131 p_api_version_number => 1.0
3132 ,p_init_msg_list => FND_API.G_FALSE
3133 ,p_commit => FND_API.G_FALSE
3134 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
3135 ,x_return_status => l_return_status
3136 ,x_msg_count => l_msg_count
3137 ,x_msg_data => l_msg_data
3138 ,p_batch_chg_prtnrs_rec => l_changed_partner_rec
3139 ,x_partner_id => l_partner_id
3140 );
3141
3142 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3143 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3144 RAISE FND_API.G_EXC_ERROR;
3145 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3146 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3147 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_BATCH_CHG_PRTNR_PVT.Create_Batch_Chg_Partners');
3148 FND_MSG_PUB.Add;
3149 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3150 END IF;
3151 END IF;
3152
3153 ELSE
3154
3155 CLOSE l_chk_partner_exist_csr;
3156
3157 IF (l_processed_flag <> 'P') THEN
3158
3159 l_changed_partner_rec.object_version_number := l_object_version_number;
3160 PV_BATCH_CHG_PRTNR_PVT.Update_Batch_Chg_Partners(
3161 p_api_version_number => 1.0
3162 ,p_init_msg_list => FND_API.G_FALSE
3163 ,p_commit => FND_API.G_FALSE
3164 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
3165 ,x_return_status => l_return_status
3166 ,x_msg_count => l_msg_count
3167 ,x_msg_data => l_msg_data
3168 ,p_batch_chg_prtnrs_rec => l_changed_partner_rec);
3169
3170 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3171
3172 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3173 RAISE FND_API.G_EXC_ERROR;
3174 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3175 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3176 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_BATCH_CHG_PRTNR_PVT.Update_Batch_Chg_Partners');
3177 FND_MSG_PUB.Add;
3178 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3179 END IF;
3180 END IF;
3181
3182 END IF; --l_processed_flag <> 'P'
3183 END IF; -- l_chk_partner_exist_csr%NOTFOUND
3184 END IF; -- l_tap_assign_online
3185
3186
3187 Create_User_Channel_Team( p_api_version_number => 1.0,
3188 p_init_msg_list => FND_API.G_FALSE,
3189 p_commit => FND_API.G_FALSE,
3190 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
3191 p_partner_id => l_partner_id,
3192 p_vad_partner_id => p_vad_partner_id,
3193 p_mode => p_mode,
3194 p_login_user => p_login_user,
3195 x_return_status => l_return_status,
3196 x_msg_count => l_msg_count,
3197 x_msg_data => l_msg_data,
3198 x_prtnr_access_id_tbl=> l_partner_access_id_tbl );
3199
3200 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3201
3202 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3203 RAISE FND_API.G_EXC_ERROR;
3204 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3205 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3206 FND_MESSAGE.SET_TOKEN('API_NAME', 'Create_User_Channel_Team');
3207 FND_MSG_PUB.Add;
3208 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3209 END IF;
3210
3211 END IF;
3212
3213
3214 -- Standard check for p_commit
3215 IF FND_API.to_Boolean( p_commit )
3216 THEN
3217 COMMIT WORK;
3218 END IF;
3219
3220 -- Debug Message
3221 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3222 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || ' End');
3223 END IF;
3224
3225 -- Standard call to get message count and if count is 1, get message info.
3226 FND_MSG_PUB.Count_And_Get
3227 (p_count => x_msg_count,
3228 p_data => x_msg_data
3229 );
3230
3231 EXCEPTION
3232 WHEN FND_API.g_exc_error THEN
3233 ROLLBACK TO create_channel_team_pub;
3234 x_return_status := FND_API.g_ret_sts_error;
3235 FND_MSG_PUB.count_and_get (
3236 p_encoded => FND_API.g_false
3237 ,p_count => x_msg_count
3238 ,p_data => x_msg_data
3239 );
3240
3241 -- Debug Message
3242 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3243 hz_utility_v2pub.debug_return_messages (
3244 x_msg_count, x_msg_data, 'ERROR');
3245 hz_utility_v2pub.debug('Create_Channel_Team (-)');
3246 END IF;
3247
3248 WHEN FND_API.g_exc_unexpected_error THEN
3249 ROLLBACK TO create_channel_team_pub;
3250 x_return_status := FND_API.g_ret_sts_unexp_error ;
3251 FND_MSG_PUB.count_and_get (
3252 p_encoded => FND_API.g_false
3253 ,p_count => x_msg_count
3254 ,p_data => x_msg_data
3255 );
3256 -- Debug Message
3257 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3258 hz_utility_v2pub.debug_return_messages (
3259 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
3260 hz_utility_v2pub.debug('Create_Channel_Team (-)');
3261 END IF;
3262
3263 WHEN OTHERS THEN
3264 ROLLBACK TO create_channel_team_pub;
3265 x_return_status := FND_API.g_ret_sts_unexp_error ;
3266
3267 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
3268 THEN
3269 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
3270 END IF;
3271
3272 FND_MSG_PUB.count_and_get(
3273 p_encoded => FND_API.g_false
3274 ,p_count => x_msg_count
3275 ,p_data => x_msg_data
3276 );
3277
3278 -- Debug Message
3279 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3280 hz_utility_v2pub.debug_return_messages (
3281 x_msg_count, x_msg_data, 'SQL ERROR');
3282 hz_utility_v2pub.debug('Create_Channel_Team (-)');
3283 END IF;
3284
3285 END Do_Create_Channel_Team;
3286
3287 -- Start of Comments
3288 --
3289 -- NAME
3290 -- PV_TERR_ASSIGN_PUB
3291 --
3292 -- PURPOSE
3293 -- This package is a public API to create the channel team based on the user as well
3294 -- as the pre defined qualifiers for the partner. This API will call the Do_Create_channel_team
3295 -- which does all the required processing.This is more of an overloaded method for Do_Create_channel_team
3296 --
3297 -- Procedures:
3298 -- Do_Create_Channel_Team
3299 --
3300 -- NOTES
3301 -- This package is for private use only
3302 --
3303 -- Pre-reqs : Existing resource should have a "Channel Manager" or
3304 -- "Channel Rep" role at group level.
3305 --
3306 -- Paramaeters :
3307 -- IN :
3308 -- p_api_version_number IN NUMBER,
3309 -- p_init_msg_list IN VARCHAR2
3310 -- p_commit IN VARCHAR2
3311 -- p_validation_level IN NUMBER
3312 -- p_partner_id IN NUMBER
3313 -- p_vad_partner_id IN NUMBER
3314 -- p_mode IN VARCHAR2
3315 -- p_login_user IN NUMBER ,
3316 --
3317 --
3318 -- OUT :
3319 -- x_return_status OUT VARCHAR2(1)
3320 -- x_msg_count OUT NUMBER
3321 -- x_msg_data OUT VARCHAR2(2000)
3322 -- x_prtnr_access_id_tbl OUT PV_TERR_ASSIGN_PUB.PartnerAccessRec
3323 --
3324 -- Version :
3325 -- Initial version 1.0
3326 --
3327 -- HISTORY
3328 -- 07/27/05 pinagara Created
3329 --
3330 -- End of Comments
3331
3332 PROCEDURE Create_Channel_Team
3333 ( p_api_version_number IN NUMBER ,
3334 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE ,
3335 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
3336 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL ,
3337 p_partner_id IN NUMBER ,
3338 p_vad_partner_id IN NUMBER ,
3339 p_mode IN VARCHAR2 ,
3340 p_login_user IN NUMBER ,
3341 x_return_status OUT NOCOPY VARCHAR2,
3342 x_msg_count OUT NOCOPY NUMBER,
3343 x_msg_data OUT NOCOPY VARCHAR2,
3344 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type
3345 ) IS
3346
3347 l_api_name CONSTANT VARCHAR2(30) := 'Create_Channel_Team';
3348 l_api_version_number CONSTANT NUMBER := 1.0;
3349 l_return_status VARCHAR2(1);
3350 l_msg_count NUMBER;
3351 l_msg_data VARCHAR(2000);
3352 l_partner_id NUMBER := p_partner_id;
3353 l_prtnr_access_id_tbl prtnr_aces_tbl_type;
3354 l_tap_assign_online VARCHAR2(1);
3355 l_changed_partner_rec PV_BATCH_CHG_PRTNR_PVT.Batch_Chg_Prtnrs_Rec_Type;
3356 l_partner_exist VARCHAR2(1):= 'N';
3357 l_login_user NUMBER := FND_GLOBAL.user_id;
3358 l_mode VARCHAR2(10);
3359 l_processed_flag VARCHAR2(1) := 'P';
3360 l_object_version_number NUMBER ;
3361
3362 l_partner_party_id NUMBER;
3363 l_partner_level VARCHAR2(30);
3364 l_partner_qualifiers_tbl partner_qualifiers_tbl_type;
3365
3366
3367
3368 CURSOR l_party_id_csr (cv_partner_id NUMBER) IS
3369 SELECT partner_party_id, pacv.attr_code
3370 FROM pv_partner_profiles ppp,
3371 PV_ATTRIBUTE_CODES_VL pacv
3372 WHERE ppp.partner_id = cv_partner_id
3373 AND ppp.status = 'A'
3374 AND ppp.partner_level = pacv.ATTR_CODE_ID(+);
3375
3376
3377 BEGIN
3378
3379 -- Standard Start of API savepoint
3380 SAVEPOINT create_channel_team_pub;
3381
3382 -- Get the Partner Party Id for the given Partner_Id
3383 OPEN l_party_id_csr(l_partner_id);
3384 FETCH l_party_id_csr INTO l_partner_party_id, l_partner_level;
3385 IF l_party_id_csr%NOTFOUND THEN
3386 CLOSE l_party_id_csr;
3387 -- Raise an error saying partner is not active
3388 fnd_message.Set_Name('PV', 'PV_PARTNER_NOT_ACTIVE');
3389 fnd_msg_pub.Add;
3390 RAISE FND_API.G_EXC_ERROR;
3391 ELSE
3392 CLOSE l_party_id_csr;
3393 END IF;
3394
3395
3396 get_partner_details(
3397 p_party_id => l_partner_party_id ,
3398 x_return_status => l_return_status ,
3399 x_msg_count => l_msg_count ,
3400 x_msg_data => l_msg_data ,
3401 x_partner_qualifiers_tbl => l_partner_qualifiers_tbl );
3402
3403 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3404 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3405 RAISE FND_API.G_EXC_ERROR;
3406 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3407 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3408 END IF;
3409 END IF;
3410
3411 Do_Create_Channel_Team (
3412 p_api_version_number => p_api_version_number,
3413 p_init_msg_list => p_init_msg_list,
3414 p_commit => p_commit,
3415 p_validation_level => p_validation_level,
3416 p_partner_id => p_partner_id,
3417 p_vad_partner_id => p_vad_partner_id,
3418 p_mode => p_mode,
3419 p_login_user => p_login_user,
3420 p_partner_qualifiers_tbl => l_partner_qualifiers_tbl,
3421 x_return_status => l_return_status,
3422 x_msg_count => l_msg_count,
3423 x_msg_data => l_msg_data,
3424 x_prtnr_access_id_tbl => l_prtnr_access_id_tbl);
3425
3426 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3427 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3428 RAISE FND_API.G_EXC_ERROR;
3429 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3430 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3431 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.Do_Create_Channel_Team');
3432 FND_MSG_PUB.Add;
3433 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3434 END IF;
3435 END IF;
3436
3437 EXCEPTION
3438 WHEN FND_API.g_exc_error THEN
3439 ROLLBACK TO create_channel_team_pub;
3440 x_return_status := FND_API.g_ret_sts_error;
3441 FND_MSG_PUB.count_and_get (
3442 p_encoded => FND_API.g_false
3443 ,p_count => x_msg_count
3444 ,p_data => x_msg_data
3445 );
3446
3447 -- Debug Message
3448 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3449 hz_utility_v2pub.debug_return_messages (
3450 x_msg_count, x_msg_data, 'ERROR');
3451 hz_utility_v2pub.debug('Create_Channel_Team (-)');
3452 END IF;
3453
3454 WHEN FND_API.g_exc_unexpected_error THEN
3455 ROLLBACK TO create_channel_team_pub;
3456 x_return_status := FND_API.g_ret_sts_unexp_error ;
3457 FND_MSG_PUB.count_and_get (
3458 p_encoded => FND_API.g_false
3459 ,p_count => x_msg_count
3460 ,p_data => x_msg_data
3461 );
3462 -- Debug Message
3463 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3464 hz_utility_v2pub.debug_return_messages (
3465 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
3466 hz_utility_v2pub.debug('Create_Channel_Team (-)');
3467 END IF;
3468
3469 WHEN OTHERS THEN
3470 ROLLBACK TO create_channel_team_pub;
3471 x_return_status := FND_API.g_ret_sts_unexp_error ;
3472
3473 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
3474 THEN
3475 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
3476 END IF;
3477
3478 FND_MSG_PUB.count_and_get(
3479 p_encoded => FND_API.g_false
3480 ,p_count => x_msg_count
3481 ,p_data => x_msg_data
3482 );
3483
3484 -- Debug Message
3485 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3486 hz_utility_v2pub.debug_return_messages (
3487 x_msg_count, x_msg_data, 'SQL ERROR');
3488 hz_utility_v2pub.debug('Create_Channel_Team (-)');
3489 END IF;
3490
3491 END Create_Channel_Team;
3492
3493 --PN Obsoleted
3494 PROCEDURE Do_Cr_Online_Chnl_Team (
3495 p_api_version_number IN NUMBER ,
3496 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE ,
3497 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
3498 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL ,
3499 x_return_status OUT NOCOPY VARCHAR2,
3500 x_msg_count OUT NOCOPY NUMBER,
3501 x_msg_data OUT NOCOPY VARCHAR2,
3502 p_partner_id IN NUMBER ,
3503 p_vad_partner_id IN NUMBER ,
3504 p_mode IN VARCHAR2 ,
3505 p_login_user IN NUMBER ,
3506 p_partner_qualifiers_tbl IN partner_qualifiers_tbl_type,
3507 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type
3508 ) IS
3509 /*
3510 l_api_name CONSTANT VARCHAR2(30) := 'Create_Online_Channel_Team';
3511 l_api_version_number CONSTANT NUMBER := 1.0;
3512 l_return_status VARCHAR2(1);
3513 l_msg_count NUMBER;
3514 l_msg_data VARCHAR(2000);
3515 l_changed_partner_rec PV_BATCH_CHG_PRTNR_PVT.batch_chg_prtnrs_rec_type ;
3516
3517 -- Local variable declaration for all the Partner Qualifiers.
3518 l_party_site_id NUMBER;
3519 l_party_id NUMBER;
3520 l_partner_party_id NUMBER;
3521 l_city VARCHAR2(60);
3522 l_country VARCHAR2(60);
3523 l_county VARCHAR2(60);
3524 l_state VARCHAR2(60);
3525 l_province VARCHAR2(60);
3526 l_postal_code VARCHAR2(60);
3527 l_phone_area_code VARCHAR2(10);
3528 l_employees_total NUMBER;
3529 l_party_name VARCHAR2(360);
3530 l_category_code VARCHAR2(30);
3531 l_curr_fy_potential_revenue NUMBER;
3532 l_partner_types PV_ENTY_ATTR_VALUE_PUB.attr_value_tbl_type;
3533 l_prtnr_access_id_tbl JTF_NUMBER_TABLE;
3534 l_vad_prtnr_access_id_tbl prtnr_aces_tbl_type;
3535 l_partner_id NUMBER;
3536 l_partner_types_cnt NUMBER := 0;
3537 i NUMBER := 0;
3538 l_partner_qualifier_rec partner_qualifiers_rec_type ;
3539 l_partner_exist VARCHAR2(1) := 'N';
3540 l_territory_exist VARCHAR2(1) := 'N';
3541 l_partner_access_id NUMBER := 0;
3542 l_partner_access_rec PV_Partner_Accesses_PVT.partner_access_rec_type;
3543 l_winners_rec JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type;
3544 l_ind_winners_rec JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type;
3545 l_territory_access_rec PV_TAP_ACCESS_TERRS_PVT.TAP_ACCESS_TERRS_REC_TYPE ;
3546 l_resource_cnt NUMBER := 0;
3547 l_cm_added VARCHAR2(1) := 'N' ;
3548 l_res_created_flg VARCHAR2(1) := 'N' ;
3549 l_tap_created_flg VARCHAR2(1) := 'N' ;
3550 l_login_user_id NUMBER;
3551 l_partner_level VARCHAR2(30);
3552 l_resource_rec PV_TERR_ASSIGN_PUB.ResourceRec;
3553 l_partner_access_id_tbl prtnr_aces_tbl_type;
3554 l_partner_qualifiers_tbl partner_qualifiers_tbl_type;
3555
3556 -- Cursor l_party_id_csr to get the party_id and partner_level for a given partner_id.
3557 CURSOR l_party_id_csr (cv_partner_id NUMBER) IS
3558 SELECT partner_party_id, pacv.attr_code
3559 FROM pv_partner_profiles ppp,
3560 PV_ATTRIBUTE_CODES_VL pacv
3561 WHERE ppp.partner_id = cv_partner_id
3562 AND ppp.status = 'A'
3563 AND ppp.partner_level = pacv.ATTR_CODE_ID(+);
3564
3565 -- Cursor l_partner_types_csr, which takes partner_id as an input paramter, and gives
3566 -- the Partners types.
3567 CURSOR l_partner_type_csr (cv_partner_id NUMBER) IS
3568 SELECT attr_value
3569 FROM pv_enty_attr_values
3570 WHERE attribute_id = 3
3571 AND entity= 'PARTNER'
3572 AND entity_id = cv_partner_id
3573 AND latest_flag = 'Y';
3574
3575 -- Cursor l_chk_territory_exist_csr to check whether given partner_access_id and terr_id exists in
3576 -- PV_TAP_ACCESS_TERRS table or not.
3577 CURSOR l_chk_territory_exist_csr (cv_partner_access_id IN NUMBER, cv_terr_id IN NUMBER) IS
3578 SELECT 'Y'
3579 FROM PV_TAP_ACCESS_TERRS
3580 WHERE partner_access_id = cv_partner_access_id
3581 AND terr_id = cv_terr_id;
3582 */
3583 BEGIN
3584 --PN Not in use, Replaced by TERR and User APIs
3585
3586 -- dbms_output.put_line('Dummy stmt ');
3587 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3588 PVX_Utility_PVT.debug_message('This procedure is not in use');
3589 END IF;
3590 /*
3591 -- Standard call to check for call compatibility.
3592 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
3593 p_api_version_number,
3594 l_api_name,
3595 G_PKG_NAME)
3596 THEN
3597 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3598 END IF;
3599
3600 -- Initialize message list if p_init_msg_list is set to TRUE.
3601 IF FND_API.to_Boolean( p_init_msg_list )
3602 THEN
3603 FND_MSG_PUB.initialize;
3604 END IF;
3605
3606 -- Debug Message
3607 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3608 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || ' Start');
3609 END IF;
3610
3611 -- Initialize API return status to SUCCESS
3612 x_return_status := FND_API.G_RET_STS_SUCCESS;
3613
3614 -- =========================================================================
3615 -- Validate Environment
3616 -- =========================================================================
3617
3618 IF p_partner_id IS NULL OR p_partner_id = FND_API.g_miss_num THEN
3619 fnd_message.Set_Name('PV', 'PV_REQUIRED_VALIDATION');
3620 fnd_message.set_token('FIELD', 'PARTNER_ID');
3621 fnd_msg_pub.Add;
3622 RAISE FND_API.G_EXC_ERROR;
3623 ELSE
3624 l_partner_id := p_partner_id;
3625 END IF;
3626
3627 -- STEP (i) :
3628 -- Logic for inserting the logged in user's(Vendor employee) resource_id in the
3629 -- PV_PARTNER_ACCESSES table, IF the user is playing a role of
3630 -- 'CHANNEL_MANAGER' or 'CHANNEL_REP'
3631
3632 IF (p_mode <> 'UPDATE') THEN
3633 IF (p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num) THEN
3634 IF (p_login_user IS NULL OR p_login_user = FND_API.g_miss_num) THEN
3635 l_login_user_id := FND_GLOBAL.user_id;
3636 ELSE
3637 l_login_user_id := p_login_user;
3638 END IF;
3639
3640 Cr_Login_User_Access_Rec(
3641 p_partner_id => l_partner_id,
3642 p_login_user_id => l_login_user_id,
3643 x_return_status => l_return_status,
3644 x_msg_count => l_msg_count,
3645 x_msg_data => l_msg_data,
3646 x_cm_added => l_cm_added,
3647 x_res_created_flg => l_res_created_flg,
3648 x_partner_access_id => l_partner_access_id);
3649
3650 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3651 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3652 RAISE FND_API.G_EXC_ERROR;
3653 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3654 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3655 FND_MESSAGE.SET_TOKEN('API_NAME', 'Cr_Login_User_Access_Rec');
3656 FND_MSG_PUB.Add;
3657 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3658 END IF;
3659 END IF; -- l_return_status <> FND_API.G_RET_STS_SUCCESS
3660
3661 IF (l_cm_added = 'Y' ) THEN
3662 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id:= l_partner_access_id ;
3663 l_resource_cnt := l_resource_cnt + 1;
3664 END IF;
3665 END IF; -- p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num
3666 END IF; -- p_mode <> 'UPDATE'
3667
3668 -- STEP (ii) : Procesing of TAP returned resources with 'CHANNEL_MANAGER' or 'CHANNEL_REP' role.
3669 -- Debug Message
3670 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3671 PVX_Utility_PVT.debug_message('START : STEP (ii) : Procesing of TAP returned resources with CHANNEL_MANAGER or CHANNEL_REP role.');
3672 END IF;
3673
3674 -- Get the Partner Party Id for the given Partner_Id
3675 OPEN l_party_id_csr(l_partner_id);
3676 FETCH l_party_id_csr INTO l_partner_party_id, l_partner_level;
3677 IF l_party_id_csr%NOTFOUND THEN
3678 CLOSE l_party_id_csr;
3679 -- Raise an error saying partner is not active
3680 fnd_message.Set_Name('PV', 'PV_PARTNER_NOT_ACTIVE');
3681 fnd_msg_pub.Add;
3682 RAISE FND_API.G_EXC_ERROR;
3683 ELSE
3684 CLOSE l_party_id_csr;
3685 END IF;
3686
3687 -- Get the Partner Types details from l_partner_type_csr CURSOR.
3688 l_partner_types_cnt := 0;
3689 FOR prtnr_type_rec IN l_partner_type_csr(l_partner_id)
3690 LOOP
3691 l_partner_types_cnt := l_partner_types_cnt + 1;
3692 l_partner_types(l_partner_types_cnt).attr_value := prtnr_type_rec.attr_value ;
3693 END LOOP;
3694
3695 /*
3696 --l_partner_types_cnt := l_partner_types_cnt - 1;
3697 -- Get the Partner qualifiers details
3698 get_partner_details(
3699 p_party_id => l_partner_party_id ,
3700 x_return_status => l_return_status ,
3701 x_msg_count => l_msg_count ,
3702 x_msg_data => l_msg_data ,
3703 x_partner_qualifiers_tbl => l_partner_qualifiers_tbl );
3704
3705 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3706 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3707 RAISE FND_API.G_EXC_ERROR;
3708 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3709 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3710 FND_MESSAGE.SET_TOKEN('API_NAME', 'get_partner_details');
3711 FND_MSG_PUB.Add;
3712 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3713 END IF;
3714 END IF;
3715 */
3716
3717
3718 /*
3719
3720 l_partner_qualifiers_tbl := p_partner_qualifiers_tbl;
3721
3722 IF ( l_partner_qualifiers_tbl.count >= 0) THEN
3723 FOR i IN 1..l_partner_qualifiers_tbl.last
3724 LOOP
3725 l_party_site_id := l_partner_qualifiers_tbl(i).party_site_id;
3726 l_city := l_partner_qualifiers_tbl(i).city ;
3727 l_country := l_partner_qualifiers_tbl(i).country;
3728 l_county := l_partner_qualifiers_tbl(i).county;
3729 l_state := l_partner_qualifiers_tbl(i).state;
3730 l_province := l_partner_qualifiers_tbl(i).province;
3731 l_postal_code := l_partner_qualifiers_tbl(i).postal_code;
3732 l_phone_area_code := l_partner_qualifiers_tbl(i).area_code;
3733 l_employees_total := l_partner_qualifiers_tbl(i).number_of_employee;
3734 l_party_name := l_partner_qualifiers_tbl(i).partner_name;
3735 l_category_code := l_partner_qualifiers_tbl(i).customer_category_code;
3736 l_curr_fy_potential_revenue := l_partner_qualifiers_tbl(i).annual_revenue;
3737
3738 -- Process with each partner type, one by one record.
3739 FOR j IN 1..l_partner_types_cnt
3740 LOOP
3741 -- Make a place to store the Partner qualifiers in the l_partner_qualifier_tbl.
3742 --l_partner_qualifier_tbl.extend;
3743 --l_partner_qualifier_rec := g_miss_partner_qualifiers_rec;
3744
3745 -- Initilize the Partner Qualifers table with valid values.
3746 l_partner_qualifier_rec.partner_name := l_party_name;
3747 l_partner_qualifier_rec.party_id := l_partner_party_id;
3748 l_partner_qualifier_rec.area_code := l_phone_area_code;
3749 l_partner_qualifier_rec.city := l_city ;
3750 l_partner_qualifier_rec.country := l_country ;
3751 l_partner_qualifier_rec.county := l_county ;
3752 l_partner_qualifier_rec.postal_code := l_postal_code;
3753 l_partner_qualifier_rec.province := l_province ;
3754 l_partner_qualifier_rec.state := l_state;
3755 l_partner_qualifier_rec.annual_Revenue := l_curr_fy_potential_revenue;
3756 l_partner_qualifier_rec.number_of_employee := l_employees_total;
3757 l_partner_qualifier_rec.customer_category_code := l_category_code ;
3758 l_partner_qualifier_rec.partner_type := l_partner_types(j).attr_value;
3759 l_partner_qualifier_rec.partner_level := l_partner_level;
3760
3761 -- Debug Message
3762 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3763 PVX_Utility_PVT.debug_message('START : -- Call the TAP_Get_Channel_Team API ');
3764 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner_name => '|| l_partner_qualifier_rec.party_site_id);
3765 PVX_Utility_PVT.debug_message('('||to_char(i)||') city => '|| l_partner_qualifier_rec.city);
3766 PVX_Utility_PVT.debug_message('('||to_char(i)||') country => '|| l_partner_qualifier_rec.country);
3767 PVX_Utility_PVT.debug_message('('||to_char(i)||') county => '|| l_partner_qualifier_rec.county);
3768 PVX_Utility_PVT.debug_message('('||to_char(i)||') state => '|| l_partner_qualifier_rec.state);
3769 PVX_Utility_PVT.debug_message('('||to_char(i)||') province => '|| l_partner_qualifier_rec.province);
3770 PVX_Utility_PVT.debug_message('('||to_char(i)||') postal_code => '|| l_partner_qualifier_rec.postal_code);
3771 PVX_Utility_PVT.debug_message('('||to_char(i)||') area_code => '|| l_partner_qualifier_rec.area_code);
3772 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner_name => '|| l_partner_qualifier_rec.partner_name);
3773 PVX_Utility_PVT.debug_message('('||to_char(i)||') annual_revenue => '|| l_partner_qualifier_rec.annual_revenue);
3774 PVX_Utility_PVT.debug_message('('||to_char(i)||') number_of_employee => '|| l_partner_qualifier_rec.number_of_employee);
3775 PVX_Utility_PVT.debug_message('('||to_char(i)||') customer_category_code => '|| l_partner_qualifier_rec.customer_category_code);
3776 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner type => '|| l_partner_qualifier_rec.partner_type);
3777 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner level => '|| l_partner_qualifier_rec.partner_level);
3778 END IF;
3779
3780 -- Call the TAP_Get_Channel_Team API
3781 TAP_Get_Channel_Team(
3782 p_prtnr_qualifier_rec => l_partner_qualifier_rec,
3783 x_return_Status => l_return_status,
3784 x_msg_Count => l_msg_count,
3785 x_msg_Data => l_msg_data,
3786 x_winners_rec => l_winners_rec ) ;
3787
3788 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3789 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3790 RAISE FND_API.G_EXC_ERROR;
3791 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3792 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3793 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.TAP_Get_Channel_Team');
3794 FND_MSG_PUB.Add;
3795 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3796 END IF;
3797 END IF;
3798
3799 -- Debug Message
3800 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3801 PVX_Utility_PVT.debug_message('SUCCESSFULLY END : -- TAP_Get_Channel_Team ');
3802 END IF;
3803
3804
3805 IF ( l_winners_rec.resource_id.count > 0) THEN
3806 -- Call the Process_TAP_Resource procedure to process all the returned resources
3807 -- from TAP_Get_Channel_Team
3808 Process_TAP_Resources(
3809 p_partner_id => l_partner_id,
3810 p_partner_type => l_partner_types(j).attr_value,
3811 p_vad_partner_id => p_vad_partner_id,
3812 p_winners_rec => l_winners_rec,
3813 x_return_status => l_return_status,
3814 x_msg_count => l_msg_count,
3815 x_msg_data => l_msg_data,
3816 x_prtnr_access_id_tbl => l_partner_access_id_tbl);
3817
3818 IF (l_partner_access_id_tbl.count > 0 ) THEN
3819 l_resource_cnt := l_resource_cnt + l_partner_access_id_tbl.count ;
3820 END IF;
3821 END IF;
3822 END LOOP; -- FOR j IN 1..l_partner_types_cnt
3823 END LOOP; -- FOR i IN 1..l_partner_qualifiers_tbl.party_name.last
3824
3825 END IF; --( l_partner_qualifiers_tbl.last > 0)
3826
3827 IF (l_resource_cnt> 0 ) THEN
3828 l_cm_added := 'Y';
3829 ELSE
3830 l_cm_added := 'N';
3831 END IF;
3832
3833 -- End of Procesing of TAP returned resources with 'CHANNEL_MANAGER' or 'CHANNEL_REP' role.
3834
3835 -- Step3: If p_vad_partner_id is not null, then add all the CMs( Employees Of VAD Organinzation)
3836 -- to the p_partner_id's channel team. Ensure that you check for duplicates in access table. No territory
3837 -- records are added. set tap created flag to 'N' and keep flag = 'Y'
3838 IF ( NOT(p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num) ) THEN
3839
3840 -- Debug Message
3841 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3842 PVX_Utility_PVT.debug_message('START : Step3: If p_vad_partner_id is not null, then all the CMs( Employees of VAD Organization.');
3843 END IF;
3844
3845 -- Get the VAD Channel Team -
3846 Create_VAD_Channel_Team(
3847 p_api_version_number => 1.0 ,
3848 p_init_msg_list => FND_API.G_FALSE ,
3849 p_commit => FND_API.G_FALSE ,
3850 p_validation_level => FND_API.G_VALID_LEVEL_FULL ,
3851 x_return_status => l_return_status,
3852 x_msg_count => l_msg_count,
3853 x_msg_data => l_msg_data,
3854 p_partner_id => l_partner_id,
3855 p_vad_partner_id => p_vad_partner_id,
3856 x_prtnr_access_id_tbl => l_vad_prtnr_access_id_tbl );
3857
3858 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3859 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3860 RAISE FND_API.G_EXC_ERROR;
3861 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3862 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3863 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.Create_VAD_Channel_Team');
3864 FND_MSG_PUB.Add;
3865 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3866 END IF;
3867 END IF;
3868
3869 --- ===================================================================
3870 --- Store the returned resources from Create_VAD_Channel_Team procedure
3871 --- to the main output variable x_prtnr_access_id_tbl.
3872 --- ===================================================================
3873 IF (l_vad_prtnr_access_id_tbl.count > 0 ) THEN
3874 l_cm_added := 'Y';
3875 FOR k_index IN 1..l_vad_prtnr_access_id_tbl.last
3876 LOOP
3877 l_resource_cnt := l_resource_cnt + 1;
3878 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id := l_vad_prtnr_access_id_tbl(k_index).partner_access_id;
3879 END LOOP;
3880 END IF;
3881
3882 -- Debug Message
3883 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3884 PVX_Utility_PVT.debug_message('SUCCESSFULLY END : Step3.');
3885 END IF;
3886
3887 END IF; -- l_vad_partner_id IS NOT NULL OR l_vad_partner_id <> FND_API.g_miss_num
3888
3889 -- Assign Default Channel Manager as a Channel Team member, if both the above (Logged_in_User and
3890 -- TAP procedure call failed to add any channel team member.
3891 -- Debug Message
3892 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3893 PVX_Utility_PVT.debug_message('START : Step4: Assign Default Channel Manager as a Channel Team member : l_cm_added => '||l_cm_added );
3894 END IF;
3895
3896 IF ( l_cm_added <> 'Y' ) THEN
3897 -- Set the p_partner_access_rec record
3898 l_partner_access_rec.partner_id := l_partner_id;
3899 l_partner_access_rec.resource_id := fnd_profile.value('PV_DEFAULT_CM');
3900 l_partner_access_rec.keep_flag := 'Y';
3901 l_partner_access_rec.created_by_tap_flag := 'Y';
3902 l_partner_access_rec.access_type := 'F';
3903
3904 --- ==================================================================
3905 --- Before adding the default CM, check to see if there are any CMs
3906 --- added manually for a given p_partner_id.If yes, skip adding the
3907 --- default CM.
3908 --- ==================================================================
3909 IF (check_resource_exist(
3910 p_partner_id => l_partner_id
3911 ,p_resource_id => l_partner_access_rec.resource_id ) = 'N') THEN
3912
3913
3914 PV_Partner_Accesses_PVT.Create_Partner_Accesses(
3915 p_api_version_number => 1.0,
3916 p_init_msg_list => FND_API.G_FALSE,
3917 p_commit => FND_API.G_FALSE,
3918 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
3919 x_return_status => l_return_status,
3920 x_msg_count => l_msg_count,
3921 x_msg_data => l_msg_data,
3922 p_partner_access_rec => l_partner_access_rec,
3923 x_partner_access_id => l_partner_access_id );
3924
3925 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3926 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3927 RAISE FND_API.G_EXC_ERROR;
3928 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3929 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
3930 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_Partner_Accesses_PVT.Create_Partner_Accesses');
3931 FND_MSG_PUB.Add;
3932 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3933 END IF;
3934 END IF; -- l_return_status <> FND_API.G_RET_STS_SUCCESS
3935
3936 -- Store the PARTNER_ACCESS_ID in the Out variable
3937 l_resource_cnt := l_resource_cnt + 1;
3938 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id := l_partner_access_id;
3939
3940 END IF ; -- check_resource_exist
3941 END IF; -- l_cm_added <> 'Y'
3942
3943 -- Standard check for p_commit
3944 IF FND_API.to_Boolean( p_commit )
3945 THEN
3946 COMMIT WORK;
3947 END IF;
3948
3949 -- Debug Message
3950 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3951 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || 'end');
3952 END IF;
3953
3954 -- Standard call to get message count and if count is 1, get message info.
3955 FND_MSG_PUB.Count_And_Get
3956 (p_count => x_msg_count,
3957 p_data => x_msg_data
3958 );
3959
3960 EXCEPTION
3961 WHEN FND_API.g_exc_error THEN
3962 x_return_status := FND_API.g_ret_sts_error;
3963 FND_MSG_PUB.count_and_get (
3964 p_encoded => FND_API.g_false
3965 ,p_count => x_msg_count
3966 ,p_data => x_msg_data
3967 );
3968
3969 -- Debug Message
3970 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3971 hz_utility_v2pub.debug_return_messages (
3972 x_msg_count, x_msg_data, 'ERROR');
3973 hz_utility_v2pub.debug('Create_Online_Channel_Team (-)');
3974 END IF;
3975
3976 WHEN FND_API.g_exc_unexpected_error THEN
3977
3978 x_return_status := FND_API.g_ret_sts_unexp_error ;
3979 FND_MSG_PUB.count_and_get (
3980 p_encoded => FND_API.g_false
3981 ,p_count => x_msg_count
3982 ,p_data => x_msg_data
3983 );
3984 -- Debug Message
3985 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
3986 hz_utility_v2pub.debug_return_messages (
3987 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
3988 hz_utility_v2pub.debug('Create_Online_Channel_Team (-)');
3989 END IF;
3990
3991 WHEN OTHERS THEN
3992
3993 x_return_status := FND_API.g_ret_sts_unexp_error ;
3994
3995 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
3996 THEN
3997 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
3998 END IF;
3999
4000 FND_MSG_PUB.count_and_get(
4001 p_encoded => FND_API.g_false
4002 ,p_count => x_msg_count
4003 ,p_data => x_msg_data
4004 );
4005
4006 -- Debug Message
4007 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4008 hz_utility_v2pub.debug_return_messages (
4009 x_msg_count, x_msg_data, 'SQL ERROR');
4010 hz_utility_v2pub.debug('Create_Online_Channel_Team (-)');
4011 END IF;
4012 */
4013
4014 end Do_Cr_Online_Chnl_Team;
4015 -- Start of Comments
4016 --
4017 -- API name : Create_Online_Channel_Team
4018 -- Type : Public
4019 -- Function : The purpose of this procedure is to create a Channel
4020 -- team for a given Partner_id in the PV_PARTNER_ACCESSES
4021 -- table.
4022 --
4023 -- Pre-reqs : Existing resource should have a "Channel Manager" or
4024 -- "Channel Rep" role at group level.
4025 --
4026 -- Paramaeters :
4027 -- IN :
4028 -- p_api_version_number IN NUMBER,
4029 -- p_init_msg_list IN VARCHAR2
4030 -- p_commit IN VARCHAR2
4031 -- p_validation_level IN NUMBER
4032 --
4033 -- p_partner_id IN NUMBER
4034 -- p_vad_partner_id IN NUMBER
4035 -- p_mode IN VARCHAR2 ,
4036 -- p_login_user IN NUMBER ,
4037 -- OUT :
4038 -- x_return_status OUT VARCHAR2(1)
4039 -- x_msg_count OUT NUMBER
4040 -- x_msg_data OUT VARCHAR2(2000)
4041 -- x_prtnr_access_id_tbl OUT NOCOPY PV_TERR_ASSIGN_PUB.prtnr_aces_tbl_type
4042 --
4043 -- Version :
4044 -- Initial version 1.0
4045 --
4046 -- Notes: API for creating a Channel Team for a Partner Organization.
4047 --
4048 --
4049 -- End of Comments
4050
4051 --PN Obsoleted
4052 PROCEDURE Create_Online_Channel_Team (
4053 p_api_version_number IN NUMBER ,
4054 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE ,
4055 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
4056 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL ,
4057 x_return_status OUT NOCOPY VARCHAR2,
4058 x_msg_count OUT NOCOPY NUMBER,
4059 x_msg_data OUT NOCOPY VARCHAR2,
4060 p_partner_id IN NUMBER ,
4061 p_vad_partner_id IN NUMBER ,
4062 p_mode IN VARCHAR2 ,
4063 p_login_user IN NUMBER ,
4064 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type
4065 ) IS
4066
4067 l_api_name CONSTANT VARCHAR2(30) := 'Dummy Declaration';
4068 begin
4069 --PN Not in use, Replaced by TERR and User APIs
4070 -- dbms_output.put_line('Dummy stmt ');
4071 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4072 PVX_Utility_PVT.debug_message('This procedure is not in use');
4073 END IF;
4074
4075 /*
4076
4077 l_api_version_number CONSTANT NUMBER := 1.0;
4078 l_return_status VARCHAR2(1);
4079 l_msg_count NUMBER;
4080 l_msg_data VARCHAR(2000);
4081 l_changed_partner_rec PV_BATCH_CHG_PRTNR_PVT.batch_chg_prtnrs_rec_type ;
4082
4083 -- Local variable declaration for all the Partner Qualifiers.
4084 l_party_site_id NUMBER;
4085 l_party_id NUMBER;
4086 l_partner_party_id NUMBER;
4087 l_city VARCHAR2(60);
4088 l_country VARCHAR2(60);
4089 l_county VARCHAR2(60);
4090 l_state VARCHAR2(60);
4091 l_province VARCHAR2(60);
4092 l_postal_code VARCHAR2(60);
4093 l_phone_area_code VARCHAR2(10);
4094 l_employees_total NUMBER;
4095 l_party_name VARCHAR2(360);
4096 l_category_code VARCHAR2(30);
4097 l_curr_fy_potential_revenue NUMBER;
4098 l_partner_types PV_ENTY_ATTR_VALUE_PUB.attr_value_tbl_type;
4099 l_prtnr_access_id_tbl JTF_NUMBER_TABLE;
4100 l_vad_prtnr_access_id_tbl prtnr_aces_tbl_type;
4101 l_partner_id NUMBER;
4102 l_partner_types_cnt NUMBER := 0;
4103 i NUMBER := 0;
4104 l_partner_qualifier_rec partner_qualifiers_rec_type ;
4105 l_partner_exist VARCHAR2(1) := 'N';
4106 l_territory_exist VARCHAR2(1) := 'N';
4107 l_partner_access_id NUMBER := 0;
4108 l_partner_access_rec PV_Partner_Accesses_PVT.partner_access_rec_type;
4109 l_winners_rec JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type;
4110 l_ind_winners_rec JTF_TERR_ASSIGN_PUB.bulk_winners_rec_type;
4111 l_territory_access_rec PV_TAP_ACCESS_TERRS_PVT.TAP_ACCESS_TERRS_REC_TYPE ;
4112 l_resource_cnt NUMBER := 0;
4113 l_cm_added VARCHAR2(1) := 'N' ;
4114 l_res_created_flg VARCHAR2(1) := 'N' ;
4115 l_tap_created_flg VARCHAR2(1) := 'N' ;
4116 l_login_user_id NUMBER;
4117 l_partner_level VARCHAR2(30);
4118 l_resource_rec PV_TERR_ASSIGN_PUB.ResourceRec;
4119 l_partner_access_id_tbl prtnr_aces_tbl_type;
4120 l_partner_qualifiers_tbl partner_qualifiers_tbl_type;
4121
4122 -- Cursor l_party_id_csr to get the party_id and partner_level for a given partner_id.
4123 CURSOR l_party_id_csr (cv_partner_id NUMBER) IS
4124 SELECT partner_party_id, pacv.attr_code
4125 FROM pv_partner_profiles ppp,
4126 PV_ATTRIBUTE_CODES_VL pacv
4127 WHERE ppp.partner_id = cv_partner_id
4128 AND ppp.status = 'A'
4129 AND ppp.partner_level = pacv.ATTR_CODE_ID(+);
4130
4131 -- Cursor l_partner_types_csr, which takes partner_id as an input paramter, and gives
4132 -- the Partners types.
4133 CURSOR l_partner_type_csr (cv_partner_id NUMBER) IS
4134 SELECT attr_value
4135 FROM pv_enty_attr_values
4136 WHERE attribute_id = 3
4137 AND entity= 'PARTNER'
4138 AND entity_id = cv_partner_id
4139 AND latest_flag = 'Y';
4140
4141 -- Cursor l_chk_territory_exist_csr to check whether given partner_access_id and terr_id exists in
4142 -- PV_TAP_ACCESS_TERRS table or not.
4143 CURSOR l_chk_territory_exist_csr (cv_partner_access_id IN NUMBER, cv_terr_id IN NUMBER) IS
4144 SELECT 'Y'
4145 FROM PV_TAP_ACCESS_TERRS
4146 WHERE partner_access_id = cv_partner_access_id
4147 AND terr_id = cv_terr_id;
4148
4149 BEGIN
4150
4151 -- Standard call to check for call compatibility.
4152 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
4153 p_api_version_number,
4154 l_api_name,
4155 G_PKG_NAME)
4156 THEN
4157 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4158 END IF;
4159
4160 -- Initialize message list if p_init_msg_list is set to TRUE.
4161 IF FND_API.to_Boolean( p_init_msg_list )
4162 THEN
4163 FND_MSG_PUB.initialize;
4164 END IF;
4165
4166 -- Debug Message
4167 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4168 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || ' Start');
4169 END IF;
4170
4171 -- Initialize API return status to SUCCESS
4172 x_return_status := FND_API.G_RET_STS_SUCCESS;
4173
4174 -- =========================================================================
4175 -- Validate Environment
4176 -- =========================================================================
4177
4178 IF p_partner_id IS NULL OR p_partner_id = FND_API.g_miss_num THEN
4179 fnd_message.Set_Name('PV', 'PV_REQUIRED_VALIDATION');
4180 fnd_message.set_token('FIELD', 'PARTNER_ID');
4181 fnd_msg_pub.Add;
4182 RAISE FND_API.G_EXC_ERROR;
4183 ELSE
4184 l_partner_id := p_partner_id;
4185 END IF;
4186
4187 -- STEP (i) :
4188 -- Logic for inserting the logged in user's(Vendor employee) resource_id in the
4189 -- PV_PARTNER_ACCESSES table, IF the user is playing a role of
4190 -- 'CHANNEL_MANAGER' or 'CHANNEL_REP'
4191
4192 IF (p_mode <> 'UPDATE') THEN
4193 IF (p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num) THEN
4194 IF (p_login_user IS NULL OR p_login_user = FND_API.g_miss_num) THEN
4195 l_login_user_id := FND_GLOBAL.user_id;
4196 ELSE
4197 l_login_user_id := p_login_user;
4198 END IF;
4199
4200 Cr_Login_User_Access_Rec(
4201 p_partner_id => l_partner_id,
4202 p_login_user_id => l_login_user_id,
4203 x_return_status => l_return_status,
4204 x_msg_count => l_msg_count,
4205 x_msg_data => l_msg_data,
4206 x_cm_added => l_cm_added,
4207 x_res_created_flg => l_res_created_flg,
4208 x_partner_access_id => l_partner_access_id);
4209
4210 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4211 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4212 RAISE FND_API.G_EXC_ERROR;
4213 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4214 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
4215 FND_MESSAGE.SET_TOKEN('API_NAME', 'Cr_Login_User_Access_Rec');
4216 FND_MSG_PUB.Add;
4217 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4218 END IF;
4219 END IF; -- l_return_status <> FND_API.G_RET_STS_SUCCESS
4220
4221 IF (l_cm_added = 'Y' ) THEN
4222 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id:= l_partner_access_id ;
4223 l_resource_cnt := l_resource_cnt + 1;
4224 END IF;
4225 END IF; -- p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num
4226 END IF; -- p_mode <> 'UPDATE'
4227
4228 -- STEP (ii) : Procesing of TAP returned resources with 'CHANNEL_MANAGER' or 'CHANNEL_REP' role.
4229 -- Debug Message
4230 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4231 PVX_Utility_PVT.debug_message('START : STEP (ii) : Procesing of TAP returned resources with CHANNEL_MANAGER or CHANNEL_REP role.');
4232 END IF;
4233
4234 -- Get the Partner Party Id for the given Partner_Id
4235 OPEN l_party_id_csr(l_partner_id);
4236 FETCH l_party_id_csr INTO l_partner_party_id, l_partner_level;
4237 IF l_party_id_csr%NOTFOUND THEN
4238 CLOSE l_party_id_csr;
4239 -- Raise an error saying partner is not active
4240 fnd_message.Set_Name('PV', 'PV_PARTNER_NOT_ACTIVE');
4241 fnd_msg_pub.Add;
4242 RAISE FND_API.G_EXC_ERROR;
4243 ELSE
4244 CLOSE l_party_id_csr;
4245 END IF;
4246
4247 -- Get the Partner Types details from l_partner_type_csr CURSOR.
4248 l_partner_types_cnt := 0;
4249 FOR prtnr_type_rec IN l_partner_type_csr(l_partner_id)
4250 LOOP
4251 l_partner_types_cnt := l_partner_types_cnt + 1;
4252 l_partner_types(l_partner_types_cnt).attr_value := prtnr_type_rec.attr_value ;
4253 END LOOP;
4254 --l_partner_types_cnt := l_partner_types_cnt - 1;
4255 -- Get the Partner qualifiers details
4256 get_partner_details(
4257 p_party_id => l_partner_party_id ,
4258 x_return_status => l_return_status ,
4259 x_msg_count => l_msg_count ,
4260 x_msg_data => l_msg_data ,
4261 x_partner_qualifiers_tbl => l_partner_qualifiers_tbl );
4262
4263 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4264 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4265 RAISE FND_API.G_EXC_ERROR;
4266 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4267 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
4268 FND_MESSAGE.SET_TOKEN('API_NAME', 'get_partner_details');
4269 FND_MSG_PUB.Add;
4270 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4271 END IF;
4272 END IF;
4273
4274 IF ( l_partner_qualifiers_tbl.count >= 0) THEN
4275 FOR i IN 1..l_partner_qualifiers_tbl.last
4276 LOOP
4277 l_party_site_id := l_partner_qualifiers_tbl(i).party_site_id;
4278 l_city := l_partner_qualifiers_tbl(i).city ;
4279 l_country := l_partner_qualifiers_tbl(i).country;
4280 l_county := l_partner_qualifiers_tbl(i).county;
4281 l_state := l_partner_qualifiers_tbl(i).state;
4282 l_province := l_partner_qualifiers_tbl(i).province;
4283 l_postal_code := l_partner_qualifiers_tbl(i).postal_code;
4284 l_phone_area_code := l_partner_qualifiers_tbl(i).area_code;
4285 l_employees_total := l_partner_qualifiers_tbl(i).number_of_employee;
4286 l_party_name := l_partner_qualifiers_tbl(i).partner_name;
4287 l_category_code := l_partner_qualifiers_tbl(i).customer_category_code;
4288 l_curr_fy_potential_revenue := l_partner_qualifiers_tbl(i).annual_revenue;
4289
4290 -- Process with each partner type, one by one record.
4291 FOR j IN 1..l_partner_types_cnt
4292 LOOP
4293 -- Make a place to store the Partner qualifiers in the l_partner_qualifier_tbl.
4294 --l_partner_qualifier_tbl.extend;
4295 --l_partner_qualifier_rec := g_miss_partner_qualifiers_rec;
4296
4297 -- Initilize the Partner Qualifers table with valid values.
4298 l_partner_qualifier_rec.partner_name := l_party_name;
4299 l_partner_qualifier_rec.party_id := l_partner_party_id;
4300 l_partner_qualifier_rec.area_code := l_phone_area_code;
4301 l_partner_qualifier_rec.city := l_city ;
4302 l_partner_qualifier_rec.country := l_country ;
4303 l_partner_qualifier_rec.county := l_county ;
4304 l_partner_qualifier_rec.postal_code := l_postal_code;
4305 l_partner_qualifier_rec.province := l_province ;
4306 l_partner_qualifier_rec.state := l_state;
4307 l_partner_qualifier_rec.annual_Revenue := l_curr_fy_potential_revenue;
4308 l_partner_qualifier_rec.number_of_employee := l_employees_total;
4309 l_partner_qualifier_rec.customer_category_code := l_category_code ;
4310 l_partner_qualifier_rec.partner_type := l_partner_types(j).attr_value;
4311 l_partner_qualifier_rec.partner_level := l_partner_level;
4312
4313 -- Debug Message
4314 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4315 PVX_Utility_PVT.debug_message('START : -- Call the TAP_Get_Channel_Team API ');
4316 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner_name => '|| l_partner_qualifier_rec.party_site_id);
4317 PVX_Utility_PVT.debug_message('('||to_char(i)||') city => '|| l_partner_qualifier_rec.city);
4318 PVX_Utility_PVT.debug_message('('||to_char(i)||') country => '|| l_partner_qualifier_rec.country);
4319 PVX_Utility_PVT.debug_message('('||to_char(i)||') county => '|| l_partner_qualifier_rec.county);
4320 PVX_Utility_PVT.debug_message('('||to_char(i)||') state => '|| l_partner_qualifier_rec.state);
4321 PVX_Utility_PVT.debug_message('('||to_char(i)||') province => '|| l_partner_qualifier_rec.province);
4322 PVX_Utility_PVT.debug_message('('||to_char(i)||') postal_code => '|| l_partner_qualifier_rec.postal_code);
4323 PVX_Utility_PVT.debug_message('('||to_char(i)||') area_code => '|| l_partner_qualifier_rec.area_code);
4324 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner_name => '|| l_partner_qualifier_rec.partner_name);
4325 PVX_Utility_PVT.debug_message('('||to_char(i)||') annual_revenue => '|| l_partner_qualifier_rec.annual_revenue);
4326 PVX_Utility_PVT.debug_message('('||to_char(i)||') number_of_employee => '|| l_partner_qualifier_rec.number_of_employee);
4327 PVX_Utility_PVT.debug_message('('||to_char(i)||') customer_category_code => '|| l_partner_qualifier_rec.customer_category_code);
4328 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner type => '|| l_partner_qualifier_rec.partner_type);
4329 PVX_Utility_PVT.debug_message('('||to_char(i)||') partner level => '|| l_partner_qualifier_rec.partner_level);
4330 END IF;
4331
4332 -- Call the TAP_Get_Channel_Team API
4333 TAP_Get_Channel_Team(
4334 p_prtnr_qualifier_rec => l_partner_qualifier_rec,
4335 x_return_Status => l_return_status,
4336 x_msg_Count => l_msg_count,
4337 x_msg_Data => l_msg_data,
4338 x_winners_rec => l_winners_rec ) ;
4339
4340 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4341 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4342 RAISE FND_API.G_EXC_ERROR;
4343 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4344 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
4345 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.TAP_Get_Channel_Team');
4346 FND_MSG_PUB.Add;
4347 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4348 END IF;
4349 END IF;
4350
4351 -- Debug Message
4352 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4353 PVX_Utility_PVT.debug_message('SUCCESSFULLY END : -- TAP_Get_Channel_Team ');
4354 END IF;
4355
4356
4357 IF ( l_winners_rec.resource_id.count > 0) THEN
4358 -- Call the Process_TAP_Resource procedure to process all the returned resources
4359 -- from TAP_Get_Channel_Team
4360 Process_TAP_Resources(
4361 p_partner_id => l_partner_id,
4362 p_partner_type => l_partner_types(j).attr_value,
4363 p_vad_partner_id => p_vad_partner_id,
4364 p_winners_rec => l_winners_rec,
4365 x_return_status => l_return_status,
4366 x_msg_count => l_msg_count,
4367 x_msg_data => l_msg_data,
4368 x_prtnr_access_id_tbl => l_partner_access_id_tbl);
4369
4370 IF (l_partner_access_id_tbl.count > 0 ) THEN
4371 l_resource_cnt := l_resource_cnt + l_partner_access_id_tbl.count ;
4372 END IF;
4373 END IF;
4374 END LOOP; -- FOR j IN 1..l_partner_types_cnt
4375 END LOOP; -- FOR i IN 1..l_partner_qualifiers_tbl.party_name.last
4376
4377 END IF; --( l_partner_qualifiers_tbl.last > 0)
4378
4379 IF (l_resource_cnt> 0 ) THEN
4380 l_cm_added := 'Y';
4381 ELSE
4382 l_cm_added := 'N';
4383 END IF;
4384
4385 -- End of Procesing of TAP returned resources with 'CHANNEL_MANAGER' or 'CHANNEL_REP' role.
4386
4387 -- Step3: If p_vad_partner_id is not null, then add all the CMs( Employees Of VAD Organinzation)
4388 -- to the p_partner_id's channel team. Ensure that you check for duplicates in access table. No territory
4389 -- records are added. set tap created flag to 'N' and keep flag = 'Y'
4390 IF ( NOT(p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num) ) THEN
4391
4392 -- Debug Message
4393 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4394 PVX_Utility_PVT.debug_message('START : Step3: If p_vad_partner_id is not null, then all the CMs( Employees of VAD Organization.');
4395 END IF;
4396
4397 -- Get the VAD Channel Team -
4398 Create_VAD_Channel_Team(
4399 p_api_version_number => 1.0 ,
4400 p_init_msg_list => FND_API.G_FALSE ,
4401 p_commit => FND_API.G_FALSE ,
4402 p_validation_level => FND_API.G_VALID_LEVEL_FULL ,
4403 x_return_status => l_return_status,
4404 x_msg_count => l_msg_count,
4405 x_msg_data => l_msg_data,
4406 p_partner_id => l_partner_id,
4407 p_vad_partner_id => p_vad_partner_id,
4408 x_prtnr_access_id_tbl => l_vad_prtnr_access_id_tbl );
4409
4410 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4411 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4412 RAISE FND_API.G_EXC_ERROR;
4413 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4414 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
4415 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.Create_VAD_Channel_Team');
4416 FND_MSG_PUB.Add;
4417 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4418 END IF;
4419 END IF;
4420
4421 --- ===================================================================
4422 --- Store the returned resources from Create_VAD_Channel_Team procedure
4423 --- to the main output variable x_prtnr_access_id_tbl.
4424 --- ===================================================================
4425 IF (l_vad_prtnr_access_id_tbl.count > 0 ) THEN
4426 l_cm_added := 'Y';
4427 FOR k_index IN 1..l_vad_prtnr_access_id_tbl.last
4428 LOOP
4429 l_resource_cnt := l_resource_cnt + 1;
4430 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id := l_vad_prtnr_access_id_tbl(k_index).partner_access_id;
4431 END LOOP;
4432 END IF;
4433
4434 -- Debug Message
4435 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4436 PVX_Utility_PVT.debug_message('SUCCESSFULLY END : Step3.');
4437 END IF;
4438
4439 END IF; -- l_vad_partner_id IS NOT NULL OR l_vad_partner_id <> FND_API.g_miss_num
4440
4441 -- Assign Default Channel Manager as a Channel Team member, if both the above (Logged_in_User and
4442 -- TAP procedure call failed to add any channel team member.
4443 -- Debug Message
4444 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4445 PVX_Utility_PVT.debug_message('START : Step4: Assign Default Channel Manager as a Channel Team member : l_cm_added => '||l_cm_added );
4446 END IF;
4447
4448 IF ( l_cm_added <> 'Y' ) THEN
4449 -- Set the p_partner_access_rec record
4450 l_partner_access_rec.partner_id := l_partner_id;
4451 l_partner_access_rec.resource_id := fnd_profile.value('PV_DEFAULT_CM');
4452 l_partner_access_rec.keep_flag := 'Y';
4453 l_partner_access_rec.created_by_tap_flag := 'Y';
4454 l_partner_access_rec.access_type := 'F';
4455
4456 --- ==================================================================
4457 --- Before adding the default CM, check to see if there are any CMs
4458 --- added manually for a given p_partner_id.If yes, skip adding the
4459 --- default CM.
4460 --- ==================================================================
4461 IF (check_resource_exist(
4462 p_partner_id => l_partner_id
4463 ,p_resource_id => l_partner_access_rec.resource_id ) = 'N') THEN
4464
4465
4466 PV_Partner_Accesses_PVT.Create_Partner_Accesses(
4467 p_api_version_number => 1.0,
4468 p_init_msg_list => FND_API.G_FALSE,
4469 p_commit => FND_API.G_FALSE,
4470 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4471 x_return_status => l_return_status,
4472 x_msg_count => l_msg_count,
4473 x_msg_data => l_msg_data,
4474 p_partner_access_rec => l_partner_access_rec,
4475 x_partner_access_id => l_partner_access_id );
4476
4477 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4478 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4479 RAISE FND_API.G_EXC_ERROR;
4480 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4481 FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
4482 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_Partner_Accesses_PVT.Create_Partner_Accesses');
4483 FND_MSG_PUB.Add;
4484 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4485 END IF;
4486 END IF; -- l_return_status <> FND_API.G_RET_STS_SUCCESS
4487
4488 -- Store the PARTNER_ACCESS_ID in the Out variable
4489 l_resource_cnt := l_resource_cnt + 1;
4490 x_prtnr_access_id_tbl(l_resource_cnt).partner_access_id := l_partner_access_id;
4491
4492 END IF ; -- check_resource_exist
4493 END IF; -- l_cm_added <> 'Y'
4494
4495 -- Standard check for p_commit
4496 IF FND_API.to_Boolean( p_commit )
4497 THEN
4498 COMMIT WORK;
4499 END IF;
4500
4501 -- Debug Message
4502 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4503 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || 'end');
4504 END IF;
4505
4506 -- Standard call to get message count and if count is 1, get message info.
4507 FND_MSG_PUB.Count_And_Get
4508 (p_count => x_msg_count,
4509 p_data => x_msg_data
4510 );
4511
4512 EXCEPTION
4513 WHEN FND_API.g_exc_error THEN
4514 x_return_status := FND_API.g_ret_sts_error;
4515 FND_MSG_PUB.count_and_get (
4516 p_encoded => FND_API.g_false
4517 ,p_count => x_msg_count
4518 ,p_data => x_msg_data
4519 );
4520
4521 -- Debug Message
4522 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4523 hz_utility_v2pub.debug_return_messages (
4524 x_msg_count, x_msg_data, 'ERROR');
4525 hz_utility_v2pub.debug('Create_Online_Channel_Team (-)');
4526 END IF;
4527
4528 WHEN FND_API.g_exc_unexpected_error THEN
4529
4530 x_return_status := FND_API.g_ret_sts_unexp_error ;
4531 FND_MSG_PUB.count_and_get (
4532 p_encoded => FND_API.g_false
4533 ,p_count => x_msg_count
4534 ,p_data => x_msg_data
4535 );
4536 -- Debug Message
4537 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4538 hz_utility_v2pub.debug_return_messages (
4539 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
4540 hz_utility_v2pub.debug('Create_Online_Channel_Team (-)');
4541 END IF;
4542
4543 WHEN OTHERS THEN
4544
4545 x_return_status := FND_API.g_ret_sts_unexp_error ;
4546
4547 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
4548 THEN
4549 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
4550 END IF;
4551
4552 FND_MSG_PUB.count_and_get(
4553 p_encoded => FND_API.g_false
4554 ,p_count => x_msg_count
4555 ,p_data => x_msg_data
4556 );
4557
4558 -- Debug Message
4559 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4560 hz_utility_v2pub.debug_return_messages (
4561 x_msg_count, x_msg_data, 'SQL ERROR');
4562 hz_utility_v2pub.debug('Create_Online_Channel_Team (-)');
4563 END IF;
4564 */
4565 END Create_Online_Channel_Team;
4566
4567 -- Start of Comments
4568 --
4569 -- API name : Create_VAD_Channel_Team
4570 -- Type : Public
4571 -- Function : The purpose of this procedure is to create a Channel
4572 -- team of all VAD employees for a given VAD_Partner_id in
4573 -- the PV_PARTNER_ACCESSES table.
4574 --
4575 -- Pre-reqs : Existing resource should be a "Channel Manager" or
4576 -- "Channel Rep" role at group level.
4577 --
4578 -- Paramaeters :
4579 -- IN :
4580 -- p_api_version_number IN NUMBER,
4581 -- p_init_msg_list IN VARCHAR2
4582 -- p_commit IN VARCHAR2
4583 -- p_validation_level IN NUMBER
4584 --
4585 -- p_partner_id IN NUMBER
4586 -- p_vad_partner_id IN NUMBER
4587 -- OUT :
4588 -- x_return_status OUT VARCHAR2(1)
4589 -- x_msg_count OUT NUMBER
4590 -- x_msg_data OUT VARCHAR2(2000)
4591 --
4592 -- x_prtnr_access_id_tbl OUT NUMBER
4593 --
4594 -- Version :
4595 -- Initial version 1.0
4596 --
4597 -- Notes: API for creating a Channel Team of VAD employees for a
4598 -- Partner Organization.
4599 --
4600 --
4601 -- End of Comments
4602
4603 PROCEDURE Create_VAD_Channel_Team
4604 ( p_api_version_number IN NUMBER ,
4605 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE ,
4606 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
4607 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL ,
4608 x_return_status OUT NOCOPY VARCHAR2,
4609 x_msg_count OUT NOCOPY NUMBER,
4610 x_msg_data OUT NOCOPY VARCHAR2,
4611 p_partner_id IN NUMBER,
4612 p_vad_partner_id IN NUMBER,
4613 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type
4614 )IS
4615
4616 l_api_name CONSTANT VARCHAR2(30) := 'Create_VAD_Channel_Team';
4617 l_api_version_number CONSTANT NUMBER := 1.0;
4618 l_return_status VARCHAR2(1);
4619 l_msg_count NUMBER;
4620 l_msg_data VARCHAR(2000);
4621 l_resourse_cnt NUMBER:= 0;
4622
4623 l_partner_id NUMBER;
4624 l_vad_partner_id NUMBER;
4625 l_vad_party_id NUMBER;
4626 l_resource_id NUMBER;
4627 l_partner_access_id NUMBER;
4628 l_partner_access_rec PV_PARTNER_ACCESSES_PVT.partner_access_rec_type;
4629
4630 -- Cursor l_party_id_csr to get the VAD Partner Org Id by supplying the
4631 -- VAD Partner id.
4632 CURSOR l_VAD_party_id_csr (cv_vad_partner_id NUMBER) IS
4633 SELECT partner_party_id
4634 FROM pv_partner_profiles a,
4635 pv_enty_attr_values b
4636 WHERE a.partner_id = cv_vad_partner_id
4637 AND a.status = 'A'
4638 AND a.partner_id = b.entity_id
4639 AND b.entity = 'PARTNER'
4640 AND b.attribute_id = 3
4641 AND b.attr_value = 'VAD'
4642 AND b.latest_flag = 'Y';
4643
4644 -- Cursor l_VAD_contacts_csr to get the VAD Partner Contacts( with 'ChannelManager'
4645 -- or 'Channel Rep' role by supplying the VAD Org Id.
4646 CURSOR l_VAD_contacts_csr (cv_vad_party_id NUMBER) IS
4647 SELECT DISTINCT
4648 RES.resource_id
4649 FROM
4650 hz_relationships HZPR_PART_CONT ,
4651 hz_parties CONTACT ,
4652 jtf_rs_resource_extns RES ,
4653 jtf_rs_group_members GRPMEM,
4654 jtf_rs_group_usages GRPUSG,
4655 jtf_rs_role_relations ROLRELAT ,
4656 jtf_rs_roles_vl ROLE
4657 WHERE HZPR_PART_CONT.RELATIONSHIP_TYPE = 'EMPLOYMENT'
4658 AND HZPR_PART_CONT.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
4659 AND HZPR_PART_CONT.OBJECT_TABLE_NAME = 'HZ_PARTIES'
4660 AND HZPR_PART_CONT.status = 'A'
4661 AND HZPR_PART_CONT.start_date <= SYSDATE
4662 AND NVL(HZPR_PART_CONT.end_date,SYSDATE) >= SYSDATE
4663 AND HZPR_PART_CONT.object_id = cv_vad_party_id
4664 AND HZPR_PART_CONT.subject_id = CONTACT.PARTY_ID
4665 AND CONTACT.party_type = 'PERSON'
4666 AND HZPR_PART_CONT.party_id = RES.source_id
4667 AND RES.category = 'PARTY'
4668 AND sysdate between nvl(RES.start_date_active,sysdate) and
4669 nvl(RES.end_date_active,sysdate)
4670 AND RES.resource_id = GRPMEM.resource_id
4671 AND NVL(GRPMEM.delete_flag,'N') = 'N'
4672 AND GRPMEM.group_id = GRPUSG.group_id
4673 AND GRPUSG.usage = 'PRM'
4674 AND GRPMEM.group_member_id=ROLRELAT.role_resource_id
4675 AND ROLRELAT.role_resource_type = 'RS_GROUP_MEMBER'
4676 AND NVL(ROLRELAT.delete_flag,'N') = 'N'
4677 AND ROLRELAT.start_date_active <= sysdate
4678 AND NVL(ROLRELAT.end_date_active,sysdate) >= sysdate
4679 AND ROLRELAT.role_id = ROLE.ROLE_ID
4680 AND ROLE.role_type_code = 'PRM'
4681 AND ROLE.MEMBER_FLAG = 'Y'
4682 AND ROLE.role_code IN ('CHANNEL_MANAGER', 'CHANNEL_REP')
4683 AND RES.user_id is not null;
4684
4685 BEGIN
4686
4687 -- Standard call to check for call compatibility.
4688 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
4689 p_api_version_number,
4690 l_api_name,
4691 G_PKG_NAME)
4692 THEN
4693 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4694 END IF;
4695
4696 -- Initialize message list if p_init_msg_list is set to TRUE.
4697 IF FND_API.to_Boolean( p_init_msg_list )
4698 THEN
4699 FND_MSG_PUB.initialize;
4700 END IF;
4701
4702 -- Debug Message
4703 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4704 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || ' Start');
4705 END IF;
4706
4707 -- Initialize API return status to SUCCESS
4708 x_return_status := FND_API.G_RET_STS_SUCCESS;
4709
4710 -- =========================================================================
4711 -- Validate Environment
4712 -- =========================================================================
4713
4714 IF p_partner_id IS NULL OR p_partner_id = FND_API.g_miss_num THEN
4715 fnd_message.Set_Name('PV', 'PV_REQUIRED_VALIDATION');
4716 fnd_message.set_token('FIELD', 'PARTNER_ID');
4717 fnd_msg_pub.Add;
4718 RAISE FND_API.G_EXC_ERROR;
4719 ELSE
4720 l_partner_id := p_partner_id;
4721 END IF;
4722
4723 -- Initialize the l_vad_partner_id.
4724 IF p_vad_partner_id IS NULL OR p_vad_partner_id = FND_API.g_miss_num THEN
4725 fnd_message.Set_Name('PV', 'PV_REQUIRED_VALIDATION');
4726 fnd_message.set_token('FIELD', 'VAD_PARTNER_ID');
4727 fnd_msg_pub.Add;
4728 RAISE FND_API.G_EXC_ERROR;
4729 ELSE
4730 l_vad_partner_id := p_vad_partner_id;
4731 END IF;
4732
4733 -- Get the VAD Orgnization ID for the given VAD_Partner_id.
4734 OPEN l_VAD_party_id_csr(l_vad_partner_id);
4735 FETCH l_VAD_party_id_csr INTO l_vad_party_id;
4736
4737 IF ( l_VAD_party_id_csr%NOTFOUND ) THEN
4738 CLOSE l_VAD_party_id_csr;
4739 -- Raise an error ;
4740 fnd_message.Set_Name('PV', 'PV_PARTNER_NOT_ACTIVE');
4741 fnd_msg_pub.Add;
4742 RAISE FND_API.G_EXC_ERROR;
4743 ELSE
4744 CLOSE l_VAD_party_id_csr;
4745 END IF;
4746
4747 -- Some Common initilization of partner_accesses_rec
4748 l_partner_access_rec.partner_id := l_partner_id;
4749 l_partner_access_rec.keep_flag := 'Y';
4750 l_partner_access_rec.created_by_tap_flag := 'N';
4751 l_partner_access_rec.access_type := 'F';
4752 l_partner_access_rec.vad_partner_id := l_vad_partner_id;
4753
4754 -- Get the VAD Orgnization Contacts with 'Channel Manager' or 'Channel Rep' role
4755 -- for the given VAD Org Id got from the previous step.
4756 OPEN l_VAD_contacts_csr(l_vad_party_id);
4757 LOOP
4758 FETCH l_VAD_contacts_csr INTO l_resource_id;
4759 EXIT WHEN l_VAD_contacts_csr%NOTFOUND;
4760
4761 IF (check_resource_exist(l_partner_id, l_resource_id) = 'N')
4762 THEN
4763 l_resourse_cnt := l_resourse_cnt + 1;
4764 -- Create the resourse as a Channel Team member in PV_PARTNER_ACCESSES
4765 -- table by calling the PV_PARTNER_ACCESS_PVT.Create_Partner_Accesses
4766 -- procedure.
4767
4768 -- set the resourse_id
4769 l_partner_access_rec.resource_id := l_resource_id;
4770
4771 -- call the API
4772 PV_PARTNER_ACCESSES_PVT.Create_Partner_Accesses(
4773 p_api_version_number => 1.0,
4774 p_init_msg_list => FND_API.G_FALSE,
4775 p_commit => FND_API.G_FALSE,
4776 x_return_status => l_return_status,
4777 x_msg_count => l_msg_count,
4778 x_msg_data => l_msg_data,
4779 p_partner_access_rec => l_partner_access_rec,
4780 x_partner_access_id => l_partner_access_id
4781 );
4782
4783 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4784 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4785 RAISE FND_API.G_EXC_ERROR;
4786 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4787 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
4788 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_PARTNER_ACCESSES_PVT.Create_Partner_Accesses');
4789 FND_MSG_PUB.Add;
4790 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4791 END IF;
4792 END IF;
4793
4794 -- Store the output variable
4795 x_prtnr_access_id_tbl(l_resourse_cnt).partner_access_id:= l_partner_access_id ;
4796 END IF;
4797 END LOOP;
4798 CLOSE l_VAD_contacts_csr;
4799
4800 --
4801 -- End of API body.
4802 --
4803
4804 -- Standard check for p_commit
4805 IF FND_API.to_Boolean( p_commit )
4806 THEN
4807 COMMIT WORK;
4808 END IF;
4809
4810
4811 -- Debug Message
4812 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4813 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || 'end');
4814 END IF;
4815
4816 -- Standard call to get message count and if count is 1, get message info.
4817 FND_MSG_PUB.Count_And_Get
4818 ( p_count => l_msg_count,
4819 p_data => l_msg_data
4820 );
4821
4822 EXCEPTION
4823 WHEN FND_API.g_exc_error THEN
4824 x_return_status := FND_API.g_ret_sts_error;
4825 IF ( l_VAD_contacts_csr%ISOPEN ) THEN
4826 CLOSE l_VAD_contacts_csr;
4827 END IF;
4828
4829 FND_MSG_PUB.count_and_get (
4830 p_encoded => FND_API.g_false
4831 ,p_count => x_msg_count
4832 ,p_data => x_msg_data
4833 );
4834
4835 -- Debug Message
4836 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4837 hz_utility_v2pub.debug_return_messages (
4838 x_msg_count, x_msg_data, 'ERROR');
4839 hz_utility_v2pub.debug('Create_VAD_Channel_Team (-)');
4840 END IF;
4841
4842 WHEN FND_API.g_exc_unexpected_error THEN
4843 x_return_status := FND_API.g_ret_sts_unexp_error ;
4844
4845 IF ( l_VAD_contacts_csr%ISOPEN ) THEN
4846 CLOSE l_VAD_contacts_csr;
4847 END IF;
4848
4849 FND_MSG_PUB.count_and_get (
4850 p_encoded => FND_API.g_false
4851 ,p_count => x_msg_count
4852 ,p_data => x_msg_data
4853 );
4854 -- Debug Message
4855 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4856 hz_utility_v2pub.debug_return_messages (
4857 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
4858 hz_utility_v2pub.debug('Create_VAD_Channel_Team (-)');
4859 END IF;
4860
4861 WHEN OTHERS THEN
4862 x_return_status := FND_API.g_ret_sts_unexp_error ;
4863
4864 IF ( l_VAD_contacts_csr%ISOPEN ) THEN
4865 CLOSE l_VAD_contacts_csr;
4866 END IF;
4867
4868 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error)
4869 THEN
4870 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
4871 END IF;
4872
4873 FND_MSG_PUB.count_and_get(
4874 p_encoded => FND_API.g_false
4875 ,p_count => x_msg_count
4876 ,p_data => x_msg_data
4877 );
4878
4879 -- Debug Message
4880 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4881 hz_utility_v2pub.debug_return_messages (
4882 x_msg_count, x_msg_data, 'SQL ERROR');
4883 hz_utility_v2pub.debug('Create_VAD_Channel_Team (-)');
4884 END IF;
4885 END Create_VAD_Channel_Team;
4886
4887 -- Start of Comments
4888 --
4889 -- API name : Update_Channel_Team
4890 -- Type : Public
4891 -- Function : The purpose of this procedure is to Update a Channel
4892 -- team of a given partner_id, whenever there is an update
4893 -- in any of the partner qualifiers.
4894 --
4895 -- Pre-reqs :
4896 --
4897 -- Paramaeters :
4898 -- IN :
4899 -- p_api_version_number IN NUMBER,
4900 -- p_init_msg_list IN VARCHAR2
4901 -- p_commit IN VARCHAR2
4902 -- p_validation_level IN NUMBER
4903 --
4904 -- p_partner_id IN NUMBER
4905 -- p_vad_partner_id IN NUMBER
4906 -- p_mode IN VARCHAR2
4907 -- p_prtnr_qualifier_rec IN partner_qualifiers_rec_type
4908 -- OUT :
4909 -- x_return_status OUT VARCHAR2(1)
4910 -- x_msg_count OUT NUMBER
4911 -- x_msg_data OUT VARCHAR2(2000)
4912 -- x_prtnr_access_id_tbl OUT prtnr_aces_tbl_type
4913 --
4914 -- Version :
4915 -- Initial version 1.0
4916 --
4917 -- Notes: API for creating a Channel Team for a Partner Organization.
4918 --
4919 --
4920 -- End of Comments
4921
4922 PROCEDURE Update_Channel_Team
4923 ( p_api_version_number IN NUMBER ,
4924 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE ,
4925 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
4926 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL ,
4927 p_partner_id IN NUMBER ,
4928 p_vad_partner_id IN NUMBER ,
4929 p_mode IN VARCHAR2 := 'UPDATE',
4930 p_login_user IN NUMBER ,
4931 p_upd_prtnr_qflr_flg_rec IN prtnr_qflr_flg_rec_type,
4932 x_return_status OUT NOCOPY VARCHAR2,
4933 x_msg_count OUT NOCOPY NUMBER,
4934 x_msg_data OUT NOCOPY VARCHAR2,
4935 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type
4936 ) IS
4937 l_partner_id NUMBER;
4938 l_partner_party_id NUMBER;
4939 l_vad_partner_id NUMBER;
4940 l_partner_level VARCHAR2(30);
4941 l_api_name CONSTANT VARCHAR2(30) := 'Update_Channel_Team';
4942 l_api_version_number CONSTANT NUMBER := 1.0;
4943 l_return_status VARCHAR2(1);
4944 l_msg_count NUMBER;
4945 l_msg_data VARCHAR(2000);
4946
4947 l_partner_access_id_tbl prtnr_aces_tbl_type;
4948
4949 -- Cursor l_party_id_csr to get the party_id and partner_level for a given partner_id.
4950 CURSOR l_party_id_csr (cv_partner_id NUMBER) IS
4951 SELECT partner_party_id, partner_level
4952 FROM pv_partner_profiles
4953 WHERE partner_id = cv_partner_id
4954 AND status = 'A';
4955
4956 BEGIN
4957 -- Standard Start of API savepoint
4958 SAVEPOINT Update_Channel_Team_pub;
4959
4960 -- Standard call to check for call compatibility.
4961 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
4962 p_api_version_number,
4963 l_api_name,
4964 G_PKG_NAME)
4965 THEN
4966 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4967 END IF;
4968
4969 -- Initialize message list if p_init_msg_list is set to TRUE.
4970 IF FND_API.to_Boolean( p_init_msg_list )
4971 THEN
4972 FND_MSG_PUB.initialize;
4973 END IF;
4974
4975 -- Debug Message
4976 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4977 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || 'start');
4978 END IF;
4979
4980 -- Initialize API return status to SUCCESS
4981 x_return_status := FND_API.G_RET_STS_SUCCESS;
4982
4983 -- =========================================================================
4984 -- Validate Environment
4985 -- =========================================================================
4986
4987 -- Debug Message
4988 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
4989 PVX_Utility_PVT.debug_message('Validating the supplied partner Id.');
4990 END IF;
4991
4992 IF p_partner_id IS NULL OR p_partner_id = FND_API.g_miss_num THEN
4993 fnd_message.Set_Name('PV', 'PV_REQUIRED_VALIDATION');
4994 fnd_message.set_token('FIELD', 'PARTNER_ID');
4995 fnd_msg_pub.Add;
4996 RAISE FND_API.G_EXC_ERROR;
4997 ELSE
4998 l_partner_id := p_partner_id;
4999 END IF;
5000
5001 -- Debug Message
5002 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5003 PVX_Utility_PVT.debug_message('After successful validating the supplied partner Id.');
5004 END IF;
5005
5006 -- Initialize the l_vad_partner_id.
5007 l_vad_partner_id := p_vad_partner_id;
5008
5009 -- Get the Partner Party Id for the given Partner_Id
5010 OPEN l_party_id_csr(l_partner_id);
5011 FETCH l_party_id_csr INTO l_partner_party_id, l_partner_level;
5012 IF l_party_id_csr%NOTFOUND THEN
5013 CLOSE l_party_id_csr;
5014 -- Raise an error saying partner is not active
5015 fnd_message.Set_Name('PV', 'PV_PARTNER_NOT_ACTIVE');
5016 fnd_msg_pub.Add;
5017 RAISE FND_API.G_EXC_ERROR;
5018 ELSE
5019 CLOSE l_party_id_csr;
5020 END IF;
5021
5022 -- chk_partner_qflr_update(p_upd_prtnr_qflr_flg_rec);
5023 -- IF (chk_partner_qflr_updated(p_upd_prtnr_qflr_flg_rec ) = 'Y' OR
5024 -- chk_partner_qflr_updated(p_upd_prtnr_qflr_flg_rec ) = 'U' ) THEN
5025
5026 Create_Channel_Team (
5027 p_api_version_number => 1.0 ,
5028 p_init_msg_list => FND_API.G_FALSE ,
5029 p_commit => FND_API.G_FALSE ,
5030 p_validation_level => FND_API.G_VALID_LEVEL_FULL ,
5031 p_partner_id => l_partner_id ,
5032 p_vad_partner_id => l_vad_partner_id ,
5033 p_mode => p_mode ,
5034 p_login_user => p_login_user,
5035 x_return_status => l_return_status,
5036 x_msg_count => l_msg_count,
5037 x_msg_data => l_msg_data,
5038 x_prtnr_access_id_tbl => l_partner_access_id_tbl );
5039
5040 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5041 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5042 RAISE FND_API.G_EXC_ERROR;
5043 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5044 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
5045 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.Create_Channel_Team');
5046 FND_MSG_PUB.Add;
5047 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5048 END IF;
5049 END IF;
5050
5051 -- END IF; /*** chk_partner_qflr_updated(p_upd_prtnr_qflr_flg_rec ) = 'U' ***/
5052
5053 --
5054 -- End of API body.
5055 --
5056
5057 -- Standard check for p_commit
5058 IF FND_API.to_Boolean( p_commit )
5059 THEN
5060 COMMIT WORK;
5061 END IF;
5062
5063 -- Debug Message
5064 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5065 PVX_UTILITY_PVT.debug_message('Public API: ' || l_api_name || 'end');
5066 END IF;
5067
5068 -- Standard call to get message count and if count is 1, get message info.
5069 FND_MSG_PUB.Count_And_Get
5070 ( p_count => l_msg_count,
5071 p_data => l_msg_data
5072 );
5073
5074 EXCEPTION
5075 WHEN FND_API.g_exc_error THEN
5076 ROLLBACK TO Update_Channel_Team_pub;
5077 x_return_status := FND_API.g_ret_sts_error;
5078
5079 FND_MSG_PUB.count_and_get (
5080 p_encoded => FND_API.g_false
5081 ,p_count => x_msg_count
5082 ,p_data => x_msg_data
5083 );
5084
5085 -- Debug Message
5086 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5087 hz_utility_v2pub.debug_return_messages (
5088 x_msg_count, x_msg_data, 'ERROR');
5089 hz_utility_v2pub.debug('Update_Channel_Team (-)');
5090 END IF;
5091
5092 WHEN FND_API.g_exc_unexpected_error THEN
5093 ROLLBACK TO Update_Channel_Team_pub;
5094 x_return_status := FND_API.g_ret_sts_unexp_error ;
5095
5096 FND_MSG_PUB.count_and_get (
5097 p_encoded => FND_API.g_false
5098 ,p_count => x_msg_count
5099 ,p_data => x_msg_data
5100 );
5101 -- Debug Message
5102 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5103 hz_utility_v2pub.debug_return_messages (
5104 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
5105 hz_utility_v2pub.debug('Update_Channel_Team (-)');
5106 END IF;
5107
5108 WHEN OTHERS THEN
5109 ROLLBACK TO Update_Channel_Team_pub;
5110 x_return_status := FND_API.g_ret_sts_unexp_error ;
5111
5112 FND_MSG_PUB.count_and_get(
5113 p_encoded => FND_API.g_false
5114 ,p_count => x_msg_count
5115 ,p_data => x_msg_data
5116 );
5117
5118 -- Debug Message
5119 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5120 hz_utility_v2pub.debug_return_messages (
5121 x_msg_count, x_msg_data, 'SQL ERROR');
5122 hz_utility_v2pub.debug('Update_Channel_Team (-)');
5123 END IF;
5124 END Update_Channel_Team;
5125
5126 -- Start of Comments
5127 --
5128 -- API name : Process_Channel_Team
5129 -- Type : Public
5130 -- Function : This is a common procedure, which one can call in the following case -
5131 -- * Re-define channel team for partners in TOTAL/INCREMENTAL mode
5132 -- * Re-define channel team for all partners affected by the few territory
5133 -- definition change.
5134 --
5135 -- Pre-reqs :
5136 --
5137 -- Paramaeters :
5138 -- IN :
5139 --
5140 -- p_partner_id IN NUMBER
5141 -- p_vad_partner_id IN NUMBER
5142 -- p_login_user IN VARCHAR2
5143 -- p_prtnr_qualifier_rec IN partner_qualifiers_rec_type
5144 -- OUT :
5145 -- x_return_status OUT VARCHAR2(1)
5146 -- x_msg_count OUT NUMBER
5147 -- x_msg_data OUT VARCHAR2(2000)
5148 -- x_prtnr_access_id_tbl OUT prtnr_aces_tbl_type
5149 --
5150 -- Version :
5151 -- Initial version 1.0
5152 --
5153 -- Notes: API for re-define a Channel Team for Partners Organization.
5154 --
5155 --
5156 -- End of Comments
5157
5158 PROCEDURE Process_Channel_Team (
5159 p_partner_id IN NUMBER ,
5160 p_vad_partner_id IN NUMBER ,
5161 p_login_user IN NUMBER ,
5162 x_return_status OUT NOCOPY VARCHAR2,
5163 x_msg_count OUT NOCOPY NUMBER,
5164 x_msg_data OUT NOCOPY VARCHAR2,
5165 x_prtnr_access_id_tbl OUT NOCOPY prtnr_aces_tbl_type
5166 ) IS
5167
5168 l_return_status VARCHAR2(1) ;
5169 l_msg_count NUMBER;
5170 l_msg_data VARCHAR2(2000);
5171 l_partner_access_id_tbl prtnr_aces_tbl_type;
5172 l_partner_qualifiers_tbl partner_qualifiers_tbl_type;
5173 l_partner_party_id NUMBER;
5174 l_partner_level VARCHAR2(30);
5175
5176
5177 CURSOR l_party_id_csr (cv_partner_id NUMBER) IS
5178 SELECT partner_party_id, pacv.attr_code
5179 FROM pv_partner_profiles ppp,
5180 PV_ATTRIBUTE_CODES_VL pacv
5181 WHERE ppp.partner_id = cv_partner_id
5182 AND ppp.status = 'A'
5183 AND ppp.partner_level = pacv.ATTR_CODE_ID(+);
5184
5185
5186 BEGIN
5187
5188 -- Debug Message
5189 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5190 PVX_UTILITY_PVT.debug_message('Private Procedure:Process_Channel_Team Start');
5191 END IF;
5192
5193 -- Initialize API return status to SUCCESS
5194 x_return_status := FND_API.G_RET_STS_SUCCESS;
5195
5196 -- Call the Delete_Channel_Team for a given Partner_id
5197 Delete_Channel_Team(
5198 p_partner_id => p_partner_id ,
5199 x_return_status => l_return_status,
5200 x_msg_count => l_msg_count,
5201 x_msg_data => l_msg_data );
5202
5203 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5204 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5205 RAISE FND_API.G_EXC_ERROR;
5206 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5207 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
5208 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.Delete_Channel_Team');
5209 FND_MSG_PUB.Add;
5210 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5211 END IF;
5212 END IF;
5213
5214
5215
5216 -- Get the Partner Party Id for the given Partner_Id
5217 OPEN l_party_id_csr(p_partner_id);
5218 FETCH l_party_id_csr INTO l_partner_party_id, l_partner_level;
5219 IF l_party_id_csr%NOTFOUND THEN
5220 CLOSE l_party_id_csr;
5221 -- Raise an error saying partner is not active
5222 fnd_message.Set_Name('PV', 'PV_PARTNER_NOT_ACTIVE');
5223 fnd_msg_pub.Add;
5224 RAISE FND_API.G_EXC_ERROR;
5225 ELSE
5226 CLOSE l_party_id_csr;
5227 END IF;
5228
5229 get_partner_details(
5230 p_party_id => l_partner_party_id ,
5231 x_return_status => l_return_status ,
5232 x_msg_count => l_msg_count ,
5233 x_msg_data => l_msg_data ,
5234 x_partner_qualifiers_tbl => l_partner_qualifiers_tbl );
5235
5236 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5237 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5238 RAISE FND_API.G_EXC_ERROR;
5239 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5240 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5241 END IF;
5242 END IF;
5243
5244 -- Call the Create_Channel_Team_Online for a given Partner_id
5245
5246 Create_Terr_Channel_Team(
5247 p_api_version_number => 1.0,
5248 p_init_msg_list => FND_API.G_FALSE,
5249 p_commit => FND_API.G_FALSE,
5250 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5251 x_return_status => l_return_status,
5252 x_msg_count => l_msg_count,
5253 x_msg_data => l_msg_data,
5254 p_partner_id => p_partner_id,
5255 p_vad_partner_id => p_vad_partner_id,
5256 p_mode => 'BATCH',
5257 p_partner_qualifiers_tbl => l_partner_qualifiers_tbl,
5258 p_login_user => p_login_user,
5259 x_prtnr_access_id_tbl=> x_prtnr_access_id_tbl );
5260
5261
5262 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5263 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
5264 RAISE FND_API.G_EXC_ERROR;
5265 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5266 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
5267 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_TERR_ASSIGN_PUB.Create_Terr_Channel_Team');
5268 FND_MSG_PUB.Add;
5269 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5270 END IF;
5271 END IF;
5272
5273
5274
5275 Create_User_Channel_Team( p_api_version_number => 1.0,
5276 p_init_msg_list => FND_API.G_FALSE,
5277 p_commit => FND_API.G_FALSE,
5278 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5279 p_partner_id => p_partner_id,
5280 p_vad_partner_id => p_vad_partner_id,
5281 p_mode => 'BATCH',
5282 p_login_user => p_login_user,
5283 x_return_status => l_return_status,
5284 x_msg_count => l_msg_count,
5285 x_msg_data => l_msg_data,
5286 x_prtnr_access_id_tbl=> x_prtnr_access_id_tbl );
5287
5288 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5289
5290 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5291 RAISE FND_API.G_EXC_ERROR;
5292 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5293 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
5294 FND_MESSAGE.SET_TOKEN('API_NAME', 'Create_User_Channel_Team');
5295 FND_MSG_PUB.Add;
5296 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5297 END IF;
5298
5299 END IF;
5300
5301 -- Debug Message
5302 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5303 PVX_UTILITY_PVT.debug_message('Private Procedure:Process_Channel_Team End.');
5304 END IF;
5305
5306 EXCEPTION
5307 WHEN FND_API.g_exc_error THEN
5308 x_return_status := FND_API.g_ret_sts_error;
5309
5310 FND_MSG_PUB.count_and_get (
5311 p_encoded => FND_API.g_false
5312 ,p_count => x_msg_count
5313 ,p_data => x_msg_data
5314 );
5315
5316 -- Debug Message
5317 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5318 hz_utility_v2pub.debug_return_messages (
5319 x_msg_count, x_msg_data, 'ERROR');
5320
5321 hz_utility_v2pub.debug('Process_Channel_Team (-)');
5322 END IF;
5323
5324 WHEN FND_API.g_exc_unexpected_error THEN
5325 x_return_status := FND_API.g_ret_sts_unexp_error ;
5326 FND_MSG_PUB.count_and_get (
5327 p_encoded => FND_API.g_false
5328 ,p_count => x_msg_count
5329 ,p_data => x_msg_data
5330 );
5331
5332 -- Debug Message
5333 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5334 hz_utility_v2pub.debug_return_messages (
5335 x_msg_count, x_msg_data, 'UNEXPECTED ERROR');
5336 hz_utility_v2pub.debug('Process_Channel_Team (-)');
5337 END IF;
5338
5339 WHEN OTHERS THEN
5340 x_return_status := FND_API.g_ret_sts_unexp_error ;
5341 FND_MSG_PUB.count_and_get(
5342 p_encoded => FND_API.g_false
5343 ,p_count => x_msg_count
5344 ,p_data => x_msg_data
5345 );
5346
5347 -- Debug Message
5348 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
5349 hz_utility_v2pub.debug_return_messages (
5350 x_msg_count, x_msg_data, 'SQL ERROR');
5351 hz_utility_v2pub.debug('Process_Channel_Team (-)');
5352 END IF;
5353 END Process_Channel_Team;
5354 -- Start of Comments
5355 --
5356 -- API name : do_Channel_Team_Assignment
5357 -- Type : Public
5358 -- Function : This procedure is to be called by all the newly swapned child preocess by the
5359 -- CC job.
5360 --
5361 --
5362 --
5363 --
5364 -- Pre-reqs :
5365 --
5366 -- Paramaeters :
5367 -- IN :
5368 --
5369 -- OUT :
5370 -- ERRBUF OUT NOCOPY VARCHAR2,
5371 -- RETCODE OUT NOCOPY VARCHAR2
5372 --
5373 -- Version :
5374 -- Initial version 1.0
5375 --
5376 -- Notes: Concurrent request program for re-assignment of Channel Team
5377 -- for all the Partner Organizations stored in PV_PARTNER_PROFILES
5378 -- table.
5379 --
5380 --
5381 -- End of Comments
5382 PROCEDURE do_Channel_Team_Assignment(
5383 p_mode IN VARCHAR2,
5384 p_first_partner_id IN NUMBER,
5385 p_last_partner_id IN NUMBER,
5386 x_error_count OUT NOCOPY NUMBER)
5387 IS
5388
5389 -- Local variables declaration
5390 l_partner_id NUMBER;
5391 lv_partner_id NUMBER;
5392 l_vad_partner_id NUMBER;
5393 l_login_user_id NUMBER ;
5394 l_status BOOLEAN;
5395 l_return_status VARCHAR2(1);
5396 l_msg_count NUMBER;
5397 l_msg_data VARCHAR2(2000);
5398 l_err_mesg VARCHAR2(255);
5399 l_partner_access_id_tbl prtnr_aces_tbl_type;
5400 l_request_id NUMBER := fnd_profile.value('CONC_REQUEST_ID');
5401 l_program_application_id NUMBER := fnd_profile.value('CONC_PROGRAM_APPICATION_ID');
5402 l_program_id NUMBER := fnd_profile.value('CONC_PROGRAM_ID');
5403 l_program_update_date DATE := sysdate;
5404 l_change_partner PV_BATCH_CHG_PRTNR_PVT.Batch_Chg_Prtnrs_rec_type;
5405 rec_index NUMBER := 0;
5406 l_newline VARCHAR2(1) := FND_GLOBAL.Newline;
5407 l_batch_partner_id NUMBER;
5408 l_batch_oversion_number NUMBER;
5409 l_mode VARCHAR2(15) := p_mode;
5410 l_first_partner_id NUMBER := p_first_partner_id;
5411 l_last_partner_id NUMBER := p_last_partner_id;
5412 l_total_records NUMBER ;
5413
5414 --New
5415 l_partner_name VARCHAR2(360);
5416 l_partner_err_cnt NUMBER;
5417
5418
5419 TYPE partner_list_rec_type IS RECORD
5420 (
5421 --New
5422 partner_name VARCHAR2(360),
5423 partner_id NUMBER,
5424 vad_partner_id NUMBER,
5425 object_version_number NUMBER,
5426 created_by NUMBER
5427 ) ;
5428
5429 g_miss_partner_list_rec partner_list_rec_type := NULL;
5430 TYPE partner_list_tbl_type IS TABLE OF partner_list_rec_type INDEX BY BINARY_INTEGER;
5431 g_miss_partner_list_tbl partner_list_tbl_type;
5432
5433 l_partner_list_tbl partner_list_tbl_type ;
5434 l_object_version_number NUMBER;
5435 l_active_partner VARCHAR2(1) := 'N';
5436
5437 -- Cursor to select all partner_id's between cv_first_partner_id and cv_last_partner_id
5438 -- from PV_TAP_BATCH_CHG_PARTNERS table to delete them from the table, if running mode is TOTAL
5439 CURSOR l_batch_partners_csr(cv_first_partner_id NUMBER, cv_last_partner_id NUMBER) IS
5440 SELECT partner_id , object_version_number
5441 FROM PV_TAP_BATCH_CHG_PARTNERS
5442 WHERE PARTNER_ID BETWEEN cv_first_partner_id AND cv_last_partner_id;
5443
5444 -- Cursor to select all the partner_id's between cv_first_partner_id and cv_last_partner_id
5445 -- from PV_TAP_BATCH_CHG_PARTNERS table for channel team re-assignment in case of INCREMENTAL mode.
5446 CURSOR l_chng_prtnrs_csr(cv_first_partner_id NUMBER, cv_last_partner_id NUMBER) IS
5447 /*
5448 SELECT partner_id, vad_partner_id, object_version_number,created_by
5449 FROM PV_TAP_BATCH_CHG_PARTNERS
5450 WHERE PROCESSED_FLAG = 'P'
5451 AND PARTNER_ID BETWEEN cv_first_partner_id AND cv_last_partner_id;
5452 */
5453 --New
5454 SELECT hzp.party_name partner_name,ptbcp.partner_id, ptbcp.vad_partner_id, ptbcp.object_version_number,ptbcp.created_by
5455 FROM PV_TAP_BATCH_CHG_PARTNERS ptbcp,
5456 PV_PARTNER_PROFILES ppp,
5457 HZ_PARTIES hzp
5458 WHERE ptbcp.PROCESSED_FLAG = 'P'
5459 -- AND ptbcp.PARTNER_ID BETWEEN cv_first_partner_id AND cv_last_partner_id
5460 AND ptbcp.PARTNER_ID >= cv_first_partner_id AND ptbcp.PARTNER_ID <= cv_last_partner_id
5461 AND ptbcp.partner_id = ppp.partner_id
5462 AND ppp.partner_party_id= hzp.party_id
5463 ORDER BY hzp.party_name ;
5464
5465 -- Cursor to select all the partner_id's between cv_first_partner_id and cv_last_partner_id
5466 -- from PV_PARTNER_PROFILES table for channel team re-assignment in case of TOTAL mode.
5467 CURSOR l_profile_partners_csr(cv_first_partner_id NUMBER, cv_last_partner_id NUMBER) IS
5468 /*
5469 SELECT distinct partner_id, NULL "vad_partner_id", NULL "object_version_number" , created_by
5470 FROM PV_PARTNER_PROFILES
5471 WHERE STATUS = 'A'
5472 AND PARTNER_ID BETWEEN cv_first_partner_id AND cv_last_partner_id;
5473 */
5474 --New
5475 SELECT distinct hzp.party_name partner_name, partner_id,
5476 NULL "vad_partner_id", NULL "object_version_number" , ppp.created_by
5477 FROM PV_PARTNER_PROFILES ppp,
5478 HZ_PARTIES hzp
5479 WHERE ppp.partner_party_id = hzp.party_id
5480 -- AND ppp.PARTNER_ID BETWEEN cv_first_partner_id AND cv_last_partner_id;
5481 AND ppp.PARTNER_ID >= cv_first_partner_id AND ppp.PARTNER_ID <= cv_last_partner_id
5482 AND ppp.STATUS = 'A'
5483 order by hzp.party_name;
5484
5485
5486 BEGIN
5487 -- Standard Start of savepoint
5488 SAVEPOINT do_Assign_Channel_Team_Pvt;
5489
5490 -- RETCODE := FND_API.G_RET_STS_SUCCESS;
5491
5492 -- Header Message for Processing starts
5493 fnd_message.set_name('PV', 'PV_TAP_CTEAM_HDR');
5494 fnd_message.set_token( 'P_DATE_TIME', TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') );
5495 Write_log (1, substrb(fnd_message.get, 1, 1000));
5496
5497 rec_index := 0;
5498 IF ( l_mode = 'TOTAL' ) THEN
5499 FOR l_profile_partner_rec IN l_profile_partners_csr(l_first_partner_id, l_last_partner_id)
5500 LOOP
5501 rec_index := rec_index + 1;
5502 l_partner_list_tbl(rec_index).partner_name := l_profile_partner_rec.partner_name;
5503 l_partner_list_tbl(rec_index).partner_id := l_profile_partner_rec.partner_id;
5504 l_partner_list_tbl(rec_index).vad_partner_id := null;
5505 l_partner_list_tbl(rec_index).object_version_number := 1;
5506 l_partner_list_tbl(rec_index).created_by := l_profile_partner_rec.created_by;
5507 END LOOP;
5508
5509
5510 -- WIPE OUT ALL THE PARTNER RECORDS FROM PV_TAP_BATCH_CHNG_PARTNERS TABLE --
5511 FOR l_batch_partner_list IN l_batch_partners_csr(l_first_partner_id, l_last_partner_id)
5512 LOOP
5513 l_batch_partner_id := l_batch_partner_list.partner_id;
5514 l_batch_oversion_number := l_batch_partner_list.object_version_number;
5515 PV_BATCH_CHG_PRTNR_PVT.Delete_Batch_Chg_Prtnrs(
5516 p_api_version_number => 1.0 ,
5517 p_init_msg_list => FND_API.G_FALSE,
5518 p_commit => FND_API.G_FALSE,
5519 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5520 x_return_status => l_return_status,
5521 x_msg_count => l_msg_count,
5522 x_msg_data => l_msg_data,
5523 p_partner_id => l_batch_partner_id,
5524 p_object_version_number => l_batch_oversion_number);
5525
5526 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5527 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5528 RAISE FND_API.G_EXC_ERROR;
5529 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5530 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5531 END IF;
5532 END IF;
5533 END LOOP;
5534
5535 ELSIF ( l_mode = 'INCREMENTAL') THEN
5536 FOR l_change_partner_rec IN l_chng_prtnrs_csr(l_first_partner_id, l_last_partner_id)
5537 LOOP
5538 rec_index := rec_index + 1;
5539 l_partner_list_tbl(rec_index).partner_name := l_change_partner_rec.partner_name;
5540 l_partner_list_tbl(rec_index).partner_id := l_change_partner_rec.partner_id;
5541 l_partner_list_tbl(rec_index).vad_partner_id := l_change_partner_rec.vad_partner_id;
5542 l_partner_list_tbl(rec_index).object_version_number := l_change_partner_rec.object_version_number;
5543 l_partner_list_tbl(rec_index).created_by := l_change_partner_rec.created_by;
5544 END LOOP;
5545 END IF;
5546
5547 -- Process all the Partner records selected in l_partners_list PL/SQL table
5548 IF ( l_partner_list_tbl.count > 0) THEN
5549 FOR i IN 1..l_partner_list_tbl.last
5550 LOOP
5551 BEGIN
5552 -- Standard Start of savepoint
5553 SAVEPOINT Process_Partner_Channel_Team;
5554
5555 -- Initilize the local variables.
5556 l_partner_name := l_partner_list_tbl(i).partner_name;
5557 l_partner_id := l_partner_list_tbl(i).partner_id ;
5558 l_vad_partner_id := l_partner_list_tbl(i).vad_partner_id;
5559 l_object_version_number := l_partner_list_tbl(i).object_version_number;
5560 l_login_user_id := l_partner_list_tbl(i).created_by;
5561
5562 Process_Channel_Team(
5563 p_partner_id => l_partner_id ,
5564 p_vad_partner_id => l_vad_partner_id ,
5565 p_login_user => l_login_user_id ,
5566 x_return_status => l_return_status,
5567 x_msg_count => l_msg_count ,
5568 x_msg_data => l_msg_data ,
5569 x_prtnr_access_id_tbl => l_partner_access_id_tbl );
5570
5571 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5572 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5573 RAISE FND_API.G_EXC_ERROR;
5574 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5575 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5576 END IF;
5577 END IF;
5578
5579 IF ( l_mode = 'TOTAL' ) THEN
5580 -- Create an error record in PV_TAP_BATCH_CHG_PARTNERS table with following
5581 -- Concurrent request related attribute values
5582 -- * REQUEST_ID
5583 -- * PROGRAM_APPLICATION_ID
5584 -- * PROGRAM_ID
5585 -- * PROGRAM_UPDATE_DATE
5586 ------------------------------------------------------------
5587 l_change_partner.partner_id := l_partner_id ;
5588 l_change_partner.request_id := l_request_id ;
5589 l_change_partner.program_application_id := l_program_application_id ;
5590 l_change_partner.program_id := l_program_id ;
5591 l_change_partner.program_update_date := l_program_update_date;
5592 l_change_partner.object_version_number := 1;
5593 IF ( l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
5594 l_change_partner.processed_flag := 'P';
5595 ELSE
5596 l_change_partner.processed_flag := 'S';
5597 END IF;
5598
5599 PV_BATCH_CHG_PRTNR_PVT.Create_Batch_Chg_Partners(
5600 p_api_version_number => 1.0 ,
5601 p_init_msg_list => FND_API.G_TRUE,
5602 p_commit => FND_API.G_FALSE,
5603 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5604 x_return_status => l_return_status,
5605 x_msg_count => l_msg_count,
5606 x_msg_data => l_msg_data,
5607 p_batch_chg_prtnrs_rec => l_change_partner,
5608 x_partner_id => lv_partner_id );
5609
5610 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5611 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5612 RAISE FND_API.G_EXC_ERROR;
5613 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5614 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5615 END IF;
5616 END IF;
5617 ELSIF ( l_mode = 'INCREMENTAL' ) THEN
5618 -- Update the PV_TAP_BATCH_CHG_PARTNERS table for following
5619 -- Concurrent request related attribute values
5620 -- * REQUEST_ID
5621 -- * PROGRAM_APPLICATION_ID
5622 -- * PROGRAM_ID
5623 -- * PROGRAM_UPDATE_DATE
5624 ------------------------------------------------------------
5625 l_change_partner.partner_id := l_partner_id ;
5626 l_change_partner.request_id := l_request_id ;
5627 l_change_partner.program_application_id := l_program_application_id ;
5628 l_change_partner.program_id := l_program_id ;
5629 l_change_partner.program_update_date := l_program_update_date;
5630 l_change_partner.object_version_number := l_object_version_number;
5631 l_change_partner.last_update_date := sysdate;
5632 l_change_partner.last_update_by := FND_GLOBAL.user_id;
5633 l_change_partner.creation_date := sysdate;
5634 l_change_partner.created_by := FND_GLOBAL.user_id;
5635 l_change_partner.last_update_login := FND_GLOBAL.user_id;
5636
5637 IF ( l_return_status = FND_API.G_RET_STS_SUCCESS ) THEN
5638 l_change_partner.processed_flag := 'S';
5639 END IF;
5640
5641 PV_BATCH_CHG_PRTNR_PVT.Update_Batch_Chg_Partners(
5642 p_api_version_number => 1.0 ,
5643 p_init_msg_list => FND_API.G_TRUE,
5644 p_commit => FND_API.G_FALSE,
5645 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5646 x_return_status => l_return_status,
5647 x_msg_count => l_msg_count,
5648 x_msg_data => l_msg_data,
5649 p_batch_chg_prtnrs_rec => l_change_partner );
5650
5651 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5652 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5653 RAISE FND_API.G_EXC_ERROR;
5654 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5655 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5656 END IF;
5657 END IF;
5658 END IF;
5659
5660 COMMIT;
5661
5662 -- Debug statement for each partner_id
5663 fnd_message.set_name('PV', 'PV_TAP_CTEAM_MSG');
5664 ---New
5665 fnd_message.set_token('PARTNER_NAME', rpad(l_partner_name,40));
5666 fnd_message.set_token('PARTNER_ID', rpad(l_partner_id,15));
5667 -- fnd_message.set_token('PARTNER_ID', l_partner_id);
5668 Write_log (1, substrb(fnd_message.get, 1, 255));
5669
5670 EXCEPTION
5671 WHEN FND_API.G_EXC_ERROR THEN
5672 FND_MSG_PUB.count_and_get (
5673 p_encoded => FND_API.g_false
5674 ,p_count => l_msg_count
5675 ,p_data => l_msg_data
5676 );
5677 --new
5678 -- RETCODE := FND_API.G_RET_STS_ERROR;
5679 l_partner_err_cnt := l_partner_err_cnt +1;
5680 apps.fnd_message.set_encoded(apps.fnd_msg_pub.get(l_msg_count));
5681 l_msg_data := substr(apps.fnd_message.get,1,254);
5682
5683 -- Debug statement for each partner_id
5684 fnd_message.set_name('PV', 'PV_TAP_CTEAM_ERR');
5685 --new
5686 fnd_message.set_token('PARTNER_NAME', rpad(l_partner_name,40));
5687 fnd_message.set_token('PARTNER_ID', rpad(l_partner_id,15));
5688 -- fnd_message.set_token('PARTNER_ID', l_partner_id);
5689
5690 fnd_message.set_token('ERROR', l_msg_data);
5691 Write_log (1, substrb(fnd_message.get, 1, 255));
5692 ROLLBACK TO Process_Partner_Channel_Team;
5693 fnd_msg_pub.Delete_Msg;
5694
5695 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5696 FND_MSG_PUB.count_and_get (
5697 p_encoded => FND_API.g_false
5698 ,p_count => l_msg_count
5699 ,p_data => l_msg_data
5700 );
5701 --new
5702 -- RETCODE := FND_API.G_RET_STS_UNEXP_ERROR;
5703 l_partner_err_cnt := l_partner_err_cnt +1;
5704 apps.fnd_message.set_encoded(apps.fnd_msg_pub.get(l_msg_count));
5705 l_msg_data := substr(apps.fnd_message.get,1,254);
5706
5707 -- Debug statement for each partner_id
5708 fnd_message.set_name('PV', 'PV_TAP_CTEAM_ERR');
5709 --new
5710 fnd_message.set_token('PARTNER_NAME', rpad(l_partner_name,40));
5711 fnd_message.set_token('PARTNER_ID', rpad(l_partner_id,15));
5712 -- fnd_message.set_token('PARTNER_ID', l_partner_id);
5713 fnd_message.set_token('ERROR', l_msg_data);
5714 Write_log (1, substrb(fnd_message.get, 1, 255));
5715 ROLLBACK TO Process_Partner_Channel_Team;
5716 fnd_msg_pub.Delete_Msg;
5717
5718 WHEN OTHERS THEN
5719 FND_MSG_PUB.count_and_get (
5720 p_encoded => FND_API.g_false
5721 ,p_count => l_msg_count
5722 ,p_data => l_msg_data
5723 );
5724
5725 -- RETCODE := '2';
5726 l_partner_err_cnt := l_partner_err_cnt +1;
5727 apps.fnd_message.set_encoded(apps.fnd_msg_pub.get(l_msg_count));
5728 l_msg_data := substr(apps.fnd_message.get,1,254);
5729
5730 -- Debug statement for each partner_id
5731 fnd_message.set_name('PV', 'PV_TAP_CTEAM_ERR');
5732 --new
5733 fnd_message.set_token('PARTNER_NAME', rpad(l_partner_name,40));
5734 fnd_message.set_token('PARTNER_ID', rpad(l_partner_id,15));
5735 -- fnd_message.set_token('PARTNER_ID', l_partner_id);
5736 fnd_message.set_token('ERROR', l_msg_data);
5737 Write_log (1, substrb(fnd_message.get, 1, 255));
5738 ROLLBACK TO Process_Partner_Channel_Team;
5739 fnd_msg_pub.Delete_Msg;
5740 END ;
5741 END LOOP;
5742 END IF ;
5743
5744
5745 --New
5746 x_error_count := l_partner_err_cnt;
5747 -- Footer Message for Processing End.
5748 fnd_message.set_name('PV', 'PV_TAP_CTEAM_FOOTER');
5749 fnd_message.set_token('TOT_PRTNR_CNT', to_char(l_partner_list_tbl.count) );
5750 fnd_message.set_token('SUC_PRTNR_CNT', to_char(l_partner_list_tbl.count-l_partner_err_cnt) );
5751 fnd_message.set_token('ERR_PRTNR_CNT', to_char(l_partner_err_cnt) );
5752 fnd_message.set_token('P_DATE_TIME', TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') );
5753 Write_log (1, substrb(fnd_message.get, 1, 1000));
5754
5755
5756 --till here
5757
5758 COMMIT;
5759
5760 EXCEPTION
5761 WHEN FND_API.G_EXC_ERROR THEN
5762 ROLLBACK TO Assign_Channel_Team_Pvt;
5763 --RETCODE := FND_API.G_RET_STS_ERROR;
5764 l_err_mesg := 'SQLCODE ' || to_char(SQLCODE) || ' SQLERRM ' || substr(SQLERRM, 1, 100);
5765 --ERRBUF := l_err_mesg ;
5766 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', SQLERRM);
5767 Write_log (1, l_err_mesg);
5768
5769 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5770 ROLLBACK TO Assign_Channel_Team_Pvt;
5771 --RETCODE := FND_API.G_RET_STS_UNEXP_ERROR;
5772 l_err_mesg := 'SQLCODE ' || to_char(SQLCODE) || ' SQLERRM ' || substr(SQLERRM, 1, 100);
5773 --ERRBUF := l_err_mesg ;
5774 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', SQLERRM);
5775 Write_log (1, l_err_mesg);
5776
5777 WHEN OTHERS THEN
5778 ROLLBACK TO Assign_Channel_Team_Pvt;
5779 --RETCODE := '2';
5780 l_err_mesg := 'SQLCODE ' || to_char(SQLCODE) || ' SQLERRM ' || substr(SQLERRM, 1, 100);
5781 --ERRBUF := l_err_mesg ;
5782 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', SQLERRM);
5783 Write_log (1, l_err_mesg);
5784
5785 END do_Channel_Team_Assignment;
5786
5787 -- Start of Comments
5788 --
5789 -- API name : Assign_Channel_Team
5790 -- Type : Public
5791 -- Function : The purpose of this procedure is to Update the Channel
5792 -- team for all partner_id by running in TOTAL_MODE. This procedure attached to
5793 -- 'Territory assignment for partners in TOTAL mode' concurrent request program.
5794 -- It reads all the partner_id from PV_PARTNER_PROFILES table and re-assign the
5795 -- channel team.
5796 --
5797 -- Pre-reqs :
5798 --
5799 -- Paramaeters :
5800 -- IN :
5801 --
5802 -- OUT :
5803 -- ERRBUF OUT NOCOPY VARCHAR2,
5804 -- RETCODE OUT NOCOPY VARCHAR2
5805 --
5806 -- Version :
5807 -- Initial version 1.0
5808 --
5809 -- Notes: Concurrent request program for re-assignment of Channel Team
5810 -- for all the Partner Organizations stored in PV_PARTNER_PROFILES
5811 -- table.
5812 --
5813 --
5814 -- End of Comments
5815
5816 PROCEDURE Assign_Channel_Team(
5817 ERRBUF OUT NOCOPY VARCHAR2,
5818 RETCODE OUT NOCOPY VARCHAR2,
5819 p_mode IN VARCHAR2,
5820 p_first_partner_id IN NUMBER,
5821 p_last_partner_id IN NUMBER
5822 )
5823 IS
5824 -- Cursor to select count of all the partner_id's from PV_TAP_BATCH_CHG_PARTNERS table
5825 -- for channel team re-assignment in case of INCREMENTAL mode.
5826 CURSOR l_change_partners_count_csr IS
5827 SELECT /*+ index(ptbcp1 PV_TAP_BATCH_CHG_PARTNERS_N1) */ count(*)
5828 FROM PV_TAP_BATCH_CHG_PARTNERS
5829 WHERE PROCESSED_FLAG = 'P' ;
5830
5831 -- Cursor to select all count of all the partner_id's from PV_PARTNER_PROFILES table
5832 -- for channel team re-assignment in case of TOTAL mode.
5833 CURSOR l_profile_partners_count_csr IS
5834 SELECT count(*)
5835 FROM PV_PARTNER_PROFILES
5836 WHERE STATUS = 'A' ;
5837
5838 -- Cursor to select single partner_id from PV_TAP_BATCH_CHG_PARTNERS table
5839 -- for channel team re-assignment in case if only one partner exist.
5840 CURSOR l_single_batch_partner_csr IS
5841 SELECT /*+ index(ptbcp1 PV_TAP_BATCH_CHG_PARTNERS_N1) */ partner_id
5842 FROM PV_TAP_BATCH_CHG_PARTNERS
5843 WHERE PROCESSED_FLAG = 'P' ;
5844
5845 -- Cursor to select single partner_id from PV_PARTNER_PROFILES table
5846 -- for channel team re-assignment in case if only one partner exist.
5847 CURSOR l_single_profile_partner_csr IS
5848 SELECT partner_id
5849 FROM PV_PARTNER_PROFILES
5850 WHERE STATUS = 'A' ;
5851
5852 -- Cursor to select partner_id's in batches from PV_TAP_BATCH_CHG_PARTNERS table
5853 -- for channel team re-assignment in case of INCREMENTAL mode based on batch size.
5854 CURSOR l_change_partners_csr(cv_batch_size NUMBER) IS
5855 SELECT first.f,decode(last.l,null,(SELECT max(partner_id)
5856 FROM PV_TAP_BATCH_CHG_PARTNERS
5857 WHERE partner_id >= first.f
5858 AND PROCESSED_FLAG = 'P'
5859 AND last.l is null),last.l) la
5860 FROM
5861 (SELECT decode(mod(rn,cv_batch_size),1,partner_id,null) f,null last,rownum rn
5862 FROM ( SELECT PARTNER_ID,ROWNUM RN
5863 FROM ( SELECT /*+ index(ptbcp1 PV_TAP_BATCH_CHG_PARTNERS_N1) */ partner_id
5864 FROM PV_TAP_BATCH_CHG_PARTNERS
5865 WHERE PROCESSED_FLAG = 'P'
5866 ORDER BY partner_id asc ) )
5867 WHERE decode(mod(rn,cv_batch_size),1,partner_id,null) IS NOT null ) first,
5868 (SELECT null first,decode(mod(rn,cv_batch_size),0,partner_id,null) l,rownum rn
5869 FROM ( SELECT PARTNER_ID,ROWNUM RN
5870 FROM ( SELECT /*+ index(ptbcp1 PV_TAP_BATCH_CHG_PARTNERS_N1) */ partner_id
5871 FROM PV_TAP_BATCH_CHG_PARTNERS
5872 WHERE PROCESSED_FLAG = 'P'
5873 ORDER BY partner_id asc) )
5874 WHERE decode(mod(rn,cv_batch_size),0,partner_id,null) is not null) last
5875 WHERE first.rn=last.rn(+);
5876
5877 -- Cursor to select partner_id's in batches from PV_PARTNER_PROFILES table
5878 -- for channel team re-assignment in case of TOTAL mode based on batch size.
5879 CURSOR l_profile_partners_csr(cv_batch_size NUMBER) IS
5880 SELECT first.f,decode(last.l,null,(SELECT max(partner_id)
5881 FROM PV_PARTNER_PROFILES
5882 WHERE partner_id >= first.f
5883 AND STATUS = 'A'
5884 AND last.l is null),last.l) la
5885 FROM
5886 (SELECT decode(mod(rn,cv_batch_size),1,partner_id,null) f,null last,rownum rn
5887 FROM ( SELECT PARTNER_ID,ROWNUM RN
5888 FROM ( SELECT partner_id
5889 FROM PV_PARTNER_PROFILES
5890 WHERE STATUS = 'A'
5891 ORDER BY partner_id asc ) )
5892 WHERE decode(mod(rn,cv_batch_size),1,partner_id,null) IS NOT null ) first ,
5893 (SELECT null first,decode(mod(rn,cv_batch_size),0,partner_id,null) l,rownum rn
5894 FROM ( SELECT PARTNER_ID,ROWNUM RN
5895 FROM( SELECT partner_id
5896 FROM PV_PARTNER_PROFILES
5897 WHERE STATUS = 'A'
5898 ORDER BY partner_id asc) )
5899 WHERE decode(mod(rn,cv_batch_size),0,partner_id,null) is not null) last
5900 WHERE first.rn=last.rn(+);
5901
5902 -- Declaration of Local variables.
5903
5904 l_batch_size NUMBER;
5905 l_total_records NUMBER;
5906 l_mode VARCHAR2(15) := p_mode;
5907 l_status BOOLEAN;
5908 l_request_id NUMBER;
5909 l_total_children NUMBER;
5910
5911 l_first_partner_id NUMBER := p_first_partner_id;
5912 l_last_partner_id NUMBER := p_last_partner_id;
5913 l_new_request_id NUMBER;
5914
5915 l_partner_err_cnt NUMBER;
5916
5917 l_wait_status BOOLEAN;
5918 l_err_mesg VARCHAR2(4000);
5919 x_phase VARCHAR2(30);
5920 x_status VARCHAR2(30);
5921 x_dev_phase VARCHAR2(30);
5922 x_dev_status VARCHAR2(30);
5923 x_message VARCHAR2(240);
5924
5925 TYPE request_id_tbl IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
5926 l_request_id_tbl request_id_tbl;
5927
5928 BEGIN
5929 -- Standard Start of savepoint
5930 SAVEPOINT Assign_Channel_Team_Pvt;
5931 l_partner_err_cnt := 0;
5932 RETCODE := FND_API.G_RET_STS_SUCCESS;
5933
5934 IF p_first_partner_id IS NOT NULL THEN
5935
5936 do_Channel_Team_Assignment(
5937 p_mode => p_mode,
5938 p_first_partner_id => p_first_partner_id,
5939 p_last_partner_id => p_last_partner_id,
5940 x_error_count => l_partner_err_cnt);
5941
5942 IF (l_partner_err_cnt > 0) THEN
5943 RETCODE := FND_API.G_RET_STS_ERROR;
5944 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('WARNING', SQLERRM);
5945 END IF;
5946
5947
5948
5949 ELSIF p_first_partner_id is NULL THEN
5950 -- Get the total_records for processing for Channel Team Assignment
5951 IF p_mode = 'TOTAL' THEN
5952 OPEN l_profile_partners_count_csr;
5953 FETCH l_profile_partners_count_csr INTO l_total_records;
5954 CLOSE l_profile_partners_count_csr;
5955 ELSE
5956 OPEN l_change_partners_count_csr;
5957 FETCH l_change_partners_count_csr INTO l_total_records;
5958 CLOSE l_change_partners_count_csr;
5959 END IF;
5960
5961 -- IF l_total_recors is NULL then initialize with 0.
5962 IF (l_total_records < 0 OR l_total_records is NULL) THEN
5963 l_total_records := 0;
5964 END IF;
5965
5966 --Get the batch size for each thread from profile
5967 l_batch_size := nvl(to_number(FND_PROFILE.value('PV_BATCH_SIZE_FOR_TAP_PROCESSING')),0);
5968
5969 --handle condition if batch size for parallel import is set to -ve or zero.
5970 IF l_batch_size <= 0 THEN
5971 l_batch_size := l_total_records;
5972 END IF;
5973
5974 IF l_total_records > 1 THEN
5975
5976 --Calculate number of child processes required
5977 l_total_children := ceil(l_total_records/l_batch_size);
5978
5979 IF (l_total_children <= 0 ) THEN
5980 l_total_children := 1;
5981 END IF;
5982
5983 IF ( p_mode = 'TOTAL' ) THEN
5984 OPEN l_profile_partners_csr(l_batch_size);
5985 ELSE
5986 OPEN l_change_partners_csr(l_batch_size);
5987 END IF;
5988
5989 --Spawn child conc requests
5990 FOR child_idx IN 1..l_total_children
5991 LOOP
5992
5993 IF ( p_mode = 'TOTAL' ) THEN
5994 FETCH l_profile_partners_csr INTO l_first_partner_id, l_last_partner_id ;
5995 ELSE
5996 FETCH l_change_partners_csr INTO l_first_partner_id, l_last_partner_id ;
5997 END IF;
5998
5999 l_new_request_id := FND_REQUEST.SUBMIT_REQUEST (
6000 application => 'PV',
6001 program => 'PVTAPTR',
6002 argument1 => p_mode,
6003 argument2 => l_first_partner_id,
6004 argument3 => l_last_partner_id
6005 );
6006
6007 IF l_new_request_id = 0 THEN
6008 write_log(1, 'Error during submission of child request #'||child_idx);
6009 END IF;
6010
6011 write_log(1, 'Spawned child# '||to_char(child_idx)||' request_id: '||to_char(l_new_request_id));
6012
6013 l_request_id_tbl(child_idx) := l_new_request_id;
6014 END LOOP;
6015
6016 IF ( p_mode = 'TOTAL' ) THEN
6017 CLOSE l_profile_partners_csr;
6018 ELSE
6019 CLOSE l_change_partners_csr;
6020 END IF;
6021
6022 commit;
6023 --Wait for children to finish
6024 FOR child_idx IN 1 .. l_request_id_tbl.count
6025 LOOP
6026
6027 l_wait_status := FND_CONCURRENT.WAIT_FOR_REQUEST (
6028 request_id => l_request_id_tbl(child_idx),
6029 phase => x_phase,
6030 status => x_status,
6031 dev_phase => x_dev_phase,
6032 dev_status => x_dev_status,
6033 message => x_message
6034 );
6035
6036 END LOOP;
6037 ELSIF (l_total_records = 1 ) THEN
6038 IF ( p_mode = 'TOTAL' ) THEN
6039 OPEN l_single_profile_partner_csr;
6040 FETCH l_single_profile_partner_csr INTO l_first_partner_id;
6041 CLOSE l_single_profile_partner_csr;
6042 l_last_partner_id := l_first_partner_id;
6043 ELSE
6044 OPEN l_single_batch_partner_csr;
6045 FETCH l_single_batch_partner_csr INTO l_first_partner_id;
6046 CLOSE l_single_batch_partner_csr;
6047 l_last_partner_id := l_first_partner_id;
6048 END IF;
6049
6050 do_Channel_Team_Assignment(
6051 p_mode => l_mode,
6052 p_first_partner_id => l_first_partner_id,
6053 p_last_partner_id => l_last_partner_id,
6054 x_error_count => l_partner_err_cnt);
6055 ELSE -- l_total_records = 0
6056 write_log(3, 'Batch size: 0');
6057 l_total_children := 0;
6058 END IF; --- l_total_records > 0
6059 END IF; --- p_first_partner_id is NULL
6060
6061 -- Footer Message for Main Processing End.
6062 fnd_message.set_name('PV', 'PV_TAP_CTEAM_FOOTER');
6063 fnd_message.set_token('P_DATE_TIME', TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') );
6064 Write_log (1, substrb(fnd_message.get, 1, 255));
6065
6066 EXCEPTION
6067 WHEN OTHERS THEN
6068 ROLLBACK TO Assign_Channel_Team_Pvt;
6069 RETCODE := FND_API.G_RET_STS_ERROR;
6070 l_err_mesg := 'SQLCODE ' || to_char(SQLCODE) || ' SQLERRM ' || substr(SQLERRM, 1, 100);
6071 ERRBUF := l_err_mesg ;
6072 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', SQLERRM);
6073 Write_log (1, l_err_mesg);
6074
6075 END Assign_Channel_Team;
6076
6077
6078 -- Start of Comments
6079 --
6080 -- API name : Process_Sub_Territories
6081 -- Type : Public
6082 -- Function : The purpose of this procedure is to Update the Channel team for
6083 -- all those Partner's, who get affected by the change in territory
6084 -- definition. This procedure attached to 'Re-define Channel team for
6085 -- specific territories' concurrent request program. It reads all the
6086 -- partner_id from PV_PARTNER_ACCESSES table and re-assign the channel
6087 -- team.
6088 --
6089 -- Pre-reqs :
6090 --
6091 -- Paramaeters :
6092 -- IN :
6093 --
6094 -- OUT :
6095 -- ERRBUF OUT NOCOPY VARCHAR2,
6096 -- RETCODE OUT NOCOPY VARCHAR2
6097 --
6098 -- Version :
6099 -- Initial version 1.0
6100 --
6101 -- Notes: Concurrent request program for re-assignment of Channel Team
6102 -- for all the Partner Organizations stored in PV_PARTNER_PROFILES
6103 -- table.
6104 --
6105 --
6106 -- End of Comments
6107
6108 PROCEDURE Process_Sub_Territories(
6109 ERRBUF OUT NOCOPY VARCHAR2,
6110 RETCODE OUT NOCOPY VARCHAR2,
6111 p_terr_id1 IN NUMBER,
6112 p_terr_id2 IN NUMBER,
6113 p_terr_id3 IN NUMBER,
6114 p_terr_id4 IN NUMBER,
6115 p_terr_id5 IN NUMBER,
6116 p_terr_id6 IN NUMBER,
6117 p_terr_id7 IN NUMBER,
6118 p_terr_id8 IN NUMBER,
6119 p_terr_id9 IN NUMBER,
6120 p_terr_id10 IN NUMBER,
6121 p_terr_id11 IN NUMBER,
6122 p_terr_id12 IN NUMBER,
6123 p_terr_id13 IN NUMBER,
6124 p_terr_id14 IN NUMBER,
6125 p_terr_id15 IN NUMBER,
6126 p_terr_id16 IN NUMBER,
6127 p_terr_id17 IN NUMBER,
6128 p_terr_id18 IN NUMBER,
6129 p_terr_id19 IN NUMBER,
6130 p_terr_id20 IN NUMBER )
6131
6132 IS
6133 -- Local variables declaration
6134 l_partner_id NUMBER;
6135 lv_partner_id NUMBER;
6136 l_vad_partner_id NUMBER ;
6137 l_login_user_id NUMBER := FND_GLOBAL.user_id;
6138 l_status BOOLEAN;
6139 l_return_status VARCHAR2(1);
6140 l_msg_count NUMBER;
6141 l_msg_data VARCHAR2(2000);
6142 l_err_mesg VARCHAR2(255);
6143 l_partner_access_id_tbl prtnr_aces_tbl_type;
6144 l_request_id NUMBER := fnd_profile.value('CONC_REQUEST_ID');
6145 l_program_application_id NUMBER := fnd_profile.value('CONC_PROGRAM_APPICATION_ID');
6146 l_program_id NUMBER := fnd_profile.value('CONC_PROGRAM_ID');
6147 l_program_update_date DATE := sysdate;
6148 l_change_partner PV_BATCH_CHG_PRTNR_PVT.Batch_Chg_Prtnrs_rec_type;
6149 rec_index NUMBER := 0;
6150 l_newline VARCHAR2(1) := FND_GLOBAL.Newline;
6151 l_batch_partner_id NUMBER;
6152 l_batch_oversion_number NUMBER;
6153 l_return_terr_str VARCHAR2(2000);
6154 l_partner_rec_exists VARCHAR2(1) := 'N';
6155 l_object_version_number NUMBER;
6156 l_partner_err_cnt NUMBER;
6157
6158 TYPE partner_list_rec_type IS RECORD
6159 (
6160 partner_id NUMBER
6161 ) ;
6162
6163 g_miss_partner_list_rec partner_list_rec_type := NULL;
6164 TYPE partner_list_tbl_type IS TABLE OF partner_list_rec_type INDEX BY BINARY_INTEGER;
6165 g_miss_partner_list_tbl partner_list_tbl_type;
6166
6167 l_partner_list_tbl partner_list_tbl_type ;
6168 l_partner_name VARCHAR2(360);
6169
6170
6171 -- Cursor to select all partner_id's from PV_TAP_BATCH_CHG_PARTNERS table
6172 -- to delete them from the table, if running mode is TOTAL
6173 CURSOR l_batch_partners_csr(cv_partner_id NUMBER) IS
6174 SELECT partner_id , object_version_number
6175 FROM PV_TAP_BATCH_CHG_PARTNERS
6176 WHERE partner_id = cv_partner_id;
6177
6178 -- Cursor to select all the partner_id's from PV_TAP_BATCH_CHG_PARTNERS table
6179 -- for channel team re-assignment in case of INCREMENTAL mode.
6180 CURSOR l_terr_chng_prtnrs_csr(
6181 cv_terr_id1 NUMBER, cv_terr_id2 NUMBER,
6182 cv_terr_id3 NUMBER, cv_terr_id4 NUMBER,
6183 cv_terr_id5 NUMBER, cv_terr_id6 NUMBER,
6184 cv_terr_id7 NUMBER, cv_terr_id8 NUMBER,
6185 cv_terr_id9 NUMBER, cv_terr_id10 NUMBER,
6186 cv_terr_id11 NUMBER, cv_terr_id12 NUMBER,
6187 cv_terr_id13 NUMBER, cv_terr_id14 NUMBER,
6188 cv_terr_id15 NUMBER, cv_terr_id16 NUMBER,
6189 cv_terr_id17 NUMBER, cv_terr_id18 NUMBER,
6190 cv_terr_id19 NUMBER, cv_terr_id20 NUMBER ) IS
6191 SELECT ppa.partner_id
6192 FROM pv_partner_accesses ppa,
6193 pv_partner_profiles ppp,
6194 pv_tap_access_terrs ptat
6195 WHERE ppa.partner_access_id = ptat.partner_access_id
6196 AND ppa.partner_id = ppp.partner_id
6197 AND ppp.status = 'A'
6198 AND ptat.terr_id IN (
6199 cv_terr_id1, cv_terr_id2, cv_terr_id3, cv_terr_id4,
6200 cv_terr_id5, cv_terr_id6, cv_terr_id7, cv_terr_id8,
6201 cv_terr_id9, cv_terr_id10, cv_terr_id11, cv_terr_id12,
6202 cv_terr_id13, cv_terr_id14, cv_terr_id15, cv_terr_id16,
6203 cv_terr_id17, cv_terr_id18, cv_terr_id19, cv_terr_id20);
6204
6205 -- Cursor to select all the partner_id's from PV_TAP_BATCH_CHG_PARTNERS table
6206 -- for channel team re-assignment in case of INCREMENTAL mode.
6207 CURSOR l_chk_partner_exists_csr(cv_partner_id IN NUMBER )IS
6208 SELECT object_version_number
6209 FROM PV_TAP_BATCH_CHG_PARTNERS
6210 WHERE partner_id = cv_partner_id
6211 AND processed_flag = 'P';
6212
6213 -- Cursor to select partner detail for the given partner_id's from
6214 -- PV_PARTNER_PROFILES table for channel team re-assignment in case of Process
6215 -- territories.
6216 CURSOR l_prof_partner_info_csr(cv_partner_id NUMBER) IS
6217 SELECT distinct hzp.party_name partner_name
6218 FROM PV_PARTNER_PROFILES ppp,
6219 HZ_PARTIES hzp
6220 WHERE ppp.partner_id = cv_partner_id
6221 AND ppp.partner_party_id = hzp.party_id
6222 AND ppp.STATUS = 'A';
6223 -- order by hzp.party_name;
6224
6225
6226 BEGIN
6227 -- Standard Start of savepoint
6228 SAVEPOINT Process_Sub_Territories_Pvt;
6229 -- initialize the error count to zero.
6230 l_partner_err_cnt := 0;
6231
6232 -- Header Message for Processing starts
6233 fnd_message.set_name('PV', 'PV_TAP_CTEAM_HDR');
6234 fnd_message.set_token('P_DATE_TIME', to_char(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') );
6235 Write_log (1, substrb(fnd_message.get, 1, 1000));
6236
6237 rec_index := 0;
6238 -- FOR l_change_partner_rec IN l_terr_chng_prtnrs_csr(l_return_terr_str)
6239 FOR l_change_partner_rec IN l_terr_chng_prtnrs_csr(
6240 p_terr_id1, p_terr_id2, p_terr_id3, p_terr_id4,
6241 p_terr_id5, p_terr_id6, p_terr_id7, p_terr_id8,
6242 p_terr_id9, p_terr_id10, p_terr_id11, p_terr_id12,
6243 p_terr_id13, p_terr_id14, p_terr_id15, p_terr_id16,
6244 p_terr_id17, p_terr_id18, p_terr_id19, p_terr_id20)
6245 LOOP
6246 rec_index := rec_index + 1;
6247 l_partner_list_tbl(rec_index).partner_id := l_change_partner_rec.partner_id;
6248 END LOOP;
6249
6250 -- Process all the Partner records selected in l_partners_list PL/SQL table
6251 IF ( l_partner_list_tbl.count > 0) THEN
6252 FOR i IN 1..l_partner_list_tbl.last
6253 LOOP
6254 BEGIN
6255 -- Standard Start of savepoint
6256 SAVEPOINT Process_Partner_Channel_Team;
6257
6258 -- Initilize the local variables.
6259 l_partner_id := l_partner_list_tbl(i).partner_id ;
6260 l_vad_partner_id := null;
6261 l_object_version_number := null;
6262
6263 /****** Get the Partner Details ******/
6264 OPEN l_prof_partner_info_csr(l_partner_id);
6265 FETCH l_prof_partner_info_csr INTO l_partner_name;
6266 CLOSE l_prof_partner_info_csr;
6267
6268 Process_Channel_Team(
6269 p_partner_id => l_partner_id ,
6270 p_vad_partner_id => l_vad_partner_id ,
6271 p_login_user => l_login_user_id ,
6272 x_return_status => l_return_status,
6273 x_msg_count => l_msg_count ,
6274 x_msg_data => l_msg_data ,
6275 x_prtnr_access_id_tbl => l_partner_access_id_tbl );
6276
6277 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6278 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6279 RAISE FND_API.G_EXC_ERROR;
6280 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6281 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6282 END IF;
6283 END IF;
6284
6285 -- Check, whether that non-processed PARTNER_ID already exists in
6286 -- PV_TAP_BATCH_CHG_PARTNERS table.
6287 -- IF it exists, THEN
6288 -- UPDATE the record for that PARTNER_ID with the appropriate PROCESSED_FLAG status.
6289 -- ELSE
6290 -- CREATE a record for that PARTNER_ID with the appropriate PROCESSED_FLAG status.
6291 -- END IF;
6292
6293 OPEN l_batch_partners_csr(l_partner_id);
6294 FETCH l_batch_partners_csr INTO lv_partner_id, l_object_version_number;
6295
6296 IF ( l_batch_partners_csr%NOTFOUND ) THEN
6297 CLOSE l_batch_partners_csr;
6298 -- Create an error record in PV_TAP_BATCH_CHG_PARTNERS table with following
6299 -- Concurrent request related attribute values
6300 -- * REQUEST_ID
6301 -- * PROGRAM_APPLICATION_ID
6302 -- * PROGRAM_ID
6303 -- * PROGRAM_UPDATE_DATE
6304 ------------------------------------------------------------
6305 l_change_partner.partner_id := l_partner_id ;
6306 l_change_partner.request_id := l_request_id ;
6307 l_change_partner.program_application_id := l_program_application_id ;
6308 l_change_partner.program_id := l_program_id ;
6309 l_change_partner.program_update_date := l_program_update_date;
6310 l_change_partner.object_version_number := 1;
6311 IF ( l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
6312 l_change_partner.processed_flag := 'P';
6313 ELSE
6314 l_change_partner.processed_flag := 'S';
6315 END IF;
6316
6317 PV_BATCH_CHG_PRTNR_PVT.create_Batch_Chg_Partners(
6318 p_api_version_number => 1.0 ,
6319 p_init_msg_list => FND_API.G_FALSE,
6320 p_commit => FND_API.G_FALSE,
6321 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
6322 x_return_status => l_return_status,
6323 x_msg_count => l_msg_count,
6324 x_msg_data => l_msg_data,
6325 p_batch_chg_prtnrs_rec => l_change_partner,
6326 x_partner_id => lv_partner_id );
6327
6328 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6329 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6330 RAISE FND_API.G_EXC_ERROR;
6331 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6332 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
6333 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_BATCH_CHG_PRTNR_PVT.Create_Batch_Chg_Partners');
6334 FND_MSG_PUB.Add;
6335 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6336 END IF;
6337 END IF;
6338 ELSIF ( l_batch_partners_csr%FOUND ) THEN
6339 CLOSE l_batch_partners_csr;
6340 -- Update the PV_TAP_BATCH_CHG_PARTNERS table for following
6341 -- Concurrent request related attribute values
6342 -- * REQUEST_ID
6343 -- * PROGRAM_APPLICATION_ID
6344 -- * PROGRAM_ID
6345 -- * PROGRAM_UPDATE_DATE
6346 ------------------------------------------------------------
6347 l_change_partner.partner_id := l_partner_id ;
6348 l_change_partner.request_id := l_request_id ;
6349 l_change_partner.program_application_id := l_program_application_id ;
6350 l_change_partner.program_id := l_program_id ;
6351 l_change_partner.program_update_date := l_program_update_date;
6352 l_change_partner.object_version_number := l_object_version_number;
6353 l_change_partner.last_update_date := sysdate;
6354 l_change_partner.last_update_by := FND_GLOBAL.user_id;
6355 l_change_partner.creation_date := sysdate;
6356 l_change_partner.created_by := FND_GLOBAL.user_id;
6357 l_change_partner.last_update_login := FND_GLOBAL.user_id;
6358
6359 IF ( l_return_status = FND_API.G_RET_STS_SUCCESS ) THEN
6360 l_change_partner.processed_flag := 'S';
6361 END IF;
6362
6363 PV_BATCH_CHG_PRTNR_PVT.Update_Batch_Chg_Partners(
6364 p_api_version_number => 1.0 ,
6365 p_init_msg_list => FND_API.G_FALSE,
6366 p_commit => FND_API.G_FALSE,
6367 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
6368 x_return_status => l_return_status,
6369 x_msg_count => l_msg_count,
6370 x_msg_data => l_msg_data,
6371 p_batch_chg_prtnrs_rec => l_change_partner );
6372
6373 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6374 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6375 RAISE FND_API.G_EXC_ERROR;
6376 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6377 /* FND_MESSAGE.SET_NAME('PV', 'PV_API_FAILED');
6378 FND_MESSAGE.SET_TOKEN('API_NAME', 'PV_BATCH_CHG_PRTNR_PVT.Update_Batch_Chg_Partners');
6379 FND_MSG_PUB.Add;
6380 */ RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6381 END IF;
6382 END IF;
6383 END IF; -- l_chk_partner_exists_csr%FOUND
6384
6385 -- Debug statement for each partner_id
6386 fnd_message.set_name('PV', 'PV_TAP_CTEAM_MSG');
6387 fnd_message.set_token('PARTNER_NAME', rpad(l_partner_name,40));
6388 fnd_message.set_token('PARTNER_ID', rpad(l_partner_id,15));
6389 -- fnd_message.set_token('PARTNER_ID', l_partner_id);
6390 Write_log (1, substrb(fnd_message.get, 1, 255));
6391
6392 EXCEPTION
6393 WHEN FND_API.G_EXC_ERROR THEN
6394
6395 IF l_batch_partners_csr%ISOPEN THEN
6396 CLOSE l_batch_partners_csr;
6397 END IF;
6398
6399 FND_MSG_PUB.count_and_get (
6400 p_encoded => FND_API.g_false
6401 ,p_count => l_msg_count
6402 ,p_data => l_msg_data
6403 );
6404
6405 l_partner_err_cnt := l_partner_err_cnt +1;
6406 apps.fnd_message.set_encoded(apps.fnd_msg_pub.get(l_msg_count));
6407 l_msg_data := substr(apps.fnd_message.get,1,254);
6408
6409
6410 -- Debug statement for each partner_id
6411 fnd_message.set_name('PV', 'PV_TAP_CTEAM_ERR');
6412 fnd_message.set_token('PARTNER_NAME', rpad(l_partner_name,40));
6413 fnd_message.set_token('PARTNER_ID', rpad(l_partner_id,15));
6414 -- fnd_message.set_token('PARTNER_ID', l_partner_id);
6415 fnd_message.set_token('ERROR', l_msg_data);
6416 Write_log (1, substrb(fnd_message.get, 1, 255));
6417 ROLLBACK TO Process_Partner_Channel_Team;
6418 fnd_msg_pub.Delete_Msg;
6419
6420 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6421 IF l_batch_partners_csr%ISOPEN THEN
6422 CLOSE l_batch_partners_csr;
6423 END IF;
6424
6425 FND_MSG_PUB.count_and_get (
6426 p_encoded => FND_API.g_false
6427 ,p_count => l_msg_count
6428 ,p_data => l_msg_data
6429 );
6430
6431 l_partner_err_cnt := l_partner_err_cnt +1;
6432 apps.fnd_message.set_encoded(apps.fnd_msg_pub.get(l_msg_count));
6433 l_msg_data := substr(apps.fnd_message.get,1,254);
6434
6435 -- Debug statement for each partner_id
6436 fnd_message.set_name('PV', 'PV_TAP_CTEAM_ERR');
6437 fnd_message.set_token('PARTNER_NAME', rpad(l_partner_name,40));
6438 fnd_message.set_token('PARTNER_ID', rpad(l_partner_id,15));
6439 -- fnd_message.set_token('PARTNER_ID', l_partner_id);
6440 fnd_message.set_token('ERROR', l_msg_data);
6441 Write_log (1, substrb(fnd_message.get, 1, 255));
6442 ROLLBACK TO Process_Partner_Channel_Team;
6443 fnd_msg_pub.Delete_Msg;
6444
6445 WHEN OTHERS THEN
6446
6447 IF l_batch_partners_csr%ISOPEN THEN
6448 CLOSE l_batch_partners_csr;
6449 END IF;
6450
6451 FND_MSG_PUB.count_and_get (
6452 p_encoded => FND_API.g_false
6453 ,p_count => l_msg_count
6454 ,p_data => l_msg_data
6455 );
6456
6457 l_partner_err_cnt := l_partner_err_cnt +1;
6458 apps.fnd_message.set_encoded(apps.fnd_msg_pub.get(l_msg_count));
6459 l_msg_data := substr(apps.fnd_message.get,1,254);
6460
6461
6462 -- Debug statement for each partner_id
6463 fnd_message.set_name('PV', 'PV_TAP_CTEAM_ERR');
6464 fnd_message.set_token('PARTNER_NAME', rpad(l_partner_name,40));
6465 fnd_message.set_token('PARTNER_ID', rpad(l_partner_id,15));
6466 -- fnd_message.set_token('PARTNER_ID', l_partner_id);
6467 fnd_message.set_token('ERROR', l_msg_data);
6468 Write_log (1, substrb(fnd_message.get, 1, 255));
6469 ROLLBACK TO Process_Partner_Channel_Team;
6470 fnd_msg_pub.Delete_Msg;
6471
6472 END ;
6473 END LOOP; --FOR i IN 1..l_partner_list_tbl.last
6474 END IF ; -- l_partner_list_tbl.count > 0
6475
6476 -- Footer Message for Processing End.
6477 fnd_message.set_name('PV', 'PV_TAP_CTEAM_FOOTER');
6478 fnd_message.set_token('TOT_PRTNR_CNT', to_char(l_partner_list_tbl.count) );
6479 fnd_message.set_token('SUC_PRTNR_CNT', to_char(l_partner_list_tbl.count-l_partner_err_cnt) );
6480 fnd_message.set_token('ERR_PRTNR_CNT', to_char(l_partner_err_cnt) );
6481 fnd_message.set_token('P_DATE_TIME', TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') );
6482 Write_log (1, substrb(fnd_message.get, 1, 1000));
6483
6484 IF (l_partner_err_cnt > 0) THEN
6485 RETCODE := FND_API.G_RET_STS_ERROR;
6486 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('WARNING', SQLERRM);
6487 END IF;
6488
6489
6490 COMMIT;
6491
6492 EXCEPTION
6493 WHEN FND_API.G_EXC_ERROR THEN
6494 IF l_batch_partners_csr%ISOPEN THEN
6495 CLOSE l_batch_partners_csr;
6496 END IF;
6497 ROLLBACK TO Process_Sub_Territories_Pvt;
6498 RETCODE := FND_API.G_RET_STS_ERROR;
6499 l_err_mesg := 'SQLCODE ' || to_char(SQLCODE) || ' SQLERRM ' || substr(SQLERRM, 1, 100);
6500 ERRBUF := l_err_mesg ;
6501 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', SQLERRM);
6502 Write_log (1, l_err_mesg);
6503
6504 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6505 IF l_batch_partners_csr%ISOPEN THEN
6506 CLOSE l_batch_partners_csr;
6507 END IF;
6508 ROLLBACK TO Process_Sub_Territories_Pvt;
6509 RETCODE := FND_API.G_RET_STS_UNEXP_ERROR;
6510 l_err_mesg := 'SQLCODE ' || to_char(SQLCODE) || ' SQLERRM ' || substr(SQLERRM, 1, 100);
6511 ERRBUF := l_err_mesg ;
6512 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', SQLERRM);
6513 Write_log (1, l_err_mesg);
6514
6515 WHEN OTHERS THEN
6516 IF l_batch_partners_csr%ISOPEN THEN
6517 CLOSE l_batch_partners_csr;
6518 END IF;
6519
6520 ROLLBACK TO Process_Sub_Territories_Pvt;
6521 RETCODE := '2';
6522 l_err_mesg := 'SQLCODE ' || to_char(SQLCODE) || ' SQLERRM ' || substr(SQLERRM, 1, 100);
6523 ERRBUF := l_err_mesg ;
6524 l_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', SQLERRM);
6525 Write_log (1, l_err_mesg);
6526
6527 END Process_Sub_Territories;
6528
6529 END PV_TERR_ASSIGN_PUB;