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