DBA Data[Home] [Help]

PACKAGE BODY: APPS.AS_SALES_LEADS_PVT

Source


1 PACKAGE BODY AS_SALES_LEADS_PVT as
2 /* $Header: asxvslmb.pls 120.1 2006/03/25 04:27:46 savadhan noship $ */
3 -- Start of Comments
4 -- Package name     : AS_SALES_LEADS_PVT
5 -- Purpose          : Sales Leads Management
6 -- NOTE             :
7 -- History          :
8 --      06/05/2000 FFANG  Created.
9 --      06/06/2000 FFANG  ModIFied according data schema changes.
10 --      08/30/2000 FFANG  Add assign_to_salesforce_id to AS_SALES_LEADS
11 --      08/31/2000 FFANG  Add assign_to_salesforce_id to AS_SALES_LEADS_LOG
12 --      09/20/2000 FFANG  For bug 1406777, add different logics to
13 --                        validate_sales_lead_id when calling from create or
14 --                        update
15 --      09/20/2000 FFANG  For bug 1406761, add different logics to
16 --                        validate_contact_party_id when calling from create or
17 --                        update
18 --      09/20/2000 FFANG  For bug 1400244, add a procedure: set_default_values
19 --                        to set currency_code as user default value, if
20 --                        budget_amount is entered but not currency_code
21 --      09/21/2000 FFANG  For bug 1400264, add two lines to others exception
22 --                        handling to meet the coding standard
23 --      09/26/2000 FFANG  Correct procedure 'Validate_PRM_IND_CLS_CODE':
24 --                        lookup_type should be 'PRM_IND_CLASSIFICATION_TYPE'
25 --      09/27/2000 FFANG  Use AS_INTEREST_PVT.Validate_Interest_Fields instead
26 --                        of Validate_Intrst_Type_Sec_CODE
27 --      09/28/2000 FFANG  Modify validate_phone_id
28 --      09/28/2000 FFANG  Fix some minor bugs
29 --      10/02/2000 FFANG  For bug 1416170, do auto-qualify only when keep_flag
30 --                        <> 'Y'
31 --      10/02/2000 FFANG  For bug 1417373, l_qualified length set to 30.
32 --      10/09/2000 FFANG	 For bug 1448995, use two new error messages instead
33 --                        of API_INVALID_ID in "Link_Lead_To_Opportunity"
34 --      10/12/2000 FFANG  1. For bug 1449308, in Link_Lead_To_Opportunity,
35 --                        Should not use sales_lead_line_id as lead_line_id to
36 --                        create an opportunity line.
37 --                        2. For bug 1449308, in Link_Lead_To_Opportunity,
38 --                        l_Lead_Opp_Line_Id should be initialized.
39 --      10/26/2000 FFANG  for BUG 1478517, in create_opportunity_for_lead,
40 --                        pass budget_amount to opportunity's customer_budget
41 --                        instead of total_amount, since
42 --                        create_opp_lines will update total_amount according
43 --                        to lines' total amount
44 --      10/27/2000 FFANG  for bug 1478517, in Link_Lead_To_Opportunity and
45 --                        create_opportunity_for_lead, copy sales lead contacts
46 --                        information to opportunity contact table
47 --      10/30/2000 FFANG  for bug 1475407, when checking if do auto-qualify,
48 --                        also need to check if keep_flag is null
49 --      10/30/2000 FFANG  for bug 1479671, in Link_Lead_To_Opportunity and
50 --                        create_opportunity_for_lead, copy source_promotion_id
51 --                        and offer_id in sales lead lines to opportunity lines
52 --      10/31/2000 FFANG  when creating opportunity for sales leads, some
53 --                        columns are missing to be copied. Added them.
54 --      11/06/2000 FFANG  For bug 1423478:
55 --                        1. Add procedure CALL_WF_TO_ASSIGN to kick off
56 --                           sales lead assignment workflow
57 --                        2. In Update_Sales_Lead, call CALL_WF_TO_ASSIGN after
58 --                           calling update table handler
59 --      11/17/2000 FFANG  Workflow will call update_sales_lead, if we kick-off
60 --                        workflow within update_sales_lead, it will cause
61 --                        infinite recursive calls. => Take out calling
62 --                        CALL_WF_TO_ASSIGN from Update_Sales_Lead.
63 --      11/19/2000 FFANG  For bug 1501336, check profile option
64 --                        AS_CUSTOMER_ADDRESS_REQUIRED to see if address_id is
65 --                        required or not
66 --      11/19/2000 FFANG  for bug 1475568, if status is changed to 'DECLINED',
67 --                        don't do auto-qualify
68 --      11/29/2000 FFANG  for bug 1518684, if JTF assignment manager got no
69 --                        resource_id back, don't error out, put error message
70 --                        but return status remains 'S'
71 --      12/09/2000 FFANG  for bug 1504040, when creating a sales lead, only
72 --                        when status is "New" or "Unqualified" then launch
73 --                        auto-qualification
74 --      12/11/2000 FFANG  for bug 1504040, when updating a sales lead, only
75 --                        when orginal status is "New" or "Unqualified" then
76 --                        launch auto-qualification
77 --      12/12/2000 FFANG  For bug 1529866, add one parameter P_OPP_STATUS in
78 --                        create_opportunity_for_lead to get opportunity status
79 --                        when creating opportunity
80 --      12/19/2000 SOLIN  For bug 1530383, tune C_Get_Sales_Lead in
81 --                        Assign_Sales_Lead API and add creation_date and
82 --                        source_promotion_id in the cursor.
83 --      12/19/2000 SOLIN  For bug 1514981, set default values for accept_flag,
84 --                        keep_flag, urgent_flag,import_flag, deleted_flag,
85 --                        currency_code.
86 --      01/03/2001 SOLIN  For bug 1568056, Validate_address_id shouldn't raise
87 --                        exception when address_id is g_miss in update_sales_
88 --                        lead.
89 --      01/05/2001 SOLIN  Changed Assign_Sales_Lead because l_assignresources_tbl
90 --                        may start from 1.
91 --      01/08/2001 SOLIN  For bug 1558460, only customer_id is required to get
92 --                        potential opportunities.
93 --      01/08/2001 SOLIN  For bug 1570991, change validation procedure to
94 --                        assign_to_person_id, assign_to_salesforce_id
95 --      01/13/2001 FFANG  For bug 1582747, when calling Get_CurrentUser,
96 --                        pass p_identity_salesforce_id into p_salesforce_id
97 --                        instead of passing NULL
98 --      02/02/2001 FFANG  Instead of using views, use base tables.
99 --                        But as_sf_ptr_v and as_opportunity_details_v haven't
100 --                        been replaced yet.
101 --      02/06/2001 FFANG  For bug 1628894, check if opp contact has already
102 --                        existed before calling create_opp_contacts
103 --      12/17/2002 SOLIN  Populate column lead_rank_ind:
104 --                        'U':  lead is upgraded.
105 --                        'D':  lead is downgraded.
106 --                        'N':  none of above.
107 --                        Set as_sales_leads_log.manual_rank_flag:
108 --                        'Y':  user manually sets rank
109 --                        'N':  rating engine sets rank
110 --                        null: rank is not updated
111 --      11/08/2004 BMUTHUKR  Modified validate_status_close_reason procedure to fix bug 3931489.
112 --
113 -- END of Comments
114 
115 
116 G_PKG_NAME  CONSTANT VARCHAR2(30):= 'AS_SALES_LEADS_PVT';
117 G_FILE_NAME CONSTANT VARCHAR2(12) := 'asxvslmb.pls';
118 
119 
120 -- ffang 092000 for bug 1400244
121 -- solin 122000 for bug 1514981
122 AS_DEBUG_HIGH_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
123 AS_DEBUG_LOW_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
124 AS_DEBUG_MEDIUM_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
125 AS_DEBUG_ERROR_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_ERROR);
126 
127 PROCEDURE Set_default_values (
128     p_mode                IN       VARCHAR2,
129     px_SALES_LEAD_rec     IN OUT NOCOPY   AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type
130     )
131  IS
132 BEGIN
133 
134 
135     -- for 11.5.8 HP enhancement, removing channel_code as mandatory from UI.
136     -- If no channel code is passed / null, then also let it be as is.
137     -- Channel selection engine will assign an appropriate channel
138 
139     /* IF (px_SALES_LEAD_rec.channel_code IS NULL) OR
140         (px_SALES_LEAD_rec.channel_code = FND_API.G_MISS_CHAR
141          AND p_mode = AS_UTILITY_PVT.G_CREATE)
142      THEN
143          px_SALES_LEAD_rec.channel_code := FND_PROFILE.VALUE ('AS_DEFAULT_LEAD_CHANNEL');
144      END IF; */
145 
146      IF (px_SALES_LEAD_rec.status_code IS NULL) OR
147         (px_SALES_LEAD_rec.status_code = FND_API.G_MISS_CHAR
148          AND p_mode = AS_UTILITY_PVT.G_CREATE)
149      THEN
150          px_SALES_LEAD_rec.status_code := FND_PROFILE.VALUE ('AS_DEFAULT_LEAD_STATUS');
151      END IF;
152 
153 
154      IF (px_SALES_LEAD_rec.vehicle_response_code IS NULL) OR
155         (px_SALES_LEAD_rec.vehicle_response_code = FND_API.G_MISS_CHAR
156         AND p_mode = AS_UTILITY_PVT.G_CREATE)
157      THEN
158         px_SALES_LEAD_rec.vehicle_response_code := FND_PROFILE.VALUE ('AS_DEFAULT_LEAD_VEHICLE_RESPONSE_CODE');
159      END IF;
160 
161 
162      IF (px_SALES_LEAD_rec.budget_status_code IS NULL) OR
163         (px_SALES_LEAD_rec.budget_status_code = FND_API.G_MISS_CHAR
164         AND p_mode = AS_UTILITY_PVT.G_CREATE)
165      THEN
166         px_SALES_LEAD_rec.budget_status_code := FND_PROFILE.VALUE ('AS_DEFAULT_LEAD_BUDGET_STATUS');
167      END IF;
168 
169 
170 
171      IF (px_SALES_LEAD_rec.decision_timeframe_code IS NULL) OR
172         (px_SALES_LEAD_rec.decision_timeframe_code = FND_API.G_MISS_CHAR
173         AND p_mode = AS_UTILITY_PVT.G_CREATE)
174      THEN
175         px_SALES_LEAD_rec.decision_timeframe_code := FND_PROFILE.VALUE ('AS_DEFAULT_LEAD_DECISION_TIMEFRAME');
176      END IF;
177 
178 
179 
180 
181 
182      IF (px_SALES_LEAD_rec.auto_assignment_type IS NULL) OR
183              (px_SALES_LEAD_rec.auto_assignment_type = FND_API.G_MISS_CHAR
184               AND p_mode = AS_UTILITY_PVT.G_CREATE)
185           THEN
186               px_SALES_LEAD_rec.auto_assignment_type := 'TAP';
187      END IF;
188 
189      IF (px_SALES_LEAD_rec.prm_assignment_type IS NULL) OR
190 	 (px_SALES_LEAD_rec.prm_assignment_type = FND_API.G_MISS_CHAR
191 	  AND p_mode = AS_UTILITY_PVT.G_CREATE)
192      THEN
193 	  px_SALES_LEAD_rec.prm_assignment_type := 'UNASSIGNED';
194      END IF;
195 
196 
197 
198 
199      IF (px_SALES_LEAD_rec.ACCEPT_FLAG IS NULL) OR
200         (px_SALES_LEAD_rec.ACCEPT_FLAG = FND_API.G_MISS_CHAR
201          AND p_mode = AS_UTILITY_PVT.G_CREATE)
202      THEN
203          px_SALES_LEAD_rec.ACCEPT_FLAG := 'N';
204      END IF;
205 
206      IF (px_SALES_LEAD_rec.KEEP_FLAG IS NULL) OR
207         (px_SALES_LEAD_rec.KEEP_FLAG = FND_API.G_MISS_CHAR
208          AND p_mode = AS_UTILITY_PVT.G_CREATE)
209      THEN
210          px_SALES_LEAD_rec.KEEP_FLAG := 'N';
211      END IF;
212 
213      IF (px_SALES_LEAD_rec.URGENT_FLAG IS NULL) OR
214         (px_SALES_LEAD_rec.URGENT_FLAG = FND_API.G_MISS_CHAR
215          AND p_mode = AS_UTILITY_PVT.G_CREATE)
216      THEN
217          px_SALES_LEAD_rec.URGENT_FLAG := 'N';
218      END IF;
219 
220      IF (px_SALES_LEAD_rec.IMPORT_FLAG IS NULL) OR
221         (px_SALES_LEAD_rec.IMPORT_FLAG = FND_API.G_MISS_CHAR
222          AND p_mode = AS_UTILITY_PVT.G_CREATE)
223      THEN
224          px_SALES_LEAD_rec.IMPORT_FLAG := 'N';
225      END IF;
226 
227      IF (px_SALES_LEAD_rec.DELETED_FLAG IS NULL) OR
228         (px_SALES_LEAD_rec.DELETED_FLAG = FND_API.G_MISS_CHAR
229          AND p_mode = AS_UTILITY_PVT.G_CREATE)
230      THEN
231          px_SALES_LEAD_rec.DELETED_FLAG := 'N';
232      END IF;
233 
234 
235      IF (px_SALES_LEAD_rec.QUALIFIED_FLAG IS NULL) OR
236              (px_SALES_LEAD_rec.QUALIFIED_FLAG = FND_API.G_MISS_CHAR
237               AND p_mode = AS_UTILITY_PVT.G_CREATE)
238           THEN
239               px_SALES_LEAD_rec.QUALIFIED_FLAG := 'N';
240      END IF;
241      IF (px_SALES_LEAD_rec.LEAD_RANK_IND IS NULL) OR
242              (px_SALES_LEAD_rec.LEAD_RANK_IND = FND_API.G_MISS_CHAR
243               AND p_mode = AS_UTILITY_PVT.G_CREATE)
244           THEN
245               px_SALES_LEAD_rec.LEAD_RANK_IND := 'N';
246      END IF;
247 
248 
249      --IF (px_SALES_LEAD_rec.budget_amount is not NULL) and
250      --   (px_SALES_LEAD_rec.budget_amount <> FND_API.G_MISS_NUM)
251      --THEN
252          If (px_SALES_LEAD_rec.currency_code IS NULL) or
253             (px_SALES_LEAD_rec.currency_code = FND_API.G_MISS_CHAR
254              and p_mode = AS_UTILITY_PVT.G_CREATE)
255          THEN
256             px_SALES_LEAD_rec.currency_code :=
257                          FND_PROFILE.VALUE('JTF_PROFILE_DEFAULT_CURRENCY');
258          End If;
259      --END IF;
260 
261 End Set_default_values;
262 --end ffang 092000 for bug 1400244
263 -- end solin 122000 for bug 1514981
264 
265 
266 
267 -- *************************
268 --   Validation Procedures
269 -- *************************
270 --
271 -- Item level validation procedures
272 --
273 
274 /* Since this column is not required, this validation procedure
275 is not needed any more. ffang 05/15/00
276 PROCEDURE Validate_LEAD_NUMBER (
277     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
278     P_Validation_mode            IN   VARCHAR2,
279     P_LEAD_NUMBER                IN   VARCHAR2,
280     X_Return_Status              OUT NOCOPY  VARCHAR2,
281     X_Msg_Count                  OUT NOCOPY  NUMBER,
282     X_Msg_Data                   OUT NOCOPY  VARCHAR2
283     )
284 IS
285 BEGIN
286       -- Initialize message list IF p_init_msg_list is set to TRUE.
287       IF FND_API.to_Boolean( p_init_msg_list )
288       THEN
289           FND_MSG_PUB.initialize;
290       END IF;
291 
292       -- Initialize API return status to SUCCESS
293       x_return_status := FND_API.G_RET_STS_SUCCESS;
294 
295 	 -- Validate Lead Number
296       IF(p_validation_mode = AS_UTILITY_PVT.G_CREATE) THEN
297         IF (p_LEAD_NUMBER is NULL OR p_LEAD_NUMBER = FND_API.G_MISS_CHAR) THEN
298            x_return_status := FND_API.G_RET_STS_ERROR;
299            IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
300            THEN
301               FND_MESSAGE.Set_Name('AS', 'API_MISSING_ID');
302               FND_MESSAGE.Set_Token('COLUMN', 'LEAD_NUMBER', FALSE);
303               FND_MSG_PUB.ADD;
304            END IF;
305         END IF;
306       ELSIF(p_validation_mode = AS_UTILITY_PVT.G_UPDATE) THEN
307         IF p_LEAD_NUMBER IS NULL  THEN
308            x_return_status := FND_API.G_RET_STS_ERROR;
309            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
310            THEN
311               FND_MESSAGE.Set_Name('AS', 'API_MISSING_ID');
312               FND_MESSAGE.Set_Token('COLUMN', 'LEAD_NUMBER', FALSE);
313               FND_MSG_PUB.ADD;
314            END IF;
315         END IF;
316       END IF;
317 
318       -- Standard call to get message count and IF count is 1, get message info.
319       FND_MSG_PUB.Count_And_Get
320       (  p_count          =>   x_msg_count,
321          p_data           =>   x_msg_data );
322 END Validate_LEAD_NUMBER;
323 */
324 
325 
326 PROCEDURE Validate_SALES_LEAD_ID (
327     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
328     P_Validation_mode            IN   VARCHAR2,
329     P_Sales_Lead_Id              IN   NUMBER,
330     X_Return_Status              OUT NOCOPY  VARCHAR2,
331     X_Msg_Count                  OUT NOCOPY  NUMBER,
332     X_Msg_Data                   OUT NOCOPY  VARCHAR2
333     )
334 IS
335   CURSOR C_Sales_Lead_Id_Exists (X_Sales_Lead_Id NUMBER) IS
336       SELECT 'X'
337       FROM  as_sales_leads
338       WHERE sales_lead_id = X_Sales_Lead_Id;
339 
340   l_val	VARCHAR2(1);
341 
342 BEGIN
343       -- Initialize message list IF p_init_msg_list is set to TRUE.
344       IF FND_API.to_Boolean( p_init_msg_list )
345       THEN
346           FND_MSG_PUB.initialize;
347       END IF;
348 
349       -- Initialize API return status to SUCCESS
350       x_return_status := FND_API.G_RET_STS_SUCCESS;
351 
352       -- Debug Message
353       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
354                                    -- 'Validate Sales Lead Id'); END IF;
355 
356       -- ffang 092000 for bug 1406777
357       -- Calling from Create API
358       IF(p_validation_mode = AS_UTILITY_PVT.G_CREATE)
359       THEN
360           IF (p_SALES_LEAD_ID is NOT NULL) and
361              (p_SALES_LEAD_ID <> FND_API.G_MISS_NUM)
362           THEN
363               OPEN  C_Sales_Lead_Id_Exists (p_Sales_Lead_Id);
364               FETCH C_Sales_Lead_Id_Exists into l_val;
365 
366               IF C_Sales_Lead_Id_Exists%NOTFOUND
367               THEN
368                   AS_UTILITY_PVT.Set_Message(
369                       p_msg_level => FND_MSG_PUB.G_MSG_LVL_ERROR,
370                       p_msg_name => 'API_INVALID_ID',
371                       p_token1 => 'SALES_LEAD_ID',
372                       p_token1_value => p_Sales_Lead_Id);
373 
374                   x_return_status := FND_API.G_RET_STS_ERROR;
375               END IF;
376               CLOSE C_Sales_Lead_Id_Exists ;
377           END IF;
378 
379       -- Calling from Update API
380       ELSIF(p_validation_mode = AS_UTILITY_PVT.G_UPDATE)
381       THEN
382           -- validate NOT NULL column
383           IF (p_sales_lead_id is NULL) or (p_sales_lead_id = FND_API.G_MISS_NUM)
384           THEN
385               AS_UTILITY_PVT.Set_Message(
386                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
387                   p_msg_name      => 'API_MISSING_LEAD_ID');
388 
389               x_return_status := FND_API.G_RET_STS_ERROR;
390           ELSE
391               OPEN  C_Sales_Lead_Id_Exists (p_sales_lead_id);
392               FETCH C_Sales_Lead_Id_Exists into l_val;
393 
394               IF C_Sales_Lead_Id_Exists%NOTFOUND
395               THEN
396                   AS_UTILITY_PVT.Set_Message(
397                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
398                       p_msg_name      => 'API_INVALID_LEAD_ID',
399                       p_token1        => 'VALUE',
400                       p_token1_value  => p_sales_lead_id );
401 
402                   x_return_status := FND_API.G_RET_STS_ERROR;
403               END IF;
404 
405               CLOSE C_Sales_Lead_Id_Exists;
406           END IF;
407       END IF;
408       -- end ffang 092000 for bug 1306777
409 
410       -- Standard call to get message count and IF count is 1, get message info.
411       FND_MSG_PUB.Count_And_Get
412       (  p_count          =>   x_msg_count,
413          p_data           =>   x_msg_data );
414 
415 END Validate_SALES_LEAD_ID;
416 
417 
418 
419 PROCEDURE Validate_Sales_Methodology_ID (
420     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
421     P_Validation_mode            IN   VARCHAR2,
422     P_Sales_Methodology_ID        IN   NUMBER,
423     X_Return_Status              OUT NOCOPY  VARCHAR2,
424     X_Msg_Count                  OUT NOCOPY  NUMBER,
425     X_Msg_Data                   OUT NOCOPY  VARCHAR2
426     )
427 IS
428 
429 -- 11.5.10 ckapoor
430 -- This cursor validates if the sales methodology passed in
431 -- corresponds to an active sales methodology with an active sales stage associated with it
432 
433     CURSOR C_Methodology_Exists (X_Sales_Methodology_ID NUMBER) IS
434      select 'X'
435       from as_sales_methodology_b asmb
436       --, as_sales_methodology_tl asmt
437       where trunc(nvl(asmb.start_date_active, sysdate)) <= trunc(sysdate)
438       and trunc(nvl(asmb.end_date_active, sysdate)) >= trunc(sysdate)
439       --and asmb.sales_methodology_id = asmt.sales_methodology_id
440       --and asmt.language = userenv('LANG')
441       and asmb.sales_methodology_id = X_Sales_Methodology_ID;
442 
443       -- ckapoor 05/11/04 bug 3621389 - change validation sql for sales methodology id
444 
445       --and exists (select 1 from as_sales_meth_stage_map b, as_sales_stages_all_b c
446       --              where asmb.sales_methodology_id = b.sales_methodology_id
447       --              and b.sales_stage_id = c.sales_stage_id
448       --              and c.applicability in ('LEAD', 'BOTH')
449       --              and c.enabled_flag = 'Y'
450       --              and trunc(nvl(c.start_date_active, sysdate)) <= trunc(sysdate)
451       --              and trunc(nvl(c.end_date_active, sysdate)) >= trunc(sysdate)
452       --              and rownum = 1);
453 
454 
455 
456     l_val	VARCHAR2(1);
457 BEGIN
458       -- Initialize message list IF p_init_msg_list is set to TRUE.
459       IF FND_API.to_Boolean( p_init_msg_list )
460       THEN
461           FND_MSG_PUB.initialize;
462       END IF;
463 
464       -- Initialize API return status to SUCCESS
465       x_return_status := FND_API.G_RET_STS_SUCCESS;
466 
467       -- Debug Message
468       IF (AS_DEBUG_LOW_ON) THEN
469       	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
470                                    'Validate SALES methodology id'); END IF;
471 
472      IF (p_validation_mode=AS_UTILITY_PVT.G_CREATE and (P_Sales_Methodology_ID IS NOT NULL) and
473          (P_Sales_Methodology_ID <> FND_API.G_MISS_NUM))
474 --            OR
475 --         (p_validation_mode=AS_UTILITY_PVT.G_UPDATE)
476       THEN
477         OPEN C_Methodology_Exists ( p_Sales_Methodology_ID);
478         FETCH C_Methodology_Exists into l_val;
479         IF C_Methodology_Exists%NOTFOUND
480         THEN
481             AS_UTILITY_PVT.Set_Message(
482                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
483                 p_msg_name      => 'API_INVALID_ID',
484                 p_token1        => 'COLUMN',
485                 p_token1_value  => 'SALES METHODOLOGY',
486                 p_token2        => 'VALUE',
487                 p_token2_value  =>  p_Sales_Methodology_ID );
488 
489             x_return_status := FND_API.G_RET_STS_ERROR;
490         END IF;
491         CLOSE C_Methodology_Exists;
492       END IF;
493 
494 
495       -- Standard call to get message count and IF count is 1, get message info.
496       FND_MSG_PUB.Count_And_Get
497       (  p_count          =>   x_msg_count,
498          p_data           =>   x_msg_data );
499 END Validate_Sales_Methodology_ID;
500 
501 
502 
503 PROCEDURE Validate_Sales_Stage_ID (
504     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
505     P_Validation_mode            IN   VARCHAR2,
506     P_Sales_Methodology_ID        IN   NUMBER,
507     P_Sales_Stage_ID		 IN    NUMBER,
508     X_Return_Status              OUT NOCOPY  VARCHAR2,
509     X_Msg_Count                  OUT NOCOPY  NUMBER,
510     X_Msg_Data                   OUT NOCOPY  VARCHAR2
511     )
512 IS
513 
514 -- 11.5.10 ckapoor
515 -- This cursor validates if the sales stage corresponds to the sales meth id passed in
516 
517     CURSOR C_Sales_Stage_Exists(X_Sales_Methodology_ID NUMBER, X_Sales_Stage_ID NUMBER) IS
518      SELECT 'X'
519       FROM AS_SALES_METH_STAGE_MAP asms
520       , AS_SALES_STAGES_ALL_B assa
521       WHERE asms.sales_stage_id = assa.sales_stage_id
522         AND TRUNC(NVL(assa.start_date_active, SYSDATE)) <= TRUNC(SYSDATE)
523        AND TRUNC(NVL(assa.end_date_active, SYSDATE)) >= TRUNC(SYSDATE)
524        AND sales_methodology_id = X_Sales_Methodology_ID
525        AND assa.applicability IN ('LEAD', 'BOTH')
526        -- ckapoor 05/11/04 bug 3621389 -
527        -- adding new additional condition as per AUYU
528        AND assa.enabled_flag = 'Y'
529        -- end ckapoor
530        AND asms.sales_stage_id = X_Sales_Stage_ID
531 
532        ;
533    -- ORDER BY asms.stage_sequence
534 
535 
536 
537     l_val	VARCHAR2(1);
538 
539 BEGIN
540       -- Initialize message list IF p_init_msg_list is set to TRUE.
541       IF FND_API.to_Boolean( p_init_msg_list )
542       THEN
543           FND_MSG_PUB.initialize;
544       END IF;
545 
546       -- Initialize API return status to SUCCESS
547       x_return_status := FND_API.G_RET_STS_SUCCESS;
548 
549       -- Debug Message
550       IF (AS_DEBUG_LOW_ON) THEN
551       	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
552                                    'Validate SALES Stage id');
553 
554       END IF;
555 
556      IF (p_validation_mode=AS_UTILITY_PVT.G_CREATE and (P_Sales_Stage_ID IS NOT NULL) and
557          (P_Sales_Stage_ID <> FND_API.G_MISS_NUM))
558 --            OR
559 --         (p_validation_mode=AS_UTILITY_PVT.G_UPDATE)
560       THEN
561         OPEN C_Sales_Stage_Exists ( p_Sales_Methodology_ID, p_Sales_Stage_ID);
562         FETCH C_Sales_Stage_Exists into l_val;
563         IF C_Sales_Stage_Exists%NOTFOUND
564         THEN
565             AS_UTILITY_PVT.Set_Message(
566                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
567                 p_msg_name      => 'API_INVALID_ID',
568                 p_token1        => 'COLUMN',
569                 p_token1_value  => 'SALES STAGE',
570                 p_token2        => 'VALUE',
571                 p_token2_value  =>  p_Sales_Stage_ID );
572 
573             x_return_status := FND_API.G_RET_STS_ERROR;
574         END IF;
575         CLOSE C_Sales_Stage_Exists;
576       END IF;
577 
578 
579       -- Standard call to get message count and IF count is 1, get message info.
580       FND_MSG_PUB.Count_And_Get
581       (  p_count          =>   x_msg_count,
582          p_data           =>   x_msg_data );
583 END Validate_Sales_Stage_ID;
584 
585 
586 
587 
588 
589 PROCEDURE Validate_CUSTOMER_ID (
590     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
591     P_Validation_mode            IN   VARCHAR2,
592     P_CUSTOMER_ID                IN   NUMBER,
593     X_Return_Status              OUT NOCOPY  VARCHAR2,
594     X_Msg_Count                  OUT NOCOPY  NUMBER,
595     X_Msg_Data                   OUT NOCOPY  VARCHAR2
596     )
597 IS
598 -- solin, 02/01/2001, replace view AS_PARTY_CUSTOMERS_V with table HZ_PARTIES
599   CURSOR 	C_Customer_Id_Exists (c_Customer_Id NUMBER) IS
600      SELECT 'X'
601      FROM  HZ_PARTIES
602      WHERE PARTY_TYPE IN ('PERSON', 'ORGANIZATION')
603      AND   PARTY_ID = c_Customer_Id;
604 
605   CURSOR        C_Customer_is_active(c_Customer_Id NUMBER) IS
606         SELECT status
607         FROM  hz_parties
608         WHERE PARTY_TYPE IN ('PERSON', 'ORGANIZATION')
609      	AND   PARTY_ID = c_Customer_Id;
610 
611   l_val   VARCHAR2(1);
612   l_status VARCHAR2(1);
613 BEGIN
614       -- Initialize message list if p_init_msg_list is set to TRUE.
615       IF FND_API.to_Boolean( p_init_msg_list )
616       THEN
617           FND_MSG_PUB.initialize;
618       END IF;
619 
620       -- Initialize API return status to SUCCESS
621       x_return_status := FND_API.G_RET_STS_SUCCESS;
622 
623       IF ((p_CUSTOMER_ID is NULL) or (p_CUSTOMER_ID = FND_API.G_MISS_NUM)
624 		AND p_validation_mode = AS_UTILITY_PVT.G_CREATE)
625          OR
626          (p_CUSTOMER_ID is NULL AND p_validation_mode=AS_UTILITY_PVT.G_UPDATE)
627       THEN
628           IF (AS_DEBUG_LOW_ON) THEN
629 
630           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
631                       'Private API: Violate NOT NULL constraint(CUSTOMER_ID)');
632           END IF;
633 
634           AS_UTILITY_PVT.Set_Message(
635               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
636               p_msg_name      => 'API_MISSING_ID',
637               p_token1        => 'COLUMN',
638               p_token1_value  => 'CUSTOMER_ID');
639 
640           x_return_status := FND_API.G_RET_STS_ERROR;
641       ELSIF(p_CUSTOMER_ID is not NULL) AND (p_CUSTOMER_ID <> FND_API.G_MISS_NUM)
642       THEN
643           OPEN  C_Customer_Id_Exists (p_Customer_Id);
644           FETCH C_Customer_Id_Exists into l_val;
645           IF C_Customer_Id_Exists%NOTFOUND
646           THEN
647               IF (AS_DEBUG_LOW_ON) THEN
648 
649               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
650                                   'Private API: CUSTOMER_ID is not valid:' ||
651                                   p_Customer_Id);
652               END IF;
653 
654               AS_UTILITY_PVT.Set_Message(
655                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
656                   p_msg_name      => 'API_INVALID_CUSTOMER_ID',
657                   p_token1        => 'COLUMN',
658       		      p_token1_value  => 'CUSTOMER_ID',
659 	   	          p_token2        => 'VALUE',
660 		          p_token2_value  =>  p_CUSTOMER_ID );
661 
662               x_return_status := FND_API.G_RET_STS_ERROR;
663           END IF;
664           CLOSE C_Customer_Id_Exists;
665 
666 	 -- do the customer is inactive check only at time of create. allow updates.
667 	 IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE) THEN
668           OPEN  C_Customer_is_active (p_Customer_Id);
669 	    FETCH C_Customer_is_active into l_status;
670 	    --IF (l_status = 'I')
671 	    IF (l_status <> 'A') -- take care of party merge
672 	    THEN
673 		IF (AS_DEBUG_LOW_ON) THEN
674 
675 		AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
676 				    'Private API: CUSTOMER_ID is not active:' ||
677 				    p_Customer_Id);
678 		END IF;
679 
680 		AS_UTILITY_PVT.Set_Message(
681 		    p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
682 		    p_msg_name      => 'API_INACTIVE_CUSTOMER_ID');
683 
684 
685 		x_return_status := FND_API.G_RET_STS_ERROR;
686 	    END IF;
687 	    CLOSE C_Customer_is_active;
688 	  END IF;
689 
690 
691       END IF;
692 
693       -- Standard call to get message count and if count is 1, get message info.
694       FND_MSG_PUB.Count_And_Get
695       (  p_count          =>   x_msg_count,
696          p_data           =>   x_msg_data
697       );
698 
699 END Validate_CUSTOMER_ID;
700 
701 
702 
703 PROCEDURE Validate_ADDRESS_ID (
704     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
705     P_Validation_mode            IN   VARCHAR2,
706     P_CUSTOMER_ID                IN   NUMBER,
707     P_ADDRESS_ID                 IN   NUMBER,
708     X_Return_Status              OUT NOCOPY  VARCHAR2,
709     X_Msg_Count                  OUT NOCOPY  NUMBER,
710     X_Msg_Data                   OUT NOCOPY  VARCHAR2
711     )
712 IS
713 l_check_address  VARCHAR2(1);
714 
715 BEGIN
716       -- Initialize message list if p_init_msg_list is set to TRUE.
717       IF FND_API.to_Boolean( p_init_msg_list )
718       THEN
719           FND_MSG_PUB.initialize;
720       END IF;
721 
722       -- Initialize API return status to SUCCESS
723       x_return_status := FND_API.G_RET_STS_SUCCESS;
724 
725       IF (p_ADDRESS_ID is not NULL) and (p_ADDRESS_ID <> FND_API.G_MISS_NUM)
726       THEN
727           IF (p_CUSTOMER_ID is NULL) or (p_CUSTOMER_ID = FND_API.G_MISS_NUM)
728           THEN
729               -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
730               --             'Private API: Violate NOT NULL(CUSTOMER_ID)'); END IF;
731 
732               AS_UTILITY_PVT.Set_Message(
733                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
734                   p_msg_name      => 'API_MISSING_ID',
735                   p_token1        => 'COLUMN',
736                   p_token1_value  => 'CUSTOMER_ID');
737 
738               x_return_status := FND_API.G_RET_STS_ERROR;
739           ELSE
740               AS_TCA_PVT.validate_party_site_id(
741                   p_init_msg_list          => FND_API.G_FALSE,
742                   p_party_id               => P_CUSTOMER_ID,
743                   p_party_site_id          => P_ADDRESS_ID,
744                   x_return_status          => x_return_status,
745                   x_msg_count              => x_msg_count,
746                   x_msg_data               => x_msg_data);
747 
748               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
749                   IF (AS_DEBUG_LOW_ON) THEN
750 
751                   AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
752                                           'Private API: ADDRESS_ID is invalid');
753                   END IF;
754 
755                   AS_UTILITY_PVT.Set_Message(
756                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
757                       p_msg_name      => 'API_INVALID_ID',
758                       p_token1        => 'COLUMN',
759                       p_token1_value  => 'ADDRESS_ID',
760                       p_token2        => 'VALUE',
761                       p_token2_value  =>  p_ADDRESS_ID );
762               END IF;
763           END IF;
764       -- For bug 1544448
765       ELSIF p_ADDRESS_ID = FND_API.G_MISS_NUM AND
766             p_validation_mode = AS_UTILITY_PVT.G_UPDATE
767       THEN
768  	     NULL;
769       ELSE  -- address_id is NULL or g_miss_num
770           -- For bug 1501336, check profile option AS_CUSTOMER_ADDRESS_REQUIRED
771           -- to check if address_id is required or not
772           -- AS_CUSTOMER_ADDRESS_REQUIRED is obsoleted. Use AS_LEAD_ADDRESS_REQUIRED
773           IF (AS_DEBUG_LOW_ON) THEN
774 
775           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
776                                        'ADDRESS_ID is not entered');
777           END IF;
778           IF (AS_DEBUG_LOW_ON) THEN
779 
780           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
781                   'ADDRESS_REQUIRED: ' || FND_PROFILE.Value('AS_LEAD_ADDRESS_REQUIRED'));
782                   --FND_PROFILE.Value('AS_CUSTOMER_ADDRESS_REQUIRED'));
783           END IF;
784 
785           l_check_address :=
786                     --nvl(FND_PROFILE.Value('AS_CUSTOMER_ADDRESS_REQUIRED'),'Y');
787                     nvl(FND_PROFILE.Value('AS_LEAD_ADDRESS_REQUIRED'),'Y');
788           IF (l_check_address = 'Y')
789           THEN
790               AS_UTILITY_PVT.Set_Message(
791                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
792                   p_msg_name      => 'API_MISSING_ADDRESS_ID');
793 
794 
795               x_return_status := FND_API.G_RET_STS_ERROR;
796           END IF;
797       END IF;
798 
799       -- Standard call to get message count and if count is 1, get message info.
800       FND_MSG_PUB.Count_And_Get
801       (  p_count          =>   x_msg_count,
802          p_data           =>   x_msg_data
803       );
804 
805 END Validate_ADDRESS_ID;
806 
807 
808 PROCEDURE Validate_STATUS_CODE (
809     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
810     P_Validation_mode            IN   VARCHAR2,
811     P_STATUS_CODE                IN   VARCHAR2,
812     P_Sales_Lead_Id		 IN   NUMBER,
813     X_Return_Status              OUT NOCOPY  VARCHAR2,
814     X_Msg_Count                  OUT NOCOPY  NUMBER,
815     X_Msg_Data                   OUT NOCOPY  VARCHAR2
816     )
817 IS
818   CURSOR C_Status_Exists (X_Lookup_Code VARCHAR2) IS
819       SELECT 'X'
820       FROM  as_statuses_b
821       WHERE lead_flag = 'Y' and enabled_flag = 'Y'
822             and status_code = X_Lookup_Code;
823             -- ffang 012501, add more criteria
824             -- sync up with validation used in status dropdown
825             --and usage_indicator in ('ALL', 'OS', 'PRM');
826 
827   CURSOR C_Opp_Exists (X_Sales_Lead_Id NUMBER) IS
828       SELECT 'X'
829       FROM  as_sales_lead_opportunity
830       WHERE sales_lead_id = X_Sales_Lead_Id;
831 
832   Cursor C_GET_STATUS_CODE (c_sales_lead_id NUMBER) IS
833         SELECT status_code
834         FROM as_sales_leads
835         WHERE sales_lead_id = c_sales_lead_id;
836 
837 
838   l_val	VARCHAR2(1);
839   l_status_code   VARCHAR2(30);
840 
841   l_newStateTransition VARCHAR2(1);
842   l_linkStatus VARCHAR2(30);
843 BEGIN
844       -- Initialize message list IF p_init_msg_list is set to TRUE.
845       IF FND_API.to_Boolean( p_init_msg_list )
846       THEN
847           FND_MSG_PUB.initialize;
848       END IF;
849 
850       -- Initialize API return status to SUCCESS
851       x_return_status := FND_API.G_RET_STS_SUCCESS;
852 
853       -- Debug Message
854       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
855                                    -- 'Validate status code'); END IF;
856       -- Validate status code
857       IF ((p_status_code is NULL or p_status_code = FND_API.G_MISS_CHAR)
858 		AND p_validation_mode=AS_UTILITY_PVT.G_CREATE)
859 	    OR
860          (p_status_code IS NULL AND p_validation_mode=AS_UTILITY_PVT.G_UPDATE)
861       THEN
862           AS_UTILITY_PVT.Set_Message(
863               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
864               p_msg_name      => 'API_MISSING_ID',
865               p_token1        => 'COLUMN',
866               p_token1_value  => 'STATUS_CODE' );
867 
868           x_return_status := FND_API.G_RET_STS_ERROR;
869 
870       ELSIF (p_status_code <> FND_API.G_MISS_CHAR)
871 	 THEN
872         OPEN C_Status_Exists ( p_status_code);
873         FETCH C_Status_Exists into l_val;
874 
875         IF C_Status_Exists%NOTFOUND
876         THEN
877             AS_UTILITY_PVT.Set_Message(
878                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
879                 p_msg_name      => 'API_INVALID_ID',
880                 p_token1        => 'COLUMN',
881                 p_token1_value  => 'STATUS_CODE',
882                 p_token2        => 'VALUE',
883                 p_token2_value  =>  p_STATUS_CODE );
884 
885             x_return_status := FND_API.G_RET_STS_ERROR;
886         END IF;
887         CLOSE C_Status_Exists ;
888       END IF;
889 
890 	-- 11.5.9 additional validation.If the user is changing status to
891 	-- OS: Lead Link Status profile (e.g Converted to Opportunity) then
892         -- first check lead link table to make sure an opportunity exists
893 	-- This check will be dependent on a profile.
894 	--l_val := 'N';
895 	l_newStateTransition := FND_PROFILE.VALUE('AS_LEAD_STATE_TRANSITION');
896 	l_linkStatus := FND_PROFILE.VALUE('AS_LEAD_LINK_STATUS');
897 
898       OPEN C_GET_STATUS_CODE (p_sales_lead_id);
899       FETCH C_GET_STATUS_CODE INTO l_status_code;
900       CLOSE C_GET_STATUS_CODE;
901 
902 
903 	if p_status_code <> FND_API.G_MISS_CHAR and l_status_code <> p_status_code and p_validation_mode = AS_UTILITY_PVT.G_update and l_newStateTransition = 'Y' and l_linkStatus = l_status_code
904 	  then
905 	  AS_UTILITY_PVT.Set_Message(
906 		   			p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
907 		   			p_msg_name      => 'AS_INVALID_STATUS_TRANSITION'
908 			);
909 
910 	   x_return_status := FND_API.G_RET_STS_ERROR;
911 
912 	end if;
913 
914 
915 	-- ckapoor Lead state transition fixes for 11.5.10
916 
917 	if ((l_newStateTransition = 'Y') AND (p_validation_mode = AS_UTILITY_PVT.G_CREATE)
918 	     AND (p_status_code = l_linkStatus) )
919 	then
920 		   AS_UTILITY_PVT.Set_Message(
921 			   			p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
922 			   			p_msg_name      => 'AS_NO_LEAD_CREATE_STATUS'
923 				);
924 
925 			   x_return_status := FND_API.G_RET_STS_ERROR;
926 
927 	 end if;
928 
929 	 -- end ckapoor
930 
931 
932 
933 
934 /*	if (l_newStateTransition = 'Y') then
935 
936 		if (p_validation_mode = AS_UTILITY_PVT.G_CREATE) then
937 
938 		  if (p_status_code = l_linkStatus) then
939 
940 		   AS_UTILITY_PVT.Set_Message(
941 		   			p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
942 		   			p_msg_name      => 'AS_NO_LEAD_CREATE_STATUS'
943 			);
944 
945 		   x_return_status := FND_API.G_RET_STS_ERROR;
946 
947 		  end if;
948 
949 		elsif (p_validation_mode=AS_UTILITY_PVT.G_UPDATE) then
950 
951 		if (p_status_code = l_linkStatus) then
952 
953 		OPEN C_opp_exists (p_sales_lead_id);
954 		FETCH C_opp_exists into l_val;
955 
956 		IF C_opp_exists%NOTFOUND
957 		THEN
958 		    AS_UTILITY_PVT.Set_Message(
959 			p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
960 			p_msg_name      => 'AS_NO_LEAD_UPDATE_NO_OPP'
961 			);
962 
963 		        x_return_status := FND_API.G_RET_STS_ERROR;
964 		END IF;
965         	CLOSE C_opp_exists ;
966 
967         	end if;
968 
969 
970 
971         	end if;
972 
973 
974 	end if; */
975 
976 
977 
978       -- Standard call to get message count and IF count is 1, get message info.
979       FND_MSG_PUB.Count_And_Get
980       (  p_count          =>   x_msg_count,
981          p_data           =>   x_msg_data );
982 END Validate_STATUS_CODE;
983 
984 PROCEDURE Validate_SOURCE_PROMOTION_ID (
985     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
986     P_Validation_mode            IN   VARCHAR2,
987     P_SOURCE_PROMOTION_ID        IN   NUMBER,
988     X_Return_Status              OUT NOCOPY  VARCHAR2,
989     X_Msg_Count                  OUT NOCOPY  NUMBER,
990     X_Msg_Data                   OUT NOCOPY  VARCHAR2
991     )
992 IS
993 
994     CURSOR C_Promotion_Exists (X_Promotion_Id NUMBER) IS
995      SELECT 'X'
996      FROM ams_p_source_codes_v
997      WHERE source_code_id = X_promotion_id
998      and source_type in ('CAMP','CSCH','EONE', 'EVEH','EVEO')
999      and status in ('ACTIVE','ONHOLD', 'COMPLETED');
1000 
1001 
1002      --SELECT  'X'
1003      --	FROM  ams_source_codes
1004      --	WHERE source_code_id = X_promotion_id
1005      --	and active_flag = 'Y';
1006 
1007     l_val	VARCHAR2(1);
1008     l_source_promotion_id VARCHAR2(1);
1009 BEGIN
1010       -- Initialize message list IF p_init_msg_list is set to TRUE.
1011       IF FND_API.to_Boolean( p_init_msg_list )
1012       THEN
1013           FND_MSG_PUB.initialize;
1014       END IF;
1015 
1016       -- Initialize API return status to SUCCESS
1017       x_return_status := FND_API.G_RET_STS_SUCCESS;
1018 
1019       -- Debug Message
1020       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1021                                    -- 'Validate source promotion id'); END IF;
1022 
1023       IF (AS_DEBUG_LOW_ON) THEN
1024 
1025 
1026 
1027       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1028                         'SOURCE CODE REQUIRED: ' ||
1029                         FND_PROFILE.Value('AS_SOURCE_CODE_MANDATORY_LEADS'));
1030 
1031       END IF;
1032 
1033       l_source_promotion_id :=
1034                           nvl(FND_PROFILE.Value('AS_SOURCE_CODE_MANDATORY_LEADS'),'Y');
1035 
1036 
1037       -- validate SOURCE_PROMOTION_ID (NOT NULL column)
1038      IF (l_source_promotion_id='Y' AND ( p_source_promotion_id is NULL or
1039            p_source_promotion_id  =FND_API.G_MISS_NUM)
1040                 AND p_validation_mode=AS_UTILITY_PVT.G_CREATE)
1041             OR
1042          (l_source_promotion_id='Y' AND p_source_promotion_id IS NULL
1043                 AND p_validation_mode=AS_UTILITY_PVT.G_UPDATE)
1044       THEN
1045         AS_UTILITY_PVT.Set_Message(
1046             p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1047             p_msg_name      => 'API_MISSING_ID',
1048             p_token1        => 'COLUMN',
1049             p_token1_value  => 'SOURCE NAME');
1050 
1051         x_return_status := FND_API.G_RET_STS_ERROR;
1052 
1053       ELSIF (p_source_promotion_id <> FND_API.G_MISS_NUM)
1054             and (p_validation_mode <> AS_UTILITY_PVT.G_UPDATE) -- added by bmuthukr for fixing bug 3817333. val not reqd during updates.
1055       --IF ((p_source_promotion_id is NOT NULL AND
1056       --     p_source_promotion_id  <> FND_API.G_MISS_NUM))
1057    	  THEN
1058         OPEN C_Promotion_Exists ( p_source_promotion_id);
1059         FETCH C_Promotion_Exists into l_val;
1060         IF C_Promotion_Exists%NOTFOUND
1061         THEN
1062             AS_UTILITY_PVT.Set_Message(
1063                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1064                 p_msg_name      => 'API_INVALID_ID',
1065                 p_token1        => 'COLUMN',
1066                 p_token1_value  => 'SOURCE PROMOTION',
1067                 p_token2        => 'VALUE',
1068                 p_token2_value  =>  p_SOURCE_PROMOTION_ID );
1069 
1070             x_return_status := FND_API.G_RET_STS_ERROR;
1071         END IF;
1072         CLOSE C_Promotion_Exists;
1073       END IF;
1074 
1075 
1076       -- Standard call to get message count and IF count is 1, get message info.
1077       FND_MSG_PUB.Count_And_Get
1078       (  p_count          =>   x_msg_count,
1079          p_data           =>   x_msg_data );
1080 END Validate_SOURCE_PROMOTION_ID;
1081 
1082 
1083 PROCEDURE Validate_CHANNEL_CODE (
1084     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1085     P_Validation_mode            IN   VARCHAR2,
1086     P_CHANNEL_CODE               IN   VARCHAR2,
1087     X_Return_Status              OUT NOCOPY  VARCHAR2,
1088     X_Msg_Count                  OUT NOCOPY  NUMBER,
1089     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1090     )
1091 IS
1092     CURSOR C_Aso_Channel_Exists (X_Lookup_Code VARCHAR2) IS
1093 	 SELECT  'X'
1094       FROM  aso_i_sales_channels_v
1095       WHERE sales_channel_code = X_Lookup_Code
1096             -- ffang 012501, add more criteria
1097             and nvl(start_date_active, sysdate) <= sysdate
1098             and nvl(end_date_active, sysdate) >= sysdate
1099             and enabled_flag = 'Y';
1100 
1101     l_val VARCHAR2(1);
1102 BEGIN
1103 	 -- Initialize message list IF p_init_msg_list is set to TRUE.
1104       IF FND_API.to_Boolean( p_init_msg_list )
1105       THEN
1106           FND_MSG_PUB.initialize;
1107       END IF;
1108 
1109 	 -- Initialize API return status to SUCCESS
1110       x_return_status := FND_API.G_RET_STS_SUCCESS;
1111 
1112       -- Debug Message
1113       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1114                                    -- 'Validate channel code'); END IF;
1115 
1116       -- Validate channel code
1117       IF (p_channel_code is NOT NULL
1118           AND p_channel_code <> FND_API.G_MISS_CHAR)
1119       THEN
1120         OPEN C_Aso_Channel_Exists (p_channel_code);
1121         FETCH C_Aso_Channel_Exists into l_val;
1122         IF C_Aso_Channel_Exists%NOTFOUND
1123         THEN
1124             AS_UTILITY_PVT.Set_Message(
1125                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1126                 p_msg_name      => 'API_INVALID_ID',
1127                 p_token1        => 'COLUMN',
1128                 p_token1_value  => 'LEAD CHANNEL',
1129                 p_token2        => 'VALUE',
1130                 p_token2_value  =>  p_CHANNEL_CODE );
1131 
1132             x_return_status := FND_API.G_RET_STS_ERROR;
1133         END IF;
1134         CLOSE C_Aso_Channel_Exists;
1135       END IF;
1136 
1137 	 -- Standard call to get message count and IF count is 1, get message info.
1138       FND_MSG_PUB.Count_And_Get
1139       (  p_count          =>   x_msg_count,
1140          p_data           =>   x_msg_data );
1141 END Validate_CHANNEL_CODE;
1142 
1143 
1144 PROCEDURE Validate_CURRENCY_CODE (
1145     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1146     P_Validation_mode            IN   VARCHAR2,
1147     P_CURRENCY_CODE              IN   VARCHAR2,
1148     X_Return_Status              OUT NOCOPY  VARCHAR2,
1149     X_Msg_Count                  OUT NOCOPY  NUMBER,
1150     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1151     )
1152 IS
1153     CURSOR C_Currency_Exists (X_Currency_Code VARCHAR2) IS
1154       SELECT  'X'
1155       FROM  FND_LOOKUP_VALUES
1156       WHERE lookup_code = X_Currency_Code
1157 	    and LOOKUP_TYPE = 'REPORTING_CURRENCY'
1158 	    and	VIEW_APPLICATION_ID = 279
1159             -- ffang 012501
1160             and nvl(start_date_active, sysdate) <= sysdate
1161             and nvl(end_date_active, sysdate) >= sysdate
1162             and enabled_flag = 'Y';
1163 
1164     l_val VARCHAR2(1);
1165 BEGIN
1166       -- Initialize message list IF p_init_msg_list is set to TRUE.
1167       IF FND_API.to_Boolean( p_init_msg_list )
1168       THEN
1169           FND_MSG_PUB.initialize;
1170       END IF;
1171 
1172       -- Initialize API return status to SUCCESS
1173       x_return_status := FND_API.G_RET_STS_SUCCESS;
1174 
1175       -- Debug Message
1176       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1177                                    -- 'Validate currency code'); END IF;
1178 
1179       -- Validate Currency Code
1180       IF (p_currency_code is NOT NULL
1181           AND p_currency_code <> FND_API.G_MISS_CHAR)
1182       THEN
1183 	    OPEN C_Currency_Exists ( p_currency_code );
1184          FETCH C_Currency_Exists into l_val;
1185          IF C_Currency_Exists%NOTFOUND THEN
1186             AS_UTILITY_PVT.Set_Message(
1187                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1188                 p_msg_name      => 'API_INVALID_ID',
1189                 p_token1        => 'COLUMN',
1190                 p_token1_value  => 'CURRENCY',
1191                 p_token2        => 'VALUE',
1192                 p_token2_value  =>  p_CURRENCY_CODE );
1193 
1194             x_return_status := FND_API.G_RET_STS_ERROR;
1195          END IF;
1196          CLOSE C_Currency_Exists;
1197       END IF;
1198 
1199       -- Standard call to get message count and IF count is 1, get message info.
1200       FND_MSG_PUB.Count_And_Get
1201       (  p_count          =>   x_msg_count,
1202          p_data           =>   x_msg_data );
1203 END Validate_CURRENCY_CODE;
1204 
1205 
1206 PROCEDURE Validate_DECN_TIMEFRAME_CODE (
1207     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1208     P_Validation_mode            IN   VARCHAR2,
1209     P_DECISION_TIMEFRAME_CODE    IN   VARCHAR2,
1210     X_Return_Status              OUT NOCOPY  VARCHAR2,
1211     X_Msg_Count                  OUT NOCOPY  NUMBER,
1212     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1213     )
1214 IS
1215     CURSOR C_Lookup_Exists (X_Lookup_Code VARCHAR2, X_Lookup_Type VARCHAR2) IS
1216       SELECT  'X'
1217       FROM  as_lookups
1218       WHERE lookup_type = X_Lookup_Type
1219             and lookup_code = X_Lookup_Code
1220             -- ffang 012501
1221             and enabled_flag = 'Y';
1222 
1223     l_val  VARCHAR2(1);
1224 BEGIN
1225 
1226       -- Initialize message list IF p_init_msg_list is set to TRUE.
1227       IF FND_API.to_Boolean( p_init_msg_list )
1228       THEN
1229           FND_MSG_PUB.initialize;
1230       END IF;
1231 
1232       -- Initialize API return status to SUCCESS
1233       x_return_status := FND_API.G_RET_STS_SUCCESS;
1234 
1235       -- Debug Message
1236       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1237                                    -- 'Validate decision tf code'); END IF;
1238 
1239       -- Validate decision timeframe code
1240       IF (p_decision_timeframe_code is NOT NULL
1241           AND p_decision_timeframe_code <> FND_API.G_MISS_CHAR) THEN
1242         OPEN C_Lookup_Exists ( p_decision_timeframe_code, 'DECISION_TIMEFRAME');
1243         FETCH C_Lookup_Exists into l_val;
1244 
1245         IF C_Lookup_Exists%NOTFOUND
1246         THEN
1247            AS_UTILITY_PVT.Set_Message(
1248                p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1249                p_msg_name      => 'API_INVALID_ID',
1250                p_token1        => 'COLUMN',
1251                p_token1_value  => 'DECISION TIMEFRAME_CODE',
1252                p_token2        => 'VALUE',
1253                p_token2_value  =>  p_DECISION_TIMEFRAME_CODE );
1254 
1255            x_return_status := FND_API.G_RET_STS_ERROR;
1256         END IF;
1257         CLOSE C_Lookup_Exists;
1258       END IF;
1259 
1260       FND_MSG_PUB.Count_And_Get
1261       (  p_count          =>   x_msg_count,
1262          p_data           =>   x_msg_data );
1263 END Validate_DECN_TIMEFRAME_CODE;
1264 
1265 
1266 PROCEDURE Validate_CLOSE_REASON (
1267     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1268     P_Validation_mode            IN   VARCHAR2,
1269     P_CLOSE_REASON               IN   VARCHAR2,
1270     X_Return_Status              OUT NOCOPY  VARCHAR2,
1271     X_Msg_Count                  OUT NOCOPY  NUMBER,
1272     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1273     )
1274 IS
1275     CURSOR C_Lookup_Exists (X_Lookup_Code VARCHAR2, X_Lookup_Type VARCHAR2) IS
1276       SELECT  'X'
1277       FROM  as_lookups
1278       WHERE lookup_type = X_Lookup_Type
1279             and lookup_code = X_Lookup_Code
1280             -- ffang 012501
1281             and enabled_flag = 'Y';
1282 
1283     l_val  VARCHAR2(1);
1284 BEGIN
1285       -- Initialize message list IF p_init_msg_list is set to TRUE.
1286       IF FND_API.to_Boolean( p_init_msg_list )
1287       THEN
1288           FND_MSG_PUB.initialize;
1289       END IF;
1290 
1291       -- Initialize API return status to SUCCESS
1292       x_return_status := FND_API.G_RET_STS_SUCCESS;
1293 
1294       -- Debug Message
1295       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1296                                    -- 'Validate close reason'); END IF;
1297 
1298       -- Validate Close Reason
1299       IF (p_close_reason is NOT NULL AND p_close_reason <> FND_API.G_MISS_CHAR)
1300 	 THEN
1301         OPEN C_Lookup_Exists ( p_close_reason, 'CLOSE_REASON' );
1302         FETCH C_Lookup_Exists into l_val;
1303 
1304         IF C_Lookup_Exists%NOTFOUND
1305         THEN
1306            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
1307            THEN
1308              AS_UTILITY_PVT.Set_Message(
1309                  p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1310                  p_msg_name      => 'API_INVALID_ID',
1311                  p_token1        => 'COLUMN',
1312                  p_token1_value  => 'CLOSE REASON',
1313                  p_token2        => 'VALUE',
1314                  p_token2_value  =>  p_CLOSE_REASON );
1315            END IF;
1316            x_return_status := FND_API.G_RET_STS_ERROR;
1317         END IF;
1318         CLOSE C_Lookup_Exists;
1319       END IF;
1320       -- Standard call to get message count and IF count is 1, get message info.
1321       FND_MSG_PUB.Count_And_Get
1322       (  p_count          =>   x_msg_count,
1323          p_data           =>   x_msg_data );
1324 END Validate_CLOSE_REASON;
1325 
1326 
1327 PROCEDURE Validate_LEAD_RANK_ID (
1328     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1329     P_Validation_mode            IN   VARCHAR2,
1330     P_LEAD_RANK_ID               IN   NUMBER,
1331     X_Return_Status              OUT NOCOPY  VARCHAR2,
1332     X_Msg_Count                  OUT NOCOPY  NUMBER,
1333     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1334     )
1335 IS
1336     CURSOR C_Rank_Exists (X_Rank_id NUMBER) IS
1337       SELECT  'X'
1338       FROM  as_sales_lead_ranks_b
1339       WHERE rank_id = X_Rank_id
1340             and enabled_flag = 'Y';
1341     l_val  VARCHAR2(1);
1342 BEGIN
1343       -- Initialize message list IF p_init_msg_list is set to TRUE.
1344       IF FND_API.to_Boolean( p_init_msg_list )
1345       THEN
1346           FND_MSG_PUB.initialize;
1347       END IF;
1348 
1349       -- Initialize API return status to SUCCESS
1350       x_return_status := FND_API.G_RET_STS_SUCCESS;
1351 
1352       -- Debug Message
1353       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1354                                    -- 'Validate rank id'); END IF;
1355 
1356       -- Validate rank id
1357       IF (p_LEAD_RANK_ID is NOT NULL
1358           AND p_LEAD_RANK_ID <> FND_API.G_MISS_NUM)
1359       THEN
1360         OPEN C_Rank_Exists ( p_LEAD_RANK_ID );
1361         FETCH C_Rank_Exists into l_val;
1362 
1363         IF C_Rank_Exists%NOTFOUND
1364         THEN
1365           AS_UTILITY_PVT.Set_Message(
1366               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1367               p_msg_name      => 'API_INVALID_ID',
1368               p_token1        => 'COLUMN',
1369               p_token1_value  => 'LEAD_RANK_ID',
1370               p_token2        => 'VALUE',
1371               p_token2_value  =>  p_LEAD_RANK_ID );
1372           x_return_status := FND_API.G_RET_STS_ERROR;
1373         END IF;
1374         CLOSE C_Rank_Exists;
1375       END IF;
1376 
1377       FND_MSG_PUB.Count_And_Get
1378       (  p_count          =>   x_msg_count,
1379          p_data           =>   x_msg_data );
1380 END Validate_LEAD_RANK_ID;
1381 
1382 -- FFANG 08-30-00 For bug#1391034
1383 -- Assign_to_person_id keep person_id; should be validated against
1384 -- per_all_people_f
1385 PROCEDURE Validate_ASSIGN_TO_PERSON_ID (
1386     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1387     P_Validation_mode            IN   VARCHAR2,
1388     P_ASSIGN_TO_PERSON_ID        IN   NUMBER,
1389     X_Return_Status              OUT NOCOPY  VARCHAR2,
1390     X_Msg_Count                  OUT NOCOPY  NUMBER,
1391     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1392     )
1393 IS
1394     -- solin, bug 1570991, change to consider effective start and end date
1395     Cursor C_Check_Assign_Person (X_person_id NUMBER) IS
1396       SELECT 'X'
1397       FROM   per_all_people_f per,
1398              jtf_rs_resource_extns res
1399       WHERE  per.person_id = X_person_id
1400       AND    TRUNC(SYSDATE) BETWEEN per.effective_start_date
1401              AND per.effective_end_date
1402       AND    res.category = 'EMPLOYEE'
1403       AND    res.source_id = per.person_id;
1404 
1405     l_val	VARCHAR2(1);
1406 BEGIN
1407       -- Initialize message list IF p_init_msg_list is set to TRUE.
1408       IF FND_API.to_Boolean( p_init_msg_list )
1409       THEN
1410           FND_MSG_PUB.initialize;
1411       END IF;
1412 
1413       -- Initialize API return status to SUCCESS
1414       x_return_status := FND_API.G_RET_STS_SUCCESS;
1415 
1416       -- Debug Message
1417       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1418                                    -- 'Validate assign to person id'); END IF;
1419 
1420 	 -- Validate ASSIGN_TO_PERSON_ID
1421 	 IF (p_assign_to_person_id IS NOT NULL
1422           AND p_assign_to_person_id <> FND_API.G_MISS_NUM)
1423 	 THEN
1424         OPEN C_Check_Assign_Person (p_assign_to_person_id);
1425         FETCH C_Check_Assign_Person INTO l_val;
1426         IF (C_Check_Assign_Person%NOTFOUND)
1427         THEN
1428           AS_UTILITY_PVT.Set_Message(
1429                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1430                 p_msg_name      => 'API_INVALID_ID',
1431                 p_token1        => 'COLUMN',
1432                 p_token1_value  => 'ASSIGN_TO_PERSON_ID',
1433                 p_token2        => 'VALUE',
1434                 p_token2_value  =>  p_ASSIGN_TO_PERSON_ID );
1435 
1436           x_return_status := FND_API.G_RET_STS_ERROR;
1437         END IF;
1438         CLOSE C_Check_Assign_Person;
1439       END IF;
1440 
1441       FND_MSG_PUB.Count_And_Get
1442       (  p_count          =>   x_msg_count,
1443          p_data           =>   x_msg_data );
1444 END Validate_ASSIGN_TO_PERSON_ID;
1445 
1446 
1447 -- FFANG 08-30-00 For bug#1391034
1448 -- Assign_to_salesforce_id keep salesforce_id (resource_id); should be validated
1449 -- against jtf_rs_resource_extns
1450 PROCEDURE Validate_ASSIGN_TO_SF_ID (
1451     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1452     P_Validation_mode            IN   VARCHAR2,
1453     P_ASSIGN_TO_SALESFORCE_ID    IN   NUMBER,
1454     X_Return_Status              OUT NOCOPY  VARCHAR2,
1455     X_Msg_Count                  OUT NOCOPY  NUMBER,
1456     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1457     )
1458 IS
1459     -- solin, bug 1570991, change to consider category
1460     Cursor C_Check_Assign_Salesforce (X_Assign_Id NUMBER) IS
1461       SELECT 'X'
1462       FROM   per_all_people_f per,
1463              jtf_rs_resource_extns res,
1464              jtf_rs_role_relations rrel,
1465              jtf_rs_roles_b role
1466       WHERE  TRUNC(SYSDATE) BETWEEN per.effective_start_date
1467              AND per.effective_end_date
1468       AND    res.resource_id = rrel.role_resource_id
1469       AND    rrel.role_resource_type = 'RS_INDIVIDUAL'
1470       AND    rrel.role_id = role.role_id
1471       AND    role.role_type_code IN ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
1472 --changing for bug 2877597 ckapoor adding nvl since the role table contains
1473 -- Y/N and null
1474       AND    nvl(role.admin_flag, 'N') = 'N'
1475       AND    res.source_id = per.person_id
1476       AND    res.resource_id = X_Assign_Id
1477       -- ffang 012501
1478       AND    res.category = 'EMPLOYEE';
1479 
1480 
1481     l_val	VARCHAR2(1);
1482 BEGIN
1483       -- Initialize message list IF p_init_msg_list is set to TRUE.
1484       IF FND_API.to_Boolean( p_init_msg_list )
1485       THEN
1486           FND_MSG_PUB.initialize;
1487       END IF;
1488 
1489       -- Initialize API return status to SUCCESS
1490       x_return_status := FND_API.G_RET_STS_SUCCESS;
1491 
1492       -- Debug Message
1493       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1494                                    -- 'Validate assign to salesforce id'); END IF;
1495 
1496 	 -- Validate ASSIGN_TO_SALESFORCE_ID
1497 	 IF (p_assign_to_salesforce_id IS NOT NULL
1498           AND p_assign_to_salesforce_id <> FND_API.G_MISS_NUM)
1499 	 THEN
1500         OPEN C_Check_Assign_Salesforce (p_assign_to_salesforce_id);
1501         FETCH C_Check_Assign_Salesforce INTO l_val;
1502         IF (C_Check_Assign_Salesforce%NOTFOUND)
1503         THEN
1504           AS_UTILITY_PVT.Set_Message(
1505                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1506                 p_msg_name      => 'API_INVALID_ID',
1507                 p_token1        => 'COLUMN',
1508                 p_token1_value  => 'ASSIGN_TO_SALESFORCE_ID',
1509                 p_token2        => 'VALUE',
1510                 p_token2_value  =>  p_ASSIGN_TO_SALESFORCE_ID );
1511 
1512           x_return_status := FND_API.G_RET_STS_ERROR;
1513         END IF;
1514         CLOSE C_Check_Assign_Salesforce;
1515       END IF;
1516 
1517       FND_MSG_PUB.Count_And_Get
1518       (  p_count          =>   x_msg_count,
1519          p_data           =>   x_msg_data );
1520 END Validate_ASSIGN_TO_SF_ID;
1521 
1522 
1523 PROCEDURE Validate_BUDGET_STATUS_CODE (
1524     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1525     P_Validation_mode            IN   VARCHAR2,
1526     P_BUDGET_STATUS_CODE         IN   VARCHAR2,
1527     X_Return_Status              OUT NOCOPY  VARCHAR2,
1528     X_Msg_Count                  OUT NOCOPY  NUMBER,
1529     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1530     )
1531 IS
1532     CURSOR C_Lookup_Exists (X_Lookup_Code VARCHAR2, X_Lookup_Type VARCHAR2) IS
1533       SELECT  'X'
1534       FROM  as_lookups
1535       WHERE lookup_type = X_Lookup_Type
1536             and lookup_code = X_Lookup_Code
1537             -- ffang 012501
1538             and enabled_flag = 'Y';
1539 
1540     l_val	VARCHAR2(1);
1541 BEGIN
1542       -- Initialize message list IF p_init_msg_list is set to TRUE.
1543       IF FND_API.to_Boolean( p_init_msg_list )
1544       THEN
1545           FND_MSG_PUB.initialize;
1546       END IF;
1547 
1548       -- Initialize API return status to SUCCESS
1549       x_return_status := FND_API.G_RET_STS_SUCCESS;
1550 
1551       -- Debug Message
1552       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1553                                    -- 'Validate budget status code'); END IF;
1554 
1555       -- Validate budget status code
1556       IF (p_budget_status_code is NOT NULL
1557           AND p_budget_status_code <> FND_API.G_MISS_CHAR)
1558       THEN
1559         OPEN C_Lookup_Exists ( p_budget_status_code, 'BUDGET_STATUS');
1560         FETCH C_Lookup_Exists into l_val;
1561 
1562         IF C_Lookup_Exists%NOTFOUND
1563         THEN
1564            AS_UTILITY_PVT.Set_Message(
1565                p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1566                p_msg_name      => 'API_INVALID_ID',
1567                p_token1        => 'COLUMN',
1568                p_token1_value  => 'BUDGET_STATUS_CODE',
1569                p_token2        => 'VALUE',
1570                p_token2_value  =>  p_BUDGET_STATUS_CODE );
1571            x_return_status := FND_API.G_RET_STS_ERROR;
1572         END IF;
1573         CLOSE C_Lookup_Exists;
1574       END IF;
1575 
1576 	 -- Standard call to get message count and IF count is 1, get message info.
1577       FND_MSG_PUB.Count_And_Get
1578       (  p_count          =>   x_msg_count,
1579          p_data           =>   x_msg_data );
1580 END Validate_BUDGET_STATUS_CODE;
1581 
1582 
1583 PROCEDURE Validate_VEHICLE_RESPONSE_CODE (
1584     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1585     P_Validation_mode            IN   VARCHAR2,
1586     P_VEHICLE_RESPONSE_CODE      IN   VARCHAR2,
1587     X_Return_Status              OUT NOCOPY  VARCHAR2,
1588     X_Msg_Count                  OUT NOCOPY  NUMBER,
1589     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1590     )
1591 IS
1592     CURSOR C_Lookup_Exists (X_Lookup_Code VARCHAR2, X_Lookup_Type VARCHAR2) IS
1593       SELECT  'X'
1594       FROM  as_lookups
1595       WHERE lookup_type = X_Lookup_Type
1596             and lookup_code = X_Lookup_Code
1597             -- ffang 012501
1598             and enabled_flag = 'Y';
1599 
1600     l_val VARCHAR2(1);
1601 BEGIN
1602       -- Initialize message list IF p_init_msg_list is set to TRUE.
1603       IF FND_API.to_Boolean( p_init_msg_list )
1604       THEN
1605           FND_MSG_PUB.initialize;
1606       END IF;
1607 
1608       -- Initialize API return status to SUCCESS
1609       x_return_status := FND_API.G_RET_STS_SUCCESS;
1610 
1611       -- Debug Message
1612       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1613                                    -- 'Validate Vehicle Response Code'); END IF;
1614 
1615       -- Validate Vehicle Response Code
1616       IF (P_VEHICLE_RESPONSE_CODE is NOT NULL
1617           AND P_VEHICLE_RESPONSE_CODE <> FND_API.G_MISS_CHAR)
1618       THEN
1619         OPEN C_Lookup_Exists (P_VEHICLE_RESPONSE_CODE, 'VEHICLE_RESPONSE_CODE');
1620         FETCH C_Lookup_Exists into l_val;
1621         IF C_Lookup_Exists%NOTFOUND
1622         THEN
1623           AS_UTILITY_PVT.Set_Message(
1624               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1625               p_msg_name      => 'API_INVALID_ID',
1626               p_token1        => 'COLUMN',
1627               p_token1_value  => 'VEHICLE_RESPONSE_CODE',
1628               p_token2        => 'VALUE',
1629               p_token2_value  =>  p_VEHICLE_RESPONSE_CODE );
1630 
1631           x_return_status := FND_API.G_RET_STS_ERROR;
1632         END IF;
1633         CLOSE C_Lookup_Exists;
1634       END IF;
1635 
1636       -- Standard call to get message count and IF count is 1, get message info.
1637       FND_MSG_PUB.Count_And_Get
1638       (  p_count          =>   x_msg_count,
1639          p_data           =>   x_msg_data );
1640 END Validate_VEHICLE_RESPONSE_CODE;
1641 
1642 
1643 PROCEDURE Validate_REJECT_REASON_CODE (
1644     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1645     P_Validation_mode            IN   VARCHAR2,
1646     P_REJECT_REASON_CODE         IN   VARCHAR2,
1647     X_Return_Status              OUT NOCOPY  VARCHAR2,
1648     X_Msg_Count                  OUT NOCOPY  NUMBER,
1649     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1650     )
1651 IS
1652     CURSOR C_Lookup_Exists (X_Lookup_Code VARCHAR2, X_Lookup_Type VARCHAR2) IS
1653       SELECT  'X'
1654       FROM  as_lookups
1655       WHERE lookup_type = X_Lookup_Type
1656             and lookup_code = X_Lookup_Code
1657             -- ffang 012501
1658             and enabled_flag = 'Y';
1659 
1660     l_val VARCHAR2(1);
1661 BEGIN
1662       -- Initialize message list IF p_init_msg_list is set to TRUE.
1663       IF FND_API.to_Boolean( p_init_msg_list )
1664       THEN
1665           FND_MSG_PUB.initialize;
1666       END IF;
1667 
1668       -- Initialize API return status to SUCCESS
1669       x_return_status := FND_API.G_RET_STS_SUCCESS;
1670 
1671       -- Debug Message
1672       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1673                                    -- 'Validate reject reason Code'); END IF;
1674 
1675       -- Validate Reject Reason Code
1676       IF (P_REJECT_REASON_CODE is NOT NULL
1677 		AND P_REJECT_REASON_CODE <> FND_API.G_MISS_CHAR)
1678       THEN
1679           OPEN C_Lookup_Exists ( P_REJECT_REASON_CODE, 'REJECT_REASON_CODE');
1680           FETCH C_Lookup_Exists into l_val;
1681           IF C_Lookup_Exists%NOTFOUND
1682           THEN
1683             AS_UTILITY_PVT.Set_Message(
1684                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1685                 p_msg_name      => 'API_INVALID_ID',
1686                 p_token1        => 'COLUMN',
1687                 p_token1_value  => 'REJECT_REASON_CODE',
1688                 p_token2        => 'VALUE',
1689                 p_token2_value  =>  p_REJECT_REASON_CODE );
1690 
1691             x_return_status := FND_API.G_RET_STS_ERROR;
1692           END IF;
1693           CLOSE C_Lookup_Exists;
1694       END IF;
1695 
1696       -- Standard call to get message count and IF count is 1, get message info.
1697       FND_MSG_PUB.Count_And_Get
1698       (  p_count          =>   x_msg_count,
1699          p_data           =>   x_msg_data );
1700 END Validate_REJECT_REASON_CODE;
1701 
1702 
1703 PROCEDURE Validate_Flags (
1704     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1705     P_Validation_mode            IN   VARCHAR2,
1706     P_Flag_Value                 IN   VARCHAR2,
1707     P_Flag_Type                  IN   VARCHAR2,
1708     X_Return_Status              OUT NOCOPY  VARCHAR2,
1709     X_Msg_Count                  OUT NOCOPY  NUMBER,
1710     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1711     )
1712 IS
1713 BEGIN
1714       -- Initialize message list IF p_init_msg_list is set to TRUE.
1715       IF FND_API.to_Boolean( p_init_msg_list )
1716       THEN
1717           FND_MSG_PUB.initialize;
1718       END IF;
1719 
1720       -- Initialize API return status to SUCCESS
1721       x_return_status := FND_API.G_RET_STS_SUCCESS;
1722 
1723       -- Debug Message
1724       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1725                                    -- 'Validate ' || p_flag_type); END IF;
1726 
1727       -- Validate IF the flag value is 'Y' or 'N'
1728       IF (P_FLAG_VALUE is NOT NULL
1729           AND P_FLAG_VALUE <> FND_API.G_MISS_CHAR)
1730       THEN
1731           IF (P_FLAG_VALUE <>'Y' AND P_FLAG_VALUE <> 'N')
1732           THEN
1733             AS_UTILITY_PVT.Set_Message(
1734                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1735                 p_msg_name      => 'API_INVALID_ID',
1736                 p_token1        => 'COLUMN',
1737                 p_token1_value  => P_FLAG_TYPE,
1738                 p_token2        => 'VALUE',
1739                 p_token2_value  => p_FLAG_VALUE );
1740              x_return_status := FND_API.G_RET_STS_ERROR;
1741           END IF;
1742       END IF;
1743 
1744       -- Standard call to get message count and IF count is 1, get message info.
1745       FND_MSG_PUB.Count_And_Get
1746       (  p_count          =>   x_msg_count,
1747          p_data           =>   x_msg_data );
1748 END Validate_FLAGS;
1749 
1750 
1751 
1752 PROCEDURE Validate_ACCEPT_REJECT_REASON (
1753     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1754     P_Validation_mode            IN   VARCHAR2,
1755     P_Accept_Flag                IN   VARCHAR2,
1756     P_Reject_Reason_Code         IN   VARCHAR2,
1757     X_Return_Status              OUT NOCOPY  VARCHAR2,
1758     X_Msg_Count                  OUT NOCOPY  NUMBER,
1759     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1760     )
1761 IS
1762 BEGIN
1763       -- Initialize message list IF p_init_msg_list is set to TRUE.
1764       IF FND_API.to_Boolean( p_init_msg_list )
1765       THEN
1766           FND_MSG_PUB.initialize;
1767       END IF;
1768 
1769       -- Initialize API return status to SUCCESS
1770       x_return_status := FND_API.G_RET_STS_SUCCESS;
1771 
1772       -- Debug Message
1773       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1774                                    -- 'Validate accept flag reject reason'); END IF;
1775 
1776       -- Validate if ACCEPT_FLAG = 'Y' then REJECT_REASON_CODE should be null
1777       --          if REJECT_REASON_CODE is NOT NULL  then ACCEPT_FLAG should not be 'Y'
1778 
1779       IF (P_ACCEPT_FLAG = 'Y')
1780       THEN
1781           IF (P_REJECT_REASON_CODE IS NOT NULL AND
1782               P_REJECT_REASON_CODE <> FND_API.G_MISS_CHAR )
1783           THEN
1784             AS_UTILITY_PVT.Set_Message(
1785                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1786                 p_msg_name      => 'AS_ACCEPT_FLAG_REJECT_REASON'
1787                 );
1788              x_return_status := FND_API.G_RET_STS_ERROR;
1789           END IF;
1790       END IF;
1791 
1792       -- Standard call to get message count and IF count is 1, get message info.
1793       FND_MSG_PUB.Count_And_Get
1794       (  p_count          =>   x_msg_count,
1795          p_data           =>   x_msg_data );
1796 END Validate_ACCEPT_REJECT_REASON;
1797 
1798 
1799 
1800 PROCEDURE Validate_STATUS_CLOSE_REASON (
1801     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1802     P_Validation_mode            IN   VARCHAR2,
1803     P_STATUS_CODE                IN   VARCHAR2,
1804     P_CLOSE_REASON_CODE          IN OUT NOCOPY  VARCHAR2,
1805     X_Return_Status              OUT NOCOPY  VARCHAR2,
1806     X_Msg_Count                  OUT NOCOPY  NUMBER,
1807     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1808     )
1809 IS
1810   CURSOR C_Status_Exists (X_Lookup_Code VARCHAR2) IS
1811       SELECT opp_open_status_flag
1812       FROM  as_statuses_b
1813       WHERE lead_flag = 'Y' and enabled_flag = 'Y'
1814             and status_code = X_Lookup_Code;
1815   l_val   VARCHAR2(1);
1816   l_profile_opp_lead_link VARCHAR2(200);
1817   l_profile_def_close_reason VARCHAR2(200);
1818 BEGIN
1819       -- Initialize message list IF p_init_msg_list is set to TRUE.
1820       IF FND_API.to_Boolean( p_init_msg_list )
1821       THEN
1822           FND_MSG_PUB.initialize;
1823       END IF;
1824 
1825       -- Initialize API return status to SUCCESS
1826       x_return_status := FND_API.G_RET_STS_SUCCESS;
1827 
1828       -- Debug Message
1829       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1830                                    -- 'Validate status close reason'); END IF;
1831 
1832        -- IF opp_open_status_flag = 'N' (closed status) then close_reason_code
1833       -- can not be NULL
1834       OPEN C_Status_Exists ( p_status_code);
1835       FETCH C_Status_Exists into l_val;
1836 
1837 
1838       l_profile_opp_lead_link :=  FND_PROFILE.Value('AS_LEAD_LINK_STATUS');
1839       IF (AS_DEBUG_LOW_ON) THEN
1840 
1841       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1842                                    'l_profile_opp_lead_link: ' || l_profile_opp_lead_link);
1843       END IF;
1844 
1845 
1846       IF l_val = 'N' and (P_CLOSE_REASON_CODE is NULL or P_CLOSE_REASON_CODE = fnd_api.G_MISS_CHAR)
1847       THEN
1848 	IF (AS_DEBUG_LOW_ON) THEN
1849 
1850 	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1851                                    'close check');
1852 	END IF;
1853 
1854 	IF l_profile_opp_lead_link <> P_STATUS_CODE
1855 	THEN
1856 		IF (AS_DEBUG_LOW_ON) THEN
1857 
1858 		AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1859                                    'not lead link');
1860 		END IF;
1861 	        AS_UTILITY_PVT.Set_Message(
1862 		    p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1863 	            p_msg_name      => 'API_MISSING_ID',
1864 		    p_token1        => 'COLUMN',
1865 	            p_token1_value  => 'CLOSE_REASON');
1866 		x_return_status := FND_API.G_RET_STS_ERROR;
1867 	ELSE
1868 		IF (AS_DEBUG_LOW_ON) THEN
1869 
1870 		AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1871                                    'yes lead link');
1872 		END IF;
1873 		l_profile_def_close_reason := FND_PROFILE.Value('AS_DEFAULT_LEAD_CLOSE_REASON');
1874 		IF (AS_DEBUG_LOW_ON) THEN
1875 
1876 		AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1877                                    'def_close: ' || l_profile_def_close_reason);
1878 		END IF;
1879                 --bmuthukr modified the if condition to include g_miss_char to fix bug 3931489.
1880 		--if P_CLOSE_REASON_CODE is NULL then
1881 		if ((P_CLOSE_REASON_CODE is NULL) or (P_CLOSE_REASON_CODE = fnd_api.G_MISS_CHAR)) then
1882 	  	   P_CLOSE_REASON_CODE := l_profile_def_close_reason;
1883 		end if;
1884 	end IF;
1885       END IF;
1886 
1887       IF (l_val = 'Y' and P_CLOSE_REASON_CODE is NOT NULL and P_CLOSE_REASON_CODE <> FND_API.G_MISS_CHAR)
1888       THEN
1889 
1890 	IF l_profile_opp_lead_link <> P_STATUS_CODE
1891 	THEN
1892 	        AS_UTILITY_PVT.Set_Message(
1893 		    p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1894 	            p_msg_name      => 'AS_NO_CLOSE_REASON'
1895 		    );
1896         x_return_status := FND_API.G_RET_STS_ERROR;
1897 	ELSE
1898 		P_CLOSE_REASON_CODE := null;
1899 	END IF;
1900       END IF;
1901       CLOSE C_Status_Exists ;
1902 
1903 
1904 
1905       -- Standard call to get message count and IF count is 1, get message info.
1906       FND_MSG_PUB.Count_And_Get
1907       (  p_count          =>   x_msg_count,
1908          p_data           =>   x_msg_data );
1909 END Validate_STATUS_CLOSE_REASON;
1910 
1911 
1912 PROCEDURE Validate_REF_BY_REF_TYPE (
1913     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1914     P_Validation_mode            IN   VARCHAR2,
1915     P_REF_BY_ID                  IN   NUMBER,
1916     P_REF_TYPE_CODE              IN   VARCHAR2,
1917     P_OLD_REF_BY_ID		 IN   NUMBER,
1918     P_OLD_REF_TYPE_CODE		 IN   VARCHAR2,
1919     X_Return_Status              OUT NOCOPY  VARCHAR2,
1920     X_Msg_Count                  OUT NOCOPY  NUMBER,
1921     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1922     )
1923 IS
1924   l_val   VARCHAR2(1);
1925 BEGIN
1926       -- Initialize message list IF p_init_msg_list is set to TRUE.
1927       IF FND_API.to_Boolean( p_init_msg_list )
1928       THEN
1929           FND_MSG_PUB.initialize;
1930       END IF;
1931 
1932       -- Initialize API return status to SUCCESS
1933       x_return_status := FND_API.G_RET_STS_SUCCESS;
1934 
1935       -- Debug Message
1936       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1937                                    -- 'Validate status close reason'); END IF;
1938 
1939       IF p_validation_mode = AS_UTILITY_PVT.G_CREATE
1940       THEN
1941 
1942       IF (P_REF_BY_ID IS NULL or  P_REF_BY_ID =  FND_API.G_MISS_NUM) and  (P_REF_TYPE_CODE IS NOT NULL and  P_REF_TYPE_CODE <>  FND_API.G_MISS_NUM)
1943       THEN
1944         AS_UTILITY_PVT.Set_Message(
1945             p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1946             p_msg_name      => 'AS_REF_TYPE_REF_BY');
1947 
1948         x_return_status := FND_API.G_RET_STS_ERROR;
1949       END IF;
1950 
1951 
1952       IF (P_REF_TYPE_CODE IS NULL or  P_REF_TYPE_CODE  =  FND_API.G_MISS_NUM) and  (P_REF_BY_ID IS NOT NULL and  P_REF_BY_ID <>  FND_API.G_MISS_NUM)
1953       THEN
1954         AS_UTILITY_PVT.Set_Message(
1955             p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1956             p_msg_name      => 'AS_REF_TYPE_REF_BY');
1957 
1958         x_return_status := FND_API.G_RET_STS_ERROR;
1959       END IF;
1960 
1961      ELSIF p_validation_mode = AS_UTILITY_PVT.G_UPDATE
1962      THEN
1963 
1964 	IF (P_REF_TYPE_CODE IS NULL and P_REF_BY_ID IS NOT NULL) or
1965 	   (P_REF_TYPE_CODE IS NOT NULL and P_REF_BY_ID IS NULL) or
1966 	   (P_REF_TYPE_CODE = FND_API.G_MISS_CHAR and P_REF_BY_ID IS NOT NULL and P_OLD_REF_TYPE_CODE IS NULL) or
1967 	   (P_REF_BY_ID = FND_API.G_MISS_NUM and P_REF_TYPE_CODE IS NOT NULL and P_OLD_REF_BY_ID IS NULL) or
1968 	   (P_REF_BY_ID IS NULL and P_REF_TYPE_CODE = FND_API.G_MISS_CHAR and P_OLD_REF_TYPE_CODE IS NOT NULL) or
1969 	   (P_REF_BY_ID = FND_API.G_MISS_NUM and P_REF_TYPE_CODE IS NULL and P_OLD_REF_BY_ID IS NOT NULL)
1970 
1971 	THEN
1972 
1973   	    AS_UTILITY_PVT.Set_Message(
1974             p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1975             p_msg_name      => 'AS_REF_TYPE_REF_BY');
1976 
1977             x_return_status := FND_API.G_RET_STS_ERROR;
1978 
1979      END IF;
1980 
1981 
1982 
1983      END IF;
1984 
1985       -- Standard call to get message count and IF count is 1, get message info.
1986       FND_MSG_PUB.Count_And_Get
1987       (  p_count          =>   x_msg_count,
1988          p_data           =>   x_msg_data );
1989 END Validate_REF_BY_REF_TYPE;
1990 
1991 
1992 PROCEDURE Validate_OFFER_ID (
1993     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1994     P_Validation_mode            IN   VARCHAR2,
1995     P_SOURCE_PROMOTION_ID        IN   NUMBER,
1996     P_OFFER_ID                   IN   NUMBER,
1997     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
1998     X_Return_Status              OUT NOCOPY  VARCHAR2,
1999     X_Msg_Count                  OUT NOCOPY  NUMBER,
2000     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2001     )
2002 IS
2003   CURSOR C_OFFER_ID_Exists (c_OFFER_ID NUMBER) IS
2004   -- the validation logic for offer_id has changed. Bug # 1915617
2005      SELECT  'X'
2006        FROM  ams_source_codes
2007        WHERE source_code_id = c_offer_id
2008          and   ARC_SOURCE_CODE_FOR = 'OFFR';
2009 
2010      --SELECT  'X'
2011      --FROM  ams_act_offers
2012      --WHERE activity_offer_id = c_offer_id
2013      --      and nvl(start_date, sysdate) <= sysdate
2014      --      and nvl(end_date, sysdate) >= sysdate
2015      --       ffang 012501
2016      --      and ARC_ACT_OFFER_USED_BY = 'CAMP'
2017      --      and ACT_OFFER_USED_BY_ID =
2018      --                  (SELECT CAMPAIGN_ID
2019      --                   FROM AMS_CAMPAIGNS_VL c, AMS_SOURCE_CODES s
2020      --                   WHERE c.SOURCE_CODE = s.SOURCE_CODE
2021      --                      AND s.SOURCE_CODE_ID = P_SOURCE_PROMOTION_ID);
2022 
2023 
2024   l_val VARCHAR2(1);
2025 
2026 BEGIN
2027 
2028       -- Initialize message list IF p_init_msg_list is set to TRUE.
2029       IF FND_API.to_Boolean( p_init_msg_list )
2030       THEN
2031           FND_MSG_PUB.initialize;
2032       END IF;
2033 
2034       -- Initialize API return status to SUCCESS
2035       x_return_status := FND_API.G_RET_STS_SUCCESS;
2036 
2037       -- Debug Message
2038       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2039                                    -- 'Validate offer id'); END IF;
2040 
2041       IF (p_OFFER_ID is NOT NULL) and (p_OFFER_ID <> FND_API.G_MISS_NUM)
2042       THEN
2043           -- OFFER_ID should exist in ams_act_offers
2044           OPEN  C_OFFER_ID_Exists (p_OFFER_ID);
2045           FETCH C_OFFER_ID_Exists into l_val;
2046 
2047           IF C_OFFER_ID_Exists%NOTFOUND THEN
2048               IF (AS_DEBUG_LOW_ON) THEN
2049 
2050               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2051                                            'Private API: OFFER_ID is invalid');
2052               END IF;
2053               AS_UTILITY_PVT.Set_Message(
2054                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2055                   p_msg_name      => 'API_INVALID_ID',
2056                   p_token1        => 'COLUMN',
2057                   p_token1_value  => 'OFFER',
2058                   p_token2        => 'VALUE',
2059                   p_token2_value  => p_OFFER_ID );
2060 
2061               x_return_status := FND_API.G_RET_STS_ERROR;
2062           END IF;
2063           CLOSE C_OFFER_ID_Exists;
2064       END IF;
2065 
2066       -- Standard call to get message count and IF count is 1, get message info.
2067       FND_MSG_PUB.Count_And_Get
2068       (  p_count          =>   x_msg_count,
2069          p_data           =>   x_msg_data
2070       );
2071 
2072 END Validate_OFFER_ID;
2073 
2074 
2075 PROCEDURE Validate_INC_PARTNER_PARTY_ID (
2076     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
2077     P_Validation_mode            IN   VARCHAR2,
2078     P_INC_PARTNER_PARTY_ID       IN   NUMBER,
2079     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2080     X_Return_Status              OUT NOCOPY  VARCHAR2,
2081     X_Msg_Count                  OUT NOCOPY  NUMBER,
2082     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2083     )
2084 IS
2085   CURSOR C_INC_PRTN_PARTY_ID_Exist (c_inc_parn_party_id NUMBER) IS
2086       SELECT  'X'
2087 	 FROM as_sf_ptr_v
2088 	 WHERE partner_customer_id = c_inc_parn_party_id;
2089   l_val VARCHAR2(1);
2090 
2091 BEGIN
2092 
2093       -- Initialize message list if p_init_msg_list is set to TRUE.
2094       IF FND_API.to_Boolean( p_init_msg_list )
2095       THEN
2096           FND_MSG_PUB.initialize;
2097       END IF;
2098 
2099 
2100       -- Initialize API return status to SUCCESS
2101       x_return_status := FND_API.G_RET_STS_SUCCESS;
2102 
2103       IF (P_INC_PARTNER_PARTY_ID is NOT NULL) and
2104          (P_INC_PARTNER_PARTY_ID <> FND_API.G_MISS_NUM)
2105       THEN
2106           OPEN  C_INC_PRTN_PARTY_ID_Exist (P_INC_PARTNER_PARTY_ID);
2107           FETCH C_INC_PRTN_PARTY_ID_Exist into l_val;
2108 
2109           IF C_INC_PRTN_PARTY_ID_Exist%NOTFOUND THEN
2110               IF (AS_DEBUG_LOW_ON) THEN
2111 
2112               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2113                          'Private API: INCUMBENT_PARTNER_PARTY_ID is invalid');
2114               END IF;
2115 
2116               AS_UTILITY_PVT.Set_Message(
2117                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2118                   p_msg_name      => 'API_INVALID_ID',
2119                   p_token1        => 'COLUMN',
2120                   p_token1_value  => 'INCUMBENT_PARTNER_PARTY_ID',
2121                   p_token2        => 'VALUE',
2122                   p_token2_value  => p_INC_PARTNER_PARTY_ID );
2123           END IF;
2124 
2125           -- ffang 092800: Forgot to close cursor?
2126           CLOSE C_INC_PRTN_PARTY_ID_Exist;
2127           -- end ffang 092800
2128       END IF;
2129 
2130       -- Standard call to get message count and if count is 1, get message info.
2131       FND_MSG_PUB.Count_And_Get
2132       (  p_count          =>   x_msg_count,
2133          p_data           =>   x_msg_data
2134       );
2135 
2136 END Validate_INC_PARTNER_PARTY_ID;
2137 
2138 
2139 PROCEDURE Validate_INC_PRTNR_RESOURCE_ID (
2140     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
2141     P_Validation_mode            IN   VARCHAR2,
2142     P_INC_PARTNER_RESOURCE_ID    IN   NUMBER,
2143     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2144     X_Return_Status              OUT NOCOPY  VARCHAR2,
2145     X_Msg_Count                  OUT NOCOPY  NUMBER,
2146     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2147     )
2148 IS
2149 
2150   CURSOR C_RESOURCE_ID_Exists (c_INC_PARTNER_RESOURCE_ID VARCHAR2) IS
2151       SELECT  'X'
2152 	 FROM as_sf_ptr_v
2153 	 WHERE SALESFORCE_ID = c_INC_PARTNER_RESOURCE_ID;
2154       --FROM  jtf_rs_resource_extns
2155       --WHERE RESOURCE_ID = c_INC_PARTNER_RESOURCE_ID;
2156   l_val VARCHAR2(1);
2157 
2158 BEGIN
2159       -- Initialize message list if p_init_msg_list is set to TRUE.
2160       IF FND_API.to_Boolean( p_init_msg_list )
2161       THEN
2162           FND_MSG_PUB.initialize;
2163       END IF;
2164 
2165       -- Initialize API return status to SUCCESS
2166       x_return_status := FND_API.G_RET_STS_SUCCESS;
2167 
2168       IF (p_INC_PARTNER_RESOURCE_ID is NOT NULL) and
2169          (p_INC_PARTNER_RESOURCE_ID <> FND_API.G_MISS_NUM)
2170       THEN
2171           -- INCUMBENT_PARTNER_RESOURCE_ID should exist in as_sf_ptr_v
2172           OPEN  C_RESOURCE_ID_Exists (p_INC_PARTNER_RESOURCE_ID);
2173           FETCH C_RESOURCE_ID_Exists into l_val;
2174 
2175           IF C_RESOURCE_ID_Exists%NOTFOUND THEN
2176               IF (AS_DEBUG_LOW_ON) THEN
2177 
2178               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2179                       'Private API: INCUMBENT_PARTNER_RESOURCE_ID is invalid');
2180               END IF;
2181 
2182               AS_UTILITY_PVT.Set_Message(
2183                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2184                   p_msg_name      => 'API_INVALID_ID',
2185                   p_token1        => 'COLUMN',
2186                   p_token1_value  => 'INCUMBENT_PARTNER_RESOURCE_ID',
2187                   p_token2        => 'VALUE',
2188                   p_token2_value  => p_INC_PARTNER_RESOURCE_ID );
2189 
2190               x_return_status := FND_API.G_RET_STS_ERROR;
2191           END IF;
2192 
2193           CLOSE C_RESOURCE_ID_Exists;
2194       END IF;
2195 
2196       -- Standard call to get message count and if count is 1, get message info.
2197       FND_MSG_PUB.Count_And_Get
2198       (  p_count          =>   x_msg_count,
2199          p_data           =>   x_msg_data
2200       );
2201 
2202 END Validate_INC_PRTNR_RESOURCE_ID;
2203 
2204 
2205 PROCEDURE Validate_PRM_EXEC_SPONSOR_FLAG (
2206     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
2207     P_Validation_mode            IN   VARCHAR2,
2208     P_PRM_EXEC_SPONSOR_FLAG      IN   VARCHAR2,
2209     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2210     X_Return_Status              OUT NOCOPY  VARCHAR2,
2211     X_Msg_Count                  OUT NOCOPY  NUMBER,
2212     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2213     )
2214 IS
2215 BEGIN
2216       -- Initialize message list IF p_init_msg_list is set to TRUE.
2217       IF FND_API.to_Boolean( p_init_msg_list )
2218       THEN
2219           FND_MSG_PUB.initialize;
2220       END IF;
2221 
2222       -- Initialize API return status to SUCCESS
2223       x_return_status := FND_API.G_RET_STS_SUCCESS;
2224 
2225       -- Debug Message
2226       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2227                                    -- 'Validate PRM_EXEC_SPONSOR_FLAG'); END IF;
2228 
2229       IF (p_PRM_EXEC_SPONSOR_FLAG is NOT NULL) and
2230          (p_PRM_EXEC_SPONSOR_FLAG <> FND_API.G_MISS_CHAR)
2231       THEN
2232           IF (UPPER(p_PRM_EXEC_SPONSOR_FLAG) <> 'Y') and
2233              (UPPER(p_PRM_EXEC_SPONSOR_FLAG) <> 'N')
2234           THEN
2235               IF (AS_DEBUG_LOW_ON) THEN
2236 
2237               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2238                         'Private API: PRM_EXEC_SPONSOR_FLAG is invalid');
2239               END IF;
2240 
2241               AS_UTILITY_PVT.Set_Message(
2242                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2243                   p_msg_name      => 'API_INVALID_ID',
2244                   p_token1        => 'COLUMN',
2245                   p_token1_value  => 'PRM_EXEC_SPONSOR_FLAG',
2246                   p_token2        => 'VALUE',
2247                   p_token2_value  => p_PRM_EXEC_SPONSOR_FLAG );
2248 
2249               x_return_status := FND_API.G_RET_STS_ERROR;
2250           END IF;
2251       END IF;
2252 
2253       -- Standard call to get message count and IF count is 1, get message info.
2254       FND_MSG_PUB.Count_And_Get
2255       (  p_count          =>   x_msg_count,
2256          p_data           =>   x_msg_data
2257       );
2258 
2259 END Validate_PRM_EXEC_SPONSOR_FLAG;
2260 
2261 
2262 PROCEDURE Validate_PRM_PRJ_LDINPLE_FLAG (
2263     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
2264     P_Validation_mode            IN   VARCHAR2,
2265     P_PRM_PRJ_LEAD_IN_PLACE_FLAG IN   VARCHAR2,
2266     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2267     X_Return_Status              OUT NOCOPY  VARCHAR2,
2268     X_Msg_Count                  OUT NOCOPY  NUMBER,
2269     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2270     )
2271 IS
2272 BEGIN
2273       -- Initialize message list IF p_init_msg_list is set to TRUE.
2274       IF FND_API.to_Boolean( p_init_msg_list )
2275       THEN
2276           FND_MSG_PUB.initialize;
2277       END IF;
2278 
2279       -- Initialize API return status to SUCCESS
2280       x_return_status := FND_API.G_RET_STS_SUCCESS;
2281 
2282       -- Debug Message
2283       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2284                                    -- 'Validate PRM_PRJ_LDINPLE_FLAG'); END IF;
2285 
2286       IF (p_PRM_PRJ_LEAD_IN_PLACE_FLAG is NOT NULL) and
2287          (p_PRM_PRJ_LEAD_IN_PLACE_FLAG <> FND_API.G_MISS_CHAR)
2288       THEN
2289           IF (UPPER(p_PRM_PRJ_LEAD_IN_PLACE_FLAG) <> 'Y') and
2290              (UPPER(p_PRM_PRJ_LEAD_IN_PLACE_FLAG) <> 'N')
2291           THEN
2292               IF (AS_DEBUG_LOW_ON) THEN
2293 
2294               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2295                         'Private API: PRM_PRJ_LEAD_IN_PLACE_FLAG is invalid');
2296               END IF;
2297 
2298               AS_UTILITY_PVT.Set_Message(
2299                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2300                   p_msg_name      => 'API_INVALID_ID',
2301                   p_token1        => 'COLUMN',
2302                   p_token1_value  => 'PRM_PRJ_LEAD_IN_PLACE_FLAG',
2303                   p_token2        => 'VALUE',
2304                   p_token2_value  => p_PRM_PRJ_LEAD_IN_PLACE_FLAG );
2305 
2306               x_return_status := FND_API.G_RET_STS_ERROR;
2307           END IF;
2308       END IF;
2309 
2310       -- Standard call to get message count and IF count is 1, get message info.
2311       FND_MSG_PUB.Count_And_Get
2312       (  p_count          =>   x_msg_count,
2313          p_data           =>   x_msg_data
2314       );
2315 
2316 END Validate_PRM_PRJ_LDINPLE_FLAG;
2317 
2318 
2319 PROCEDURE Validate_PRM_LEAD_TYPE (
2320     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
2321     P_Validation_mode            IN   VARCHAR2,
2322     P_PRM_LEAD_TYPE              IN   VARCHAR2,
2323     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2324     X_Return_Status              OUT NOCOPY  VARCHAR2,
2325     X_Msg_Count                  OUT NOCOPY  NUMBER,
2326     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2327     )
2328 IS
2329   CURSOR C_PRM_LEAD_TYPE_Exists (c_Lookup_Code VARCHAR2) IS
2330       SELECT  'X'
2331       FROM  as_lookups
2332       WHERE lookup_type = 'PRM_LEAD_TYPE'
2333             and lookup_code = c_Lookup_Code;
2334   l_val VARCHAR2(1);
2335 
2336 BEGIN
2337 
2338       -- Initialize message list IF p_init_msg_list is set to TRUE.
2339       IF FND_API.to_Boolean( p_init_msg_list )
2340       THEN
2341           FND_MSG_PUB.initialize;
2342       END IF;
2343 
2344 
2345       -- Initialize API return status to SUCCESS
2346       x_return_status := FND_API.G_RET_STS_SUCCESS;
2347 
2348       -- Debug Message
2349       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2350                                    -- 'Validate PRM_LEAD_TYPE'); END IF;
2351 
2352       IF (p_PRM_LEAD_TYPE is NOT NULL) and
2353          (p_PRM_LEAD_TYPE <> FND_API.G_MISS_CHAR)
2354       THEN
2355           -- PRM_LEAD_TYPE should exist in as_lookups
2356           OPEN  C_PRM_LEAD_TYPE_Exists (p_PRM_LEAD_TYPE);
2357           FETCH C_PRM_LEAD_TYPE_Exists into l_val;
2358 
2359           IF C_PRM_LEAD_TYPE_Exists%NOTFOUND THEN
2360               IF (AS_DEBUG_LOW_ON) THEN
2361 
2362               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2363                                      'Private API: PRM_LEAD_TYPE is invalid');
2364               END IF;
2365               AS_UTILITY_PVT.Set_Message(
2366                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2367                   p_msg_name      => 'API_INVALID_ID',
2368                   p_token1        => 'COLUMN',
2369                   p_token1_value  => 'PRM_LEAD_TYPE',
2370                   p_token2        => 'VALUE',
2371                   p_token2_value  =>  p_PRM_LEAD_TYPE );
2372               x_return_status := FND_API.G_RET_STS_ERROR;
2373           END IF;
2374           CLOSE C_PRM_LEAD_TYPE_Exists;
2375       END IF;
2376 
2377       -- Standard call to get message count and IF count is 1, get message info.
2378       FND_MSG_PUB.Count_And_Get
2379       (  p_count          =>   x_msg_count,
2380          p_data           =>   x_msg_data
2381       );
2382 
2383 END Validate_PRM_LEAD_TYPE;
2384 
2385 
2386 PROCEDURE Validate_PRM_IND_CLS_CODE (
2387     P_Init_Msg_List               IN   VARCHAR2     := FND_API.G_FALSE,
2388     P_Validation_mode             IN   VARCHAR2,
2389     P_PRM_IND_CLASSIFICATION_CODE IN   VARCHAR2,
2390     x_Item_Property_Rec           OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2391     X_Return_Status               OUT NOCOPY  VARCHAR2,
2392     X_Msg_Count                   OUT NOCOPY  NUMBER,
2393     X_Msg_Data                    OUT NOCOPY  VARCHAR2
2394     )
2395 IS
2396   CURSOR C_PRM_IND_CLS_CODE_Exists (c_Lookup_Code VARCHAR2) IS
2397       SELECT  'X'
2398       FROM  as_lookups
2399       WHERE lookup_type = 'PRM_IND_CLASSIFICATION_TYPE'
2400             and lookup_code = c_Lookup_Code;
2401   l_val VARCHAR2(1);
2402 
2403 BEGIN
2404 
2405       -- Initialize message list IF p_init_msg_list is set to TRUE.
2406       IF FND_API.to_Boolean( p_init_msg_list )
2407       THEN
2408           FND_MSG_PUB.initialize;
2409       END IF;
2410 
2411 
2412       -- Initialize API return status to SUCCESS
2413       x_return_status := FND_API.G_RET_STS_SUCCESS;
2414 
2415       -- Debug Message
2416       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2417                                    -- 'Validate PRM_IND_CLS_CODE'); END IF;
2418 
2419       IF (p_PRM_IND_CLASSIFICATION_CODE is NOT NULL) and
2420          (p_PRM_IND_CLASSIFICATION_CODE <> FND_API.G_MISS_CHAR)
2421       THEN
2422           -- PRM_IND_CLASSIFICATION_CODE should exist in as_lookups
2423           OPEN  C_PRM_IND_CLS_CODE_Exists (p_PRM_IND_CLASSIFICATION_CODE);
2424           FETCH C_PRM_IND_CLS_CODE_Exists into l_val;
2425 
2426           IF C_PRM_IND_CLS_CODE_Exists%NOTFOUND THEN
2427               IF (AS_DEBUG_LOW_ON) THEN
2428 
2429               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2430                        'Private API: PRM_IND_CLASSIFICATION_CODE is invalid');
2431               END IF;
2432               AS_UTILITY_PVT.Set_Message(
2433                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2434                   p_msg_name      => 'API_INVALID_ID',
2435                   p_token1        => 'COLUMN',
2436                   p_token1_value  => 'PRM_IND_CLASSIFICATION_CODE',
2437                   p_token2        => 'VALUE',
2438                   p_token2_value  =>  p_PRM_IND_CLASSIFICATION_CODE );
2439               x_return_status := FND_API.G_RET_STS_ERROR;
2440           END IF;
2441           CLOSE C_PRM_IND_CLS_CODE_Exists;
2442       END IF;
2443 
2444       -- Standard call to get message count and IF count is 1, get message info.
2445       FND_MSG_PUB.Count_And_Get
2446       (  p_count          =>   x_msg_count,
2447          p_data           =>   x_msg_data
2448       );
2449 
2450 END Validate_PRM_IND_CLS_CODE;
2451 
2452 
2453 
2454 PROCEDURE Validate_AUTO_ASSIGNMENT_TYPE (
2455     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
2456     P_Validation_mode            IN   VARCHAR2,
2457     P_AUTO_ASSIGNMENT_TYPE       IN   VARCHAR2,
2458     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2459     X_Return_Status              OUT NOCOPY  VARCHAR2,
2460     X_Msg_Count                  OUT NOCOPY  NUMBER,
2461     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2462     )
2463 IS
2464   CURSOR C_AUTO_ASGN_TYPE_Exists (c_lookup_type VARCHAR2,
2465                                   c_Lookup_Code VARCHAR2) IS
2466       SELECT  'X'
2467       FROM  as_lookups
2468       WHERE lookup_type = c_lookup_type
2469             and lookup_code = c_Lookup_Code;
2470   l_val VARCHAR2(1);
2471 
2472 BEGIN
2473 
2474       -- Initialize message list if p_init_msg_list is set to TRUE.
2475       IF FND_API.to_Boolean( p_init_msg_list )
2476       THEN
2477           FND_MSG_PUB.initialize;
2478       END IF;
2479 
2480 
2481       -- Initialize API return status to SUCCESS
2482       x_return_status := FND_API.G_RET_STS_SUCCESS;
2483 
2484       IF (p_AUTO_ASSIGNMENT_TYPE is NOT NULL) and
2485          (p_AUTO_ASSIGNMENT_TYPE <> FND_API.G_MISS_CHAR)
2486      THEN
2487           -- AUTO_ASSIGNMENT_TYPE should exist in as_lookups
2488           OPEN  C_AUTO_ASGN_TYPE_Exists ('AUTO_ASSIGNMENT_TYPE',
2489                                          p_AUTO_ASSIGNMENT_TYPE);
2490           FETCH C_AUTO_ASGN_TYPE_Exists into l_val;
2491 
2492           IF C_AUTO_ASGN_TYPE_Exists%NOTFOUND THEN
2493               -- IF (AS_DEBUG_ERROR_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
2494               --              'Private API: AUTO_ASSIGNMENT_TYPE is invalid'); END IF;
2495 
2496               AS_UTILITY_PVT.Set_Message(
2497                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2498                   p_msg_name      => 'API_INVALID_AUTO_ASGN_TYPE',
2499                   p_token1        => 'VALUE',
2500                   p_token1_value  => p_AUTO_ASSIGNMENT_TYPE );
2501 
2502               x_return_status := FND_API.G_RET_STS_ERROR;
2503           END IF;
2504 
2505           CLOSE C_AUTO_ASGN_TYPE_Exists;
2506       END IF;
2507 
2508       -- Standard call to get message count and if count is 1, get message info.
2509       FND_MSG_PUB.Count_And_Get
2510       (  p_count          =>   x_msg_count,
2511          p_data           =>   x_msg_data
2512       );
2513 
2514 END Validate_AUTO_ASSIGNMENT_TYPE;
2515 
2516 
2517 PROCEDURE Validate_PRM_ASSIGNMENT_TYPE (
2518     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
2519     P_Validation_mode            IN   VARCHAR2,
2520     P_PRM_ASSIGNMENT_TYPE        IN   VARCHAR2,
2521     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2522     X_Return_Status              OUT NOCOPY  VARCHAR2,
2523     X_Msg_Count                  OUT NOCOPY  NUMBER,
2524     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2525     )
2526 IS
2527   CURSOR C_PRM_ASGN_TYPE_Exists (c_lookup_type VARCHAR2,
2528                                  c_Lookup_Code VARCHAR2) IS
2529       SELECT  'X'
2530       FROM  as_lookups
2531       WHERE lookup_type = c_lookup_type
2532             and lookup_code = c_Lookup_Code;
2533   l_val VARCHAR2(1);
2534 
2535 BEGIN
2536       -- Initialize message list if p_init_msg_list is set to TRUE.
2537       IF FND_API.to_Boolean( p_init_msg_list )
2538       THEN
2539           FND_MSG_PUB.initialize;
2540       END IF;
2541 
2542       -- Initialize API return status to SUCCESS
2543       x_return_status := FND_API.G_RET_STS_SUCCESS;
2544 
2545       IF (p_PRM_ASSIGNMENT_TYPE is NOT NULL) and
2546          (p_PRM_ASSIGNMENT_TYPE <> FND_API.G_MISS_CHAR)
2547       THEN
2548           -- PRM_ASSIGNMENT_TYPE should exist in as_lookups
2549           OPEN  C_PRM_ASGN_TYPE_Exists ('PRM_ASSIGNMENT_TYPE',
2550                                         p_PRM_ASSIGNMENT_TYPE);
2551           FETCH C_PRM_ASGN_TYPE_Exists into l_val;
2552 
2553           IF C_PRM_ASGN_TYPE_Exists%NOTFOUND THEN
2554               -- IF (AS_DEBUG_ERROR_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
2555               --              'Private API: PRM_ASSIGNMENT_TYPE is invalid'); END IF;
2556 
2557               AS_UTILITY_PVT.Set_Message(
2558                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2559                   p_msg_name      => 'API_INVALID_PRM_ASGN_TYPE',
2560                   p_token1        => 'VALUE',
2561                   p_token1_value  => p_PRM_ASSIGNMENT_TYPE );
2562 
2563               x_return_status := FND_API.G_RET_STS_ERROR;
2564           END IF;
2565 
2566           CLOSE C_PRM_ASGN_TYPE_Exists;
2567       END IF;
2568 
2569       -- Standard call to get message count and if count is 1, get message info.
2570       FND_MSG_PUB.Count_And_Get
2571       (  p_count          =>   x_msg_count,
2572          p_data           =>   x_msg_data
2573       );
2574 
2575 END Validate_PRM_ASSIGNMENT_TYPE;
2576 
2577 
2578 --
2579 -- Record Level Validation
2580 --
2581 
2582 
2583 --
2584 --  Inter-record level validation
2585 --
2586 
2587 PROCEDURE Validate_Budget_Amounts(
2588     P_Init_Msg_List              IN   VARCHAR2   := FND_API.G_FALSE,
2589     P_Validation_level           IN   NUMBER     := FND_API.G_VALID_LEVEL_FULL,
2590     P_Validation_mode            IN   VARCHAR2,
2591     P_SALES_LEAD_ID              IN   NUMBER,
2592     X_Return_Status              OUT NOCOPY  VARCHAR2,
2593     X_Msg_Count                  OUT NOCOPY  NUMBER,
2594     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2595     )
2596 IS
2597     CURSOR C_Header_Amount (X_Sales_Lead_ID NUMBER) IS
2598       SELECT budget_amount
2599       FROM as_sales_leads
2600       where sales_lead_id = X_Sales_Lead_ID;
2601 
2602     CURSOR C_Lines_Amounts (X_Sales_Lead_ID NUMBER) IS
2603       SELECT sum (budget_amount)
2604       FROM as_sales_lead_lines
2605       where sales_lead_id = X_Sales_Lead_ID;
2606 
2607     l_header_amount  NUMBER;
2608     l_lines_amounts  NUMBER;
2609 BEGIN
2610       -- Initialize message list IF p_init_msg_list is set to TRUE.
2611       IF FND_API.to_Boolean( p_init_msg_list )
2612       THEN
2613           FND_MSG_PUB.initialize;
2614       END IF;
2615 
2616       -- Initialize API return status to SUCCESS
2617       x_return_status := FND_API.G_RET_STS_SUCCESS;
2618 
2619       -- Debug Message
2620       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2621                                    -- 'Validate budget amount'); END IF;
2622 
2623       -- The summary of lines' budget_amount should be equal to header's
2624       -- budget_amount
2625       OPEN C_Header_Amount (P_SALES_LEAD_ID);
2626       FETCH C_Header_Amount into l_header_amount;
2627       CLOSE C_Header_Amount;
2628 
2629       OPEN C_Lines_Amounts (P_SALES_LEAD_ID);
2630       FETCH C_Lines_Amounts into l_lines_amounts;
2631       CLOSE C_Lines_Amounts;
2632 
2633       IF l_header_amount <> l_lines_amounts
2634       THEN
2635         AS_UTILITY_PVT.Set_Message(
2636             p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2637             p_msg_name      => 'AS_BUDGET_AMOUNT_NOT_MATCH');
2638         x_return_status := FND_API.G_RET_STS_ERROR;
2639       END IF;
2640 
2641       -- Standard call to get message count and IF count is 1, get message info.
2642       FND_MSG_PUB.Count_And_Get
2643       (  p_count          =>   x_msg_count,
2644          p_data           =>   x_msg_data );
2645 END Validate_Budget_Amounts;
2646 
2647 
2648 --  validation procedures
2649 
2650 PROCEDURE Validate_sales_lead(
2651     P_Init_Msg_List              IN   VARCHAR2   := FND_API.G_FALSE,
2652     P_Validation_level           IN   NUMBER     := FND_API.G_VALID_LEVEL_FULL,
2653     P_Validation_mode            IN   VARCHAR2,
2654     P_SALES_LEAD_Rec             IN OUT NOCOPY  AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type,
2655     P_Referral_Type		         IN   VARCHAR2,
2656     P_Referred_By                IN   NUMBER,
2657     X_Return_Status              OUT NOCOPY  VARCHAR2,
2658     X_Msg_Count                  OUT NOCOPY  NUMBER,
2659     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2660     )
2661 IS
2662     l_api_name   CONSTANT VARCHAR2(30) := 'Validate_sales_lead';
2663     l_item_property_rec   AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE;
2664     l_return_status       VARCHAR2(1);
2665     l_close_reason_code VARCHAR2(50);
2666 
2667 BEGIN
2668       -- Initialize message list IF p_init_msg_list is set to TRUE.
2669       IF FND_API.to_Boolean( p_init_msg_list )
2670       THEN
2671           FND_MSG_PUB.initialize;
2672       END IF;
2673 
2674       -- Debug Message
2675       IF (AS_DEBUG_LOW_ON) THEN
2676 
2677       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2678                                    'PVT:' || l_api_name || ' Start');
2679       END IF;
2680 
2681       -- Initialize API return status to SUCCESS
2682       x_return_status := FND_API.G_RET_STS_SUCCESS;
2683       l_return_status := FND_API.G_RET_STS_SUCCESS;
2684 
2685       IF ( P_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_ITEM)
2686 	 THEN
2687           -- Perform item level validation
2688           Validate_CUSTOMER_ID(
2689                   p_init_msg_list          => FND_API.G_FALSE,
2690                   p_validation_mode        => p_validation_mode,
2691                   p_CUSTOMER_ID            => P_SALES_LEAD_Rec.CUSTOMER_ID,
2692                   x_return_status          => x_return_status,
2693                   x_msg_count              => x_msg_count,
2694                   x_msg_data               => x_msg_data);
2695           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2696               l_return_status := FND_API.G_RET_STS_ERROR;
2697               -- raise FND_API.G_EXC_ERROR;
2698           END IF;
2699 
2700           Validate_ADDRESS_ID(
2701               p_init_msg_list          => FND_API.G_FALSE,
2702               p_validation_mode        => p_validation_mode,
2703               p_CUSTOMER_ID            => P_SALES_LEAD_Rec.CUSTOMER_ID,
2704               p_ADDRESS_ID             => P_SALES_LEAD_Rec.ADDRESS_ID,
2705               x_return_status          => x_return_status,
2706               x_msg_count              => x_msg_count,
2707               x_msg_data               => x_msg_data);
2708           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2709               l_return_status := FND_API.G_RET_STS_ERROR;
2710               -- raise FND_API.G_EXC_ERROR;
2711           END IF;
2712 
2713           /* This column is not required anymore
2714           Validate_LEAD_NUMBER(
2715               p_init_msg_list          => FND_API.G_FALSE,
2716               p_validation_mode        => p_validation_mode,
2717               p_LEAD_NUMBER            => P_SALES_LEAD_Rec.LEAD_NUMBER,
2718               x_return_status          => x_return_status,
2719               x_msg_count              => x_msg_count,
2720               x_msg_data               => x_msg_data);
2721           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2722               l_return_status := FND_API.G_RET_STS_ERROR;
2723               -- raise FND_API.G_EXC_ERROR;
2724           END IF;
2725           */
2726 
2727           Validate_STATUS_CODE(
2728               p_init_msg_list          => FND_API.G_FALSE,
2729               p_validation_mode        => p_validation_mode,
2730               p_STATUS_CODE            => P_SALES_LEAD_Rec.STATUS_CODE,
2731               p_sales_lead_id	 	=>P_SALES_LEAD_Rec.SALES_LEAD_ID,
2732               x_return_status          => x_return_status,
2733               x_msg_count              => x_msg_count,
2734               x_msg_data               => x_msg_data);
2735           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2736               l_return_status := FND_API.G_RET_STS_ERROR;
2737               -- raise FND_API.G_EXC_ERROR;
2738           END IF;
2739 
2740           Validate_SOURCE_PROMOTION_ID(
2741               p_init_msg_list          => FND_API.G_FALSE,
2742               p_validation_mode        => p_validation_mode,
2743               p_SOURCE_PROMOTION_ID    => P_SALES_LEAD_Rec.SOURCE_PROMOTION_ID,
2744               x_return_status          => x_return_status,
2745               x_msg_count              => x_msg_count,
2746               x_msg_data               => x_msg_data);
2747           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2748               l_return_status := FND_API.G_RET_STS_ERROR;
2749               -- raise FND_API.G_EXC_ERROR;
2750           END IF;
2751 
2752           -- 11.5.10 ckapoor Adding validation for sales methodology ID
2753 
2754           Validate_Sales_Methodology_ID(
2755 	                p_init_msg_list          => FND_API.G_FALSE,
2756 	                p_validation_mode        => p_validation_mode,
2757 	                p_Sales_Methodology_ID   => P_SALES_LEAD_Rec.SALES_METHODOLOGY_ID,
2758 	                x_return_status          => x_return_status,
2759 	                x_msg_count              => x_msg_count,
2760 	                x_msg_data               => x_msg_data);
2761 	            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2762 	                l_return_status := FND_API.G_RET_STS_ERROR;
2763 	                -- raise FND_API.G_EXC_ERROR;
2764           END IF;
2765 
2766 
2767 
2768           Validate_Sales_Stage_ID(
2769 	  	                p_init_msg_list          => FND_API.G_FALSE,
2770 	  	                p_validation_mode        => p_validation_mode,
2771 	  	                p_Sales_Methodology_ID   => P_SALES_LEAD_Rec.SALES_METHODOLOGY_ID,
2772 	  	                p_Sales_Stage_ID	 => p_sales_lead_rec.SALES_STAGE_ID,
2773 	  	                x_return_status          => x_return_status,
2774 	  	                x_msg_count              => x_msg_count,
2775 	  	                x_msg_data               => x_msg_data);
2776 	  	            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2777 	  	                l_return_status := FND_API.G_RET_STS_ERROR;
2778 	  	                -- raise FND_API.G_EXC_ERROR;
2779 	            END IF;
2780 
2781 
2782 
2783           /* This column is obsoleted in 11i
2784           Validate_CONTACT_ROLE_CODE(
2785               p_init_msg_list          => FND_API.G_FALSE,
2786               p_validation_mode        => p_validation_mode,
2787               p_CONTACT_ROLE_CODE      => P_SALES_LEAD_Rec.CONTACT_ROLE_CODE,
2788               x_return_status          => x_return_status,
2789               x_msg_count              => x_msg_count,
2790               x_msg_data               => x_msg_data);
2791           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2792               l_return_status := FND_API.G_RET_STS_ERROR;
2793               -- raise FND_API.G_EXC_ERROR;
2794           END IF;
2795           */
2796 
2797           Validate_CHANNEL_CODE(
2798               p_init_msg_list          => FND_API.G_FALSE,
2799               p_validation_mode        => p_validation_mode,
2800               p_CHANNEL_CODE           => P_SALES_LEAD_Rec.CHANNEL_CODE,
2801               x_return_status          => x_return_status,
2802               x_msg_count              => x_msg_count,
2803               x_msg_data               => x_msg_data);
2804           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2805               l_return_status := FND_API.G_RET_STS_ERROR;
2806               -- raise FND_API.G_EXC_ERROR;
2807           END IF;
2808 
2809           Validate_CURRENCY_CODE(
2810               p_init_msg_list          => FND_API.G_FALSE,
2811               p_validation_mode        => p_validation_mode,
2812               p_CURRENCY_CODE          => P_SALES_LEAD_Rec.CURRENCY_CODE,
2813               x_return_status          => x_return_status,
2814               x_msg_count              => x_msg_count,
2815               x_msg_data               => x_msg_data);
2816           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2817               l_return_status := FND_API.G_RET_STS_ERROR;
2818               -- raise FND_API.G_EXC_ERROR;
2819           END IF;
2820 
2821           Validate_DECN_TIMEFRAME_CODE(
2822               p_init_msg_list             => FND_API.G_FALSE,
2823               p_validation_mode           => p_validation_mode,
2824               p_DECISION_TIMEFRAME_CODE
2825 						 => P_SALES_LEAD_Rec.DECISION_TIMEFRAME_CODE,
2826               x_return_status             => x_return_status,
2827               x_msg_count                 => x_msg_count,
2828               x_msg_data                  => x_msg_data);
2829           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2830               l_return_status := FND_API.G_RET_STS_ERROR;
2831               -- raise FND_API.G_EXC_ERROR;
2832           END IF;
2833 
2834           Validate_CLOSE_REASON(
2835               p_init_msg_list          => FND_API.G_FALSE,
2836               p_validation_mode        => p_validation_mode,
2837               p_CLOSE_REASON           => P_SALES_LEAD_Rec.CLOSE_REASON,
2838               x_return_status          => x_return_status,
2839               x_msg_count              => x_msg_count,
2840               x_msg_data               => x_msg_data);
2841           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2842               l_return_status := FND_API.G_RET_STS_ERROR;
2843               -- raise FND_API.G_EXC_ERROR;
2844           END IF;
2845 
2846           Validate_LEAD_RANK_ID(
2847               p_init_msg_list          => FND_API.G_FALSE,
2848               p_validation_mode        => p_validation_mode,
2849               p_LEAD_RANK_ID           => P_SALES_LEAD_Rec.LEAD_RANK_ID,
2850               x_return_status          => x_return_status,
2851               x_msg_count              => x_msg_count,
2852               x_msg_data               => x_msg_data);
2853           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2854               l_return_status := FND_API.G_RET_STS_ERROR;
2855               -- raise FND_API.G_EXC_ERROR;
2856           END IF;
2857 
2858           Validate_ASSIGN_TO_PERSON_ID(
2859               p_init_msg_list          => FND_API.G_FALSE,
2860               p_validation_mode        => p_validation_mode,
2861               p_ASSIGN_TO_PERSON_ID    => P_SALES_LEAD_Rec.ASSIGN_TO_PERSON_ID,
2862               x_return_status          => x_return_status,
2863               x_msg_count              => x_msg_count,
2864               x_msg_data               => x_msg_data);
2865           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2866               l_return_status := FND_API.G_RET_STS_ERROR;
2867               -- raise FND_API.G_EXC_ERROR;
2868           END IF;
2869 
2870           Validate_ASSIGN_TO_SF_ID(
2871               p_init_msg_list           => FND_API.G_FALSE,
2872               p_validation_mode         => p_validation_mode,
2873               p_ASSIGN_TO_SALESFORCE_ID =>
2874 							    P_SALES_LEAD_Rec.ASSIGN_TO_SALESFORCE_ID,
2875               x_return_status           => x_return_status,
2876               x_msg_count               => x_msg_count,
2877               x_msg_data                => x_msg_data);
2878           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2879               l_return_status := FND_API.G_RET_STS_ERROR;
2880               -- raise FND_API.G_EXC_ERROR;
2881           END IF;
2882 
2883           Validate_BUDGET_STATUS_CODE(
2884               p_init_msg_list          => FND_API.G_FALSE,
2885               p_validation_mode        => p_validation_mode,
2886               p_BUDGET_STATUS_CODE     => P_SALES_LEAD_Rec.BUDGET_STATUS_CODE,
2887               x_return_status          => x_return_status,
2888               x_msg_count              => x_msg_count,
2889               x_msg_data               => x_msg_data);
2890           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2891               l_return_status := FND_API.G_RET_STS_ERROR;
2892               -- raise FND_API.G_EXC_ERROR;
2893           END IF;
2894 
2895           Validate_VEHICLE_RESPONSE_CODE(
2896               p_init_msg_list         => FND_API.G_FALSE,
2897               p_validation_mode       => p_validation_mode,
2898               p_VEHICLE_RESPONSE_CODE => P_SALES_LEAD_Rec.VEHICLE_RESPONSE_CODE,
2899               x_return_status         => x_return_status,
2900               x_msg_count             => x_msg_count,
2901               x_msg_data              => x_msg_data);
2902           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2903               l_return_status := FND_API.G_RET_STS_ERROR;
2904               -- raise FND_API.G_EXC_ERROR;
2905           END IF;
2906 
2907           Validate_REJECT_REASON_CODE(
2908               p_init_msg_list         => FND_API.G_FALSE,
2909               p_validation_mode       => p_validation_mode,
2910               p_REJECT_REASON_CODE    => P_SALES_LEAD_Rec.REJECT_REASON_CODE,
2911               x_return_status         => x_return_status,
2912               x_msg_count             => x_msg_count,
2913               x_msg_data              => x_msg_data);
2914           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2915               l_return_status := FND_API.G_RET_STS_ERROR;
2916               -- raise FND_API.G_EXC_ERROR;
2917           END IF;
2918 
2919           Validate_OFFER_ID(
2920               p_init_msg_list         => FND_API.G_FALSE,
2921               p_validation_mode       => p_validation_mode,
2922               P_SOURCE_PROMOTION_ID   => P_SALES_LEAD_Rec.source_promotion_id,
2923               p_OFFER_ID              => P_SALES_LEAD_Rec.OFFER_ID,
2924               x_item_property_rec     => l_item_property_rec,
2925               x_return_status         => x_return_status,
2926               x_msg_count             => x_msg_count,
2927               x_msg_data              => x_msg_data);
2928           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2929               l_return_status := FND_API.G_RET_STS_ERROR;
2930               --
2931               raise FND_API.G_EXC_ERROR;
2932           END IF;
2933 
2934 
2935 
2936           Validate_INC_PARTNER_PARTY_ID(
2937               p_init_msg_list         => FND_API.G_FALSE,
2938               p_validation_mode       => p_validation_mode,
2939               p_INC_PARTNER_PARTY_ID  =>
2940                                P_SALES_LEAD_Rec.INCUMBENT_PARTNER_PARTY_ID,
2941               x_item_property_rec     => l_item_property_rec,
2942               x_return_status         => x_return_status,
2943               x_msg_count             => x_msg_count,
2944               x_msg_data              => x_msg_data);
2945           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2946               l_return_status := FND_API.G_RET_STS_ERROR;
2947               -- raise FND_API.G_EXC_ERROR;
2948           END IF;
2949 
2950           Validate_INC_PRTNR_RESOURCE_ID(
2951               p_init_msg_list         => FND_API.G_FALSE,
2952               p_validation_mode       => p_validation_mode,
2953               p_INC_PARTNER_RESOURCE_ID =>
2954                                P_SALES_LEAD_Rec.INCUMBENT_PARTNER_RESOURCE_ID,
2955               x_item_property_rec     => l_item_property_rec,
2956               x_return_status         => x_return_status,
2957               x_msg_count             => x_msg_count,
2958               x_msg_data              => x_msg_data);
2959           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2960               l_return_status := FND_API.G_RET_STS_ERROR;
2961               -- raise FND_API.G_EXC_ERROR;
2962           END IF;
2963 
2964           Validate_PRM_EXEC_SPONSOR_FLAG(
2965               p_init_msg_list         => FND_API.G_FALSE,
2966               p_validation_mode       => p_validation_mode,
2967               p_PRM_EXEC_SPONSOR_FLAG => P_SALES_LEAD_Rec.PRM_EXEC_SPONSOR_FLAG,
2968               x_item_property_rec     => l_item_property_rec,
2969               x_return_status         => x_return_status,
2970               x_msg_count             => x_msg_count,
2971               x_msg_data              => x_msg_data);
2972           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2973               l_return_status := FND_API.G_RET_STS_ERROR;
2974               -- raise FND_API.G_EXC_ERROR;
2975           END IF;
2976 
2977           Validate_PRM_PRJ_LDINPLE_FLAG(
2978               p_init_msg_list         => FND_API.G_FALSE,
2979               p_validation_mode       => p_validation_mode,
2980               p_PRM_PRJ_LEAD_IN_PLACE_FLAG  =>
2981                                P_SALES_LEAD_Rec.PRM_PRJ_LEAD_IN_PLACE_FLAG,
2982               x_item_property_rec     => l_item_property_rec,
2983               x_return_status         => x_return_status,
2984               x_msg_count             => x_msg_count,
2985               x_msg_data              => x_msg_data);
2986           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2987               l_return_status := FND_API.G_RET_STS_ERROR;
2988               -- raise FND_API.G_EXC_ERROR;
2989           END IF;
2990 
2991           Validate_PRM_LEAD_TYPE(
2992               p_init_msg_list         => FND_API.G_FALSE,
2993               p_validation_mode       => p_validation_mode,
2994               p_PRM_LEAD_TYPE         => P_SALES_LEAD_Rec.Prm_Sales_Lead_Type,
2995               x_item_property_rec     => l_item_property_rec,
2996               x_return_status         => x_return_status,
2997               x_msg_count             => x_msg_count,
2998               x_msg_data              => x_msg_data);
2999           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3000               l_return_status := FND_API.G_RET_STS_ERROR;
3001               -- raise FND_API.G_EXC_ERROR;
3002           END IF;
3003 
3004           Validate_PRM_IND_CLS_CODE(
3005               p_init_msg_list         => FND_API.G_FALSE,
3006               p_validation_mode       => p_validation_mode,
3007               p_PRM_IND_CLASSIFICATION_CODE =>
3008                                P_SALES_LEAD_Rec.PRM_IND_CLASSIFICATION_CODE,
3009               x_item_property_rec     => l_item_property_rec,
3010               x_return_status         => x_return_status,
3011               x_msg_count             => x_msg_count,
3012               x_msg_data              => x_msg_data);
3013           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3014               l_return_status := FND_API.G_RET_STS_ERROR;
3015               -- raise FND_API.G_EXC_ERROR;
3016           END IF;
3017 
3018           Validate_PRM_ASSIGNMENT_TYPE(
3019 	                p_init_msg_list         => FND_API.G_FALSE,
3020 	                p_validation_mode       => p_validation_mode,
3021 	                p_PRM_ASSIGNMENT_TYPE   =>
3022 	                                 P_SALES_LEAD_Rec.PRM_ASSIGNMENT_TYPE,
3023 	                x_item_property_rec     => l_item_property_rec,
3024 	                x_return_status         => x_return_status,
3025 	                x_msg_count             => x_msg_count,
3026 	                x_msg_data              => x_msg_data);
3027          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3028     	 l_return_status := FND_API.G_RET_STS_ERROR;
3029 	  -- raise FND_API.G_EXC_ERROR;
3030           END IF;
3031 
3032 
3033           Validate_AUTO_ASSIGNMENT_TYPE(
3034 			p_init_msg_list         => FND_API.G_FALSE,
3035 			p_validation_mode       => p_validation_mode,
3036 			p_AUTO_ASSIGNMENT_TYPE   =>
3037 					 P_SALES_LEAD_Rec.AUTO_ASSIGNMENT_TYPE,
3038 			x_item_property_rec     => l_item_property_rec,
3039 			x_return_status         => x_return_status,
3040 			x_msg_count             => x_msg_count,
3041 			x_msg_data              => x_msg_data);
3042    	 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3043 	 l_return_status := FND_API.G_RET_STS_ERROR;
3044   	  -- raise FND_API.G_EXC_ERROR;
3045           END IF;
3046 
3047 
3048           Validate_FLAGS(
3049               p_init_msg_list         => FND_API.G_FALSE,
3050               p_validation_mode       => p_validation_mode,
3051               p_Flag_Value            => P_SALES_LEAD_Rec.ACCEPT_FLAG,
3052               p_Flag_Type             => 'ACCEPT_FLAG',
3053               x_return_status         => x_return_status,
3054               x_msg_count             => x_msg_count,
3055               x_msg_data              => x_msg_data);
3056           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3057               l_return_status := FND_API.G_RET_STS_ERROR;
3058               -- raise FND_API.G_EXC_ERROR;
3059           END IF;
3060 
3061           Validate_FLAGS(
3062               p_init_msg_list         => FND_API.G_FALSE,
3063               p_validation_mode       => p_validation_mode,
3064               p_Flag_Value            => P_SALES_LEAD_Rec.KEEP_FLAG,
3065               p_Flag_Type             => 'KEEP_FLAG',
3066               x_return_status         => x_return_status,
3067               x_msg_count             => x_msg_count,
3068               x_msg_data              => x_msg_data);
3069           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3070               l_return_status := FND_API.G_RET_STS_ERROR;
3071               -- raise FND_API.G_EXC_ERROR;
3072           END IF;
3073 
3074           Validate_FLAGS(
3075               p_init_msg_list         => FND_API.G_FALSE,
3076               p_validation_mode       => p_validation_mode,
3077               p_Flag_Value            => P_SALES_LEAD_Rec.URGENT_FLAG,
3078               p_Flag_Type             => 'URGENT_FLAG',
3079               x_return_status         => x_return_status,
3080               x_msg_count             => x_msg_count,
3081               x_msg_data              => x_msg_data);
3082           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3083               l_return_status := FND_API.G_RET_STS_ERROR;
3084               -- raise FND_API.G_EXC_ERROR;
3085           END IF;
3086 
3087           Validate_FLAGS(
3088               p_init_msg_list         => FND_API.G_FALSE,
3089               p_validation_mode       => p_validation_mode,
3090               p_Flag_Value            => P_SALES_LEAD_Rec.IMPORT_FLAG,
3091               p_Flag_Type             => 'IMPORT_FLAG',
3092               x_return_status         => x_return_status,
3093               x_msg_count             => x_msg_count,
3094               x_msg_data              => x_msg_data);
3095           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3096               l_return_status := FND_API.G_RET_STS_ERROR;
3097               -- raise FND_API.G_EXC_ERROR;
3098           END IF;
3099 
3100           Validate_FLAGS(
3101 		p_init_msg_list         => FND_API.G_FALSE,
3102 		p_validation_mode       => p_validation_mode,
3103 		p_Flag_Value            => P_SALES_LEAD_Rec.QUALIFIED_FLAG,
3104 		p_Flag_Type             => 'QUALIFIED_FLAG',
3105 		x_return_status         => x_return_status,
3106 		x_msg_count             => x_msg_count,
3107 		x_msg_data              => x_msg_data);
3108 	  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3109 		l_return_status := FND_API.G_RET_STS_ERROR;
3110 		-- raise FND_API.G_EXC_ERROR;
3111           END IF;
3112 
3113 
3114       END IF;
3115 
3116     -- Requirement has changed. Close reason is associated with lead.
3117       -- Close reason is for opportunity. We don't have to validate it.
3118       l_close_reason_code := P_SALES_LEAD_Rec.CLOSE_REASON;
3119       IF ( P_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_RECORD)
3120       THEN
3121           -- Perform record level validation
3122           Validate_STATUS_CLOSE_REASON (
3123               P_Init_Msg_List              => FND_API.G_FALSE,
3124               P_Validation_mode            => p_validation_mode,
3125               P_STATUS_CODE                => P_SALES_LEAD_Rec.STATUS_CODE,
3126               P_CLOSE_REASON_CODE          => l_close_reason_code,
3127               X_Return_Status              => x_return_status,
3128               X_Msg_Count                  => x_msg_count,
3129               X_Msg_Data                   => x_msg_data);
3130           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3131               l_return_status := FND_API.G_RET_STS_ERROR;
3132               -- raise FND_API.G_EXC_ERROR;
3133           END IF;
3134 
3135 
3136 	P_SALES_LEAD_Rec.CLOSE_REASON := l_close_reason_code;
3137 
3138 
3139           -- referral type and referred by columns are related for CAPRI
3140           /*Validate_REF_BY_REF_TYPE (
3141               P_Init_Msg_List              => FND_API.G_FALSE,
3142               P_Validation_mode            => p_validation_mode,
3143               P_REF_BY_ID                  => P_SALES_LEAD_Rec.REFERRED_BY,
3144               P_REF_TYPE_CODE              => P_SALES_LEAD_Rec.REFERRAL_TYPE,
3145               P_OLD_REF_BY_ID              => P_REFERRED_BY,
3146               P_OLD_REF_TYPE_CODE          => P_REFERRAL_TYPE,
3147               X_Return_Status              => x_return_status,
3148               X_Msg_Count                  => x_msg_count,
3149               X_Msg_Data                   => x_msg_data);
3150           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3151               l_return_status := FND_API.G_RET_STS_ERROR;
3152               -- raise FND_API.G_EXC_ERROR;
3153           END IF;*/
3154 
3155 
3156       END IF;
3157 
3158       -- Accept flag is related to decline reason Bug # 1953469
3159      /* IF ( P_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_RECORD)
3160             THEN
3161                 -- Perform record level validation
3162                 Validate_ACCEPT_REJECT_REASON (
3163                     P_Init_Msg_List              => FND_API.G_FALSE,
3164                     P_Validation_mode            => p_validation_mode,
3165                     P_ACCEPT_FLAG                => P_SALES_LEAD_Rec.ACCEPT_FLAG,
3166                     P_REJECT_REASON_CODE         => P_SALES_LEAD_Rec.REJECT_REASON_CODE,
3167                     X_Return_Status              => x_return_status,
3168                     X_Msg_Count                  => x_msg_count,
3169                     X_Msg_Data                   => x_msg_data);
3170                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3171                     l_return_status := FND_API.G_RET_STS_ERROR;
3172                     -- raise FND_API.G_EXC_ERROR;
3173                 END IF;
3174             END IF;*/
3175 
3176 
3177 
3178       -- FFANG 112700 For bug 1512008, instead of erroring out once a invalid
3179 	 -- column was found, raise the exception after all validation procedures
3180 	 -- have been gone through.
3181 	 x_return_status := l_return_status;
3182       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3183            raise FND_API.G_EXC_ERROR;
3184       END IF;
3185 	 -- END FFANG 112700
3186 
3187       -- Debug Message
3188       IF (AS_DEBUG_LOW_ON) THEN
3189 
3190       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3191                                    'PVT: ' || l_api_name || ' End');
3192       END IF;
3193 END Validate_sales_lead;
3194 
3195 
3196 
3197 
3198 -- **************************
3199 --   Sales Lead Header APIs
3200 -- **************************
3201 
3202 PROCEDURE Create_sales_lead(
3203     P_Api_Version_Number      IN  NUMBER,
3204     P_Init_Msg_List           IN  VARCHAR2 := FND_API.G_FALSE,
3205     P_Commit                  IN  VARCHAR2 := FND_API.G_FALSE,
3206     P_Validation_Level        IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
3207     P_Check_Access_Flag       IN  VARCHAR2 := FND_API.G_MISS_CHAR,
3208     P_Admin_Flag              IN  VARCHAR2 := FND_API.G_MISS_CHAR,
3209     P_Admin_Group_Id          IN  NUMBER   := FND_API.G_MISS_NUM,
3210     P_Identity_Salesforce_Id  IN  NUMBER   := FND_API.G_MISS_NUM,
3211     P_Sales_Lead_Profile_Tbl  IN  AS_UTILITY_PUB.Profile_Tbl_Type
3212                             := AS_UTILITY_PUB.G_MISS_PROFILE_TBL,
3213     P_SALES_LEAD_Rec          IN  AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type
3214                             := AS_SALES_LEADS_PUB.G_MISS_SALES_LEAD_REC,
3215     P_SALES_LEAD_LINE_Tbl     IN  AS_SALES_LEADS_PUB.SALES_LEAD_LINE_Tbl_type
3216                             := AS_SALES_LEADS_PUB.G_MISS_SALES_LEAD_LINE_Tbl,
3217     P_SALES_LEAD_CONTACT_Tbl  IN  AS_SALES_LEADS_PUB.SALES_LEAD_CONTACT_Tbl_Type
3218                             := AS_SALES_LEADS_PUB.G_MISS_SALES_LEAD_CONTACT_Tbl,
3219     X_SALES_LEAD_ID           OUT NOCOPY NUMBER,
3220     X_SALES_LEAD_LINE_OUT_Tbl OUT
3221                             AS_SALES_LEADS_PUB.SALES_LEAD_LINE_OUT_Tbl_type,
3222     X_SALES_LEAD_CNT_OUT_Tbl  OUT
3223                             AS_SALES_LEADS_PUB.SALES_LEAD_CNT_OUT_Tbl_Type,
3224     X_Return_Status           OUT NOCOPY VARCHAR2,
3225     X_Msg_Count               OUT NOCOPY NUMBER,
3226     X_Msg_Data                OUT NOCOPY VARCHAR2
3227     )
3228 
3229  IS
3230 
3231     CURSOR C_Lines_Amounts (X_Sales_Lead_ID NUMBER) IS
3232       SELECT sum (budget_amount)
3233       FROM as_sales_lead_lines
3234       where sales_lead_id = X_Sales_Lead_ID;
3235 
3236     l_api_name                  CONSTANT VARCHAR2(30) := 'Create_sales_lead';
3237     l_api_version_number        CONSTANT NUMBER   := 2.0;
3238     l_identity_sales_member_rec AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
3239     l_SALES_LEAD_ID             NUMBER;
3240     l_sales_lead_line_id        NUMBER;
3241     l_lead_contact_id           NUMBER;
3242     l_SALES_LEAD_Rec            AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type
3243                                     := p_sales_lead_rec;
3244     p_sales_lead_line_rec       AS_SALES_LEADS_PUB.SALES_LEAD_LINE_Rec_Type;
3245     p_sales_lead_contact_rec    AS_SALES_LEADS_PUB.SALES_LEAD_CONTACT_Rec_Type;
3246     l_Sales_Team_Rec            AS_ACCESS_PUB.Sales_Team_Rec_Type;
3247     l_access_profile_rec        AS_ACCESS_PUB.Access_Profile_Rec_Type;
3248     l_Sales_Lead_Log_ID         NUMBER;
3249     l_access_id                 NUMBER;
3250     l_access_flag               VARCHAR2(1);
3251     l_member_role               VARCHAR2(5);
3252     l_member_access             VARCHAR2(5);
3253     l_line_count                NUMBER    := p_sales_lead_line_tbl.count;
3254     l_contact_count             NUMBER    := p_sales_lead_contact_tbl.count;
3255     l_lines_amount              NUMBER    := 0;
3256     l_isQualified               VARCHAR2(1);
3257     l_qualified                 VARCHAR2(30);
3258 
3259     l_accept_flag               VARCHAR2(1);
3260     l_keep_flag                 VARCHAR2(1);
3261     l_urgent_flag               VARCHAR2(1);
3262     l_import_flag               VARCHAR2(1);
3263     l_deleted_flag              VARCHAR2(1);
3264     l_auto_qualify_profile	VARCHAR2(1);
3265     l_referral_status_profile VARCHAR2(30);
3266     l_exp_date 			DATE;
3267     l_timeframe_days 		NUMBER;
3268     l_manual_rank_flag          VARCHAR2(1);
3269     l_status_open_flag          VARCHAR2(1);
3270     l_lead_rank_score           NUMBER;
3271 
3272     l_country_code		VARCHAR2(60);
3273 
3274 
3275     -- 11.5.10 ckapoor Lead name rivendell change
3276 
3277     l_default_lead_name		VARCHAR2(2000);
3278     l_default_sales_stage	NUMBER;
3279 
3280     l_default_address_profile	VARCHAR2(1) := FND_PROFILE.VALUE ('AS_DEFAULT_LEAD_ADDRESS');
3281 
3282 -- Bug 3385646 - MKTU3R10:COUNTRY IS NOT POPULATED WHEN THE LEAD IS CREATED THROUGH HTML
3283     CURSOR c_get_country_code (X_CUSTOMER_ID NUMBER, X_ADDRESS_ID NUMBER) IS
3284           select LOC.COUNTRY
3285 	  FROM HZ_PARTY_SITES SITE,HZ_LOCATIONS LOC
3286 	  WHERE SITE.PARTY_ID = X_CUSTOMER_ID
3287 	  AND SITE.PARTY_SITE_ID = X_ADDRESS_ID
3288 	  AND SITE.STATUS IN ('A','I')
3289 	  AND SITE.LOCATION_ID = LOC.LOCATION_ID;
3290 
3291 
3292     CURSOR C_timeframe_days (X_DECISION_TIMEFRAME_CODE VARCHAR2) IS
3293           SELECT timeframe_days
3294           FROM aml_sales_lead_timeframes
3295           where decision_timeframe_code = X_DECISION_TIMEFRAME_CODE
3296 	  and enabled_flag='Y';
3297 
3298 
3299      CURSOR C_Get_Status_open_flag(X_Lookup_Code VARCHAR2) IS
3300           SELECT opp_open_status_flag
3301           FROM  as_statuses_b
3302           WHERE lead_flag = 'Y' and enabled_flag = 'Y'
3303             and status_code = X_Lookup_Code;
3304 
3305 
3306 
3307     CURSOR C_Get_Lead_Rank_Score (X_Rank_ID  NUMBER) IS
3308           SELECT min_score
3309           FROM   as_sales_lead_ranks_b
3310           WHERE  rank_id = X_Rank_ID;
3311 
3312 
3313     -- 11.5.10 ckapoor Lead Name changes for Rivendell
3314 
3315     CURSOR C_get_primary_contact_name(X_sales_lead_id NUMBER) IS
3316           SELECT hzp.party_name
3317           FROM  hz_parties hzp, as_sales_leads sl
3318           WHERE hzp.party_id = sl.primary_cnt_person_party_id
3319           and sl.sales_lead_id = X_sales_lead_id;
3320           -- this works since contacts API would have already updated the
3321           -- primary contacts party id information in as_sales_leads.
3322 
3323 
3324     CURSOR C_get_customer_name (X_party_id NUMBER) IS
3325           SELECT party_name
3326           FROM  hz_parties
3327           WHERE party_id = X_party_id;
3328 
3329     ----  bug 2533638 - TST1158.7:MSTR:ORG. ADDRESS IS NOT PICKED WHEN CREATING LEAD FROM PARTNER DETAIL
3330 
3331 	CURSOR primary_address ( p_customer_id NUMBER) IS
3332 	select party_site_id
3333 	from hz_party_sites
3334 	where party_id = p_customer_id
3335 	and IDENTIFYING_ADDRESS_FLAG = 'Y';
3336     ----
3337 
3338 
3339     CURSOR C_default_sales_stage(X_Sales_Meth_ID NUMBER) IS
3340 
3341     SELECT sales_stage_id
3342     FROM (
3343       SELECT asms.sales_stage_id
3344 	     FROM AS_SALES_METH_STAGE_MAP asms
3345 	         , AS_SALES_STAGES_ALL_B assa
3346 	     WHERE asms.sales_stage_id = assa.sales_stage_id
3347 	       AND TRUNC(NVL(assa.start_date_active, SYSDATE)) <= TRUNC(SYSDATE)
3348 	       AND TRUNC(NVL(assa.end_date_active, SYSDATE)) >= TRUNC(SYSDATE)
3349 	       AND sales_methodology_id = X_Sales_Meth_ID
3350 	       AND assa.applicability IN ('LEAD', 'BOTH')
3351 	       -- ckapoor 05/11/04 bug 3621389 -
3352 	       -- adding new additional condition as per AUYU
3353 	       AND assa.enabled_flag = 'Y'
3354                 -- end ckapoor
3355 		   ORDER BY asms.stage_sequence
3356 	)
3357     WHERE ROWNUM = 1 ;
3358 
3359 
3360 
3361     -- 11.5.10 end ckapoor Rivendell changes
3362 
3363 
3364 
3365 
3366 
3367 
3368 
3369 BEGIN
3370       -- Standard Start of API savepoint
3371       SAVEPOINT CREATE_SALES_LEAD_PVT;
3372 
3373       -- Standard call to check for call compatibility.
3374       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
3375                                            p_api_version_number,
3376                                            l_api_name,
3377                                            G_PKG_NAME )
3378       THEN
3379           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3380       END IF;
3381 
3382       -- Initialize message list IF p_init_msg_list is set to TRUE.
3383       IF FND_API.to_Boolean( p_init_msg_list )
3384       THEN
3385           FND_MSG_PUB.initialize;
3386       END IF;
3387 
3388 
3389 	 -- Debug Message
3390       IF (AS_DEBUG_LOW_ON) THEN
3391 
3392       AS_UTILITY_PVT.Debug_Message( FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3393                                     'PVT: ' || l_api_name || ' Start');
3394       END IF;
3395 
3396       -- Initialize API return status to SUCCESS
3397       x_return_status := FND_API.G_RET_STS_SUCCESS;
3398 
3399       --
3400       -- API body
3401       --
3402 
3403       -- ******************************************************************
3404       -- Validate Environment
3405       -- ******************************************************************
3406       IF FND_GLOBAL.User_Id IS NULL
3407       THEN
3408           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
3409           THEN
3410               AS_UTILITY_PVT.Set_Message(
3411                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3412                   p_msg_name      => 'UT_CANNOT_GET_PROFILE_VALUE',
3413                   p_token1        => 'PROFILE',
3414                   p_token1_value  => 'USER_ID');
3415 
3416           END IF;
3417           RAISE FND_API.G_EXC_ERROR;
3418       END IF;
3419 
3420       IF (p_validation_level = fnd_api.g_valid_level_full)
3421       THEN
3422           AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
3423               p_api_version_number => 2.0
3424              ,p_init_msg_list      => p_init_msg_list
3425              ,p_salesforce_id      => P_Identity_Salesforce_Id
3426              ,p_admin_group_id     => p_admin_group_id
3427              ,x_return_status      => x_return_status
3428              ,x_msg_count          => x_msg_count
3429              ,x_msg_data           => x_msg_data
3430              ,x_sales_member_rec   => l_identity_sales_member_rec);
3431       END IF;
3432 
3433       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3434           RAISE FND_API.G_EXC_ERROR;
3435       END IF;
3436 
3437       -- Set default value to accept_flag, keep_flag, urgent_flag,
3438       -- import_flag, deleted_flag, and currency_code as profile values.
3439       If (l_SALES_LEAD_rec.ACCEPT_FLAG IS NULL) or
3440          (l_SALES_LEAD_rec.ACCEPT_FLAG= FND_API.G_MISS_CHAR) or
3441          (l_SALES_LEAD_rec.KEEP_FLAG IS NULL) or
3442          (l_SALES_LEAD_rec.KEEP_FLAG = FND_API.G_MISS_CHAR) or
3443          (l_SALES_LEAD_rec.URGENT_FLAG IS NULL) or
3444          (l_SALES_LEAD_rec.URGENT_FLAG = FND_API.G_MISS_CHAR) or
3445          (l_SALES_LEAD_rec.IMPORT_FLAG IS NULL) or
3446          (l_SALES_LEAD_rec.IMPORT_FLAG = FND_API.G_MISS_CHAR) or
3447          (l_SALES_LEAD_rec.DELETED_FLAG IS NULL) or
3448          (l_SALES_LEAD_rec.DELETED_FLAG = FND_API.G_MISS_CHAR) or
3449          (l_SALES_LEAD_rec.currency_code IS NULL) or
3450          (l_SALES_LEAD_rec.currency_code = FND_API.G_MISS_CHAR)
3451       THEN
3452           IF (AS_DEBUG_LOW_ON) THEN
3453 
3454           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3455                                        'Calling Set_default_values');
3456           END IF;
3457 
3458           Set_default_values(
3459                 p_mode               => AS_UTILITY_PVT.G_CREATE,
3460                 px_SALES_LEAD_rec    => l_SALES_LEAD_Rec);
3461 
3462       End If;
3463 
3464       -----
3465       -- Default the customer address to primary address if necessary
3466       IF nvl(l_default_address_profile, 'N') = 'Y' AND
3467          ((l_SALES_LEAD_rec.address_id IS NULL) OR
3468           (l_SALES_LEAD_rec.address_id = FND_API.G_MISS_NUM))
3469       THEN
3470 	  open primary_address(l_SALES_LEAD_rec.customer_id );
3471 	  fetch  primary_address into l_SALES_LEAD_rec.address_id;
3472 	  close  primary_address;
3473 
3474 	  If (l_SALES_LEAD_rec.address_id IS NULL OR
3475 	      l_SALES_LEAD_rec.address_id = FND_API.G_MISS_NUM )
3476 	  THEN
3477           IF (AS_DEBUG_LOW_ON) THEN
3478 	      AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3479                    'No primary address for customer');
3480 	      END IF;
3481 
3482 	  END IF;
3483       END IF;
3484 
3485       -----
3486 
3487 
3488       -- Debug message
3489       IF (AS_DEBUG_LOW_ON) THEN
3490 
3491       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3492                                    'Calling Validate_sales_lead');
3493       END IF;
3494 
3495       -- Invoke validation procedures
3496       Validate_sales_lead(
3497               p_init_msg_list    => FND_API.G_FALSE,
3498               p_validation_level => p_validation_level,
3499               p_validation_mode  => AS_UTILITY_PVT.G_CREATE,
3500               P_SALES_LEAD_Rec   => l_SALES_LEAD_Rec,
3501 	          p_referral_type    => FND_API.G_MISS_CHAR,
3502               p_referred_by      => FND_API.G_MISS_NUM,
3503               x_return_status    => x_return_status,
3504               x_msg_count        => x_msg_count,
3505               x_msg_data         => x_msg_data);
3506 
3507       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
3508           RAISE FND_API.G_EXC_ERROR;
3509       END IF;
3510 
3511       IF(P_Check_Access_Flag = 'Y') THEN
3512           -- Call Get_Access_Profiles to get access_profile_rec
3513           IF (AS_DEBUG_LOW_ON) THEN
3514 
3515           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3516                                        'Calling Get_Access_Profiles');
3517           END IF;
3518 
3519           AS_SALES_LEADS_PUB.Get_Access_Profiles(
3520               p_profile_tbl         => p_sales_lead_profile_tbl,
3521               x_access_profile_rec  => l_access_profile_rec);
3522 
3523           IF (AS_DEBUG_LOW_ON) THEN
3524 
3525 
3526 
3527           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3528                                        'Calling Has_viewCustomerAccess');
3529 
3530           END IF;
3531 
3532           AS_ACCESS_PUB.Has_viewCustomerAccess(
3533               p_api_version_number     => 2.0,
3534               p_init_msg_list          => p_init_msg_list,
3535               p_validation_level       => p_validation_level,
3536               p_access_profile_rec     => l_access_profile_rec,
3537               p_admin_flag             => p_admin_flag,
3538               p_admin_group_id         => p_admin_group_id,
3539               p_person_id              =>
3540                                 l_identity_sales_member_rec.employee_person_id,
3541               p_customer_id            => l_sales_lead_rec.customer_id,
3542               p_check_access_flag      => 'Y',
3543               p_identity_salesforce_id => p_identity_salesforce_id,
3544               p_partner_cont_party_id  => NULL,
3545               x_return_status          => x_return_status,
3546               x_msg_count              => x_msg_count,
3547               x_msg_data               => x_msg_data,
3548               x_view_access_flag       => l_access_flag);
3549 
3550           IF l_access_flag <> 'Y' THEN
3551               IF (AS_DEBUG_ERROR_ON) THEN
3552 
3553               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3554                                            'API_NO_CREATE_PRIVILEGE');
3555               END IF;
3556               RAISE FND_API.G_EXC_ERROR;
3557           END IF;
3558 
3559           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3560               RAISE FND_API.G_EXC_ERROR;
3561           END IF;
3562 
3563       END IF;
3564 
3565       -- Debug Message
3566       IF (AS_DEBUG_LOW_ON) THEN
3567 
3568       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3569                                   'Calling Sales_Lead_Insert_Row');
3570       END IF;
3571 
3572       -- auto qualify lead
3573 
3574       -- ffang 120900, for bug 1504040
3575       -- only when the status is "New" or "Unqualified" then launch
3576       -- auto-qualification.
3577 
3578       -- ffang 100200: for bug 1416170
3579       -- Do auto-qualify only when keep_flag <> 'Y' or keep_flag is NULL
3580       -- IF (AS_DEBUG_LOW_ON) THEN  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3581       --                        'keep_flag : ' || l_sales_lead_rec.keep_flag); END IF;
3582       -- IF (l_sales_lead_rec.keep_flag <> 'Y') or
3583       --    (l_sales_lead_rec.keep_flag is NULL)
3584 
3585 
3586 
3587       /*
3588       l_auto_qualify_profile :=  nvl(FND_PROFILE.Value('AS_AUTO_QUALIFY'),'N');
3589       IF(l_sales_lead_rec.qualified_flag = 'N' and
3590       		l_auto_qualify_profile = 'Y')
3591 
3592       --IF (l_sales_lead_rec.status_code = 'NEW' or
3593       --    l_sales_lead_rec.status_code = 'UNQUALIFIED')
3594       THEN
3595           -- Launch auto-qualification
3596           if P_SALES_LEAD_CONTACT_Tbl.exists(1) then
3597             l_isQualified := IS_LEAD_QUALIFIED(l_SALES_LEAD_Rec,
3598                                          P_SALES_LEAD_CONTACT_Tbl(1).phone_id ,
3599                                          P_SALES_LEAD_CONTACT_Tbl(1).contact_role_code);
3600           else
3601             l_isQualified := IS_LEAD_QUALIFIED(l_SALES_LEAD_Rec, null,null);
3602           end if;
3603 
3604           --if l_isQualified = 'Y' then
3605           --    l_qualified := 'QUALIFIED';
3606           --else
3607           --    -- ffang 120900, for bug 1504040
3608           --    -- If the lead fails qualification, at anytime the status
3609           --    -- should be "Unqualified".
3610           --    -- l_qualified := l_sales_lead_rec.STATUS_CODE;
3611           --    l_qualified := 'UNQUALIFIED';
3612           --end if;
3613           l_qualified := l_isQualified;
3614       ELSE
3615       	  -- Qualification does not affect status 11.5.4.09
3616           --l_qualified := l_sales_lead_rec.STATUS_CODE;
3617           l_qualified := l_sales_lead_rec.QUALIFIED_FLAG;
3618       END IF; */
3619       -- end ffang 100200
3620 
3621       l_qualified := l_sales_lead_rec.QUALIFIED_FLAG;
3622 
3623       -- do check on referral type. If a non null referral type is being passed in,
3624       -- then make sure referral status is set to the profile of REF_STATUS_FOR_NEW_LEAD
3625       -- of course use the profile for setting referral status only if referral status is not being manually passed in
3626 
3627       if ((l_SALES_LEAD_rec.REFERRAL_STATUS is null or l_SALES_LEAD_rec.REFERRAL_STATUS = FND_API.G_MISS_CHAR )
3628           and l_SALES_LEAD_rec.REFERRAL_TYPE is not null and l_sales_lead_rec.REFERRAL_TYPE <> FND_API.G_MISS_CHAR)
3629       then
3630           l_referral_status_profile :=  FND_PROFILE.Value('REF_STATUS_FOR_NEW_LEAD');
3631       else
3632           l_referral_status_profile := l_sales_lead_rec.REFERRAL_STATUS;
3633       end if;
3634 
3635       if (l_SALES_LEAD_rec.LEAD_DATE is null) then
3636         l_SALES_LEAD_rec.LEAD_DATE := SYSDATE;
3637       end if;
3638 
3639      if (l_SALES_LEAD_rec.SOURCE_SYSTEM is null) then
3640         l_SALES_LEAD_rec.SOURCE_SYSTEM := 'USER';
3641       end if;
3642 
3643 
3644      -- expiration date is calculated as creation_date + time frame days (for a smart timeframe)
3645      -- if no smart timeframe, then exp date is null.
3646 
3647      l_exp_date := null;
3648      l_timeframe_days := 0;
3649 
3650 
3651       OPEN  C_timeframe_days (l_sales_lead_rec.DECISION_TIMEFRAME_CODE);
3652       FETCH C_timeframe_days into l_timeframe_days;
3653 
3654       IF C_timeframe_days%NOTFOUND
3655       THEN
3656        	l_exp_date := null;
3657 
3658       ELSE
3659       	l_exp_date := sysdate + l_timeframe_days;
3660       END IF;
3661 
3662 
3663       CLOSE C_timeframe_days ;
3664 
3665 
3666 
3667             --Denorm fix 04/30/03 ckapoor
3668             --Get the open status flag for status
3669 
3670             OPEN  C_Get_Status_open_flag ( l_sales_lead_rec.STATUS_CODE);
3671             FETCH C_Get_Status_open_flag into l_status_open_flag;
3672             Close C_Get_Status_open_flag;
3673 
3674             -- now this open status flag will be logged in the sales lead table.
3675 
3676 	    -- Bug 3385646 - MKTU3R10:COUNTRY IS NOT POPULATED WHEN THE LEAD IS CREATED THROUGH HTML
3677 
3678 	    OPEN  c_get_country_code ( l_sales_lead_rec.customer_id, l_sales_lead_rec.address_id);
3679             FETCH c_get_country_code into l_country_code;
3680             Close c_get_country_code;
3681 
3682 	    --Get the score for the rank
3683 
3684             OPEN  C_Get_Lead_Rank_Score ( l_sales_lead_rec.LEAD_RANK_ID);
3685             FETCH C_Get_Lead_Rank_Score into l_lead_rank_score;
3686             Close C_Get_Lead_Rank_Score;
3687 
3688             -- now this lead rank score will be logged in the sales lead table.
3689             IF (AS_DEBUG_LOW_ON) THEN
3690 
3691 	    	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3692                        'lead_rank_score : ' || l_lead_rank_score);
3693 
3694 	   END IF;
3695 
3696 	   if (l_sales_lead_rec.lead_rank_id is null)
3697 	   then
3698 	 	 l_lead_rank_score :=0;
3699 	   end if;
3700 
3701 
3702             -- End Denorm fix
3703 
3704 
3705 
3706 	-- 11.5.10 ckapoor sales methodology fix
3707 	-- if sales methodology is not null and not g_miss, and if sales stage is missing
3708 	-- then default sales stage
3709 
3710 	l_default_sales_stage := null;
3711 
3712 	    IF (AS_DEBUG_LOW_ON) THEN
3713 
3714 		AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3715 		                       'sales meth'|| l_sales_lead_rec.SALES_METHODOLOGY_ID);
3716 	    END IF;
3717 
3718 	    IF (AS_DEBUG_LOW_ON) THEN
3719 
3720 		AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3721 			                       'sales stage'|| l_sales_lead_rec.SALES_STAGE_ID);
3722 	    END IF;
3723 
3724 
3725 
3726 	if ( ((l_sales_lead_rec.sales_methodology_id is not null) and (l_sales_lead_rec.sales_methodology_id <> FND_API.G_MISS_NUM))
3727 	       and ((l_sales_lead_rec.SALES_STAGE_ID is null) or (l_sales_lead_rec.sales_stage_id = FND_API.G_MISS_NUM)))
3728 	then
3729 
3730 
3731 		IF (AS_DEBUG_LOW_ON) THEN
3732 
3733 
3734 	        	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3735 	                       'CK:: defaulting sales stage');
3736 
3737 		end if;
3738 
3739 		OPEN  C_default_sales_stage (l_sales_lead_rec.sales_methodology_id);
3740 		      FETCH C_default_sales_stage into l_default_sales_stage;
3741 
3742 		      if (C_default_sales_stage%NOTFOUND) then
3743 		      	l_default_sales_stage := l_sales_lead_rec.sales_stage_id;
3744 		      end if;
3745 
3746 
3747 	              CLOSE C_default_sales_stage ;
3748 	else
3749 		l_default_sales_stage :=  l_sales_lead_rec.sales_stage_id;
3750 
3751 	end if;
3752 
3753 
3754 
3755 
3756 
3757 
3758       -- Invoke table handler(Sales_Lead_Insert_Row)
3759       x_SALES_LEAD_ID := l_SALES_LEAD_rec.SALES_LEAD_ID;
3760 
3761       AS_SALES_LEADS_PKG.Sales_Lead_Insert_Row(
3762           px_SALES_LEAD_ID  => x_SALES_LEAD_ID,
3763           p_LAST_UPDATE_DATE  => SYSDATE,
3764           p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
3765           p_CREATION_DATE  => SYSDATE,
3766           p_CREATED_BY  => FND_GLOBAL.USER_ID,
3767           p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID,
3768           p_REQUEST_ID  => FND_GLOBAL.Conc_Request_Id,
3769           p_PROGRAM_APPLICATION_ID  => FND_GLOBAL.Prog_Appl_Id,
3770           p_PROGRAM_ID  => FND_GLOBAL.Conc_Program_Id,
3771           p_PROGRAM_UPDATE_DATE  => SYSDATE,
3772           p_LEAD_NUMBER  => x_SALES_LEAD_ID,
3773           --p_STATUS_CODE  => l_qualified,
3774           p_STATUS_CODE => l_SALES_LEAD_rec.STATUS_CODE,
3775           p_CUSTOMER_ID  => l_SALES_LEAD_rec.CUSTOMER_ID,
3776           p_ADDRESS_ID  => l_SALES_LEAD_rec.ADDRESS_ID,
3777           p_SOURCE_PROMOTION_ID  => l_SALES_LEAD_rec.SOURCE_PROMOTION_ID,
3778           p_INITIATING_CONTACT_ID  => l_SALES_LEAD_rec.INITIATING_CONTACT_ID,
3779           p_ORIG_SYSTEM_REFERENCE  => l_SALES_LEAD_rec.ORIG_SYSTEM_REFERENCE,
3780           p_CONTACT_ROLE_CODE  => l_SALES_LEAD_rec.CONTACT_ROLE_CODE,
3781           p_CHANNEL_CODE  => l_SALES_LEAD_rec.CHANNEL_CODE,
3782           p_BUDGET_AMOUNT  => l_SALES_LEAD_rec.BUDGET_AMOUNT,
3783           p_CURRENCY_CODE  => l_SALES_LEAD_rec.CURRENCY_CODE,
3784           p_DECISION_TIMEFRAME_CODE => l_SALES_LEAD_rec.DECISION_TIMEFRAME_CODE,
3785           p_CLOSE_REASON  => l_SALES_LEAD_rec.CLOSE_REASON,
3786           p_LEAD_RANK_ID  => l_SALES_LEAD_rec.LEAD_RANK_ID,
3787           p_LEAD_RANK_CODE  => l_SALES_LEAD_rec.LEAD_RANK_CODE,
3788           p_PARENT_PROJECT  => l_SALES_LEAD_rec.PARENT_PROJECT,
3789           p_DESCRIPTION  => l_SALES_LEAD_rec.DESCRIPTION,
3790           p_ATTRIBUTE_CATEGORY  => l_SALES_LEAD_rec.ATTRIBUTE_CATEGORY,
3791           p_ATTRIBUTE1  => l_SALES_LEAD_rec.ATTRIBUTE1,
3792           p_ATTRIBUTE2  => l_SALES_LEAD_rec.ATTRIBUTE2,
3793           p_ATTRIBUTE3  => l_SALES_LEAD_rec.ATTRIBUTE3,
3794           p_ATTRIBUTE4  => l_SALES_LEAD_rec.ATTRIBUTE4,
3795           p_ATTRIBUTE5  => l_SALES_LEAD_rec.ATTRIBUTE5,
3796           p_ATTRIBUTE6  => l_SALES_LEAD_rec.ATTRIBUTE6,
3797           p_ATTRIBUTE7  => l_SALES_LEAD_rec.ATTRIBUTE7,
3798           p_ATTRIBUTE8  => l_SALES_LEAD_rec.ATTRIBUTE8,
3799           p_ATTRIBUTE9  => l_SALES_LEAD_rec.ATTRIBUTE9,
3800           p_ATTRIBUTE10  => l_SALES_LEAD_rec.ATTRIBUTE10,
3801           p_ATTRIBUTE11  => l_SALES_LEAD_rec.ATTRIBUTE11,
3802           p_ATTRIBUTE12  => l_SALES_LEAD_rec.ATTRIBUTE12,
3803           p_ATTRIBUTE13  => l_SALES_LEAD_rec.ATTRIBUTE13,
3804           p_ATTRIBUTE14  => l_SALES_LEAD_rec.ATTRIBUTE14,
3805           p_ATTRIBUTE15  => l_SALES_LEAD_rec.ATTRIBUTE15,
3806           p_ASSIGN_TO_PERSON_ID  => l_SALES_LEAD_rec.ASSIGN_TO_PERSON_ID,
3807           p_ASSIGN_TO_SALESFORCE_ID => l_SALES_LEAD_rec.ASSIGN_TO_SALESFORCE_ID,
3808           p_ASSIGN_SALES_GROUP_ID => l_SALES_LEAD_rec.ASSIGN_SALES_GROUP_ID,
3809           --p_ASSIGN_DATE  => l_SALES_LEAD_rec.ASSIGN_DATE,
3810           p_ASSIGN_DATE  => SYSDATE,
3811           p_BUDGET_STATUS_CODE  => l_SALES_LEAD_rec.BUDGET_STATUS_CODE,
3812           p_ACCEPT_FLAG  => l_SALES_LEAD_rec.ACCEPT_FLAG,
3813           p_VEHICLE_RESPONSE_CODE  => l_SALES_LEAD_rec.VEHICLE_RESPONSE_CODE,
3814           p_TOTAL_SCORE   => l_SALES_LEAD_rec.TOTAL_SCORE,
3815           p_SCORECARD_ID  => l_SALES_LEAD_rec.SCORECARD_ID,
3816           p_KEEP_FLAG     => l_SALES_LEAD_rec.KEEP_FLAG,
3817           p_URGENT_FLAG   => l_SALES_LEAD_rec.URGENT_FLAG,
3818           p_IMPORT_FLAG   => l_SALES_LEAD_rec.IMPORT_FLAG,
3819           p_REJECT_REASON_CODE  => l_SALES_LEAD_rec.REJECT_REASON_CODE,
3820           p_DELETED_FLAG => l_SALES_LEAD_rec.DELETED_FLAG,
3821           p_OFFER_ID  => l_SALES_LEAD_rec.OFFER_ID,
3822           --p_QUALIFIED_FLAG => l_SALES_LEAD_rec.QUALIFIED_FLAG,
3823           p_QUALIFIED_FLAG => l_qualified,
3824           p_ORIG_SYSTEM_CODE => l_SALES_LEAD_rec.ORIG_SYSTEM_CODE,
3825 --        p_SECURITY_GROUP_ID    => l_SALES_LEAD_rec.SECURITY_GROUP_ID,
3826           p_INC_PARTNER_PARTY_ID => l_SALES_LEAD_rec.INCUMBENT_PARTNER_PARTY_ID,
3827           p_INC_PARTNER_RESOURCE_ID =>
3828                               l_SALES_LEAD_rec.INCUMBENT_PARTNER_RESOURCE_ID,
3829           p_PRM_EXEC_SPONSOR_FLAG   => l_SALES_LEAD_rec.PRM_EXEC_SPONSOR_FLAG,
3830           p_PRM_PRJ_LEAD_IN_PLACE_FLAG =>
3831                               l_SALES_LEAD_rec.PRM_PRJ_LEAD_IN_PLACE_FLAG,
3832           p_PRM_SALES_LEAD_TYPE     => l_SALES_LEAD_rec.PRM_SALES_LEAD_TYPE,
3833           p_PRM_IND_CLASSIFICATION_CODE =>
3834                               l_SALES_LEAD_rec.PRM_IND_CLASSIFICATION_CODE,
3835 	  p_PRM_ASSIGNMENT_TYPE => l_SALES_LEAD_rec.PRM_ASSIGNMENT_TYPE,
3836 	  p_AUTO_ASSIGNMENT_TYPE => l_SALEs_LEAD_rec.AUTO_ASSIGNMENT_TYPE,
3837 	  p_PRIMARY_CONTACT_PARTY_ID => l_SALES_LEAD_rec.PRIMARY_CONTACT_PARTY_ID,
3838 	  p_PRIMARY_CNT_PERSON_PARTY_ID => l_SALES_LEAD_rec.PRIMARY_CNT_PERSON_PARTY_ID,
3839 	  p_PRIMARY_CONTACT_PHONE_ID => l_SALES_LEAD_rec.PRIMARY_CONTACT_PHONE_ID,
3840 	  -- new columns for CAPRI lead referral
3841 
3842 	  p_REFERRED_BY => l_SALES_LEAD_rec.REFERRED_BY,
3843 	  p_REFERRAL_TYPE => l_SALES_LEAD_rec.REFERRAL_TYPE,
3844 	  p_REFERRAL_STATUS => l_referral_status_profile,
3845 	  p_REF_DECLINE_REASON => l_SALES_LEAD_rec.REF_DECLINE_REASON,
3846 	  p_REF_COMM_LTR_STATUS => l_SALES_LEAD_rec.REF_COMM_LTR_STATUS,
3847 	  p_REF_ORDER_NUMBER => l_SALES_LEAD_rec.REF_ORDER_NUMBER,
3848 	  p_REF_ORDER_AMT => l_SALES_LEAD_rec.REF_ORDER_AMT,
3849 	  p_REF_COMM_AMT => l_SALES_LEAD_rec.REF_COMM_AMT,
3850 
3851 	  p_LEAD_DATE => l_SALES_LEAD_rec.LEAD_DATE,
3852 	  p_SOURCE_SYSTEM => l_SALES_LEAD_rec.SOURCE_SYSTEM,
3853 
3854 	  -- Bug 3385646 - MKTU3R10:COUNTRY IS NOT POPULATED WHEN THE LEAD IS CREATED THROUGH HTML
3855 
3856 	  p_COUNTRY => l_country_code, --l_SALES_LEAD_rec.COUNTRY,
3857 
3858 	  p_TOTAL_AMOUNT => l_SALES_LEAD_rec.TOTAL_AMOUNT,
3859 	  p_EXPIRATION_DATE => l_exp_date, --l_SALES_LEAD_rec.EXPIRATION_DATE,
3860 
3861 	  p_LEAD_RANK_IND => l_SALES_LEAD_rec.LEAD_RANK_IND,
3862 	  p_LEAD_ENGINE_RUN_DATE => l_SALES_LEAD_rec.LEAD_ENGINE_RUN_DATE,
3863 
3864 	  p_CURRENT_REROUTES => l_SALES_LEAD_rec.CURRENT_REROUTES
3865 
3866           -- new columns for appsperf CRMAP denorm project bug 2928041
3867 
3868           ,p_STATUS_OPEN_FLAG =>   l_status_open_flag
3869                                  --FND_API.G_MISS_CHAR
3870           ,p_LEAD_RANK_SCORE => l_lead_rank_score
3871           			 --FND_API.G_MISS_NUM
3872 
3873 
3874 	  -- ckapoor 11.5.10 New columns
3875 
3876 	  , p_MARKETING_SCORE	=> l_SALES_LEAD_rec.MARKETING_SCORE
3877 	, p_INTERACTION_SCORE	=> l_SALES_LEAD_rec.INTERACTION_SCORE
3878 	, p_SOURCE_PRIMARY_REFERENCE	=> l_SALES_LEAD_rec.SOURCE_PRIMARY_REFERENCE
3879 	, p_SOURCE_SECONDARY_REFERENCE	=> l_SALES_LEAD_rec.SOURCE_SECONDARY_REFERENCE
3880 	, p_SALES_METHODOLOGY_ID	=> l_SALES_LEAD_rec.SALES_METHODOLOGY_ID
3881 	, p_SALES_STAGE_ID		=> l_default_sales_stage
3882 	--l_SALES_LEAD_rec.SALES_STAGE_ID
3883 
3884           );
3885 
3886       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3887           RAISE FND_API.G_EXC_ERROR;
3888       END IF;
3889 
3890       l_SALES_LEAD_ID := x_SALES_LEAD_ID;
3891 
3892       IF l_SALES_LEAD_rec.LEAD_RANK_ID IS NOT NULL
3893       THEN
3894           l_manual_rank_flag := 'Y';
3895       END IF;
3896 
3897       IF (AS_DEBUG_LOW_ON) THEN
3898 
3899       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3900                                    'xSalesLeadID is '||l_sales_lead_id);
3901 
3902       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3903                                    'Calling AS_SALES_LEADS_LOG_PKG.Insert_Row');
3904       END IF;
3905 
3906       -- Call API to create log entry
3907 
3908       AS_SALES_LEADS_LOG_PKG.Insert_Row(
3909             px_log_id                => l_sales_lead_log_id ,
3910             p_sales_lead_id          => l_sales_lead_id,
3911             p_created_by             => fnd_global.user_id,
3912             p_creation_date          => sysdate,
3913             p_last_updated_by        => fnd_global.user_id,
3914             p_last_update_date       => sysdate,
3915             p_last_update_login      =>  FND_GLOBAL.CONC_LOGIN_ID,
3916             -- using standard parameters for program who columns
3917             p_request_id             => FND_GLOBAL.Conc_Request_Id,
3918             p_program_application_id => FND_GLOBAL.Prog_Appl_Id,
3919             p_program_id             => FND_GLOBAL.Conc_Program_Id,
3920             p_program_update_date    => sysdate,
3921             p_status_code            => l_sales_lead_rec.status_code,
3922             p_assign_to_person_id    => l_sales_lead_rec.assign_to_person_id,
3923             p_assign_to_salesforce_id=>l_sales_lead_rec.assign_to_salesforce_id,
3924             p_reject_reason_code     => l_sales_lead_rec.reject_reason_code,
3925             p_assign_sales_group_id  => l_sales_lead_rec.assign_sales_group_id,
3926             p_lead_rank_id           => l_sales_lead_rec.lead_rank_id,
3927             p_qualified_flag         => l_qualified,
3928             p_category		     => fnd_api.g_miss_char,
3929             p_manual_rank_flag       => l_manual_rank_flag
3930             );
3931 
3932       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3933           RAISE FND_API.G_EXC_ERROR;
3934       END IF;
3935 
3936 
3937        -- For referral leads, create another entry in the logs table so that it is tracked as a referral lead also
3938 
3939        if ( l_SALES_LEAD_rec.REFERRAL_TYPE is not null and l_sales_lead_rec.REFERRAL_TYPE <> FND_API.G_MISS_CHAR) then
3940 
3941                l_sales_lead_log_id := null;
3942 
3943                AS_SALES_LEADS_LOG_PKG.Insert_Row(
3944                   px_log_id                => l_sales_lead_log_id ,
3945                   p_sales_lead_id          => l_sales_lead_id,
3946                   p_created_by             => fnd_global.user_id,
3947                   p_creation_date          => sysdate,
3948                   p_last_updated_by        => fnd_global.user_id,
3949                   p_last_update_date       => sysdate,
3950                   p_last_update_login      =>  FND_GLOBAL.CONC_LOGIN_ID,
3951                   -- using standard parameters for program who columns
3952                   p_request_id             => FND_GLOBAL.Conc_Request_Id,
3953                   p_program_application_id => FND_GLOBAL.Prog_Appl_Id,
3954                   p_program_id             => FND_GLOBAL.Conc_Program_Id,
3955                   p_program_update_date    => sysdate,
3956                   p_status_code            => l_referral_status_profile, -- for referral log, we use referral status
3957                   p_assign_to_person_id    => l_sales_lead_rec.assign_to_person_id,
3958                   p_assign_to_salesforce_id=>l_sales_lead_rec.assign_to_salesforce_id,
3959                   p_reject_reason_code     => l_sales_lead_rec.reject_reason_code,
3960                   p_assign_sales_group_id  => l_sales_lead_rec.assign_sales_group_id,
3961                   p_lead_rank_id           => l_sales_lead_rec.lead_rank_id,
3962                   p_qualified_flag        => l_qualified,
3963                   p_category		    => 'REFERRAL'
3964                   );
3965 
3966 
3967             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3968                 RAISE FND_API.G_EXC_ERROR;
3969             END IF;
3970 
3971 /*            IF (AS_DEBUG_LOW_ON) THEN                        AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3972                                            'Before notify party');            END IF;
3973 
3974             AS_SALES_LEAD_REFERRAL.Notify_Party (
3975                   p_api_version        => 1.0 ,
3976                   p_init_msg_list    => FND_API.g_false ,
3977                   p_commit            => FND_API.g_false ,
3978                   p_validation_level  => FND_API.g_valid_level_full ,
3979                   p_lead_id     => l_sales_lead_id ,
3980                   p_lead_status     => l_referral_status_profile ,
3981                   p_salesforce_id    => P_identity_salesforce_id ,
3982                   p_overriding_usernames => AS_SALES_LEAD_REFERRAL.G_MISS_OVER_USERNAMES_TBL ,
3983                   x_Msg_Count        => x_msg_count,
3984                   x_Msg_Data          => x_msg_data ,
3985                   x_Return_Status    => x_return_status
3986             );
3987 
3988              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3989                 IF (AS_DEBUG_LOW_ON) THEN
3990 
3991                 AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
3992                                                 'Private API: Notification for creating referral lead failed');
3993                 END IF;
3994            END IF;
3995 
3996             IF (AS_DEBUG_LOW_ON) THEN
3997 
3998 
3999 
4000             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4001                                    'After notify party');
4002 
4003             END IF;  */
4004       end if;
4005 
4006 
4007 
4008       -- Create access record
4009       IF l_sales_lead_rec.assign_to_salesforce_id IS NOT NULL AND
4010          l_sales_lead_rec.assign_to_salesforce_id <> FND_API.G_MISS_NUM THEN
4011         -- Create access security in as_accesses_all
4012         -- l_Sales_Team_Rec.access_id            := FND_API.G_MISS_NUM;
4013         l_Sales_Team_Rec.last_update_date     := SYSDATE;
4014         l_Sales_Team_Rec.last_updated_by      := FND_GLOBAL.USER_ID;
4015         l_Sales_Team_Rec.creation_date	      := SYSDATE;
4016         l_Sales_Team_Rec.created_by           := FND_GLOBAL.USER_ID;
4017         l_Sales_Team_Rec.last_update_login    := FND_GLOBAL.CONC_LOGIN_ID;
4018         -- l_Sales_Team_Rec.team_leader_flag     := FND_API.G_MISS_CHAR;
4019         l_Sales_Team_Rec.customer_id          := l_SALES_LEAD_rec.Customer_Id;
4020         l_Sales_Team_Rec.address_id           := l_SALES_LEAD_rec.Address_Id;
4021         l_Sales_Team_Rec.salesforce_id        :=
4022                                     l_SALES_LEAD_rec.ASSIGN_TO_SALESFORCE_ID;
4023         l_Sales_Team_Rec.person_id            :=
4024                                     l_SALES_LEAD_rec.ASSIGN_TO_PERSON_ID;
4025         l_Sales_Team_Rec.sales_group_id       :=
4026                                     l_SALES_LEAD_rec.ASSIGN_SALES_GROUP_ID;
4027         l_Sales_Team_Rec.sales_lead_id        := x_sales_lead_id;
4028 
4029 	l_Sales_Team_Rec.team_leader_flag     := 'Y';
4030 
4031 	l_Sales_Team_Rec.owner_flag           := 'Y';
4032     l_Sales_Team_Rec.freeze_flag          := 'Y';
4033 
4034 
4035     l_Sales_Team_Rec.created_by_TAP_flag := 'N';
4036 
4037 
4038         -- Debug Message
4039         IF (AS_DEBUG_LOW_ON) THEN
4040 
4041         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4042                                      'Calling Create_SalesTeam');
4043         END IF;
4044 
4045         AS_ACCESS_PUB.Create_SalesTeam (
4046            p_api_version_number         => 2.0
4047           ,p_init_msg_list              => FND_API.G_FALSE
4048           ,p_commit                     => FND_API.G_FALSE
4049           ,p_validation_level           => p_Validation_Level
4050           ,p_access_profile_rec         => l_access_profile_rec
4051           ,p_check_access_flag          => 'N'
4052           ,p_admin_flag                 => P_Admin_Flag
4053           ,p_admin_group_id             => P_Admin_Group_Id
4054           ,p_identity_salesforce_id     => P_Identity_Salesforce_Id
4055           ,p_sales_team_rec             => l_Sales_Team_Rec
4056           ,X_Return_Status              => x_Return_Status
4057           ,X_Msg_Count                  => X_Msg_Count
4058           ,X_Msg_Data                   => X_Msg_Data
4059           ,x_access_id                  => l_Access_Id
4060         );
4061 
4062         -- Debug Message
4063 
4064         IF (AS_DEBUG_LOW_ON) THEN
4065 
4066 
4067 
4068         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4069                            'access_id : ' || l_Access_Id);
4070 
4071         END IF;
4072         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4073              RAISE FND_API.G_EXC_ERROR;
4074         END IF;
4075       END IF;
4076 
4077       -- Create Sales Lead Lines
4078       IF p_SALES_LEAD_LINE_tbl.COUNT >= 1 THEN
4079         -- Debug Message
4080         IF (AS_DEBUG_LOW_ON) THEN
4081 
4082         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4083                                      'Calling Create_sales_lead_lines');
4084         END IF;
4085 
4086         -- ffang020201, if sales lead isn't assigned, access record hasn't been
4087 	   -- created. P_check_access_flag should pass 'N' to avoid checking
4088 	   -- has_updateLeadAccess
4089         AS_SALES_LEAD_LINES_PVT.Create_sales_lead_lines(
4090                 P_Api_Version_Number  => 2.0 ,
4091                 P_Init_Msg_List       => FND_API.G_FALSE,
4092                 P_Commit              => FND_API.G_FALSE,
4093                 p_validation_level    => P_Validation_Level,
4094                 P_Check_Access_Flag   => 'N',
4095                 -- P_Check_Access_Flag   => P_Check_Access_Flag,
4096                 P_Admin_Flag          => P_Admin_Flag,
4097                 P_Admin_Group_Id      => P_Admin_Group_Id,
4098                 P_identity_salesforce_id => P_identity_salesforce_id,
4099                 P_Sales_Lead_Profile_Tbl => P_Sales_Lead_Profile_Tbl,
4100                 P_SALES_LEAD_LINE_Tbl => p_SALES_LEAD_LINE_Tbl,
4101                 P_SALES_LEAD_ID       => x_SALES_LEAD_ID,
4102                 X_SALES_LEAD_LINE_OUT_Tbl => x_SALES_LEAD_LINE_OUT_Tbl,
4103                 X_Return_Status       => x_Return_Status,
4104                 X_Msg_Count           => X_Msg_Count,
4105                 X_Msg_Data            => X_Msg_Data
4106         );
4107 
4108         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4109             RAISE FND_API.G_EXC_ERROR;
4110         END IF;
4111       END IF;
4112 
4113       -- OPEN C_Lines_Amounts (X_SALES_LEAD_ID);
4114       -- FETCH C_Lines_Amounts into l_lines_amount;
4115       -- CLOSE C_Lines_Amounts;
4116 
4117       -- IF l_SALES_LEAD_rec.BUDGET_AMOUNT <> l_lines_amount
4118       -- THEN
4119       --   AS_UTILITY_PVT.Set_Message(
4120       --       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4121       --       p_msg_name      => 'AS_BUDGET_AMOUNT_NOT_MATCH');
4122       --   RAISE FND_API.G_EXC_ERROR;
4123       -- END IF;
4124 
4125       -- Create sales lead contacts
4126       IF p_SALES_LEAD_CONTACT_tbl.COUNT >= 1 THEN
4127         -- Debug Message
4128         IF (AS_DEBUG_LOW_ON) THEN
4129 
4130         AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4131                                      'Calling Create_sales_lead_contacts');
4132         END IF;
4133 
4134         -- ffang020201, if sales lead isn't assigned, access record hasn't been
4135 	   -- created. P_check_access_flag should pass 'N' to avoid checking
4136 	   -- has_updateLeadAccess
4137         AS_SALES_LEAD_CONTACTS_PVT.Create_sales_lead_contacts(
4138                 P_Api_Version_Number     => 2.0,
4139                 P_Init_Msg_List          => FND_API.G_FALSE,
4140                 P_Commit                 => FND_API.G_FALSE,
4141                 p_validation_level       => P_Validation_Level,
4142                 P_Check_Access_Flag      => 'N',
4143                 -- P_Check_Access_Flag      => P_Check_Access_Flag,
4144                 P_Admin_Flag             => P_Admin_Flag,
4145                 P_Admin_Group_Id         => P_Admin_Group_Id,
4146                 P_identity_salesforce_id => P_identity_salesforce_id,
4147                 P_Sales_Lead_Profile_Tbl => P_Sales_Lead_Profile_Tbl,
4148                 P_SALES_LEAD_CONTACT_Tbl => P_SALES_LEAD_CONTACT_Tbl,
4149                 P_SALES_LEAD_ID          => l_SALES_LEAD_ID,
4150                 X_SALES_LEAD_CNT_OUT_Tbl => x_SALES_LEAD_CNT_OUT_Tbl,
4151                 X_Return_Status          => x_Return_Status,
4152                 X_Msg_Count              => X_Msg_Count,
4153                 X_Msg_Data               => X_Msg_Data );
4154 
4155         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4156             RAISE FND_API.G_EXC_ERROR;
4157         END IF;
4158       END IF;
4159 
4160       -- Debug Message
4161       IF (AS_DEBUG_LOW_ON) THEN
4162 
4163       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4164                                    'Calling Check_primary_contact');
4165       END IF;
4166 
4167       -- Check IF there is only one primary contact
4168       AS_SALES_LEAD_CONTACTS_PVT.Check_primary_contact (
4169          P_Api_Version_Number         => 2.0
4170         ,P_Init_Msg_List              => FND_API.G_FALSE
4171         ,P_Commit                     => FND_API.G_FALSE
4172         ,p_validation_level           => P_Validation_Level
4173         -- ,P_Check_Access_Flag           => P_Check_Access_Flag
4174         ,P_Check_Access_Flag          => 'N'
4175         ,P_Admin_Flag                 => P_Admin_Flag
4176         ,P_Admin_Group_Id             => P_Admin_Group_Id
4177         ,P_identity_salesforce_id     => P_identity_salesforce_id
4178         ,P_Sales_Lead_Profile_Tbl     => P_Sales_Lead_Profile_Tbl
4179         ,P_SALES_LEAD_ID              => l_SALES_LEAD_ID
4180         ,X_Return_Status              => x_Return_Status
4181         ,X_Msg_Count                  => X_Msg_Count
4182         ,X_Msg_Data                   => X_Msg_Data
4183       );
4184 
4185       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4186            RAISE FND_API.G_EXC_ERROR;
4187       END IF;
4188 
4189 
4190       -- 11.5.10 ckapoor Rivendell lead name changes
4191 
4192       if ( l_sales_lead_rec.description is null OR l_sales_lead_rec.description=FND_API.G_MISS_CHAR) then
4193 
4194         IF (AS_DEBUG_LOW_ON) THEN
4195 
4196             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4197                                          'CK:Desc null');
4198         END IF;
4199 
4200        OPEN  C_get_primary_contact_name(l_sales_lead_id);
4201        FETCH C_get_primary_contact_name into l_default_lead_name;
4202 
4203        IF C_get_primary_contact_name%NOTFOUND THEN
4204 
4205        	OPEN C_get_customer_name(l_sales_lead_rec.customer_id) ;
4206 
4207        	FETCH C_get_customer_name into l_default_lead_name;
4208 
4209        	CLOSE C_get_customer_name;
4210 
4211        END IF;
4212 
4213        CLOSE C_get_primary_contact_name ;
4214 
4215          IF (AS_DEBUG_LOW_ON) THEN
4216 
4217              AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4218                                           'CK:def name:'||l_default_lead_name);
4219       END IF;
4220 
4221       update as_sales_leads set description = l_default_lead_name where sales_lead_id =
4222       l_SALES_LEAD_ID;
4223 
4224       end if ;
4225 
4226 
4227       -- 11.5.10 ckapoor
4228 
4229 
4230 
4231       --
4232       -- END of API body
4233       --
4234 
4235       -- Standard check for p_commit
4236       IF FND_API.to_Boolean( p_commit )
4237       THEN
4238           COMMIT WORK;
4239       END IF;
4240 
4241       -- Debug Message
4242       IF (AS_DEBUG_LOW_ON) THEN
4243 
4244       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4245                                    'PVT: ' || l_api_name || ' End');
4246       END IF;
4247 
4248       -- Standard call to get message count and IF count is 1, get message info.
4249       FND_MSG_PUB.Count_And_Get
4250       (  p_count          =>   x_msg_count,
4251          p_data           =>   x_msg_data );
4252 
4253       EXCEPTION
4254           WHEN FND_API.G_EXC_ERROR THEN
4255               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
4256                     P_API_NAME => L_API_NAME
4257                    ,P_PKG_NAME => G_PKG_NAME
4258                    ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
4259                    ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
4260                    ,X_MSG_COUNT => X_MSG_COUNT
4261                    ,X_MSG_DATA => X_MSG_DATA
4262                    ,X_RETURN_STATUS => X_RETURN_STATUS);
4263 
4264           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4265               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
4266                     P_API_NAME => L_API_NAME
4267                    ,P_PKG_NAME => G_PKG_NAME
4268                    ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4269                    ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
4270                    ,X_MSG_COUNT => X_MSG_COUNT
4271                    ,X_MSG_DATA => X_MSG_DATA
4272                    ,X_RETURN_STATUS => X_RETURN_STATUS);
4273 
4274           WHEN OTHERS THEN
4275               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
4276                     P_API_NAME => L_API_NAME
4277                    ,P_PKG_NAME => G_PKG_NAME
4278                    ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
4279                    ,P_SQLCODE => SQLCODE
4280                    ,P_SQLERRM => SQLERRM
4281                    ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
4282                    ,X_MSG_COUNT => X_MSG_COUNT
4283                    ,X_MSG_DATA => X_MSG_DATA
4284                    ,X_RETURN_STATUS => X_RETURN_STATUS);
4285 
4286 END Create_sales_lead;
4287 
4288 
4289 PROCEDURE Update_sales_lead(
4290     P_Api_Version_Number         IN   NUMBER,
4291     P_Init_Msg_List              IN   VARCHAR2    := FND_API.G_FALSE,
4292     P_Commit                     IN   VARCHAR2    := FND_API.G_FALSE,
4293     P_Validation_Level           IN   NUMBER      := FND_API.G_VALID_LEVEL_FULL,
4294     P_Check_Access_Flag          IN   VARCHAR2    := FND_API.G_MISS_CHAR,
4295     P_Admin_Flag                 IN   VARCHAR2    := FND_API.G_MISS_CHAR,
4296     P_Admin_Group_Id             IN   NUMBER      := FND_API.G_MISS_NUM,
4297     P_Identity_Salesforce_Id     IN   NUMBER      := FND_API.G_MISS_NUM,
4298     P_Sales_Lead_Profile_Tbl     IN   AS_UTILITY_PUB.Profile_Tbl_Type
4299                                        := AS_UTILITY_PUB.G_MISS_PROFILE_TBL,
4300     P_SALES_LEAD_Rec             IN   AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type,
4301     -- P_Calling_From_WF_Flag	 IN   VARCHAR2 := 'N',
4302     X_Return_Status              OUT NOCOPY  VARCHAR2,
4303     X_Msg_Count                  OUT NOCOPY  NUMBER,
4304     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4305     )
4306  IS
4307     Cursor C_Get_Access (X_Sales_Lead_Id NUMBER , c_salesforce_id NUMBER, c_sales_group_id NUMBER) IS
4308        Select
4309           access_id
4310          ,last_update_date
4311          ,last_updated_by
4312          ,creation_date
4313          ,created_by
4314          ,last_update_login
4315          ,freeze_flag
4316          ,reassign_flag
4317          ,team_leader_flag
4318          ,customer_id
4319          ,address_id
4320          ,salesforce_id
4321          ,person_id
4322          ,partner_customer_id
4323          ,partner_address_id
4324          ,created_person_id
4325          ,lead_id
4326          ,freeze_date
4327          ,reassign_reason
4328          ,downloadable_flag
4329          ,attribute_category
4330          ,attribute1
4331          ,attribute2
4332          ,attribute3
4333          ,attribute4
4334          ,attribute5
4335          ,attribute6
4336          ,attribute7
4337          ,attribute8
4338          ,attribute9
4339          ,attribute10
4340          ,attribute11
4341          ,attribute12
4342          ,attribute13
4343          ,attribute14
4344          ,attribute15
4345          ,salesforce_role_code
4346          ,salesforce_relationship_code
4347          ,sales_group_id
4348  --      ,reassign_requested_person_id
4349  --      ,reassign_request_date
4350  --      ,internal_update_access
4351          ,sales_lead_id
4352        From as_accesses_all
4353        Where sales_lead_id = X_Sales_Lead_Id
4354        and   salesforce_id = c_salesforce_id
4355        and nvl(sales_group_id, -99) = nvl(c_sales_group_id, -99);
4356 
4357     Cursor C_Get_sales_leads(P_SALES_LEAD_ID Number) IS
4358        Select last_update_date,
4359          customer_id,
4360          assign_to_salesforce_id,
4361          assign_sales_group_id,
4362          assign_to_person_id,
4363          status_code,
4364          reject_reason_code,
4365          qualified_flag,
4366          lead_rank_id,
4367 	referral_type,
4368         referred_by,
4369         referral_status,
4370         accept_flag,
4371         decision_timeframe_code,
4372         creation_date
4373        From  AS_SALES_LEADS
4374          Where SALES_LEAD_ID = p_Sales_Lead_ID
4375          For Update NOWAIT;
4376 -- Denorm fix  2928041
4377 
4378      CURSOR C_Get_Status_open_flag(X_Lookup_Code VARCHAR2) IS
4379           SELECT opp_open_status_flag
4380           FROM  as_statuses_b
4381           WHERE lead_flag = 'Y' and enabled_flag = 'Y'
4382             and status_code = X_Lookup_Code;
4383 
4384     CURSOR C_Get_Lead_Rank_Score (X_Rank_ID  NUMBER) IS
4385           SELECT min_score
4386           FROM   as_sales_lead_ranks_b
4387           WHERE  rank_id = X_Rank_ID;
4388 
4389 -- End denorm fix  2928041
4390 
4391 
4392 
4393     -- added for auto qualification of sales_lead
4394     -- changing query
4395     --CURSOR  C_PHONE_ID_Exists(c_sales_lead_id NUMBER) IS
4396     --   SELECT hz.contact_point_id
4397     --    FROM    AS_SALES_LEADS SL, HZ_CONTACT_POINTS HZ
4398     --    WHERE   hz.owner_table_id = sl.customer_id
4399     --            AND  hz.owner_table_name = 'HZ_PARTIES'
4400     --            AND  hz.contact_point_type = 'PHONE'
4401     --            AND  hz.primary_flag = 'Y'
4402     --            AND  sl.sales_lead_id = c_sales_lead_id;
4403 
4404     CURSOR  C_PHONE_ID_Exists(c_sales_lead_id NUMBER) IS
4405        SELECT phone_id
4406         FROM    AS_SALES_LEAD_CONTACTS
4407         WHERE   sales_lead_id = c_sales_lead_id;
4408 
4409      CURSOR  C_CONTACT_ROLE_Exists(c_sales_lead_id NUMBER) IS
4410        SELECT contact_role_code
4411         FROM    AS_SALES_LEAD_CONTACTS
4412         WHERE   sales_lead_id = c_sales_lead_id ;
4413     -- Cursor C_Get_Keep_Flag (c_sales_lead_id NUMBER) IS
4414     --     SELECT keep_flag
4415     --     FROM as_sales_leads
4416     --     WHERE sales_lead_id = c_sales_lead_id;
4417 
4418     -- ffang 121100, for bug 1504040, auto-qualification has nothing to do with
4419     -- keep_flag but previous status_code
4420     Cursor C_GET_STATUS_CODE (c_sales_lead_id NUMBER) IS
4421         SELECT status_code
4422         FROM as_sales_leads
4423         WHERE sales_lead_id = c_sales_lead_id;
4424 
4425     CURSOR c_get_person_id(x_resource_id NUMBER) IS
4426         SELECT source_id
4427         FROM   jtf_rs_resource_extns
4428         WHERE  category = 'EMPLOYEE'
4429                and resource_id = x_resource_id;
4430 
4431    CURSOR c_check_owner(c_sales_lead_id NUMBER , c_identity_salesforce_id NUMBER) IS
4432     select 'Y'
4433     from as_accesses_all a
4434     where a.sales_lead_id = c_sales_lead_id
4435       and   a.owner_flag = 'Y'
4436       and   a.salesforce_id = c_identity_salesforce_id;
4437 
4438 
4439 -- Bug 3385646 - MKTU3R10:COUNTRY IS NOT POPULATED WHEN THE LEAD IS CREATED THROUGH HTML
4440     CURSOR c_get_country_code (X_CUSTOMER_ID NUMBER, X_ADDRESS_ID NUMBER) IS
4441           select LOC.COUNTRY
4442 	  FROM HZ_PARTY_SITES SITE,HZ_LOCATIONS LOC
4443 	  WHERE SITE.PARTY_ID = X_CUSTOMER_ID
4444 	  AND SITE.PARTY_SITE_ID = X_ADDRESS_ID
4445 	  AND SITE.STATUS IN ('A','I')
4446 	  AND SITE.LOCATION_ID = LOC.LOCATION_ID;
4447 
4448 
4449    CURSOR c_check_salesteam(c_sales_lead_id NUMBER , c_salesforce_id NUMBER, c_sales_group_id NUMBER) IS
4450     select 'Y'
4451     from as_accesses_all a
4452     where a.sales_lead_id = c_sales_lead_id
4453       and   a.salesforce_id = c_salesforce_id
4454       and nvl(a.sales_group_id, -99) = nvl(c_sales_group_id,-99);
4455 
4456 
4457 CURSOR C_timeframe_days (X_DECISION_TIMEFRAME_CODE VARCHAR2) IS
4458 	SELECT timeframe_days
4459 	FROM aml_sales_lead_timeframes
4460   where decision_timeframe_code = X_DECISION_TIMEFRAME_CODE and enabled_flag = 'Y';
4461 
4462     CURSOR C_get_last_system_rank (c_sales_lead_id NUMBER) IS
4463         SELECT lead_rank_id
4464         FROM as_sales_leads_log
4465         WHERE sales_lead_id = c_sales_lead_id
4466         AND   manual_rank_flag = 'N'
4467         ORDER BY log_id DESC;
4468 
4469     CURSOR C_get_rank_score (c_lead_rank_id NUMBER) IS
4470         SELECT min_score
4471         FROM as_sales_lead_ranks_b
4472         WHERE rank_id = c_lead_rank_id;
4473 
4474 -- ckapoor 11.5.10 bug 3225643 cursor to find salesgroup id given the salesforce id
4475 
4476  CURSOR c_get_group_id (c_resource_id NUMBER, c_rs_group_member
4477 VARCHAR2, c_sales VARCHAR2, c_telesales VARCHAR2,  c_fieldsales VARCHAR2, c_prm VARCHAR2, c_y
4478 VARCHAR2)
4479 IS
4480       SELECT grp.group_id
4481       FROM JTF_RS_GROUP_MEMBERS mem,
4482            JTF_RS_ROLE_RELATIONS rrel,
4483            JTF_RS_ROLES_B role,
4484            JTF_RS_GROUP_USAGES u,
4485            JTF_RS_GROUPS_B grp
4486       WHERE mem.group_member_id = rrel.role_resource_id
4487       AND rrel.role_resource_type = c_rs_group_member --'RS_GROUP_MEMBER'
4488       AND rrel.role_id = role.role_id
4489       AND role.role_type_code in (c_sales, c_telesales, c_fieldsales,
4490 c_prm) --'SALES','TELESALES','FIELDSALES','PRM')
4491       AND mem.delete_flag <> c_y --'Y'
4492       AND rrel.delete_flag <> c_y --'Y'
4493       AND SYSDATE BETWEEN rrel.start_date_active AND
4494           NVL(rrel.end_date_active,SYSDATE)
4495       AND mem.resource_id = c_resource_id
4496       AND mem.group_id = u.group_id
4497       AND u.usage = c_sales --'SALES'
4498       AND mem.group_id = grp.group_id
4499       AND SYSDATE BETWEEN grp.start_date_active AND
4500           NVL(grp.end_date_active,SYSDATE)
4501       AND ROWNUM < 2;
4502 
4503 -- end ckapoor
4504 
4505 
4506     l_api_name                  CONSTANT VARCHAR2(30) := 'Update_sales_lead';
4507     l_api_version_number        CONSTANT NUMBER   := 2.0;
4508     -- Local Variables
4509     l_identity_sales_member_rec AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
4510     l_tar_SALES_LEAD_rec        AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type
4511                                 := P_SALES_LEAD_Rec;
4512     l_rowid                     ROWID;
4513     l_Sales_Team_Rec            AS_ACCESS_PUB.Sales_Team_Rec_Type;
4514     l_access_profile_rec        AS_ACCESS_PUB.Access_Profile_Rec_Type;
4515     l_customer_id               NUMBER;
4516     l_last_update_date          DATE;
4517     l_assign_to_salesforce_id   NUMBER;
4518     l_assign_sales_group_id     NUMBER;
4519     l_assign_to_person_id 	NUMBER;
4520     l_Sales_Lead_Log_ID         NUMBER;
4521     l_access_id                 NUMBER;
4522     l_update_access_flag        VARCHAR2(1);
4523     l_member_role               VARCHAR2(5);
4524     l_member_access             VARCHAR2(5);
4525     l_isQualified               VARCHAR2(1);
4526     l_qualified                 VARCHAR2(30);
4527     l_auto_qualify_profile	VARCHAR2(1);
4528     l_phone_id                  NUMBER := NULL;
4529     l_contact_role              VARCHAR2(30);
4530     l_keep_flag                 VARCHAR2(1);
4531     l_status_code               VARCHAR2(30);
4532     l_old_status_code		VARCHAR2(30);
4533     l_qualified_flag		VARCHAR2(1);
4534     l_lead_rank_id		NUMBER;
4535     l_reject_reason_code	VARCHAR2(30);
4536 
4537     l_Return_Status             VARCHAR2(10) := FND_API.G_RET_STS_SUCCESS;
4538     l_Msg_Count                 NUMBER := 0;
4539     l_Msg_Data                  VARCHAR2(4000);
4540     l_check_owner		VARCHAR2(1);
4541     l_lead_owner_privilege VARCHAR2(1);
4542     l_check_salesteam  VARCHAR2(1);
4543     l_referral_type    VARCHAR2(30);
4544     l_referred_by      NUMBER;
4545     l_referral_status_profile VARCHAR2(30);
4546     l_current_ref_status VARCHAR2(30);
4547     l_log_status_code VARCHAR2(30);
4548     l_log_lead_rank_id NUMBER ;
4549     l_log_assign_to_sf_id  NUMBER;
4550     l_log_assign_sg_id NUMBER;
4551     l_log_assign_to_person_id NUMBER;
4552     l_log_reject_reason_code VARCHAR2(30);
4553     l_log_qualified VARCHAR2(1);
4554     l_accept_flag VARCHAR2(1);
4555     l_decision_timeframe_code VARCHAR2(30);
4556     l_timeframe_code VARCHAR2(30);
4557 
4558     l_creation_date       DATE;
4559     l_exp_date            DATE;
4560     l_timeframe_days      NUMBER;
4561 
4562     -- SOLIN
4563     l_manual_rank_flag    VARCHAR2(1);
4564     l_lead_rank_ind       VARCHAR2(1);
4565     l_last_system_rank_id NUMBER;
4566     l_current_score       NUMBER;
4567     l_last_score          NUMBER;
4568     -- SOLIN end
4569 
4570     l_old_status_flag VARCHAR2(1);
4571     l_new_status_flag VARCHAR2(1);
4572     l_old_lead_rank_score NUMBER;
4573     l_new_lead_rank_score NUMBER;
4574 
4575 
4576     -- ckapoor 11.5.10
4577     l_login_user_sg_id NUMBER;
4578     l_login_user_in_st VARCHAR2(1);
4579     l_login_salesteam_rec  AS_ACCESS_PUB.Sales_Team_Rec_Type;
4580     l_login_access_id NUMBER;
4581     l_login_user_person_id NUMBER;
4582 
4583 
4584     -- end ckapoor
4585 
4586     --l_country_code		VARCHAR2(60);
4587     l_country_code		VARCHAR2(60) := FND_API.G_MISS_CHAR; --Default value added by bmuthukr for bug 3675566
4588 
4589 
4590 BEGIN
4591       -- Standard Start of API savepoint
4592       SAVEPOINT UPDATE_SALES_LEAD_PVT;
4593 
4594       -- Standard call to check for call compatibility.
4595       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
4596                                            p_api_version_number,
4597                                            l_api_name,
4598                                            G_PKG_NAME)
4599       THEN
4600           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4601       END IF;
4602 
4603       -- Initialize message list IF p_init_msg_list is set to TRUE.
4604       IF FND_API.to_Boolean( p_init_msg_list )
4605       THEN
4606           FND_MSG_PUB.initialize;
4607       END IF;
4608 
4609       -- Debug Message
4610       IF (AS_DEBUG_LOW_ON) THEN
4611 
4612       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4613                                    'PVT: ' || l_api_name || ' Start');
4614       END IF;
4615 
4616       -- Initialize API return status to SUCCESS
4617       x_return_status := FND_API.G_RET_STS_SUCCESS;
4618 
4619       --
4620       -- Api body
4621       --
4622 
4623       IF (p_validation_level = fnd_api.g_valid_level_full)
4624       THEN
4625           AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
4626               p_api_version_number => 2.0
4627              ,p_init_msg_list      => p_init_msg_list
4628              ,p_salesforce_id => p_identity_salesforce_id
4629              ,p_admin_group_id => p_admin_group_id
4630              ,x_return_status => x_return_status
4631              ,x_msg_count => x_msg_count
4632              ,x_msg_data => x_msg_data
4633              ,x_sales_member_rec => l_identity_sales_member_rec);
4634       END IF;
4635       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4636           RAISE FND_API.G_EXC_ERROR;
4637       END IF;
4638 
4639       -- Debug Message
4640       IF (AS_DEBUG_LOW_ON) THEN
4641 
4642       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4643                                    'Open Cursor C_Get_sales_leads');
4644       END IF;
4645 
4646       Open C_Get_sales_leads( l_tar_SALES_LEAD_rec.SALES_LEAD_ID);
4647 
4648       Fetch C_Get_sales_leads into l_last_update_date,
4649                                    l_customer_id,
4650                                    l_assign_to_salesforce_id,
4651                                    l_assign_sales_group_id,
4652                                    l_assign_to_person_id,
4653                                    l_old_status_code,
4654                                    l_reject_reason_code,
4655                                    l_qualified_flag,
4656                                    l_lead_rank_id,
4657 				   l_referral_type,
4658 				   l_referred_by,
4659 				   l_current_ref_status,
4660                    l_accept_flag,
4661                    l_decision_timeframe_code,
4662                    l_creation_date;
4663 
4664       IF ( C_Get_sales_leads%NOTFOUND) THEN
4665            Close C_Get_sales_leads;
4666 
4667            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4668            THEN
4669                FND_MESSAGE.Set_Name('AS', 'API_MISSING_UPDATE_TARGET');
4670                FND_MESSAGE.Set_Token ('INFO', 'SALES_LEAD', FALSE);
4671                FND_MSG_PUB.Add;
4672            END IF;
4673            raise FND_API.G_EXC_ERROR;
4674       END IF;
4675 
4676       -- Debug Message
4677       IF (AS_DEBUG_LOW_ON) THEN
4678 
4679       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4680                                 'Close Cursor C_Get_sales_leads');
4681       END IF;
4682       Close C_Get_sales_leads;
4683 
4684       -- Check Whether record has been changed by someone else
4685       IF (l_tar_SALES_LEAD_rec.last_update_date is NULL or
4686           l_tar_SALES_LEAD_rec.last_update_date = FND_API.G_MISS_Date )
4687       THEN
4688           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4689           THEN
4690                FND_MESSAGE.Set_Name('AS', 'API_MISSING_ID');
4691                FND_MESSAGE.Set_Token('COLUMN', 'LAST_UPDATE_DATE', FALSE);
4692                FND_MSG_PUB.ADD;
4693           END IF;
4694           raise FND_API.G_EXC_ERROR;
4695       END IF;
4696 
4697       IF (l_tar_SALES_LEAD_rec.last_update_date <> l_last_update_date)
4698       THEN
4699           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4700           THEN
4701               FND_MESSAGE.Set_Name('AS', 'API_RECORD_CHANGED');
4702               FND_MESSAGE.Set_Token('INFO', 'SALES_LEAD', FALSE);
4703               FND_MSG_PUB.ADD;
4704           END IF;
4705           raise FND_API.G_EXC_ERROR;
4706       END IF;
4707 
4708       -- Bug 1514981
4709       -- Set default value to accept_flag, keep_flag, urgent_flag,
4710       -- import_flag, deleted_flag, and currency_code as profile values.
4711       If (l_tar_SALES_LEAD_rec.ACCEPT_FLAG IS NULL) or
4712          (l_tar_SALES_LEAD_rec.KEEP_FLAG IS NULL) or
4713          (l_tar_SALES_LEAD_rec.URGENT_FLAG IS NULL) or
4714          (l_tar_SALES_LEAD_rec.IMPORT_FLAG IS NULL) or
4715          (l_tar_SALES_LEAD_rec.DELETED_FLAG IS NULL) or
4716          (l_tar_SALES_LEAD_rec.currency_code IS NULL)or
4717 	 (l_tar_SALES_LEAD_rec.lead_rank_ind is NULL)
4718       THEN
4719           IF (AS_DEBUG_LOW_ON) THEN
4720 
4721           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4722                                        'Calling Set_default_values');
4723           END IF;
4724 
4725           Set_default_values(
4726                 p_mode               => AS_UTILITY_PVT.G_UPDATE,
4727                 px_SALES_LEAD_rec    => l_tar_SALES_LEAD_Rec);
4728 
4729       End If;
4730 
4731       -- Debug message
4732       IF (AS_DEBUG_LOW_ON) THEN
4733 
4734       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4735                                    'Calling Validate_sales_lead');
4736       END IF;
4737 
4738       -- Invoke validation procedures
4739       Validate_sales_lead(
4740               p_init_msg_list    => FND_API.G_FALSE,
4741               p_validation_level => p_validation_level,
4742               p_validation_mode  => AS_UTILITY_PVT.G_UPDATE,
4743               P_SALES_LEAD_Rec   => l_tar_SALES_LEAD_Rec,
4744 	      p_referral_type    => l_referral_type,
4745 	      p_referred_by     =>  l_referred_by,
4746               x_return_status    => x_return_status,
4747               x_msg_count        => x_msg_count,
4748               x_msg_data         => x_msg_data);
4749 
4750       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4751           RAISE FND_API.G_EXC_ERROR;
4752       END IF;
4753 
4754 
4755           -- Call Get_Access_Profiles to get access_profile_rec
4756           IF (AS_DEBUG_LOW_ON) THEN
4757 
4758           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4759                                        'Calling Get_Access_Profiles');
4760           END IF;
4761 
4762           AS_SALES_LEADS_PUB.Get_Access_Profiles(
4763               p_profile_tbl         => p_sales_lead_profile_tbl,
4764               x_access_profile_rec  => l_access_profile_rec);
4765 
4766 
4767 
4768       IF(P_Check_Access_Flag = 'Y') THEN
4769 
4770           IF (AS_DEBUG_LOW_ON) THEN
4771 
4772 
4773 
4774           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4775                                        'Calling Has_updateLeadAccess');
4776 
4777           END IF;
4778 
4779           AS_ACCESS_PUB.Has_updateLeadAccess(
4780               p_api_version_number     => 2.0
4781              ,p_init_msg_list          => FND_API.G_FALSE
4782              ,p_validation_level       => p_validation_level
4783              ,p_access_profile_rec     => l_access_profile_rec
4784              ,p_admin_flag             => p_admin_flag
4785              ,p_admin_group_id         => p_admin_group_id
4786              ,p_person_id              =>
4787                               l_identity_sales_member_rec.employee_person_id
4788              ,p_sales_lead_id          => p_sales_lead_rec.sales_lead_id
4789               -- ffang 012501, p_check_access_flag should always be 'Y'
4790              ,p_check_access_flag      => p_check_access_flag    -- 'Y'
4791              ,p_identity_salesforce_id => p_identity_salesforce_id
4792                 ,p_partner_cont_party_id  => NULL
4793              ,x_return_status          => x_return_status
4794              ,x_msg_count              => x_msg_count
4795              ,x_msg_data               => x_msg_data
4796              ,x_update_access_flag     => l_update_access_flag);
4797 
4798           IF l_update_access_flag <> 'Y' THEN
4799               IF (AS_DEBUG_ERROR_ON) THEN
4800 
4801               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4802                                            'API_NO_UPDATE_PRIVILEGE');
4803               END IF;
4804               RAISE FND_API.G_EXC_ERROR;
4805           END IF;
4806 
4807           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4808 
4809               RAISE FND_API.G_EXC_ERROR;
4810           END IF;
4811 
4812 
4813 
4814       END IF; -- end of P_Check_Access = 'Y'
4815 
4816 
4817       -- moving check owner code outside p_check_access loop. OTS does not pass p_check_access as 'Y'
4818       -- but they still need check owner code to be called. OTS calls update lead access code themselves.
4819 
4820       -- check for whether the current user is owner or not
4821 
4822       -- in the pre 11.5.8 scenario, all leads had to have an owner. Now it might happen that
4823       -- a lead has no owner. The creator will be on salesteam so he should be able to update the lead
4824       -- based on access. We can skip the change owner access check in that case.
4825 
4826 
4827     if (l_assign_to_salesforce_id is not null)
4828     then
4829 
4830 
4831       l_check_owner := 'N';
4832       --Open c_check_owner(p_sales_lead_rec.sales_lead_id, p_identity_salesforce_id );
4833 
4834 	  --Fetch c_check_owner into l_check_owner;
4835 	  --Close c_check_owner;
4836 	  IF (AS_DEBUG_LOW_ON) THEN
4837 
4838 	  AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4839                                        'Calling Has_leadOwnerAccess');
4840 	  END IF;
4841 	  AS_ACCESS_PVT.has_leadOwnerAccess(
4842 	  		       p_api_version_number     => 2.0
4843 	               ,p_init_msg_list          => FND_API.G_FALSE
4844 	               ,p_validation_level       => p_validation_level
4845 	               ,p_access_profile_rec     => l_access_profile_rec
4846 	               ,p_admin_flag             => p_admin_flag
4847 	               ,p_admin_group_id         => p_admin_group_id
4848 	               ,p_person_id              =>
4849 	                                l_identity_sales_member_rec.employee_person_id
4850 	               ,p_sales_lead_id          => p_sales_lead_rec.sales_lead_id
4851 	                -- ffang 012501, p_check_access_flag should always be 'Y'
4852 	               ,p_check_access_flag      => p_check_access_flag    -- 'Y'
4853 	               ,p_identity_salesforce_id => p_identity_salesforce_id
4854 	               ,p_partner_cont_party_id  => NULL
4855 	               ,x_return_status          => x_return_status
4856 	               ,x_msg_count              => x_msg_count
4857 	               ,x_msg_data               => x_msg_data
4858              	       ,x_update_access_flag     => l_check_owner);
4859 
4860 
4861           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4862 
4863               RAISE FND_API.G_EXC_ERROR;
4864           END IF;
4865 
4866 
4867 
4868 
4869        l_lead_owner_privilege := fnd_profile.value('AS_ALLOW_CHANGE_LEAD_OWNER');
4870 	  IF l_check_owner <> 'Y'
4871 	     AND ((l_assign_to_salesforce_id <> p_sales_lead_rec.assign_to_salesforce_id) OR
4872                (p_sales_lead_rec.assign_to_salesforce_id is null))
4873          AND l_lead_owner_privilege <> 'Y'  -- exception made, even if not owner but if profile is set then lets you
4874                                             -- change owner. Update access checking in security API
4875             THEN
4876 	  	IF (AS_DEBUG_ERROR_ON) THEN
4877 
4878 	  	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4879                                            'API_NO_LEAD_UPDATE_PRIVILEGE');
4880 	  	END IF;
4881 	  	RAISE FND_API.G_EXC_ERROR;
4882 	  END IF;
4883 
4884       end if; -- if current owner is not null
4885 
4886       -- else if current owner is null, u can skip the owner check
4887 
4888       -- if user is declining , then if not owner AND profile not set then throw error
4889     IF (AS_DEBUG_LOW_ON) THEN
4890 
4891     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4892                                        'l_check_owner is'|| l_check_owner);
4893     END IF;
4894 
4895      IF (AS_DEBUG_LOW_ON) THEN
4896 
4897 
4898 
4899      AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4900                                        'l_lead_owner_privilege is'|| l_lead_owner_privilege);
4901 
4902      END IF;
4903 
4904 
4905       IF (l_tar_SALES_LEAD_Rec.reject_reason_code is not null AND l_tar_SALES_LEAD_Rec.reject_reason_code <> FND_API.G_MISS_CHAR)
4906          AND l_check_owner <> 'Y'
4907 	     AND l_lead_owner_privilege <> 'Y'  -- exception made, even if not owner but if profile is set then lets you
4908                                             -- change owner. Update access checking in security API
4909         THEN
4910 	  	IF (AS_DEBUG_ERROR_ON) THEN
4911 
4912 	  	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4913                                            'API_NO_DECLINE_PRIVILEGE');
4914 	  	END IF;
4915 	  	RAISE FND_API.G_EXC_ERROR;
4916 	  END IF;
4917 
4918 
4919      IF (l_tar_SALES_LEAD_Rec.accept_flag <> l_accept_flag) AND (l_tar_SALES_LEAD_rec.accept_flag <> FND_API.G_MISS_CHAR)
4920          AND l_check_owner <> 'Y'
4921 	     AND l_lead_owner_privilege <> 'Y'  -- exception made, even if not owner but if profile is set then lets you
4922                                             -- change owner. Update access checking in security API
4923         THEN
4924 	  	IF (AS_DEBUG_ERROR_ON) THEN
4925 
4926 	  	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4927                                            'API_NO_ACCEPT_PRIVILEGE');
4928 	  	END IF;
4929 	  	RAISE FND_API.G_EXC_ERROR;
4930 	  END IF;
4931 
4932 
4933       -- auto qualify lead
4934 
4935       -- ffang 121100, for bug 1504040
4936       -- when original stauts_code is 'NEW' or 'UNQUALIFIED' and UI didn't
4937       -- pass in any status_code, then launch auto-qulification.
4938 
4939       -- ffang 100200: for bug 1416170
4940       -- Do auto-qualify only when keep_flag <> 'Y' or keep_flag is NULL
4941 
4942       -- IF (P_SALES_LEAD_Rec.keep_flag = FND_API.G_MISS_CHAR)
4943       -- THEN
4944       --     OPEN C_Get_Keep_Flag (P_SALES_LEAD_Rec.sales_lead_id);
4945       --     FETCH C_Get_Keep_Flag into l_keep_flag;
4946       --     CLOSE C_Get_Keep_Flag;
4947       -- ELSE
4948       --     l_keep_flag := P_SALES_LEAD_Rec.keep_flag;
4949       -- END IF;
4950 
4951       -- IF ((l_keep_flag <> 'Y') or (l_keep_flag is NULL))
4952          -- 111900 FFANG for bug 1475568, if status is changed to 'DECLINED',
4953          -- don't do auto-qualify
4954       --    and (P_SALES_LEAD_Rec.status_code <> 'DECLINED')
4955 
4956       OPEN C_GET_STATUS_CODE (P_SALES_LEAD_Rec.sales_lead_id);
4957       FETCH C_GET_STATUS_CODE INTO l_status_code;
4958       CLOSE C_GET_STATUS_CODE;
4959 
4960 
4961 /*      l_auto_qualify_profile :=  nvl(FND_PROFILE.Value('AS_AUTO_QUALIFY'),'N');
4962 
4963       IF (AS_DEBUG_LOW_ON) THEN
4964 
4965 
4966 
4967       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4968                                        'l_auto_qualify_profile is '|| l_auto_qualify_profile);
4969 
4970       END IF;
4971 
4972       IF(P_SALES_LEAD_Rec.qualified_flag = 'N' and
4973       		l_auto_qualify_profile = 'Y')
4974       --IF (l_status_code = 'NEW' or l_status_code = 'UNQUALIFIED')
4975       --   and (P_SALES_LEAD_Rec.status_code is null
4976       --        or P_SALES_LEAD_Rec.status_code = FND_API.G_MISS_CHAR)
4977       THEN
4978           -- Launch auto-qualification
4979           IF (AS_DEBUG_LOW_ON) THEN
4980 
4981           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4982                                        'Launch auto-qualification');
4983           END IF;
4984 
4985           OPEN  C_PHONE_ID_Exists (P_SALES_LEAD_Rec.sales_lead_id);
4986           FETCH C_PHONE_ID_Exists into l_phone_id;
4987 
4988           -- ffang 092800: Forgot to close cursor?
4989           CLOSE C_PHONE_ID_Exists;
4990           -- end ffang 092800
4991 
4992           OPEN  C_CONTACT_ROLE_Exists (P_SALES_LEAD_Rec.sales_lead_id);
4993           FETCH C_CONTACT_ROLE_Exists into l_contact_role;
4994 
4995           -- ffang 092800: Forgot to close cursor?
4996           CLOSE C_CONTACT_ROLE_Exists;
4997 
4998 
4999           l_isQualified := IS_LEAD_QUALIFIED(P_SALES_LEAD_Rec, l_phone_id, l_contact_role);
5000 
5001           -- compute the qualified flag and assign to l_qualified
5002           --if l_isQualified = 'Y' then
5003           --    l_qualified := 'QUALIFIED';
5004           --else
5005           --    -- l_qualified := p_sales_lead_rec.STATUS_CODE;
5006           --     l_qualified := 'UNQUALIFIED';
5007           --end if;
5008           l_qualified := l_isQualified;
5009       ELSE
5010           IF (AS_DEBUG_LOW_ON) THEN
5011 
5012           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5013                                        'Doing manual qualification');
5014           END IF;
5015 
5016 
5017           -- now status code independent of qualified flag
5018           --l_qualified := p_sales_lead_rec.STATUS_CODE;
5019           l_qualified := p_sales_lead_rec.QUALIFIED_FLAG;
5020       END IF;*/
5021       -- end ffang 100200
5022 
5023       l_qualified := p_sales_lead_rec.QUALIFIED_FLAG;
5024 
5025       OPEN c_get_person_id(l_tar_SALES_LEAD_rec.ASSIGN_TO_SALESFORCE_ID);
5026       FETCH c_get_person_id INTO l_tar_SALES_LEAD_rec.ASSIGN_TO_PERSON_ID;
5027       CLOSE c_get_person_id;
5028 
5029       -- Debug Message
5030       IF (AS_DEBUG_LOW_ON) THEN
5031 
5032       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5033                                    'Calling Sales_Lead_Update_Row');
5034       END IF;
5035 
5036       IF (AS_DEBUG_LOW_ON) THEN
5037 
5038 
5039 
5040       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5041                      'p_sf_id:'||p_sales_lead_rec.assign_to_salesforce_id);
5042 
5043       END IF;
5044       IF (AS_DEBUG_LOW_ON) THEN
5045 
5046       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5047                      'sf_id:'||l_tar_SALES_LEAD_rec.assign_to_salesforce_id);
5048       END IF;
5049 
5050 
5051 	-- if decline reason code is not null i.e user is declining lead
5052 	-- then clear accept flag and make sure assign to doesnt get changed
5053 	-- even if user has changed it while declining
5054 
5055 	if l_tar_SALES_LEAD_rec.REJECT_REASON_CODE IS NOT NULL AND
5056 	   l_tar_SALES_LEAD_rec.REJECT_REASON_CODE <> FND_API.G_MISS_CHAR
5057 	THEN
5058 	      l_tar_SALES_LEAD_rec.accept_flag := 'N';
5059 
5060 	      IF (l_assign_to_salesforce_id IS NOT NULL AND
5061 	         l_tar_SALES_LEAD_rec.assign_to_salesforce_id <>
5062 	                                                  FND_API.G_MISS_NUM AND
5063 	         l_tar_SALES_LEAD_rec.assign_to_salesforce_id <>
5064                                                   l_assign_to_salesforce_id)
5065                  OR
5066 		 (l_tar_SALES_LEAD_rec.assign_to_salesforce_id IS NULL)
5067 
5068 	      THEN
5069 	      	l_tar_SALES_LEAD_rec.assign_to_salesforce_id := l_assign_to_salesforce_id;
5070 	      	l_tar_SALES_LEAD_rec.assign_to_person_id := l_assign_to_person_id;
5071 	      	l_tar_SALES_LEAD_rec.assign_sales_group_id := l_assign_sales_group_id;
5072           END IF;
5073 
5074 	END IF;
5075 
5076 	-- this code is ok since noone else modifies assign_date
5077 	 l_tar_SALES_LEAD_rec.assign_date := FND_API.G_MISS_DATE;
5078 
5079       -- If assign_to_salesforce_id is being set to someone else (manual routing)
5080       -- then, the status should be set from profile and accept_flag = 'N'
5081 
5082        IF l_assign_to_salesforce_id IS NOT NULL AND
5083           l_tar_SALES_LEAD_rec.assign_to_salesforce_id IS NOT NULL AND
5084           l_tar_SALES_LEAD_rec.assign_to_salesforce_id <>
5085                                                   FND_API.G_MISS_NUM AND
5086           l_tar_SALES_LEAD_rec.assign_to_salesforce_id <>
5087                                                   l_assign_to_salesforce_id
5088        THEN
5089 
5090             -- as per bug 2238553 routing shud not change status of lead hence commenting out the next line.
5091             --l_tar_SALES_LEAD_rec.status_code := fnd_profile.value('AS_LEAD_ROUTING_STATUS');
5092             l_tar_SALES_LEAD_rec.accept_flag := 'N';
5093             l_tar_SALES_LEAD_rec.assign_date := SYSDATE;
5094 
5095        END IF;
5096 
5097       -- do check on referral type. If a non null referral type is being passed in,
5098       -- then make sure referral status is set to the profile of REF_STATUS_FOR_NEW_LEAD
5099 
5100       l_referral_status_profile := l_tar_SALES_LEAD_rec.REFERRAL_STATUS;
5101 
5102       if (l_tar_SALES_LEAD_rec.REFERRAL_STATUS is null or l_tar_SALES_LEAD_rec.REFERRAL_STATUS = FND_API.G_MISS_CHAR)
5103       then
5104         if (l_tar_SALES_LEAD_rec.REFERRAL_TYPE is not null and l_tar_sales_lead_rec.REFERRAL_TYPE <> FND_API.G_MISS_CHAR)
5105         -- if referral type lead and the current referral status in database is null then need to do something.
5106         then
5107             if (l_current_ref_status is null) then
5108                 l_referral_status_profile :=  FND_PROFILE.Value('REF_STATUS_FOR_NEW_LEAD');
5109             else
5110                 l_referral_status_profile := FND_API.G_MISS_CHAR; -- you dont want to change the non null referral status
5111             end if ;  -- if l_current_ref_status is null
5112         end if; -- if  a referral type lead
5113       end if; -- if incoming referral status is null/G_MISS
5114 
5115 
5116       --bmuthukr modified the following code to fix bug 3675566.
5117       /*IF (l_tar_SALES_LEAD_rec.address_id is not NULL) and
5118       (l_tar_SALES_LEAD_rec.address_id <> FND_API.G_MISS_NUM)
5119       THEN
5120 		OPEN  c_get_country_code ( l_customer_id, l_tar_SALES_LEAD_rec.address_id);
5121 		FETCH c_get_country_code into l_country_code;
5122 		Close c_get_country_code;
5123       ELSE
5124       l_country_code := null;
5125       END If;*/
5126       IF (nvl(l_tar_SALES_LEAD_rec.address_id,0) <> FND_API.G_MISS_NUM) THEN
5127          IF (l_tar_SALES_LEAD_rec.address_id is not NULL) THEN
5128 		OPEN  c_get_country_code ( l_customer_id, l_tar_SALES_LEAD_rec.address_id);
5129 		FETCH c_get_country_code into l_country_code;
5130 		Close c_get_country_code;
5131          ELSE
5132                 l_country_code := null;
5133          END If;
5134       END IF;
5135       --Ends changes for bug 3675566
5136 
5137       -- Moving code here, since we need common code for logging into  as_sales_leads (status_open_flag
5138       -- and lead_rank_score)
5139 
5140       --Denorm fix 04/30/03 ckapoor
5141       --Get the open status flag for both old status and new status
5142 
5143       OPEN  C_Get_Status_open_flag ( l_old_status_code);
5144       FETCH C_Get_Status_open_flag into l_old_status_flag;
5145       Close C_Get_Status_open_flag;
5146 
5147       -- by default the new status flag shud be same as old status flag
5148 
5149       l_new_status_flag := l_old_status_flag;
5150 
5151       -- if status is null (shud not happen since status is non null alwiz), we
5152       -- dont want to fix the status flag
5153       -- if status is g_miss , means anyways the status is not changing so flag is not changing.
5154 
5155      if (l_tar_sales_lead_rec.STATUS_CODE IS NOT NULL AND l_tar_sales_lead_rec.STATUS_CODE <> FND_API.G_MISS_CHAR ) THEN
5156 
5157      OPEN  C_Get_Status_open_flag ( l_tar_SALES_LEAD_rec.STATUS_CODE);
5158      FETCH C_Get_Status_open_flag into l_new_status_flag;
5159      Close C_Get_Status_open_flag;
5160 
5161      END IF;
5162 
5163 
5164      -- We can simply log the l_new_status_flag into the STATUS_OPEN_FLAG field.
5165      -- These values l_new/old_status_open_flag will be used later in API to update AS_ACCESSES_ALL
5166 
5167 
5168      -- Update lead_rank_score as well.
5169 
5170 
5171      OPEN  C_Get_Lead_Rank_Score ( l_lead_rank_id);
5172      FETCH C_Get_Lead_Rank_Score into l_old_lead_rank_score;
5173      Close C_Get_Lead_Rank_Score;
5174 
5175      -- by default the new score is g_miss i.e do not change the old score in db.
5176 
5177      l_new_lead_rank_score := FND_API.G_MISS_NUM;
5178 
5179      -- if new rank is null, we  want to fix the score since old might have been non null.
5180      -- if new rank is g_miss , means anyways the rank is not changing so score is not changing.
5181 
5182      if ( l_tar_sales_lead_rec.LEAD_RANK_ID <> FND_API.G_MISS_NUM ) THEN
5183 
5184      	OPEN  C_Get_Lead_Rank_Score ( l_tar_SALES_LEAD_rec.LEAD_RANK_ID);
5185         FETCH C_Get_Lead_Rank_Score into l_new_lead_rank_score;
5186         Close C_Get_Lead_Rank_Score;
5187 
5188         END IF;
5189 
5190      IF (AS_DEBUG_LOW_ON) THEN
5191 
5192 	     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5193                        'lead_rank_score : ' || l_new_lead_rank_score);
5194      END IF;
5195 
5196      -- if new rank score is null, make it 0
5197     if ( l_tar_sales_lead_rec.lead_rank_id is NULL) then
5198 	   l_new_lead_rank_score := 0;
5199     end if;
5200     -- We can simply log the l_new_lead_rank_score into the LEAD_RANK_SCORE field.
5201 
5202   -- End Denorm fix.
5203 
5204 
5205 
5206 
5207 
5208 
5209       IF (AS_DEBUG_LOW_ON) THEN
5210 
5211 
5212       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5213                      'Just before AS_SALES_LEADS_PKG.Sales_Lead_Update_Row');
5214 
5215 
5216       END IF;
5217 
5218 
5219 -- what should the new expiration date be.
5220 
5221 	if (l_tar_sales_lead_rec.DECISION_TIMEFRAME_CODE = FND_API.G_MISS_CHAR) then
5222 		l_timeframe_code := l_decision_timeframe_code; -- same as the db value
5223 	else
5224 		l_timeframe_code := l_tar_sales_lead_rec.DECISION_TIMEFRAME_CODE; -- same as the target value
5225 
5226 	end if;
5227 
5228 	 -- expiration date is calculated as creation_date + time frame days (for a smart timeframe)
5229 	     -- if no smart timeframe, then exp date is null.
5230 
5231 	     l_exp_date := null;
5232 	     l_timeframe_days := 0;
5233 
5234 
5235 	      OPEN  C_timeframe_days (l_timeframe_code);
5236 	      FETCH C_timeframe_days into l_timeframe_days;
5237 
5238 	      IF C_timeframe_days%NOTFOUND
5239 	      THEN
5240 	       	l_exp_date := null;
5241 
5242 	      ELSE
5243 	      	l_exp_date := l_creation_date + l_timeframe_days;
5244 	      END IF;
5245 
5246 
5247       CLOSE C_timeframe_days ;
5248 
5249       -- SOLIN, 12/17/2002, populate column lead_rank_ind
5250       -- 'U': lead is upgraded.
5251       -- 'D': lead is downgraded.
5252       -- 'N': none of above.
5253       IF l_tar_sales_lead_rec.lead_rank_id <> l_lead_rank_id AND
5254          l_tar_sales_lead_rec.lead_rank_id <> FND_API.G_MISS_NUM
5255       THEN
5256           l_manual_rank_flag := 'Y';
5257           OPEN C_get_last_system_rank(l_tar_SALES_LEAD_rec.SALES_LEAD_ID);
5258           FETCH C_get_last_system_rank INTO l_last_system_rank_id;
5259           CLOSE C_get_last_system_rank;
5260 
5261           OPEN c_get_rank_score(l_tar_sales_lead_rec.lead_rank_id);
5262           FETCH c_get_rank_score INTO l_current_score;
5263           CLOSE c_get_rank_score;
5264 
5265           OPEN c_get_rank_score(l_last_system_rank_id);
5266           FETCH c_get_rank_score INTO l_last_score;
5267           CLOSE c_get_rank_score;
5268 
5269           IF (AS_DEBUG_LOW_ON) THEN
5270               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5271                      'current_score=' || l_current_score);
5272               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5273                      'last_score=' || l_last_score);
5274           END IF;
5275           IF l_current_score > l_last_score
5276           THEN
5277               l_lead_rank_ind := 'U';
5278           ELSIF l_current_score < l_last_score
5279           THEN
5280               l_lead_rank_ind := 'D';
5281           ELSE
5282               l_lead_rank_ind := 'N';
5283           END IF;
5284       ELSE
5285           --l_lead_rank_ind := FND_API.G_MISS_CHAR;
5286           l_lead_rank_ind := l_tar_SALES_LEAD_rec.LEAD_RANK_IND;
5287       END IF;
5288       -- SOLIN, end
5289 
5290       -- Invoke table handler(Sales_Lead_Update_Row)
5291       AS_SALES_LEADS_PKG.Sales_Lead_Update_Row(
5292            p_SALES_LEAD_ID  => l_tar_SALES_LEAD_rec.SALES_LEAD_ID,
5293           p_LAST_UPDATE_DATE  => SYSDATE,
5294           p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
5295           p_CREATION_DATE  => l_tar_SALES_LEAD_rec.CREATION_DATE,
5296           p_CREATED_BY  => l_tar_SALES_LEAD_rec.CREATED_BY,
5297           p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID,
5298           p_REQUEST_ID  => FND_GLOBAL.Conc_Request_Id,
5299           p_PROGRAM_APPLICATION_ID  => FND_GLOBAL.Prog_Appl_Id,
5300           p_PROGRAM_ID  => FND_GLOBAL.Conc_Program_Id,
5301           p_PROGRAM_UPDATE_DATE  => SYSDATE,
5302           p_LEAD_NUMBER  => l_tar_SALES_LEAD_rec.LEAD_NUMBER,
5303           --p_STATUS_CODE  => l_qualified,
5304           p_STATUS_CODE => l_tar_SALES_LEAD_rec.STATUS_CODE,
5305           p_CUSTOMER_ID  => l_tar_SALES_LEAD_rec.CUSTOMER_ID,
5306           p_ADDRESS_ID  => l_tar_SALES_LEAD_rec.ADDRESS_ID,
5307           p_SOURCE_PROMOTION_ID  => l_tar_SALES_LEAD_rec.SOURCE_PROMOTION_ID,
5308           p_INITIATING_CONTACT_ID => l_tar_SALES_LEAD_rec.INITIATING_CONTACT_ID,
5309           p_ORIG_SYSTEM_REFERENCE => l_tar_SALES_LEAD_rec.ORIG_SYSTEM_REFERENCE,
5310           p_CONTACT_ROLE_CODE  => l_tar_SALES_LEAD_rec.CONTACT_ROLE_CODE,
5311           p_CHANNEL_CODE  => l_tar_SALES_LEAD_rec.CHANNEL_CODE,
5312           p_BUDGET_AMOUNT  => l_tar_SALES_LEAD_rec.BUDGET_AMOUNT,
5313           p_CURRENCY_CODE  => l_tar_SALES_LEAD_rec.CURRENCY_CODE,
5314           p_DECISION_TIMEFRAME_CODE =>
5315                               l_tar_SALES_LEAD_rec.DECISION_TIMEFRAME_CODE,
5316           p_CLOSE_REASON  => l_tar_SALES_LEAD_rec.CLOSE_REASON,
5317           p_LEAD_RANK_ID  => l_tar_SALES_LEAD_rec.LEAD_RANK_ID,
5318           p_LEAD_RANK_CODE  => l_tar_SALES_LEAD_rec.LEAD_RANK_CODE,
5319           p_PARENT_PROJECT  => l_tar_SALES_LEAD_rec.PARENT_PROJECT,
5320           p_DESCRIPTION  => l_tar_SALES_LEAD_rec.DESCRIPTION,
5321           p_ATTRIBUTE_CATEGORY  => l_tar_SALES_LEAD_rec.ATTRIBUTE_CATEGORY,
5322           p_ATTRIBUTE1  => l_tar_SALES_LEAD_rec.ATTRIBUTE1,
5323           p_ATTRIBUTE2  => l_tar_SALES_LEAD_rec.ATTRIBUTE2,
5324           p_ATTRIBUTE3  => l_tar_SALES_LEAD_rec.ATTRIBUTE3,
5325           p_ATTRIBUTE4  => l_tar_SALES_LEAD_rec.ATTRIBUTE4,
5326           p_ATTRIBUTE5  => l_tar_SALES_LEAD_rec.ATTRIBUTE5,
5327           p_ATTRIBUTE6  => l_tar_SALES_LEAD_rec.ATTRIBUTE6,
5328           p_ATTRIBUTE7  => l_tar_SALES_LEAD_rec.ATTRIBUTE7,
5329           p_ATTRIBUTE8  => l_tar_SALES_LEAD_rec.ATTRIBUTE8,
5330           p_ATTRIBUTE9  => l_tar_SALES_LEAD_rec.ATTRIBUTE9,
5331           p_ATTRIBUTE10  => l_tar_SALES_LEAD_rec.ATTRIBUTE10,
5332           p_ATTRIBUTE11  => l_tar_SALES_LEAD_rec.ATTRIBUTE11,
5333           p_ATTRIBUTE12  => l_tar_SALES_LEAD_rec.ATTRIBUTE12,
5334           p_ATTRIBUTE13  => l_tar_SALES_LEAD_rec.ATTRIBUTE13,
5335           p_ATTRIBUTE14  => l_tar_SALES_LEAD_rec.ATTRIBUTE14,
5336           p_ATTRIBUTE15  => l_tar_SALES_LEAD_rec.ATTRIBUTE15,
5337           p_ASSIGN_TO_PERSON_ID  => l_tar_SALES_LEAD_rec.ASSIGN_TO_PERSON_ID,
5338           p_ASSIGN_TO_SALESFORCE_ID =>
5339                                    l_tar_SALES_LEAD_rec.ASSIGN_TO_SALESFORCE_ID,
5340           p_ASSIGN_SALES_GROUP_ID => l_tar_SALES_LEAD_rec.ASSIGN_SALES_GROUP_ID,
5341           --p_ASSIGN_DATE  => l_tar_SALES_LEAD_rec.ASSIGN_DATE,
5342           p_ASSIGN_DATE  => l_tar_SALES_LEAD_rec.ASSIGN_DATE,--SYSDATE
5343           p_BUDGET_STATUS_CODE  => l_tar_SALES_LEAD_rec.BUDGET_STATUS_CODE,
5344           p_ACCEPT_FLAG  => NVL(l_tar_SALES_LEAD_rec.ACCEPT_FLAG, 'N'),
5345           p_VEHICLE_RESPONSE_CODE => l_tar_SALES_LEAD_rec.VEHICLE_RESPONSE_CODE,
5346           p_TOTAL_SCORE  => l_tar_SALES_LEAD_rec.TOTAL_SCORE,
5347           p_SCORECARD_ID  => l_tar_SALES_LEAD_rec.SCORECARD_ID,
5348           p_KEEP_FLAG  => NVL(l_tar_SALES_LEAD_rec.KEEP_FLAG, 'N'),
5349           p_URGENT_FLAG  => NVL(l_tar_SALES_LEAD_rec.URGENT_FLAG, 'N'),
5350           p_IMPORT_FLAG  => NVL(l_tar_SALES_LEAD_rec.IMPORT_FLAG, 'N'),
5351           p_REJECT_REASON_CODE  => l_tar_SALES_LEAD_rec.REJECT_REASON_CODE,
5352           p_DELETED_FLAG => NVL(l_tar_SALES_LEAD_rec.DELETED_FLAG, 'N'),
5353           p_OFFER_ID  =>  p_SALES_LEAD_rec.OFFER_ID,
5354           --p_QUALIFIED_FLAG => p_SALES_LEAD_rec.QUALIFIED_FLAG,
5355           p_QUALIFIED_FLAG => l_qualified,
5356           p_ORIG_SYSTEM_CODE => p_SALES_LEAD_rec.ORIG_SYSTEM_CODE,
5357           -- p_SECURITY_GROUP_ID    => p_SALES_LEAD_rec.SECURITY_GROUP_ID,
5358           p_INC_PARTNER_PARTY_ID => p_SALES_LEAD_rec.INCUMBENT_PARTNER_PARTY_ID,
5359           p_INC_PARTNER_RESOURCE_ID =>
5360                                  p_SALES_LEAD_rec.INCUMBENT_PARTNER_RESOURCE_ID,
5361           p_PRM_EXEC_SPONSOR_FLAG   => p_SALES_LEAD_rec.PRM_EXEC_SPONSOR_FLAG,
5362           p_PRM_PRJ_LEAD_IN_PLACE_FLAG =>
5363                                  p_SALES_LEAD_rec.PRM_PRJ_LEAD_IN_PLACE_FLAG,
5364           p_PRM_SALES_LEAD_TYPE     => p_SALES_LEAD_rec.PRM_SALES_LEAD_TYPE,
5365           p_PRM_IND_CLASSIFICATION_CODE =>
5366                                  p_SALES_LEAD_rec.PRM_IND_CLASSIFICATION_CODE,
5367 	  p_PRM_ASSIGNMENT_TYPE => p_SALES_LEAD_rec.PRM_ASSIGNMENT_TYPE,
5368 	  p_AUTO_ASSIGNMENT_TYPE => p_SALES_LEAD_rec.AUTO_ASSIGNMENT_TYPE,
5369 	  p_PRIMARY_CONTACT_PARTY_ID => p_SALES_LEAD_rec.PRIMARY_CONTACT_PARTY_ID,
5370 	  p_PRIMARY_CNT_PERSON_PARTY_ID => p_SALES_LEAD_rec.PRIMARY_CNT_PERSON_PARTY_ID,
5371 	  p_PRIMARY_CONTACT_PHONE_ID => p_SALES_LEAD_rec.PRIMARY_CONTACT_PHONE_ID,
5372 
5373 	  -- new columns for CAPRI lead referral
5374 	  p_REFERRED_BY => p_SALES_LEAD_rec.REFERRED_BY,
5375 	  p_REFERRAL_TYPE => p_SALES_LEAD_rec.REFERRAL_TYPE,
5376 	  p_REFERRAL_STATUS => l_referral_status_profile,
5377 	  p_REF_DECLINE_REASON => p_SALES_LEAD_rec.REF_DECLINE_REASON,
5378 	  p_REF_COMM_LTR_STATUS => p_SALES_LEAD_rec.REF_COMM_LTR_STATUS,
5379 	  p_REF_ORDER_NUMBER => p_SALES_LEAD_rec.REF_ORDER_NUMBER,
5380 	  p_REF_ORDER_AMT => p_SALES_LEAD_rec.REF_ORDER_AMT,
5381 	  p_REF_COMM_AMT => p_SALES_LEAD_rec.REF_COMM_AMT,
5382 
5383 	  p_LEAD_DATE => p_SALES_LEAD_rec.LEAD_DATE,
5384 	  p_SOURCE_SYSTEM => p_SALES_LEAD_rec.SOURCE_SYSTEM,
5385 	  p_COUNTRY => l_country_code,
5386 
5387 	  p_TOTAL_AMOUNT => p_SALES_LEAD_rec.TOTAL_AMOUNT,
5388 	  p_EXPIRATION_DATE => l_exp_date, -- p_SALES_LEAD_rec.EXPIRATION_DATE,
5389 	  p_LEAD_RANK_IND =>  l_lead_rank_ind,
5390 	  p_LEAD_ENGINE_RUN_DATE => FND_API.G_MISS_DATE, --p_SALES_LEAD_rec.LEAD_ENGINE_RUN_DATE,
5391 	  p_CURRENT_REROUTES => p_SALES_LEAD_rec.CURRENT_REROUTES
5392 
5393            -- new columns for appsperf CRMAP denorm project bug 2928041
5394 
5395           ,p_STATUS_OPEN_FLAG =>   l_new_status_flag
5396           			--FND_API.G_MISS_CHAR
5397           ,p_LEAD_RANK_SCORE =>  l_new_lead_rank_score
5398           			--FND_API.G_MISS_NUM
5399 
5400           -- ckapoor 11.5.10 New columns
5401 
5402 	  	  , p_MARKETING_SCORE	=> l_tar_SALES_LEAD_rec.MARKETING_SCORE
5403 	  	, p_INTERACTION_SCORE	=> l_tar_SALES_LEAD_rec.INTERACTION_SCORE
5404 	  	, p_SOURCE_PRIMARY_REFERENCE	=> l_tar_SALES_LEAD_rec.SOURCE_PRIMARY_REFERENCE
5405 	  	, p_SOURCE_SECONDARY_REFERENCE	=> l_tar_SALES_LEAD_rec.SOURCE_SECONDARY_REFERENCE
5406 	  	, p_SALES_METHODOLOGY_ID	=> l_tar_SALES_LEAD_rec.SALES_METHODOLOGY_ID
5407 	  	, p_SALES_STAGE_ID		=> l_tar_SALES_LEAD_rec.SALES_STAGE_ID
5408 
5409 
5410 
5411 
5412       );
5413 
5414 /*
5415       -- Workflow will call update_sales_lead, if we kick-off workflow within
5416 	 -- update_sales_lead, it will cause infinite recursive calls
5417 
5418       -- Kick off Lead Assignment Workflow
5419       CALL_WF_TO_ASSIGN (
5420          P_Api_Version_Number   => 2.0,
5421          P_Init_Msg_List        => FND_API.G_FALSE,
5422          P_Sales_Lead_Id        => l_tar_SALES_LEAD_rec.SALES_LEAD_ID,
5423          P_assigned_resource_id => l_tar_SALES_LEAD_rec.ASSIGN_TO_SALESFORCE_ID,
5424          X_Return_Status        => l_Return_Status,
5425          X_Msg_Count            => l_Msg_Count,
5426          X_Msg_Data             => l_Msg_Data
5427           );
5428 
5429       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5430           IF (AS_DEBUG_ERROR_ON) THEN
5431 
5432           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5433                                        'AS_LEAD_ASSIGN_FAIL');
5434           END IF;
5435           RAISE FND_API.G_EXC_ERROR;
5436       END IF;
5437 */
5438 
5439 
5440 
5441 
5442 
5443 
5444   /*  IF   ((l_tar_sales_lead_rec.status_code<> FND_API.G_MISS_CHAR) AND (l_tar_sales_lead_rec.status_code <> l_old_status_code)) OR
5445           ((l_tar_sales_lead_rec.assign_to_salesforce_id <> FND_API.G_MISS_NUM) AND (l_tar_sales_lead_rec.assign_to_salesforce_id <> l_assign_to_salesforce_id)) OR
5446           ((l_tar_sales_lead_rec.assign_sales_group_id <> FND_API.G_MISS_NUM) AND (l_tar_sales_lead_rec.assign_sales_group_id <> l_assign_sales_group_id)) OR
5447           ((l_tar_sales_lead_rec.assign_to_person_id <> FND_API.G_MISS_NUM) AND (l_tar_sales_lead_rec.assign_to_person_id <> l_assign_to_person_id)) OR
5448           ((l_tar_sales_lead_rec.lead_rank_id <> FND_API.G_MISS_NUM) AND (l_tar_sales_lead_rec.lead_rank_id <> l_lead_rank_id)) OR
5449           ((l_tar_sales_lead_rec.qualified_flag <> FND_API.G_MISS_CHAR) AND (l_tar_sales_lead_rec.qualified_flag <> l_qualified_flag))
5450 */
5451 
5452       IF (AS_DEBUG_LOW_ON) THEN
5453 
5454 
5455 
5456       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5457                      'Just after AS_SALES_LEADS_PKG.Sales_Lead_Update_Row');
5458 
5459       END IF;
5460 
5461 
5462 l_log_status_code := l_tar_sales_lead_rec.status_code;
5463 l_log_assign_to_sf_id := l_tar_sales_lead_rec.assign_to_salesforce_id;
5464 l_log_assign_sg_id := l_tar_sales_lead_rec.assign_sales_group_id;
5465 l_log_assign_to_person_id := l_tar_sales_lead_rec.assign_to_person_id;
5466 l_log_lead_rank_id := l_tar_sales_lead_rec.lead_rank_id;
5467 l_log_reject_reason_code := l_tar_sales_lead_rec.reject_reason_code;
5468 l_log_qualified := l_qualified;
5469 
5470 
5471 
5472 /*IF   (
5473       (
5474           (l_tar_sales_lead_rec.status_code <> FND_API.G_MISS_CHAR)
5475        OR (l_tar_sales_lead_rec.assign_to_salesforce_id <> FND_API.G_MISS_NUM)
5476        OR (l_tar_sales_lead_rec.assign_sales_group_id <> FND_API.G_MISS_NUM)
5477        OR (l_tar_sales_lead_rec.assign_to_person_id <>  FND_API.G_MISS_NUM)
5478        OR (l_tar_sales_lead_rec.lead_rank_id <> FND_API.G_MISS_NUM)
5479        OR (l_tar_sales_lead_rec.qualified_flag <> FND_API.G_MISS_CHAR)
5480        OR (l_tar_sales_lead_rec.reject_reason_code <> FND_API.G_MISS_CHAR)
5481       )
5482       AND
5483       (
5484           (l_tar_sales_lead_rec.status_code <> l_old_status_code)
5485        OR (l_tar_sales_lead_rec.assign_to_salesforce_id <> l_assign_to_salesforce_id)
5486        OR (l_tar_sales_lead_rec.assign_sales_group_id <> l_assign_sales_group_id)
5487        OR (l_tar_sales_lead_rec.assign_to_person_id  <> l_assign_to_person_id)
5488        OR (l_tar_sales_lead_rec.lead_rank_id <> l_lead_rank_id)
5489        OR (l_tar_sales_lead_rec.qualified_flag <> l_qualified_flag)
5490        OR (l_tar_sales_lead_rec.reject_reason_code <>  l_reject_reason_code)
5491       )
5492       )
5493 
5494      THEN */
5495 
5496           IF
5497            (
5498                 ( (l_tar_sales_lead_rec.status_code = l_old_status_code)
5499                    or (l_tar_sales_lead_rec.status_code is null and l_old_status_code is null)
5500                   or (l_tar_sales_lead_rec.status_code = FND_API.G_MISS_CHAR) )
5501             AND ( (l_tar_sales_lead_rec.assign_to_salesforce_id = l_assign_to_salesforce_id)
5502                   or (l_tar_sales_lead_rec.assign_to_salesforce_id is null and l_assign_to_salesforce_id is null)
5503                   or (l_tar_sales_lead_rec.assign_to_salesforce_id = FND_API.G_MISS_NUM) )
5504             AND ( (l_tar_sales_lead_rec.assign_sales_group_id = l_assign_sales_group_id)
5505                 or (l_tar_sales_lead_rec.assign_sales_group_id is null and l_assign_sales_group_id is null)
5506                 or  (l_tar_sales_lead_rec.assign_sales_group_id = FND_API.G_MISS_NUM))
5507             AND ( (l_tar_sales_lead_rec.assign_to_person_id  = l_assign_to_person_id)
5508                or (l_tar_sales_lead_rec.assign_to_person_id is null and l_assign_to_person_id is null)
5509                or  (l_tar_sales_lead_rec.assign_to_person_id = FND_API.G_MISS_NUM))
5510             AND ( (l_tar_sales_lead_rec.lead_rank_id = l_lead_rank_id)
5511                or ( l_tar_sales_lead_rec.lead_rank_id is null and l_lead_rank_id is null)
5512                or  (l_tar_sales_lead_rec.lead_rank_id = FND_API.G_MISS_NUM))
5513             AND ( (l_tar_sales_lead_rec.qualified_flag = l_qualified_flag)
5514                  or (l_tar_sales_lead_rec.qualified_flag is null and l_qualified_flag is null )
5515                 or  (l_tar_sales_lead_rec.qualified_flag = FND_API.G_MISS_CHAR))
5516 
5517             AND ( (l_tar_sales_lead_rec.reject_reason_code =  l_reject_reason_code)
5518                  or (l_tar_sales_lead_rec.reject_reason_code is null and l_reject_reason_code is null)
5519                 or  (l_tar_sales_lead_rec.reject_reason_code = FND_API.G_MISS_CHAR))
5520            )
5521 
5522      THEN
5523            IF (AS_DEBUG_LOW_ON) THEN
5524 
5525            AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5526                           'Nothing to log ');
5527            END IF;
5528 
5529     ELSE
5530       IF (AS_DEBUG_LOW_ON) THEN
5531 
5532       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5533                      'Just after AS_SALES_LEADS_PKG.Sales_Lead_Update_Row');
5534       END IF;
5535 
5536 
5537         if (l_tar_sales_lead_rec.status_code = FND_API.G_MISS_CHAR) then
5538             l_log_status_code := l_old_status_code;
5539         end if;
5540 
5541 
5542       --IF (AS_DEBUG_LOW_ON) THENAS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5543       --               'marker 1');END IF;
5544 
5545         if (l_tar_sales_lead_rec.assign_to_salesforce_id = FND_API.G_MISS_NUM) then
5546             l_log_assign_to_sf_id := l_assign_to_salesforce_id;
5547         end if;
5548 
5549 --      IF (AS_DEBUG_LOW_ON) THEN            AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5550   --                   'marker 2');      END IF;
5551 
5552         if (l_tar_sales_lead_rec.assign_sales_group_id = FND_API.G_MISS_NUM) then
5553             l_log_assign_sg_id := l_assign_sales_group_id;
5554         end if;
5555 
5556 --      IF (AS_DEBUG_LOW_ON) THEN            AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5557   --                   'marker 3');      END IF;
5558 
5559         if (l_tar_sales_lead_rec.assign_to_person_id = FND_API.G_MISS_NUM) then
5560             l_log_assign_to_person_id := l_assign_to_person_id;
5561         end if;
5562 --      IF (AS_DEBUG_LOW_ON) THEN            AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5563   --                   'marker 4');      END IF;
5564 
5565 
5566         if (l_tar_sales_lead_rec.lead_rank_id = FND_API.G_MISS_NUM) then
5567             l_log_lead_rank_id := l_lead_rank_id;
5568         end if;
5569 
5570 --      IF (AS_DEBUG_LOW_ON) THEN            AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5571   --                   'marker 5');      END IF;
5572 
5573         if (l_tar_sales_lead_rec.reject_reason_code = FND_API.G_MISS_CHAR) then
5574             l_log_reject_reason_code := l_reject_reason_code;
5575         end if;
5576 
5577         if (l_qualified = FND_API.G_MISS_CHAR) then
5578                  l_log_qualified := l_qualified_flag;
5579         end if;
5580 
5581 
5582       -- Debug Message
5583       IF (AS_DEBUG_LOW_ON) THEN
5584 
5585       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5586                                    'Calling AS_SALES_LEADS_LOG_PKG.Insert_Row');
5587       END IF;
5588 
5589       -- Call API to create log entry
5590       AS_SALES_LEADS_LOG_PKG.Insert_Row(
5591             px_log_id                 => l_sales_lead_log_id ,
5592             p_sales_lead_id           => l_tar_sales_lead_rec.sales_lead_id,
5593             p_created_by             => fnd_global.user_id,
5594             p_creation_date           => sysdate,
5595             p_last_updated_by         => fnd_global.user_id,
5596             p_last_update_date        => sysdate,
5597             p_last_update_login       => FND_GLOBAL.CONC_LOGIN_ID,
5598             -- using standard parameters for program who columns
5599             p_request_id             => FND_GLOBAL.Conc_Request_Id,
5600             p_program_application_id => FND_GLOBAL.Prog_Appl_Id,
5601             p_program_id             => FND_GLOBAL.Conc_Program_Id,
5602             p_program_update_date    => sysdate,
5603             p_status_code             =>
5604                                    --l_tar_sales_lead_rec.status_code,
5605                                    l_log_status_code,
5606             p_assign_to_person_id     =>
5607                                     --l_tar_sales_lead_rec.assign_to_person_id,
5608                                     l_log_assign_to_person_id,
5609             p_assign_to_salesforce_id =>
5610                                     --l_tar_sales_lead_rec.assign_to_salesforce_id,
5611                                     l_log_assign_to_sf_id,
5612             p_reject_reason_code      =>
5613                                     --l_tar_sales_lead_rec.reject_reason_code,
5614                                     l_log_reject_reason_code,
5615             p_assign_sales_group_id   =>
5616                                     --l_tar_sales_lead_rec.assign_sales_group_id,
5617                                     l_log_assign_sg_id,
5618             p_lead_rank_id            =>
5619                                     --l_tar_sales_lead_rec.lead_rank_id,
5620                                     l_log_lead_rank_id,
5621             p_qualified_flag        => l_log_qualified,
5622             p_category		    => fnd_api.g_miss_char,
5623             p_manual_rank_flag      => l_manual_rank_flag
5624 
5625             );
5626 
5627 /*      ELSE
5628 
5629        -- Debug Message
5630       IF (AS_DEBUG_LOW_ON) THEN
5631 
5632       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5633                                    'Not Calling AS_SALES_LEADS_LOG_PKG.Insert_Row');
5634       END IF;
5635 
5636 */
5637       END IF;
5638 
5639 
5640 
5641        -- For referral leads, create another entry in the logs table so that it is tracked as a referral lead also
5642        -- This is to be done only for the first time, the referral type is updated from null to non null.
5643 
5644        if ( l_tar_SALES_LEAD_rec.REFERRAL_TYPE is not null and l_tar_sales_lead_rec.REFERRAL_TYPE <> FND_API.G_MISS_CHAR
5645             and l_referral_type is null )
5646 
5647          then
5648 
5649                l_sales_lead_log_id := null;
5650 
5651                AS_SALES_LEADS_LOG_PKG.Insert_Row(
5652                   px_log_id                => l_sales_lead_log_id ,
5653                   p_sales_lead_id          => l_tar_sales_lead_rec.sales_lead_id,
5654                   p_created_by             => fnd_global.user_id,
5655                   p_creation_date          => sysdate,
5656                   p_last_updated_by        => fnd_global.user_id,
5657                   p_last_update_date       => sysdate,
5658                   p_last_update_login      =>  FND_GLOBAL.CONC_LOGIN_ID,
5659                   -- using standard parameters for program who columns
5660                   p_request_id             => FND_GLOBAL.Conc_Request_Id,
5661                   p_program_application_id => FND_GLOBAL.Prog_Appl_Id,
5662                   p_program_id             => FND_GLOBAL.Conc_Program_Id,
5663                   p_program_update_date    => sysdate,
5664                   p_status_code            => l_referral_status_profile, -- for referral log, we use referral status
5665                   p_assign_to_person_id    =>
5666                                               --l_tar_sales_lead_rec.assign_to_person_id,
5667                                               l_log_assign_to_person_id,
5668 
5669                   p_assign_to_salesforce_id=>
5670                                               --l_tar_sales_lead_rec.assign_to_salesforce_id,
5671                                               l_log_assign_to_sf_id,
5672                   p_reject_reason_code     =>
5673                                               --l_tar_sales_lead_rec.reject_reason_code,
5674                                               l_log_reject_reason_code,
5675 
5676                   p_assign_sales_group_id  =>
5677                                               --l_tar_sales_lead_rec.assign_sales_group_id,
5678                                               l_log_assign_sg_id,
5679 
5680                   p_lead_rank_id           =>
5681                                               --l_tar_sales_lead_rec.lead_rank_id,
5682                                               l_log_lead_rank_id,
5683                   p_qualified_flag        => l_log_qualified,
5684                   p_category		    => 'REFERRAL'
5685                   );
5686 
5687 
5688             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5689                 RAISE FND_API.G_EXC_ERROR;
5690             END IF;
5691 
5692       end if;
5693 
5694 
5695 
5696 
5697 
5698       IF (AS_DEBUG_LOW_ON) THEN
5699 
5700 
5701 
5702 
5703 
5704 
5705 
5706 
5707 
5708 
5709 
5710       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5711                                    'x_return_status: '|| x_return_status);
5712 
5713 
5714 
5715 
5716 
5717       END IF;
5718 
5719       IF (AS_DEBUG_LOW_ON) THEN
5720 
5721 
5722 
5723       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5724                     'l_assign_sf_id:' ||l_assign_to_salesforce_id);
5725 
5726       END IF;
5727       IF (AS_DEBUG_LOW_ON) THEN
5728 
5729       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5730         'l_tar.assign_sf_id:' || l_tar_SALES_LEAD_rec.assign_to_salesforce_id);
5731       END IF;
5732 
5733       -- Call Create, Update or Delete Sales Team
5734       IF l_assign_to_salesforce_id IS NULL AND
5735          l_tar_SALES_LEAD_rec.assign_to_salesforce_id IS NOT NULL AND
5736          l_tar_SALES_LEAD_rec.assign_to_salesforce_id <> FND_API.G_MISS_NUM
5737       THEN
5738           -- Create access security in as_accesses_all
5739           -- l_Sales_Team_Rec.access_id         := FND_API.G_MISS_NUM;
5740           l_Sales_Team_Rec.last_update_date  := SYSDATE;
5741           l_Sales_Team_Rec.last_updated_by   := FND_GLOBAL.USER_ID;
5742           l_Sales_Team_Rec.creation_date     := SYSDATE;
5743           l_Sales_Team_Rec.created_by        := FND_GLOBAL.USER_ID;
5744           l_Sales_Team_Rec.last_update_login := FND_GLOBAL.CONC_LOGIN_ID;
5745 
5746           -- l_Sales_Team_Rec.team_leader_flag  := FND_API.G_MISS_CHAR;
5747           l_Sales_Team_Rec.customer_id      := l_tar_SALES_LEAD_rec.Customer_Id;
5748           l_Sales_Team_Rec.address_id       := l_tar_SALES_LEAD_rec.Address_Id;
5749           l_Sales_Team_Rec.salesforce_id    :=
5750 						    l_tar_SALES_LEAD_rec.ASSIGN_TO_SALESFORCE_ID;
5751           l_Sales_Team_Rec.person_id        :=
5752 						    l_tar_SALES_LEAD_rec.ASSIGN_TO_PERSON_ID;
5753           l_Sales_Team_Rec.sales_group_id   :=
5754 						    l_tar_SALES_LEAD_rec.ASSIGN_SALES_GROUP_ID;
5755           l_Sales_Team_Rec.sales_lead_id    :=
5756 						    l_tar_SALES_LEAD_rec.Sales_Lead_Id;
5757 
5758 	  l_Sales_Team_Rec.owner_flag := 'Y';
5759 	  l_Sales_Team_Rec.freeze_flag := 'Y';
5760 
5761 
5762 	  l_Sales_Team_Rec.team_leader_flag := 'Y';
5763 
5764 	  -- Change since update_sales_lead is not called from workflow any longer.
5765 	  --IF (P_Calling_From_WF_flag = 'Y')
5766 	  --THEN
5767 	  --   l_Sales_Team_Rec.created_by_TAP_flag := 'Y';
5768 	  --ELSE
5769 
5770 	     l_Sales_Team_Rec.created_by_TAP_flag := 'N';
5771 
5772 	  --END IF;
5773 
5774 
5775           -- Debug Message
5776           IF (AS_DEBUG_LOW_ON) THEN
5777 
5778           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5779                                        'Calling Create_SalesTeam');
5780           END IF;
5781 
5782           AS_ACCESS_PUB.Create_SalesTeam (
5783              p_api_version_number         => 2.0
5784             ,p_init_msg_list              => FND_API.G_FALSE
5785             ,p_commit                     => FND_API.G_FALSE
5786             ,p_validation_level           => p_Validation_Level
5787             ,p_access_profile_rec         => l_access_profile_rec
5788             ,p_check_access_flag          => P_Check_Access_flag
5789             ,p_admin_flag                 => P_Admin_Flag
5790             ,p_admin_group_id             => P_Admin_Group_Id
5791             ,p_identity_salesforce_id     => P_Identity_Salesforce_Id
5792             ,p_sales_team_rec             => l_Sales_Team_Rec
5793             ,X_Return_Status              => x_Return_Status
5794             ,X_Msg_Count                  => X_Msg_Count
5795             ,X_Msg_Data                   => X_Msg_Data
5796             ,x_access_id                  => l_Access_Id
5797           );
5798 
5799           -- Debug Message
5800           IF (AS_DEBUG_LOW_ON) THEN
5801 
5802           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5803                                        'Create_SalesTeam:x_access_id > ' ||
5804                                        l_access_id);
5805           END IF;
5806 
5807           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5808                RAISE FND_API.G_EXC_ERROR;
5809           END IF;
5810 
5811       ELSIF l_assign_to_salesforce_id IS NOT NULL  -- AND
5812          -- l_tar_SALES_LEAD_rec.assign_to_salesforce_id IS NOT NULL AND
5813          -- l_tar_SALES_LEAD_rec.assign_to_salesforce_id <>
5814          --                                         FND_API.G_MISS_NUM AND
5815          -- l_tar_SALES_LEAD_rec.assign_to_salesforce_id <>
5816          --                                         l_assign_to_salesforce_id
5817       THEN
5818           -- Get access record in as_accesses_all by sales_lead_id
5819 
5820           -- if the assign to is being cleared, then the cursor will not work if use null
5821           -- use the old assign to (database value) instead.
5822 
5823           IF (l_tar_SALES_LEAD_rec.assign_to_salesforce_id IS NOT NULL and l_tar_SALES_LEAD_rec.assign_to_salesforce_id <> FND_API.G_MISS_NUM) THEN
5824 
5825           OPEN  C_Get_Access  (l_tar_SALES_LEAD_rec.Sales_Lead_Id, l_tar_SALES_LEAD_rec.assign_to_salesforce_id, l_tar_SALES_LEAD_rec.assign_sales_group_id);
5826 
5827           ELSE
5828 
5829           OPEN  C_Get_Access  (l_tar_SALES_LEAD_rec.Sales_Lead_Id, l_assign_to_salesforce_id, l_assign_sales_group_id);
5830 
5831           END IF;
5832 
5833           FETCH C_Get_Access Into
5834                 l_Sales_Team_Rec.access_id
5835                ,l_Sales_Team_Rec.last_update_date
5836                ,l_Sales_Team_Rec.last_updated_by
5837                ,l_Sales_Team_Rec.creation_date
5838                ,l_Sales_Team_Rec.created_by
5839                ,l_Sales_Team_Rec.last_update_login
5840                ,l_Sales_Team_Rec.freeze_flag
5841                ,l_Sales_Team_Rec.reassign_flag
5842                ,l_Sales_Team_Rec.team_leader_flag
5843                ,l_Sales_Team_Rec.customer_id
5844                ,l_Sales_Team_Rec.address_id
5845                ,l_Sales_Team_Rec.salesforce_id
5846                ,l_Sales_Team_Rec.person_id
5847                ,l_Sales_Team_Rec.partner_customer_id
5848                ,l_Sales_Team_Rec.partner_address_id
5849                ,l_Sales_Team_Rec.created_person_id
5850                ,l_Sales_Team_Rec.lead_id
5851                ,l_Sales_Team_Rec.freeze_date
5852                ,l_Sales_Team_Rec.reassign_reason
5853                ,l_Sales_Team_Rec.downloadable_flag
5854                ,l_Sales_Team_Rec.attribute_category
5855                ,l_Sales_Team_Rec.attribute1
5856                ,l_Sales_Team_Rec.attribute2
5857                ,l_Sales_Team_Rec.attribute3
5858                ,l_Sales_Team_Rec.attribute4
5859                ,l_Sales_Team_Rec.attribute5
5860                ,l_Sales_Team_Rec.attribute6
5861                ,l_Sales_Team_Rec.attribute7
5862                ,l_Sales_Team_Rec.attribute8
5863                ,l_Sales_Team_Rec.attribute9
5864                ,l_Sales_Team_Rec.attribute10
5865                ,l_Sales_Team_Rec.attribute11
5866                ,l_Sales_Team_Rec.attribute12
5867                ,l_Sales_Team_Rec.attribute13
5868                ,l_Sales_Team_Rec.attribute14
5869                ,l_Sales_Team_Rec.attribute15
5870                ,l_Sales_Team_Rec.salesforce_role_code
5871                ,l_Sales_Team_Rec.salesforce_relationship_code
5872                ,l_Sales_Team_Rec.sales_group_id
5873                -- ,l_Sales_Team_Rec.reassign_requested_person_id
5874                -- ,l_Sales_Team_Rec.reassign_request_date
5875                -- ,l_Sales_Team_Rec.internal_update_access
5876                ,l_Sales_Team_Rec.sales_lead_id;
5877 
5878           CLOSE C_Get_Access;
5879 
5880 
5881 	-- ckapoor 11.5.10 - bug 3225643 - change keep flag for logged in user not the owner
5882 
5883           if (l_tar_SALES_LEAD_rec.accept_flag = 'Y' and l_accept_flag = 'N') then
5884            -- earlier we were changing the owner's keep flag .now for bug 3225643 , we have to change
5885            -- keep flag for logged in user
5886            -- l_Sales_Team_Rec.freeze_flag := 'Y';
5887 
5888            -- first determine if the logged in user is already present in the sales team or not
5889 
5890 
5891            IF (AS_DEBUG_LOW_ON) THEN
5892 
5893 	   	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5894 	   	   				       'CK:bef grp');
5895 	   END IF;
5896 
5897 
5898             Open c_get_group_id (p_identity_salesforce_id, 'RS_GROUP_MEMBER' , 'SALES','TELESALES','FIELDSALES','PRM','Y');
5899 	    Fetch c_get_group_id into l_login_user_sg_id;
5900 	    Close c_get_group_id;
5901 
5902 	               IF (AS_DEBUG_LOW_ON) THEN
5903 
5904 	    	   	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5905 	    	   	   				       'CK:usgid:'||l_login_user_sg_id);
5906 	    	   END IF;
5907 
5908 
5909 
5910 	    Open c_get_person_id(p_identity_salesforce_id);
5911 	    Fetch c_get_person_id into l_login_user_person_id;
5912 	    Close c_get_person_id;
5913 
5914 
5915 	    IF (AS_DEBUG_LOW_ON) THEN
5916 
5917 	    	    	   	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5918 	    	    	   	   				       'CK:uspid:'||l_login_user_person_id);
5919 	    	    	   END IF;
5920 
5921 
5922 
5923 	    OPEN  C_Get_Access  (l_tar_SALES_LEAD_rec.Sales_Lead_Id, p_identity_salesforce_id, l_login_user_sg_id);
5924 
5925 	              FETCH C_Get_Access Into
5926 	                    l_login_salesteam_rec.access_id
5927 	                   ,l_login_salesteam_rec.last_update_date
5928 	                   ,l_login_salesteam_rec.last_updated_by
5929 	                   ,l_login_salesteam_rec.creation_date
5930 	                   ,l_login_salesteam_rec.created_by
5931 	                   ,l_login_salesteam_rec.last_update_login
5932 	                   ,l_login_salesteam_rec.freeze_flag
5933 	                   ,l_login_salesteam_rec.reassign_flag
5934 	                   ,l_login_salesteam_rec.team_leader_flag
5935 	                   ,l_login_salesteam_rec.customer_id
5936 	                   ,l_login_salesteam_rec.address_id
5937 	                   ,l_login_salesteam_rec.salesforce_id
5938 	                   ,l_login_salesteam_rec.person_id
5939 	                   ,l_login_salesteam_rec.partner_customer_id
5940 	                   ,l_login_salesteam_rec.partner_address_id
5941 	                   ,l_login_salesteam_rec.created_person_id
5942 	                   ,l_login_salesteam_rec.lead_id
5943 	                   ,l_login_salesteam_rec.freeze_date
5944 	                   ,l_login_salesteam_rec.reassign_reason
5945 	                   ,l_login_salesteam_rec.downloadable_flag
5946 	                   ,l_login_salesteam_rec.attribute_category
5947 	                   ,l_login_salesteam_rec.attribute1
5948 	                   ,l_login_salesteam_rec.attribute2
5949 	                   ,l_login_salesteam_rec.attribute3
5950 	                   ,l_login_salesteam_rec.attribute4
5951 	                   ,l_login_salesteam_rec.attribute5
5952 	                   ,l_login_salesteam_rec.attribute6
5953 	                   ,l_login_salesteam_rec.attribute7
5954 	                   ,l_login_salesteam_rec.attribute8
5955 	                   ,l_login_salesteam_rec.attribute9
5956 	                   ,l_login_salesteam_rec.attribute10
5957 	                   ,l_login_salesteam_rec.attribute11
5958 	                   ,l_login_salesteam_rec.attribute12
5959 	                   ,l_login_salesteam_rec.attribute13
5960 	                   ,l_login_salesteam_rec.attribute14
5961 	                   ,l_login_salesteam_rec.attribute15
5962 	                   ,l_login_salesteam_rec.salesforce_role_code
5963 	                   ,l_login_salesteam_rec.salesforce_relationship_code
5964 	                   ,l_login_salesteam_rec.sales_group_id
5965 	                   -- ,l_Sales_Team_Rec.reassign_requested_person_id
5966 	                   -- ,l_Sales_Team_Rec.reassign_request_date
5967 	                   -- ,l_Sales_Team_Rec.internal_update_access
5968 	                   ,l_login_salesteam_rec.sales_lead_id;
5969 
5970 	              CLOSE C_Get_Access;
5971 
5972 
5973 
5974            -- now check if the logged in user is already in the salesteam or not.
5975            -- If already there, call update_sales_team otherwise call create_sales_team
5976 
5977 	     --l_login_salesteam_rec.last_update_date  := SYSDATE;
5978 	     l_login_salesteam_rec.last_updated_by   := FND_GLOBAL.USER_ID;
5979 	     --l_login_salesteam_rec.creation_date     := SYSDATE;
5980 	     --l_login_salesteam_rec.created_by        := FND_GLOBAL.USER_ID;
5981 	     l_login_salesteam_rec.last_update_login := FND_GLOBAL.CONC_LOGIN_ID;
5982 
5983 	     -- l_Sales_Team_Rec.team_leader_flag  := FND_API.G_MISS_CHAR;
5984 	     l_login_salesteam_rec.salesforce_id    :=
5985 						    p_identity_salesforce_id;
5986 
5987 	     l_login_salesteam_rec.sales_group_id   :=
5988 						    l_login_user_sg_id;
5989 
5990 	     l_login_salesteam_rec.sales_lead_id    :=
5991 						    l_tar_SALES_LEAD_rec.Sales_Lead_Id;
5992 
5993 	     l_login_salesteam_rec.person_id := l_login_user_person_id;
5994 
5995 
5996 	     --l_login_salesteam_rec.owner_flag := 'Y';
5997 
5998 	     -- THIS IS THE IMPORTANT STEP OF MAKING SURE THAT THE LOGIN USER IS FROZEN
5999 
6000 	     l_login_salesteam_rec.freeze_flag := 'Y';
6001 
6002              --l_login_salesteam_rec.team_leader_flag := 'Y';
6003 	     --l_login_salesteam_rec.created_by_TAP_flag := 'N';
6004 
6005 
6006 	   l_login_user_in_st := 'N';
6007 	   Open c_check_salesteam(l_Sales_Team_Rec.sales_lead_id,  p_identity_salesforce_id ,  l_login_user_sg_id);
6008 	   Fetch c_check_salesteam into l_login_user_in_st;
6009 	   Close c_check_salesteam;
6010 
6011 	   IF (l_login_user_in_st = 'Y' ) THEN
6012 
6013 	             	   -- Debug Message
6014 	   	           IF (AS_DEBUG_LOW_ON) THEN
6015 
6016 	   	           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6017 	   				       'CK:Calling Update_SalesTeam');
6018 	   	           END IF;
6019 
6020 	                  AS_ACCESS_PUB.Update_SalesTeam (
6021 	                   p_api_version_number         => 2.0
6022 	                  ,p_init_msg_list              => FND_API.G_FALSE
6023 	                  ,p_commit                     => FND_API.G_FALSE
6024 	                  ,p_validation_level           => P_Validation_Level
6025 	                  ,p_check_access_flag          => p_check_access_flag   -- 'Y'
6026 	                  ,p_access_profile_rec         => l_access_profile_rec
6027 	                  ,p_admin_flag                 => p_admin_flag
6028 	                  ,p_admin_group_id             => p_admin_group_id
6029 	                  ,p_identity_salesforce_id     => p_identity_salesforce_id
6030 	                  ,p_sales_team_rec             => l_login_salesteam_rec
6031 	                  ,X_Return_Status              => x_Return_Status
6032 	                  ,X_Msg_Count                  => X_Msg_Count
6033 	                  ,X_Msg_Data                   => X_Msg_Data
6034 	                  ,x_access_id                  => l_login_Access_Id
6035 	                 );
6036 	   ELSE
6037 
6038 
6039 	   	      -- Debug Message
6040 	   	      IF (AS_DEBUG_LOW_ON) THEN
6041 
6042 	   	      AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6043 	   				       'CK:Calling Create_SalesTeam');
6044 	   	      END IF;
6045 
6046 	             l_login_salesteam_rec.last_update_date     := SYSDATE;
6047 	             l_login_salesteam_rec.creation_date     := SYSDATE;
6048 	   	     l_login_salesteam_rec.created_by        := FND_GLOBAL.USER_ID;
6049 	             l_login_salesteam_rec.created_by_TAP_flag := 'N';
6050 	             l_login_salesteam_rec.customer_id      := l_customer_id  ; --l_tar_SALES_LEAD_rec.Customer_Id;
6051 		     l_login_salesteam_rec.address_id       := l_tar_SALES_LEAD_rec.Address_Id;
6052 		     l_login_salesteam_rec.person_id 	    := l_login_user_person_id;
6053 
6054 
6055 	   	      AS_ACCESS_PUB.Create_SalesTeam (
6056 	   	        p_api_version_number         => 2.0
6057 	   	       ,p_init_msg_list              => FND_API.G_FALSE
6058 	   	       ,p_commit                     => FND_API.G_FALSE
6059 	   	       ,p_validation_level           => p_Validation_Level
6060 	   	       ,p_access_profile_rec         => l_access_profile_rec
6061 	   	       ,p_check_access_flag          => P_Check_Access_flag
6062 	   	       ,p_admin_flag                 => P_Admin_Flag
6063 	   	       ,p_admin_group_id             => P_Admin_Group_Id
6064 	   	       ,p_identity_salesforce_id     => P_Identity_Salesforce_Id
6065 	   	       ,p_sales_team_rec             => l_login_salesteam_rec
6066 	   	       ,X_Return_Status              => x_Return_Status
6067 	   	       ,X_Msg_Count                  => X_Msg_Count
6068 	   	       ,X_Msg_Data                   => X_Msg_Data
6069 	   	       ,x_access_id                  => l_login_Access_Id
6070 	   	     );
6071 
6072 	   	     -- Debug Message
6073 	   	     IF (AS_DEBUG_LOW_ON) THEN
6074 
6075 	   	     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6076 	   				       'CK:Create_SalesTeam:x_access_id > ' ||
6077 	          	   			       l_login_Access_Id);
6078 	   	     END IF;
6079 	            END IF;
6080 
6081 
6082 
6083 
6084           end if;
6085 
6086           -- END ckapoor 11.5.10 - bug 3225643 - change keep flag for logged in user not the owner
6087 
6088 
6089           -- ffang 012501, if blank out the assign_to_salesforce_id, access
6090           -- record should be deleted
6091           IF l_tar_SALES_LEAD_rec.assign_to_salesforce_id IS NULL or
6092              l_tar_SALES_LEAD_rec.assign_to_salesforce_id = FND_API.G_MISS_NUM
6093           THEN
6094             -- Call update_salesteam to update the owner
6095 
6096               l_Sales_Team_Rec.last_updated_by      := FND_GLOBAL.USER_ID;
6097               l_Sales_Team_Rec.last_update_login    := FND_GLOBAL.CONC_LOGIN_ID;
6098               --l_Sales_Team_Rec.last_update_date     := SYSDATE;
6099               -- l_Sales_Team_Rec.team_leader_flag     := FND_API.G_MISS_CHAR;
6100               l_Sales_Team_Rec.customer_id := l_Customer_Id;
6101               l_Sales_Team_Rec.address_id  := l_tar_SALES_LEAD_rec.Address_Id;
6102               -- only need to update the owner flag for the existing entry (owner)
6103               l_Sales_Team_Rec.salesforce_id        :=
6104                                    l_assign_to_salesforce_id;
6105               l_Sales_Team_Rec.sales_group_id       :=
6106                                    l_assign_sales_group_id;
6107               l_Sales_Team_Rec.sales_lead_id        :=
6108                                    l_tar_SALES_LEAD_rec.SALES_LEAD_ID;
6109               l_Sales_Team_Rec.owner_flag        := 'N';
6110   	      --    l_Sales_Team_Rec.created_by_TAP_flag := 'N';
6111 
6112               IF (AS_DEBUG_LOW_ON) THEN
6113 
6114 
6115 
6116               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6117                                            'Access id is'|| l_sales_team_rec.access_id);
6118 
6119               END IF;
6120 
6121 
6122               -- Debug Message
6123               IF (AS_DEBUG_LOW_ON) THEN
6124 
6125               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6126                                            'Calling Update_SalesTeam');
6127               END IF;
6128 
6129               AS_ACCESS_PUB.Update_SalesTeam (
6130                 p_api_version_number         => 2.0
6131                ,p_init_msg_list              => FND_API.G_FALSE
6132                ,p_commit                     => FND_API.G_FALSE
6133                ,p_validation_level           => P_Validation_Level
6134                ,p_check_access_flag          => p_check_access_flag   -- 'Y'
6135                ,p_access_profile_rec         => l_access_profile_rec
6136                ,p_admin_flag                 => p_admin_flag
6137                ,p_admin_group_id             => p_admin_group_id
6138                ,p_identity_salesforce_id     => p_identity_salesforce_id
6139                ,p_sales_team_rec             => l_Sales_Team_Rec
6140                ,X_Return_Status              => x_Return_Status
6141                ,X_Msg_Count                  => X_Msg_Count
6142                ,X_Msg_Data                   => X_Msg_Data
6143                ,x_access_id                  => l_Access_Id
6144               );
6145 
6146 
6147               -- Call Delete_SalesTeam to delete access record
6148             /*  AS_ACCESS_PUB.Delete_SalesTeam(
6149                   p_api_version_number     =>  2.0,
6150                   p_init_msg_list          =>  FND_API.G_FALSE,
6151                   p_commit                 =>  FND_API.G_FALSE,
6152                   p_validation_level       =>  FND_API.G_VALID_LEVEL_FULL,
6153                   p_access_profile_rec     =>  l_access_profile_rec,
6154                   p_check_access_flag      =>  'Y',
6155                   p_admin_flag             =>  p_admin_flag,
6156                   p_admin_group_id         =>  p_admin_group_id,
6157                   p_identity_salesforce_id =>  p_identity_salesforce_id,
6158                   p_sales_team_rec         =>  l_sales_team_rec,
6159                   x_return_status          =>  x_return_status,
6160                   x_msg_count              =>  x_msg_count,
6161                   x_msg_data               =>  x_msg_data
6162               ); */
6163 
6164               IF (AS_DEBUG_LOW_ON) THEN
6165 
6166 
6167 
6168               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6169                             'Delete_SalesTeam:x_access_id > ' || l_access_id);
6170 
6171               END IF;
6172 
6173               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6174                   RAISE FND_API.G_EXC_ERROR;
6175               END IF;
6176 
6177           ELSIF l_tar_SALES_LEAD_rec.assign_to_salesforce_id IS NOT NULL AND
6178                 l_tar_SALES_LEAD_rec.assign_to_salesforce_id <>
6179                                                   FND_API.G_MISS_NUM AND
6180                 l_tar_SALES_LEAD_rec.assign_to_salesforce_id <>
6181                                                   l_assign_to_salesforce_id
6182           THEN
6183 
6184               l_Sales_Team_Rec.last_updated_by      := FND_GLOBAL.USER_ID;
6185               l_Sales_Team_Rec.last_update_login    := FND_GLOBAL.CONC_LOGIN_ID;
6186               --l_Sales_Team_Rec.last_update_date     := SYSDATE;
6187               -- l_Sales_Team_Rec.team_leader_flag     := FND_API.G_MISS_CHAR;
6188               l_Sales_Team_Rec.customer_id := l_Customer_Id;
6189               l_Sales_Team_Rec.address_id  := l_tar_SALES_LEAD_rec.Address_Id;
6190 
6191               -- only need to update the owner flag for the existing entry (owner)
6192 
6193               l_Sales_Team_Rec.salesforce_id        :=
6194                                    l_assign_to_salesforce_id;
6195 
6196               l_Sales_Team_Rec.sales_group_id       :=
6197                                    l_assign_sales_group_id;
6198 
6199               l_Sales_Team_Rec.sales_lead_id        :=
6200                                    l_tar_SALES_LEAD_rec.SALES_LEAD_ID;
6201 
6202               /*AS_ACCESS_PUB.Update_SalesTeam (
6203                 p_api_version_number         => 2.0
6204                ,p_init_msg_list              => FND_API.G_FALSE
6205                ,p_commit                     => FND_API.G_FALSE
6206                ,p_validation_level           => P_Validation_Level
6207                ,p_check_access_flag          => p_check_access_flag   -- 'Y'
6208                ,p_access_profile_rec         => l_access_profile_rec
6209                ,p_admin_flag                 => p_admin_flag
6210                ,p_admin_group_id             => p_admin_group_id
6211                ,p_identity_salesforce_id     => p_identity_salesforce_id
6212                ,p_sales_team_rec             => l_Sales_Team_Rec
6213                ,X_Return_Status              => x_Return_Status
6214                ,X_Msg_Count                  => X_Msg_Count
6215                ,X_Msg_Data                   => X_Msg_Data
6216                ,x_access_id                  => l_Access_Id
6217               );
6218 
6219               IF (AS_DEBUG_LOW_ON) THEN
6220 
6221 
6222 
6223               AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6224                             'Update_SalesTeam:x_access_id > ' || l_access_id);
6225 
6226               END IF;
6227 
6228               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6229                   RAISE FND_API.G_EXC_ERROR;
6230               END IF;
6231 
6232               */
6233 
6234 
6235               -- Create another entry in the as_accesses_all for the new owner
6236               -- use some of the fields from those already set in the record.
6237 
6238               -- this needs to be done only is doing new create_sales_team
6239               --l_Sales_Team_Rec.last_update_date     := SYSDATE;
6240 
6241 
6242               l_Sales_Team_Rec.salesforce_id        :=
6243                                    l_tar_SALES_LEAD_rec.assign_to_salesforce_id;
6244 
6245               l_Sales_Team_Rec.sales_group_id       :=
6246                                    l_tar_SALES_LEAD_rec.assign_sales_group_id;
6247 
6248               l_Sales_Team_Rec.person_id       :=
6249                                    l_tar_SALES_LEAD_rec.assign_to_person_id;
6250 
6251               l_Sales_Team_Rec.owner_flag        := 'Y';
6252               l_Sales_Team_Rec.freeze_flag        := 'Y';
6253 
6254 
6255 
6256    	      --l_Sales_Team_Rec.created_by_TAP_flag := 'N';
6257 
6258 	      l_Sales_Team_Rec.team_leader_flag := 'Y';
6259 
6260           -- Call duplicate check API to make sure that the new assign to is
6261           -- not already present in the accesses table. If already there, call
6262           -- update_sales_team otherwise call create_sales_team
6263 
6264           -- check for whether the current user is owner or not
6265           l_check_salesteam := 'N';
6266           Open c_check_salesteam(l_Sales_Team_Rec.sales_lead_id, l_Sales_Team_Rec.salesforce_id ,  l_Sales_Team_Rec.sales_group_id  );
6267 
6268 	      Fetch c_check_salesteam into l_check_salesteam;
6269 	      Close c_check_salesteam;
6270 
6271           IF (l_check_salesteam = 'Y' ) THEN
6272 
6273           	   -- Debug Message
6274 	           IF (AS_DEBUG_LOW_ON) THEN
6275 
6276 	           AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6277 				       'Calling Update_SalesTeam');
6278 	           END IF;
6279 
6280                AS_ACCESS_PUB.Update_SalesTeam (
6281                 p_api_version_number         => 2.0
6282                ,p_init_msg_list              => FND_API.G_FALSE
6283                ,p_commit                     => FND_API.G_FALSE
6284                ,p_validation_level           => P_Validation_Level
6285                ,p_check_access_flag          => p_check_access_flag   -- 'Y'
6286                ,p_access_profile_rec         => l_access_profile_rec
6287                ,p_admin_flag                 => p_admin_flag
6288                ,p_admin_group_id             => p_admin_group_id
6289                ,p_identity_salesforce_id     => p_identity_salesforce_id
6290                ,p_sales_team_rec             => l_Sales_Team_Rec
6291                ,X_Return_Status              => x_Return_Status
6292                ,X_Msg_Count                  => X_Msg_Count
6293                ,X_Msg_Data                   => X_Msg_Data
6294                ,x_access_id                  => l_Access_Id
6295               );
6296         ELSE
6297 
6298 
6299 	      -- Debug Message
6300 	      IF (AS_DEBUG_LOW_ON) THEN
6301 
6302 	      AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6303 				       'Calling Create_SalesTeam');
6304 	      END IF;
6305 
6306           l_Sales_Team_Rec.last_update_date     := SYSDATE;
6307           l_Sales_Team_Rec.creation_date     := SYSDATE;
6308 	      l_Sales_Team_Rec.created_by        := FND_GLOBAL.USER_ID;
6309           l_Sales_Team_Rec.created_by_TAP_flag := 'N';
6310 
6311 	      AS_ACCESS_PUB.Create_SalesTeam (
6312 	        p_api_version_number         => 2.0
6313 	       ,p_init_msg_list              => FND_API.G_FALSE
6314 	       ,p_commit                     => FND_API.G_FALSE
6315 	       ,p_validation_level           => p_Validation_Level
6316 	       ,p_access_profile_rec         => l_access_profile_rec
6317 	       ,p_check_access_flag          => P_Check_Access_flag
6318 	       ,p_admin_flag                 => P_Admin_Flag
6319 	       ,p_admin_group_id             => P_Admin_Group_Id
6320 	       ,p_identity_salesforce_id     => P_Identity_Salesforce_Id
6321 	       ,p_sales_team_rec             => l_Sales_Team_Rec
6322 	       ,X_Return_Status              => x_Return_Status
6323 	       ,X_Msg_Count                  => X_Msg_Count
6324 	       ,X_Msg_Data                   => X_Msg_Data
6325 	       ,x_access_id                  => l_Access_Id
6326 	     );
6327 
6328 	     -- Debug Message
6329 	     IF (AS_DEBUG_LOW_ON) THEN
6330 
6331 	     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6332 				       'Create_SalesTeam:x_access_id > ' ||
6333        	   			       l_access_id);
6334 	     END IF;
6335          END IF;
6336 
6337 	     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6338 	          RAISE FND_API.G_EXC_ERROR;
6339 	     END IF;
6340 
6341 
6342           END IF;
6343       END IF;
6344 
6345 
6346 
6347 
6348 
6349 
6350 	    -- if we are changing status from open to closed or closed to open,
6351 	    -- then the denormed flag in as_accesses_all needs to change for all
6352 	    -- records for this sales_lead_id
6353 
6354 	    if (l_old_status_flag = 'Y' AND l_new_status_flag = 'N') then
6355 
6356 	    update as_accesses_all
6357 	    set open_flag = null , last_update_date = sysdate,
6358 	    last_updated_by = fnd_global.user_id,
6359 	    last_update_login = fnd_global.conc_login_id
6360 	    where sales_lead_id = l_tar_SALES_LEAD_rec.SALES_LEAD_ID;
6361 
6362 	    elsif ( l_old_status_flag = 'N' AND l_new_status_flag = 'Y') then
6363 
6364 	    update as_accesses_all
6365 		  set open_flag = 'Y', last_update_date = sysdate,
6366 		  last_updated_by = fnd_global.user_id,
6367 		  last_update_login = fnd_global.conc_login_id
6368 	    where sales_lead_id = l_tar_SALES_LEAD_rec.SALES_LEAD_ID;
6369 
6370 	    end if;
6371 
6372 
6373 	         -- Update lead_rank_score as well.
6374 
6375 
6376 
6377 	   -- fixing problem found during testing that if u updated lead e.g from Cold Lead to
6378 	   -- null rank, then lead_rank_score in as_accesses_all was not getting updated.
6379 
6380 
6381 	    -- if new rank is null, we  want to fix the score since old might have been non null.
6382 	    -- if new rank is g_miss , means anyways the rank is not changing so score is not changing.
6383 	    -- since we are re-using code from denorming for as_sales_leads, if l_new_lead_rank_score
6384 	    -- is g_miss then dont update as_accesses_all, basically simulate table handler
6385 
6386        	   if ( l_new_lead_rank_score <> FND_API.G_MISS_NUM ) THEN
6387 		-- update the as_accesses_all.lead_rank_score if the rank has been changed i.e not g_miss
6388 		update as_accesses_all
6389 			    set lead_rank_score = l_new_lead_rank_score , last_update_date = sysdate,
6390 			    last_updated_by = fnd_global.user_id,
6391 			    last_update_login = fnd_global.conc_login_id
6392 		where sales_lead_id = l_tar_SALES_LEAD_rec.SALES_LEAD_ID;
6393 
6394            END IF;
6395 
6396 	  -- End denorm fix
6397 
6398 
6399 /*
6400       -- Debug Message
6401       IF (AS_DEBUG_LOW_ON) THEN
6402 
6403       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6404                                      'Validate BUDGET_AMOUNT');
6405       END IF;
6406 
6407       Validate_BUDGET_AMOUNTS(
6408           p_init_msg_list         => FND_API.G_FALSE,
6409           p_validation_mode       => AS_UTILITY_PVT.G_CREATE,
6410           p_SALES_LEAD_ID         => l_tar_SALES_LEAD_rec.Sales_Lead_Id,
6411           x_return_status         => x_return_status,
6412           x_msg_count             => x_msg_count,
6413           x_msg_data              => x_msg_data);
6414 
6415       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6416           raise FND_API.G_EXC_ERROR;
6417       END IF;
6418 */
6419 
6420       --
6421       -- END of API body.
6422       --
6423 
6424       -- Standard check for p_commit
6425       IF FND_API.to_Boolean( p_commit )
6426       THEN
6427           COMMIT WORK;
6428       END IF;
6429 
6430       -- Debug Message
6431       IF (AS_DEBUG_LOW_ON) THEN
6432 
6433       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6434                                    'PVT: ' || l_api_name || ' End');
6435       END IF;
6436 
6437       -- Standard call to get message count and IF count is 1, get message info.
6438       FND_MSG_PUB.Count_And_Get
6439       (  p_count          =>   x_msg_count,
6440          p_data           =>   x_msg_data );
6441 
6442       EXCEPTION
6443           WHEN FND_API.G_EXC_ERROR THEN
6444 		    AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
6445 			   P_API_NAME => L_API_NAME
6446                  ,P_PKG_NAME => G_PKG_NAME
6447                  ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
6448                  ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
6449                  ,X_MSG_COUNT => X_MSG_COUNT
6450                  ,X_MSG_DATA => X_MSG_DATA
6451                  ,X_RETURN_STATUS => X_RETURN_STATUS);
6452 
6453           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6454               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
6455                   P_API_NAME => L_API_NAME
6456                  ,P_PKG_NAME => G_PKG_NAME
6457                  ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
6458                  ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
6459                  ,X_MSG_COUNT => X_MSG_COUNT
6460                  ,X_MSG_DATA => X_MSG_DATA
6461                  ,X_RETURN_STATUS => X_RETURN_STATUS);
6462 
6463           WHEN OTHERS THEN
6464               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
6465                   P_API_NAME => L_API_NAME
6466                  ,P_PKG_NAME => G_PKG_NAME
6467                  ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
6468                  ,P_SQLCODE => SQLCODE
6469                  ,P_SQLERRM => SQLERRM
6470                  ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
6471                  ,X_MSG_COUNT => X_MSG_COUNT
6472                  ,X_MSG_DATA => X_MSG_DATA
6473                  ,X_RETURN_STATUS => X_RETURN_STATUS);
6474 END Update_sales_lead;
6475 
6476 
6477 /*
6478 This function is decomissioned
6479 -- function determines whether the Sales_Lead Is Qualified Or NOT.
6480 FUNCTION IS_LEAD_QUALIFIED(
6481     P_Sales_lead_rec     IN AS_SALES_LEADS_PUB.SALES_LEAD_Rec_Type
6482                               := AS_SALES_LEADS_PUB.G_MISS_SALES_LEAD_REC,
6483     p_phone_id           IN NUMBER := FND_API.G_MISS_NUM,
6484     p_contact_role_code  IN VARCHAR2 := FND_API.G_MISS_CHAR
6485     ) RETURN VARCHAR
6486  IS
6487     l_api_name           CONSTANT VARCHAR2(30) := 'Is_Lead_Qualified';
6488     l_project_name_req   varchar2(1);
6489     l_channel_req        varchar2(1);
6490     l_time_frame_req     varchar2(1);
6491     l_total_budget_req   varchar2(1);
6492     l_contact_phone_req  varchar2(1);
6493     l_contact_role_req   varchar2(1);
6494     l_budget_status_req  varchar2(1);
6495     l_campaign_code_req  varchar2(1);
6496     l_isQualified        varchar2(1) := 'Y';
6497 begin
6498 
6499     IF (AS_DEBUG_LOW_ON) THEN
6500 
6501 
6502 
6503     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6504                                          'p_phone_id is '||p_phone_id);
6505 
6506     END IF;
6507     IF (AS_DEBUG_LOW_ON) THEN
6508 
6509     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6510                                          'p_contact_role_code is '||p_contact_role_code);
6511     END IF;
6512 
6513     -- get all of the required variables for a Lead to be qualified
6514     l_project_name_req  := fnd_profile.value('AS_SALES_LEAD_PROJECT_NAME_REQ');
6515     l_channel_req       := fnd_profile.value('AS_SALES_LEAD_CHANNEL_REQ');
6516     l_time_frame_req    := fnd_profile.value('AS_SALES_LEAD_TIME_FRAME_REQ');
6517     l_total_budget_req  := fnd_profile.value('AS_SALES_LEAD_TOTAL_BUDGET_REQ');
6518     l_contact_phone_req := fnd_profile.value('AS_SALES_LEAD_CONTACT_PHONE_REQ');
6519     l_contact_role_req  := fnd_profile.value('AS_SALES_LEAD_CONTACT_ROLE_REQ');
6520     l_budget_status_req := fnd_profile.value('AS_SALES_LEAD_BUDGET_STATUS_REQ');
6521     l_campaign_code_req := fnd_profile.value('AS_SALES_LEAD_CAMPAIGN_CODE_REQ');
6522 
6523 
6524     IF (AS_DEBUG_LOW_ON) THEN
6525 
6526 
6527 
6528 
6529 
6530     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6531                                          'profile - parent_project'||l_project_name_req);
6532 
6533 
6534     END IF;
6535 
6536     IF (AS_DEBUG_LOW_ON) THEN
6537 
6538 
6539 
6540     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6541                                          'profile - channel'||l_channel_req);
6542 
6543     END IF;
6544 
6545     IF (AS_DEBUG_LOW_ON) THEN
6546 
6547 
6548 
6549     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6550                                          'profile - time frame'||l_time_frame_req);
6551 
6552     END IF;
6553 
6554     IF (AS_DEBUG_LOW_ON) THEN
6555 
6556 
6557 
6558     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6559                                          'profile - total budget'||l_total_budget_req);
6560 
6561     END IF;
6562 
6563     IF (AS_DEBUG_LOW_ON) THEN
6564 
6565 
6566 
6567     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6568                                          'profile - contact phone'||l_contact_phone_req);
6569 
6570     END IF;
6571 
6572     IF (AS_DEBUG_LOW_ON) THEN
6573 
6574 
6575 
6576     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6577                                          'profile - contact role'||l_contact_role_req);
6578 
6579     END IF;
6580 
6581     IF (AS_DEBUG_LOW_ON) THEN
6582 
6583 
6584 
6585     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6586                                          'profile - budget_status'||l_budget_status_req);
6587 
6588     END IF;
6589 
6590     IF (AS_DEBUG_LOW_ON) THEN
6591 
6592 
6593 
6594     AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6595                                          'profile - campaign code'||l_campaign_code_req);
6596 
6597     END IF;
6598 
6599 
6600 
6601     if l_project_name_req = 'Y' then
6602         if (p_sales_lead_rec.parent_project is null) or
6603            (p_sales_lead_rec.parent_project = FND_API.G_MISS_CHAR) then
6604             IF (AS_DEBUG_LOW_ON) THEN
6605 
6606             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6607                                          'Qualification - parent_project');
6608             END IF;
6609             l_isQualified := 'N';
6610             return l_isQualified;
6611         end if;
6612     end if;
6613 
6614     if l_channel_req = 'Y' then
6615         if (P_Sales_lead_rec.CHANNEL_CODE is null) or
6616            (p_sales_lead_rec.CHANNEL_CODE = FND_API.G_MISS_CHAR) then
6617             IF (AS_DEBUG_LOW_ON) THEN
6618 
6619             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6620                                          'Qualification - CHANNEL_CODE');
6621             END IF;
6622             l_isQualified := 'N';
6623             return l_isQualified;
6624         end if;
6625     end if;
6626 
6627     if l_time_frame_req = 'Y' then
6628         if (P_Sales_lead_rec.DECISION_TIMEFRAME_CODE is null) or
6629            (p_sales_lead_rec.DECISION_TIMEFRAME_CODE = FND_API.G_MISS_CHAR) then
6630             IF (AS_DEBUG_LOW_ON) THEN
6631 
6632             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6633                                    'Qualification - DECISION_TIMEFRAME_CODE');
6634             END IF;
6635             l_isQualified := 'N';
6636             return l_isQualified;
6637         end if;
6638     end if;
6639 
6640     if l_total_budget_req = 'Y' then
6641         if (P_Sales_lead_rec.BUDGET_AMOUNT is null) or
6642            (p_sales_lead_rec.BUDGET_AMOUNT = FND_API.G_MISS_NUM) then
6643             IF (AS_DEBUG_LOW_ON) THEN
6644 
6645             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6646                                          'Qualification - BUDGET_AMOUNT');
6647             END IF;
6648             l_isQualified := 'N';
6649             return l_isQualified;
6650         end if;
6651     end if;
6652 
6653     if l_contact_phone_req = 'Y' then
6654         if (p_phone_id is null) or
6655            (p_phone_id = FND_API.G_MISS_NUM) then
6656             IF (AS_DEBUG_LOW_ON) THEN
6657 
6658             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6659                                          'Qualification - p_phone_id');
6660             END IF;
6661             l_isQualified := 'N';
6662             return l_isQualified;
6663         end if;
6664     end if;
6665 
6666     -- change this to make sure contact role from as_sales_leads_contacts table is used
6667     if l_contact_role_req = 'Y' then
6668         if (p_contact_role_code is null) or
6669            (p_contact_role_code = FND_API.G_MISS_CHAR) then
6670             IF (AS_DEBUG_LOW_ON) THEN
6671 
6672             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6673                                          'Qualification - CONTACT_ROLE_CODE');
6674             END IF;
6675             l_isQualified := 'N';
6676             return l_isQualified;
6677         end if;
6678     end if;
6679 
6680     if l_budget_status_req = 'Y' then
6681         if (P_Sales_lead_rec.BUDGET_STATUS_CODE is null) or
6682            (p_sales_lead_rec.BUDGET_STATUS_CODE = FND_API.G_MISS_CHAR) then
6683             IF (AS_DEBUG_LOW_ON) THEN
6684 
6685             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6686                                          'Qualification - BUDGET_STATUS_CODE');
6687             END IF;
6688             l_isQualified := 'N';
6689             return l_isQualified;
6690         end if;
6691     end if;
6692 
6693     if l_campaign_code_req = 'Y' then
6694         if (P_Sales_lead_rec.SOURCE_PROMOTION_ID is null) or
6695            (p_sales_lead_rec.SOURCE_PROMOTION_ID = FND_API.G_MISS_NUM) then
6696             IF (AS_DEBUG_LOW_ON) THEN
6697 
6698             AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6699                                          'Qualification - SOURCE_PROMOTION_ID');
6700             END IF;
6701             l_isQualified := 'N';
6702             return l_isQualified;
6703         end if;
6704     end if;
6705 
6706     -- if we get this far we're qualified!
6707     return l_isQualified;
6708 
6709       IF (AS_DEBUG_LOW_ON) THEN
6710 
6711 
6712 
6713       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6714                                    'PVT: ' || l_api_name || ' End');
6715 
6716       END IF;
6717 
6718 END IS_LEAD_QUALIFIED;
6719 
6720 
6721 */
6722 
6723 END AS_SALES_LEADS_PVT;