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