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