DBA Data[Home] [Help]

PACKAGE BODY: APPS.AS_SALES_LEAD_ASSIGN_PVT

Source


1 PACKAGE BODY AS_SALES_LEAD_ASSIGN_PVT as
2 /* $Header: asxvslab.pls 120.4 2006/01/27 17:44:57 solin noship $ */
3 -- Start of Comments
4 -- Package name     : AS_SALES_LEAD_ASSIGN_PVT
5 -- Purpose          : Sales Leads Assignment
6 -- NOTE             :
7 -- History          :
8 --      04/09/2001 FFANG  Created.
9 --      04/30/2001 SOLIN  Change for real time assignment and sales lead
10 --                        sales team.
11 --      07/09/2001 SOLIN  Change for JTF assignment manager change for
12 --                        bulk record.
13 --      07/25/2001 SOLIN  Enhancement bug 1732822.
14 --                        Set status_code to profile AS_LEAD_ROUTING_STATUS
15 --                        and accept_flag to 'N' when assign owner.
16 --      09/06/2001 SOLIN  Enhancement bug 1963262.
17 --                        Owner can decline sales lead.
18 --      09/27/2001 SOLIN  Creator get full access in sales lead sales team.
19 --      11/21/2001 SOLIN  New profile AS_ENABLE_LEAD_ONLINE_TAP.
20 --      12/04/2001 SOLIN  Bug 2137318
21 --                        Change for Oracle internal custom user hook.
22 --      12/10/2001 SOLIN  Bug 2102901.
23 --                        Add salesgroup_id for current user in
24 --                        Build_Lead_Sales_Team and Rebuild_Lead_Sales_Team
25 --      01/10/2002 SOLIN  Bug 2098158.
26 --                        Add p_PRIMARY_CNT_PERSON_PARTY_ID,
27 --                        p_PRIMARY_CONTACT_PHONE_ID when calling sales lead
28 --                        table handler.
29 --      02/10/2002 SOLIN  Change for CAPRI
30 --      05/14/2002 SOLIN  Bug 2364709.
31 --                        Set message if there's no channel manager for
32 --                        partner.
33 --                        Bug 2364567.
34 --                        Add partner to sales team even though lead
35 --                        is not created by partner.
36 --      06/02/2002 SOLIN  Bug 2395613.
37 --                        NULL index table key value.
38 --      08/13/2002 SOLIN  Bug 2503364, 2503366
39 --                        Change SQL to update AS_ACCESSES_ALL and
40 --                        AS_TERRITORY_ACCESSES
41 --      10/01/2002 SOLIN  Bug 2599946
42 --                        Remove as_changed_account_all record in
43 --                        Build_Lead_Sales_Team because sales lead record
44 --                        may be updated in lead creation process
45 --      11/04/2002 SOLIN  Enhancement Bug 2238553
46 --                        When owner is changed, don't change status.
47 --      11/18/2002 SOLIN  Change for NOCOPY and AS_UTILITY_PVT.Debug_Message
48 --      02/14/2003 SOLIN  Bug 2796513
49 --                        If owner was on the sales team with freeze_flag='Y'
50 --                        owner will still have freeze_flag='Y'
51 --      02/20/2003 SOLIN  Bug 2801769
52 --                        Remove checking for max reroute.
53 --      02/28/2003 SOLIN  Bug 2825108
54 --                        Lead creator should have KEEP flag 'Y'
55 --      03/03/2003 SOLIN  Bug 2825046
56 --                        Reassignment change for new lead lines.
57 --      03/14/2003 SOLIN  Bug 2852597
58 --                        Port 11.5.8 fix to 11.5.9.
59 --      03/20/2003 SOLIN  Bug 2831426
60 --                        Add open_flag in as_accesses_all table.
61 --      03/28/2003 SOLIN  Bug 2877597
62 --                        Change C_Validate_Salesforce cursor
63 --      04/17/2003 SOLIN  Bug 2899734, 2902742
64 --                        Change sql for trigger handlers.
65 --      04/23/2003 SOLIN  Bug 2921105
66 --                        Add channel_code in lead trigger.
67 --      04/28/2003 SOLIN  Bug 2926777
68 --                        Close_reason should be FND_API.G_MISS_CHAR when
69 --                        lead is reassigned.
70 --      04/30/2003 SOLIN  Bug 2931721
71 --                        Reset g_resource_id_tbl in Get_Available_Resource.
72 --      05/01/2003 SOLIN  Bug 2928041
73 --                        Add open_flag, object_creation_date, and
74 --                        lead_rank_score in as_accesses_all table
75 --      07/07/2003 SOLIN  Bug 3035251
76 --                        County qualifier doesn't work.
77 --                        Set UPPER for all VARCHAR2 qualifier.
78 --      07/10/2003 SOLIN  Bug 3046959(Bug 2983881 for 11.5.8)
79 --                        Change for new DUN's number qualifier
80 --      08/07/2003 SOLIN  Bug 3091085(Bug 3087354 for 11.5.8)
81 --                        Use JTF_QUAL_USGS_ALL, instead of JTF_QUAL_USGS(with
82 --                        security policies)
83 --      10/23/2003 SOLIN  ER 3052066
84 --                        Leave a record in as_changed_accounts after
85 --                        (Re)Build_lead_sales_team. TAP New mode need this
86 --                        record to sync TRANS and NM_TRANS table.
87 --      03/30/2004 SOLIN  Bug 3543801
88 --                        Long customer name issue
89 --                        Remove REPLACE in C_Get_Sales_Lead1 and
90 --                        C_Get_Sales_Lead2
91 --
92 -- END of Comments
93 
94 
95 /*-------------------------------------------------------------------------*
96  |
97  |                             PRIVATE CONSTANTS
98  |
99  *-------------------------------------------------------------------------*/
100 G_PKG_NAME  CONSTANT VARCHAR2(30):= 'AS_SALES_LEAD_ASSIGN_PVT';
101 G_FILE_NAME CONSTANT VARCHAR2(12) := 'asxvslab.pls';
102 
103 
104 /*-------------------------------------------------------------------------*
105  |
106  |                             PRIVATE DATATYPES
107  |
108  *-------------------------------------------------------------------------*/
109 TYPE NUMBER_TABLE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
110 TYPE FLAG_TABLE IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;
111 TYPE VARCHAR2_30_TABLE IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
112 
113 /*-------------------------------------------------------------------------*
114  |
115  |                             PRIVATE VARIABLES
116  |
117  *-------------------------------------------------------------------------*/
118 -- varray for insert (AS_ACCESSES_ALL)
119 g_i_access_id               NUMBER_TABLE;
120 g_i_resource_id             NUMBER_TABLE; -- salesforce_id
121 g_i_group_id                NUMBER_TABLE; -- sales_group_id
122 g_i_person_id               NUMBER_TABLE;
123 g_i_territory_id            NUMBER_TABLE;
124 g_i_party_id                NUMBER_TABLE; -- customer_id
125 g_i_party_site_id           NUMBER_TABLE; -- address_id
126 g_i_sales_lead_id           NUMBER_TABLE; -- sales_lead_id
127 g_i_full_access_flag        FLAG_TABLE;
128 g_i_owner_flag              FLAG_TABLE;
129 g_i_freeze_flag             FLAG_TABLE;
130 g_i_source                  VARCHAR2_30_TABLE;
131 g_i_partner_customer_id     NUMBER_TABLE;
132 g_i_partner_cont_party_id   NUMBER_TABLE;
133 
134 -- varray for update (AS_ACCESSES_ALL)
135 g_u_access_id               NUMBER_TABLE;
136 g_u_full_access_flag        FLAG_TABLE;
137 
138 -- varray for insert (AS_TERRITORY_ACCESSES)
139 g_ti_access_id              NUMBER_TABLE;
140 g_ti_territory_id           NUMBER_TABLE;
141 
142 -- varray for update (AS_TERRITORY_ACCESSES)
143 g_tu_access_id              NUMBER_TABLE;
144 g_tu_territory_id           NUMBER_TABLE;
145 
146 
147 -- length of Insert array for AS_ACCESSES_ALL
148 g_i_count                   NUMBER := 0;
149 -- length of Update array for AS_ACCESSES_ALL
150 g_u_count                   NUMBER := 0;
151 -- length of Insert array for AS_TERRITORY_ACCESSES
152 g_ti_count                  NUMBER := 0;
153 -- length of Update array for AS_TERRITORY_ACCESSES
154 g_tu_count                  NUMBER := 0;
155 
156 
157 g_resource_id_tbl       AS_LEAD_ROUTING_WF.NUMBER_TABLE;
158 g_group_id_tbl          AS_LEAD_ROUTING_WF.NUMBER_TABLE;
159 g_person_id_tbl         AS_LEAD_ROUTING_WF.NUMBER_TABLE;
160 
161 -- The follwing is the meaning of g_resource_flag_tbl:
162 -- 'D': This resource is the default resource from profile
163 --      AS_DEFAULT_RESOURCE_ID, "OS: Default Resource ID used for Sales
164 --      Lead Assignment".
165 -- 'L': This resource is the login user.
166 -- 'T': This resource is defined in territory.
167 g_resource_flag_tbl     AS_LEAD_ROUTING_WF.FLAG_TABLE;
168 
169 AS_DEBUG_HIGH_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
170 AS_DEBUG_LOW_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
171 AS_DEBUG_MEDIUM_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
172 AS_DEBUG_ERROR_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_ERROR);
173 
174 PROCEDURE  Insert_Access_Records(
175     p_resource_id            IN     NUMBER,
176     p_group_id               IN     NUMBER,
177     p_full_access_flag       IN     VARCHAR2,
178 --    p_person_id              IN     NUMBER,
179     p_territory_id           IN     NUMBER := NULL,
180     p_party_id               IN     NUMBER,
181     p_party_site_id          IN     NUMBER,
182     p_partner_cont_party_id  IN     NUMBER := NULL,
183     p_partner_customer_id    IN     NUMBER := NULL,
184     p_sales_lead_id          IN     NUMBER,
185     p_freeze_flag            IN     VARCHAR2,
186     p_owner_flag             IN     VARCHAR2,
187     p_source                 IN     VARCHAR2);
188 
189 PROCEDURE  Create_Access_Records(
190     p_resource_id            IN     NUMBER,
191     p_group_id               IN     NUMBER,
192     p_full_access_flag       IN     VARCHAR2,
193 --    p_person_id              IN     NUMBER,
194     p_territory_id           IN     NUMBER,
195     p_party_id               IN     NUMBER,
196     p_party_site_id          IN     NUMBER,
197     p_partner_cont_party_id  IN     NUMBER := NULL,
198     p_partner_customer_id    IN     NUMBER := NULL,
199     p_sales_lead_id          IN     NUMBER,
200     p_freeze_flag            IN     VARCHAR2,
201     p_source                 IN     VARCHAR2);
202 
203 PROCEDURE Insert_Territory_Accesses(
204     p_access_id              IN     NUMBER,
205     p_territory_id           IN     NUMBER);
206 
207 PROCEDURE Create_Territory_Accesses(
208     p_access_id              IN     NUMBER,
209     p_territory_id           IN     NUMBER);
210 
211 PROCEDURE Flush_Access_Records(
212     p_request_id             IN     NUMBER);
213 
214 PROCEDURE Remove_Redundant_Accesses(
215     p_sales_lead_id          IN     NUMBER,
216     p_request_id             IN     NUMBER);
217 
218 PROCEDURE Add_Creator_In_Sales_Team(
219     p_customer_id            IN     NUMBER,
220     p_address_id             IN     NUMBER,
221     p_sales_lead_id          IN     NUMBER,
222     p_identity_salesforce_id IN     NUMBER,
223     p_salesgroup_id          IN     NUMBER);
224 
225 PROCEDURE Oracle_Internal_CUHK(
226     p_sales_lead_id          IN           NUMBER,
227     p_salesgroup_id          IN           NUMBER,
228     p_request_id             IN           NUMBER,
229     x_return_status          OUT NOCOPY   VARCHAR2,
230     x_msg_count              OUT NOCOPY   NUMBER,
231     x_msg_data               OUT NOCOPY   VARCHAR2);
232 
233 PROCEDURE Get_Partner_Lead_Owner(
234     p_sales_lead_id          IN     NUMBER);
235 
236 --   API Name:  Assign_Sales_Lead
237 
238 PROCEDURE Assign_Sales_Lead (
239     P_Api_Version_Number         IN  NUMBER,
240     P_Init_Msg_List              IN  VARCHAR2    := FND_API.G_FALSE,
241     p_commit                     IN  VARCHAR2    := FND_API.G_FALSE,
242     p_validation_level           IN  NUMBER      := FND_API.G_VALID_LEVEL_FULL,
243     P_Check_Access_Flag          IN  VARCHAR2    := FND_API.G_MISS_CHAR,
244     P_Admin_Flag                 IN  VARCHAR2    := FND_API.G_MISS_CHAR,
245     P_Admin_Group_Id             IN  NUMBER      := FND_API.G_MISS_NUM,
246     P_identity_salesforce_id     IN  NUMBER      := FND_API.G_MISS_NUM,
247     P_Sales_Lead_Profile_Tbl     IN  AS_UTILITY_PUB.Profile_Tbl_Type
248                                       := AS_UTILITY_PUB.G_MISS_PROFILE_TBL,
249     P_resource_type              IN  VARCHAR2    := NULL,
250     P_role                       IN  VARCHAR2    := NULL,
251     P_no_of_resources            IN  NUMBER      := 1,
252     P_auto_select_flag           IN  VARCHAR2    := NULL,
253     P_effort_duration            IN  NUMBER      := NULL,
254     P_effort_uom                 IN  VARCHAR2    := NULL,
255     P_start_date                 IN  DATE        := NULL,
256     P_end_date                   IN  DATE        := NULL,
257     P_territory_flag             IN  VARCHAR2    := 'Y',
258     P_calendar_flag              IN  VARCHAR2    := 'Y',
259     P_Sales_Lead_Id              IN  NUMBER,
260     X_Return_Status              OUT NOCOPY VARCHAR2,
261     X_Msg_Count                  OUT NOCOPY NUMBER,
262     X_Msg_Data                   OUT NOCOPY VARCHAR2,
263     X_Assign_Id_Tbl              OUT NOCOPY AS_SALES_LEADS_PUB.Assign_Id_Tbl_Type
264     )
265  IS
266     -- bug 1530383
267     -- solin. Change the cursor for party with site, party without site.
268     CURSOR C_Get_Address_Id(c_sales_lead_id NUMBER) IS
269       SELECT SL.ADDRESS_ID
270       FROM   AS_SALES_LEADS SL
271       WHERE  SL.SALES_LEAD_ID = c_sales_lead_id;
272 
273     -- Bug 3035251
274     -- Add UPPER for all VARCHAR2 qualifiers
275     CURSOR C_Get_Sales_Lead1(X_Sales_Lead_Id NUMBER) IS
276       SELECT SL.SALES_LEAD_ID,
277              TO_NUMBER(NULL),
278              UPPER(REPLACE(ADDR.CITY, '''', '''''')),
279              UPPER(ADDR.POSTAL_CODE),
280              UPPER(ADDR.STATE),
281              UPPER(ADDR.PROVINCE),
282              UPPER(REPLACE(ADDR.COUNTY, '''', '''''')),
283              UPPER(ADDR.COUNTRY),
284              SITE.PARTY_SITE_ID,
285              UPPER(PHONE.PHONE_AREA_CODE),
286              PARTY.PARTY_ID,
287              UPPER(REPLACE(PARTY.PARTY_NAME, '''', '''''')),
288              PARTY.PARTY_ID,
289              PARTY.EMPLOYEES_TOTAL,
290              UPPER(PARTY.CATEGORY_CODE),
291              PARTY.PARTY_ID,
292              UPPER(PARTY.SIC_CODE),
293              SL.BUDGET_AMOUNT,
294              UPPER(SL.CURRENCY_CODE),
295              TRUNC(SL.CREATION_DATE),
296              SL.SOURCE_PROMOTION_ID,
297              TO_NUMBER(NULL)
298       FROM   AS_SALES_LEADS SL,
299              HZ_CONTACT_POINTS PHONE,
300              HZ_LOCATIONS ADDR,
301              HZ_PARTY_SITES SITE,
302              HZ_PARTIES PARTY
303       WHERE  SL.SALES_LEAD_ID = X_Sales_Lead_Id
304         AND  SL.CUSTOMER_ID = PARTY.PARTY_ID
305         AND  SL.ADDRESS_ID = SITE.PARTY_SITE_ID
306         AND  PHONE.OWNER_TABLE_NAME(+) = 'HZ_PARTY_SITES'
307         AND  PHONE.PRIMARY_FLAG(+) = 'Y'
308         AND  PHONE.STATUS(+) = 'A'
309         AND  PHONE.CONTACT_POINT_TYPE(+) = 'PHONE'
310         AND  SITE.PARTY_SITE_ID = PHONE.OWNER_TABLE_ID(+)
311         AND  SITE.LOCATION_ID = ADDR.LOCATION_ID
312         AND  PARTY.PARTY_ID = SITE.PARTY_ID
313         AND (PARTY.PARTY_TYPE = 'PERSON' OR PARTY.PARTY_TYPE = 'ORGANIZATION');
314 
315     -- Bug 3035251
316     -- Add UPPER for all VARCHAR2 qualifiers
317     CURSOR C_Get_Sales_Lead2(X_Sales_Lead_Id NUMBER) IS
318       SELECT SL.SALES_LEAD_ID,
319              NULL,
320              TO_CHAR(NULL),
321              TO_CHAR(NULL),
322              TO_CHAR(NULL),
323              TO_CHAR(NULL),
324              TO_CHAR(NULL),
325              TO_CHAR(NULL),
326              TO_NUMBER(NULL),
327              UPPER(PHONE.PHONE_AREA_CODE),
328              PARTY.PARTY_ID,
329              UPPER(REPLACE(PARTY.PARTY_NAME, '''', '''''')),
330              PARTY.PARTY_ID,
331              PARTY.EMPLOYEES_TOTAL,
332              UPPER(PARTY.CATEGORY_CODE),
333              PARTY.PARTY_ID,
334              UPPER(PARTY.SIC_CODE),
335              SL.BUDGET_AMOUNT,
336              UPPER(SL.CURRENCY_CODE),
337              TRUNC(SL.CREATION_DATE),
338              SL.SOURCE_PROMOTION_ID,
339              NULL
340       FROM   AS_SALES_LEADS SL,
341              HZ_CONTACT_POINTS PHONE,
342              HZ_PARTIES PARTY
343       WHERE  SL.SALES_LEAD_ID = X_Sales_Lead_Id
344         AND  SL.CUSTOMER_ID = PARTY.PARTY_ID
345         AND  PHONE.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
346         AND  PHONE.PRIMARY_FLAG(+) = 'Y'
347         AND  PHONE.STATUS(+) = 'A'
348         AND  PHONE.CONTACT_POINT_TYPE(+) = 'PHONE'
349         AND  PARTY.PARTY_ID = PHONE.OWNER_TABLE_ID(+)
350         AND (PARTY.PARTY_TYPE = 'PERSON' OR PARTY.PARTY_TYPE = 'ORGANIZATION');
351 
352     CURSOR C_Get_Sales_Group_Id (X_Resource_Id NUMBER) IS
353       SELECT grp.group_id
354       FROM JTF_RS_GROUP_MEMBERS mem,
355            JTF_RS_ROLE_RELATIONS rrel,
356            JTF_RS_ROLES_B role,
357            JTF_RS_GROUP_USAGES u,
358            JTF_RS_GROUPS_B grp
359       WHERE mem.group_member_id = rrel.role_resource_id
360         and rrel.role_resource_type = 'RS_GROUP_MEMBER'
361         and rrel.role_id = role.role_id
362         and role.role_type_code in ('SALES','TELESALES','FIELDSALES','PRM')
363         and mem.delete_flag <> 'Y'
364         and rrel.delete_flag <> 'Y'
365         and sysdate between rrel.start_date_active and
366                             nvl(rrel.end_date_active,sysdate)
367         and mem.group_id = u.group_id
368         and u.usage = 'SALES'
369         and mem.group_id = grp.group_id
370         and sysdate between grp.start_date_active and
371                             nvl(grp.end_date_active,sysdate)
372         and mem.resource_id = X_Resource_Id;
373 
374     l_api_name                     CONSTANT VARCHAR2(30) := 'Assign_Sales_Lead';
375     l_api_version_number           CONSTANT NUMBER   := 2.0;
376     l_AssignResources_Tbl          JTF_ASSIGN_PUB.AssignResources_Tbl_type;
377                                 -- JTF_TERRITORY_PUB.WinningTerrMember_tbl_type;
378     l_AssignResources_Rec          JTF_ASSIGN_PUB.AssignResources_Rec_type;
379                                 -- JTF_TERRITORY_PUB.JTF_Lead_rec_type;
380     -- l_lead_rec                     JTF_ASSIGN_PUB.JTF_Lead_rec_type;
381     l_lead_rec                     JTF_TERRITORY_PUB.JTF_Lead_BULK_rec_type;
382     l_resource_id                  NUMBER;
383     l_count                        INTEGER  := 0;
384     l_identity_sales_member_rec    AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
385     l_access_profile_rec           AS_ACCESS_PUB.Access_Profile_Rec_Type;
386 
387     l_data                         VARCHAR2(30);
388     l_index_out                    NUMBER;
389     l_check_calendar               VARCHAR2(1);
390     l_address_id                   NUMBER := NULL;
391 
392 
393 BEGIN
394       -- Standard Start of API savepoint
395       SAVEPOINT ASSIGN_SALES_LEAD_PVT;
396 
397       -- Standard call to check for call compatibility.
398       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
399                                            p_api_version_number,
400                                            l_api_name,
401                                            G_PKG_NAME)
402       THEN
403           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
404       END IF;
405 
406       -- Initialize message list IF p_init_msg_list is set to TRUE.
407       IF FND_API.to_Boolean( p_init_msg_list )
408       THEN
409           FND_MSG_PUB.initialize;
410       END IF;
411 
412       -- Debug Message
413       IF (AS_DEBUG_LOW_ON) THEN
414       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
415                                    'PVT:' || l_api_name || ' Start');
416       END IF;
417 
418       -- Initialize API return status to SUCCESS
419       x_return_status := FND_API.G_RET_STS_SUCCESS;
420 
421       --
422       -- Api body
423       --
424       -- ******************************************************************
425       -- Validate Environment
426       -- ******************************************************************
427 
428 /* ffang 112800
429       IF FND_GLOBAL.User_Id IS NULL
430       THEN
431           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
432           THEN
433               AS_UTILITY_PVT.Set_Message(
434                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
435                   p_msg_name      => 'UT_CANNOT_GET_PROFILE_VALUE',
436                   p_token1        => 'PROFILE',
437                   p_token1_value  => 'USER_ID');
438           END IF;
439           RAISE FND_API.G_EXC_ERROR;
440       END IF;
441 
442       IF (p_validation_level = fnd_api.g_valid_level_full)
443       THEN
444           AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
445               p_api_version_number => 2.0
446              ,p_init_msg_list      => p_init_msg_list
447              ,p_salesforce_id      => P_Identity_Salesforce_Id
448              ,p_admin_group_id     => p_admin_group_id
449              ,x_return_status      => x_return_status
450              ,x_msg_count          => x_msg_count
451              ,x_msg_data           => x_msg_data
452              ,x_sales_member_rec   => l_identity_sales_member_rec);
453       END IF;
454 
455       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
456           RAISE FND_API.G_EXC_ERROR;
457       END IF;
458 
459 ffang 112800 */
460 
461 
462       -- Debug Message
463       IF (AS_DEBUG_LOW_ON) THEN
464       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
465                                    'Open Cursor C_Get_Sales_Lead');
466       END IF;
467 
468       -- bug 1530383, use cursor for party with sites, party without sites.
469       OPEN C_Get_Address_Id(p_Sales_Lead_Id);
470       FETCH C_Get_Address_Id INTO l_address_id;
471       CLOSE C_Get_Address_Id;
472 
473       -- One sales lead is supposed to have one record only, so we don't need
474       -- a loop here.
475       IF l_address_id IS NOT NULL
476       THEN
477           -- Sales lead is created in party site level.
478           Open C_Get_Sales_Lead1(p_Sales_Lead_Id);
479           Fetch C_Get_Sales_Lead1 BULK COLLECT INTO
480               l_lead_rec.SALES_LEAD_ID,
481               l_lead_rec.SALES_LEAD_LINE_ID,
482               l_lead_rec.CITY,
483               l_lead_rec.POSTAL_CODE,
484               l_lead_rec.STATE,
485               l_lead_rec.PROVINCE,
486               l_lead_rec.COUNTY,
487               l_lead_rec.COUNTRY,
488               l_lead_rec.PARTY_SITE_ID,
489               l_lead_rec.AREA_CODE,
490               l_lead_rec.PARTY_ID,
491               l_lead_rec.COMP_NAME_RANGE,
492               l_lead_rec.PARTNER_ID,
493               l_lead_rec.NUM_OF_EMPLOYEES,
494               l_lead_rec.CATEGORY_CODE,
495               l_lead_rec.PARTY_RELATIONSHIP_ID,
496               l_lead_rec.SIC_CODE,
497               l_lead_rec.BUDGET_AMOUNT,
498               l_lead_rec.CURRENCY_CODE,
499               l_lead_rec.PRICING_DATE,
500               l_lead_rec.SOURCE_PROMOTION_ID,
501               l_lead_rec.PURCHASE_AMOUNT;
502           CLOSE C_Get_Sales_Lead1;
503       ELSE
504           -- Sales lead is created in party level.
505           Open C_Get_Sales_Lead2(p_Sales_Lead_Id);
506           Fetch C_Get_Sales_Lead2 BULK COLLECT INTO
507               l_lead_rec.SALES_LEAD_ID,
508               l_lead_rec.SALES_LEAD_LINE_ID,
509               l_lead_rec.CITY,
510               l_lead_rec.POSTAL_CODE,
511               l_lead_rec.STATE,
512               l_lead_rec.PROVINCE,
513               l_lead_rec.COUNTY,
514               l_lead_rec.COUNTRY,
515               l_lead_rec.PARTY_SITE_ID,
516               l_lead_rec.AREA_CODE,
517               l_lead_rec.PARTY_ID,
518               l_lead_rec.COMP_NAME_RANGE,
519               l_lead_rec.PARTNER_ID,
520               l_lead_rec.NUM_OF_EMPLOYEES,
521               l_lead_rec.CATEGORY_CODE,
522               l_lead_rec.PARTY_RELATIONSHIP_ID,
523               l_lead_rec.SIC_CODE,
524               l_lead_rec.BUDGET_AMOUNT,
525               l_lead_rec.CURRENCY_CODE,
526               l_lead_rec.PRICING_DATE,
527               l_lead_rec.SOURCE_PROMOTION_ID,
528               l_lead_rec.PURCHASE_AMOUNT;
529           CLOSE C_Get_Sales_Lead2;
530       END IF;
531 
532       IF (AS_DEBUG_LOW_ON) THEN
533       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
534                              'SALES_LEAD_ID : ' || l_lead_rec.SALES_LEAD_ID(1));
535       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
536                                      'CITY : ' || l_lead_rec.CITY(1));
537       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
538                                    'POSTAL_CODE : ' || l_lead_rec.POSTAL_CODE(1));
539       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
540                                    'STATE : ' || l_lead_rec.STATE(1));
541       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
542                                    'PROVINCE : ' || l_lead_rec.PROVINCE(1));
543       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
544                                    'COUNTY : ' || l_lead_rec.COUNTY(1));
545       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
546                                    'COUNTRY : ' || l_lead_rec.COUNTRY(1));
547       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
548                                 'PARTY_SITE_ID : ' || l_lead_rec.PARTY_SITE_ID(1));
549       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
550                                    'AREA_CODE : ' || l_lead_rec.AREA_CODE(1));
551       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
552                                    'PARTY_ID : ' || l_lead_rec.PARTY_ID(1));
553       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
554                           'CUSTOMER_NAME : ' || l_lead_rec.COMP_NAME_RANGE(1));
555       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
556                                    'PARTNER_ID : ' || l_lead_rec.PARTY_ID(1));
557       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
558                           'NUM_OF_EMPLOYEES : ' || l_lead_rec.NUM_OF_EMPLOYEES(1));
559       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
560                           'CATEGORY_CODE : ' || l_lead_rec.CATEGORY_CODE(1));
561       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
562               'PARTY_RELATIONSHIP_ID : ' || l_lead_rec.PARTY_RELATIONSHIP_ID(1));
563       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
564                                    'SIC_CODE : ' || l_lead_rec.SIC_CODE(1));
565       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
566                           'BUDGET_AMOUNT : ' || l_lead_rec.BUDGET_AMOUNT(1));
567       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
568                           'CURRENCY_CODE : ' || l_lead_rec.CURRENCY_CODE(1));
569       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
570                           'PRICING_DATE: ' || l_lead_rec.PRICING_DATE(1));
571       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
572                           'PROMOTION_ID: ' || l_lead_rec.SOURCE_PROMOTION_ID(1));
573       END IF;
574 
575       -- solin, use this profile to see whether we need calendar setup or not.
576       l_check_calendar :=
577              nvl(FND_PROFILE.Value('AS_SL_ASSIGN_CALENDAR_REQ'),'N');
578 
579       IF (AS_DEBUG_LOW_ON) THEN
580       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
581                           'Calling JTF_ASSIGN_PUB.Get_Assign_Lead_Resources');
582       END IF;
583 
584       JTF_ASSIGN_PUB.Get_Assign_Lead_Resources (
585             p_api_version                    => 1.0
586            ,p_init_msg_list                  => JTF_ASSIGN_PUB.AM_FALSE
587            -- ,p_commit                         => FND_API.G_FALSE
588            ,p_resource_type                  => p_resource_type
589            ,p_role                           => p_role
590            ,p_no_of_resources                => p_no_of_resources
591            ,p_auto_select_flag               => p_auto_select_flag
592            ,p_effort_duration                => p_effort_duration
593            ,p_effort_uom                     => p_effort_uom
594            ,p_start_date                     => p_start_date
595            ,p_end_date                       => p_end_date
596            ,p_territory_flag                 => p_territory_flag
597            -- ,p_calendar_flag                  => p_calendar_flag
598            ,p_calendar_flag                  => l_check_calendar
599            ,p_lead_rec                       => l_lead_rec
600            ,x_assign_resources_tbl           => l_assignresources_tbl
601            ,x_return_status                  => x_return_status
602            ,x_msg_count                      => x_msg_count
603            ,x_msg_data                       => x_msg_data
604         );
605 
606       IF (AS_DEBUG_LOW_ON) THEN
607       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
608                          'After JTF_ASSIGN_PUB.Get_Assign_Lead_Resources:' ||
609                          x_return_status);
610       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
611                                      'count=' || l_assignresources_tbl.count);
612       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
613                                      'first = '||l_assignresources_tbl.first);
614       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
615                                      'last = '||l_assignresources_tbl.last);
616       END IF;
617 
618       IF x_return_status = 'E' THEN
619             FND_MSG_PUB.Get (
620                 p_msg_index       => FND_MSG_PUB.G_LAST,
621                 p_encoded         => FND_API.G_TRUE ,
622                 p_data            => l_data,
623                 p_msg_index_out   => l_index_out
624                 );
625             IF (AS_DEBUG_LOW_ON) THEN
626             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
627                                           l_data);
628             END IF;
629 
630       ELSIF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
631 		 IF (AS_DEBUG_LOW_ON) THEN
632 		 AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
633                                         'JTF AM failed');
634 		 END IF;
635            -- exit;
636            -- raise FND_API.G_EXC_ERROR;
637       END IF;
638 
639       IF (AS_DEBUG_LOW_ON) THEN
640       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
641                          'After JTF_ASSIGN_PUB.Get_Assign_Lead_Resources:');
642       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
643                'l_assignresources_tbl.count: ' || l_assignresources_tbl.count);
644       END IF;
645 
646       l_count := l_AssignResources_tbl.COUNT;
647       IF l_AssignResources_tbl.COUNT > 0 THEN
648           For i In l_assignresources_tbl.first..l_assignresources_tbl.last
649           Loop
650               IF (AS_DEBUG_LOW_ON) THEN
651               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
652                                           'Resource ID(' || i || ') : ' ||
653                                           l_AssignResources_tbl(i).Resource_Id);
654               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
655                                           'Group ID(' || i || ') : ' ||
656                                           l_AssignResources_tbl(i).Group_Id);
657               END IF;
658               X_Assign_Id_Tbl(i).Sales_Group_Id
659                                 := l_AssignResources_tbl(i).group_Id;
660               X_Assign_Id_Tbl(i).Resource_Id
661                                 := l_AssignResources_tbl(i).Resource_Id;
662           END Loop;
663       END IF;
664 
665       --
666       -- END of API body
667       --
668 
669       -- Standard check for p_commit
670       IF FND_API.to_Boolean( p_commit )
671       THEN
672           COMMIT WORK;
673       END IF;
674 
675 
676       -- Debug Message
677       IF (AS_DEBUG_LOW_ON) THEN
678       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
679                                    'PVT: ' || l_api_name || ' End');
680       END IF;
681 
682       -- Standard call to get message count and IF count is 1, get message info.
683       FND_MSG_PUB.Count_And_Get
684       (  p_count          =>   x_msg_count,
685          p_data           =>   x_msg_data );
686 
687       EXCEPTION
688           WHEN FND_API.G_EXC_ERROR THEN
689               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
690                    P_API_NAME => L_API_NAME
691                   ,P_PKG_NAME => G_PKG_NAME
692                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
693                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
694                   ,X_MSG_COUNT => X_MSG_COUNT
695                   ,X_MSG_DATA => X_MSG_DATA
696                   ,X_RETURN_STATUS => X_RETURN_STATUS);
697 
698           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
699               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
700                    P_API_NAME => L_API_NAME
701                   ,P_PKG_NAME => G_PKG_NAME
702                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
703                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
704                   ,X_MSG_COUNT => X_MSG_COUNT
705                   ,X_MSG_DATA => X_MSG_DATA
706                   ,X_RETURN_STATUS => X_RETURN_STATUS);
707 
708           WHEN OTHERS THEN
709               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
710                    P_API_NAME => L_API_NAME
711                   ,P_PKG_NAME => G_PKG_NAME
712                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
713                   ,P_SQLCODE => SQLCODE
714                   ,P_SQLERRM => SQLERRM
715                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
716                   ,X_MSG_COUNT => X_MSG_COUNT
717                   ,X_MSG_DATA => X_MSG_DATA
718                   ,X_RETURN_STATUS => X_RETURN_STATUS);
719 END Assign_Sales_Lead;
720 
721 
722 PROCEDURE CALL_WF_TO_ASSIGN (
723     P_Api_Version_Number         IN  NUMBER,
724     P_Init_Msg_List              IN  VARCHAR2    := FND_API.G_FALSE,
725     p_commit                     IN  VARCHAR2    := FND_API.G_FALSE,
726     P_Sales_Lead_Id              IN  NUMBER,
727     P_assigned_resource_id       IN  NUMBER      := NULL,
728     X_Return_Status              OUT NOCOPY VARCHAR2,
729     X_Msg_Count                  OUT NOCOPY NUMBER,
730     X_Msg_Data                   OUT NOCOPY VARCHAR2
731     )
732 IS
733     l_api_name                   CONSTANT VARCHAR2(30) := 'CALL_WF_TO_ASSIGN';
734     l_api_version_number         CONSTANT NUMBER   := 2.0;
735     l_itemtype                   VARCHAR2(8);
736     l_itemkey                    VARCHAR2(50);
737 
738 BEGIN
739       -- Standard Start of API savepoint
740       SAVEPOINT CALL_WF_TO_ASSIGN_PVT;
741 
742       -- Standard call to check for call compatibility.
743       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
744                                            p_api_version_number,
745                                            l_api_name,
746                                            G_PKG_NAME)
747       THEN
748           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
749       END IF;
750 
751       -- Initialize message list IF p_init_msg_list is set to TRUE.
752       IF FND_API.to_Boolean( p_init_msg_list )
753       THEN
754           FND_MSG_PUB.initialize;
755       END IF;
756 
757       -- Debug Message
758       IF (AS_DEBUG_LOW_ON) THEN
759       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
760                                    'PVT:' || l_api_name || ' Start');
761       END IF;
762 
763       -- Initialize API return status to SUCCESS
764       x_return_status := FND_API.G_RET_STS_SUCCESS;
765 
766       --
767       -- Api body
768       --
769       -- ******************************************************************
770       -- Validate Environment
771       -- ******************************************************************
772       IF FND_GLOBAL.User_Id IS NULL
773       THEN
774           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
775           THEN
776               AS_UTILITY_PVT.Set_Message(
777                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
778                   p_msg_name      => 'UT_CANNOT_GET_PROFILE_VALUE',
779                   p_token1        => 'PROFILE',
780                   p_token1_value  => 'USER_ID');
781           END IF;
782           RAISE FND_API.G_EXC_ERROR;
783       END IF;
784 
785       -- Debug Message
786       IF (AS_DEBUG_LOW_ON) THEN
787       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
788                                    'Calling AS_LEAD_ROUTING_WF.STARTPROCESS');
789       END IF;
790 
791       AS_LEAD_ROUTING_WF.STARTPROCESS (
792          p_sales_lead_id        => p_sales_lead_id,
793          p_salesgroup_id        => fnd_api.g_miss_num,
794          x_return_status        => x_return_status,
795          x_item_type            => l_itemtype,
796          x_item_key             => l_itemkey );
797 
798       IF (AS_DEBUG_LOW_ON) THEN
799       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
800                                    'x_return_status: '|| x_return_status);
801       END IF;
802 
803 	 -- verify the valid values of return_status from WF and handle them
804       IF x_return_status = '#NULL' THEN
805           x_return_status := FND_API.G_RET_STS_SUCCESS;
806           -- Will add these error messages to dictionary
807       --     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
808       --         'No assignment has been made.');
809       ELSIF x_return_status = 'ERROR' THEN
810           IF (AS_DEBUG_ERROR_ON) THEN
811           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
812                                        'AS_LEAD_ASSIGN_FAIL');
813           END IF;
814           RAISE FND_API.G_EXC_ERROR;
815 
816     -- code change for bug 1613424 start
817 
818       ELSIF x_return_status = 'W' THEN
819 
820 		-- This is used to send the warning message stating that the
821 		-- resource id used is not form the territory setup
822 
823 		x_return_status := 'W';
824 
825     -- code change for bug 1613424 end
826 
827       ELSE
828 
829           x_return_status := FND_API.G_RET_STS_SUCCESS;
830       END IF;
831 
832       --
833       -- END of API body
834       --
835 
836       -- Standard check for p_commit
837       IF FND_API.to_Boolean( p_commit )
838       THEN
839           COMMIT WORK;
840       END IF;
841 
842       -- Debug Message
843       IF (AS_DEBUG_LOW_ON) THEN
844       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
845                                    'PVT: ' || l_api_name || ' End');
846       END IF;
847 
848       -- Standard call to get message count and IF count is 1, get message info.
849       FND_MSG_PUB.Count_And_Get
850       (  p_count          =>   x_msg_count,
851          p_data           =>   x_msg_data );
852 
853 END CALL_WF_TO_ASSIGN;
854 
855 --   API Name:  Build_Lead_Sales_Team
856 
857 PROCEDURE Build_Lead_Sales_Team(
858     P_Api_Version_Number      IN  NUMBER,
859     P_Init_Msg_List           IN  VARCHAR2    := FND_API.G_FALSE,
860     p_Commit                  IN  VARCHAR2    := FND_API.G_FALSE,
861     p_Validation_Level        IN  NUMBER      := FND_API.G_VALID_LEVEL_FULL,
862     P_Admin_Group_Id          IN  NUMBER      := FND_API.G_MISS_NUM,
863     P_identity_salesforce_id  IN  NUMBER      := FND_API.G_MISS_NUM,
864     P_Salesgroup_id           IN  NUMBER      := FND_API.G_MISS_NUM,
865     P_Sales_Lead_Id           IN  NUMBER,
866     X_Request_Id              OUT NOCOPY NUMBER,
867     X_Return_Status           OUT NOCOPY VARCHAR2,
868     X_Msg_Count               OUT NOCOPY NUMBER,
869     X_Msg_Data                OUT NOCOPY VARCHAR2
870     )
871  IS
872     CURSOR C_Get_Lead_Info(C_Sales_Lead_Id NUMBER) IS
873       SELECT SL.CUSTOMER_ID,
874              SL.ADDRESS_ID,
875              SL.ASSIGN_TO_SALESFORCE_ID,
876              SL.ASSIGN_SALES_GROUP_ID,
877              SL.REFERRAL_TYPE,
878              SL.REFERRED_BY
879       FROM AS_SALES_LEADS SL
880       WHERE SL.SALES_LEAD_ID = C_Sales_Lead_Id;
881 
882     CURSOR C_Validate_Partner_User(c_resource_id NUMBER) IS
883       SELECT 'Y'
884       FROM jtf_rs_resource_extns res
885       WHERE res.category = 'PARTY'
886       AND   res.resource_id = c_resource_id;
887 
888     CURSOR C_Get_CM(c_partner_id NUMBER) IS
889       SELECT cm_id
890       FROM pv_partner_profiles
891       WHERE partner_id = c_partner_id;
892 
893     CURSOR C_Get_Partner_Name(c_referred_by NUMBER) IS
894       SELECT party_name
895       FROM hz_parties
896       WHERE party_id = c_referred_by;
897 
898     -- If resource is partner user, source_id is party_id of the
899     -- relationship.
900     CURSOR C_Get_Partner_Cont_Party_id(c_resource_id NUMBER) IS
901       SELECT source_id
902       FROM jtf_rs_resource_extns
903       WHERE resource_id = c_resource_id;
904 
905     CURSOR C_Get_Partner_Org_sf_id(c_referred_by NUMBER) IS
906       SELECT resource_id
907       FROM jtf_rs_resource_extns
908       WHERE source_id = c_referred_by
909       AND category = 'PARTNER';
910 
911     -- Bug 3035251
912     -- Add UPPER for all VARCHAR2 qualifiers
913     CURSOR C_Get_Sales_Lead1(C_Sales_Lead_Id NUMBER, c_hz_party_sites VARCHAR2,
914                              c_status VARCHAR2, c_y VARCHAR2, c_phone VARCHAR2,
915                              c_person VARCHAR2, c_organization VARCHAR2) IS
916       SELECT SL.SALES_LEAD_ID,
917              TO_NUMBER(NULL), -- sales_lead_line_id
918              UPPER(ADDR.CITY),
919              UPPER(ADDR.POSTAL_CODE),
920              UPPER(ADDR.STATE),
921              UPPER(ADDR.PROVINCE),
922              UPPER(ADDR.COUNTY),
923              UPPER(ADDR.COUNTRY),
924              SITE.PARTY_SITE_ID,
925              UPPER(PHONE.PHONE_AREA_CODE),
926              PARTY.PARTY_ID,
927              UPPER(PARTY.PARTY_NAME),
928              PARTY.PARTY_ID,
929              PARTY.EMPLOYEES_TOTAL,
930              UPPER(PARTY.CATEGORY_CODE),
931              PARTY.PARTY_ID,
932              UPPER(PARTY.SIC_CODE_TYPE) || ': ' || UPPER(PARTY.SIC_CODE),
933              SL.BUDGET_AMOUNT,
934              UPPER(SL.CURRENCY_CODE),
935              TRUNC(SL.CREATION_DATE),
936              SL.SOURCE_PROMOTION_ID,
937              TO_NUMBER(NULL), -- inventory_item_id
938              TO_NUMBER(NULL), -- purchase_amount
939              ORGP.CURR_FY_POTENTIAL_REVENUE,
940              UPPER(ORGP.PREF_FUNCTIONAL_CURRENCY),
941              UPPER(PARTY.DUNS_NUMBER_C),
942              UPPER(SL.CHANNEL_CODE)
943       FROM   AS_SALES_LEADS SL,
944              HZ_CONTACT_POINTS PHONE,
945              HZ_LOCATIONS ADDR,
946              HZ_PARTY_SITES SITE,
947              HZ_PARTIES PARTY,
948              HZ_ORGANIZATION_PROFILES ORGP
949       WHERE  SL.SALES_LEAD_ID = C_Sales_Lead_Id
950         AND  SL.CUSTOMER_ID = PARTY.PARTY_ID
951         AND  SL.ADDRESS_ID = SITE.PARTY_SITE_ID
952         AND  PHONE.OWNER_TABLE_NAME(+) = c_hz_party_sites -- 'HZ_PARTY_SITES'
953         AND  PHONE.PRIMARY_FLAG(+) = c_y --'Y'
954         AND  PHONE.STATUS(+) = c_status
955         AND  PHONE.CONTACT_POINT_TYPE(+) = c_phone --'PHONE'
956         AND  SITE.PARTY_SITE_ID = PHONE.OWNER_TABLE_ID(+)
957         AND  SITE.LOCATION_ID = ADDR.LOCATION_ID
958         AND  PARTY.PARTY_ID = SITE.PARTY_ID
959         AND (PARTY.PARTY_TYPE = c_person OR PARTY.PARTY_TYPE = c_organization)
960         AND  PARTY.PARTY_ID = ORGP.PARTY_ID(+)
961         AND  NVL(ORGP.EFFECTIVE_END_DATE(+),SYSDATE + 1) > SYSDATE;
962 
963     -- Bug 3035251
964     -- Add UPPER for all VARCHAR2 qualifiers
965     CURSOR C_Get_Sales_Lead2(C_Sales_Lead_Id NUMBER, c_hz_parties VARCHAR2,
966                              c_status VARCHAR2, c_y VARCHAR2, c_phone VARCHAR2,
967                              c_person VARCHAR2, c_organization VARCHAR2) IS
968       SELECT SL.SALES_LEAD_ID,
969              TO_NUMBER(NULL), -- sales_lead_line_id
970              TO_CHAR(NULL),
971              TO_CHAR(NULL),
972              TO_CHAR(NULL),
973              TO_CHAR(NULL),
974              TO_CHAR(NULL),
975              TO_CHAR(NULL),
976              TO_NUMBER(NULL),
977              UPPER(PHONE.PHONE_AREA_CODE),
978              PARTY.PARTY_ID,
979              UPPER(PARTY.PARTY_NAME),
980              PARTY.PARTY_ID,
981              PARTY.EMPLOYEES_TOTAL,
982              UPPER(PARTY.CATEGORY_CODE),
983              PARTY.PARTY_ID,
984              UPPER(PARTY.SIC_CODE_TYPE) || ': ' || UPPER(PARTY.SIC_CODE),
985              SL.BUDGET_AMOUNT,
986              UPPER(SL.CURRENCY_CODE),
987              TRUNC(SL.CREATION_DATE),
988              SL.SOURCE_PROMOTION_ID,
989              TO_NUMBER(NULL), -- inventory_item_id
990              TO_NUMBER(NULL), -- purchase_amount
991              ORGP.CURR_FY_POTENTIAL_REVENUE,
992              UPPER(ORGP.PREF_FUNCTIONAL_CURRENCY),
993              UPPER(PARTY.DUNS_NUMBER_C),
994              UPPER(SL.CHANNEL_CODE)
995       FROM   AS_SALES_LEADS SL,
996              HZ_CONTACT_POINTS PHONE,
997              HZ_PARTIES PARTY,
998              HZ_ORGANIZATION_PROFILES ORGP
999       WHERE  SL.SALES_LEAD_ID = C_Sales_Lead_Id
1000         AND  SL.CUSTOMER_ID = PARTY.PARTY_ID
1001         AND  PHONE.OWNER_TABLE_NAME(+) = c_hz_parties --'HZ_PARTIES'
1002         AND  PHONE.PRIMARY_FLAG(+) = c_y --'Y'
1003         AND  PHONE.STATUS(+) = c_status
1004         AND  PHONE.CONTACT_POINT_TYPE(+) = c_phone --'PHONE'
1005         AND  PARTY.PARTY_ID = PHONE.OWNER_TABLE_ID(+)
1006         AND (PARTY.PARTY_TYPE = c_person OR PARTY.PARTY_TYPE = c_organization)
1007         AND  PARTY.PARTY_ID = ORGP.PARTY_ID(+)
1008         AND  NVL(ORGP.EFFECTIVE_END_DATE(+),SYSDATE + 1) > SYSDATE;
1009 
1010     CURSOR C_Explode_Resource_Team(c_team_id NUMBER) IS
1011       SELECT J.resource_id, J.group_id, J.person_id
1012       FROM
1013         (
1014           SELECT MIN(tm.team_resource_id) resource_id,
1015                  MIN(tm.person_id) person_id2, MIN(G.group_id) group_id,
1016                  MIN(t.team_id) team_id, tres.category resource_category,
1017                  MIN(TRES.source_id) person_id
1018           FROM   jtf_rs_team_members tm, jtf_rs_teams_b t,
1019                  jtf_rs_team_usages tu, jtf_rs_role_relations trr,
1020                  jtf_rs_roles_b tr, jtf_rs_resource_extns tres,
1021                  (
1022                    SELECT m.group_id group_id, m.resource_id resource_id
1023                    FROM   jtf_rs_group_members m, jtf_rs_groups_b g,
1024                           jtf_rs_group_usages u, jtf_rs_role_relations rr,
1025                           jtf_rs_roles_b r, jtf_rs_resource_extns res
1026                    WHERE
1027                           m.group_id = g.group_id
1028                    AND    SYSDATE BETWEEN NVL(g.start_date_active,SYSDATE)
1029                                       AND NVL(g.end_date_active,SYSDATE)
1030                    AND    u.group_id = g.group_id
1031                    AND    u.usage = 'SALES'
1032                    AND    m.group_member_id = rr.role_resource_id
1033                    AND    rr.role_resource_type = 'RS_GROUP_MEMBER'
1034                    AND    rr.delete_flag <> 'Y'
1035                    AND    SYSDATE BETWEEN rr.start_date_active
1036                                   AND NVL(rr.end_date_active,SYSDATE)
1037                    AND    rr.role_id = r.role_id
1038                    AND    r.role_type_code IN
1039                           ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
1040                    AND    r.active_flag = 'Y'
1041                    AND    res.resource_id = m.resource_id
1042                    AND    res.category = 'EMPLOYEE'
1043                  )  g
1044           WHERE tm.team_id = t.team_id
1045           AND   SYSDATE BETWEEN NVL(t.start_date_active,SYSDATE)
1046                             AND NVL(t.end_date_active,SYSDATE)
1047           AND   tu.team_id = t.team_id
1048           AND   tu.usage = 'SALES'
1049           AND   tm.team_member_id = trr.role_resource_id
1050           AND   tm.delete_flag <> 'Y'
1051           AND   tm.resource_type = 'INDIVIDUAL'
1052           AND   trr.role_resource_type = 'RS_TEAM_MEMBER'
1053           AND   trr.delete_flag <> 'Y'
1054           AND   SYSDATE BETWEEN trr.start_date_active
1055                         AND NVL(trr.end_date_active,SYSDATE)
1056           AND   trr.role_id = tr.role_id
1057           AND   tr.role_type_code IN ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
1058           AND   tr.active_flag = 'Y'
1059           AND   tres.resource_id = tm.team_resource_id
1060           AND   tres.category = 'EMPLOYEE'
1061           AND   tm.team_resource_id = g.resource_id
1062           GROUP BY tm.team_member_id, tm.team_resource_id, tm.person_id,
1063                 t.team_id, tres.category
1064           UNION
1065           SELECT MIN(m.resource_id) resource_id,
1066                  MIN(m.person_id) person_id2, MIN(m.group_id) group_id,
1067                  MIN(jtm.team_id) team_id, res.category resource_category,
1068                  MIN(res.source_id) person_id
1069           FROM  jtf_rs_group_members m, jtf_rs_groups_b g,
1070                 jtf_rs_group_usages u, jtf_rs_role_relations rr,
1071                 jtf_rs_roles_b r, jtf_rs_resource_extns res,
1072                 (
1073                   Select tm.team_resource_id group_id, t.team_id team_id
1074                   From   jtf_rs_team_members tm, jtf_rs_teams_b t,
1075                          jtf_rs_team_usages tu, jtf_rs_role_relations trr,
1076                          jtf_rs_roles_b tr, jtf_rs_resource_extns tres
1077                   Where  tm.team_id = t.team_id
1078                   and    sysdate between nvl(t.start_date_active,sysdate)
1079                                      and nvl(t.end_date_active,sysdate)
1080                   and   tu.team_id = t.team_id
1081                   and   tu.usage = 'SALES'
1082                   and   tm.team_member_id = trr.role_resource_id
1083                   and   tm.delete_flag <> 'Y'
1084                   and   tm.resource_type = 'GROUP'
1085                   and   trr.role_resource_type = 'RS_TEAM_MEMBER'
1086                   and   trr.delete_flag <> 'Y'
1087                   and   sysdate between trr.start_date_active and
1088                                      nvl(trr.end_date_active,sysdate)
1089                   and   trr.role_id = tr.role_id
1090                   and   tr.role_type_code in
1091                         ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
1092                   and   tr.active_flag = 'Y'
1093                   and   tres.resource_id = tm.team_resource_id
1094                   and   tres.category = 'EMPLOYEE'
1095                   ) jtm
1096            WHERE m.group_id = g.group_id
1097            AND   SYSDATE BETWEEN NVL(g.start_date_active,SYSDATE)
1098                              AND NVL(g.end_date_active,SYSDATE)
1099            AND   u.group_id = g.group_id
1100            AND   u.usage = 'SALES'
1101            AND   m.group_member_id = rr.role_resource_id
1102            AND   rr.role_resource_type = 'RS_GROUP_MEMBER'
1103            AND   rr.delete_flag <> 'Y'
1104            AND   SYSDATE BETWEEN rr.start_date_active
1105                          AND NVL(rr.end_date_active,SYSDATE)
1106            AND   rr.role_id = r.role_id
1107            AND   r.role_type_code IN ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
1108            AND   r.active_flag = 'Y'
1109            AND   res.resource_id = m.resource_id
1110            AND   res.category = 'EMPLOYEE'
1111            AND   jtm.group_id = g.group_id
1112            GROUP BY m.resource_id, m.person_id, jtm.team_id, res.category
1113                 ) J
1114         WHERE j.team_id = c_team_id;
1115 
1116     CURSOR C_Explode_Resource_Group(c_group_id NUMBER) IS
1117       SELECT J.resource_id, J.group_id, J.person_id
1118       FROM
1119         (
1120           SELECT MIN(m.resource_id) resource_id,
1121                  res.category resource_category,
1122                  MIN(m.group_id) group_id,MIN(res.source_id) person_id
1123           FROM  jtf_rs_group_members m, jtf_rs_groups_b g,
1124                 jtf_rs_group_usages u, jtf_rs_role_relations rr,
1125                 jtf_rs_roles_b r, jtf_rs_resource_extns res
1126           WHERE
1127                 m.group_id = g.group_id
1128           AND   SYSDATE BETWEEN NVL(g.start_date_active,SYSDATE)
1129                             AND NVL(g.end_date_active,SYSDATE)
1130           AND   u.group_id = g.group_id
1131           AND   u.usage = 'SALES'
1132           AND   m.group_member_id = rr.role_resource_id
1133           AND   rr.role_resource_type = 'RS_GROUP_MEMBER'
1134           AND   rr.role_id = r.role_id
1135           AND   rr.delete_flag <> 'Y'
1136           AND   SYSDATE BETWEEN rr.start_date_active
1137                         AND NVL(rr.end_date_active,SYSDATE)
1138           AND   r.role_type_code IN
1139                 ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
1140           AND   r.active_flag = 'Y'
1141           AND   res.resource_id = m.resource_id
1142           AND   res.category = 'EMPLOYEE'
1143           GROUP BY m.group_member_id, m.resource_id, m.person_id,
1144                    m.group_id, res.category) j
1145       WHERE j.group_id = c_group_id;
1146 
1147     Cursor C_Validate_Salesforce(C_Resource_Id NUMBER, c_rs_individual VARCHAR2,
1148                                  c_sales VARCHAR2, c_telesales VARCHAR2,
1149                                  c_fieldsales VARCHAR2, c_prm VARCHAR2,
1150                                  c_n VARCHAR2, c_employee VARCHAR2) IS
1151       SELECT 'Y'
1152       FROM   per_all_people_f per,
1153              jtf_rs_resource_extns res,
1154              jtf_rs_role_relations rrel,
1155              jtf_rs_roles_b role
1156       WHERE  TRUNC(SYSDATE) BETWEEN per.effective_start_date
1157              AND per.effective_end_date
1158       AND    res.resource_id = rrel.role_resource_id
1159       AND    rrel.role_resource_type = c_rs_individual --'RS_INDIVIDUAL'
1160       AND    rrel.role_id = role.role_id
1161       AND    role.role_type_code IN (c_sales, c_telesales, c_fieldsales, c_prm) --'SALES', 'TELESALES', 'FIELDSALES', 'PRM')
1162       AND    NVL(role.admin_flag, 'N') = c_n --'N'
1163       AND    res.source_id = per.person_id
1164       AND    res.resource_id = C_Resource_Id
1165       AND    res.category = c_employee; --'EMPLOYEE';
1166 
1167     CURSOR C_get_current_resource IS
1168       SELECT res.resource_id
1169       FROM jtf_rs_resource_extns res
1170       WHERE res.category IN ('EMPLOYEE', 'PARTY')
1171       AND res.user_id = fnd_global.user_id;
1172 
1173     CURSOR c_get_group_id (c_resource_id NUMBER, c_rs_group_member VARCHAR2,
1174                            c_sales VARCHAR2, c_telesales VARCHAR2,
1175                            c_fieldsales VARCHAR2, c_prm VARCHAR2, c_y VARCHAR2) IS
1176       SELECT grp.group_id
1177       FROM JTF_RS_GROUP_MEMBERS mem,
1178            JTF_RS_ROLE_RELATIONS rrel,
1179            JTF_RS_ROLES_B role,
1180            JTF_RS_GROUP_USAGES u,
1181            JTF_RS_GROUPS_B grp
1182       WHERE mem.group_member_id = rrel.role_resource_id
1183       AND rrel.role_resource_type = c_rs_group_member --'RS_GROUP_MEMBER'
1184       AND rrel.role_id = role.role_id
1185       AND role.role_type_code in (c_sales, c_telesales, c_fieldsales, c_prm) --'SALES','TELESALES','FIELDSALES','PRM')
1186       AND mem.delete_flag <> c_y --'Y'
1187       AND rrel.delete_flag <> c_y --'Y'
1188       AND SYSDATE BETWEEN rrel.start_date_active AND
1189           NVL(rrel.end_date_active,SYSDATE)
1190       AND mem.resource_id = c_resource_id
1191       AND mem.group_id = u.group_id
1192       AND u.usage = c_sales --'SALES'
1193       AND mem.group_id = grp.group_id
1194       AND SYSDATE BETWEEN grp.start_date_active AND
1195           NVL(grp.end_date_active,SYSDATE)
1196       AND ROWNUM < 2;
1197 
1198     -- Get sequence
1199     CURSOR c_get_conseq_cur IS
1200     SELECT fnd_concurrent_requests_s.nextval
1201     FROM   dual;
1202 
1203     l_api_name                  CONSTANT VARCHAR2(30)
1204                                 := 'Build_Lead_Sales_Team';
1205     l_api_version_number        CONSTANT NUMBER   := 2.0;
1206     l_customer_id               NUMBER;
1207     l_address_id                NUMBER;
1208     l_assign_to_salesforce_id   NUMBER;
1209     l_assign_sales_group_id     NUMBER;
1210     l_referral_type             VARCHAR2(30);
1211     l_referred_by               NUMBER;
1212     l_partner_flag              VARCHAR2(1) := 'N';
1213     l_partner_cont_party_id     NUMBER;
1214     l_partner_org_sf_id         NUMBER;
1215     l_partner_name              VARCHAR2(360);
1216 
1217     l_lead_owner_tbl            AS_SALES_LEAD_OWNER.lead_owner_rec_tbl_type;
1218 
1219     l_AssignResources_Tbl       JTF_ASSIGN_PUB.AssignResources_Tbl_type;
1220                              -- JTF_TERRITORY_PUB.WinningTerrMember_tbl_type;
1221     l_AssignResources_Rec       JTF_ASSIGN_PUB.AssignResources_Rec_type;
1222                              -- JTF_TERRITORY_PUB.JTF_Lead_rec_type;
1223 --    l_lead_rec                  JTF_ASSIGN_PUB.JTF_Lead_rec_type;
1224     l_lead_rec                  JTF_TERRITORY_PUB.JTF_Lead_BULK_rec_type;
1225     l_return_status             VARCHAR2(10);
1226     l_count                     INTEGER  := 0;
1227     l_identity_sales_member_rec AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
1228     l_access_profile_rec        AS_ACCESS_PUB.Access_Profile_Rec_Type;
1229 
1230     l_data                      VARCHAR2(70);
1231     l_index_out                 NUMBER;
1232 
1233 
1234     -- The following variables are for as_accesses_all
1235     l_access_id_tbl             NUMBER_TABLE;
1236     l_owner_flag_tbl            FLAG_TABLE;
1237 
1238     -- The following variables are for as_territory_accesses
1239     l_ta_access_id_tbl          NUMBER_TABLE;
1240     l_ta_terr_id_tbl            NUMBER_TABLE;
1241 
1242     -- index of the above variables
1243     l_index                     NUMBER;
1244     l_ta_index                  NUMBER;
1245 
1246     l_access_id                 NUMBER;
1247     l_terr_id                   NUMBER;
1248     l_resource_id               NUMBER;
1249     l_group_id                  NUMBER;
1250     l_person_id                 NUMBER;
1251     l_team_leader_flag          VARCHAR2(1);
1252     l_found_flag                VARCHAR2(1);
1253     l_found_flag2               VARCHAR2(1);
1254     l_process_flag              VARCHAR2(1);
1255     l_salesforce_flag           VARCHAR2(1);
1256     l_assign_manual_flag        VARCHAR2(1);
1257     l_request_id                NUMBER;
1258 
1259     l_rs_id                     NUMBER;
1260     l_itemtype                  VARCHAR2(8);
1261     l_itemkey                   VARCHAR2(30);
1262 BEGIN
1263       -- Standard Start of API savepoint
1264       SAVEPOINT BUILD_LEAD_SALES_TEAM_PVT;
1265 
1266       -- Standard call to check for call compatibility.
1267       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1268                                            p_api_version_number,
1269                                            l_api_name,
1270                                            G_PKG_NAME)
1271       THEN
1272           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1273       END IF;
1274 
1275       -- Initialize message list IF p_init_msg_list is set to TRUE.
1276       IF FND_API.to_Boolean( p_init_msg_list )
1277       THEN
1278           FND_MSG_PUB.initialize;
1279       END IF;
1280 
1281       -- Debug Message
1282       IF (AS_DEBUG_LOW_ON) THEN
1283       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1284                                    'PVT:' || l_api_name || ' Start');
1285       END IF;
1286 
1287       -- Initialize API return status to SUCCESS
1288       x_return_status := FND_API.G_RET_STS_SUCCESS;
1289 
1290       --
1291       -- Api body
1292       --
1293       -- ******************************************************************
1294       -- Validate Environment
1295       -- ******************************************************************
1296 
1297       IF FND_GLOBAL.User_Id IS NULL
1298       THEN
1299           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
1300           THEN
1301               AS_UTILITY_PVT.Set_Message(
1302                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1303                   p_msg_name      => 'UT_CANNOT_GET_PROFILE_VALUE',
1304                   p_token1        => 'PROFILE',
1305                   p_token1_value  => 'USER_ID');
1306           END IF;
1307           RAISE FND_API.G_EXC_ERROR;
1308       END IF;
1309 
1310       IF (p_validation_level = fnd_api.g_valid_level_full)
1311       THEN
1312           AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
1313               p_api_version_number => 2.0
1314              ,p_init_msg_list      => p_init_msg_list
1315              ,p_salesforce_id      => P_Identity_Salesforce_Id
1316              ,p_admin_group_id     => p_admin_group_id
1317              ,x_return_status      => x_return_status
1318              ,x_msg_count          => x_msg_count
1319              ,x_msg_data           => x_msg_data
1320              ,x_sales_member_rec   => l_identity_sales_member_rec);
1321       END IF;
1322 
1323       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1324           RAISE FND_API.G_EXC_ERROR;
1325       END IF;
1326 
1327       OPEN C_Get_Lead_Info(p_Sales_Lead_Id);
1328       FETCH C_Get_Lead_Info INTO
1329           l_customer_id, l_address_id, l_assign_to_salesforce_id,
1330           l_assign_sales_group_id, l_referral_type, l_referred_by;
1331       CLOSE C_Get_Lead_Info;
1332 
1333       IF NVL(fnd_profile.value('AS_ENABLE_LEAD_ONLINE_TAP'), 'Y') = 'N' AND
1334          l_assign_to_salesforce_id IS NOT NULL
1335       THEN
1336           IF (AS_DEBUG_LOW_ON) THEN
1337               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1338                   'Online TAP disabled/owner exist');
1339           END IF;
1340           Add_Creator_In_Sales_Team(l_customer_id, l_address_id,
1341               p_sales_lead_id, p_identity_salesforce_id, p_salesgroup_id);
1342           -- Standard call to get message count and IF count is 1,
1343           -- get message info.
1344           FND_MSG_PUB.Count_And_Get
1345           (  p_count          =>   x_msg_count,
1346              p_data           =>   x_msg_data );
1347 
1348           RETURN;
1349       END IF;
1350 
1351       OPEN C_Validate_Partner_User(p_identity_salesforce_id);
1352       FETCH C_Validate_Partner_User INTO l_partner_flag;
1353       CLOSE C_Validate_Partner_User;
1354 
1355       g_i_count := 0;
1356       g_u_count := 0;
1357       g_ti_count := 0;
1358       g_tu_count := 0;
1359 
1360       -- Referral type is not null, for CAPRI
1361       IF l_referral_type IS NOT NULL
1362       THEN
1363           IF (AS_DEBUG_LOW_ON) THEN
1364           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1365               'Referral_type is ' || l_referral_type);
1366           END IF;
1367 
1368           AS_SALES_LEAD_OWNER.Get_Salesreps(
1369               p_api_version       => 2.0
1370              ,p_init_msg_list     => FND_API.g_false
1371              ,p_commit            => FND_API.g_false
1372              ,p_validation_level  => p_Validation_Level
1373              ,p_sales_lead_id     => p_sales_lead_id
1374              ,x_salesreps_tbl     => l_lead_owner_tbl
1375              ,x_return_status     => l_return_status
1376              ,x_msg_count         => x_msg_count
1377              ,x_msg_data          => x_msg_data);
1378 
1379           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1380               RAISE FND_API.G_EXC_ERROR;
1381           END IF;
1382 
1383           IF (AS_DEBUG_LOW_ON) THEN
1384           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1385               'owner count=' || l_lead_owner_tbl.count);
1386           END IF;
1387 
1388           IF l_lead_owner_tbl.count > 0
1389           THEN
1390               FOR i IN l_lead_owner_tbl.first..l_lead_owner_tbl.last
1391               LOOP
1392                   OPEN c_get_group_id (l_lead_owner_tbl(i).cm_resource_id,
1393                       'RS_GROUP_MEMBER', 'SALES',
1394                       'TELESALES', 'FIELDSALES', 'PRM', 'Y');
1395                   FETCH c_get_group_id INTO l_group_id;
1396                   CLOSE c_get_group_id;
1397 
1398                   Insert_Access_Records(
1399                       p_resource_id      => l_lead_owner_tbl(i).cm_resource_id,
1400                       p_group_id         => l_group_id,
1401                       p_full_access_flag => 'Y',
1402                       p_party_id         => l_customer_id,
1403                       p_party_site_id    => l_address_id,
1404                       p_sales_lead_id    => p_sales_lead_id,
1405                       p_freeze_flag      => 'Y',
1406                       p_owner_flag       => l_lead_owner_tbl(i).owner_flag,
1407                       p_source           => 'LDOWNER');
1408 
1409               END LOOP;
1410           END IF;
1411           IF (AS_DEBUG_LOW_ON) THEN
1412           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1413               'referred_by=' || l_referred_by);
1414           END IF;
1415 
1416           OPEN C_Get_CM(l_referred_by);
1417           FETCH C_Get_CM INTO l_resource_id;
1418           IF (AS_DEBUG_LOW_ON) THEN
1419           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1420               'cm_id=' || l_resource_id);
1421           END IF;
1422           IF C_Get_CM%FOUND AND l_resource_id IS NOT NULL
1423           THEN
1424               IF (AS_DEBUG_LOW_ON) THEN
1425               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1426                   'Add CM of referred by');
1427               END IF;
1428               OPEN c_get_group_id (l_resource_id, 'RS_GROUP_MEMBER', 'SALES',
1429                   'TELESALES', 'FIELDSALES', 'PRM', 'Y');
1430               FETCH c_get_group_id INTO l_group_id;
1431               CLOSE c_get_group_id;
1432 
1433               Insert_Access_Records(
1434                   p_resource_id      => l_resource_id,
1435                   p_group_id         => l_group_id,
1436                   p_full_access_flag => 'Y',
1437                   p_party_id         => l_customer_id,
1438                   p_party_site_id    => l_address_id,
1439                   p_sales_lead_id    => p_sales_lead_id,
1440                   p_freeze_flag      => 'Y',
1441                   p_owner_flag       => 'Y',
1442                   p_source           => 'LDOWNER');
1443           ELSE
1444               -- Bug 2364709.
1445               -- Set message if there's no channel manager
1446               IF C_Get_CM%FOUND
1447               THEN
1448                   -- l_resource_id must be null in this case.
1449                   OPEN C_Get_Partner_Name(l_referred_by);
1450                   FETCH C_Get_Partner_Name INTO l_partner_name;
1451                   CLOSE C_Get_Partner_Name;
1452                   AS_UTILITY_PVT.Set_Message(
1453                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1454                       p_msg_name      => 'AS_CM_NOT_DEFINED_FOR_PARTNER',
1455                       p_token1        => 'PARTNER_NAME',
1456                       p_token1_value  => l_partner_name);
1457               END IF;
1458           END IF;
1459           CLOSE C_Get_CM;
1460 
1461           IF l_partner_flag = 'Y'
1462           THEN
1463               IF (AS_DEBUG_LOW_ON) THEN
1464               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1465                   'partner user=' || p_identity_salesforce_id);
1466               END IF;
1467               OPEN C_Get_Partner_Cont_Party_id(p_identity_salesforce_id);
1468               FETCH C_Get_Partner_Cont_Party_id INTO l_partner_cont_party_id;
1469               CLOSE C_Get_Partner_Cont_Party_id;
1470 
1471               Insert_Access_Records(
1472                   p_resource_id           => p_identity_salesforce_id,
1473                   p_group_id              => p_salesgroup_id,
1474                   p_full_access_flag      => 'Y',
1475                   p_party_id              => l_customer_id,
1476                   p_party_site_id         => l_address_id,
1477                   p_partner_cont_party_id => l_partner_cont_party_id,
1478                   p_sales_lead_id         => p_sales_lead_id,
1479                   p_freeze_flag           => 'Y',
1480                   p_owner_flag            => 'N',
1481                   p_source                => 'CREATOR');
1482           END IF; -- l_partner_flag = 'Y'
1483 
1484           -- Bug 2364567.
1485           -- Add partner in sales team even though lead is not created
1486           -- by partner
1487           OPEN C_Get_Partner_Org_sf_id(l_referred_by);
1488           FETCH C_Get_Partner_Org_sf_id INTO l_partner_org_sf_id;
1489           CLOSE C_Get_Partner_Org_sf_id;
1490           IF (AS_DEBUG_LOW_ON) THEN
1491           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1492               'partner org=' || l_partner_org_sf_id);
1493           END IF;
1494 
1495           Insert_Access_Records(
1496               p_resource_id         => l_partner_org_sf_id,
1497               p_group_id            => NULL,
1498               p_full_access_flag    => 'Y',
1499               p_party_id            => l_customer_id,
1500               p_party_site_id       => l_address_id,
1501               p_partner_customer_id => l_referred_by,
1502               p_sales_lead_id       => p_sales_lead_id,
1503               p_freeze_flag         => 'Y',
1504               p_owner_flag          => 'N',
1505               p_source              => 'CREATOR');
1506       END IF; -- l_referral_type IS NOT NULL
1507 
1508       l_lead_rec.squal_num06.extend;
1509       l_lead_rec.TRANS_OBJECT_ID.extend;
1510 
1511       IF l_address_id IS NOT NULL
1512       THEN
1513           -- Sales lead is created in party site level.
1514           IF (AS_DEBUG_LOW_ON) THEN
1515           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1516               'Open C_Get_Sales_Lead1');
1517           END IF;
1518           OPEN C_Get_Sales_Lead1(p_Sales_Lead_Id, 'HZ_PARTY_SITES', 'A',
1519                                  'Y', 'PHONE', 'PERSON', 'ORGANIZATION');
1520           FETCH C_Get_Sales_Lead1 BULK COLLECT INTO
1521               l_lead_rec.SALES_LEAD_ID,
1522               l_lead_rec.SALES_LEAD_LINE_ID,
1523               l_lead_rec.CITY,
1524               l_lead_rec.POSTAL_CODE,
1525               l_lead_rec.STATE,
1526               l_lead_rec.PROVINCE,
1527               l_lead_rec.COUNTY,
1528               l_lead_rec.COUNTRY,
1529               l_lead_rec.PARTY_SITE_ID,
1530               l_lead_rec.AREA_CODE,
1531               l_lead_rec.PARTY_ID,
1532               l_lead_rec.COMP_NAME_RANGE,
1533               l_lead_rec.PARTNER_ID,
1534               l_lead_rec.NUM_OF_EMPLOYEES,
1535               l_lead_rec.CATEGORY_CODE,
1536               l_lead_rec.PARTY_RELATIONSHIP_ID,
1537               l_lead_rec.SIC_CODE,
1538               l_lead_rec.BUDGET_AMOUNT,
1539               l_lead_rec.CURRENCY_CODE,
1540               l_lead_rec.PRICING_DATE,
1541               l_lead_rec.SOURCE_PROMOTION_ID,
1542               l_lead_rec.INVENTORY_ITEM_ID,
1543               l_lead_rec.PURCHASE_AMOUNT,
1544               l_lead_rec.SQUAL_NUM01,
1545               l_lead_rec.CAR_CURRENCY_CODE,
1546               l_lead_rec.SQUAL_CHAR11,
1547               l_lead_rec.SQUAL_CHAR30;
1548           CLOSE C_Get_Sales_Lead1;
1549       ELSE
1550           -- Sales lead is created in party level.
1551           IF (AS_DEBUG_LOW_ON) THEN
1552           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1553               'Open C_Get_Sales_Lead2');
1554           END IF;
1555           OPEN C_Get_Sales_Lead2(p_Sales_Lead_Id, 'HZ_PARTIES', 'A',
1556                                  'Y', 'PHONE', 'PERSON', 'ORGANIZATION');
1557           FETCH C_Get_Sales_Lead2 BULK COLLECT INTO
1558               l_lead_rec.SALES_LEAD_ID,
1559               l_lead_rec.SALES_LEAD_LINE_ID,
1560               l_lead_rec.CITY,
1561               l_lead_rec.POSTAL_CODE,
1562               l_lead_rec.STATE,
1563               l_lead_rec.PROVINCE,
1564               l_lead_rec.COUNTY,
1565               l_lead_rec.COUNTRY,
1566               l_lead_rec.PARTY_SITE_ID,
1567               l_lead_rec.AREA_CODE,
1568               l_lead_rec.PARTY_ID,
1569               l_lead_rec.COMP_NAME_RANGE,
1570               l_lead_rec.PARTNER_ID,
1571               l_lead_rec.NUM_OF_EMPLOYEES,
1572               l_lead_rec.CATEGORY_CODE,
1573               l_lead_rec.PARTY_RELATIONSHIP_ID,
1574               l_lead_rec.SIC_CODE,
1575               l_lead_rec.BUDGET_AMOUNT,
1576               l_lead_rec.CURRENCY_CODE,
1577               l_lead_rec.PRICING_DATE,
1578               l_lead_rec.SOURCE_PROMOTION_ID,
1579               l_lead_rec.INVENTORY_ITEM_ID,
1580               l_lead_rec.PURCHASE_AMOUNT,
1581               l_lead_rec.SQUAL_NUM01,
1582               l_lead_rec.CAR_CURRENCY_CODE,
1583               l_lead_rec.SQUAL_CHAR11,
1584               l_lead_rec.SQUAL_CHAR30;
1585           CLOSE C_Get_Sales_Lead2;
1586       END IF;
1587 
1588       IF (AS_DEBUG_LOW_ON) THEN
1589       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1590           'sales_lead_id.count='|| l_lead_rec.sales_lead_id.count);
1591       END IF;
1592       IF l_lead_rec.sales_lead_id.count = 0
1593       THEN
1594           -- customer_id and address_id of this sales lead don't match each
1595           -- other, don't do any change and return.
1596           RETURN;
1597       END IF;
1598 
1599       IF (AS_DEBUG_LOW_ON) THEN
1600       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1601           'SALES_LEAD_ID : ' || l_lead_rec.SALES_LEAD_ID(1));
1602       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1603           'CITY : ' || l_lead_rec.CITY(1));
1604       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1605           'POSTAL_CODE : ' || l_lead_rec.POSTAL_CODE(1));
1606       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1607           'STATE : ' || l_lead_rec.STATE(1));
1608       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1609           'PROVINCE : ' || l_lead_rec.PROVINCE(1));
1610       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1611           'COUNTY : ' || l_lead_rec.COUNTY(1));
1612       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1613           'COUNTRY : ' || l_lead_rec.COUNTRY(1));
1614       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1615           'PARTY_SITE_ID : ' || l_lead_rec.PARTY_SITE_ID(1));
1616       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1617           'AREA_CODE : ' || l_lead_rec.AREA_CODE(1));
1618       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1619           'PARTY_ID : ' || l_lead_rec.PARTY_ID(1));
1620       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1621           'CUSTOMER_NAME : ' || l_lead_rec.COMP_NAME_RANGE(1));
1622       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1623           'PARTNER_ID : ' || l_lead_rec.PARTY_ID(1));
1624       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1625           'NUM_OF_EMPLOYEES : ' || l_lead_rec.NUM_OF_EMPLOYEES(1));
1626       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1627           'CATEGORY_CODE : ' || l_lead_rec.CATEGORY_CODE(1));
1628       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1629           'PARTY_RELATIONSHIP_ID : ' || l_lead_rec.PARTY_RELATIONSHIP_ID(1));
1630       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1631           'SIC_CODE : ' || l_lead_rec.SIC_CODE(1));
1632       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1633           'BUDGET_AMOUNT : ' || l_lead_rec.BUDGET_AMOUNT(1));
1634       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1635           'CURRENCY_CODE : ' || l_lead_rec.CURRENCY_CODE(1));
1636       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1637           'PRICING_DATE: ' || l_lead_rec.PRICING_DATE(1));
1638       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1639           'PROMOTION_ID: ' || l_lead_rec.SOURCE_PROMOTION_ID(1));
1640       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1641           'SQUAL_NUM01: ' || l_lead_rec.SQUAL_NUM01(1));
1642       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1643           'CAR_CURRENCY_CODE: ' || l_lead_rec.CAR_CURRENCY_CODE(1));
1644       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1645           'DUNS_NUMBER_C: ' || l_lead_rec.SQUAL_CHAR11(1));
1646       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1647           'CHANNEL_CODE: ' || l_lead_rec.SQUAL_CHAR30(1));
1648       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1649           'Calling JTF_ASSIGN_PUB.Get_Assign_Lead_Resources');
1650       END IF;
1651 
1652       JTF_ASSIGN_PUB.Get_Assign_Lead_Resources (
1653             p_api_version                    => 1.0
1654            ,p_init_msg_list                  => JTF_ASSIGN_PUB.AM_FALSE
1655            -- ,p_commit                         => FND_API.G_FALSE
1656            ,p_resource_type                  => NULL
1657            ,p_role                           => NULL
1658            ,p_no_of_resources                => 999
1659            ,p_auto_select_flag               => NULL
1660            ,p_effort_duration                => 8
1661            ,p_effort_uom                     => 'HR'
1662            ,p_start_date                     => SYSDATE-1
1663            ,p_end_date                       => SYSDATE+1
1664            ,p_territory_flag                 => 'Y'
1665            ,p_calendar_flag                  => 'N'
1666            ,p_lead_rec                       => l_lead_rec
1667            ,x_assign_resources_tbl           => l_assignresources_tbl
1668            ,x_return_status                  => l_return_status
1669            ,x_msg_count                      => x_msg_count
1670            ,x_msg_data                       => x_msg_data
1671         );
1672 
1673       IF l_return_status = 'E'
1674       THEN
1675           FND_MSG_PUB.Get (
1676               p_msg_index       => FND_MSG_PUB.G_LAST,
1677               p_encoded         => FND_API.G_TRUE ,
1678               p_data            => l_data,
1679               p_msg_index_out   => l_index_out
1680               );
1681           IF (AS_DEBUG_LOW_ON) THEN
1682           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1683               l_data);
1684           END IF;
1685 
1686       ELSIF l_return_status <> FND_API.G_RET_STS_SUCCESS
1687       THEN
1688           RAISE FND_API.G_EXC_ERROR;
1689       END IF;
1690 
1691       IF (AS_DEBUG_LOW_ON) THEN
1692       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1693           'count=' || l_assignresources_tbl.count);
1694       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1695           'first = '||l_assignresources_tbl.first);
1696       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1697           'last = '||l_assignresources_tbl.last);
1698       END IF;
1699 
1700       l_count := l_AssignResources_tbl.COUNT;
1701       l_index := 1;
1702       l_ta_index := 1;
1703       IF l_AssignResources_tbl.COUNT > 0
1704       THEN
1705           FOR i IN l_AssignResources_tbl.first..l_AssignResources_tbl.last
1706           LOOP
1707               IF (AS_DEBUG_LOW_ON) THEN
1708               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1709                   'Terr ID(' || i || ') : '
1710                   || l_AssignResources_tbl(i).Terr_Id);
1711               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1712                   'Resource ID(' || i || ') : '
1713                   || l_AssignResources_tbl(i).Resource_Id);
1714               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1715                   'Group ID(' || i || ') : '
1716                   || l_AssignResources_tbl(i).Group_Id);
1717               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1718                   'Role(' || i || ') : '
1719                   || l_AssignResources_tbl(i).Role);
1720               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1721                   'Full_Access_Flag(' || i || ') : '
1722                   || l_AssignResources_tbl(i).Full_Access_Flag);
1723               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1724                   'Resource_Type(' || i || ') : '
1725                   || l_AssignResources_tbl(i).Resource_Type);
1726               END IF;
1727 
1728               IF l_AssignResources_tbl(i).Resource_Type = 'RS_TEAM'
1729               THEN
1730                   IF (AS_DEBUG_LOW_ON) THEN
1731                       AS_UTILITY_PVT.Debug_Message(
1732                           FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1733                               'Resource Team found');
1734                   END IF;
1735                   OPEN C_Explode_Resource_Team(
1736                            l_AssignResources_tbl(i).Resource_Id);
1737                   LOOP
1738                       FETCH C_Explode_Resource_Team INTO
1739                           l_resource_id, l_group_id, l_person_id;
1740                       EXIT WHEN C_Explode_Resource_Team%NOTFOUND;
1741                       IF (AS_DEBUG_LOW_ON) THEN
1742                           AS_UTILITY_PVT.Debug_Message(
1743                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1744                               ' Resource_Id: ' || l_resource_id);
1745                           AS_UTILITY_PVT.Debug_Message(
1746                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1747                               ' Group_Id: ' || l_group_id);
1748                           AS_UTILITY_PVT.Debug_Message(
1749                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1750                               ' Person_Id: ' || l_person_id);
1751                       END IF;
1752                       Insert_Access_Records(
1753                           p_resource_id      => l_resource_id,
1754                           p_group_id         => l_group_id,
1755                           p_full_access_flag =>
1756                               l_AssignResources_tbl(i).Full_Access_Flag,
1757                           p_territory_id     =>
1758                               l_AssignResources_tbl(i).Terr_Id,
1759                           p_party_id         => l_customer_id,
1760                           p_party_site_id    => l_address_id,
1761                           p_sales_lead_id    => p_sales_lead_id,
1762                           p_freeze_flag      => 'N',
1763                           p_owner_flag       => 'N',
1764                           p_source           => 'TERRITORY');
1765                   END LOOP;
1766                   CLOSE C_Explode_Resource_Team;
1767               ELSIF l_AssignResources_tbl(i).Resource_Type = 'RS_GROUP'
1768               THEN
1769                   IF (AS_DEBUG_LOW_ON) THEN
1770                       AS_UTILITY_PVT.Debug_Message(
1771                           FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1772                               'Resource Group found');
1773                   END IF;
1774                   OPEN C_Explode_Resource_Group(
1775                            l_AssignResources_tbl(i).Resource_Id);
1776                   LOOP
1777                       FETCH C_Explode_Resource_Group INTO
1778                           l_resource_id, l_group_id, l_person_id;
1779                       EXIT WHEN C_Explode_Resource_Group%NOTFOUND;
1780                       IF (AS_DEBUG_LOW_ON) THEN
1781                           AS_UTILITY_PVT.Debug_Message(
1782                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1783                               ' Resource_Id: ' || l_resource_id);
1784                           AS_UTILITY_PVT.Debug_Message(
1785                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1786                               ' Group_Id: ' || l_group_id);
1787                           AS_UTILITY_PVT.Debug_Message(
1788                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1789                               ' Person_Id: ' || l_person_id);
1790                       END IF;
1791                       Insert_Access_Records(
1792                           p_resource_id      => l_resource_id,
1793                           p_group_id         => l_group_id,
1794                           p_full_access_flag =>
1795                               l_AssignResources_tbl(i).Full_Access_Flag,
1796                           p_territory_id     =>
1797                               l_AssignResources_tbl(i).Terr_Id,
1798                           p_party_id         => l_customer_id,
1799                           p_party_site_id    => l_address_id,
1800                           p_sales_lead_id    => p_sales_lead_id,
1801                           p_freeze_flag      => 'N',
1802                           p_owner_flag       => 'N',
1803                           p_source           => 'TERRITORY');
1804                   END LOOP;
1805                   CLOSE C_Explode_Resource_Group;
1806               ELSE
1807                   -- not resource team or resource group
1808                   l_salesforce_flag := 'N';
1809                   OPEN C_Validate_Salesforce(
1810                       l_AssignResources_tbl(i).Resource_Id,
1811                       'RS_INDIVIDUAL', 'SALES', 'TELESALES',
1812                       'FIELDSALES', 'PRM', 'N', 'EMPLOYEE');
1813                   FETCH C_Validate_Salesforce INTO l_salesforce_flag;
1814                   CLOSE C_Validate_Salesforce;
1815 
1816                   IF l_salesforce_flag = 'Y'
1817                   THEN
1818                       Insert_Access_Records(
1819                           p_resource_id      =>
1820                               l_AssignResources_tbl(i).Resource_Id,
1821                           p_group_id         =>
1822                               l_AssignResources_tbl(i).Group_Id,
1823                           p_full_access_flag =>
1824                               l_AssignResources_tbl(i).Full_Access_Flag,
1825                           p_territory_id     =>
1826                               l_AssignResources_tbl(i).Terr_Id,
1827                           p_party_id         => l_customer_id,
1828                           p_party_site_id    => l_address_id,
1829                           p_sales_lead_id    => p_sales_lead_id,
1830                           p_freeze_flag      => 'N',
1831                           p_owner_flag       => 'N',
1832                           p_source           => 'TERRITORY');
1833                   ELSE
1834                       IF (AS_DEBUG_LOW_ON) THEN
1835                           AS_UTILITY_PVT.Debug_Message(
1836                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1837                               'rs_id ' ||
1838                               l_AssignResources_tbl(i).Resource_Id ||
1839                               ' is not salesforce');
1840                       END IF;
1841                   END IF; -- l_salesforce_flag = 'Y'
1842               END IF; -- resource type
1843           END LOOP; -- l_AssignResources_tbl.first..l_AssignResources_tbl.last
1844       END IF; -- l_AssignResources_tbl.COUNT > 0
1845 
1846       l_request_id := FND_GLOBAL.Conc_Request_Id;
1847       IF (AS_DEBUG_LOW_ON) THEN
1848       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1849           'req_id :' || l_request_id);
1850       END IF;
1851       IF l_request_id = 0 OR l_request_id = -1
1852       THEN
1853           -- If l_request_id = 0 or -1, select directly from sequence
1854           OPEN c_get_conseq_cur;
1855           FETCH c_get_conseq_cur INTO l_request_id;
1856           CLOSE c_get_conseq_cur;
1857       END IF;
1858       IF (AS_DEBUG_LOW_ON) THEN
1859       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1860           'req_id :' || l_request_id);
1861       END IF;
1862 
1863       IF l_assign_to_salesforce_id IS NOT NULL
1864       THEN
1865           -- Check whether user assigned owner is in the list or not.
1866           l_index := g_i_count;
1867           l_found_flag := 'N';
1868           WHILE l_index > 0
1869           LOOP
1870               IF g_i_resource_id(l_index) = l_assign_to_salesforce_id AND
1871                  NVL(g_i_group_id(l_index),-1) = NVL(l_assign_sales_group_id,-1)
1872               THEN
1873                   l_found_flag := 'Y';
1874                   EXIT;
1875               END IF;
1876               l_index := l_index - 1;
1877           END LOOP;
1878           IF l_found_flag = 'Y'
1879           THEN
1880               IF (AS_DEBUG_LOW_ON) THEN
1881               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1882                   'l_index=' || l_index || ',same as assignee');
1883               END IF;
1884               IF l_index < g_i_count
1885               THEN
1886                   WHILE l_index < g_i_count
1887                   LOOP
1888                       g_i_access_id(l_index) := g_i_access_id(l_index+1);
1889                       g_i_resource_id(l_index) := g_i_resource_id(l_index+1);
1890                       g_i_group_id(l_index) := g_i_group_id(l_index+1);
1891                       g_i_territory_id(l_index) := g_i_territory_id(l_index+1);
1892                       g_i_party_id(l_index) := g_i_party_id(l_index+1);
1893                       g_i_party_site_id(l_index) :=
1894                           g_i_party_site_id(l_index+1);
1895                       g_i_sales_lead_id(l_index) :=
1896                           g_i_sales_lead_id(l_index+1);
1897                       g_i_full_access_flag(l_index) :=
1898                           g_i_full_access_flag(l_index+1);
1899                       g_i_owner_flag(l_index) := g_i_owner_flag(l_index+1);
1900                       g_i_freeze_flag(l_index) := g_i_freeze_flag(l_index+1);
1901                       g_i_source(l_index) := g_i_source(l_index+1);
1902                       g_i_partner_cont_party_id(l_index) :=
1903                           g_i_partner_cont_party_id(l_index+1);
1904                       g_i_partner_customer_id(l_index) :=
1905                           g_i_partner_customer_id(l_index+1);
1906 
1907                       l_index := l_index + 1;
1908                   END LOOP;
1909               END IF;
1910               g_i_access_id.delete(g_i_count);
1911               g_i_resource_id.delete(g_i_count);
1912               g_i_group_id.delete(g_i_count);
1913               g_i_territory_id.delete(g_i_count);
1914               g_i_party_id.delete(g_i_count);
1915               g_i_party_site_id.delete(g_i_count);
1916               g_i_sales_lead_id.delete(g_i_count);
1917               g_i_full_access_flag.delete(g_i_count);
1918               g_i_owner_flag.delete(g_i_count);
1919               g_i_freeze_flag.delete(g_i_count);
1920               g_i_source.delete(g_i_count);
1921               g_i_partner_cont_party_id.delete(g_i_count);
1922               g_i_partner_customer_id.delete(g_i_count);
1923               g_i_count := g_i_count - 1;
1924           END IF; -- l_found_flag = 'Y'
1925       END IF; -- l_assign_to_salesforce_id IS NOT NULL
1926 
1927       Flush_Access_Records(l_request_id);
1928 
1929       IF (AS_DEBUG_LOW_ON) THEN
1930       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1931           'assign_to_sf_id=' || l_assign_to_salesforce_id);
1932       END IF;
1933 
1934       Add_Creator_In_Sales_Team(l_customer_id, l_address_id,
1935           p_sales_lead_id, p_identity_salesforce_id, p_salesgroup_id);
1936 
1937       x_request_id := l_request_id;
1938       --
1939       -- END of API body
1940       --
1941 
1942       -- Standard check for p_commit
1943       IF FND_API.to_Boolean( p_commit )
1944       THEN
1945           COMMIT WORK;
1946       END IF;
1947 
1948       -- Debug Message
1949       IF (AS_DEBUG_LOW_ON) THEN
1950       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1951                                    'PVT: ' || l_api_name || ' End');
1952       END IF;
1953 
1954       -- Standard call to get message count and IF count is 1, get message info.
1955       IF x_return_status = 'W'
1956       THEN
1957           FND_MSG_PUB.Count_And_Get
1958           (
1959              p_encoded        =>   FND_API.G_FALSE,
1960              p_count          =>   x_msg_count,
1961              p_data           =>   x_msg_data );
1962       ELSE
1963           FND_MSG_PUB.Count_And_Get
1964           (  p_count          =>   x_msg_count,
1965              p_data           =>   x_msg_data );
1966       END IF;
1967 
1968       EXCEPTION
1969           WHEN FND_API.G_EXC_ERROR THEN
1970               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1971                    P_API_NAME => L_API_NAME
1972                   ,P_PKG_NAME => G_PKG_NAME
1973                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
1974                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1975                   ,X_MSG_COUNT => X_MSG_COUNT
1976                   ,X_MSG_DATA => X_MSG_DATA
1977                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1978 
1979           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1980               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1981                    P_API_NAME => L_API_NAME
1982                   ,P_PKG_NAME => G_PKG_NAME
1983                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1984                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1985                   ,X_MSG_COUNT => X_MSG_COUNT
1986                   ,X_MSG_DATA => X_MSG_DATA
1987                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1988 
1989           WHEN OTHERS THEN
1990               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1991                    P_API_NAME => L_API_NAME
1992                   ,P_PKG_NAME => G_PKG_NAME
1993                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
1994                   ,P_SQLCODE => SQLCODE
1995                   ,P_SQLERRM => SQLERRM
1996                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1997                   ,X_MSG_COUNT => X_MSG_COUNT
1998                   ,X_MSG_DATA => X_MSG_DATA
1999                   ,X_RETURN_STATUS => X_RETURN_STATUS);
2000 END Build_Lead_Sales_Team;
2001 
2002 
2003 --   API Name:  Rebuild_Lead_Sales_Team
2004 
2005 PROCEDURE Rebuild_Lead_Sales_Team(
2006     P_Api_Version_Number      IN  NUMBER,
2007     P_Init_Msg_List           IN  VARCHAR2    := FND_API.G_FALSE,
2008     p_Commit                  IN  VARCHAR2    := FND_API.G_FALSE,
2009     p_Validation_Level        IN  NUMBER      := FND_API.G_VALID_LEVEL_FULL,
2010     P_Admin_Group_Id          IN  NUMBER      := FND_API.G_MISS_NUM,
2011     P_identity_salesforce_id  IN  NUMBER      := FND_API.G_MISS_NUM,
2012     P_Salesgroup_id           IN  NUMBER      := FND_API.G_MISS_NUM,
2013     P_Sales_Lead_Id           IN  NUMBER,
2014     X_Request_id              OUT NOCOPY NUMBER,
2015     X_Return_Status           OUT NOCOPY VARCHAR2,
2016     X_Msg_Count               OUT NOCOPY NUMBER,
2017     X_Msg_Data                OUT NOCOPY VARCHAR2
2018     )
2019  IS
2020     CURSOR C_Check_Changed(C_Sales_Lead_Id NUMBER) IS
2021       SELECT ADDRESS_ID
2022       FROM AS_CHANGED_ACCOUNTS_ALL
2023       WHERE SALES_LEAD_ID = C_Sales_Lead_Id
2024       AND PROCESSED_FLAG = 'N';
2025 
2026     CURSOR C_Get_Lead_Info(C_Sales_Lead_Id NUMBER) IS
2027       SELECT SL.CUSTOMER_ID,
2028              SL.ADDRESS_ID,
2029              SL.ASSIGN_TO_SALESFORCE_ID,
2030              SL.ASSIGN_SALES_GROUP_ID,
2031              SL.REJECT_REASON_CODE
2032       FROM AS_SALES_LEADS SL
2033       WHERE SL.SALES_LEAD_ID = C_Sales_Lead_Id;
2034 
2035     -- Bug 3035251
2036     -- Add UPPER for all VARCHAR2 qualifiers
2037     CURSOR C_Get_Sales_Lead1(C_Sales_Lead_Id NUMBER, c_hz_party_sites VARCHAR2,
2038                              c_status VARCHAR2, c_y VARCHAR2, c_phone VARCHAR2,
2039                              c_person VARCHAR2, c_organization VARCHAR2) IS
2040       SELECT SL.SALES_LEAD_ID,
2041              TO_NUMBER(NULL), -- sales_lead_line_id
2042              UPPER(ADDR.CITY),
2043              UPPER(ADDR.POSTAL_CODE),
2044              UPPER(ADDR.STATE),
2045              UPPER(ADDR.PROVINCE),
2046              UPPER(ADDR.COUNTY),
2047              UPPER(ADDR.COUNTRY),
2048              SITE.PARTY_SITE_ID,
2049              UPPER(PHONE.PHONE_AREA_CODE),
2050              PARTY.PARTY_ID,
2051              UPPER(PARTY.PARTY_NAME),
2052              PARTY.PARTY_ID,
2053              PARTY.EMPLOYEES_TOTAL,
2054              UPPER(PARTY.CATEGORY_CODE),
2055              PARTY.PARTY_ID,
2056              UPPER(PARTY.SIC_CODE_TYPE) || ': ' || UPPER(PARTY.SIC_CODE),
2057              SL.BUDGET_AMOUNT,
2058              UPPER(SL.CURRENCY_CODE),
2059              TRUNC(SL.CREATION_DATE),
2060              SL.SOURCE_PROMOTION_ID,
2061              TO_NUMBER(NULL), -- inventory_item_id
2062              TO_NUMBER(NULL), -- purchase_amount
2063              ORGP.CURR_FY_POTENTIAL_REVENUE,
2064              UPPER(ORGP.PREF_FUNCTIONAL_CURRENCY),
2065              UPPER(PARTY.DUNS_NUMBER_C),
2066              UPPER(SL.CHANNEL_CODE)
2067       FROM   AS_SALES_LEADS SL,
2068              HZ_CONTACT_POINTS PHONE,
2069              HZ_LOCATIONS ADDR,
2070              HZ_PARTY_SITES SITE,
2071              HZ_PARTIES PARTY,
2072              HZ_ORGANIZATION_PROFILES ORGP
2073       WHERE  SL.SALES_LEAD_ID = C_Sales_Lead_Id
2074         AND  SL.CUSTOMER_ID = PARTY.PARTY_ID
2075         AND  SL.ADDRESS_ID = SITE.PARTY_SITE_ID
2076         AND  PHONE.OWNER_TABLE_NAME(+) = c_hz_party_sites --'HZ_PARTY_SITES'
2077         AND  PHONE.PRIMARY_FLAG(+) = c_y --'Y'
2078         AND  PHONE.STATUS(+) = c_status
2079         AND  PHONE.CONTACT_POINT_TYPE(+) = c_phone --'PHONE'
2080         AND  SITE.PARTY_SITE_ID = PHONE.OWNER_TABLE_ID(+)
2081         AND  SITE.LOCATION_ID = ADDR.LOCATION_ID
2082         AND  PARTY.PARTY_ID = SITE.PARTY_ID
2083         AND (PARTY.PARTY_TYPE = c_person OR PARTY.PARTY_TYPE = c_organization)
2084         AND  PARTY.PARTY_ID = ORGP.PARTY_ID(+)
2085         AND  NVL(ORGP.EFFECTIVE_END_DATE(+),SYSDATE + 1) > SYSDATE;
2086 
2087     -- Bug 3035251
2088     -- Add UPPER for all VARCHAR2 qualifiers
2089     CURSOR C_Get_Sales_Lead2(C_Sales_Lead_Id NUMBER, c_hz_parties VARCHAR2,
2090                              c_status VARCHAR2, c_y VARCHAR2, c_phone VARCHAR2,
2091                              c_person VARCHAR2, c_organization VARCHAR2) IS
2092       SELECT SL.SALES_LEAD_ID,
2093              TO_NUMBER(NULL), -- sales_lead_line_id
2094              TO_CHAR(NULL),
2095              TO_CHAR(NULL),
2096              TO_CHAR(NULL),
2097              TO_CHAR(NULL),
2098              TO_CHAR(NULL),
2099              TO_CHAR(NULL),
2100              TO_NUMBER(NULL),
2101              UPPER(PHONE.PHONE_AREA_CODE),
2102              PARTY.PARTY_ID,
2103              UPPER(PARTY.PARTY_NAME),
2104              PARTY.PARTY_ID,
2105              PARTY.EMPLOYEES_TOTAL,
2106              UPPER(PARTY.CATEGORY_CODE),
2107              PARTY.PARTY_ID,
2108              UPPER(PARTY.SIC_CODE_TYPE) || ': ' || UPPER(PARTY.SIC_CODE),
2109              SL.BUDGET_AMOUNT,
2110              UPPER(SL.CURRENCY_CODE),
2111              TRUNC(SL.CREATION_DATE),
2112              SL.SOURCE_PROMOTION_ID,
2113              TO_NUMBER(NULL), -- inventory_item_id
2114              TO_NUMBER(NULL), -- purchase_amount
2115              ORGP.CURR_FY_POTENTIAL_REVENUE,
2116              UPPER(ORGP.PREF_FUNCTIONAL_CURRENCY),
2117              UPPER(PARTY.DUNS_NUMBER_C),
2118              UPPER(SL.CHANNEL_CODE)
2119       FROM   AS_SALES_LEADS SL,
2120              HZ_CONTACT_POINTS PHONE,
2121              HZ_PARTIES PARTY,
2122              HZ_ORGANIZATION_PROFILES ORGP
2123       WHERE  SL.SALES_LEAD_ID = C_Sales_Lead_Id
2124         AND  SL.CUSTOMER_ID = PARTY.PARTY_ID
2125         AND  PHONE.OWNER_TABLE_NAME(+) = c_hz_parties --'HZ_PARTIES'
2126         AND  PHONE.PRIMARY_FLAG(+) = c_y --'Y'
2127         AND  PHONE.STATUS(+) = c_status
2128         AND  PHONE.CONTACT_POINT_TYPE(+) = c_phone --'PHONE'
2129         AND  PARTY.PARTY_ID = PHONE.OWNER_TABLE_ID(+)
2130         AND (PARTY.PARTY_TYPE = c_person OR PARTY.PARTY_TYPE = c_organization)
2131         AND  PARTY.PARTY_ID = ORGP.PARTY_ID(+)
2132         AND  NVL(ORGP.EFFECTIVE_END_DATE(+),SYSDATE + 1) > SYSDATE;
2133 
2134     CURSOR C_Explode_Resource_Team(c_team_id NUMBER) IS
2135       SELECT J.resource_id, J.group_id, J.person_id
2136       FROM
2137         (
2138           SELECT MIN(tm.team_resource_id) resource_id,
2139                  MIN(tm.person_id) person_id2, MIN(G.group_id) group_id,
2140                  MIN(t.team_id) team_id, tres.category resource_category,
2141                  MIN(TRES.source_id) person_id
2142           FROM   jtf_rs_team_members tm, jtf_rs_teams_b t,
2143                  jtf_rs_team_usages tu, jtf_rs_role_relations trr,
2144                  jtf_rs_roles_b tr, jtf_rs_resource_extns tres,
2145                  (
2146                    SELECT m.group_id group_id, m.resource_id resource_id
2147                    FROM   jtf_rs_group_members m, jtf_rs_groups_b g,
2148                           jtf_rs_group_usages u, jtf_rs_role_relations rr,
2149                           jtf_rs_roles_b r, jtf_rs_resource_extns res
2150                    WHERE
2151                           m.group_id = g.group_id
2152                    AND    SYSDATE BETWEEN NVL(g.start_date_active,SYSDATE)
2153                                       AND NVL(g.end_date_active,SYSDATE)
2154                    AND    u.group_id = g.group_id
2155                    AND    u.usage = 'SALES'
2156                    AND    m.group_member_id = rr.role_resource_id
2157                    AND    rr.role_resource_type = 'RS_GROUP_MEMBER'
2158                    AND    rr.delete_flag <> 'Y'
2159                    AND    SYSDATE BETWEEN rr.start_date_active
2160                                   AND NVL(rr.end_date_active,SYSDATE)
2161                    AND    rr.role_id = r.role_id
2162                    AND    r.role_type_code IN
2163                           ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
2164                    AND    r.active_flag = 'Y'
2165                    AND    res.resource_id = m.resource_id
2166                    AND    res.category = 'EMPLOYEE'
2167                  )  g
2168           WHERE tm.team_id = t.team_id
2169           AND   SYSDATE BETWEEN NVL(t.start_date_active,SYSDATE)
2170                             AND NVL(t.end_date_active,SYSDATE)
2171           AND   tu.team_id = t.team_id
2172           AND   tu.usage = 'SALES'
2173           AND   tm.team_member_id = trr.role_resource_id
2174           AND   tm.delete_flag <> 'Y'
2175           AND   tm.resource_type = 'INDIVIDUAL'
2176           AND   trr.role_resource_type = 'RS_TEAM_MEMBER'
2177           AND   trr.delete_flag <> 'Y'
2178           AND   SYSDATE BETWEEN trr.start_date_active
2179                         AND NVL(trr.end_date_active,SYSDATE)
2180           AND   trr.role_id = tr.role_id
2181           AND   tr.role_type_code IN ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
2182           AND   tr.active_flag = 'Y'
2183           AND   tres.resource_id = tm.team_resource_id
2184           AND   tres.category = 'EMPLOYEE'
2185           AND   tm.team_resource_id = g.resource_id
2186           GROUP BY tm.team_member_id, tm.team_resource_id, tm.person_id,
2187                 t.team_id, tres.category
2188           UNION
2189           SELECT MIN(m.resource_id) resource_id,
2190                  MIN(m.person_id) person_id2, MIN(m.group_id) group_id,
2191                  MIN(jtm.team_id) team_id, res.category resource_category,
2192                  MIN(res.source_id) person_id
2193           FROM  jtf_rs_group_members m, jtf_rs_groups_b g,
2194                 jtf_rs_group_usages u, jtf_rs_role_relations rr,
2195                 jtf_rs_roles_b r, jtf_rs_resource_extns res,
2196                 (
2197                   Select tm.team_resource_id group_id, t.team_id team_id
2198                   From   jtf_rs_team_members tm, jtf_rs_teams_b t,
2199                          jtf_rs_team_usages tu, jtf_rs_role_relations trr,
2200                          jtf_rs_roles_b tr, jtf_rs_resource_extns tres
2201                   Where  tm.team_id = t.team_id
2202                   and    sysdate between nvl(t.start_date_active,sysdate)
2203                                      and nvl(t.end_date_active,sysdate)
2204                   and   tu.team_id = t.team_id
2205                   and   tu.usage = 'SALES'
2206                   and   tm.team_member_id = trr.role_resource_id
2207                   and   tm.delete_flag <> 'Y'
2208                   and   tm.resource_type = 'GROUP'
2209                   and   trr.role_resource_type = 'RS_TEAM_MEMBER'
2210                   and   trr.delete_flag <> 'Y'
2211                   and   sysdate between trr.start_date_active and
2212                                      nvl(trr.end_date_active,sysdate)
2213                   and   trr.role_id = tr.role_id
2214                   and   tr.role_type_code in
2215                         ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
2216                   and   tr.active_flag = 'Y'
2217                   and   tres.resource_id = tm.team_resource_id
2218                   and   tres.category = 'EMPLOYEE'
2219                   ) jtm
2220            WHERE m.group_id = g.group_id
2221            AND   SYSDATE BETWEEN NVL(g.start_date_active,SYSDATE)
2222                              AND NVL(g.end_date_active,SYSDATE)
2223            AND   u.group_id = g.group_id
2224            AND   u.usage = 'SALES'
2225            AND   m.group_member_id = rr.role_resource_id
2226            AND   rr.role_resource_type = 'RS_GROUP_MEMBER'
2227            AND   rr.delete_flag <> 'Y'
2228            AND   SYSDATE BETWEEN rr.start_date_active
2229                          AND NVL(rr.end_date_active,SYSDATE)
2230            AND   rr.role_id = r.role_id
2231            AND   r.role_type_code IN ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
2232            AND   r.active_flag = 'Y'
2233            AND   res.resource_id = m.resource_id
2234            AND   res.category = 'EMPLOYEE'
2235            AND   jtm.group_id = g.group_id
2236            GROUP BY m.resource_id, m.person_id, jtm.team_id, res.category
2237                 ) J
2238         WHERE j.team_id = c_team_id;
2239 
2240     CURSOR C_Explode_Resource_Group(c_group_id NUMBER) IS
2241       SELECT J.resource_id, J.group_id, J.person_id
2242       FROM
2243         (
2244           SELECT MIN(m.resource_id) resource_id,
2245                  res.category resource_category,
2246                  MIN(m.group_id) group_id,MIN(res.source_id) person_id
2247           FROM  jtf_rs_group_members m, jtf_rs_groups_b g,
2248                 jtf_rs_group_usages u, jtf_rs_role_relations rr,
2249                 jtf_rs_roles_b r, jtf_rs_resource_extns res
2250           WHERE
2251                 m.group_id = g.group_id
2252           AND   SYSDATE BETWEEN NVL(g.start_date_active,SYSDATE)
2253                             AND NVL(g.end_date_active,SYSDATE)
2254           AND   u.group_id = g.group_id
2255           AND   u.usage = 'SALES'
2256           AND   m.group_member_id = rr.role_resource_id
2257           AND   rr.role_resource_type = 'RS_GROUP_MEMBER'
2258           AND   rr.role_id = r.role_id
2259           AND   rr.delete_flag <> 'Y'
2260           AND   SYSDATE BETWEEN rr.start_date_active
2261                         AND NVL(rr.end_date_active,SYSDATE)
2262           AND   r.role_type_code IN
2263                 ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
2264           AND   r.active_flag = 'Y'
2265           AND   res.resource_id = m.resource_id
2266           AND   res.category = 'EMPLOYEE'
2267           GROUP BY m.group_member_id, m.resource_id, m.person_id,
2268                    m.group_id, res.category) j
2269       WHERE j.group_id = c_group_id;
2270 
2271     Cursor C_Validate_Salesforce(C_Resource_Id NUMBER, c_rs_individual VARCHAR2,
2272                                  c_sales VARCHAR2, c_telesales VARCHAR2,
2273                                  c_fieldsales VARCHAR2, c_prm VARCHAR2,
2274                                  c_n VARCHAR2, c_employee VARCHAR2) IS
2275       SELECT 'Y'
2276       FROM   per_all_people_f per,
2277              jtf_rs_resource_extns res,
2278              jtf_rs_role_relations rrel,
2279              jtf_rs_roles_b role
2280       WHERE  TRUNC(SYSDATE) BETWEEN per.effective_start_date
2281              AND per.effective_end_date
2282       AND    res.resource_id = rrel.role_resource_id
2283       AND    rrel.role_resource_type = c_rs_individual --'RS_INDIVIDUAL'
2284       AND    rrel.role_id = role.role_id
2285       AND    role.role_type_code IN (c_sales, c_telesales, c_fieldsales, c_prm) --'SALES', 'TELESALES', 'FIELDSALES', 'PRM')
2286       AND    NVL(role.admin_flag, 'N') = c_n --'N'
2287       AND    res.source_id = per.person_id
2288       AND    res.resource_id = C_Resource_Id
2289       AND    res.category = c_employee; --'EMPLOYEE';
2290 
2291     -- Get access_id, terr_id for the records that come from LEAD territory.
2292     -- Delete these records before new resource records are created in
2293     -- AS_ACCESSES_ALL table.
2294     CURSOR C_Get_Acc_Terr(c_sales_lead_id NUMBER) IS
2295       SELECT ACC.ACCESS_ID, TERRACC.TERRITORY_ID
2296       FROM AS_ACCESSES_ALL ACC, AS_TERRITORY_ACCESSES TERRACC
2297       WHERE  ACC.FREEZE_FLAG = 'N'
2298       AND    ACC.SALES_LEAD_ID = c_sales_lead_id
2299       AND    ACC.OWNER_FLAG = 'N'
2300       AND    ACC.ACCESS_ID = TERRACC.ACCESS_ID;
2301 
2302     -- Get sequence
2303     CURSOR c_get_conseq_cur IS
2304     SELECT fnd_concurrent_requests_s.nextval
2305     FROM   dual;
2306 
2307     -- Check whether owner exists or not
2308     CURSOR c_check_owner_exists(c_sales_lead_id NUMBER) IS
2309     SELECT 'Y'
2310     FROM as_accesses_all acc
2311     WHERE acc.sales_lead_id = c_sales_lead_id
2312     AND acc.owner_flag = 'Y';
2313 
2314     l_api_name                  CONSTANT VARCHAR2(30)
2315                                 := 'Rebuild_Lead_Sales_Team';
2316     l_api_version_number        CONSTANT NUMBER   := 2.0;
2317     l_customer_id               NUMBER;
2318     l_old_address_id            NUMBER := FND_API.G_MISS_NUM;
2319     l_new_address_id            NUMBER;
2320     l_assign_to_salesforce_id   NUMBER;
2321     l_assign_sales_group_id     NUMBER;
2322     l_reject_reason_code        VARCHAR2(30);
2323     l_AssignResources_Tbl       JTF_ASSIGN_PUB.AssignResources_Tbl_type;
2324                              -- JTF_TERRITORY_PUB.WinningTerrMember_tbl_type;
2325     l_AssignResources_Rec       JTF_ASSIGN_PUB.AssignResources_Rec_type;
2326                              -- JTF_TERRITORY_PUB.JTF_Lead_rec_type;
2327     --l_lead_rec                  JTF_ASSIGN_PUB.JTF_Lead_rec_type;
2328     l_lead_rec                  JTF_TERRITORY_PUB.JTF_Lead_BULK_rec_type;
2329     l_return_status             VARCHAR2(10);
2330     l_count                     INTEGER  := 0;
2331     l_identity_sales_member_rec AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
2332     l_access_profile_rec        AS_ACCESS_PUB.Access_Profile_Rec_Type;
2333 
2334     l_data                      VARCHAR2(70);
2335     l_index_out                 NUMBER;
2336 
2337     -- The following variables are for as_accesses_all
2338     l_access_id_tbl             NUMBER_TABLE;
2339     l_resource_id               NUMBER;
2340     l_group_id                  NUMBER;
2341     l_person_id                 NUMBER;
2342 
2343     -- The following variables are for as_territory_accesses
2344     l_ta_access_id_tbl          NUMBER_TABLE;
2345     l_ta_terr_id_tbl            NUMBER_TABLE;
2346 
2347     -- index of the above variables
2348     l_index                     NUMBER;
2349     l_ta_index                  NUMBER;
2350 
2351     l_access_id                 NUMBER;
2352     l_terr_id                   NUMBER;
2353     l_salesforce_flag           VARCHAR2(1);
2354     l_team_leader_flag          VARCHAR2(1);
2355     l_assign_manual_flag        VARCHAR2(1);
2356     l_request_id                NUMBER;
2357     l_owner_exists_flag         VARCHAR2(1) := 'N';
2358 
2359     l_itemtype                  VARCHAR2(8);
2360     l_itemkey                   VARCHAR2(30);
2361 BEGIN
2362       -- Standard Start of API savepoint
2363       SAVEPOINT REBUILD_LEAD_SALES_TEAM_PVT;
2364 
2365       -- Standard call to check for call compatibility.
2366       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2367                                            p_api_version_number,
2368                                            l_api_name,
2369                                            G_PKG_NAME)
2370       THEN
2371           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2372       END IF;
2373 
2374       -- Initialize message list IF p_init_msg_list is set to TRUE.
2375       IF FND_API.to_Boolean( p_init_msg_list )
2376       THEN
2377           FND_MSG_PUB.initialize;
2378       END IF;
2379 
2380       -- Debug Message
2381       IF (AS_DEBUG_LOW_ON) THEN
2382       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2383                                    'PVT:' || l_api_name || ' Start');
2384       END IF;
2385 
2386       -- Initialize API return status to SUCCESS
2387       x_return_status := FND_API.G_RET_STS_SUCCESS;
2388 
2389       --
2390       -- Api body
2391       --
2392 
2393       -- Get sales lead info.
2394       -- l_old_address_id comes from as_changed_accounts_all.
2395       -- If user changed address_id, l_old_address_id is OLD address_id.
2396       -- Hense, cursor C_Get_Acc_Terr can get original records.
2397       OPEN C_Get_Lead_Info(p_Sales_Lead_Id);
2398       FETCH C_Get_Lead_Info INTO
2399           l_customer_id, l_new_address_id, l_assign_to_salesforce_id,
2400           l_assign_sales_group_id, l_reject_reason_code;
2401       CLOSE C_Get_Lead_Info;
2402 
2403       -- SOLIN, Bug 4733636
2404       -- Always call territory API as territory API performance is better now.
2405 /*
2406       OPEN C_Check_Changed(p_sales_lead_id);
2407       FETCH C_Check_Changed INTO l_old_address_id;
2408       CLOSE C_Check_Changed;
2409 
2410       IF l_old_address_id = FND_API.G_MISS_NUM
2411       THEN
2412           -- There's no need to rebuild sales team for this sales lead
2413           -- because there's no record in as_changed_accounts_all
2414           IF (AS_DEBUG_LOW_ON) THEN
2415               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2416                   'Lead not in AS_CHANGED_ACCOUNTS_ALL');
2417               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2418                   'PVT: ' || l_api_name || ' End');
2419           END IF;
2420 
2421           -- Standard call to get message count and IF count is 1,
2422           -- get message info.
2423           FND_MSG_PUB.Count_And_Get
2424           (  p_count          =>   x_msg_count,
2425              p_data           =>   x_msg_data );
2426 
2427           RETURN;
2428       ELSE
2429 */
2430           IF NVL(fnd_profile.value('AS_ENABLE_LEAD_ONLINE_TAP'), 'Y') = 'Y'
2431           THEN
2432               -- 1. If AS_ENABLE_LEAD_ONLINE_TAP is 'Y', delete record.
2433               -- 2. If AS_ENABLE_LEAD_ONLINE_TAP is 'N', still keep it in
2434               --    as_changed_accounts_all, so TAP New Mode will pick up this
2435               --    record.
2436               UPDATE as_changed_accounts_all
2437               SET processed_flag = 'Y'
2438               WHERE sales_lead_id = p_sales_lead_id;
2439               IF (AS_DEBUG_LOW_ON) THEN
2440                   AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2441                       'Delete as_changed_accounts_all record');
2442               END IF;
2443           ELSIF l_assign_to_salesforce_id IS NOT NULL AND
2444                 l_reject_reason_code IS NULL
2445           THEN
2446               -- If AS_ENABLE_LEAD_ONLINE_TAP is 'N' and no owner change
2447               -- required, return immediately.
2448               IF (AS_DEBUG_LOW_ON) THEN
2449                   AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2450                       'Lead Online TAP is disabled!');
2451               END IF;
2452               -- Standard call to get message count and IF count is 1,
2453               -- get message info.
2454               FND_MSG_PUB.Count_And_Get
2455               (  p_count          =>   x_msg_count,
2456                  p_data           =>   x_msg_data );
2457 
2458               RETURN;
2459           END IF;
2460 /*
2461           IF (AS_DEBUG_LOW_ON) THEN
2462               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2463                   'address_id in as_changed=' || l_old_address_id);
2464           END IF;
2465       END IF;
2466 */
2467       -- ******************************************************************
2468       -- Validate Environment
2469       -- ******************************************************************
2470 
2471       IF FND_GLOBAL.User_Id IS NULL
2472       THEN
2473           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
2474           THEN
2475               AS_UTILITY_PVT.Set_Message(
2476                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2477                   p_msg_name      => 'UT_CANNOT_GET_PROFILE_VALUE',
2478                   p_token1        => 'PROFILE',
2479                   p_token1_value  => 'USER_ID');
2480           END IF;
2481           RAISE FND_API.G_EXC_ERROR;
2482       END IF;
2483 
2484       IF (p_validation_level = fnd_api.g_valid_level_full)
2485       THEN
2486           AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
2487               p_api_version_number => 2.0
2488              ,p_init_msg_list      => p_init_msg_list
2489              ,p_salesforce_id      => P_Identity_Salesforce_Id
2490              ,p_admin_group_id     => p_admin_group_id
2491              ,x_return_status      => x_return_status
2492              ,x_msg_count          => x_msg_count
2493              ,x_msg_data           => x_msg_data
2494              ,x_sales_member_rec   => l_identity_sales_member_rec);
2495       END IF;
2496 
2497       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2498           RAISE FND_API.G_EXC_ERROR;
2499       END IF;
2500 
2501       -- Get access_id, terr_id for the records that come from LEAD territory.
2502       -- Delete these records before new resource records are created in
2503       -- AS_ACCESSES_ALL table.
2504       IF (AS_DEBUG_LOW_ON) THEN
2505       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2506                                    'customer_id=' || l_customer_id);
2507       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2508                                    'old address_id=' || l_old_address_id);
2509       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2510                                    'sales_lead_id=' || p_sales_lead_id);
2511       END IF;
2512       OPEN C_Get_Acc_Terr(p_sales_lead_id);
2513       FETCH C_Get_Acc_Terr BULK COLLECT INTO
2514           l_ta_access_id_tbl, l_ta_terr_id_tbl;
2515       CLOSE C_Get_Acc_Terr;
2516 
2517       IF (AS_DEBUG_LOW_ON) THEN
2518           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2519               'l_ta_access_id_tbl.count:' || l_ta_access_id_tbl.count);
2520       END IF;
2521 
2522       IF l_ta_access_id_tbl.count > 0
2523       THEN
2524           IF (AS_DEBUG_LOW_ON) THEN
2525               FOR l_i IN 1..l_ta_access_id_tbl.count
2526               LOOP
2527                   AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2528                       'Delete acc_id:' || l_ta_access_id_tbl(l_i)
2529                       || ' terr_id:' || l_ta_terr_id_tbl(l_i));
2530               END LOOP;
2531           END IF;
2532 
2533           FORALL l_i IN 1..l_ta_access_id_tbl.count
2534               DELETE FROM AS_ACCESSES_ALL
2535               WHERE ACCESS_ID = l_ta_access_id_tbl(l_i);
2536 
2537           FORALL l_i IN 1..l_ta_terr_id_tbl.count
2538               DELETE FROM AS_TERRITORY_ACCESSES
2539               WHERE ACCESS_ID = l_ta_access_id_tbl(l_i)
2540               AND   TERRITORY_ID = l_ta_terr_id_tbl(l_i);
2541       END IF;
2542 
2543       -- Delete non-frozen resources who are not from territory.
2544       DELETE FROM as_accesses_all acc
2545       WHERE acc.sales_lead_id = p_sales_lead_id
2546       AND acc.freeze_flag = 'N'
2547       --AND acc.salesforce_id <> p_identity_salesforce_id
2548       AND NOT EXISTS (
2549           SELECT 1
2550           FROM as_territory_accesses terracc
2551           WHERE terracc.access_id = acc.access_id);
2552 
2553       g_i_count := 0;
2554       g_u_count := 0;
2555       g_ti_count := 0;
2556       g_tu_count := 0;
2557 
2558       IF (AS_DEBUG_LOW_ON) THEN
2559       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2560           'Get sales lead info');
2561       END IF;
2562 
2563       l_lead_rec.squal_num06.extend;
2564       l_lead_rec.TRANS_OBJECT_ID.extend;
2565 
2566       IF l_new_address_id IS NOT NULL
2567       THEN
2568           -- Sales lead is created in party site level.
2569           OPEN C_Get_Sales_Lead1(p_Sales_Lead_Id, 'HZ_PARTY_SITES', 'A',
2570                                  'Y', 'PHONE', 'PERSON', 'ORGANIZATION');
2571           FETCH C_Get_Sales_Lead1 BULK COLLECT INTO
2572               l_lead_rec.SALES_LEAD_ID,
2573               l_lead_rec.SALES_LEAD_LINE_ID,
2574               l_lead_rec.CITY,
2575               l_lead_rec.POSTAL_CODE,
2576               l_lead_rec.STATE,
2577               l_lead_rec.PROVINCE,
2578               l_lead_rec.COUNTY,
2579               l_lead_rec.COUNTRY,
2580               l_lead_rec.PARTY_SITE_ID,
2581               l_lead_rec.AREA_CODE,
2582               l_lead_rec.PARTY_ID,
2583               l_lead_rec.COMP_NAME_RANGE,
2584               l_lead_rec.PARTNER_ID,
2585               l_lead_rec.NUM_OF_EMPLOYEES,
2586               l_lead_rec.CATEGORY_CODE,
2587               l_lead_rec.PARTY_RELATIONSHIP_ID,
2588               l_lead_rec.SIC_CODE,
2589               l_lead_rec.BUDGET_AMOUNT,
2590               l_lead_rec.CURRENCY_CODE,
2591               l_lead_rec.PRICING_DATE,
2592               l_lead_rec.SOURCE_PROMOTION_ID,
2593               l_lead_rec.INVENTORY_ITEM_ID,
2594               l_lead_rec.PURCHASE_AMOUNT,
2595               l_lead_rec.SQUAL_NUM01,
2596               l_lead_rec.CAR_CURRENCY_CODE,
2597               l_lead_rec.SQUAL_CHAR11,
2598               l_lead_rec.SQUAL_CHAR30;
2599           CLOSE C_Get_Sales_Lead1;
2600       ELSE
2601           -- Sales lead is created in party level.
2602           OPEN C_Get_Sales_Lead2(p_Sales_Lead_Id, 'HZ_PARTIES', 'A',
2603                                  'Y', 'PHONE', 'PERSON', 'ORGANIZATION');
2604           FETCH C_Get_Sales_Lead2 BULK COLLECT INTO
2605               l_lead_rec.SALES_LEAD_ID,
2606               l_lead_rec.SALES_LEAD_LINE_ID,
2607               l_lead_rec.CITY,
2608               l_lead_rec.POSTAL_CODE,
2609               l_lead_rec.STATE,
2610               l_lead_rec.PROVINCE,
2611               l_lead_rec.COUNTY,
2612               l_lead_rec.COUNTRY,
2613               l_lead_rec.PARTY_SITE_ID,
2614               l_lead_rec.AREA_CODE,
2615               l_lead_rec.PARTY_ID,
2616               l_lead_rec.COMP_NAME_RANGE,
2617               l_lead_rec.PARTNER_ID,
2618               l_lead_rec.NUM_OF_EMPLOYEES,
2619               l_lead_rec.CATEGORY_CODE,
2620               l_lead_rec.PARTY_RELATIONSHIP_ID,
2621               l_lead_rec.SIC_CODE,
2622               l_lead_rec.BUDGET_AMOUNT,
2623               l_lead_rec.CURRENCY_CODE,
2624               l_lead_rec.PRICING_DATE,
2625               l_lead_rec.SOURCE_PROMOTION_ID,
2626               l_lead_rec.INVENTORY_ITEM_ID,
2627               l_lead_rec.PURCHASE_AMOUNT,
2628               l_lead_rec.SQUAL_NUM01,
2629               l_lead_rec.CAR_CURRENCY_CODE,
2630               l_lead_rec.SQUAL_CHAR11,
2631               l_lead_rec.SQUAL_CHAR30;
2632           CLOSE C_Get_Sales_Lead2;
2633       END IF;
2634 
2635       IF (AS_DEBUG_LOW_ON) THEN
2636       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2637           'sales_lead_id.count='|| l_lead_rec.sales_lead_id.count);
2638       END IF;
2639       IF l_lead_rec.sales_lead_id.count = 0
2640       THEN
2641           -- customer_id and address_id of this sales lead don't match each
2642           -- other, don't do any change and return.
2643           RETURN;
2644       END IF;
2645 
2646       IF (AS_DEBUG_LOW_ON) THEN
2647       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2648           'SALES_LEAD_ID : ' || l_lead_rec.SALES_LEAD_ID(1));
2649       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2650           'CITY : ' || l_lead_rec.CITY(1));
2651       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2652           'POSTAL_CODE : ' || l_lead_rec.POSTAL_CODE(1));
2653       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2654           'STATE : ' || l_lead_rec.STATE(1));
2655       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2656           'PROVINCE : ' || l_lead_rec.PROVINCE(1));
2657       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2658           'COUNTY : ' || l_lead_rec.COUNTY(1));
2659       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2660           'COUNTRY : ' || l_lead_rec.COUNTRY(1));
2661       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2662           'PARTY_SITE_ID : ' || l_lead_rec.PARTY_SITE_ID(1));
2663       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2664           'AREA_CODE : ' || l_lead_rec.AREA_CODE(1));
2665       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2666           'PARTY_ID : ' || l_lead_rec.PARTY_ID(1));
2667       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2668           'CUSTOMER_NAME : ' || l_lead_rec.COMP_NAME_RANGE(1));
2669       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2670           'PARTNER_ID : ' || l_lead_rec.PARTY_ID(1));
2671       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2672           'NUM_OF_EMPLOYEES : ' || l_lead_rec.NUM_OF_EMPLOYEES(1));
2673       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2674           'CATEGORY_CODE : ' || l_lead_rec.CATEGORY_CODE(1));
2675       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2676           'PARTY_RELATIONSHIP_ID : ' || l_lead_rec.PARTY_RELATIONSHIP_ID(1));
2677       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2678           'SIC_CODE : ' || l_lead_rec.SIC_CODE(1));
2679       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2680           'BUDGET_AMOUNT : ' || l_lead_rec.BUDGET_AMOUNT(1));
2681       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2682           'CURRENCY_CODE : ' || l_lead_rec.CURRENCY_CODE(1));
2683       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2684           'PRICING_DATE: ' || l_lead_rec.PRICING_DATE(1));
2685       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2686           'PROMOTION_ID: ' || l_lead_rec.SOURCE_PROMOTION_ID(1));
2687       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2688           'SQUAL_NUM01: ' || l_lead_rec.SQUAL_NUM01(1));
2689       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2690           'CAR_CURRENCY_CODE: ' || l_lead_rec.CAR_CURRENCY_CODE(1));
2691       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2692           'DUNS_NUMBER_C: ' || l_lead_rec.SQUAL_CHAR11(1));
2693       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2694           'CHANNEL_CODE: ' || l_lead_rec.SQUAL_CHAR30(1));
2695       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2696           'Calling JTF_ASSIGN_PUB.Get_Assign_Lead_Resources');
2697       END IF;
2698 
2699       JTF_ASSIGN_PUB.Get_Assign_Lead_Resources (
2700             p_api_version                    => 1.0
2701            ,p_init_msg_list                  => JTF_ASSIGN_PUB.AM_FALSE
2702            -- ,p_commit                         => FND_API.G_FALSE
2703            ,p_resource_type                  => NULL
2704            ,p_role                           => NULL
2705            ,p_no_of_resources                => 999
2706            ,p_auto_select_flag               => NULL
2707            ,p_effort_duration                => 8
2708            ,p_effort_uom                     => 'HR'
2709            ,p_start_date                     => SYSDATE-1
2710            ,p_end_date                       => SYSDATE+1
2711            ,p_territory_flag                 => 'Y'
2712            ,p_calendar_flag                  => 'N'
2713            ,p_lead_rec                       => l_lead_rec
2714            ,x_assign_resources_tbl           => l_assignresources_tbl
2715            ,x_return_status                  => l_return_status
2716            ,x_msg_count                      => x_msg_count
2717            ,x_msg_data                       => x_msg_data
2718         );
2719 
2720       IF l_return_status = 'E'
2721       THEN
2722           FND_MSG_PUB.Get (
2723               p_msg_index       => FND_MSG_PUB.G_LAST,
2724               p_encoded         => FND_API.G_TRUE ,
2725               p_data            => l_data,
2726               p_msg_index_out   => l_index_out
2727               );
2728           IF (AS_DEBUG_LOW_ON) THEN
2729           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2730               l_data);
2731           END IF;
2732 
2733       ELSIF l_return_status <> FND_API.G_RET_STS_SUCCESS
2734       THEN
2735           RAISE FND_API.G_EXC_ERROR;
2736       END IF;
2737 
2738       l_request_id := FND_GLOBAL.Conc_Request_Id;
2739       IF (AS_DEBUG_LOW_ON) THEN
2740       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2741           'count=' || l_assignresources_tbl.count);
2742       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2743           'first = '||l_assignresources_tbl.first);
2744       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2745           'last = '||l_assignresources_tbl.last);
2746       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2747           'req_id :' || l_request_id);
2748       END IF;
2749       IF l_request_id = 0 OR l_request_id = -1
2750       THEN
2751           -- If l_request_id = 0 or -1, select directly from sequence
2752           OPEN c_get_conseq_cur;
2753           FETCH c_get_conseq_cur INTO l_request_id;
2754           CLOSE c_get_conseq_cur;
2755       END IF;
2756       IF (AS_DEBUG_LOW_ON) THEN
2757       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2758           'req_id :' || l_request_id);
2759       END IF;
2760 
2761       l_count := l_AssignResources_tbl.COUNT;
2762       l_index := 1;
2763       l_ta_index := 1;
2764       IF l_AssignResources_tbl.COUNT > 0
2765       THEN
2766           FOR i IN l_AssignResources_tbl.first..l_AssignResources_tbl.last
2767           LOOP
2768               IF (AS_DEBUG_LOW_ON) THEN
2769               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2770                   'Terr ID(' || i || ') : '
2771                   || l_AssignResources_tbl(i).Terr_Id);
2772               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2773                   'Resource ID(' || i || ') : '
2774                   || l_AssignResources_tbl(i).Resource_Id);
2775               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2776                   'Group ID(' || i || ') : '
2777                   || l_AssignResources_tbl(i).Group_Id);
2778               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2779                   'Full_Access_Flag(' || i || ') : '
2780                   || l_AssignResources_tbl(i).Full_Access_Flag);
2781               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2782                   'Role(' || i || ') : '
2783                   || l_AssignResources_tbl(i).Role);
2784               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2785                   'Resource_Type(' || i || ') : '
2786                   || l_AssignResources_tbl(i).Resource_Type);
2787               END IF;
2788 
2789               IF l_AssignResources_tbl(i).Resource_Type = 'RS_TEAM'
2790               THEN
2791                   IF (AS_DEBUG_LOW_ON) THEN
2792                       AS_UTILITY_PVT.Debug_Message(
2793                           FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2794                               'Resource Team found');
2795                   END IF;
2796                   OPEN C_Explode_Resource_Team(
2797                            l_AssignResources_tbl(i).Resource_Id);
2798                   LOOP
2799                       FETCH C_Explode_Resource_Team INTO
2800                           l_resource_id, l_group_id, l_person_id;
2801                       EXIT WHEN C_Explode_Resource_Team%NOTFOUND;
2802                       IF (AS_DEBUG_LOW_ON) THEN
2803                           AS_UTILITY_PVT.Debug_Message(
2804                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2805                               ' Resource_Id: ' || l_resource_id);
2806                           AS_UTILITY_PVT.Debug_Message(
2807                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2808                               ' Group_Id: ' || l_group_id);
2809                           AS_UTILITY_PVT.Debug_Message(
2810                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2811                               ' Person_Id: ' || l_person_id);
2812                       END IF;
2813                       Create_Access_Records(
2814                             p_resource_id         => l_resource_id,
2815                             p_group_id            => l_group_id,
2816                             p_full_access_flag    =>
2817                                 l_AssignResources_tbl(i).Full_Access_Flag,
2818 --                            p_person_id           =>
2819 --                                l_insert_acc_rec.person_id(l_index),
2820                             p_territory_id        =>
2821                                 l_AssignResources_tbl(i).Terr_Id,
2822                             p_party_id            => l_customer_id,
2823                             p_party_site_id       => l_new_address_id,
2824                             p_sales_lead_id       => p_sales_lead_id,
2825                             p_freeze_flag         => 'N',
2826                             p_source              => 'TERRITORY');
2827                   END LOOP;
2828                   CLOSE C_Explode_Resource_Team;
2829               ELSIF l_AssignResources_tbl(i).Resource_Type = 'RS_GROUP'
2830               THEN
2831                   IF (AS_DEBUG_LOW_ON) THEN
2832                       AS_UTILITY_PVT.Debug_Message(
2833                           FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2834                               'Resource Group found');
2835                   END IF;
2836                   OPEN C_Explode_Resource_Group(
2837                            l_AssignResources_tbl(i).Resource_Id);
2838                   LOOP
2839                       FETCH C_Explode_Resource_Group INTO
2840                           l_resource_id, l_group_id, l_person_id;
2841                       EXIT WHEN C_Explode_Resource_Group%NOTFOUND;
2842                       IF (AS_DEBUG_LOW_ON) THEN
2843                           AS_UTILITY_PVT.Debug_Message(
2844                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2845                               ' Resource_Id: ' || l_resource_id);
2846                           AS_UTILITY_PVT.Debug_Message(
2847                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2848                               ' Group_Id: ' || l_group_id);
2849                           AS_UTILITY_PVT.Debug_Message(
2850                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2851                               ' Person_Id: ' || l_person_id);
2852                       END IF;
2853                       Create_Access_Records(
2854                             p_resource_id         => l_resource_id,
2855                             p_group_id            => l_group_id,
2856                             p_full_access_flag    =>
2857                                 l_AssignResources_tbl(i).Full_Access_Flag,
2858 --                            p_person_id           =>
2859 --                                l_insert_acc_rec.person_id(l_index),
2860                             p_territory_id        =>
2861                                 l_AssignResources_tbl(i).Terr_Id,
2862                             p_party_id            => l_customer_id,
2863                             p_party_site_id       => l_new_address_id,
2864                             p_sales_lead_id       => p_sales_lead_id,
2865                             p_freeze_flag         => 'N',
2866                             p_source              => 'TERRITORY');
2867                   END LOOP;
2868                   CLOSE C_Explode_Resource_Group;
2869               ELSE
2870                   -- not resource team or resource group
2871                   l_salesforce_flag := 'N';
2872                   OPEN C_Validate_Salesforce(
2873                       l_AssignResources_tbl(i).Resource_Id,
2874                       'RS_INDIVIDUAL', 'SALES', 'TELESALES',
2875                       'FIELDSALES', 'PRM', 'N', 'EMPLOYEE');
2876                   FETCH C_Validate_Salesforce INTO l_salesforce_flag;
2877                   CLOSE C_Validate_Salesforce;
2878 
2879                   IF l_salesforce_flag = 'Y'
2880                   THEN
2881                       Create_Access_Records(
2882                             p_resource_id         =>
2883                                 l_AssignResources_tbl(i).Resource_Id,
2884                             p_group_id            =>
2885                                 l_AssignResources_tbl(i).Group_Id,
2886                             p_full_access_flag    =>
2887                                 l_AssignResources_tbl(i).Full_Access_Flag,
2888 --                            p_person_id           =>
2889 --                                l_insert_acc_rec.person_id(l_index),
2890                             p_territory_id        =>
2891                                 l_AssignResources_tbl(i).Terr_Id,
2892                             p_party_id            => l_customer_id,
2893                             p_party_site_id       => l_new_address_id,
2894                             p_sales_lead_id       => p_sales_lead_id,
2895                             p_freeze_flag         => 'N',
2896                             p_source              => 'TERRITORY');
2897                   ELSE
2898                       IF (AS_DEBUG_LOW_ON) THEN
2899                           AS_UTILITY_PVT.Debug_Message(
2900                               FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2901                               'rs_id ' ||
2902                               l_AssignResources_tbl(i).Resource_Id ||
2903                               ' is not salesforce');
2904                       END IF;
2905                   END IF; -- l_salesforce_flag
2906               END IF; -- resource type
2907           END LOOP; -- l_AssignResources_tbl.first..l_AssignResources_tbl.last
2908       END IF; -- l_AssignResources_tbl.COUNT > 0
2909       Flush_Access_Records(l_request_id);
2910 
2911       -- If user change address_id, AS_ACCESSES_ALL table should be updated.
2912       -- There may be some records untouched, so update here, instead of
2913       -- in Flush_Access_Records.
2914       IF l_old_address_id <> l_new_address_id
2915       THEN
2916           UPDATE as_accesses_all
2917           SET address_id = l_new_address_id
2918           WHERE sales_lead_id = p_sales_lead_id
2919           AND address_id = l_old_address_id;
2920       ELSIF l_old_address_id IS NULL AND l_new_address_id IS NOT NULL
2921       THEN
2922           UPDATE as_accesses_all
2923           SET address_id = l_new_address_id
2924           WHERE sales_lead_id = p_sales_lead_id
2925           AND address_id IS NULL;
2926       ELSIF l_old_address_id IS NOT NULL AND l_new_address_id IS NULL
2927       THEN
2928           UPDATE as_accesses_all
2929           SET address_id = NULL
2930           WHERE sales_lead_id = p_sales_lead_id
2931           AND address_id = l_old_address_id;
2932       END IF;
2933 
2934       IF (AS_DEBUG_LOW_ON) THEN
2935       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2936           'assign_to_sf_id=' || l_assign_to_salesforce_id);
2937       END IF;
2938 
2939       OPEN c_check_owner_exists(p_sales_lead_id);
2940       FETCH c_check_owner_exists INTO l_owner_exists_flag;
2941       CLOSE c_check_owner_exists;
2942 
2943       IF (AS_DEBUG_LOW_ON) THEN
2944       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2945           'owner exist? ' || l_owner_exists_flag);
2946       END IF;
2947 
2948       DELETE FROM AS_TERRITORY_ACCESSES
2949       WHERE access_id IN
2950               (SELECT a.access_id
2951                FROM as_accesses_all a
2952                WHERE a.sales_lead_id = p_sales_lead_id
2953                AND a.freeze_flag = 'N'
2954                AND a.request_id = l_request_id)
2955       AND REQUEST_ID IS NULL;
2956 
2957       DELETE FROM AS_ACCESSES_ALL
2958       WHERE SALES_LEAD_ID = p_sales_lead_id
2959       AND   FREEZE_FLAG = 'N'
2960       AND   REQUEST_ID IS NULL;
2961 
2962       x_request_id := l_request_id;
2963       --
2964       -- END of API body
2965       --
2966 
2967       -- Standard check for p_commit
2968       IF FND_API.to_Boolean( p_commit )
2969       THEN
2970           COMMIT WORK;
2971       END IF;
2972 
2973 
2974       -- Debug Message
2975       IF (AS_DEBUG_LOW_ON) THEN
2976       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2977                                    'PVT: ' || l_api_name || ' End');
2978       END IF;
2979 
2980       -- Standard call to get message count and IF count is 1, get message info.
2981       IF x_return_status = 'W'
2982       THEN
2983           FND_MSG_PUB.Count_And_Get
2984           (
2985              p_encoded        =>   FND_API.G_FALSE,
2986              p_count          =>   x_msg_count,
2987              p_data           =>   x_msg_data );
2988       ELSE
2989           FND_MSG_PUB.Count_And_Get
2990           (  p_count          =>   x_msg_count,
2991              p_data           =>   x_msg_data );
2992       END IF;
2993 
2994       EXCEPTION
2995           WHEN FND_API.G_EXC_ERROR THEN
2996               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
2997                    P_API_NAME => L_API_NAME
2998                   ,P_PKG_NAME => G_PKG_NAME
2999                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
3000                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
3001                   ,X_MSG_COUNT => X_MSG_COUNT
3002                   ,X_MSG_DATA => X_MSG_DATA
3003                   ,X_RETURN_STATUS => X_RETURN_STATUS);
3004 
3005           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3006               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
3007                    P_API_NAME => L_API_NAME
3008                   ,P_PKG_NAME => G_PKG_NAME
3009                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
3010                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
3011                   ,X_MSG_COUNT => X_MSG_COUNT
3012                   ,X_MSG_DATA => X_MSG_DATA
3013                   ,X_RETURN_STATUS => X_RETURN_STATUS);
3014 
3015           WHEN OTHERS THEN
3016               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
3017                    P_API_NAME => L_API_NAME
3018                   ,P_PKG_NAME => G_PKG_NAME
3019                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
3020                   ,P_SQLCODE => SQLCODE
3021                   ,P_SQLERRM => SQLERRM
3022                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
3023                   ,X_MSG_COUNT => X_MSG_COUNT
3024                   ,X_MSG_DATA => X_MSG_DATA
3025                   ,X_RETURN_STATUS => X_RETURN_STATUS);
3026 END Rebuild_Lead_Sales_Team;
3027 
3028 -- The following are private API without conuterpart public API.
3029 
3030 FUNCTION Changed_Accounts_Record_Exist(
3031     P_Sales_Lead_Id NUMBER) RETURN BOOLEAN IS
3032 CURSOR c1(C_Sales_Lead_Id NUMBER) IS
3033     SELECT CUSTOMER_ID
3034     FROM   AS_CHANGED_ACCOUNTS_ALL
3035     WHERE  SALES_LEAD_ID = C_Sales_Lead_Id
3036     AND    REQUEST_ID IS NULL;
3037 l_dummy   NUMBER;
3038 BEGIN
3039     OPEN c1(P_Sales_Lead_Id);
3040     FETCH c1 INTO l_dummy;
3041     IF (c1%NOTFOUND) THEN
3042         CLOSE c1;
3043         RETURN FALSE;
3044     ELSE
3045         CLOSE c1;
3046         RETURN TRUE;
3047     END IF;
3048 END Changed_Accounts_Record_Exist;
3049 
3050 FUNCTION Is_Same_Value( old VARCHAR2, new VARCHAR2 ) RETURN BOOLEAN IS
3051 BEGIN
3052     IF( old = new ) THEN
3053         RETURN TRUE;
3054     ELSIF( old IS NULL AND new IS NULL ) THEN
3055         RETURN TRUE;
3056     ELSE
3057         RETURN FALSE;
3058     END IF;
3059 END Is_Same_Value;
3060 
3061 
3062 FUNCTION Is_Same_Value( old NUMBER, new NUMBER ) RETURN BOOLEAN IS
3063 BEGIN
3064     IF( old = new ) THEN
3065         RETURN TRUE;
3066     ELSIF( old IS NULL AND new IS NULL ) THEN
3067         RETURN TRUE;
3068     ELSE
3069         RETURN FALSE;
3070     END IF;
3071 END Is_Same_Value;
3072 
3073 PROCEDURE Sales_Leads_Trigger_Handler(
3074     P_Customer_Id                 IN  NUMBER,
3075     P_Sales_Lead_Id               IN  NUMBER,
3076     P_Old_Address_Id              IN  NUMBER,
3077     P_Old_Budget_Amount           IN  NUMBER,
3078     P_Old_Currency_Code           IN  VARCHAR2,
3079     P_Old_Source_Promotion_Id     IN  NUMBER,
3080     P_Old_Channel_Code            IN  VARCHAR2,
3081     P_New_Address_Id              IN  NUMBER,
3082     P_New_Budget_Amount           IN  NUMBER,
3083     P_New_Currency_Code           IN  VARCHAR2,
3084     P_New_Source_Promotion_Id     IN  NUMBER,
3085     P_New_Channel_Code            IN  VARCHAR2,
3086     P_New_Assign_To_Salesforce_Id IN  NUMBER,
3087     P_New_Reject_Reason_Code      IN  VARCHAR2,
3088     P_Trigger_Mode                IN  VARCHAR2) IS
3089 Is_Changed           BOOLEAN := FALSE;
3090 Amount_Enabled       VARCHAR2(1);
3091 Promotion_Enabled    VARCHAR2(1);
3092 Channel_Enabled      VARCHAR2(1);
3093 l_address_id         NUMBER;
3094 l_insert_flag        VARCHAR2(1) := 'N';
3095 l_incubation_channel VARCHAR2(30);
3096 
3097 -- Bug 3091085, SOLIN(Bug 3087354 for 11.5.8)
3098 -- Use JTF_QUAL_USGS_ALL, instead of JTF_QUAL_USGS(with security policies)
3099 -- This SQL is ordered by decending Enabled_Flag because sales team should
3100 -- be rebuilt as long as any org. has enabled the qualifier.
3101 CURSOR c1 IS
3102     SELECT Amount.Enabled_Flag
3103     FROM   JTF_QUAL_USGS_ALL Amount
3104     WHERE  Amount.QUAL_USG_ID = -1021
3105     AND    Amount.QUAL_TYPE_USG_ID = -1002     -- LEAD
3106     ORDER BY Amount.Enabled_Flag DESC;
3107 
3108 CURSOR c2 IS
3109     SELECT Promotion.Enabled_Flag
3110     FROM   JTF_QUAL_USGS_ALL Promotion
3111     WHERE  Promotion.QUAL_USG_ID = -1020
3112     AND    Promotion.QUAL_TYPE_USG_ID = -1002  -- LEAD
3113     ORDER BY Promotion.Enabled_Flag DESC;
3114 
3115 -- JTF Bug 2725578: SALES CHANNEL SUPPORT FOR TERRITORY ASSIGNMENT
3116 CURSOR c3 IS
3117     SELECT Channel.Enabled_Flag
3118     FROM   JTF_QUAL_USGS_ALL Channel
3119     WHERE  Channel.QUAL_USG_ID = -1130
3120     AND    Channel.QUAL_TYPE_USG_ID = -1002  -- LEAD
3121     ORDER BY Channel.Enabled_Flag DESC;
3122 BEGIN
3123     IF (AS_DEBUG_LOW_ON) THEN
3124         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3125             'Trigger mode:' || P_Trigger_Mode);
3126     END IF;
3127 
3128     IF NVL(fnd_profile.value('AS_ENABLE_LEAD_ONLINE_TAP'),'Y') = 'Y'
3129       AND (P_Trigger_Mode = 'ON-DELETE')
3130     THEN
3131 --        IF (P_Trigger_Mode IN ('ON-INSERT', 'ON-DELETE'))
3132 --        IF (P_Trigger_Mode = 'ON-DELETE')
3133 --        THEN
3134             -- Build_Lead_Sales_Team will take care of assignment, no
3135             -- need to insert into as_changed_accounts_all
3136             RETURN;
3137 --        END IF;
3138 --        l_address_id := p_old_address_id;
3139     ELSE
3140         IF P_Trigger_Mode = 'ON-INSERT'
3141         THEN
3142             l_address_id := p_new_address_id;
3143             l_insert_flag := 'Y';
3144         ELSE
3145             l_address_id := p_old_address_id;
3146             l_insert_flag := 'N';
3147         END IF;
3148     END IF;
3149 
3150     -- regardless whether the profile is, always check enabled qualifiers
3151     OPEN c1;
3152     FETCH c1 into Amount_Enabled;
3153     CLOSE c1;
3154     OPEN c2;
3155     FETCH c2 into Promotion_Enabled;
3156     CLOSE c2;
3157     OPEN c3;
3158     FETCH c3 into Channel_Enabled;
3159     CLOSE c3;
3160 
3161     IF (NOT Is_Same_Value(p_old_address_id, p_new_address_id))
3162     THEN
3163         -- Usually, location qualifier is enabled, no need to check
3164         Is_Changed := TRUE;
3165     ELSIF (((NOT Is_Same_Value(p_old_budget_amount, p_new_budget_amount)) OR
3166             (NOT Is_Same_Value(p_old_currency_code, p_new_currency_code)))
3167        AND (Amount_Enabled='Y'))
3168     THEN
3169         Is_Changed := TRUE;
3170     ELSIF (NOT Is_Same_Value(p_old_source_promotion_id,
3171                              p_new_source_promotion_id)
3172        AND (Promotion_Enabled='Y'))
3173     THEN
3174         Is_Changed := TRUE;
3175     ELSIF (NOT Is_Same_Value(p_old_channel_code, p_new_channel_code)
3176        AND (Channel_Enabled='Y'))
3177     THEN
3178         Is_Changed := TRUE;
3179     END IF;
3180 
3181     IF p_new_assign_to_salesforce_id IS NULL OR
3182        p_new_reject_reason_code IS NOT NULL
3183     THEN
3184         -- If sales lead owner decides to set assign_to_salesforce_id to NULL,
3185         -- OR owner declines the sales lead,
3186         -- this sales lead has to be reassigned.
3187         Is_Changed := TRUE;
3188     END IF;
3189 
3190     IF (Is_Changed = TRUE)
3191     THEN
3192         IF (AS_DEBUG_LOW_ON) THEN
3193             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3194                 'Is changed:TRUE');
3195         END IF;
3196 --        IF NOT Changed_Accounts_Record_Exist(P_Sales_Lead_Id)
3197 --        THEN
3198             BEGIN
3199             INSERT INTO AS_CHANGED_ACCOUNTS_ALL(
3200                 customer_id, address_id, sales_lead_id, last_update_date,
3201                 last_updated_by, creation_date, created_by, last_update_login,
3202                 change_type, delete_flag, insert_flag, processed_flag)
3203             VALUES
3204                (P_Customer_Id, l_Address_id, P_Sales_Lead_id, SYSDATE, 0,
3205                 SYSDATE, 0, 0, 'LEAD', 'N', l_insert_flag, 'N');
3206             EXCEPTION
3207                 WHEN OTHERS THEN
3208                 UPDATE AS_CHANGED_ACCOUNTS_ALL
3209                 SET processed_flag = 'N'
3210                 WHERE sales_lead_id = p_sales_lead_id;
3211             END;
3212 --        END IF;
3213     END IF;
3214 
3215 END Sales_Leads_Trigger_Handler;
3216 
3217 PROCEDURE Sales_Lead_Lines_Handler(
3218     P_Sales_Lead_Id                  IN  NUMBER,
3219     P_Old_category_Id		     IN  NUMBER,
3220     P_Old_category_set_Id            IN  NUMBER,
3221     P_Old_Inventory_Item_Id          IN  NUMBER,
3222     P_Old_Purchase_Amount            IN  NUMBER,
3223     P_New_category_Id                IN  NUMBER,
3224     P_New_category_set_Id            IN  NUMBER,
3225     P_New_Inventory_Item_Id          IN  NUMBER,
3226     P_New_Purchase_Amount            IN  NUMBER,
3227     P_Trigger_Mode                   IN  VARCHAR2) IS
3228 Is_Changed        BOOLEAN := FALSE;
3229 l_customer_id     NUMBER;
3230 l_address_id      NUMBER;
3231 ItemNo_Enabled    VARCHAR2(1);
3232 Expected_Enabled  VARCHAR2(1);
3233 Amount_Enabled    VARCHAR2(1);
3234 
3235 CURSOR c0(C_Sales_Lead_Id NUMBER) IS
3236     SELECT Customer_Id, Address_Id
3237     FROM AS_SALES_LEADS lead
3238     WHERE lead.sales_lead_Id = C_Sales_Lead_Id;
3239 
3240 -- Bug 3091085, SOLIN(Bug 3087354 for 11.5.8)
3241 -- Use JTF_QUAL_USGS_ALL, instead of JTF_QUAL_USGS(with security policies)
3242 -- This SQL is ordered by decending Enabled_Flag because sales team should
3243 -- be rebuilt as long as any org. has enabled the qualifier.
3244 CURSOR c1 IS
3245     SELECT ItemNo.Enabled_Flag
3246     FROM   JTF_QUAL_USGS_ALL ItemNo
3247     WHERE  ItemNo.QUAL_USG_ID = -1019
3248     AND    ItemNo.QUAL_TYPE_USG_ID = -1002  -- Lead
3249     ORDER BY ItemNo.Enabled_Flag DESC;
3250 
3251 CURSOR c2 IS
3252     SELECT Expected.Enabled_Flag
3253     FROM   JTF_QUAL_USGS_ALL Expected
3254     WHERE  Expected.QUAL_USG_ID = -1018
3255     AND    Expected.QUAL_TYPE_USG_ID = -1002  -- Lead
3256     ORDER BY Expected.Enabled_Flag DESC;
3257 
3258 CURSOR c3 IS
3259     SELECT Amount.Enabled_Flag
3260     FROM   JTF_QUAL_USGS_ALL Amount
3261     WHERE  Amount.QUAL_USG_ID = -1022
3262     AND    Amount.QUAL_TYPE_USG_ID = -1002  -- Lead
3263     ORDER BY Amount.Enabled_Flag DESC;
3264 BEGIN
3265     IF (AS_DEBUG_LOW_ON) THEN
3266         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3267             'Line Trigger mode:' || P_Trigger_Mode);
3268     END IF;
3269     -- regardless of profile AS_ENABLE_LEAD_ONLINE_TAP, always check
3270     -- enabled profile
3271     OPEN c0(P_Sales_Lead_Id);
3272     FETCH c0 INTO l_customer_id, l_address_id;
3273     CLOSE c0;
3274 
3275     IF l_customer_id IS NOT NULL
3276     THEN
3277         OPEN c1;
3278         FETCH c1 INTO ItemNo_Enabled;
3279         CLOSE c1;
3280         OPEN c2;
3281         FETCH c2 INTO Expected_Enabled;
3282         CLOSE c2;
3283         OPEN c3;
3284         FETCH c3 INTO Amount_Enabled;
3285         CLOSE c3;
3286 
3287         IF (P_Trigger_Mode IN ('ON-INSERT', 'ON-DELETE'))
3288         THEN
3289             Is_Changed := TRUE;
3290         ELSIF ((NOT Is_Same_Value(P_Old_category_Id,
3291                                   P_New_category_Id)
3292              OR NOT Is_Same_Value(P_Old_category_set_Id,
3293                                   P_New_category_set_Id))
3294              AND (Expected_Enabled = 'Y'))
3295         THEN
3296             Is_Changed := TRUE;
3297         ELSIF (NOT Is_Same_Value(p_old_inventory_item_id,
3298                                  p_new_inventory_item_id)
3299              AND (ItemNo_Enabled = 'Y'))
3300         THEN
3301             Is_Changed := TRUE;
3302         ELSIF (NOT Is_Same_Value(p_old_purchase_amount,
3303                                  p_new_purchase_amount)
3304              AND (Amount_Enabled = 'Y'))
3305         THEN
3306             Is_Changed := TRUE;
3307         END IF;
3308 
3309         IF( Is_Changed = TRUE)
3310 --          AND NOT Changed_Accounts_Record_Exist(p_sales_lead_id))
3311         THEN
3312             BEGIN
3313             INSERT INTO AS_CHANGED_ACCOUNTS_ALL(
3314                 customer_id, address_id, sales_lead_id, last_update_date,
3315                 last_updated_by, creation_date, created_by,
3316                 last_update_login, change_type, delete_flag, insert_flag,
3317                 processed_flag)
3318             VALUES
3319                (l_customer_id, l_address_id, p_sales_lead_id, SYSDATE, 0,
3320                 SYSDATE, 0, 0, 'LEAD', 'N', 'N', 'N');
3321             EXCEPTION
3322                 WHEN OTHERS THEN
3323                 UPDATE AS_CHANGED_ACCOUNTS_ALL
3324                 SET processed_flag = 'N'
3325                 WHERE sales_lead_id = p_sales_lead_id;
3326             END;
3327         END IF;
3328     END IF; -- l_customer_id IS NOT NULL
3329 END Sales_Lead_Lines_Handler;
3330 
3331 
3332 /*-------------------------------------------------------------------------*
3333  | PUBLIC ROUTINE
3334  |   Insert Access Records
3335  |
3336  | PURPOSE
3337  |   Insert access records in an array. These array will be inserted into
3338  |   database when calling Flush_Access_Records().
3339  |
3340  | NOTES
3341  |
3342  | HISTORY
3343  |   01/16/02   SOLIN          Created
3344  *-------------------------------------------------------------------------*/
3345 PROCEDURE  Insert_Access_Records(
3346     p_resource_id            IN     NUMBER,
3347     p_group_id               IN     NUMBER,
3348     p_full_access_flag       IN     VARCHAR2,
3349 --    p_person_id              IN     NUMBER,
3350     p_territory_id           IN     NUMBER := NULL,
3351     p_party_id               IN     NUMBER,
3352     p_party_site_id          IN     NUMBER,
3353     p_partner_cont_party_id  IN     NUMBER := NULL,
3354     p_partner_customer_id    IN     NUMBER := NULL,
3355     p_sales_lead_id          IN     NUMBER,
3356     p_freeze_flag            IN     VARCHAR2,
3357     p_owner_flag             IN     VARCHAR2,
3358     p_source                 IN     VARCHAR2)
3359 IS
3360 l_found                VARCHAR2(1) := 'N';
3361 l_access_id            NUMBER;
3362 l_i                    NUMBER; -- index to Insert array
3363 
3364 CURSOR c_get_access_id IS
3365     SELECT AS_ACCESSES_S.NEXTVAL
3366     FROM   SYS.DUAL;
3367 
3368 BEGIN
3369     l_i := g_i_count;
3370 
3371     -- search backward in array to see if access record is already here
3372     -- One customer may get the same resource from different territories.
3373     WHILE l_found = 'N' AND l_i >= 1
3374     LOOP
3375         IF g_i_resource_id(l_i) = p_resource_id
3376            AND NVL(g_i_group_id(l_i),-1) = NVL(p_group_id,-1)
3377            AND g_i_party_id(l_i) = p_party_id
3378            AND NVL(g_i_party_site_id(l_i), -1) = NVL(p_party_site_id, -1)
3379            AND g_i_sales_lead_id(l_i) = p_sales_lead_id
3380         THEN
3381             l_found := 'Y';
3382         ELSE
3383             l_i := l_i - 1;
3384         END IF;
3385     END LOOP;
3386 
3387     IF l_found = 'Y'
3388     THEN
3389         -- Check full_access_flag, Full access flag Y overrides N
3390         IF g_i_full_access_flag(l_i) = 'N' AND p_full_access_flag = 'Y'
3391         THEN
3392             g_i_full_access_flag(l_i) := 'Y';
3393         END IF;
3394 
3395         -- Check owner_flag, owner flag Y overrides N
3396         IF g_i_owner_flag(l_i) = 'N' AND p_owner_flag = 'Y'
3397         THEN
3398             g_i_owner_flag(l_i) := 'Y';
3399         END IF;
3400 
3401         IF p_territory_id IS NOT NULL
3402         THEN
3403             Insert_Territory_Accesses(
3404                 p_access_id              => g_i_access_id(l_i),
3405                 p_territory_id           => p_territory_id);
3406         END IF;
3407     ELSE -- l_found <> 'Y'
3408 
3409         OPEN c_get_access_id;
3410         FETCH c_get_access_id INTO l_access_id;
3411         CLOSE c_get_access_id;
3412 
3413         g_i_count := g_i_count + 1;
3414         g_i_access_id(g_i_count) := l_access_id;
3415         g_i_resource_id(g_i_count) := p_resource_id;
3416         g_i_group_id(g_i_count) := p_group_id;
3417 
3418         IF p_full_access_flag = 'Y'
3419         THEN
3420             g_i_full_access_flag(g_i_count) := 'Y';
3421         ELSE
3422             g_i_full_access_flag(g_i_count) := 'N';
3423         END IF;
3424 
3425         IF p_owner_flag = 'Y'
3426         THEN
3427             g_i_owner_flag(g_i_count) := 'Y';
3428         ELSE
3429             g_i_owner_flag(g_i_count) := 'N';
3430         END IF;
3431 
3432 --        g_i_person_id(g_i_count) := p_person_id;
3433         g_i_party_id(g_i_count) := p_party_id;
3434         g_i_party_site_id(g_i_count) := p_party_site_id;
3435         g_i_partner_cont_party_id(g_i_count) := p_partner_cont_party_id;
3436         g_i_partner_customer_id(g_i_count) := p_partner_customer_id;
3437         g_i_sales_lead_id(g_i_count) := p_sales_lead_id;
3438         g_i_freeze_flag(g_i_count) := p_freeze_flag;
3439         g_i_territory_id(g_i_count) := p_territory_id;
3440         g_i_source(g_i_count) := p_source;
3441 
3442         IF p_territory_id IS NOT NULL
3443         THEN
3444             Insert_Territory_Accesses(
3445                 p_access_id              => l_access_id,
3446                 p_territory_id           => p_territory_id);
3447         END IF;
3448     END IF; -- l_found = 'Y'
3449 
3450 END Insert_Access_Records;
3451 
3452 
3453 /*-------------------------------------------------------------------------*
3454  | PRIVATE ROUTINE
3455  |   Create_Access_Records
3456  |
3457  | PURPOSE
3458  |   Create access records in an array. First check if the record is
3459  |   already in the database. If it is, add the record to update array,
3460  |   then call Create_Territory_Access(). If it isn't, search the array
3461  |   itself. If it's in the array, call Create_Territory_Access() as well.
3462  |   If it's not in the array, add the new record into the array and call
3463  |   Create_Territory_Access()
3464  |
3465  | NOTES
3466  |
3467  | HISTORY
3468  |   06/18/01   SOLIN          Created
3469  *-------------------------------------------------------------------------*/
3470 
3471 PROCEDURE  Create_Access_Records(
3472     p_resource_id            IN     NUMBER,
3473     p_group_id               IN     NUMBER,
3474     p_full_access_flag       IN     VARCHAR2,
3475 --    p_person_id              IN     NUMBER,
3476     p_territory_id           IN     NUMBER,
3477     p_party_id               IN     NUMBER,
3478     p_party_site_id          IN     NUMBER,
3479     p_partner_cont_party_id  IN     NUMBER := NULL,
3480     p_partner_customer_id    IN     NUMBER := NULL,
3481     p_sales_lead_id          IN     NUMBER,
3482     p_freeze_flag            IN     VARCHAR2,
3483     p_source                 IN     VARCHAR2
3484 
3485 )
3486 IS
3487 l_found                VARCHAR2(1) := 'N';
3488 l_access_id            NUMBER;
3489 l_full_access_flag     VARCHAR2(1); -- from AS_ACCESSES_ALL table
3490 --l_full_access_flag     VARCHAR2(1); -- from JTF_TERR_RSC table
3491 l_employee_person_id   NUMBER;
3492 l_access_id_new        NUMBER;
3493 
3494 l_id_found             VARCHAR2(1) := 'N';
3495 l_u                    NUMBER; -- Index to Update array
3496 l_i                    NUMBER; -- index to Insert array
3497 
3498 CURSOR c_get_access_id(c_resource_id NUMBER, c_group_id NUMBER,
3499                        c_sales_lead_id NUMBER) IS
3500     SELECT ACCESS_ID, TEAM_LEADER_FLAG
3501     FROM   AS_ACCESSES_ALL
3502     WHERE  SALESFORCE_ID = c_resource_id
3503     AND  ((SALES_GROUP_ID IS NULL AND c_group_id IS NULL)
3504        OR  SALES_GROUP_ID = c_group_id)
3505     AND    SALES_LEAD_ID = c_sales_lead_id
3506     AND    ROWNUM <= 1;
3507 
3508 CURSOR c_get_new_access_id IS
3509     SELECT AS_ACCESSES_S.NEXTVAL
3510     FROM   SYS.DUAL;
3511 
3512 BEGIN
3513     IF (AS_DEBUG_LOW_ON) THEN
3514     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3515                                  'OPEN c_get_access_id');
3516     END IF;
3517 
3518     OPEN c_get_access_id(p_resource_id, p_group_id, p_sales_lead_id);
3519     FETCH c_get_access_id INTO l_access_id, l_full_access_flag;
3520     IF c_get_access_id%FOUND
3521     THEN
3522         l_id_found := 'Y';
3523     END IF;
3524     CLOSE c_get_access_id;
3525 
3526     -- based on the unique index, the above cursor will return
3527     -- 0 or 1 row only
3528     IF l_id_found = 'Y'
3529     THEN
3530         IF (AS_DEBUG_LOW_ON) THEN
3531         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3532             'ID found, access_id=' || l_access_id);
3533         END IF;
3534         -- Search backward in array to see if update is already here
3535         l_u := g_u_count;
3536         l_found := 'N';
3537         WHILE l_found = 'N' AND l_u >= 1
3538         LOOP
3539             IF g_u_access_id(l_u) = l_access_id
3540             THEN
3541                 l_found := 'Y';
3542             ELSE
3543                 l_u := l_u - 1;
3544             END IF;
3545         END LOOP;
3546 
3547         IF l_found = 'Y'
3548         THEN
3549             IF (AS_DEBUG_LOW_ON) THEN
3550             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3551                 'update array found=Y');
3552             END IF;
3553             -- Check full_access_flag,
3554             -- Full access flag Y overrides N
3555             IF g_u_full_access_flag(l_u) = 'N' AND
3556                p_full_access_flag = 'Y'
3557             THEN
3558                 g_u_full_access_flag(l_u) := 'Y';
3559             ELSE
3560                 g_u_full_access_flag(l_u) := p_full_access_flag;
3561             END IF;
3562             Create_Territory_Accesses(
3563                 p_access_id              => l_access_id,
3564                 p_territory_id           => p_territory_id);
3565         ELSE -- l_found <> 'Y'
3566             IF (AS_DEBUG_LOW_ON) THEN
3567             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3568                 'update array found<>Y, put in update array');
3569             END IF;
3570             -- Insert into Update array
3571             g_u_count := g_u_count + 1;
3572             g_u_access_id(g_u_count) := l_access_id;
3573 
3574             -- Team leader flag Y overrides N
3575             IF l_full_access_flag = 'Y' OR p_full_access_flag = 'Y'
3576             THEN
3577                 g_u_full_access_flag(g_u_count) := 'Y';
3578             ELSE
3579                 g_u_full_access_flag(g_u_count) := 'N';
3580             END IF;
3581 
3582             Create_Territory_Accesses(
3583                 p_access_id              => l_access_id,
3584                 p_territory_id           => p_territory_id);
3585 
3586         END IF;
3587     ELSE -- l_id_found <> 'Y'
3588         -- search backward in array to see if access record is already here
3589         l_i := g_i_count;
3590         l_found := 'N';
3591         IF (AS_DEBUG_LOW_ON) THEN
3592         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3593             'ID not found');
3594         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3595             'g_i_count=' || g_i_count);
3596         END IF;
3597         WHILE l_found = 'N' AND l_i >= 1
3598         LOOP
3599             IF g_i_resource_id(l_i) = p_resource_id
3600                AND NVL(g_i_group_id(l_i),-1) = NVL(p_group_id,-1)
3601                AND g_i_party_id(l_i) = p_party_id
3602                AND NVL(g_i_party_site_id(l_i), -1) = NVL(p_party_site_id, -1)
3603                AND NVL(g_i_sales_lead_id(l_i), -1) = NVL(p_sales_lead_id, -1)
3604             THEN
3605                 l_found := 'Y';
3606             ELSE
3607                 l_i := l_i - 1;
3608             END IF;
3609         END LOOP;
3610 
3611         IF l_found = 'Y'
3612         THEN
3613             IF (AS_DEBUG_LOW_ON) THEN
3614             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3615                 'l_found=Y');
3616             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3617                 'l_i=' || l_i);
3618             END IF;
3619             -- Check full_access_flag,
3620             -- Full access flag Y overrides N
3621             IF g_i_full_access_flag(l_i) = 'N' AND p_full_access_flag = 'Y'
3622             THEN
3623                 g_i_full_access_flag(l_i) := 'Y';
3624             ELSE
3625                 g_i_full_access_flag(l_i) := p_full_access_flag;
3626             END IF;
3627             l_access_id := g_i_access_id(l_i);
3628             Create_Territory_Accesses(
3629                 p_access_id              => l_access_id,
3630                 p_territory_id           => p_territory_id);
3631         ELSE -- l_found <> 'Y'
3632             IF (AS_DEBUG_LOW_ON) THEN
3633             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3634                 'l_found<>Y');
3635             END IF;
3636             OPEN c_get_new_access_id;
3637             FETCH c_get_new_access_id INTO l_access_id_new;
3638             CLOSE c_get_new_access_id;
3639             IF (AS_DEBUG_LOW_ON) THEN
3640             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3641                 'new acc_id=' || l_access_id_new);
3642             END IF;
3643 
3644             g_i_count := g_i_count + 1;
3645             g_i_access_id(g_i_count) := l_access_id_new;
3646             g_i_resource_id(g_i_count) := p_resource_id;
3647             g_i_group_id(g_i_count) := p_group_id;
3648             g_i_source(g_i_count) := p_source;
3649             g_i_full_access_flag(g_i_count) := p_full_access_flag;
3650 --            g_i_person_id(g_i_count) := p_person_id;
3651             g_i_party_id(g_i_count) := p_party_id;
3652             g_i_party_site_id(g_i_count) := p_party_site_id;
3653             g_i_partner_cont_party_id(g_i_count) := p_partner_cont_party_id;
3654             g_i_partner_customer_id(g_i_count) := p_partner_customer_id;
3655             g_i_sales_lead_id(g_i_count) := p_sales_lead_id;
3656             g_i_territory_id(g_i_count) := p_territory_id;
3657             g_i_freeze_flag(g_i_count) := p_freeze_flag;
3658 
3659             Create_Territory_Accesses(
3660                 p_access_id              => l_access_id_new,
3661                 p_territory_id           => p_territory_id);
3662 
3663         END IF; -- l_found = 'Y'
3664     END IF; -- l_id_found = 'Y'
3665 
3666 END Create_Access_Records;
3667 
3668 
3669 /*-------------------------------------------------------------------------*
3670  | PRIVATE ROUTINE
3671  |   Insert_Territory_Accesses
3672  |
3673  | PURPOSE
3674  |   Insert the records in an array prefixed with ti. These array will be
3675  |   inserted into database when calling Flush_Access_Records().
3676  |   If the array is full, flush the arrays by calling Flush_Access_Records()
3677  |
3678  | NOTES
3679  |
3680  | HISTORY
3681  |   01/17/02   SOLIN          Created
3682  *-------------------------------------------------------------------------*/
3683 PROCEDURE Insert_Territory_Accesses(
3684     p_access_id              IN     NUMBER,
3685     p_territory_id           IN     NUMBER)
3686 IS
3687 l_count             NUMBER;
3688 
3689 l_found             VARCHAR2(1) := 'N';
3690 l_i                 NUMBER;
3691 l_u                 NUMBER;
3692 
3693 BEGIN
3694     -- search backward in array to see if record is already here
3695     l_i := g_ti_count;
3696     l_found := 'N';
3697     WHILE l_found = 'N' AND l_i >= 1 LOOP
3698         IF g_ti_access_id(l_i) = p_access_id
3699         AND g_ti_territory_id(l_i) = p_territory_id
3700         THEN
3701             l_found := 'Y';
3702         ELSE
3703             l_i := l_i - 1;
3704         END IF;
3705     END LOOP;
3706 
3707     IF l_found = 'N'
3708     THEN
3709         g_ti_count := g_ti_count + 1;
3710         g_ti_access_id(g_ti_count) := p_access_id;
3711         g_ti_territory_id(g_ti_count) := p_territory_id;
3712 
3713     END IF; -- l_found = 'N'
3714 
3715 END Insert_Territory_Accesses;
3716 
3717 /*-------------------------------------------------------------------------*
3718  | PRIVATE ROUTINE
3719  |   Create_Territory_Accesses
3720  |
3721  | PURPOSE
3722  |   Create the records in an array prefixed with ti.
3723  |   First check if the record is already in the database. If it is,
3724  |   ignore because territory access update statement will update
3725  |   the request ids of those records. If it is not, search the array
3726  |   itself. If it is not in the array, add the record in the array.
3727  |   If the array is full, flush the arrays by calling Flush_Access_Records()
3728  |
3729  | NOTES
3730  |
3731  | HISTORY
3732  |   06/19/01   SOLIN          Created
3733  *-------------------------------------------------------------------------*/
3734 
3735 PROCEDURE Create_Territory_Accesses(
3736     p_access_id              IN     NUMBER,
3737     p_territory_id           IN     NUMBER)
3738 IS
3739 l_count             NUMBER;
3740 
3741 l_found             VARCHAR2(1) := 'N';
3742 l_i                 NUMBER;
3743 l_u                 NUMBER;
3744 
3745 CURSOR c_get_terracc_count(c_access_id NUMBER, c_territory_id NUMBER)
3746 IS
3747     SELECT 1
3748     FROM   AS_TERRITORY_ACCESSES
3749     WHERE  ACCESS_ID = c_access_id
3750     AND    TERRITORY_ID = c_territory_id
3751     AND    ROWNUM <= 1;
3752 BEGIN
3753     IF (AS_DEBUG_LOW_ON) THEN
3754     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3755         '*** Create_Territory_Accesses() ***');
3756     END IF;
3757 
3758     OPEN c_get_terracc_count(p_access_id, p_territory_id);
3759     FETCH c_get_terracc_count INTO l_count;
3760     CLOSE c_get_terracc_count;
3761 
3762     IF l_count > 0
3763     THEN
3764         IF (AS_DEBUG_LOW_ON) THEN
3765         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3766             'l_count>0');
3767         END IF;
3768         -- search array to see if it is already there
3769         l_u := g_tu_count;
3770         l_found := 'N';
3771         WHILE l_found = 'N' AND l_u >= 1 LOOP
3772             IF g_tu_access_id(l_u) = p_access_id AND
3773                g_tu_territory_id(l_u) = p_territory_id
3774             THEN
3775                 l_found := 'Y';
3776             ELSE
3777                 l_u := l_u - 1;
3778             END IF;
3779         END LOOP;
3780 
3781         IF l_found = 'N'
3782         THEN
3783             IF (AS_DEBUG_LOW_ON) THEN
3784             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3785                 'access_id and terr_id are not in tu array');
3786             END IF;
3787             g_tu_count := g_tu_count + 1;
3788             g_tu_access_id(g_tu_count) := p_access_id;
3789             g_tu_territory_id(g_tu_count) := p_territory_id;
3790 
3791         END IF;
3792     ELSE -- l_count = 0
3793         IF (AS_DEBUG_LOW_ON) THEN
3794         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3795             'l_count=0');
3796         END IF;
3797         -- search backward in array to see if record is already here
3798         l_i := g_ti_count;
3799 	   l_found := 'N';
3800 	   WHILE l_found = 'N' AND l_i >= 1
3801         LOOP
3802             IF g_ti_access_id(l_i) = p_access_id
3803             AND g_ti_territory_id(l_i) = p_territory_id
3804             THEN
3805                 l_found := 'Y';
3806             ELSE
3807                 l_i := l_i - 1;
3808             END IF;
3809         END LOOP;
3810 
3811         IF l_found = 'N'
3812         THEN
3813             IF (AS_DEBUG_LOW_ON) THEN
3814             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3815                 'access_id and terr_id are not in tu array');
3816             END IF;
3817             g_ti_count := g_ti_count + 1;
3818             g_ti_access_id(g_ti_count) := p_access_id;
3819             g_ti_territory_id(g_ti_count) := p_territory_id;
3820 
3821         END IF; -- l_found = 'N'
3822 
3823     END IF; -- l_count > 0
3824 
3825 END Create_Territory_Accesses;
3826 
3827 
3828 /*-------------------------------------------------------------------------*
3829  | PRIVATE ROUTINE
3830  |   Flush_Access_Records
3831  |
3832  | PURPOSE
3833  |   After all data are ready, call this procedure to do the insert
3834  |   and update statements.
3835  |
3836  | NOTES
3837  |
3838  | HISTORY
3839  |   06/19/01   SOLIN          Created
3840  |   11/21/01   SOLIN          Add for request_id
3841  *-------------------------------------------------------------------------*/
3842 
3843 PROCEDURE Flush_Access_Records(
3844     p_request_id              IN     NUMBER)
3845 IS
3846 l_i             NUMBER;
3847 
3848 l_i_num_rows    NUMBER;
3849 l_u_num_rows    NUMBER;
3850 l_ti_num_rows   NUMBER;
3851 l_tu_num_rows   NUMBER;
3852 
3853 l_open_status_flag VARCHAR2(1);
3854 l_lead_rank_score  NUMBER;
3855 l_creation_date    DATE;
3856 
3857 -- Get whether status is open or not for the lead
3858 -- Get lead_rank_score and lead creation_date
3859 CURSOR c_get_open_status_flag(c_sales_lead_id NUMBER) IS
3860   SELECT DECODE(sta.opp_open_status_flag, 'Y', 'Y', 'N', NULL),
3861          NVL(rk.min_score, 0), sl.creation_date
3862   FROM as_statuses_b sta, as_sales_leads sl, as_sales_lead_ranks_b rk
3863   WHERE sl.sales_lead_id = c_sales_lead_id
3864   AND   sl.status_code = sta.status_code
3865   AND   sl.lead_rank_id = rk.rank_id(+);
3866 BEGIN
3867     IF (AS_DEBUG_LOW_ON) THEN
3868     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3869         '*** Flush_Access_Records() ***');
3870     END IF;
3871 
3872     l_i_num_rows := g_i_count;
3873     l_u_num_rows := g_u_count;
3874     l_ti_num_rows := g_ti_count;
3875     l_tu_num_rows := g_tu_count;
3876 
3877     IF g_u_count > 0
3878     THEN
3879         IF (AS_DEBUG_LOW_ON) THEN
3880         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3881             'g_u_count=' || g_u_count);
3882 
3883         FOR l_i IN 1..g_u_count LOOP
3884             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3885                 l_i
3886                 || ',Upd Acc acc=' || g_u_access_id(l_i)
3887                 || ' f_acc_f=' || g_u_full_access_flag(l_i));
3888         END LOOP;
3889         END IF;
3890 
3891         FORALL l_i IN 1..l_u_num_rows
3892             UPDATE AS_ACCESSES_ALL
3893             SET    LAST_UPDATE_DATE       = SYSDATE,
3894                    LAST_UPDATED_BY        = FND_GLOBAL.USER_ID,
3895                    LAST_UPDATE_LOGIN      = FND_GLOBAL.CONC_LOGIN_ID,
3896                    PROGRAM_APPLICATION_ID = FND_GLOBAL.PROG_APPL_ID,
3897                    PROGRAM_UPDATE_DATE    = SYSDATE,
3898                    TEAM_LEADER_FLAG       = g_u_full_access_flag(l_i),
3899                    REQUEST_ID             = p_request_id
3900             WHERE  ACCESS_ID = g_u_access_id(l_i);
3901     END IF;
3902 
3903     IF g_tu_count > 0
3904     THEN
3905         IF (AS_DEBUG_LOW_ON) THEN
3906         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3907             'g_tu_count=' || g_tu_count);
3908         FOR l_i IN 1..g_tu_count LOOP
3909             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3910                 l_i
3911                 || ',Upd Terr Acc acc=' || g_tu_access_id(l_i));
3912         END LOOP;
3913         END IF;
3914 
3915         FORALL l_i IN 1..l_tu_num_rows
3916             UPDATE AS_TERRITORY_ACCESSES
3917             SET    LAST_UPDATE_DATE       = SYSDATE,
3918                    LAST_UPDATED_BY        = FND_GLOBAL.USER_ID,
3919                    LAST_UPDATE_LOGIN      = FND_GLOBAL.CONC_LOGIN_ID,
3920                    PROGRAM_APPLICATION_ID = FND_GLOBAL.PROG_APPL_ID,
3921                    PROGRAM_UPDATE_DATE    = SYSDATE,
3922                    REQUEST_ID             = p_request_id
3923             WHERE  ACCESS_ID = g_tu_access_id(l_i)
3924             AND    TERRITORY_ID = g_tu_territory_id(l_i);
3925     END IF;
3926 
3927     IF g_i_count > 0
3928     THEN
3929         IF (AS_DEBUG_LOW_ON) THEN
3930         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3931             'g_i_count=' || g_i_count);
3932         FOR l_i IN 1..g_i_count LOOP
3933             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3934                 l_i
3935                 || ',Ins Acc acc=' || g_i_access_id(l_i)
3936                 || ' rs=' || g_i_resource_id(l_i)
3937                 || ' grp=' || g_i_group_id(l_i)
3938 --                || ' per=' || g_i_person_id(l_i)
3939                 || ' pty=' || g_i_party_id(l_i)
3940                 || ' site=' || g_i_party_site_id(l_i));
3941             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3942                 'sl=' || g_i_sales_lead_id(l_i)
3943                 || ' f_acc_f=' || g_i_full_access_flag(l_i));
3944         END LOOP;
3945         END IF;
3946 
3947         OPEN c_get_open_status_flag(g_i_sales_lead_id(1));
3948         FETCH c_get_open_status_flag INTO l_open_status_flag,
3949             l_lead_rank_score, l_creation_date;
3950         CLOSE c_get_open_status_flag;
3951 
3952         FORALL l_i IN 1..l_i_num_rows
3953             INSERT INTO AS_ACCESSES_ALL
3954                   (ACCESS_ID,
3955                    ACCESS_TYPE,
3956                    SALESFORCE_ID,
3957                    SALES_GROUP_ID,
3958                    PERSON_ID,
3959                    CUSTOMER_ID,
3960                    ADDRESS_ID,
3961                    PARTNER_CONT_PARTY_ID,
3962                    PARTNER_CUSTOMER_ID,
3963                    SALES_LEAD_ID,
3964                    FREEZE_FLAG,
3965                    REASSIGN_FLAG,
3966                    TEAM_LEADER_FLAG,
3967                    OWNER_FLAG,
3968                    CREATED_BY_TAP_FLAG,
3969                    LAST_UPDATE_DATE,
3970                    LAST_UPDATED_BY,
3971                    CREATION_DATE,
3972                    CREATED_BY,
3973                    LAST_UPDATE_LOGIN,
3974                    PROGRAM_APPLICATION_ID,
3975                    PROGRAM_UPDATE_DATE,
3976                    REQUEST_ID,
3977                    OPEN_FLAG,
3978                    LEAD_RANK_SCORE,
3979                    OBJECT_CREATION_DATE)
3980             SELECT g_i_access_id(l_i),
3981                    'X',
3982                    g_i_resource_id(l_i),
3983                    g_i_group_id(l_i),
3984                    DECODE(g_i_source(l_i), 'CREATOR', NULL, b.source_id),
3985                    g_i_party_id(l_i),
3986                    g_i_party_site_id(l_i),
3987                    g_i_partner_cont_party_id(l_i),
3988                    g_i_partner_customer_id(l_i),
3989                    g_i_sales_lead_id(l_i),
3990                    g_i_freeze_flag(l_i),
3991                    'N',
3992                    g_i_full_access_flag(l_i),
3993                    'N',
3994                    DECODE(g_i_source(l_i), 'TERRITORY', 'Y', 'N'),
3995                    SYSDATE,
3996                    FND_GLOBAL.USER_ID,
3997                    SYSDATE,
3998                    FND_GLOBAL.USER_ID,
3999                    FND_GLOBAL.CONC_LOGIN_ID,
4000                    FND_GLOBAL.PROG_APPL_ID,
4001                    SYSDATE,
4002                    p_request_id,
4003                    l_open_status_flag,
4004                    l_lead_rank_score,
4005                    l_creation_date
4006             FROM   jtf_rs_resource_extns b
4007             WHERE  b.resource_id = g_i_resource_id(l_i);
4008     END IF;
4009 
4010     IF g_ti_count > 0
4011     THEN
4012         IF (AS_DEBUG_LOW_ON) THEN
4013         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4014             'g_ti_count=' || g_ti_count);
4015         FOR l_i IN 1..g_ti_count LOOP
4016             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4017                 l_i
4018                 || ',Ins TA acc=' || g_ti_access_id(l_i)
4019                 || ' terr=' || g_ti_territory_id(l_i));
4020         END LOOP;
4021         END IF;
4022 
4023         FORALL l_i IN 1..l_ti_num_rows
4024             INSERT INTO AS_TERRITORY_ACCESSES
4025                   (ACCESS_ID,
4026                    TERRITORY_ID,
4027                    USER_TERRITORY_ID,
4028                    LAST_UPDATE_DATE,
4029                    LAST_UPDATED_BY,
4030                    CREATION_DATE,
4031                    CREATED_BY,
4032                    LAST_UPDATE_LOGIN,
4033                    PROGRAM_APPLICATION_ID,
4034                    PROGRAM_UPDATE_DATE,
4035                    REQUEST_ID)
4036             VALUES
4037                   (g_ti_access_id(l_i),
4038                    g_ti_territory_id(l_i),
4039                    g_ti_territory_id(l_i),
4040                    SYSDATE,
4041                    FND_GLOBAL.USER_ID,
4042                    SYSDATE,
4043                    FND_GLOBAL.USER_ID,
4044                    FND_GLOBAL.CONC_LOGIN_ID,
4045                    FND_GLOBAL.PROG_APPL_ID,
4046                    SYSDATE,
4047                    p_request_id);
4048     END IF;
4049 
4050 END Flush_Access_Records;
4051 
4052 
4053 /*-------------------------------------------------------------------------*
4054  | PRIVATE ROUTINE
4055  |   Remove_Redundant_Accesses
4056  |
4057  | PURPOSE
4058  |   This procedure is called when profile AS_ENABLE_LEAD_ONLINE_TAP is
4059  |   set to 'N'.
4060  |
4061  | NOTES
4062  |
4063  | HISTORY
4064  |   11/21/01   SOLIN          Created
4065  *-------------------------------------------------------------------------*/
4066 PROCEDURE Remove_Redundant_Accesses(
4067     p_sales_lead_id          IN     NUMBER,
4068     p_request_id             IN     NUMBER)
4069 IS
4070 BEGIN
4071     DELETE FROM as_territory_accesses
4072     WHERE access_id IN (
4073         SELECT acc.access_id
4074         FROM as_accesses_all acc
4075         WHERE acc.sales_lead_id = p_sales_lead_id
4076         AND   acc.request_id = p_request_id
4077         AND   acc.owner_flag = 'N'
4078         AND   acc.created_by_tap_flag = 'Y');
4079 
4080     DELETE FROM as_accesses_all
4081     WHERE sales_lead_id = p_sales_lead_id
4082     AND   request_id = p_request_id
4083     AND   owner_flag = 'N'
4084     AND   created_by_tap_flag = 'Y';
4085 
4086 END Remove_Redundant_Accesses;
4087 
4088 
4089 /*-------------------------------------------------------------------------*
4090  | PRIVATE ROUTINE
4091  |   Add_Creator_In_Sales_Team
4092  |
4093  | PURPOSE
4094  |   This procedure is to add lead creator in lead sales team.
4095  |
4096  | NOTES
4097  |
4098  | HISTORY
4099  |   03/12/01   SOLIN          Created
4100  *-------------------------------------------------------------------------*/
4101 PROCEDURE Add_Creator_In_Sales_Team(
4102     p_customer_id            IN     NUMBER,
4103     p_address_id             IN     NUMBER,
4104     p_sales_lead_id          IN     NUMBER,
4105     p_identity_salesforce_id IN     NUMBER,
4106     p_salesgroup_id          IN     NUMBER)
4107 IS
4108     CURSOR C_get_current_resource IS
4109       SELECT res.resource_id
4110       FROM jtf_rs_resource_extns res
4111       WHERE res.category IN ('EMPLOYEE', 'PARTY')
4112       AND res.user_id = fnd_global.user_id;
4113 
4114     -- A resource may not be in any group. Besides, jtf_rs_group_members
4115     -- may not have person_id for all resources. Therefore, get person_id
4116     -- is this cursor.
4117     CURSOR c_get_person_id(c_resource_id NUMBER) IS
4118       SELECT res.source_id
4119       FROM jtf_rs_resource_extns res
4120       WHERE res.resource_id = c_resource_id;
4121 
4122     -- Check whether profile resource or login resource is in the sales
4123     -- team or not. Group_id is not necessary to check here because we don't
4124     -- care which group_id is in the sales team as long as this resource is
4125     -- in the sales team.
4126     CURSOR c_check_sales_team(c_resource_id NUMBER, c_sales_lead_id NUMBER) IS
4127       SELECT acc.access_id, team_leader_flag
4128       FROM as_accesses_all acc
4129       WHERE acc.salesforce_id = c_resource_id
4130       AND   acc.sales_lead_id = c_sales_lead_id;
4131 
4132     CURSOR c_get_group_id (c_resource_id NUMBER, c_rs_group_member VARCHAR2,
4133                            c_sales VARCHAR2, c_telesales VARCHAR2,
4134                            c_fieldsales VARCHAR2, c_prm VARCHAR2, c_y VARCHAR2)
4135 IS
4136       SELECT grp.group_id
4137       FROM JTF_RS_GROUP_MEMBERS mem,
4138            JTF_RS_ROLE_RELATIONS rrel,
4139            JTF_RS_ROLES_B role,
4140            JTF_RS_GROUP_USAGES u,
4141            JTF_RS_GROUPS_B grp
4142       WHERE mem.group_member_id = rrel.role_resource_id
4143       AND rrel.role_resource_type = c_rs_group_member --'RS_GROUP_MEMBER'
4144       AND rrel.role_id = role.role_id
4145       AND role.role_type_code in (c_sales, c_telesales, c_fieldsales, c_prm) --'SALES','TELESALES','FIELDSALES','PRM')
4146       AND mem.delete_flag <> c_y --'Y'
4147       AND rrel.delete_flag <> c_y --'Y'
4148       AND SYSDATE BETWEEN rrel.start_date_active AND
4149           NVL(rrel.end_date_active,SYSDATE)
4150       AND mem.resource_id = c_resource_id
4151       AND mem.group_id = u.group_id
4152       AND u.usage = c_sales --'SALES'
4153       AND mem.group_id = grp.group_id
4154       AND SYSDATE BETWEEN grp.start_date_active AND
4155           NVL(grp.end_date_active,SYSDATE)
4156       AND ROWNUM < 2;
4157 
4158     -- Get whether status is open or not for the lead
4159     -- Get lead_rank_score and lead creation_date
4160     CURSOR c_get_open_status_flag(c_sales_lead_id NUMBER) IS
4161       SELECT DECODE(sta.opp_open_status_flag, 'Y', 'Y', 'N', NULL),
4162              NVL(rk.min_score, 0), sl.creation_date
4163       FROM as_statuses_b sta, as_sales_leads sl, as_sales_lead_ranks_b rk
4164       WHERE sl.sales_lead_id = c_sales_lead_id
4165       AND   sl.status_code = sta.status_code
4166       AND   sl.lead_rank_id = rk.rank_id(+);
4167 
4168     l_rs_id             NUMBER;
4169     l_access_id         NUMBER;
4170     l_group_id          NUMBER;
4171     l_person_id         NUMBER;
4172     l_team_leader_flag  VARCHAR2(1);
4173     l_open_status_flag  VARCHAR2(1);
4174     l_lead_rank_score   NUMBER;
4175     l_creation_date     DATE;
4176 BEGIN
4177       -- Check whether current user is in the sales team or not.
4178       -- If not, add as view only access.
4179       -- SOLIN, bug 4702335
4180       l_rs_id := p_identity_salesforce_id;
4181       IF p_identity_salesforce_id IS NULL
4182          OR p_identity_salesforce_id = FND_API.G_MISS_NUM
4183       THEN
4184           -- if login user's resource_id is not passed in, get from the system
4185           OPEN C_get_current_resource;
4186           FETCH C_get_current_resource INTO l_rs_id;
4187           IF (C_get_current_resource%NOTFOUND)
4188           THEN
4189               IF (AS_DEBUG_LOW_ON) THEN
4190                  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4191                      'No current resource found!');
4192                  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4193                      'Creator won''t be in sales team');
4194              END IF;
4195              CLOSE C_get_current_resource;
4196              RETURN;
4197           END IF;
4198           CLOSE C_get_current_resource;
4199       ELSIF p_salesgroup_id IS NULL
4200       THEN
4201           IF (AS_DEBUG_LOW_ON) THEN
4202              AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4203                  'grp_id null, res not added to sales team');
4204           END IF;
4205           RETURN;
4206       END IF;
4207           -- Check whether this resource is in sales team or not
4208           l_access_id := NULL;
4209           OPEN c_check_sales_team(l_rs_id, p_sales_lead_id);
4210           FETCH c_check_sales_team INTO l_access_id, l_team_leader_flag;
4211           CLOSE c_check_sales_team;
4212 
4213           IF l_access_id IS NULL
4214           THEN
4215               IF (AS_DEBUG_LOW_ON) THEN
4216                   AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4217                       'Add current user to sales team');
4218               END IF;
4219 
4220               IF p_salesgroup_id = fnd_api.g_miss_num
4221               THEN
4222                   OPEN c_get_group_id (l_rs_id, 'RS_GROUP_MEMBER', 'SALES',
4223                                    'TELESALES', 'FIELDSALES', 'PRM', 'Y');
4224                   FETCH c_get_group_id INTO l_group_id;
4225                   CLOSE c_get_group_id;
4226               ELSE
4227                   l_group_id := p_salesgroup_id;
4228               END IF;
4229 
4230               OPEN c_get_person_id (l_rs_id);
4231               FETCH c_get_person_id INTO l_person_id;
4232               CLOSE c_get_person_id;
4233               IF (AS_DEBUG_LOW_ON) THEN
4234                   AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4235                       'Cur User rs_id is:' || l_rs_id);
4236                   AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4237                       'Cur User g_id is:' || l_group_id);
4238               END IF;
4239               OPEN c_get_open_status_flag (p_sales_lead_id);
4240               FETCH c_get_open_status_flag INTO l_open_status_flag,
4241                   l_lead_rank_score, l_creation_date;
4242               CLOSE c_get_open_status_flag;
4243 
4244               -- Current user is not in sales team, insert this
4245               -- resource as sales team member. Since this resource doesn't
4246               -- come from territory, don't insert into
4247               -- as_territory_accesses
4248               INSERT INTO as_accesses_all
4249                   (ACCESS_ID, LAST_UPDATE_DATE, LAST_UPDATED_BY
4250                   ,CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN
4251                   ,PROGRAM_APPLICATION_ID, PROGRAM_UPDATE_DATE
4252                   ,ACCESS_TYPE, FREEZE_FLAG, REASSIGN_FLAG
4253                   ,TEAM_LEADER_FLAG
4254                   ,OWNER_FLAG, CREATED_BY_TAP_FLAG
4255                   ,CUSTOMER_ID, ADDRESS_ID, SALES_LEAD_ID, SALESFORCE_ID
4256                   ,PERSON_ID, SALES_GROUP_ID, OPEN_FLAG, LEAD_RANK_SCORE
4257                   ,OBJECT_CREATION_DATE)
4258               SELECT as_accesses_s.nextval, SYSDATE, FND_GLOBAL.USER_ID,
4259                   SYSDATE, FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID,
4260                   FND_GLOBAL.PROG_APPL_ID, SYSDATE,
4261                   'X', 'Y' ,'N', 'Y', 'N', 'N',
4262                   p_customer_id, p_address_id, p_sales_lead_id,
4263                   l_rs_id, l_person_id, l_group_id, l_open_status_flag,
4264                   l_lead_rank_score, l_creation_date
4265               FROM sys.dual;
4266           ELSIF l_team_leader_flag = 'N'
4267           THEN
4268               -- lead creator is in sales team, but no full access
4269               UPDATE as_accesses_all
4270               SET team_leader_flag = 'Y'
4271               WHERE access_id = l_access_id;
4272           END IF; -- l_access_id IS NULL
4273 
4274 END Add_Creator_In_Sales_Team;
4275 
4276 
4277 /*-------------------------------------------------------------------------*
4278  | PRIVATE ROUTINE
4279  |   Set_Default_Lead_Owner
4280  |
4281  | PURPOSE
4282  |   This procedure is called when lead owner should be from the profile
4283  |   or current user.
4284  |
4285  | NOTES
4286  |   This procedure will get resource_id from the profile
4287  |   AS_DEFAULT_RESOURCE_ID. If this profile is not set, it will get
4288  |   current user's resource_id. Once resource_id is gotten
4289  |   AS_SALES_LEADS_LOG, AS_SALES_LEADS, AS_ACCESSES_ALL will be updated.
4290  |
4291  | HISTORY
4292  |   12/05/01   SOLIN          Created
4293  *-------------------------------------------------------------------------*/
4294 PROCEDURE Set_Default_Lead_Owner(
4295     p_sales_lead_id                  IN  NUMBER,
4296     p_salesgroup_id                  IN  NUMBER,
4297     p_request_id                     IN  NUMBER,
4298     X_Return_Status                  OUT NOCOPY VARCHAR2,
4299     X_Msg_Count                      OUT NOCOPY NUMBER,
4300     X_Msg_Data                       OUT NOCOPY VARCHAR2)
4301 IS
4302     l_resource_id          NUMBER;
4303     l_group_id             NUMBER;
4304     l_person_id            NUMBER;
4305     l_customer_id          NUMBER;
4306     l_address_id           NUMBER;
4307     l_access_exist_flag    VARCHAR2(1);
4308 --    l_routing_status       VARCHAR2(30);
4309     l_status_code          VARCHAR2(30);
4310     l_sales_lead_log_id    NUMBER;
4311     l_reject_reason_code   VARCHAR2(30);
4312     l_lead_rank_id         NUMBER;
4313     l_qualified_flag       VARCHAR2(1);
4314     l_freeze_flag          VARCHAR2(1);
4315     l_open_status_flag     VARCHAR2(1);
4316     l_lead_rank_score      NUMBER;
4317     l_creation_date        DATE;
4318 
4319     CURSOR C_get_current_resource IS
4320       SELECT res.resource_id
4321       FROM jtf_rs_resource_extns res
4322       WHERE res.category IN ('EMPLOYEE', 'PARTY')
4323       AND res.user_id = fnd_global.user_id;
4324 
4325     CURSOR c_get_group_id(c_resource_id NUMBER) IS
4326       SELECT grp.group_id
4327       FROM JTF_RS_GROUP_MEMBERS mem,
4328            JTF_RS_ROLE_RELATIONS rrel,
4329            JTF_RS_ROLES_B role,
4330            JTF_RS_GROUP_USAGES u,
4331            JTF_RS_GROUPS_B grp
4332       WHERE mem.group_member_id = rrel.role_resource_id
4333       AND rrel.role_resource_type = 'RS_GROUP_MEMBER'
4334       AND rrel.role_id = role.role_id
4335       AND role.role_type_code IN ('SALES','TELESALES','FIELDSALES','PRM')
4336       AND mem.delete_flag <> 'Y'
4337       AND rrel.delete_flag <> 'Y'
4338       AND SYSDATE BETWEEN rrel.start_date_active AND
4339           NVL(rrel.end_date_active,SYSDATE)
4340       AND mem.resource_id = c_resource_id
4341       AND mem.group_id = u.group_id
4342       AND u.usage = 'SALES'
4343       AND mem.group_id = grp.group_id
4344       AND SYSDATE BETWEEN grp.start_date_active AND
4345           NVL(grp.end_date_active,SYSDATE)
4346       AND ROWNUM < 2;
4347 
4348     -- A resource may not be in any group. Besides, jtf_rs_group_members
4349     -- may not have person_id for all resources. Therefore, get person_id
4350     -- in this cursor, instead of in the above cursor.
4351     CURSOR c_get_person_id(c_resource_id NUMBER) IS
4352       SELECT res.source_id
4353       FROM jtf_rs_resource_extns res
4354       WHERE res.resource_id = c_resource_id;
4355 
4356     CURSOR c_access_exist(c_sales_lead_id NUMBER, c_resource_id NUMBER,
4357                           c_group_id NUMBER) IS
4358       SELECT 'Y'
4359       FROM as_accesses_all
4360       WHERE sales_lead_id = c_sales_lead_id
4361       AND   salesforce_id = c_resource_id
4362       AND ((sales_group_id = c_group_id) OR
4363            (sales_group_id IS NULL AND c_group_id IS NULL));
4364 
4365     CURSOR c_sales_lead(c_sales_lead_id NUMBER) IS
4366       SELECT customer_id, address_id, reject_reason_code,
4367              lead_rank_id, qualified_flag, NVL(accept_flag, 'N'), status_code
4368       FROM as_sales_leads
4369       WHERE Sales_lead_id = c_sales_lead_id;
4370 
4371     -- Get whether status is open or not for the lead
4372     -- Get lead_rank_score and lead creation_date
4373     CURSOR c_get_open_status_flag(c_sales_lead_id NUMBER) IS
4374       SELECT DECODE(sta.opp_open_status_flag, 'Y', 'Y', 'N', NULL),
4375              NVL(rk.min_score, 0), sl.creation_date
4376       FROM as_statuses_b sta, as_sales_leads sl, as_sales_lead_ranks_b rk
4377       WHERE sl.sales_lead_id = c_sales_lead_id
4378       AND   sl.status_code = sta.status_code
4379       AND   sl.lead_rank_id = rk.rank_id(+);
4380 BEGIN
4381     x_return_status := FND_API.G_RET_STS_SUCCESS;
4382     l_resource_id := fnd_profile.value('AS_DEFAULT_RESOURCE_ID');
4383     IF l_resource_id IS NULL
4384     THEN
4385         IF (AS_DEBUG_LOW_ON) THEN
4386         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4387             'profile not set');
4388         END IF;
4389         -- Profile is not set. hence going against the logged in user
4390 
4391         OPEN C_get_current_resource;
4392         FETCH C_get_current_resource INTO l_resource_id;
4393         IF (C_get_current_resource%NOTFOUND)
4394         THEN
4395             IF (AS_DEBUG_LOW_ON) THEN
4396             AS_UTILITY_PVT.Debug_Message(
4397                 FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4398                 'No current resource found!');
4399             END IF;
4400         END IF;
4401         CLOSE C_get_current_resource;
4402 
4403         IF l_resource_id IS NOT NULL
4404         THEN
4405             IF (AS_DEBUG_LOW_ON) THEN
4406             AS_UTILITY_PVT.Debug_Message(
4407                 FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4408                 'Users resource id is:' || l_resource_id);
4409             END IF;
4410 
4411             IF p_salesgroup_id = fnd_api.g_miss_num
4412             THEN
4413                 OPEN c_get_group_id (l_resource_id);
4414                 FETCH c_get_group_id INTO l_group_id;
4415                 CLOSE c_get_group_id;
4416             ELSE
4417                 l_group_id := p_salesgroup_id;
4418             END IF;
4419 
4420             OPEN c_get_person_id (l_resource_id);
4421             FETCH c_get_person_id INTO l_person_id;
4422             CLOSE c_get_person_id;
4423             IF (AS_DEBUG_LOW_ON) THEN
4424             AS_UTILITY_PVT.Debug_Message(
4425                 FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4426                 'Users group id is:' || l_group_id);
4427             END IF;
4428 
4429         END IF; -- l_resource_id IS NOT NULL
4430     ELSE -- profile resource id is not null
4431         -- Profile was set with some resource id
4432         IF (AS_DEBUG_LOW_ON) THEN
4433         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4434             'Profile resource id:'|| l_resource_id);
4435         END IF;
4436         OPEN c_get_group_id (l_resource_id);
4437         FETCH c_get_group_id INTO l_group_id;
4438         CLOSE c_get_group_id;
4439         OPEN c_get_person_id (l_resource_id);
4440         FETCH c_get_person_id INTO l_person_id;
4441         CLOSE c_get_person_id;
4442         IF (AS_DEBUG_LOW_ON) THEN
4443         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4444             'Profile group id:' || l_group_id);
4445         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4446             'Profile person id:' || l_person_id);
4447         END IF;
4448 
4449     END IF; -- l_resource_id IS NULL
4450 
4451     OPEN c_sales_lead(p_sales_lead_id);
4452     FETCH c_sales_lead INTO l_customer_id, l_address_id,
4453                             l_reject_reason_code, l_lead_rank_id,
4454                             l_qualified_flag, l_freeze_flag, l_status_code;
4455     CLOSE c_sales_lead;
4456 
4457     -- l_routing_status := fnd_profile.value('AS_LEAD_ROUTING_STATUS');
4458     -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4459     --    'Lead Status on Routing:'|| l_routing_status); END IF;
4460 
4461     -- Call API to create log entry
4462     AS_SALES_LEADS_LOG_PKG.Insert_Row(
4463         px_log_id                 => l_sales_lead_log_id ,
4464         p_sales_lead_id           => p_sales_lead_id,
4465         p_created_by              => fnd_global.user_id,
4466         p_creation_date           => SYSDATE,
4467         p_last_updated_by         => fnd_global.user_id,
4468         p_last_update_date        => SYSDATE,
4469         p_last_update_login       => FND_GLOBAL.CONC_LOGIN_ID,
4470         p_request_id              => FND_GLOBAL.Conc_Request_Id,
4471         p_program_application_id  => FND_GLOBAL.Prog_Appl_Id,
4472         p_program_id              => FND_GLOBAL.Conc_Program_Id,
4473         p_program_update_date     => SYSDATE,
4474         p_status_code             => l_status_code, --l_routing_status,
4475         p_assign_to_person_id     => l_person_id,
4476         p_assign_to_salesforce_id => l_resource_id,
4477         p_reject_reason_code      => l_reject_reason_code,
4478         p_assign_sales_group_id   => l_group_id,
4479         p_lead_rank_id            => l_lead_rank_id,
4480         p_qualified_flag          => l_qualified_flag,
4481         p_category                => NULL);
4482 
4483     -- Call table handler directly, not calling Update_Sales_Lead,
4484     -- in case current user doesn't have update privilege.
4485     AS_SALES_LEADS_PKG.Sales_Lead_Update_Row(
4486         p_SALES_LEAD_ID  => p_SALES_LEAD_ID,
4487         p_LAST_UPDATE_DATE  => SYSDATE,
4488         p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
4489         p_CREATION_DATE  => FND_API.G_MISS_DATE,
4490         p_CREATED_BY  => FND_API.G_MISS_NUM,
4491         p_LAST_UPDATE_LOGIN  => FND_API.G_MISS_NUM,
4492         p_REQUEST_ID  => FND_GLOBAL.Conc_Request_Id,
4493         p_PROGRAM_APPLICATION_ID  => FND_GLOBAL.Prog_Appl_Id,
4494         p_PROGRAM_ID  => FND_GLOBAL.Conc_Program_Id,
4495         p_PROGRAM_UPDATE_DATE  => SYSDATE,
4496         p_LEAD_NUMBER  => FND_API.G_MISS_CHAR,
4497         p_STATUS_CODE => FND_API.G_MISS_CHAR, --l_routing_status,
4498         p_CUSTOMER_ID  => l_CUSTOMER_ID,
4499         p_ADDRESS_ID  => l_ADDRESS_ID,
4500         p_SOURCE_PROMOTION_ID  => FND_API.G_MISS_NUM,
4501         p_INITIATING_CONTACT_ID => FND_API.G_MISS_NUM,
4502         p_ORIG_SYSTEM_REFERENCE => FND_API.G_MISS_CHAR,
4503         p_CONTACT_ROLE_CODE  => FND_API.G_MISS_CHAR,
4504         p_CHANNEL_CODE  => FND_API.G_MISS_CHAR,
4505         p_BUDGET_AMOUNT  => FND_API.G_MISS_NUM,
4506         p_CURRENCY_CODE  => FND_API.G_MISS_CHAR,
4507         p_DECISION_TIMEFRAME_CODE => FND_API.G_MISS_CHAR,
4508         p_CLOSE_REASON  => FND_API.G_MISS_CHAR,
4509         p_LEAD_RANK_ID  => FND_API.G_MISS_NUM,
4510         p_LEAD_RANK_CODE  => FND_API.G_MISS_CHAR,
4511         p_PARENT_PROJECT  => FND_API.G_MISS_CHAR,
4512         p_DESCRIPTION  => FND_API.G_MISS_CHAR,
4513         p_ATTRIBUTE_CATEGORY  => FND_API.G_MISS_CHAR,
4514         p_ATTRIBUTE1  => FND_API.G_MISS_CHAR,
4515         p_ATTRIBUTE2  => FND_API.G_MISS_CHAR,
4516         p_ATTRIBUTE3  => FND_API.G_MISS_CHAR,
4517         p_ATTRIBUTE4  => FND_API.G_MISS_CHAR,
4518         p_ATTRIBUTE5  => FND_API.G_MISS_CHAR,
4519         p_ATTRIBUTE6  => FND_API.G_MISS_CHAR,
4520         p_ATTRIBUTE7  => FND_API.G_MISS_CHAR,
4521         p_ATTRIBUTE8  => FND_API.G_MISS_CHAR,
4522         p_ATTRIBUTE9  => FND_API.G_MISS_CHAR,
4523         p_ATTRIBUTE10 => FND_API.G_MISS_CHAR,
4524         p_ATTRIBUTE11 => FND_API.G_MISS_CHAR,
4525         p_ATTRIBUTE12 => FND_API.G_MISS_CHAR,
4526         p_ATTRIBUTE13 => FND_API.G_MISS_CHAR,
4527         p_ATTRIBUTE14 => FND_API.G_MISS_CHAR,
4528         p_ATTRIBUTE15 => FND_API.G_MISS_CHAR,
4529         p_ASSIGN_TO_PERSON_ID  => l_person_id,
4530         p_ASSIGN_TO_SALESFORCE_ID => l_resource_id,
4531         p_ASSIGN_SALES_GROUP_ID => l_group_id,
4532         p_ASSIGN_DATE  => SYSDATE,
4533         p_BUDGET_STATUS_CODE  => FND_API.G_MISS_CHAR,
4534         p_ACCEPT_FLAG  => 'N',
4535         p_VEHICLE_RESPONSE_CODE => FND_API.G_MISS_CHAR,
4536         p_TOTAL_SCORE  => FND_API.G_MISS_NUM,
4537         p_SCORECARD_ID  => FND_API.G_MISS_NUM,
4538         p_KEEP_FLAG  => FND_API.G_MISS_CHAR,
4539         p_URGENT_FLAG  => FND_API.G_MISS_CHAR,
4540         p_IMPORT_FLAG  => FND_API.G_MISS_CHAR,
4541         p_REJECT_REASON_CODE  => NULL, --l_reject_reason_code,
4542         p_DELETED_FLAG => FND_API.G_MISS_CHAR,
4543         p_OFFER_ID  =>  FND_API.G_MISS_NUM,
4544         p_QUALIFIED_FLAG => l_qualified_flag,
4545         p_ORIG_SYSTEM_CODE => FND_API.G_MISS_CHAR,
4546         -- p_SECURITY_GROUP_ID    => FND_API.G_MISS_NUM,
4547         p_INC_PARTNER_PARTY_ID => FND_API.G_MISS_NUM,
4548         p_INC_PARTNER_RESOURCE_ID => FND_API.G_MISS_NUM,
4549         p_PRM_EXEC_SPONSOR_FLAG   => FND_API.G_MISS_CHAR,
4550         p_PRM_PRJ_LEAD_IN_PLACE_FLAG => FND_API.G_MISS_CHAR,
4551         p_PRM_SALES_LEAD_TYPE     => FND_API.G_MISS_CHAR,
4552         p_PRM_IND_CLASSIFICATION_CODE => FND_API.G_MISS_CHAR,
4553         p_PRM_ASSIGNMENT_TYPE => FND_API.G_MISS_CHAR,
4554         p_AUTO_ASSIGNMENT_TYPE => FND_API.G_MISS_CHAR,
4555         p_PRIMARY_CONTACT_PARTY_ID => FND_API.G_MISS_NUM,
4556         p_PRIMARY_CNT_PERSON_PARTY_ID => FND_API.G_MISS_NUM,
4557         p_PRIMARY_CONTACT_PHONE_ID => FND_API.G_MISS_NUM,
4558         p_REFERRED_BY => FND_API.G_MISS_NUM,
4559         p_REFERRAL_TYPE => FND_API.G_MISS_CHAR,
4560         p_REFERRAL_STATUS => FND_API.G_MISS_CHAR,
4561         p_REF_DECLINE_REASON => FND_API.G_MISS_CHAR,
4562         p_REF_COMM_LTR_STATUS => FND_API.G_MISS_CHAR,
4563         p_REF_ORDER_NUMBER => FND_API.G_MISS_NUM,
4564         p_REF_ORDER_AMT => FND_API.G_MISS_NUM,
4565         p_REF_COMM_AMT => FND_API.G_MISS_NUM,
4566         -- bug No.2341515, 2368075
4567         p_LEAD_DATE =>  FND_API.G_MISS_DATE,
4568         p_SOURCE_SYSTEM => FND_API.G_MISS_CHAR,
4569         p_COUNTRY => FND_API.G_MISS_CHAR,
4570         p_TOTAL_AMOUNT => FND_API.G_MISS_NUM,
4571         p_EXPIRATION_DATE => FND_API.G_MISS_DATE,
4572         p_LEAD_RANK_IND => FND_API.G_MISS_CHAR,
4573         p_LEAD_ENGINE_RUN_DATE => FND_API.G_MISS_DATE,
4574         p_CURRENT_REROUTES => FND_API.G_MISS_NUM,
4575         p_STATUS_OPEN_FLAG => FND_API.G_MISS_CHAR,
4576         p_LEAD_RANK_SCORE => FND_API.G_MISS_NUM,
4577         -- 11.5.10 new columns
4578         p_MARKETING_SCORE => FND_API.G_MISS_NUM,
4579         p_INTERACTION_SCORE => FND_API.G_MISS_NUM,
4580         p_SOURCE_PRIMARY_REFERENCE => FND_API.G_MISS_CHAR,
4581         p_SOURCE_SECONDARY_REFERENCE => FND_API.G_MISS_CHAR,
4582         p_SALES_METHODOLOGY_ID => FND_API.G_MISS_NUM,
4583         p_SALES_STAGE_ID => FND_API.G_MISS_NUM);
4584 
4585     -- Check whether this resource is in sales team or not
4586     l_access_exist_flag := 'N';
4587     OPEN c_access_exist(p_sales_lead_id, l_resource_id, l_group_id);
4588     FETCH c_access_exist INTO l_access_exist_flag;
4589     CLOSE c_access_exist;
4590 
4591     IF (AS_DEBUG_LOW_ON) THEN
4592     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4593         'access exist?'|| l_access_exist_flag);
4594     END IF;
4595     IF l_reject_reason_code IS NOT NULL
4596     THEN
4597         -- Clear any owner for as_accesses_all
4598         -- If reject reason_code IS NULL, this workflow process must come
4599         -- from lead owner is null, owner in as_accesses_all is cleared
4600         -- already.
4601         UPDATE as_accesses_all
4602         SET owner_flag = 'N'
4603         WHERE sales_lead_id = p_sales_lead_id;
4604     END IF;
4605 
4606     IF l_access_exist_flag = 'N'
4607     THEN
4608         OPEN c_get_open_status_flag(p_sales_lead_id);
4609         FETCH c_get_open_status_flag INTO l_open_status_flag,
4610             l_lead_rank_score, l_creation_date;
4611         CLOSE c_get_open_status_flag;
4612 
4613         -- Default resource is not in sales team, insert this
4614         -- resource as sales team member. Since this resource doesn't
4615         -- come from territory, don't insert into
4616         -- as_territory_accesses
4617         INSERT INTO as_accesses_all
4618             (ACCESS_ID, LAST_UPDATE_DATE, LAST_UPDATED_BY
4619             ,CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN
4620             ,PROGRAM_APPLICATION_ID, PROGRAM_UPDATE_DATE
4621             ,ACCESS_TYPE, FREEZE_FLAG, REASSIGN_FLAG, TEAM_LEADER_FLAG
4622             ,OWNER_FLAG, CREATED_BY_TAP_FLAG
4623             ,CUSTOMER_ID, ADDRESS_ID, SALES_LEAD_ID, SALESFORCE_ID
4624             ,PERSON_ID, SALES_GROUP_ID, REQUEST_ID, OPEN_FLAG
4625             ,LEAD_RANK_SCORE, OBJECT_CREATION_DATE)
4626         SELECT as_accesses_s.nextval, SYSDATE, FND_GLOBAL.USER_ID,
4627             SYSDATE, FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID,
4628             FND_GLOBAL.PROG_APPL_ID, SYSDATE,
4629             'X', l_freeze_flag ,'N','Y', 'Y', 'N',
4630             l_customer_id, l_address_id, p_sales_lead_id,
4631             l_resource_id, l_person_id, l_group_id, p_request_id,
4632             l_open_status_flag, l_lead_rank_score, l_creation_date
4633         FROM sys.dual;
4634     ELSE
4635         -- Default resource is in sales team, update this resource
4636         -- as owner.
4637         UPDATE as_accesses_all
4638         SET team_leader_flag = 'Y',
4639             owner_flag = 'Y',
4640             freeze_flag = l_freeze_flag,
4641             request_id = p_request_id
4642         WHERE sales_lead_id = p_sales_lead_id
4643         AND   salesforce_id = l_resource_id
4644         AND  (sales_group_id = l_group_id OR
4645              (sales_group_id IS NULL AND l_group_id IS NULL));
4646     END IF;
4647 
4648     -- Standard call to get message count and IF count is 1, get message info.
4649     FND_MSG_PUB.Count_And_Get
4650     (  p_count          =>   x_msg_count,
4651        p_data           =>   x_msg_data );
4652 END Set_Default_Lead_Owner;
4653 
4654 /*-------------------------------------------------------------------------*
4655  | PRIVATE ROUTINE
4656  |   Oracle_Internal_CUHK
4657  |
4658  | PURPOSE
4659  |   This procedure is called when profile ASF_IS_ORACLE_INTERNAL is
4660  |   set to 'Y'.
4661  |
4662  | NOTES
4663  |
4664  | HISTORY
4665  |   12/03/01   SOLIN          Created
4666  *-------------------------------------------------------------------------*/
4667 PROCEDURE Oracle_Internal_CUHK(
4668     p_sales_lead_id          IN            NUMBER,
4669     p_salesgroup_id          IN            NUMBER,
4670     p_request_id             IN            NUMBER,
4671     x_return_status          OUT NOCOPY    VARCHAR2,
4672     x_msg_count              OUT NOCOPY    NUMBER,
4673     x_msg_data               OUT NOCOPY    VARCHAR2)
4674 IS
4675     l_sales_lead_rec       AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type;
4676 
4677     l_resource_id_tbl      AS_LEAD_ROUTING_WF.NUMBER_TABLE;
4678     l_group_id_tbl         AS_LEAD_ROUTING_WF.NUMBER_TABLE;
4679     l_person_id_tbl        AS_LEAD_ROUTING_WF.NUMBER_TABLE;
4680     l_resource_flag_tbl    AS_LEAD_ROUTING_WF.FLAG_TABLE;
4681 
4682     l_rs_id                NUMBER;
4683     l_resource_id          NUMBER;
4684     l_group_id             NUMBER;
4685     l_person_id            NUMBER;
4686     l_customer_id          NUMBER;
4687     l_address_id           NUMBER;
4688     l_access_exist_flag    VARCHAR2(1);
4689 --    l_routing_status       VARCHAR2(30);
4690     l_status_code          VARCHAR2(30);
4691     l_sales_lead_log_id    NUMBER;
4692     l_reject_reason_code   VARCHAR2(30);
4693     l_lead_rank_id         NUMBER;
4694     l_qualified_flag       VARCHAR2(1);
4695     l_freeze_flag          VARCHAR2(1);
4696     l_open_status_flag     VARCHAR2(1);
4697     l_lead_rank_score      NUMBER;
4698     l_creation_date        DATE;
4699 
4700     CURSOR C_get_current_resource IS
4701       SELECT res.resource_id
4702       FROM jtf_rs_resource_extns res
4703       WHERE res.category IN ('EMPLOYEE', 'PARTY')
4704       AND res.user_id = fnd_global.user_id;
4705 
4706     CURSOR c_get_group_id(c_resource_id NUMBER) IS
4707       SELECT grp.group_id
4708       FROM JTF_RS_GROUP_MEMBERS mem,
4709            JTF_RS_ROLE_RELATIONS rrel,
4710            JTF_RS_ROLES_B role,
4711            JTF_RS_GROUP_USAGES u,
4712            JTF_RS_GROUPS_B grp
4713       WHERE mem.group_member_id = rrel.role_resource_id
4714       AND rrel.role_resource_type = 'RS_GROUP_MEMBER'
4715       AND rrel.role_id = role.role_id
4716       AND role.role_type_code IN ('SALES','TELESALES','FIELDSALES','PRM')
4717       AND mem.delete_flag <> 'Y'
4718       AND rrel.delete_flag <> 'Y'
4719       AND SYSDATE BETWEEN rrel.start_date_active AND
4720           NVL(rrel.end_date_active,SYSDATE)
4721       AND mem.resource_id = c_resource_id
4722       AND mem.group_id = u.group_id
4723       AND u.usage = 'SALES'
4724       AND mem.group_id = grp.group_id
4725       AND SYSDATE BETWEEN grp.start_date_active AND
4726           NVL(grp.end_date_active,SYSDATE)
4727       AND ROWNUM < 2;
4728 
4729     CURSOR c_access_exist(c_sales_lead_id NUMBER, c_resource_id NUMBER,
4730                           c_group_id NUMBER) IS
4731       SELECT 'Y'
4732       FROM as_accesses_all
4733       WHERE sales_lead_id = c_sales_lead_id
4734       AND   salesforce_id = c_resource_id
4735       AND ((sales_group_id = c_group_id) OR
4736            (sales_group_id IS NULL AND c_group_id IS NULL));
4737 
4738     CURSOR c_sales_lead(c_sales_lead_id NUMBER) IS
4739       SELECT customer_id, address_id, reject_reason_code,
4740              lead_rank_id, qualified_flag, NVL(accept_flag, 'N'), status_code
4741       FROM as_sales_leads
4742       WHERE Sales_lead_id = c_sales_lead_id;
4743 
4744     -- Get whether status is open or not for the lead
4745     -- Get lead_rank_score and lead creation_date
4746     CURSOR c_get_open_status_flag(c_sales_lead_id NUMBER) IS
4747       SELECT DECODE(sta.opp_open_status_flag, 'Y', 'Y', 'N', NULL),
4748              NVL(rk.min_score, 0), sl.creation_date
4749       FROM as_statuses_b sta, as_sales_leads sl, as_sales_lead_ranks_b rk
4750       WHERE sl.sales_lead_id = c_sales_lead_id
4751       AND   sl.status_code = sta.status_code
4752       AND   sl.lead_rank_id = rk.rank_id(+);
4753 BEGIN
4754     -- give sales_lead_id only for Oracle internal
4755     l_sales_lead_rec.sales_lead_id := p_sales_lead_id;
4756 
4757     AS_LEAD_ROUTING_WF_CUHK.Get_Owner_Pre(
4758         p_api_version_number    =>  2.0,
4759         p_init_msg_list         =>  FND_API.G_FALSE,
4760         p_validation_level      =>  FND_API.G_VALID_LEVEL_FULL,
4761         p_commit                =>  FND_API.G_FALSE,
4762         p_resource_id_tbl       =>  l_resource_id_tbl,
4763         p_group_id_tbl          =>  l_group_id_tbl,
4764         p_person_id_tbl         =>  l_person_id_tbl,
4765         p_resource_flag_tbl     =>  l_resource_flag_tbl,
4766         p_sales_lead_rec        =>  l_sales_lead_rec,
4767         x_resource_id           =>  l_resource_id,
4768         x_group_id              =>  l_group_id,
4769         x_person_id             =>  l_person_id,
4770         x_return_status         =>  x_return_status,
4771         x_msg_count             =>  x_msg_count,
4772         x_msg_data              =>  x_msg_data);
4773 
4774     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4775         RAISE FND_API.G_EXC_ERROR;
4776     END IF;
4777 
4778     IF l_resource_id IS NULL
4779     THEN
4780         -- Customer user hook return l_resource_id = NULL means that
4781         -- user decides to use default resource.
4782         Set_Default_Lead_Owner(p_sales_lead_id, p_salesgroup_id,
4783             p_request_id, x_return_status, x_msg_count, x_msg_data);
4784     ELSE
4785         -- Customer return owner, update AS_SALES_LEADS_LOG and
4786         -- AS_ACCESSES_ALL, AS_SALES_LEADS
4787         IF (AS_DEBUG_LOW_ON) THEN
4788         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4789             'res id in upd=' || l_Resource_Id);
4790         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4791             'group id in upd='||l_group_id);
4792         END IF;
4793 
4794         OPEN c_sales_lead(p_sales_lead_id);
4795         FETCH c_sales_lead INTO l_customer_id, l_address_id,
4796                                 l_reject_reason_code, l_lead_rank_id,
4797                                 l_qualified_flag, l_freeze_flag, l_status_code;
4798         CLOSE c_sales_lead;
4799 
4800 --        l_routing_status := fnd_profile.value('AS_LEAD_ROUTING_STATUS');
4801 
4802         -- Call API to create log entry
4803         AS_SALES_LEADS_LOG_PKG.Insert_Row(
4804             px_log_id                 => l_sales_lead_log_id ,
4805             p_sales_lead_id           => p_sales_lead_id,
4806             p_created_by              => fnd_global.user_id,
4807             p_creation_date           => SYSDATE,
4808             p_last_updated_by         => fnd_global.user_id,
4809             p_last_update_date        => SYSDATE,
4810             p_last_update_login       => FND_GLOBAL.CONC_LOGIN_ID,
4811             p_request_id              => FND_GLOBAL.Conc_Request_Id,
4812             p_program_application_id  => FND_GLOBAL.Prog_Appl_Id,
4813             p_program_id              => FND_GLOBAL.Conc_Program_Id,
4814             p_program_update_date     => SYSDATE,
4815             p_status_code             => l_status_code, --l_routing_status,
4816             p_assign_to_person_id     => l_person_id,
4817             p_assign_to_salesforce_id => l_resource_id,
4818             p_reject_reason_code      => l_reject_reason_code,
4819             p_assign_sales_group_id   => l_group_id,
4820             p_lead_rank_id            => l_lead_rank_id,
4821             p_qualified_flag          => l_qualified_flag,
4822             p_category                => NULL);
4823 
4824         -- Call table handler directly, not calling Update_Sales_Lead,
4825         -- in case current user doesn't have update privilege.
4826         AS_SALES_LEADS_PKG.Sales_Lead_Update_Row(
4827             p_SALES_LEAD_ID  => p_SALES_LEAD_ID,
4828             p_LAST_UPDATE_DATE  => SYSDATE,
4829             p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
4830             p_CREATION_DATE  => FND_API.G_MISS_DATE,
4831             p_CREATED_BY  => FND_API.G_MISS_NUM,
4832             p_LAST_UPDATE_LOGIN  => FND_API.G_MISS_NUM,
4833             p_REQUEST_ID  => FND_GLOBAL.Conc_Request_Id,
4834             p_PROGRAM_APPLICATION_ID  => FND_GLOBAL.Prog_Appl_Id,
4835             p_PROGRAM_ID  => FND_GLOBAL.Conc_Program_Id,
4836             p_PROGRAM_UPDATE_DATE  => SYSDATE,
4837             p_LEAD_NUMBER  => FND_API.G_MISS_CHAR,
4838             p_STATUS_CODE => FND_API.G_MISS_CHAR, --l_routing_status,
4839             p_CUSTOMER_ID  => l_CUSTOMER_ID,
4840             p_ADDRESS_ID  => l_ADDRESS_ID,
4841             p_SOURCE_PROMOTION_ID  => FND_API.G_MISS_NUM,
4842             p_INITIATING_CONTACT_ID => FND_API.G_MISS_NUM,
4843             p_ORIG_SYSTEM_REFERENCE => FND_API.G_MISS_CHAR,
4844             p_CONTACT_ROLE_CODE  => FND_API.G_MISS_CHAR,
4845             p_CHANNEL_CODE  => FND_API.G_MISS_CHAR,
4846             p_BUDGET_AMOUNT  => FND_API.G_MISS_NUM,
4847             p_CURRENCY_CODE  => FND_API.G_MISS_CHAR,
4848             p_DECISION_TIMEFRAME_CODE => FND_API.G_MISS_CHAR,
4849             p_CLOSE_REASON  => FND_API.G_MISS_CHAR,
4850             p_LEAD_RANK_ID  => FND_API.G_MISS_NUM,
4851             p_LEAD_RANK_CODE  => FND_API.G_MISS_CHAR,
4852             p_PARENT_PROJECT  => FND_API.G_MISS_CHAR,
4853             p_DESCRIPTION  => FND_API.G_MISS_CHAR,
4854             p_ATTRIBUTE_CATEGORY  => FND_API.G_MISS_CHAR,
4855             p_ATTRIBUTE1  => FND_API.G_MISS_CHAR,
4856             p_ATTRIBUTE2  => FND_API.G_MISS_CHAR,
4857             p_ATTRIBUTE3  => FND_API.G_MISS_CHAR,
4858             p_ATTRIBUTE4  => FND_API.G_MISS_CHAR,
4859             p_ATTRIBUTE5  => FND_API.G_MISS_CHAR,
4860             p_ATTRIBUTE6  => FND_API.G_MISS_CHAR,
4861             p_ATTRIBUTE7  => FND_API.G_MISS_CHAR,
4862             p_ATTRIBUTE8  => FND_API.G_MISS_CHAR,
4863             p_ATTRIBUTE9  => FND_API.G_MISS_CHAR,
4864             p_ATTRIBUTE10 => FND_API.G_MISS_CHAR,
4865             p_ATTRIBUTE11 => FND_API.G_MISS_CHAR,
4866             p_ATTRIBUTE12 => FND_API.G_MISS_CHAR,
4867             p_ATTRIBUTE13 => FND_API.G_MISS_CHAR,
4868             p_ATTRIBUTE14 => FND_API.G_MISS_CHAR,
4869             p_ATTRIBUTE15 => FND_API.G_MISS_CHAR,
4870             p_ASSIGN_TO_PERSON_ID  => l_person_id,
4871             p_ASSIGN_TO_SALESFORCE_ID => l_resource_id,
4872             p_ASSIGN_SALES_GROUP_ID => l_group_id,
4873             p_ASSIGN_DATE  => SYSDATE,
4874             p_BUDGET_STATUS_CODE  => FND_API.G_MISS_CHAR,
4875             p_ACCEPT_FLAG  => 'N',
4876             p_VEHICLE_RESPONSE_CODE => FND_API.G_MISS_CHAR,
4877             p_TOTAL_SCORE  => FND_API.G_MISS_NUM,
4878             p_SCORECARD_ID  => FND_API.G_MISS_NUM,
4879             p_KEEP_FLAG  => FND_API.G_MISS_CHAR,
4880             p_URGENT_FLAG  => FND_API.G_MISS_CHAR,
4881             p_IMPORT_FLAG  => FND_API.G_MISS_CHAR,
4882             p_REJECT_REASON_CODE  => NULL, --l_reject_reason_code,
4883             p_DELETED_FLAG => FND_API.G_MISS_CHAR,
4884             p_OFFER_ID  =>  FND_API.G_MISS_NUM,
4885             p_QUALIFIED_FLAG => l_qualified_flag,
4886             p_ORIG_SYSTEM_CODE => FND_API.G_MISS_CHAR,
4887             -- p_SECURITY_GROUP_ID    => FND_API.G_MISS_NUM,
4888             p_INC_PARTNER_PARTY_ID => FND_API.G_MISS_NUM,
4889             p_INC_PARTNER_RESOURCE_ID => FND_API.G_MISS_NUM,
4890             p_PRM_EXEC_SPONSOR_FLAG   => FND_API.G_MISS_CHAR,
4891             p_PRM_PRJ_LEAD_IN_PLACE_FLAG => FND_API.G_MISS_CHAR,
4892             p_PRM_SALES_LEAD_TYPE     => FND_API.G_MISS_CHAR,
4893             p_PRM_IND_CLASSIFICATION_CODE => FND_API.G_MISS_CHAR,
4894             p_PRM_ASSIGNMENT_TYPE => FND_API.G_MISS_CHAR,
4895             p_AUTO_ASSIGNMENT_TYPE => FND_API.G_MISS_CHAR,
4896             p_PRIMARY_CONTACT_PARTY_ID => FND_API.G_MISS_NUM,
4897             p_PRIMARY_CNT_PERSON_PARTY_ID => FND_API.G_MISS_NUM,
4898             p_PRIMARY_CONTACT_PHONE_ID => FND_API.G_MISS_NUM,
4899             p_REFERRED_BY => FND_API.G_MISS_NUM,
4900             p_REFERRAL_TYPE => FND_API.G_MISS_CHAR,
4901             p_REFERRAL_STATUS => FND_API.G_MISS_CHAR,
4902             p_REF_DECLINE_REASON => FND_API.G_MISS_CHAR,
4903             p_REF_COMM_LTR_STATUS => FND_API.G_MISS_CHAR,
4904             p_REF_ORDER_NUMBER => FND_API.G_MISS_NUM,
4905             p_REF_ORDER_AMT => FND_API.G_MISS_NUM,
4906             p_REF_COMM_AMT => FND_API.G_MISS_NUM,
4907             -- bug No.2341515, 2368075
4908             p_LEAD_DATE =>  FND_API.G_MISS_DATE,
4909             p_SOURCE_SYSTEM => FND_API.G_MISS_CHAR,
4910             p_COUNTRY => FND_API.G_MISS_CHAR,
4911             p_TOTAL_AMOUNT => FND_API.G_MISS_NUM,
4912             p_EXPIRATION_DATE => FND_API.G_MISS_DATE,
4913             p_LEAD_RANK_IND => FND_API.G_MISS_CHAR,
4914             p_LEAD_ENGINE_RUN_DATE => FND_API.G_MISS_DATE,
4915             p_CURRENT_REROUTES => FND_API.G_MISS_NUM,
4916             p_STATUS_OPEN_FLAG => FND_API.G_MISS_CHAR,
4917             p_LEAD_RANK_SCORE => FND_API.G_MISS_NUM,
4918             -- 11.5.10 new columns
4919             p_MARKETING_SCORE => FND_API.G_MISS_NUM,
4920             p_INTERACTION_SCORE => FND_API.G_MISS_NUM,
4921             p_SOURCE_PRIMARY_REFERENCE => FND_API.G_MISS_CHAR,
4922             p_SOURCE_SECONDARY_REFERENCE => FND_API.G_MISS_CHAR,
4923             p_SALES_METHODOLOGY_ID => FND_API.G_MISS_NUM,
4924             p_SALES_STAGE_ID => FND_API.G_MISS_NUM);
4925 
4926 
4927         l_access_exist_flag := 'N';
4928         OPEN c_access_exist(p_sales_lead_id, l_resource_id, l_group_id);
4929         FETCH c_access_exist INTO l_access_exist_flag;
4930         CLOSE c_access_exist;
4931 
4932         IF l_reject_reason_code IS NOT NULL
4933         THEN
4934             -- Clear any owner for as_accesses_all
4935             -- If reject reason_code IS NULL, this workflow process must come
4936             -- from lead owner is null, owner in as_accesses_all is cleared
4937             -- already.
4938             UPDATE as_accesses_all
4939             SET owner_flag = 'N'
4940             WHERE sales_lead_id = p_sales_lead_id;
4941         END IF;
4942 
4943         IF l_access_exist_flag = 'Y'
4944         THEN
4945             UPDATE as_accesses_all
4946             SET team_leader_flag = 'Y',
4947                 owner_flag = 'Y',
4948                 freeze_flag = l_freeze_flag,
4949                 created_by_tap_flag = 'Y'
4950             WHERE sales_lead_id = p_sales_lead_id
4951             AND   salesforce_id = l_resource_id
4952             AND ((sales_group_id = l_group_id) OR
4953                  (sales_group_id IS NULL AND l_group_id IS NULL));
4954         ELSE
4955             OPEN c_get_open_status_flag(p_sales_lead_id);
4956             FETCH c_get_open_status_flag INTO l_open_status_flag,
4957                 l_lead_rank_score, l_creation_date;
4958             CLOSE c_get_open_status_flag;
4959 
4960             INSERT INTO as_accesses_all
4961                 (ACCESS_ID, LAST_UPDATE_DATE, LAST_UPDATED_BY
4962                 ,CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN
4963                 ,PROGRAM_APPLICATION_ID, PROGRAM_UPDATE_DATE
4964                 ,ACCESS_TYPE, FREEZE_FLAG, REASSIGN_FLAG, TEAM_LEADER_FLAG
4965                 ,OWNER_FLAG, CREATED_BY_TAP_FLAG
4966                 ,CUSTOMER_ID, ADDRESS_ID, SALES_LEAD_ID, SALESFORCE_ID
4967                 ,PERSON_ID, SALES_GROUP_ID, OPEN_FLAG, LEAD_RANK_SCORE
4968                 ,OBJECT_CREATION_DATE)
4969             SELECT as_accesses_s.nextval, SYSDATE, FND_GLOBAL.USER_ID,
4970                 SYSDATE, FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID,
4971                 FND_GLOBAL.PROG_APPL_ID, SYSDATE, 'X',
4972                 l_freeze_flag ,'N', 'Y', 'Y', 'N',
4973                 l_customer_id, l_address_id, p_sales_lead_id,
4974                 l_resource_id, l_person_id, l_group_id, l_open_status_flag,
4975                 l_lead_rank_score, l_creation_date
4976             FROM SYS.DUAL;
4977 
4978         END IF; -- l_access_exist_flag = 'Y'
4979     END IF; -- l_resource_id IS NULL
4980 END Oracle_Internal_CUHK;
4981 
4982 
4983 /*-------------------------------------------------------------------------*
4984  | PRIVATE ROUTINE
4985  |   Get_Partner_Lead_Owner
4986  |
4987  | PURPOSE
4988  |   This procedure is called to get partner lead owner.
4989  |
4990  | NOTES
4991  |
4992  | HISTORY
4993  |   01/21/02   SOLIN          Created
4994  *-------------------------------------------------------------------------*/
4995 PROCEDURE Get_Partner_Lead_Owner(
4996     p_sales_lead_id          IN     NUMBER)
4997 IS
4998     CURSOR c_access_exist(c_sales_lead_id NUMBER, c_resource_id NUMBER,
4999                           c_group_id NUMBER) IS
5000       SELECT 'Y'
5001       FROM as_accesses_all
5002       WHERE sales_lead_id = c_sales_lead_id
5003       AND   salesforce_id = c_resource_id
5004       AND ((sales_group_id = c_group_id) OR
5005            (sales_group_id IS NULL AND c_group_id IS NULL));
5006 
5007     CURSOR c_sales_lead(c_sales_lead_id NUMBER) IS
5008       SELECT customer_id, address_id, reject_reason_code,
5009              lead_rank_id, qualified_flag, status_code
5010       FROM as_sales_leads
5011       WHERE sales_lead_id = c_sales_lead_id;
5012 
5013     -- A resource may not be in any group. Besides, jtf_rs_group_members
5014     -- may not have person_id for all resources. Therefore, get person_id
5015     -- in this cursor, instead of in the above cursor.
5016     CURSOR c_get_person_id(c_resource_id NUMBER) IS
5017       SELECT res.source_id
5018       FROM jtf_rs_resource_extns res
5019       WHERE res.resource_id = c_resource_id;
5020 
5021     CURSOR c_get_group_id(c_resource_id NUMBER) IS
5022       SELECT grp.group_id
5023       FROM JTF_RS_GROUP_MEMBERS mem,
5024            JTF_RS_ROLE_RELATIONS rrel,
5025            JTF_RS_ROLES_B role,
5026            JTF_RS_GROUP_USAGES u,
5027            JTF_RS_GROUPS_B grp
5028       WHERE mem.group_member_id = rrel.role_resource_id
5029       AND rrel.role_resource_type = 'RS_GROUP_MEMBER'
5030       AND rrel.role_id = role.role_id
5031       AND role.role_type_code IN ('SALES','TELESALES','FIELDSALES','PRM')
5032       AND mem.delete_flag <> 'Y'
5033       AND rrel.delete_flag <> 'Y'
5034       AND SYSDATE BETWEEN rrel.start_date_active AND
5035           NVL(rrel.end_date_active,SYSDATE)
5036       AND mem.resource_id = c_resource_id
5037       AND mem.group_id = u.group_id
5038       AND u.usage = 'SALES'
5039       AND mem.group_id = grp.group_id
5040       AND SYSDATE BETWEEN grp.start_date_active AND
5041           NVL(grp.end_date_active,SYSDATE)
5042       AND ROWNUM < 2;
5043 
5044     -- Get whether status is open or not for the lead
5045     -- Get lead_rank_score and lead creation_date
5046     CURSOR c_get_open_status_flag(c_sales_lead_id NUMBER) IS
5047       SELECT DECODE(sta.opp_open_status_flag, 'Y', 'Y', 'N', NULL),
5048              NVL(rk.min_score, 0), sl.creation_date
5049       FROM as_statuses_b sta, as_sales_leads sl, as_sales_lead_ranks_b rk
5050       WHERE sl.sales_lead_id = c_sales_lead_id
5051       AND   sl.status_code = sta.status_code
5052       AND   sl.lead_rank_id = rk.rank_id(+);
5053 
5054     l_i                    NUMBER;
5055     l_found_flag           VARCHAR2(1);
5056     l_resource_id          NUMBER;
5057     l_person_id            NUMBER;
5058     l_group_id             NUMBER;
5059     l_customer_id          NUMBER;
5060     l_address_id           NUMBER;
5061     l_access_exist_flag    VARCHAR2(1);
5062 --    l_routing_status       VARCHAR2(30);
5063     l_status_code          VARCHAR2(30);
5064     l_sales_lead_log_id    NUMBER;
5065     l_reject_reason_code   VARCHAR2(30);
5066     l_lead_rank_id         NUMBER;
5067     l_qualified_flag       VARCHAR2(1);
5068     l_open_status_flag     VARCHAR2(1);
5069     l_lead_rank_score      NUMBER;
5070     l_creation_date        DATE;
5071 BEGIN
5072     IF (AS_DEBUG_LOW_ON) THEN
5073     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5074         'Get_Partner_Lead_Owner');
5075     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5076         'g_i_count=' || g_i_count);
5077     END IF;
5078     l_found_flag := 'N';
5079     IF g_i_count > 0
5080     THEN
5081         l_i := g_i_resource_id.first;
5082         WHILE l_i <= g_i_resource_id.last AND l_found_flag = 'N'
5083         LOOP
5084             IF g_i_owner_flag(l_i) = 'Y'
5085             THEN
5086                 l_found_flag := 'Y';
5087                 EXIT;
5088             END IF;
5089             l_i := l_i + 1;
5090         END LOOP;
5091     END IF;
5092 
5093     IF (AS_DEBUG_LOW_ON) THEN
5094     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5095         'Owner found?' || l_found_flag);
5096     END IF;
5097     IF l_found_flag = 'Y'
5098     THEN
5099         l_resource_id := g_i_resource_id(l_i);
5100         l_group_id := g_i_group_id(l_i);
5101     ELSE
5102         -- no owner found, get owner from profile
5103         l_resource_id := fnd_profile.value('AS_DEFAULT_CM_FOR_LEAD');
5104 
5105         IF (AS_DEBUG_LOW_ON) THEN
5106         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5107             'AS_DEFAULT_CM=' || l_resource_id);
5108         END IF;
5109         IF l_resource_id IS NULL
5110         THEN
5111             IF (AS_DEBUG_ERROR_ON) THEN
5112             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5113                 'AS_NO_DEFAULT_CM');
5114             END IF;
5115             RAISE FND_API.G_EXC_ERROR;
5116         END IF;
5117 
5118         OPEN c_get_group_id(l_resource_id);
5119         FETCH c_get_group_id INTO l_group_id;
5120         CLOSE c_get_group_id;
5121     END IF;
5122 
5123     OPEN c_get_person_id(l_resource_id);
5124     FETCH c_get_person_id INTO l_person_id;
5125     CLOSE c_get_person_id;
5126 
5127     IF (AS_DEBUG_LOW_ON) THEN
5128     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5129         'Owner sf_id=' || l_resource_id || ',g=' || l_group_id);
5130     END IF;
5131     OPEN c_sales_lead(p_sales_lead_id);
5132     FETCH c_sales_lead INTO l_customer_id, l_address_id,
5133                             l_reject_reason_code, l_lead_rank_id,
5134                             l_qualified_flag, l_status_code;
5135     CLOSE c_sales_lead;
5136 
5137 --    l_routing_status := fnd_profile.value('AS_LEAD_ROUTING_STATUS');
5138 
5139     -- Call API to create log entry
5140     AS_SALES_LEADS_LOG_PKG.Insert_Row(
5141             px_log_id                 => l_sales_lead_log_id ,
5142             p_sales_lead_id           => p_sales_lead_id,
5143             p_created_by              => fnd_global.user_id,
5144             p_creation_date           => SYSDATE,
5145             p_last_updated_by         => fnd_global.user_id,
5146             p_last_update_date        => SYSDATE,
5147             p_last_update_login       => FND_GLOBAL.CONC_LOGIN_ID,
5148             p_request_id              => FND_GLOBAL.Conc_Request_Id,
5149             p_program_application_id  => FND_GLOBAL.Prog_Appl_Id,
5150             p_program_id              => FND_GLOBAL.Conc_Program_Id,
5151             p_program_update_date     => SYSDATE,
5152             p_status_code             => l_status_code, --l_routing_status,
5153             p_assign_to_person_id     => l_person_id,
5154             p_assign_to_salesforce_id => l_resource_id,
5155             p_reject_reason_code      => l_reject_reason_code,
5156             p_assign_sales_group_id   => l_group_id,
5157             p_lead_rank_id            => l_lead_rank_id,
5158             p_qualified_flag          => l_qualified_flag,
5159             p_category                => NULL);
5160 
5161     -- Call table handler directly, not calling Update_Sales_Lead,
5162     -- in case current user doesn't have update privilege.
5163     AS_SALES_LEADS_PKG.Sales_Lead_Update_Row(
5164             p_SALES_LEAD_ID  => p_SALES_LEAD_ID,
5165             p_LAST_UPDATE_DATE  => SYSDATE,
5166             p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
5167             p_CREATION_DATE  => FND_API.G_MISS_DATE,
5168             p_CREATED_BY  => FND_API.G_MISS_NUM,
5169             p_LAST_UPDATE_LOGIN  => FND_API.G_MISS_NUM,
5170             p_REQUEST_ID  => FND_GLOBAL.Conc_Request_Id,
5171             p_PROGRAM_APPLICATION_ID  => FND_GLOBAL.Prog_Appl_Id,
5172             p_PROGRAM_ID  => FND_GLOBAL.Conc_Program_Id,
5173             p_PROGRAM_UPDATE_DATE  => SYSDATE,
5174             p_LEAD_NUMBER  => FND_API.G_MISS_CHAR,
5175             p_STATUS_CODE => FND_API.G_MISS_CHAR, --l_routing_status,
5176             p_CUSTOMER_ID  => l_CUSTOMER_ID,
5177             p_ADDRESS_ID  => l_ADDRESS_ID,
5178             p_SOURCE_PROMOTION_ID  => FND_API.G_MISS_NUM,
5179             p_INITIATING_CONTACT_ID => FND_API.G_MISS_NUM,
5180             p_ORIG_SYSTEM_REFERENCE => FND_API.G_MISS_CHAR,
5181             p_CONTACT_ROLE_CODE  => FND_API.G_MISS_CHAR,
5182             p_CHANNEL_CODE  => FND_API.G_MISS_CHAR,
5183             p_BUDGET_AMOUNT  => FND_API.G_MISS_NUM,
5184             p_CURRENCY_CODE  => FND_API.G_MISS_CHAR,
5185             p_DECISION_TIMEFRAME_CODE => FND_API.G_MISS_CHAR,
5186             p_CLOSE_REASON  => FND_API.G_MISS_CHAR,
5187             p_LEAD_RANK_ID  => FND_API.G_MISS_NUM,
5188             p_LEAD_RANK_CODE  => FND_API.G_MISS_CHAR,
5189             p_PARENT_PROJECT  => FND_API.G_MISS_CHAR,
5190             p_DESCRIPTION  => FND_API.G_MISS_CHAR,
5191             p_ATTRIBUTE_CATEGORY  => FND_API.G_MISS_CHAR,
5192             p_ATTRIBUTE1  => FND_API.G_MISS_CHAR,
5193             p_ATTRIBUTE2  => FND_API.G_MISS_CHAR,
5194             p_ATTRIBUTE3  => FND_API.G_MISS_CHAR,
5195             p_ATTRIBUTE4  => FND_API.G_MISS_CHAR,
5196             p_ATTRIBUTE5  => FND_API.G_MISS_CHAR,
5197             p_ATTRIBUTE6  => FND_API.G_MISS_CHAR,
5198             p_ATTRIBUTE7  => FND_API.G_MISS_CHAR,
5199             p_ATTRIBUTE8  => FND_API.G_MISS_CHAR,
5200             p_ATTRIBUTE9  => FND_API.G_MISS_CHAR,
5201             p_ATTRIBUTE10 => FND_API.G_MISS_CHAR,
5202             p_ATTRIBUTE11 => FND_API.G_MISS_CHAR,
5203             p_ATTRIBUTE12 => FND_API.G_MISS_CHAR,
5204             p_ATTRIBUTE13 => FND_API.G_MISS_CHAR,
5205             p_ATTRIBUTE14 => FND_API.G_MISS_CHAR,
5206             p_ATTRIBUTE15 => FND_API.G_MISS_CHAR,
5207             p_ASSIGN_TO_PERSON_ID  => l_person_id,
5208             p_ASSIGN_TO_SALESFORCE_ID => l_resource_id,
5209             p_ASSIGN_SALES_GROUP_ID => l_group_id,
5210             p_ASSIGN_DATE  => SYSDATE,
5211             p_BUDGET_STATUS_CODE  => FND_API.G_MISS_CHAR,
5212             p_ACCEPT_FLAG  => 'N',
5213             p_VEHICLE_RESPONSE_CODE => FND_API.G_MISS_CHAR,
5214             p_TOTAL_SCORE  => FND_API.G_MISS_NUM,
5215             p_SCORECARD_ID  => FND_API.G_MISS_NUM,
5216             p_KEEP_FLAG  => FND_API.G_MISS_CHAR,
5217             p_URGENT_FLAG  => FND_API.G_MISS_CHAR,
5218             p_IMPORT_FLAG  => FND_API.G_MISS_CHAR,
5219             p_REJECT_REASON_CODE  => NULL, --l_reject_reason_code,
5220             p_DELETED_FLAG => FND_API.G_MISS_CHAR,
5221             p_OFFER_ID  =>  FND_API.G_MISS_NUM,
5222             p_QUALIFIED_FLAG => l_qualified_flag,
5223             p_ORIG_SYSTEM_CODE => FND_API.G_MISS_CHAR,
5224             -- p_SECURITY_GROUP_ID    => FND_API.G_MISS_NUM,
5225             p_INC_PARTNER_PARTY_ID => FND_API.G_MISS_NUM,
5226             p_INC_PARTNER_RESOURCE_ID => FND_API.G_MISS_NUM,
5227             p_PRM_EXEC_SPONSOR_FLAG   => FND_API.G_MISS_CHAR,
5228             p_PRM_PRJ_LEAD_IN_PLACE_FLAG => FND_API.G_MISS_CHAR,
5229             p_PRM_SALES_LEAD_TYPE     => FND_API.G_MISS_CHAR,
5230             p_PRM_IND_CLASSIFICATION_CODE => FND_API.G_MISS_CHAR,
5231             p_PRM_ASSIGNMENT_TYPE => FND_API.G_MISS_CHAR,
5232             p_AUTO_ASSIGNMENT_TYPE => FND_API.G_MISS_CHAR,
5233             p_PRIMARY_CONTACT_PARTY_ID => FND_API.G_MISS_NUM,
5234             p_PRIMARY_CNT_PERSON_PARTY_ID => FND_API.G_MISS_NUM,
5235             p_PRIMARY_CONTACT_PHONE_ID => FND_API.G_MISS_NUM,
5236             p_REFERRED_BY => FND_API.G_MISS_NUM,
5237             p_REFERRAL_TYPE => FND_API.G_MISS_CHAR,
5238             p_REFERRAL_STATUS => FND_API.G_MISS_CHAR,
5239             p_REF_DECLINE_REASON => FND_API.G_MISS_CHAR,
5240             p_REF_COMM_LTR_STATUS => FND_API.G_MISS_CHAR,
5241             p_REF_ORDER_NUMBER => FND_API.G_MISS_NUM,
5242             p_REF_ORDER_AMT => FND_API.G_MISS_NUM,
5243             p_REF_COMM_AMT => FND_API.G_MISS_NUM,
5244             -- bug No.2341515, 2368075
5245             p_LEAD_DATE =>  FND_API.G_MISS_DATE,
5246             p_SOURCE_SYSTEM => FND_API.G_MISS_CHAR,
5247             p_COUNTRY => FND_API.G_MISS_CHAR,
5248             p_TOTAL_AMOUNT => FND_API.G_MISS_NUM,
5249             p_EXPIRATION_DATE => FND_API.G_MISS_DATE,
5250             p_LEAD_RANK_IND => FND_API.G_MISS_CHAR,
5251             p_LEAD_ENGINE_RUN_DATE => FND_API.G_MISS_DATE,
5252             p_CURRENT_REROUTES => FND_API.G_MISS_NUM,
5253             p_STATUS_OPEN_FLAG => FND_API.G_MISS_CHAR,
5254             p_LEAD_RANK_SCORE => FND_API.G_MISS_NUM,
5255             -- 11.5.10 new columns
5256             p_MARKETING_SCORE => FND_API.G_MISS_NUM,
5257             p_INTERACTION_SCORE => FND_API.G_MISS_NUM,
5258             p_SOURCE_PRIMARY_REFERENCE => FND_API.G_MISS_CHAR,
5259             p_SOURCE_SECONDARY_REFERENCE => FND_API.G_MISS_CHAR,
5260             p_SALES_METHODOLOGY_ID => FND_API.G_MISS_NUM,
5261             p_SALES_STAGE_ID => FND_API.G_MISS_NUM);
5262 
5263     l_access_exist_flag := 'N';
5264     OPEN c_access_exist(p_sales_lead_id, l_resource_id, l_group_id);
5265     FETCH c_access_exist INTO l_access_exist_flag;
5266     CLOSE c_access_exist;
5267 
5268     IF l_reject_reason_code IS NOT NULL
5269     THEN
5270         -- Clear any owner for as_accesses_all
5271         -- If reject reason_code IS NULL, this workflow process must come
5272         -- from lead owner is null, owner in as_accesses_all is cleared
5273         -- already.
5274         UPDATE as_accesses_all
5275         SET owner_flag = 'N'
5276         WHERE sales_lead_id = p_sales_lead_id;
5277     END IF;
5278 
5279     -- If referral_type IS NOT NULL, owner has freeze_flag = 'Y' always.
5280     -- Otherwise, owner's freeze_flag is the same as as_sales_leads.accept_flag
5281     IF l_access_exist_flag = 'Y'
5282     THEN
5283         UPDATE as_accesses_all
5284         SET team_leader_flag = 'Y',
5285             owner_flag = 'Y'
5286 --            created_by_tap_flag = 'Y'
5287         WHERE sales_lead_id = p_sales_lead_id
5288         AND   salesforce_id = l_resource_id
5289         AND ((sales_group_id = l_group_id) OR
5290              (sales_group_id IS NULL AND l_group_id IS NULL));
5291     ELSE
5292         OPEN c_get_open_status_flag(p_sales_lead_id);
5293         FETCH c_get_open_status_flag INTO l_open_status_flag,
5294             l_lead_rank_score, l_creation_date;
5295         CLOSE c_get_open_status_flag;
5296 
5297         INSERT INTO as_accesses_all
5298             (ACCESS_ID, LAST_UPDATE_DATE, LAST_UPDATED_BY
5299             ,CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN
5300             ,PROGRAM_APPLICATION_ID, PROGRAM_UPDATE_DATE
5301             ,ACCESS_TYPE, FREEZE_FLAG, REASSIGN_FLAG, TEAM_LEADER_FLAG
5302             ,OWNER_FLAG, CREATED_BY_TAP_FLAG
5303             ,CUSTOMER_ID, ADDRESS_ID, SALES_LEAD_ID, SALESFORCE_ID
5304             ,PERSON_ID, SALES_GROUP_ID, OPEN_FLAG, LEAD_RANK_SCORE
5305             ,OBJECT_CREATION_DATE)
5306         SELECT as_accesses_s.nextval, SYSDATE, FND_GLOBAL.USER_ID,
5307             SYSDATE, FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID,
5308             FND_GLOBAL.PROG_APPL_ID, SYSDATE, 'X',
5309             'Y' ,'N', 'Y', 'Y', 'N',
5310             l_customer_id, l_address_id, p_sales_lead_id,
5311             l_resource_id, l_person_id, l_group_id, l_open_status_flag,
5312             l_lead_rank_score, l_creation_date
5313         FROM SYS.DUAL;
5314     END IF; -- l_access_exist_flag = 'Y'
5315 
5316 END Get_Partner_Lead_Owner;
5317 
5318 PROCEDURE Get_Alternate_Resource(
5319   p_salesgroup_id    IN  NUMBER) IS
5320     l_rs_id     NUMBER := NULL;
5321 
5322     CURSOR C_get_current_resource IS
5323       SELECT res.resource_id
5324       FROM jtf_rs_resource_extns res
5325       WHERE res.category = 'EMPLOYEE'
5326       AND res.user_id = fnd_global.user_id;
5327 
5328     CURSOR c_get_group_id(c_resource_id NUMBER) IS
5329       SELECT grp.group_id
5330       FROM JTF_RS_GROUP_MEMBERS mem,
5331            JTF_RS_ROLE_RELATIONS rrel,
5332            JTF_RS_ROLES_B role,
5333            JTF_RS_GROUP_USAGES u,
5334            JTF_RS_GROUPS_B grp
5335       WHERE mem.group_member_id = rrel.role_resource_id
5336       AND rrel.role_resource_type = 'RS_GROUP_MEMBER'
5337       AND rrel.role_id = role.role_id
5338       AND role.role_type_code IN ('SALES','TELESALES','FIELDSALES','PRM')
5339       AND mem.delete_flag <> 'Y'
5340       AND rrel.delete_flag <> 'Y'
5341       AND SYSDATE BETWEEN rrel.start_date_active AND
5342           NVL(rrel.end_date_active,SYSDATE)
5343       AND mem.resource_id = c_resource_id
5344       AND mem.group_id = u.group_id
5345       AND u.usage = 'SALES'
5346       AND mem.group_id = grp.group_id
5347       AND SYSDATE BETWEEN grp.start_date_active AND
5348           NVL(grp.end_date_active,SYSDATE)
5349       AND ROWNUM < 2;
5350 
5351     -- A resource may not be in any group. Besides, jtf_rs_group_members
5352     -- may not have person_id for all resources. Therefore, get person_id
5353     -- in this cursor, instead of in the above cursor.
5354     CURSOR c_get_person_id(c_resource_id NUMBER) IS
5355       SELECT res.source_id
5356       FROM jtf_rs_resource_extns res
5357       WHERE res.resource_id = c_resource_id;
5358 
5359 BEGIN
5360     l_rs_id := fnd_profile.value('AS_DEFAULT_RESOURCE_ID');
5361     IF l_rs_id IS NULL
5362     THEN
5363         IF (AS_DEBUG_LOW_ON) THEN
5364             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5365                 'profile not set');
5366         END IF;
5367         -- Profile is not set. hence going against the logged in user
5368 
5369         OPEN C_get_current_resource;
5370         FETCH C_get_current_resource INTO l_rs_id;
5371         IF (C_get_current_resource%NOTFOUND)
5372         THEN
5373             IF (AS_DEBUG_LOW_ON) THEN
5374             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5375                 'No resource found for login user!');
5376             END IF;
5377             CLOSE C_get_current_resource;
5378             RETURN;
5379         END IF;
5380         CLOSE C_get_current_resource;
5381 
5382         IF l_rs_id IS NOT NULL
5383         THEN
5384             IF (AS_DEBUG_LOW_ON) THEN
5385             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5386                 'User''s resource id is:' || l_rs_id);
5387             END IF;
5388             IF p_salesgroup_id = fnd_api.g_miss_num
5389             THEN
5390                 g_group_id_tbl(1) := NULL;
5391                 OPEN c_get_group_id (l_rs_id);
5392                 FETCH c_get_group_id INTO g_group_id_tbl(1);
5393                 CLOSE c_get_group_id;
5394             ELSE
5395                 g_group_id_tbl(1) := p_salesgroup_id;
5396             END IF;
5397 
5398             OPEN c_get_person_id (l_rs_id);
5399             FETCH c_get_person_id INTO g_person_id_tbl(1);
5400             CLOSE c_get_person_id;
5401             IF (AS_DEBUG_LOW_ON) THEN
5402             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5403                 'Users group id is:' || g_group_id_tbl(1));
5404             END IF;
5405             g_resource_id_tbl(1) := l_rs_id;
5406             g_resource_flag_tbl(1) := 'L';
5407         END IF;
5408 
5409     ELSE -- profile resource id is not null
5410         IF (AS_DEBUG_LOW_ON) THEN
5411         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5412             'Profile resource id :'|| l_rs_id);
5413         END IF;
5414         g_group_id_tbl(1) := NULL;
5415         OPEN c_get_group_id (l_rs_id);
5416         FETCH c_get_group_id INTO g_group_id_tbl(1);
5417         CLOSE c_get_group_id;
5418         OPEN c_get_person_id (l_rs_id);
5419         FETCH c_get_person_id INTO g_person_id_tbl(1);
5420         CLOSE c_get_person_id;
5421         IF (AS_DEBUG_LOW_ON) THEN
5422         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5423             'Profile group id :' || g_group_id_tbl(1));
5424         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5425             'Profile person id :' || g_person_id_tbl(1));
5426         END IF;
5427         g_resource_id_tbl(1) := l_rs_id;
5428         g_resource_flag_tbl(1) := 'D';
5429 
5430         OPEN C_get_current_resource;
5431         FETCH C_get_current_resource INTO l_rs_id;
5432         IF (C_get_current_resource%NOTFOUND)
5433         THEN
5434             CLOSE C_get_current_resource;
5435             -- result := 'COMPLETE:ERROR';
5436             IF (AS_DEBUG_LOW_ON) THEN
5437             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5438                 'No resource found!');
5439             END IF;
5440             RETURN;
5441         END IF;
5442         CLOSE C_get_current_resource;
5443 
5444         IF l_rs_id IS NOT NULL AND
5445            l_rs_id <> g_resource_id_tbl(1)
5446         THEN
5447             IF (AS_DEBUG_LOW_ON) THEN
5448             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5449                 'User''s resource id is:' || l_rs_id);
5450             END IF;
5451             IF p_salesgroup_id = fnd_api.g_miss_num
5452             THEN
5453                 g_group_id_tbl(2) := NULL;
5454                 OPEN c_get_group_id (l_rs_id);
5455                 FETCH c_get_group_id INTO g_group_id_tbl(2);
5456                 CLOSE c_get_group_id;
5457             ELSE
5458                 g_group_id_tbl(2) := p_salesgroup_id;
5459             END IF;
5460 
5461             OPEN c_get_person_id (l_rs_id);
5462             FETCH c_get_person_id INTO g_person_id_tbl(2);
5463             CLOSE c_get_person_id;
5464             IF (AS_DEBUG_LOW_ON) THEN
5465             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5466                 'Users group id is:' || g_group_id_tbl(2));
5467             END IF;
5468             g_resource_id_tbl(2) := l_rs_id;
5469             g_resource_flag_tbl(2) := 'L';
5470         END IF;
5471     END IF; -- resource id from profile check
5472 
5473 END Get_Alternate_Resource;
5474 
5475 PROCEDURE Get_Available_Resource (
5476     p_sales_lead_id   IN  NUMBER,
5477     p_salesgroup_id   IN  NUMBER,
5478     x_return_status   OUT NOCOPY VARCHAR2,
5479     x_msg_count       OUT NOCOPY NUMBER,
5480     x_msg_data        OUT NOCOPY VARCHAR2)
5481 IS
5482   l_sales_lead_id         NUMBER;
5483   l_resource_id_tbl       AS_LEAD_ROUTING_WF.NUMBER_TABLE;
5484   l_group_id_tbl          AS_LEAD_ROUTING_WF.NUMBER_TABLE;
5485   l_person_id_tbl         AS_LEAD_ROUTING_WF.NUMBER_TABLE;
5486   l_resource_flag_tbl     AS_LEAD_ROUTING_WF.FLAG_TABLE;
5487   l_check_calendar        VARCHAR2(1);
5488   l_index1                NUMBER; -- point to l_resource_id_tbl
5489   l_index2                NUMBER; -- point to g_resource_id_tbl
5490   l_last                  NUMBER; -- total number of rec in l_resource_id_tbl
5491   l_planned_start_date    DATE;
5492   l_planned_end_date      DATE;
5493   l_shift_construct_id    NUMBER;
5494   l_availability_type     VARCHAR2(60);
5495 
5496   -- SOLIN, enhancement for 11.5.9, 11/08/2002
5497   -- Leads re-route must not be routed back to a resource that has previously
5498   -- owned the lead before.
5499   CURSOR c_get_lead_resource(c_sales_lead_id NUMBER) IS
5500     SELECT ACC.SALESFORCE_ID, ACC.SALES_GROUP_ID, ACC.PERSON_ID, 'T'
5501     FROM AS_ACCESSES_ALL ACC
5502     WHERE ACC.SALES_LEAD_ID = c_sales_lead_id
5503     AND ACC.CREATED_BY_TAP_FLAG = 'Y'
5504     AND NOT EXISTS (
5505         SELECT 1
5506         FROM AS_SALES_LEADS_LOG LOG
5507         WHERE LOG.SALES_LEAD_ID = c_sales_lead_id
5508         AND   LOG.ASSIGN_TO_SALESFORCE_ID = ACC.SALESFORCE_ID
5509         AND  (LOG.ASSIGN_SALES_GROUP_ID = ACC.SALES_GROUP_ID
5510           OR  LOG.ASSIGN_SALES_GROUP_ID IS NULL AND ACC.SALES_GROUP_ID IS NULL))
5511     ORDER BY ACC.ACCESS_ID;
5512 BEGIN
5513     IF (AS_DEBUG_LOW_ON) THEN
5514         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5515             'Get_Available_Resource: Start');
5516     END IF;
5517 
5518     x_return_status := FND_API.G_RET_STS_SUCCESS;
5519 
5520     -- Get sales team for the sales lead
5521     OPEN c_get_lead_resource(p_sales_lead_id);
5522     FETCH c_get_lead_resource BULK COLLECT INTO
5523         l_resource_id_tbl, l_group_id_tbl, l_person_id_tbl,
5524         l_resource_flag_tbl;
5525     CLOSE c_get_lead_resource;
5526 
5527     l_check_calendar :=
5528         NVL(FND_PROFILE.Value('AS_SL_ASSIGN_CALENDAR_REQ'),'N');
5529     IF (AS_DEBUG_LOW_ON) THEN
5530         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5531             'l_resource_id_tbl.count=' || l_resource_id_tbl.count);
5532         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5533             'Check calendar?' || l_check_calendar);
5534     END IF;
5535 
5536     g_resource_id_tbl.delete;
5537     l_last := l_resource_id_tbl.last;
5538     IF l_check_calendar = 'Y' AND l_last > 0
5539     THEN
5540         l_index1 := 1;
5541         l_index2 := 0;
5542         WHILE l_index1 <= l_last
5543         LOOP
5544             IF (AS_DEBUG_LOW_ON) THEN
5545                 AS_UTILITY_PVT.Debug_Message(
5546                     FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5547                     'Check resource ' || l_resource_id_tbl(l_index1));
5548             END IF;
5549             -- Check the calendar for resource availability
5550             -- Call Calendar API
5551             JTF_CALENDAR_PUB.GET_AVAILABLE_SLOT(
5552                 P_API_VERSION        => 1.0,
5553                 P_INIT_MSG_LIST      => FND_API.G_FALSE,
5554                 P_RESOURCE_ID        => l_resource_id_tbl(l_index1),
5555                 P_RESOURCE_TYPE      => 'RS_EMPLOYEE',
5556                 P_START_DATE_TIME    => SYSDATE-1,
5557                 P_END_DATE_TIME      => SYSDATE+1,
5558                 P_DURATION           => 8,
5559                 X_RETURN_STATUS      => x_return_status,
5560                 X_MSG_COUNT          => x_msg_count,
5561                 X_MSG_DATA           => x_msg_data,
5562                 X_SLOT_START_DATE    => l_planned_start_date,
5563                 X_SLOT_END_DATE      => l_planned_end_date,
5564                 X_SHIFT_CONSTRUCT_ID => l_shift_construct_id,
5565                 X_AVAILABILITY_TYPE  => l_availability_type);
5566 
5567             IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5568                 RAISE fnd_api.g_exc_error;
5569             ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5570                 RAISE fnd_api.g_exc_unexpected_error;
5571             END IF;
5572 
5573             IF (AS_DEBUG_LOW_ON) THEN
5574                 AS_UTILITY_PVT.Debug_Message(
5575                     FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5576                     'l_shift_construct_id=' || l_shift_construct_id);
5577             END IF;
5578             IF l_shift_construct_id IS NOT NULL
5579             THEN
5580                 l_index2 := l_index2 + 1;
5581                 g_resource_id_tbl(l_index2) := l_resource_id_tbl(l_index1);
5582                 g_group_id_tbl(l_index2) := l_group_id_tbl(l_index1);
5583                 g_person_id_tbl(l_index2) := l_person_id_tbl(l_index1);
5584                 g_resource_flag_tbl(l_index2) :=
5585                     l_resource_flag_tbl(l_index1);
5586             END IF;
5587             l_index1 := l_index1 + 1;
5588         END LOOP; -- l_index1 <= l_last
5589     ELSE
5590         g_resource_id_tbl := l_resource_id_tbl;
5591         g_group_id_tbl := l_group_id_tbl;
5592         g_person_id_tbl := l_person_id_tbl;
5593         g_resource_flag_tbl := l_resource_flag_tbl;
5594     END IF; -- l_check_calendar = 'Y' AND l_last > 0
5595 
5596     IF (AS_DEBUG_LOW_ON) THEN
5597         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5598             'g_resource_id_tbl.count=' || g_resource_id_tbl.count);
5599         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5600             'Get_Available_Resource: End');
5601     END IF;
5602 
5603 EXCEPTION
5604     WHEN OTHERS THEN
5605         IF (AS_DEBUG_LOW_ON) THEN
5606             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5607                 'SQLCODE:' || SQLCODE || ' SQLERRM: ' || SQLERRM);
5608         END IF;
5609 END Get_Available_Resource;
5610 
5611 
5612 PROCEDURE Get_Owner(
5613     p_sales_lead_id      IN  NUMBER,
5614     p_salesgroup_id      IN  NUMBER,
5615     x_resource_id        OUT NOCOPY NUMBER,
5616     x_group_id           OUT NOCOPY NUMBER,
5617     x_person_id          OUT NOCOPY NUMBER,
5618     x_return_status      OUT NOCOPY VARCHAR2,
5619     x_msg_count          OUT NOCOPY NUMBER,
5620     x_msg_data           OUT NOCOPY VARCHAR2)
5621 IS
5622   l_rs_id                 NUMBER := null;
5623 
5624   l_call_user_hook        BOOLEAN;
5625   l_sales_lead_rec        AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type;
5626   l_org_owner_id_tbl      NUMBER_TABLE;
5627   l_i                     NUMBER;
5628 
5629   l_resource_id           NUMBER;
5630   l_group_id              NUMBER;
5631   l_person_id             NUMBER;
5632   l_resource_avail_flag   VARCHAR2(1);
5633 
5634   CURSOR c_get_sales_lead(c_sales_lead_id NUMBER) IS
5635     SELECT SALES_LEAD_ID, LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE,
5636            CREATED_BY, LAST_UPDATE_LOGIN, REQUEST_ID, PROGRAM_APPLICATION_ID,
5637            PROGRAM_ID, PROGRAM_UPDATE_DATE, LEAD_NUMBER, STATUS_CODE,
5638            CUSTOMER_ID, ADDRESS_ID, SOURCE_PROMOTION_ID, INITIATING_CONTACT_ID,
5639            ORIG_SYSTEM_REFERENCE, CONTACT_ROLE_CODE, CHANNEL_CODE,
5640            BUDGET_AMOUNT, CURRENCY_CODE, DECISION_TIMEFRAME_CODE,
5641            CLOSE_REASON, LEAD_RANK_ID, LEAD_RANK_CODE, PARENT_PROJECT,
5642            DESCRIPTION, ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2,
5643            ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7,
5644            ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12,
5645            ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15, BUDGET_STATUS_CODE,
5646            ACCEPT_FLAG, VEHICLE_RESPONSE_CODE, TOTAL_SCORE, SCORECARD_ID,
5647            KEEP_FLAG, URGENT_FLAG, IMPORT_FLAG, REJECT_REASON_CODE,
5648            DELETED_FLAG, OFFER_ID, INCUMBENT_PARTNER_PARTY_ID,
5649            INCUMBENT_PARTNER_RESOURCE_ID, PRM_EXEC_SPONSOR_FLAG,
5650            PRM_PRJ_LEAD_IN_PLACE_FLAG, PRM_SALES_LEAD_TYPE,
5651            PRM_IND_CLASSIFICATION_CODE, QUALIFIED_FLAG, ORIG_SYSTEM_CODE,
5652            PRM_ASSIGNMENT_TYPE, AUTO_ASSIGNMENT_TYPE, PRIMARY_CONTACT_PARTY_ID,
5653            PRIMARY_CNT_PERSON_PARTY_ID, PRIMARY_CONTACT_PHONE_ID,
5654            REFERRED_BY, REFERRAL_TYPE, REFERRAL_STATUS, REF_DECLINE_REASON,
5655            REF_COMM_LTR_STATUS, REF_ORDER_NUMBER, REF_ORDER_AMT,
5656            REF_COMM_AMT, LEAD_DATE, SOURCE_SYSTEM, COUNTRY,
5657            TOTAL_AMOUNT, EXPIRATION_DATE, LEAD_ENGINE_RUN_DATE, LEAD_RANK_IND,
5658            CURRENT_REROUTES
5659     FROM AS_SALES_LEADS
5660     WHERE SALES_LEAD_ID = c_sales_lead_id;
5661 
5662   CURSOR c_get_resource_avail(c_sales_lead_id NUMBER) IS
5663     SELECT 'Y'
5664     FROM AS_ACCESSES_ALL ACC
5665     WHERE ACC.SALES_LEAD_ID = c_sales_lead_id
5666     AND ACC.CREATED_BY_TAP_FLAG = 'Y';
5667 BEGIN
5668     IF (AS_DEBUG_LOW_ON) THEN
5669         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5670             'Get_Owner: Start');
5671     END IF;
5672 
5673     x_return_status := FND_API.G_RET_STS_SUCCESS;
5674     IF g_resource_id_tbl.count = 0
5675     THEN
5676         Get_Alternate_Resource(p_salesgroup_id);
5677     END IF;
5678 
5679     l_call_user_hook := JTF_USR_HKS.Ok_to_execute('AS_LEAD_ROUTING_WF',
5680                         'GetOwner','B','C');
5681 
5682     -- USER HOOK standard : customer pre-processing section - mandatory
5683     IF l_call_user_hook
5684     THEN
5685         IF (AS_DEBUG_LOW_ON) THEN
5686             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5687                 'Call user_hook is true');
5688         END IF;
5689         OPEN c_get_sales_lead(p_sales_lead_id);
5690         FETCH c_get_sales_lead INTO
5691             l_sales_lead_rec.SALES_LEAD_ID,
5692             l_sales_lead_rec.LAST_UPDATE_DATE,
5693             l_sales_lead_rec.LAST_UPDATED_BY,
5694             l_sales_lead_rec.CREATION_DATE,
5695             l_sales_lead_rec.CREATED_BY,
5696             l_sales_lead_rec.LAST_UPDATE_LOGIN,
5697             l_sales_lead_rec.REQUEST_ID,
5698             l_sales_lead_rec.PROGRAM_APPLICATION_ID,
5699             l_sales_lead_rec.PROGRAM_ID,
5700             l_sales_lead_rec.PROGRAM_UPDATE_DATE,
5701             l_sales_lead_rec.LEAD_NUMBER, l_sales_lead_rec.STATUS_CODE,
5702             l_sales_lead_rec.CUSTOMER_ID, l_sales_lead_rec.ADDRESS_ID,
5703             l_sales_lead_rec.SOURCE_PROMOTION_ID,
5704             l_sales_lead_rec.INITIATING_CONTACT_ID,
5705             l_sales_lead_rec.ORIG_SYSTEM_REFERENCE,
5706             l_sales_lead_rec.CONTACT_ROLE_CODE,
5707             l_sales_lead_rec.CHANNEL_CODE,
5708             l_sales_lead_rec.BUDGET_AMOUNT, l_sales_lead_rec.CURRENCY_CODE,
5709             l_sales_lead_rec.DECISION_TIMEFRAME_CODE,
5710             l_sales_lead_rec.CLOSE_REASON, l_sales_lead_rec.LEAD_RANK_ID,
5711             l_sales_lead_rec.LEAD_RANK_CODE,
5712             l_sales_lead_rec.PARENT_PROJECT,
5713             l_sales_lead_rec.DESCRIPTION,
5714             l_sales_lead_rec.ATTRIBUTE_CATEGORY,
5715             l_sales_lead_rec.ATTRIBUTE1, l_sales_lead_rec.ATTRIBUTE2,
5716             l_sales_lead_rec.ATTRIBUTE3, l_sales_lead_rec.ATTRIBUTE4,
5717             l_sales_lead_rec.ATTRIBUTE5, l_sales_lead_rec.ATTRIBUTE6,
5718             l_sales_lead_rec.ATTRIBUTE7, l_sales_lead_rec.ATTRIBUTE8,
5719             l_sales_lead_rec.ATTRIBUTE9, l_sales_lead_rec.ATTRIBUTE10,
5720             l_sales_lead_rec.ATTRIBUTE11, l_sales_lead_rec.ATTRIBUTE12,
5721             l_sales_lead_rec.ATTRIBUTE13, l_sales_lead_rec.ATTRIBUTE14,
5722             l_sales_lead_rec.ATTRIBUTE15,
5723             l_sales_lead_rec.BUDGET_STATUS_CODE,
5724             l_sales_lead_rec.ACCEPT_FLAG,
5725             l_sales_lead_rec.VEHICLE_RESPONSE_CODE,
5726             l_sales_lead_rec.TOTAL_SCORE, l_sales_lead_rec.SCORECARD_ID,
5727             l_sales_lead_rec.KEEP_FLAG, l_sales_lead_rec.URGENT_FLAG,
5728             l_sales_lead_rec.IMPORT_FLAG,
5729             l_sales_lead_rec.REJECT_REASON_CODE,
5730             l_sales_lead_rec.DELETED_FLAG, l_sales_lead_rec.OFFER_ID,
5731             l_sales_lead_rec.INCUMBENT_PARTNER_PARTY_ID,
5732             l_sales_lead_rec.INCUMBENT_PARTNER_RESOURCE_ID,
5733             l_sales_lead_rec.PRM_EXEC_SPONSOR_FLAG,
5734             l_sales_lead_rec.PRM_PRJ_LEAD_IN_PLACE_FLAG,
5735             l_sales_lead_rec.PRM_SALES_LEAD_TYPE,
5736             l_sales_lead_rec.PRM_IND_CLASSIFICATION_CODE,
5737             l_sales_lead_rec.QUALIFIED_FLAG,
5738             l_sales_lead_rec.ORIG_SYSTEM_CODE,
5739             l_sales_lead_rec.PRM_ASSIGNMENT_TYPE,
5740             l_sales_lead_rec.AUTO_ASSIGNMENT_TYPE,
5741             l_sales_lead_rec.PRIMARY_CONTACT_PARTY_ID,
5742             l_sales_lead_rec.PRIMARY_CNT_PERSON_PARTY_ID,
5743             l_sales_lead_rec.PRIMARY_CONTACT_PHONE_ID,
5744             l_sales_lead_rec.REFERRED_BY,
5745             l_sales_lead_rec.REFERRAL_TYPE,
5746             l_sales_lead_rec.REFERRAL_STATUS,
5747             l_sales_lead_rec.REF_DECLINE_REASON,
5748             l_sales_lead_rec.REF_COMM_LTR_STATUS,
5749             l_sales_lead_rec.REF_ORDER_NUMBER,
5750             l_sales_lead_rec.REF_ORDER_AMT,
5751             l_sales_lead_rec.REF_COMM_AMT,
5752             l_sales_lead_rec.LEAD_DATE,
5753             l_sales_lead_rec.SOURCE_SYSTEM,
5754             l_sales_lead_rec.COUNTRY,
5755             l_sales_lead_rec.TOTAL_AMOUNT,
5756             l_sales_lead_rec.EXPIRATION_DATE,
5757             l_sales_lead_rec.LEAD_ENGINE_RUN_DATE,
5758             l_sales_lead_rec.LEAD_RANK_IND,
5759             l_sales_lead_rec.CURRENT_REROUTES;
5760         CLOSE c_get_sales_lead;
5761         IF (AS_DEBUG_LOW_ON) THEN
5762             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5763                 'desc:' || l_sales_lead_rec.description);
5764         END IF;
5765 
5766         AS_LEAD_ROUTING_WF_CUHK.Get_Owner_Pre(
5767             p_api_version_number    =>  2.0,
5768             p_init_msg_list         =>  FND_API.G_FALSE,
5769             p_validation_level      =>  FND_API.G_VALID_LEVEL_FULL,
5770             p_commit                =>  FND_API.G_FALSE,
5771             p_resource_id_tbl       =>  g_resource_id_tbl,
5772             p_group_id_tbl          =>  g_group_id_tbl,
5773             p_person_id_tbl         =>  g_person_id_tbl,
5774             p_resource_flag_tbl     =>  g_resource_flag_tbl,
5775             p_sales_lead_rec        =>  l_sales_lead_rec,
5776             x_resource_id           =>  l_resource_id,
5777             x_group_id              =>  l_group_id,
5778             x_person_id             =>  l_person_id,
5779             x_return_status         =>  x_return_status,
5780             x_msg_count             =>  x_msg_count,
5781             x_msg_data              =>  x_msg_data);
5782 
5783         IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5784             RAISE fnd_api.g_exc_error;
5785         ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5786             RAISE fnd_api.g_exc_unexpected_error;
5787         END IF;
5788     END IF; -- call user hook
5789 
5790     IF (l_call_user_hook AND l_resource_id IS NULL) OR
5791         NOT l_call_user_hook
5792     THEN
5793         IF NOT l_call_user_hook
5794         THEN
5795             IF (AS_DEBUG_LOW_ON) THEN
5796                 AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5797                     'There''s no customer user hook');
5798             END IF;
5799         ELSE
5800             IF (AS_DEBUG_LOW_ON) THEN
5801                 AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5802                     'User hook doesn''t return resource');
5803             END IF;
5804         END IF;
5805 
5806         -- Set the first resource as owner
5807         -- If owner decline this sales lead and s/he is the only
5808         -- salesforce in the sales team, s/he will be stuck in it.
5809         l_resource_id := g_resource_id_tbl(1);
5810         l_group_id := g_group_id_tbl(1);
5811         l_person_id := g_person_id_tbl(1);
5812 
5813         IF g_resource_flag_tbl(1) = 'D'
5814         THEN
5815             OPEN c_get_resource_avail(p_sales_lead_id);
5816             FETCH c_get_resource_avail INTO l_resource_avail_flag;
5817             CLOSE c_get_resource_avail;
5818             IF (AS_DEBUG_LOW_ON) THEN
5819                 AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5820                     'res avail?' || l_resource_avail_flag);
5821             END IF;
5822             x_return_status := 'W';
5823             IF l_resource_avail_flag = 'Y'
5824             THEN
5825                 -- There are resources available, but they were previous lead
5826                 -- owners.
5827                 AS_UTILITY_PVT.Set_Message(
5828                     p_msg_level => FND_MSG_PUB.G_MSG_LVL_ERROR,
5829                     p_msg_name  => 'AS_WARN_DEF_RESOURCE_ID');
5830             ELSE
5831                 AS_UTILITY_PVT.Set_Message(
5832                     p_msg_level => FND_MSG_PUB.G_MSG_LVL_ERROR,
5833                     p_msg_name  => 'AS_WARN_USING_DEF_RESOURCE_ID');
5834             END IF;
5835         ELSIF g_resource_flag_tbl(1) = 'L'
5836         THEN
5837             x_return_status := 'W';
5838             AS_UTILITY_PVT.Set_Message(
5839                 p_msg_level => FND_MSG_PUB.G_MSG_LVL_ERROR,
5840                 p_msg_name  => 'AS_WARN_USING_USER_RESOURCE_ID');
5841         END IF;
5842     END IF;
5843     IF (AS_DEBUG_LOW_ON) THEN
5844         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5845             'Set owner rs_id=' || l_resource_id);
5846         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5847             ' group_id=' || l_group_id);
5848         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5849             ' person_id=' || l_person_id);
5850     END IF;
5851 
5852     x_resource_id := l_resource_id;
5853     x_group_id := l_group_id;
5854     x_person_id := l_person_id;
5855     IF (AS_DEBUG_LOW_ON) THEN
5856         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5857             'Get_Owner: End');
5858     END IF;
5859     -- Standard call to get message count and IF count is 1, get message info.
5860     FND_MSG_PUB.Count_And_Get
5861     (  p_count          =>   x_msg_count,
5862        p_data           =>   x_msg_data );
5863 EXCEPTION
5864     WHEN OTHERS THEN
5865         IF (AS_DEBUG_LOW_ON) THEN
5866         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5867             'SQLCODE:' || SQLCODE || ' SQLERRM: ' || SQLERRM);
5868         END IF;
5869 END Get_Owner;
5870 
5871 
5872 PROCEDURE Update_Sales_Leads (
5873     p_sales_lead_id      IN  NUMBER,
5874     p_resource_id        IN  NUMBER,
5875     p_group_id           IN  NUMBER,
5876     p_person_id          IN  NUMBER,
5877     x_return_status      OUT NOCOPY VARCHAR2,
5878     x_msg_count          OUT NOCOPY NUMBER,
5879     x_msg_data           OUT NOCOPY VARCHAR2)
5880 IS
5881     l_customer_id          NUMBER;
5882     l_address_id           NUMBER;
5883     l_access_exist_flag    VARCHAR2(1);
5884     l_status_code          VARCHAR2(30);
5885     l_sales_lead_log_id    NUMBER;
5886     l_reject_reason_code   VARCHAR2(30);
5887     l_lead_rank_id         NUMBER;
5888     l_qualified_flag       VARCHAR2(1);
5889     l_freeze_flag          VARCHAR2(1) := 'N';
5890     l_open_status_flag     VARCHAR2(1);
5891     l_lead_rank_score      NUMBER;
5892     l_creation_date        DATE;
5893 
5894     CURSOR c_access_exist(c_sales_lead_id NUMBER, c_resource_id NUMBER,
5895                         c_group_id NUMBER) IS
5896       SELECT freeze_flag
5897       FROM as_accesses_all
5898       WHERE sales_lead_id = c_sales_lead_id
5899       AND   salesforce_id = c_resource_id
5900       AND ((sales_group_id = c_group_id) OR
5901            (sales_group_id IS NULL AND c_group_id IS NULL));
5902 
5903     CURSOR c_sales_lead(c_sales_lead_id NUMBER) IS
5904       SELECT customer_id, address_id, reject_reason_code,
5905              lead_rank_id, qualified_flag, status_code
5906       FROM as_sales_leads
5907       WHERE Sales_lead_id = c_sales_lead_id;
5908 
5909     -- Get whether status is open or not for the lead
5910     -- Get lead_rank_score and lead creation_date
5911     CURSOR c_get_open_status_flag(c_sales_lead_id NUMBER) IS
5912       SELECT DECODE(sta.opp_open_status_flag, 'Y', 'Y', 'N', NULL),
5913              NVL(rk.min_score, 0), sl.creation_date
5914       FROM as_statuses_b sta, as_sales_leads sl, as_sales_lead_ranks_b rk
5915       WHERE sl.sales_lead_id = c_sales_lead_id
5916       AND   sl.status_code = sta.status_code
5917       AND   sl.lead_rank_id = rk.rank_id(+);
5918 BEGIN
5919     IF (AS_DEBUG_LOW_ON) THEN
5920         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5921             'Update_Sales_Leads: Start');
5922         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5923             'res id in upd=' || p_Resource_Id);
5924         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5925             'group id in upd='||p_group_id);
5926     END IF;
5927 
5928     x_return_status := FND_API.G_RET_STS_SUCCESS;
5929     OPEN c_sales_lead(p_sales_lead_id);
5930     FETCH c_sales_lead INTO l_customer_id, l_address_id,
5931                             l_reject_reason_code, l_lead_rank_id,
5932                             l_qualified_flag, l_status_code;
5933     CLOSE c_sales_lead;
5934 
5935     -- l_routing_status := fnd_profile.value('AS_LEAD_ROUTING_STATUS');
5936 
5937     -- Call API to create log entry
5938     AS_SALES_LEADS_LOG_PKG.Insert_Row(
5939         px_log_id                 => l_sales_lead_log_id ,
5940         p_sales_lead_id           => p_sales_lead_id,
5941         p_created_by              => fnd_global.user_id,
5942         p_creation_date           => SYSDATE,
5943         p_last_updated_by         => fnd_global.user_id,
5944         p_last_update_date        => SYSDATE,
5945         p_last_update_login       => FND_GLOBAL.CONC_LOGIN_ID,
5946         p_request_id              => FND_GLOBAL.Conc_Request_Id,
5947         p_program_application_id  => FND_GLOBAL.Prog_Appl_Id,
5948         p_program_id              => FND_GLOBAL.Conc_Program_Id,
5949         p_program_update_date     => SYSDATE,
5950         p_status_code             => l_status_code, --l_routing_status,
5951         p_assign_to_person_id     => p_person_id,
5952         p_assign_to_salesforce_id => p_resource_id,
5953         p_reject_reason_code      => l_reject_reason_code,
5954         p_assign_sales_group_id   => p_group_id,
5955         p_lead_rank_id            => l_lead_rank_id,
5956         p_qualified_flag          => l_qualified_flag,
5957         p_category                => NULL);
5958 
5959     -- Call table handler directly, not calling Update_Sales_Lead,
5960     -- in case current user doesn't have update privilege.
5961     AS_SALES_LEADS_PKG.Sales_Lead_Update_Row(
5962         p_SALES_LEAD_ID  => p_SALES_LEAD_ID,
5963         p_LAST_UPDATE_DATE  => SYSDATE,
5964         p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
5965         p_CREATION_DATE  => FND_API.G_MISS_DATE,
5966         p_CREATED_BY  => FND_API.G_MISS_NUM,
5967         p_LAST_UPDATE_LOGIN  => FND_API.G_MISS_NUM,
5968         p_REQUEST_ID  => FND_GLOBAL.Conc_Request_Id,
5969         p_PROGRAM_APPLICATION_ID  => FND_GLOBAL.Prog_Appl_Id,
5970         p_PROGRAM_ID  => FND_GLOBAL.Conc_Program_Id,
5971         p_PROGRAM_UPDATE_DATE  => SYSDATE,
5972         p_LEAD_NUMBER  => FND_API.G_MISS_CHAR,
5973         p_STATUS_CODE => FND_API.G_MISS_CHAR, --l_routing_status,
5974         p_CUSTOMER_ID  => l_CUSTOMER_ID,
5975         p_ADDRESS_ID  => l_ADDRESS_ID,
5976         p_SOURCE_PROMOTION_ID  => FND_API.G_MISS_NUM,
5977         p_INITIATING_CONTACT_ID => FND_API.G_MISS_NUM,
5978         p_ORIG_SYSTEM_REFERENCE => FND_API.G_MISS_CHAR,
5979         p_CONTACT_ROLE_CODE  => FND_API.G_MISS_CHAR,
5980         p_CHANNEL_CODE  => FND_API.G_MISS_CHAR,
5981         p_BUDGET_AMOUNT  => FND_API.G_MISS_NUM,
5982         p_CURRENCY_CODE  => FND_API.G_MISS_CHAR,
5983         p_DECISION_TIMEFRAME_CODE => FND_API.G_MISS_CHAR,
5984         p_CLOSE_REASON  => FND_API.G_MISS_CHAR,
5985         p_LEAD_RANK_ID  => FND_API.G_MISS_NUM,
5986         p_LEAD_RANK_CODE  => FND_API.G_MISS_CHAR,
5987         p_PARENT_PROJECT  => FND_API.G_MISS_CHAR,
5988         p_DESCRIPTION  => FND_API.G_MISS_CHAR,
5989         p_ATTRIBUTE_CATEGORY  => FND_API.G_MISS_CHAR,
5990         p_ATTRIBUTE1  => FND_API.G_MISS_CHAR,
5991         p_ATTRIBUTE2  => FND_API.G_MISS_CHAR,
5992         p_ATTRIBUTE3  => FND_API.G_MISS_CHAR,
5993         p_ATTRIBUTE4  => FND_API.G_MISS_CHAR,
5994         p_ATTRIBUTE5  => FND_API.G_MISS_CHAR,
5995         p_ATTRIBUTE6  => FND_API.G_MISS_CHAR,
5996         p_ATTRIBUTE7  => FND_API.G_MISS_CHAR,
5997         p_ATTRIBUTE8  => FND_API.G_MISS_CHAR,
5998         p_ATTRIBUTE9  => FND_API.G_MISS_CHAR,
5999         p_ATTRIBUTE10 => FND_API.G_MISS_CHAR,
6000         p_ATTRIBUTE11 => FND_API.G_MISS_CHAR,
6001         p_ATTRIBUTE12 => FND_API.G_MISS_CHAR,
6002         p_ATTRIBUTE13 => FND_API.G_MISS_CHAR,
6003         p_ATTRIBUTE14 => FND_API.G_MISS_CHAR,
6004         p_ATTRIBUTE15 => FND_API.G_MISS_CHAR,
6005         p_ASSIGN_TO_PERSON_ID  => p_person_id,
6006         p_ASSIGN_TO_SALESFORCE_ID => p_resource_id,
6007         p_ASSIGN_SALES_GROUP_ID => p_group_id,
6008         p_ASSIGN_DATE  => SYSDATE,
6009         p_BUDGET_STATUS_CODE  => FND_API.G_MISS_CHAR,
6010         p_ACCEPT_FLAG  => 'N',
6011         p_VEHICLE_RESPONSE_CODE => FND_API.G_MISS_CHAR,
6012         p_TOTAL_SCORE  => FND_API.G_MISS_NUM,
6013         p_SCORECARD_ID  => FND_API.G_MISS_NUM,
6014         p_KEEP_FLAG  => FND_API.G_MISS_CHAR,
6015         p_URGENT_FLAG  => FND_API.G_MISS_CHAR,
6016         p_IMPORT_FLAG  => FND_API.G_MISS_CHAR,
6017         p_REJECT_REASON_CODE  => NULL, --l_reject_reason_code,
6018         p_DELETED_FLAG => FND_API.G_MISS_CHAR,
6019         p_OFFER_ID  =>  FND_API.G_MISS_NUM,
6020         p_QUALIFIED_FLAG => l_qualified_flag,
6021         p_ORIG_SYSTEM_CODE => FND_API.G_MISS_CHAR,
6022         p_INC_PARTNER_PARTY_ID => FND_API.G_MISS_NUM,
6023         p_INC_PARTNER_RESOURCE_ID => FND_API.G_MISS_NUM,
6024         p_PRM_EXEC_SPONSOR_FLAG   => FND_API.G_MISS_CHAR,
6025         p_PRM_PRJ_LEAD_IN_PLACE_FLAG => FND_API.G_MISS_CHAR,
6026         p_PRM_SALES_LEAD_TYPE     => FND_API.G_MISS_CHAR,
6027         p_PRM_IND_CLASSIFICATION_CODE => FND_API.G_MISS_CHAR,
6028         p_PRM_ASSIGNMENT_TYPE => FND_API.G_MISS_CHAR,
6029         p_AUTO_ASSIGNMENT_TYPE => FND_API.G_MISS_CHAR,
6030         p_PRIMARY_CONTACT_PARTY_ID => FND_API.G_MISS_NUM,
6031         p_PRIMARY_CNT_PERSON_PARTY_ID => FND_API.G_MISS_NUM,
6032         p_PRIMARY_CONTACT_PHONE_ID => FND_API.G_MISS_NUM,
6033         p_REFERRED_BY => FND_API.G_MISS_NUM,
6034         p_REFERRAL_TYPE => FND_API.G_MISS_CHAR,
6035         p_REFERRAL_STATUS => FND_API.G_MISS_CHAR,
6036         p_REF_DECLINE_REASON => FND_API.G_MISS_CHAR,
6037         p_REF_COMM_LTR_STATUS => FND_API.G_MISS_CHAR,
6038         p_REF_ORDER_NUMBER => FND_API.G_MISS_NUM,
6039         p_REF_ORDER_AMT => FND_API.G_MISS_NUM,
6040         p_REF_COMM_AMT => FND_API.G_MISS_NUM,
6041         -- bug No.2341515, 2368075
6042         p_LEAD_DATE =>  FND_API.G_MISS_DATE,
6043         p_SOURCE_SYSTEM => FND_API.G_MISS_CHAR,
6044         p_COUNTRY => FND_API.G_MISS_CHAR,
6045         p_TOTAL_AMOUNT => FND_API.G_MISS_NUM,
6046         p_EXPIRATION_DATE => FND_API.G_MISS_DATE,
6047         p_LEAD_RANK_IND => FND_API.G_MISS_CHAR,
6048         p_LEAD_ENGINE_RUN_DATE => FND_API.G_MISS_DATE,
6049         p_CURRENT_REROUTES => FND_API.G_MISS_NUM,
6050         p_STATUS_OPEN_FLAG => FND_API.G_MISS_CHAR,
6051         p_LEAD_RANK_SCORE => FND_API.G_MISS_NUM,
6052         -- 11.5.10 new columns
6053         p_MARKETING_SCORE => FND_API.G_MISS_NUM,
6054         p_INTERACTION_SCORE => FND_API.G_MISS_NUM,
6055         p_SOURCE_PRIMARY_REFERENCE => FND_API.G_MISS_CHAR,
6056         p_SOURCE_SECONDARY_REFERENCE => FND_API.G_MISS_CHAR,
6057         p_SALES_METHODOLOGY_ID => FND_API.G_MISS_NUM,
6058         p_SALES_STAGE_ID => FND_API.G_MISS_NUM);
6059 
6060 
6061     OPEN c_access_exist(p_sales_lead_id, p_resource_id, p_group_id);
6062     FETCH c_access_exist INTO l_access_exist_flag;
6063     CLOSE c_access_exist;
6064 
6065     -- Clear any owner for as_accesses_all
6066     -- There may be more than one owner_flag='Y' for the lead in
6067     -- as_accesses_all:
6068     -- 1. When owner rejects the lead
6069     -- 2. When monitoring engine times out
6070     UPDATE as_accesses_all
6071     SET owner_flag = 'N'
6072     WHERE sales_lead_id = p_sales_lead_id;
6073 
6074     IF l_access_exist_flag IS NOT NULL
6075     THEN
6076         -- If the owner was frozen in the sales team, he is still frozen in
6077         -- the sales team. No matter whether he accept the lead or not.
6078         IF l_access_exist_flag = 'Y'
6079         THEN
6080             l_freeze_flag := 'Y';
6081         END IF;
6082         UPDATE as_accesses_all
6083         SET team_leader_flag = 'Y',
6084             owner_flag = 'Y',
6085             freeze_flag = l_freeze_flag,
6086             created_by_tap_flag = 'Y'
6087         WHERE sales_lead_id = p_sales_lead_id
6088         AND   salesforce_id = p_resource_id
6089         AND ((sales_group_id = p_group_id) OR
6090              (sales_group_id IS NULL AND p_group_id IS NULL));
6091     ELSE
6092         OPEN c_get_open_status_flag (p_sales_lead_id);
6093         FETCH c_get_open_status_flag INTO l_open_status_flag,
6094             l_lead_rank_score, l_creation_date;
6095         CLOSE c_get_open_status_flag;
6096 
6097         INSERT INTO as_accesses_all
6098             (ACCESS_ID, LAST_UPDATE_DATE, LAST_UPDATED_BY
6099             ,CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN
6100             ,ACCESS_TYPE, FREEZE_FLAG, REASSIGN_FLAG, TEAM_LEADER_FLAG
6101             ,OWNER_FLAG, CREATED_BY_TAP_FLAG
6102             ,CUSTOMER_ID, ADDRESS_ID, SALES_LEAD_ID, SALESFORCE_ID
6103             ,PERSON_ID, SALES_GROUP_ID, OPEN_FLAG, LEAD_RANK_SCORE
6104             ,OBJECT_CREATION_DATE)
6105         SELECT as_accesses_s.nextval, SYSDATE, FND_GLOBAL.USER_ID,
6106             SYSDATE, FND_GLOBAL.USER_ID, FND_GLOBAL.CONC_LOGIN_ID, 'X',
6107             l_freeze_flag ,'N', 'Y', 'Y', 'N',
6108             l_customer_id, l_address_id, p_sales_lead_id,
6109             p_resource_id, p_person_id, p_group_id, l_open_status_flag,
6110             l_lead_rank_score, l_creation_date
6111         FROM SYS.DUAL;
6112     END IF; -- l_access_exist_flag IS NOT NULL
6113 
6114     IF (AS_DEBUG_LOW_ON) THEN
6115         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6116             'Update_Sales_Leads: End');
6117     END IF;
6118 
6119 EXCEPTION
6120     WHEN OTHERS THEN
6121         RAISE;
6122 END Update_Sales_Leads;
6123 
6124 
6125 PROCEDURE Find_Lead_Owner(
6126     p_sales_lead_id          IN     NUMBER,
6127     p_salesgroup_id          IN     NUMBER,
6128     p_request_id             IN     NUMBER,
6129     x_return_status          OUT NOCOPY VARCHAR2,
6130     x_msg_count              OUT NOCOPY NUMBER,
6131     x_msg_data               OUT NOCOPY VARCHAR2)
6132 IS
6133     CURSOR C_Get_Lead_Info(c_sales_lead_id NUMBER) IS
6134       SELECT referral_type
6135       FROM as_sales_leads
6136       WHERE sales_lead_id = c_sales_lead_id;
6137 
6138     l_resource_id               NUMBER;
6139     l_group_id                  NUMBER;
6140     l_person_id                 NUMBER;
6141     l_referral_type             VARCHAR2(30);
6142     l_assign_manual_flag        VARCHAR2(1);
6143     l_return_status             VARCHAR2(1);
6144     l_msg_count                 NUMBER;
6145     l_msg_data                  VARCHAR2(2000);
6146 BEGIN
6147     x_return_status := FND_API.G_RET_STS_SUCCESS;
6148     OPEN C_Get_Lead_Info(p_sales_lead_id);
6149     FETCH C_Get_Lead_Info INTO l_referral_type;
6150     CLOSE C_Get_Lead_Info;
6151 
6152     IF l_referral_type IS NOT NULL
6153     THEN
6154         -- Referral type is not null, for CAPRI
6155         Get_Partner_Lead_Owner(p_sales_lead_id);
6156     ELSE
6157         l_assign_manual_flag :=
6158                 nvl(FND_PROFILE.Value('AS_LEAD_ASSIGN_MANUAL'),'N');
6159         IF (AS_DEBUG_LOW_ON) THEN
6160             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6161                 'manual assign profile=' || l_assign_manual_flag);
6162         END IF;
6163 
6164         IF l_assign_manual_flag = 'N'
6165         THEN
6166             IF fnd_profile.value('ASF_IS_ORACLE_INTERNAL') = 'Y'
6167             THEN
6168                 -- Debug Message
6169                 IF (AS_DEBUG_LOW_ON) THEN
6170                     AS_UTILITY_PVT.Debug_Message(
6171                         FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6172                         'Oracle internal, custom user hook');
6173                 END IF;
6174 
6175                 Oracle_Internal_CUHK(
6176                     p_sales_lead_id        => p_sales_lead_id,
6177                     p_salesgroup_id        => p_salesgroup_id,
6178                     p_request_id           => p_request_id,
6179                     x_return_status        => x_return_status,
6180                     x_msg_count            => l_msg_count,
6181                     x_msg_data             => l_msg_data);
6182             ELSE
6183                 Get_Available_Resource(
6184                     p_sales_lead_id   =>  p_sales_lead_id,
6185                     p_salesgroup_id   =>  p_salesgroup_id,
6186                     x_return_status   =>  x_return_status,
6187                     x_msg_count       =>  x_msg_count,
6188                     x_msg_data        =>  x_msg_data);
6189 
6190                 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
6191                     RAISE fnd_api.g_exc_error;
6192                 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6193                     RAISE fnd_api.g_exc_unexpected_error;
6194                 END IF;
6195 
6196                 Get_Owner(
6197                     p_sales_lead_id   =>  p_sales_lead_id,
6198                     p_salesgroup_id   =>  p_salesgroup_id,
6199                     x_resource_id     =>  l_resource_id,
6200                     x_group_id        =>  l_group_id,
6201                     x_person_id       =>  l_person_id,
6202                     x_return_status   =>  l_return_status,
6203                     x_msg_count       =>  x_msg_count,
6204                     x_msg_data        =>  x_msg_data);
6205 
6206                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6207                     RAISE fnd_api.g_exc_error;
6208                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6209                     RAISE fnd_api.g_exc_unexpected_error;
6210                 END IF;
6211 
6212                 Update_Sales_Leads (
6213                     p_sales_lead_id   =>  p_sales_lead_id,
6214                     p_resource_id     =>  l_resource_id,
6215                     p_group_id        =>  l_group_id,
6216                     p_person_id       =>  l_person_id,
6217                     x_return_status   =>  x_return_status,
6218                     x_msg_count       =>  x_msg_count,
6219                     x_msg_data        =>  x_msg_data);
6220 
6221                 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
6222                     RAISE fnd_api.g_exc_error;
6223                 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6224                     RAISE fnd_api.g_exc_unexpected_error;
6225                 END IF;
6226 
6227                 IF l_return_status = 'W' THEN
6228                     x_return_status := 'W';
6229                 END IF;
6230             END IF; -- Oracle internal
6231           ELSE -- l_assign_manual_flag = 'Y'
6232           Set_Default_Lead_Owner(p_sales_lead_id, p_salesgroup_id,
6233               p_request_id, x_return_status, x_msg_count, x_msg_data);
6234         END IF; -- Do system routing
6235     END IF; -- referral type IS NOT NULL
6236 
6237     -- If profile "OS: Enable Real Time Lead Assignment" is set to 'N',
6238     -- only owner will be left for this transaction.
6239     IF NVL(fnd_profile.value('AS_ENABLE_LEAD_ONLINE_TAP'), 'Y') = 'N'
6240     THEN
6241         IF (AS_DEBUG_LOW_ON) THEN
6242         AS_UTILITY_PVT.Debug_Message( FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6243             'Lead Online TAP is disabled!');
6244         END IF;
6245         Remove_Redundant_Accesses(p_sales_lead_id, p_request_id);
6246     END IF;
6247     Process_Access_Record(p_sales_lead_id, p_request_id);
6248 
6249     -- Standard call to get message count and IF count is 1, get message info.
6250     FND_MSG_PUB.Count_And_Get
6251     (  p_count          =>   x_msg_count,
6252        p_data           =>   x_msg_data );
6253 END Find_Lead_Owner;
6254 
6255 
6256 PROCEDURE Process_Access_Record(
6257     p_sales_lead_id          IN     NUMBER,
6258     p_request_id             IN     NUMBER)
6259 IS
6260 BEGIN
6261       UPDATE as_territory_accesses
6262       SET request_id = NULL
6263       WHERE access_id IN
6264           (SELECT a.access_id
6265            FROM as_accesses_all a
6266            WHERE a.sales_lead_id = p_sales_lead_id
6267            AND a.request_id = p_request_id)
6268       AND request_id = p_request_id;
6269 
6270       UPDATE as_accesses_all
6271       SET request_id = NULL
6272       WHERE request_id = p_request_id
6273       AND sales_lead_id = p_sales_lead_id;
6274 END Process_Access_Record;
6275 
6276 END AS_SALES_LEAD_ASSIGN_PVT;