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