DBA Data[Home] [Help]

PACKAGE BODY: APPS.AS_OPP_HEADER_PVT

Source


1 PACKAGE BODY AS_OPP_HEADER_PVT as
2 /* $Header: asxvldhb.pls 120.10.12020000.2 2013/01/25 05:51:25 snsarava ship $ */
3 -- Start of Comments
4 -- Package name     : AS_OPP_HEADER_PVT
5 -- Purpose          :
6 -- History          :
7 --    06-30-00 XDING  Created by using API Generator
8 --    06-30-00 FFANG  Modified it as compile-able
9 --    07-27-00 FFANG  1. Add item level validation procedures
10 --                    2. Add record level validation procedures
11 --                    3. Add security checking
12 --                    4. Modifiy error messages
13 --    08-01-00 FFANG  Add: create notes in update_opp_header
14 --    08-02-00 FFANG  1. Remove lead_number validation
15 --                    2. pass in g_miss_char for lead_number when calling
16 --                       update_row
17 --    08-14-00 FFANG  Call as_access_pub.create_salesteam in create_opp_header
18 --    08-15-00 FFANG  CLOSE_REASON_TYPE -> CLOSE_REASON
19 --    08-18-00 FFANG  Add: Validate_BudgetAmt_Currency
20 --    08-21-00 FFANG  Add: set default currency code
21 --    08-22-00 FFANG  Remove: Validate_Status_DecisionDate
22 --    08-23-00 FFANG  Add Set_opp_default_values to update_opp_header
23 --    08-24-00 FFANG  Modify OTHERS exception hanlder calling arguments.
24 --    08-30-00 FFANG  Use AS_SF_PTR_V instead of pv_partners_v when validating
25 --                    incumbent_partner_party_id and
26 --                    incumbent_partner_resource_id
27 --    09-08-00 FFANG  For bug 1397389, checking profile
28 --                    AS_CUSTOMER_ADDRESS_REQUIRED to see if address_id is
29 --                    mandatory or not
30 --    09-11-00 FFANG  For bug 1401095, create_opp_header add a parameter:
31 --                    p_salesgroup_id to accept sales group id for creating
32 --                    sales team.
33 --    09-12-00 FFANG  For bug 1403865, using start_date_active and
34 --                    end_date_active instead of enabled_flag on validating
35 --                    sales_stage_id, channel_code, currency_code, and
36 --                    win_probability
37 --    09-12-00 FFANG  For bug 1402449, validate whether description is NULL
38 --    09-14-00 FFANG  For bug 1407007,
39 --                    1. add default value ('TAP') to auto_assignment_type
40 --                       if it is NULL or G_MISS_CHAR (when creating)
41 --                    2. add parameter p_mode to Set_opp_default_values to
42 --                       tell if calling by create or update
43 --    01-11-01 SOLIN  For bug 1554330,
44 --                    Add freeze_flag in as_leads_all and do relevant change.
45 --    03-sep-03 NKAMBLE Validate_DecisionDate procedure added as an enhancement# 3125485
46 --    12-sep-03 NKAMBLE FOR Bug#3133993, changed VALIDATE_SOURCE_PROMOTION_ID procedure cursor
47 --                        c_source_promotion_id_exists
48 -- NOTE             :
49 -- End of Comments
50 --
51 
52 
53 G_PKG_NAME CONSTANT VARCHAR2(30):= 'AS_OPP_HEADER_PVT';
54 G_FILE_NAME CONSTANT VARCHAR2(12) := 'asxvldhb.pls';
55 
56 FUNCTION Is_Employee ( p_salesforce_id IN NUMBER) return boolean IS
57 
58 CURSOR category IS
59 	select category
60 	from jtf_rs_resource_extns
61 	where resource_id = p_salesForce_id;
62 
63 l_category 	JTF_RS_RESOURCE_EXTNS.Category%Type;
64 BEGIN
65 	open category;
66 	fetch category into l_category;
67 	close category;
68 
69 	IF nvl(l_category, 'PARTNER') = 'EMPLOYEE' THEN
70 	  return TRUE;
71 	ELSE
72 	  return FALSE;
73 	END IF;
74 EXCEPTION
75 	WHEN OTHERS THEN
76 	  return FALSE;
77 END Is_Employee;
78 
79 
80 -- ffang 091400, Add p_mode and checking g_miss_xxx
81 PROCEDURE Set_opp_default_values (
82     p_mode                IN       VARCHAR2,
83     p_opp_rec             IN       AS_OPPORTUNITY_PUB.Header_Rec_Type,
84     x_opp_rec             OUT NOCOPY      AS_OPPORTUNITY_PUB.Header_Rec_Type
85     )
86 
87  IS
88    l_opp_rec    AS_OPPORTUNITY_PUB.Header_Rec_Type := p_opp_rec;
89 
90 BEGIN
91      IF nvl(fnd_profile.value('AS_ACTIVATE_SALES_INTEROP'), 'N') <> 'Y'  THEN -- Added for ASNB
92        If (l_opp_rec.sales_stage_id IS NULL) or
93           (l_opp_rec.sales_stage_id = FND_API.G_MISS_NUM
94            and p_mode = AS_UTILITY_PVT.G_CREATE)
95        THEN
96           l_opp_rec.sales_stage_id :=
97                to_number(FND_PROFILE.VALUE ('AS_OPP_SALES_STAGE'));
98        End If;
99      END IF;
100 
101      If (l_opp_rec.win_probability IS NULL) or
102         (l_opp_rec.win_probability = FND_API.G_MISS_NUM
103          and p_mode = AS_UTILITY_PVT.G_CREATE)
104      THEN
105         l_opp_rec.win_probability :=
106              to_number(FND_PROFILE.VALUE ('AS_OPP_WIN_PROBABILITY'));
107      End If;
108 
109      If (l_opp_rec.channel_code IS NULL) or
110         (l_opp_rec.channel_code = FND_API.G_MISS_CHAR
111          and p_mode = AS_UTILITY_PVT.G_CREATE)
112      THEN
113         l_opp_rec.channel_code := FND_PROFILE.VALUE ('AS_OPP_SALES_CHANNEL');
114      End If;
115 
116      If (l_opp_rec.status_code IS NULL) or
117         (l_opp_rec.status_code = FND_API.G_MISS_CHAR
118          and p_mode = AS_UTILITY_PVT.G_CREATE)
119      THEN
120         l_opp_rec.status_code := FND_PROFILE.VALUE ('AS_OPP_STATUS');
121      End If;
122 
123      If (l_opp_rec.decision_date IS NULL) or
124         (l_opp_rec.decision_date = FND_API.G_MISS_DATE
125          and p_mode = AS_UTILITY_PVT.G_CREATE)
126      THEN
127         l_opp_rec.decision_date :=
128              trunc(sysdate) + to_number(FND_PROFILE.VALUE('AS_OPP_CLOSING_DATE_DAYS'));
129      End If;
130 
131      If (l_opp_rec.currency_code IS NULL) or
132         (l_opp_rec.currency_code = FND_API.G_MISS_CHAR
133          and p_mode = AS_UTILITY_PVT.G_CREATE)
134      THEN
135         l_opp_rec.currency_code :=
136 				 FND_PROFILE.VALUE('JTF_PROFILE_DEFAULT_CURRENCY');
137      End If;
138 
139      -- ffang 091400 for bug 1407007
140      If (l_opp_rec.auto_assignment_type IS NULL) or
141         (l_opp_rec.auto_assignment_type = FND_API.G_MISS_CHAR
142          and p_mode = AS_UTILITY_PVT.G_CREATE)
143      THEN
144         l_opp_rec.auto_assignment_type := 'TAP';
145      End If;
146      -- end ffang 091400
147 
148      If (l_opp_rec.prm_assignment_type IS NULL) or
149         (l_opp_rec.prm_assignment_type = FND_API.G_MISS_CHAR
150          and p_mode = AS_UTILITY_PVT.G_CREATE)
151      THEN
152         l_opp_rec.prm_assignment_type := 'UNASSIGNED';
153      End If;
154 
155      -- Default delete_flag bug 1512162
156      If (l_opp_rec.deleted_flag IS NULL or
157          l_opp_rec.deleted_flag = FND_API.G_MISS_CHAR ) AND
158          p_mode = AS_UTILITY_PVT.G_CREATE
159      then
160 	l_opp_rec.deleted_flag := 'N';
161      end if;
162 
163      -- solin, default freeze_flag for bug 1554330
164      IF (l_opp_rec.freeze_flag IS NULL) or
165         (l_opp_rec.freeze_flag = FND_API.G_MISS_CHAR AND
166          p_mode = AS_UTILITY_PVT.G_CREATE)
167      THEN
168          l_opp_rec.freeze_flag := 'N';
169      END IF;
170      -- solin
171 
172      x_opp_rec := l_opp_rec;
173 
174 End Set_opp_default_values;
175 
176 
177 PROCEDURE HEADER_CREATE_NOTE(
178     p_validation_level IN  NUMBER       := FND_API.G_VALID_LEVEL_FULL,
179     p_header_rec       IN  AS_OPPORTUNITY_PUB.Header_Rec_Type,
180     p_lead_number      IN  VARCHAR2,
181     p_win_prob         IN  NUMBER,
182     p_status           IN  VARCHAR2,
183     p_sales_stage_id   IN  NUMBER,
184     p_decision_date    IN  DATE,
185     x_note_id          OUT NOCOPY NUMBER,
186     x_return_status    OUT NOCOPY VARCHAR2,
187     x_msg_count        OUT NOCOPY NUMBER,
188     x_msg_data         OUT NOCOPY VARCHAR2
189     )
190  IS
191 
192 CURSOR status_name(c_status_code VARCHAR2) IS
193 	select meaning
194 	from as_statuses_vl
195 	where STATUS_CODE = c_status_code;
196 
197 CURSOR stage_name(c_sales_stage_id NUMBER) IS
198  	SELECT name
199 	from as_sales_stages_all_vl
200 	where sales_stage_id = c_sales_stage_id;
201 
202 Note_Message            VARCHAR2(2000);
203 l_status_name		VARCHAR2(240);
204 l_old_status_name	VARCHAR2(240);
205 l_stage_name 		VARCHAR2(60);
206 l_old_stage_name	VARCHAR2(60);
207 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
208 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.HEADER_CREATE_NOTE';
209 
210  BEGIN
211       -- Initialize API return status to SUCCESS
212       x_return_status := FND_API.G_RET_STS_SUCCESS;
213 
214       --
215       -- If status has been changed; then generate a note to show the change
216       --
217       IF (p_header_rec.status_code <> p_status)
218       THEN
219    	   open status_name(p_status);
220 	   fetch status_name into l_old_status_name;
221 	   close status_name;
222 
223 	   open status_name(p_header_rec.status_code);
224 	   fetch status_name into l_status_name;
225 	   close status_name;
226 
227 
228            FND_MESSAGE.Set_Name('AS', 'AS_NOTE_OPP_STATUS_CHANGED');
229            FND_MESSAGE.Set_Token('STATUS',l_status_name , FALSE);
230            FND_MESSAGE.Set_Token('OLD_STATUS', l_old_status_name, FALSE);
231            FND_MESSAGE.Set_Token('LEAD_NUM', p_lead_number, FALSE);
232            Note_Message := FND_MESSAGE.Get;
233 
234            IF l_debug THEN
235 	           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
236                                         Note_Message);
237 	   END IF;
238 
239            JTF_NOTES_PUB.Create_note (
240                p_api_version          =>  1.0,
241                p_init_msg_list        =>  FND_API.G_FALSE,
242                p_commit               =>  FND_API.G_FALSE,
243                p_validation_level     =>  p_validation_level,
244                x_return_status        =>  x_return_status,
245                x_msg_count            =>  x_msg_count,
246                x_msg_data             =>  x_msg_data,
247                p_source_object_id     =>  p_header_rec.lead_id,
248                p_source_object_code   =>  'OPPORTUNITY',
249                p_notes                =>  Note_Message,
250                p_note_status          =>  'E',
251                p_note_type	      =>  'AS_SYSTEM',
252                p_entered_by           =>  FND_GLOBAL.USER_ID,
253                p_entered_date         =>  SYSDATE,
254                x_jtf_note_id          =>  x_note_id,
255                p_last_update_date     =>  SYSDATE,
256                p_last_updated_by      =>  FND_GLOBAL.USER_ID,
257                p_creation_date        =>  SYSDATE,
258                p_created_by           =>  FND_GLOBAL.USER_ID,
259                p_last_update_login    =>  FND_GLOBAL.LOGIN_ID
260            );
261       END IF;
262 
263       --
264       -- If sales stage has been changed; then generate a note for it.
265       --
266       IF (p_header_rec.sales_stage_id <> p_sales_stage_id)
267       THEN
268 
269 	   OPEN stage_name(p_header_rec.sales_stage_id);
270 	   fetch stage_name into l_stage_name;
271 	   close stage_name;
272 
273        	   open stage_name(p_sales_stage_id);
274 	   fetch stage_name into l_old_stage_name;
275 	   close stage_name;
276 
277            FND_MESSAGE.Set_Name('AS', 'AS_NOTE_OPP_STAGE_CHANGED');
278            FND_MESSAGE.Set_Token('STAGE',l_stage_name , FALSE);
279            FND_MESSAGE.Set_Token('OLD_STAGE', l_old_stage_name, FALSE);
280            FND_MESSAGE.Set_Token('LEAD_NUM', p_lead_number, FALSE);
281            Note_Message := FND_MESSAGE.Get;
282 
283            IF l_debug THEN
284            AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
285                                         Note_Message);
286 	   END IF;
287 
288            JTF_NOTES_PUB.Create_note (
289                p_api_version          =>  1.0,
290                p_init_msg_list        =>  FND_API.G_FALSE,
291                p_commit               =>  FND_API.G_FALSE,
292                p_validation_level     =>  p_validation_level,
293                x_return_status        =>  x_return_status,
294                x_msg_count            =>  x_msg_count,
295                x_msg_data             =>  x_msg_data,
296                p_source_object_id     =>  p_header_rec.lead_id,
297                p_source_object_code   =>  'OPPORTUNITY',
298                p_notes                =>  Note_Message,
299                p_note_status          =>  'E',
300                p_note_type	      =>  'AS_SYSTEM',
301                p_entered_by           =>  FND_GLOBAL.USER_ID,
302                p_entered_date         =>  SYSDATE,
303                x_jtf_note_id          =>  x_note_id,
304                p_last_update_date     =>  SYSDATE,
305                p_last_updated_by      =>  FND_GLOBAL.USER_ID,
306                p_creation_date        =>  SYSDATE,
307                p_created_by           =>  FND_GLOBAL.USER_ID,
308                p_last_update_login    =>  FND_GLOBAL.LOGIN_ID
309            );
310       END IF;
311 
312       --
313       -- If win probability has been changed; then generate a note for it.
314       --
315       IF (p_header_rec.win_probability <> p_win_prob)
316       THEN
317            FND_MESSAGE.Set_Name('AS', 'AS_NOTE_OPP_PROB_CHANGED');
318            FND_MESSAGE.Set_Token('PROBABILITY', p_header_rec.win_probability,
319                                  FALSE);
320            FND_MESSAGE.Set_Token('OLD_PROBABILITY', p_win_prob, FALSE);
321            FND_MESSAGE.Set_Token('LEAD_NUM', p_lead_number, FALSE);
322            Note_Message := FND_MESSAGE.Get;
323 
324            IF l_debug THEN
325            AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
326                                         Note_Message);
327 	   END IF;
328 
329 
330            JTF_NOTES_PUB.Create_note (
331                p_api_version          =>  1.0,
332                p_init_msg_list        =>  FND_API.G_FALSE,
333                p_commit               =>  FND_API.G_FALSE,
334                p_validation_level     =>  p_validation_level,
335                x_return_status        =>  x_return_status,
336                x_msg_count            =>  x_msg_count,
337                x_msg_data             =>  x_msg_data,
338                p_source_object_id     =>  p_header_rec.lead_id,
339                p_source_object_code   =>  'OPPORTUNITY',
340                p_notes                =>  Note_Message,
341                p_note_status          =>  'E',
342                p_note_type	      =>  'AS_SYSTEM',
343                p_entered_by           =>  FND_GLOBAL.USER_ID,
344                p_entered_date         =>  SYSDATE,
345                x_jtf_note_id          =>  x_note_id,
346                p_last_update_date     =>  SYSDATE,
347                p_last_updated_by      =>  FND_GLOBAL.USER_ID,
348                p_creation_date        =>  SYSDATE,
349                p_created_by           =>  FND_GLOBAL.USER_ID,
350                p_last_update_login    =>  FND_GLOBAL.LOGIN_ID
351            );
352       END IF;
353 
354       --
355       -- If decision date has been changed; then generate a note for it.
356       --
357       IF (p_header_rec.decision_date <> p_decision_date)
358       THEN
359            FND_MESSAGE.Set_Name('AS', 'AS_NOTE_OPP_DATE_CHANGED');
360            FND_MESSAGE.Set_Token('DATE', p_header_rec.decision_date, FALSE);
361            FND_MESSAGE.Set_Token('OLD_DATE', p_decision_date, FALSE);
362            FND_MESSAGE.Set_Token('LEAD_NUM', p_lead_number, FALSE);
363            Note_Message := FND_MESSAGE.Get;
364 
365            IF l_debug THEN
366            AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
367                                         Note_Message);
368 	   END IF;
369 
370            JTF_NOTES_PUB.Create_note (
371                p_api_version          =>  1.0,
372                p_init_msg_list        =>  FND_API.G_FALSE,
373                p_commit               =>  FND_API.G_FALSE,
374                p_validation_level     =>  p_validation_level,
375                x_return_status        =>  x_return_status,
376                x_msg_count            =>  x_msg_count,
377                x_msg_data             =>  x_msg_data,
378                p_source_object_id     =>  p_header_rec.lead_id,
379                p_source_object_code   =>  'OPPORTUNITY',
380                p_notes                =>  Note_Message,
381                p_note_status          =>  'E',
382                p_note_type	      =>  'AS_SYSTEM',
383                p_entered_by           =>  FND_GLOBAL.USER_ID,
384                p_entered_date         =>  SYSDATE,
385                x_jtf_note_id          =>  x_note_id,
386                p_last_update_date     =>  SYSDATE,
387                p_last_updated_by      =>  FND_GLOBAL.USER_ID,
388                p_creation_date        =>  SYSDATE,
389                p_created_by           =>  FND_GLOBAL.USER_ID,
390                p_last_update_login    =>  FND_GLOBAL.LOGIN_ID
391            );
392       END IF;
393 
394 END HEADER_CREATE_NOTE;
395 
396 -- Local procedure
397 
398 PROCEDURE Recreate_tasks(
399     p_LEAD_ID			IN  NUMBER,
400     p_RESOURCE_ID		IN  NUMBER,
401     p_OLD_SALES_METHODOLOGY_ID	IN  NUMBER,
402     p_OLD_SALES_STAGE_ID	IN  NUMBER,
403     p_SALES_METHODOLOGY_ID	IN  NUMBER,
404     p_SALES_STAGE_ID		IN  NUMBER,
405     x_return_status 		OUT NOCOPY VARCHAR2,
406     x_msg_count                 OUT NOCOPY NUMBER,
407     x_msg_data                  OUT NOCOPY VARCHAR2,
408     X_Warning_Message		OUT NOCOPY VARCHAR2 )
409 IS
410 
411 CURSOR template ( c_sales_methodology_id number, c_sales_stage_id number) IS
412     select TASK_TEMPLATE_GROUP_ID
413     from as_sales_meth_stage_map
414     where SALES_METHODOLOGY_ID = c_sales_methodology_id
415     and SALES_STAGE_ID = c_sales_stage_id;
416 
417 l_tmplate_group_id NUMBER;
418 
419 l_return_status varchar2(10);
420 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
421 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Recreate_tasks';
422 
423 BEGIN
424       x_return_status := FND_API.G_RET_STS_SUCCESS;
425       X_Warning_Message	:= NULL;
426 
427       IF l_debug THEN
428       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
429             'LEAD_ID/RS_ID: '||p_LEAD_ID || ',' ||p_RESOURCE_ID );
430       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
431             'OLD_SM/SS_ID: '|| p_OLD_SALES_METHODOLOGY_ID||',' || p_OLD_SALES_STAGE_ID);
432       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
433             'SM/SS_ID: ' || p_SALES_METHODOLOGY_ID ||',' || p_SALES_STAGE_ID  );
434       END IF;
435 
436       IF (p_SALES_METHODOLOGY_ID IS NOT NULL) AND
437 	 (p_SALES_METHODOLOGY_ID <> FND_API.G_MISS_NUM ) THEN
438 
439 	  IF ((nvl(p_OLD_SALES_METHODOLOGY_ID, -99) <> p_SALES_METHODOLOGY_ID) OR
440               (nvl(p_OLD_SALES_STAGE_ID, -99) <> p_SALES_STAGE_ID) ) AND
441 	     nvl(FND_PROFILE.VALUE ('AS_SM_CREATE_TASKS'), 'N') = 'Y' THEN
442 
443 		open template(p_sales_methodology_id, p_sales_stage_id);
444 	  	fetch template into l_tmplate_group_id ;
445 		close template;
446 
447 		IF(l_tmplate_group_id IS NOT NULL) THEN
448       			IF l_debug THEN
449       			AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
450                 	               'Lunching workflow for autotask creation');
451 			END IF;
452 	        -- lunch workflow
453 		as_sales_meth_wf.start_methodology(
454  			P_SOURCE_OBJECT_TYPE_CODE 	=> 'OPPORTUNITY',
455  			P_SOURCE_OBJECT_ID		=> p_lead_id,
456  			P_SOURCE_OBJECT_NAME           	=> to_char(p_lead_id),
457  			P_OWNER_ID                     	=> p_resource_id,
458  			P_OWNER_TYPE_CODE              	=> 'RS_EMPLOYEE',
459  			P_OBJECT_TYPE_CODE             	=> 'SALES_STAGE',
460  			P_CURRENT_STAGE_ID             	=> p_OLD_SALES_STAGE_ID,
461  			P_NEXT_STAGE_ID                	=> p_SALES_STAGE_ID,
462  			P_TEMPLATE_GROUP_ID            	=> to_char(l_tmplate_group_id),
463  			ITEM_TYPE                      	=> 'SAL_MET3',
464  			WORKFLOW_PROCESS               	=> 'SAL_MET3',
465  			X_RETURN_STATUS                	=> l_return_status,
466                   	X_Msg_Count                     => X_Msg_Count,
467                 	X_Msg_Data                      => X_Msg_Data,
468 			X_Warning_Message		=> X_Warning_Message);
469 
470 		END IF;
471 
472           END IF;
473       END IF;
474 
475       if (l_return_status is not null) then
476           x_return_status := substr(l_return_status, 1, 1);
477       end if;
478 
479       IF l_debug THEN
480       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'x_return_status: ' || x_return_status );
481       END IF;
482 
483 EXCEPTION
484       WHEN OTHERS
485       THEN
486         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
487         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
488 
489 END Recreate_tasks;
490 
491 
492 PROCEDURE Update_Competitor_Products(
493     p_LEAD_ID			IN  NUMBER,
494     p_STATUS_CODE		IN VARCHAR2,
495     x_return_status 		OUT NOCOPY VARCHAR2)
496 IS
497 
498 CURSOR c_WIN_LOSS_INDICATOR(c_STATUS_CODE VARCHAR2) IS
499 	select WIN_LOSS_INDICATOR
500 	from as_statuses_b
501 	where status_code = c_STATUS_CODE;
502 
503 l_indicator  varchar2(1);
504 
505 BEGIN
506       x_return_status := FND_API.G_RET_STS_SUCCESS;
507 
508       open c_WIN_LOSS_INDICATOR( p_STATUS_CODE);
509       fetch c_WIN_LOSS_INDICATOR into l_indicator;
510       close c_WIN_LOSS_INDICATOR;
511 
512       IF ( nvl(l_indicator, 'L') = 'W') THEN
513 	  UPDATE AS_LEAD_COMP_PRODUCTS
514 	  SET object_version_number =  nvl(object_version_number,0) + 1, WIN_LOSS_STATUS = 'LOST'
515 	  WHERE LEAD_ID = p_LEAD_ID;
516       END IF;
517 
518 
519 EXCEPTION
520       WHEN no_data_found THEN NULL;
521 
522       WHEN OTHERS THEN
523         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
524         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
525 
526 END Update_Competitor_Products;
527 
528 
529 /*
530 
531 PROCEDURE Create_lead_competitor(
532     p_api_version_number    IN     NUMBER,
533     p_init_msg_list         IN     VARCHAR2 := FND_API.G_FALSE,
534     p_commit                IN     VARCHAR2 := FND_API.G_FALSE,
535     p_validation_level      IN     NUMBER   := 0,
536     p_check_access_flag     IN 	   VARCHAR2,
537     p_admin_flag	    IN 	   VARCHAR2,
538     p_admin_group_id	    IN	   NUMBER,
539     p_identity_salesforce_id IN    NUMBER   := NULL,
540     p_partner_cont_party_id   IN     NUMBER,
541     p_profile_tbl	    IN     AS_UTILITY_PUB.Profile_Tbl_Type
542 				   :=AS_UTILITY_PUB.G_MISS_PROFILE_TBL,
543     p_LEAD_ID		    IN     NUMBER,
544     p_COMPETITOR_ID	    IN     NUMBER,
545     x_return_status         OUT NOCOPY    VARCHAR2,
546     x_msg_count             OUT NOCOPY    NUMBER,
547     x_msg_data              OUT NOCOPY    VARCHAR2)
548 IS
549 
550 CURSOR  competitor_exist IS
551 	select 'Y'
552 	from as_lead_competitors
553 	where lead_id = p_lead_id
554 	and competitor_id = p_competitor_id;
555 
556 l_competitor_exist  VARCHAR2(1);
557 
558 l_competitor_rec	AS_OPPORTUNITY_PUB.Competitor_rec_Type;
559 l_competitor_tbl        AS_OPPORTUNITY_PUB.Competitor_tbl_Type;
560 x_competitor_out_tbl    AS_OPPORTUNITY_PUB.Competitor_Out_Tbl_Type;
561 
562 BEGIN
563 
564     -- Initialize API return status to SUCCESS
565     x_return_status := FND_API.G_RET_STS_SUCCESS;
566 
567     open competitor_exist;
568     fetch competitor_exist into l_competitor_exist;
569     close competitor_exist;
570     IF l_competitor_exist is null THEN
571 
572         l_Competitor_rec.last_update_date 	:= SYSDATE;
573         l_Competitor_rec.last_updated_by        := FND_GLOBAL.USER_ID;
574         l_Competitor_rec.creation_Date 	        := SYSDATE;
575         l_Competitor_rec.created_by 		:= FND_GLOBAL.USER_ID;
576         l_Competitor_rec.last_update_login 	:= FND_GLOBAL.CONC_LOGIN_ID;
577 	l_Competitor_rec.LEAD_ID                := p_lead_id;
578 	l_Competitor_rec.COMPETITOR_ID          := p_competitor_id;
579 
580 	l_competitor_tbl(1) := l_Competitor_rec;
581 
582         AS_OPP_competitor_PVT.Create_competitors(
583         	P_Api_Version_Number         => 2.0,
584         	P_Init_Msg_List              => FND_API.G_FALSE,
585         	P_Commit                     => p_commit,
586         	P_Validation_Level           => P_Validation_Level,
587         	P_Check_Access_Flag          => p_check_access_flag,
588         	P_Admin_Flag                 => P_Admin_Flag,
589         	P_Admin_Group_Id             => P_Admin_Group_Id,
590         	P_Identity_Salesforce_Id     => P_Identity_Salesforce_Id,
591         	P_Partner_Cont_Party_Id	     => p_partner_cont_party_id,
592         	P_Profile_Tbl                => P_Profile_tbl,
593         	P_Competitor_Tbl             => l_competitor_tbl,
594         	X_Competitor_Out_Tbl         => x_competitor_out_tbl,
595         	X_Return_Status              => x_return_status,
596         	X_Msg_Count                  => x_msg_count,
597         	X_Msg_Data                   => x_msg_data);
598     END IF;
599 
600 END Create_lead_competitor;
601 */
602 
603 PROCEDURE Set_Owner( p_access_id NUMBER)
604 IS
605 
606 CURSOR c_acc IS
607 	select lead_id, salesforce_id, sales_group_id
608 	from as_accesses_all
609 	where access_id = p_access_id;
610 
611 BEGIN
612     FOR acr IN c_acc LOOP
613 
614 	UPDATE AS_ACCESSES_ALL
615 	SET object_version_number =  nvl(object_version_number,0) + 1, OWNER_FLAG = 'Y'
616 	WHERE ACCESS_ID = p_access_id;
617 
618 	UPDATE AS_LEADS_ALL
619 	SET object_version_number =  nvl(object_version_number,0) + 1, owner_salesforce_id = acr.salesforce_id,
620 	    owner_sales_group_id = acr.sales_group_id
621 	WHERE lead_id = acr.lead_id;
622 
623     END LOOP;
624 
625 END Set_Owner;
626 
627 
628 
629 
630 PROCEDURE Create_opp_header(
631     P_Api_Version_Number       IN   NUMBER,
632     P_Init_Msg_List            IN   VARCHAR2     := FND_API.G_FALSE,
633     P_Commit                   IN   VARCHAR2     := FND_API.G_FALSE,
634     p_validation_level         IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
635     P_Check_Access_Flag        IN   VARCHAR2     := FND_API.G_FALSE,
636     P_Admin_Flag               IN   VARCHAR2     := FND_API.G_FALSE,
637     P_Admin_Group_Id           IN   NUMBER,
638     P_Identity_Salesforce_Id   IN   NUMBER       := NULL,
639     P_salesgroup_id            IN   NUMBER       := NULL,
640     P_profile_tbl              IN   AS_UTILITY_PUB.PROFILE_TBL_TYPE,
641     P_Partner_Cont_Party_id    IN   NUMBER       := FND_API.G_MISS_NUM,
642     P_Header_Rec               IN   AS_OPPORTUNITY_PUB.Header_Rec_Type
643                                       := AS_OPPORTUNITY_PUB.G_MISS_Header_REC,
644     X_LEAD_ID                  OUT NOCOPY  NUMBER,
645     X_Return_Status            OUT NOCOPY  VARCHAR2,
646     X_Msg_Count                OUT NOCOPY  NUMBER,
647     X_Msg_Data                 OUT NOCOPY  VARCHAR2
648     )
649 
650  IS
651 l_api_name                CONSTANT VARCHAR2(30) := 'Create_opp_header';
652 l_api_version_number      CONSTANT NUMBER   := 2.0;
653 l_return_status_full      VARCHAR2(1);
654 l_identity_sales_member_rec AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
655 l_LEAD_ID                 NUMBER;
656 l_header_rec              AS_OPPORTUNITY_PUB.Header_Rec_Type
657 						:= P_Header_Rec;
658 l_header_rec1             AS_OPPORTUNITY_PUB.Header_Rec_Type;
659 
660 l_access_profile_rec      AS_ACCESS_PUB.ACCESS_PROFILE_REC_TYPE;
661 l_access_flag             VARCHAR2(1);
662 l_access_id               NUMBER;
663 l_Sales_Team_Rec          AS_ACCESS_PUB.Sales_Team_Rec_Type
664                               := AS_ACCESS_PUB.G_MISS_SALES_TEAM_REC;
665 
666 l_old_sales_methodology_id NUMBER := null;
667 l_old_sales_stage_id NUMBER := null;
668 
669 l_is_owner	VARCHAR2(1) := 'N';
670 
671 l_warning_msg 		VARCHAR2(2000) := '';
672 l_winprob_warning_msg 	VARCHAR2(2000) := '';
673 
674 l_default_address_profile	VARCHAR2(1) := FND_PROFILE.VALUE ('AS_OPP_DEFAULT_ADDRESS');
675 
676 CURSOR get_person_id_csr(c_salesforce_id NUMBER) is
677      select employee_person_id
678      from as_salesforce_v
679      where salesforce_id = c_salesforce_id;
680 
681 /* ffang 091100 for bug 1401095
682 CURSOR c_salesgroup_id(p_resource_id number) IS
683      SELECT group_id
684      FROM JTF_RS_GROUP_MEMBERS
685      WHERE resource_id = p_resource_id
686      ORDER BY GROUP_ID;
687 l_salesgroup_id Number:=Null;
688 */
689 l_salesgroup_id Number := p_salesgroup_id;
690 l_person_id 		NUMBER;
691 
692 
693 CURSOR primary_address ( p_customer_id NUMBER) IS
694 	select party_site_id
695 	from hz_party_sites
696 	where party_id = p_customer_id
697 	and IDENTIFYING_ADDRESS_FLAG = 'Y';
698 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
699 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Create_opp_header';
700 
701  BEGIN
702       -- Standard Start of API savepoint
703       SAVEPOINT CREATE_OPP_HEADER_PVT;
704 
705       -- Standard call to check for call compatibility.
706       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
707                          	             p_api_version_number,
708                                            l_api_name,
709                                            G_PKG_NAME)
710       THEN
711           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
712       END IF;
713 
714 
715       -- Initialize message list if p_init_msg_list is set to TRUE.
716       IF FND_API.to_Boolean( p_init_msg_list )
717       THEN
718           FND_MSG_PUB.initialize;
719       END IF;
720 
721 
722       -- Debug Message
723       IF l_debug THEN
724       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
725                                    'Private API: ' || l_api_name || ' start');
726       END IF;
727 
728 
729       -- Initialize API return status to SUCCESS
730       x_return_status := FND_API.G_RET_STS_SUCCESS;
731 
732       --
733       -- API body
734       --
735 
736 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
737 /*
738       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y',
739       -- callout procedure is invoked for customization purpose
740       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
741       THEN
742           AS_CALLOUT_PKG.Create_opp_header_BC(
743                   p_api_version_number   =>  2.0,
744                   p_init_msg_list        =>  FND_API.G_FALSE,
745                   p_commit               =>  FND_API.G_FALSE,
746                   p_validation_level     =>  p_validation_level,
747                   P_Header_Rec           =>  l_Header_Rec,
748           -- Hint: Add detail tables as parameter lists if it's master-detail
749           -- relationship.
750                   x_return_status        =>  x_return_status,
751                   x_msg_count            =>  x_msg_count,
752                   x_msg_data             =>  x_msg_data);
753       END IF;
754 */
755 
756       -- ******************************************************************
757       -- Validate Environment
758       -- ******************************************************************
759       IF FND_GLOBAL.User_Id IS NULL
760       THEN
761           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
762           THEN
763               -- FND_MESSAGE.Set_Name(' + appShortName +',
764               --                   'UT_CANNOT_GET_PROFILE_VALUE');
765               -- FND_MESSAGE.Set_Token('PROFILE', 'USER_ID', FALSE);
766               -- FND_MSG_PUB.ADD;
767 
768               AS_UTILITY_PVT.Set_Message(
769                   p_module        => l_module,
770                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
771                   p_msg_name      => 'UT_CANNOT_GET_PROFILE_VALUE',
772                   p_token1        => 'PROFILE',
773                   p_token1_value  => 'USER_ID');
774 
775           END IF;
776           RAISE FND_API.G_EXC_ERROR;
777       END IF;
778 
779       IF l_debug THEN
780       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
781                                    'Before Get_CurrentUser '|| x_return_status);
782       END IF;
783 
784       IF (p_validation_level = fnd_api.g_valid_level_full)
785       THEN
786           AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
787               p_api_version_number => 2.0
788              ,p_init_msg_list      => p_init_msg_list
789              ,p_salesforce_id      => P_Identity_Salesforce_Id
790              ,p_admin_group_id     => p_admin_group_id
791              ,x_return_status      => x_return_status
792              ,x_msg_count          => x_msg_count
793              ,x_msg_data           => x_msg_data
794              ,x_sales_member_rec   => l_identity_sales_member_rec);
795       END IF;
796 
797       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
798           RAISE FND_API.G_EXC_ERROR;
799       END IF;
800 
801       IF l_debug THEN
802 	      AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'After Get_CurrentUser '|| x_return_status);
803       END IF;
804 
805       -- Set default value to decision_date, channel_code, status_code,
806       -- sales_stage_id, win_probability, freeze_flag, and currency_code
807       -- as profile values.
808       If (l_Header_Rec.decision_date IS NULL) or
809          (l_Header_Rec.decision_date = FND_API.G_MISS_DATE) or
810          (l_Header_Rec.channel_code IS NULL) or
811          (l_Header_Rec.channel_code = FND_API.G_MISS_CHAR) or
812          (l_Header_Rec.STATUS_CODE IS NULL) or
813          (l_Header_Rec.STATUS_CODE = FND_API.G_MISS_CHAR) or
814          (l_Header_Rec.sales_stage_id IS NULL) or
815          (l_Header_Rec.sales_stage_id = FND_API.G_MISS_NUM) or
816          (l_Header_Rec.win_probability IS NULL) or
817          (l_Header_Rec.win_probability = FND_API.G_MISS_NUM) or
818          (l_Header_Rec.currency_code IS NULL) or
819          (l_Header_Rec.currency_code = FND_API.G_MISS_CHAR) or
820          (l_Header_Rec.deleted_flag IS NULL) or
821          (l_Header_Rec.deleted_flag = FND_API.G_MISS_CHAR) or
822          (l_Header_Rec.auto_assignment_type IS NULL) or  -- acng, bug 2044908
823          (l_Header_Rec.auto_assignment_type = FND_API.G_MISS_CHAR) or
824          (l_Header_Rec.prm_assignment_type IS NULL) or   -- acng, bug 2044908
825          (l_Header_Rec.prm_assignment_type = FND_API.G_MISS_CHAR) or
826          (l_Header_Rec.freeze_flag IS NULL) or            -- solin, bug 1554330
827          (l_Header_Rec.freeze_flag = FND_API.G_MISS_CHAR) -- solin, bug 1554330
828       THEN
829           IF l_debug THEN
830           	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
831                                        	'Calling Set_opp_default_values');
832 	  END IF;
833 
834 	  l_header_rec1 := l_header_rec;
835           Set_opp_default_values(
836                 p_mode       => AS_UTILITY_PVT.G_CREATE,
837                 p_opp_rec    => l_Header_Rec1,
838                 x_opp_rec    => l_Header_Rec );
839 
840       End If;
841 
842       -- Deafult the customer address to primary address if necessary
843       IF nvl(l_default_address_profile, 'N') = 'Y' AND
844          ((l_Header_Rec.address_id IS NULL) OR
845           (l_Header_Rec.address_id = FND_API.G_MISS_NUM))
846       THEN
847 	  open primary_address(l_Header_Rec.customer_id );
848 	  fetch  primary_address into l_Header_Rec.address_id;
849 	  close  primary_address;
850 
851 	  If (l_Header_Rec.address_id IS NULL OR
852 	      l_Header_Rec.address_id = FND_API.G_MISS_NUM )
853 	  THEN
854 	      IF l_debug THEN
855 	      AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
856                    'No primary address for customer');
857 	      END IF;
858 
859 	  END IF;
860       END IF;
861 
862       -- Trunc desidion date
863       l_Header_Rec.decision_date := trunc(l_Header_Rec.decision_date);
864 
865       -- Debug message
866       IF l_debug THEN
867       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
868                                    'Private API: Validate_opp_header');
869       END IF;
870 
871 
872       -- Invoke validation procedures
873       Validate_opp_header(
874           p_init_msg_list    => FND_API.G_FALSE,
875           p_validation_level => p_validation_level,
876           p_validation_mode  => AS_UTILITY_PVT.G_CREATE,
877           P_Header_Rec       => l_Header_Rec,
878           x_return_status    => x_return_status,
879           x_msg_count        => x_msg_count,
880           x_msg_data         => x_msg_data);
881 
882       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
883           RAISE FND_API.G_EXC_ERROR;
884       END IF;
885 
886       IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
887           l_winprob_warning_msg := x_msg_data;
888       END IF;
889 
890 
891 
892 
893       -- Access checking
894       IF p_check_access_flag = 'Y'
895       THEN
896           -- Call Get_Access_Profiles to get access_profile_rec
897           IF l_debug THEN
898           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
899                                        'Calling Get_Access_Profiles');
900 	  END IF;
901 
902           AS_OPPORTUNITY_PUB.Get_Access_Profiles(
903               p_profile_tbl         => p_profile_tbl,
904               x_access_profile_rec  => l_access_profile_rec);
905 
906           IF l_debug THEN
907           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
908                                        'Calling Has_viewCustomerAccess');
909 	  END IF;
910 
911           AS_ACCESS_PUB.Has_viewCustomerAccess(
912               p_api_version_number     => 2.0,
913               p_init_msg_list          => p_init_msg_list,
914               p_validation_level       => p_validation_level,
915               p_access_profile_rec     => l_access_profile_rec,
916               p_admin_flag             => p_admin_flag,
917               p_admin_group_id         => p_admin_group_id,
918               p_person_id              =>
919                                 l_identity_sales_member_rec.employee_person_id,
920               p_customer_id            => P_Header_Rec.customer_id,
921               p_check_access_flag      => 'Y',
922               p_identity_salesforce_id => p_identity_salesforce_id,
923               p_partner_cont_party_id  => NULL,
924               x_return_status          => x_return_status,
925               x_msg_count              => x_msg_count,
926               x_msg_data               => x_msg_data,
927               x_view_access_flag       => l_access_flag);
928 
929           IF l_access_flag <> 'Y' THEN
930               AS_UTILITY_PVT.Set_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
931                                            'API_NO_CREATE_PRIVILEGE');
932           END IF;
933 
934           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
935               RAISE FND_API.G_EXC_ERROR;
936           END IF;
937 
938 
939 
940       END IF;
941 
942 
943       -- Hint: Add corresponding Master-Detail business logic here if necessary.
944 
945       -- Debug Message
946       IF l_debug THEN
947       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
948                                    'Private API: Calling create table handler');
949       END IF;
950 
951 
952       l_LEAD_ID := l_Header_Rec.LEAD_ID;
953 
954 	 IF l_debug THEN
955 	 	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'OFFER_ID: ' || p_header_rec.OFFER_ID);
956 	 END IF;
957 
958       -- Hardcoding to NULL for R12 since it will be filled in when
959       -- Lines are created
960       l_header_rec.TOTAL_REVENUE_OPP_FORECAST_AMT := NULL;
961 
962       -- Invoke table handler(AS_LEADS_PKG.Insert_Row)
963       AS_LEADS_PKG.Insert_Row(
964           px_LEAD_ID  => l_LEAD_ID,
965           p_LAST_UPDATE_DATE  => SYSDATE,
966           p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
967           p_CREATION_DATE  => SYSDATE,
968           p_CREATED_BY  => FND_GLOBAL.USER_ID,
969           p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID,
970           p_REQUEST_ID  => l_Header_Rec.REQUEST_ID,
971           p_PROGRAM_APPLICATION_ID  => l_Header_Rec.PROGRAM_APPLICATION_ID,
972           p_PROGRAM_ID  => l_Header_Rec.PROGRAM_ID,
973           p_PROGRAM_UPDATE_DATE  => l_Header_Rec.PROGRAM_UPDATE_DATE,
974           p_LEAD_NUMBER  => l_Header_Rec.LEAD_NUMBER,
975           p_STATUS  => l_Header_Rec.STATUS_CODE,
976           p_CUSTOMER_ID  => l_Header_Rec.CUSTOMER_ID,
977           p_ADDRESS_ID  => l_Header_Rec.ADDRESS_ID,
978           p_SALES_STAGE_ID  => l_header_rec.SALES_STAGE_ID,
979           p_INITIATING_CONTACT_ID  => l_header_rec.INITIATING_CONTACT_ID,
980           p_CHANNEL_CODE  => l_header_rec.CHANNEL_CODE,
981           p_TOTAL_AMOUNT  => l_header_rec.TOTAL_AMOUNT,
982           p_CURRENCY_CODE  => l_header_rec.CURRENCY_CODE,
983           p_DECISION_DATE  => l_header_rec.DECISION_DATE,
984           p_WIN_PROBABILITY  => l_header_rec.WIN_PROBABILITY,
985           p_CLOSE_REASON  => l_header_rec.CLOSE_REASON,
986           p_CLOSE_COMPETITOR_CODE  => l_header_rec.CLOSE_COMPETITOR_CODE,
987           p_CLOSE_COMPETITOR  => l_header_rec.CLOSE_COMPETITOR,
988           p_CLOSE_COMMENT  => l_header_rec.CLOSE_COMMENT,
989           p_DESCRIPTION  => l_header_rec.DESCRIPTION,
990           p_RANK  => l_header_rec.RANK,
991           p_SOURCE_PROMOTION_ID  => l_header_rec.SOURCE_PROMOTION_ID,
992           p_END_USER_CUSTOMER_ID  => l_header_rec.END_USER_CUSTOMER_ID,
993           p_END_USER_ADDRESS_ID  => l_header_rec.END_USER_ADDRESS_ID,
994           p_OWNER_SALESFORCE_ID  => l_header_rec.OWNER_SALESFORCE_ID,
995           p_OWNER_SALES_GROUP_ID => l_header_rec.OWNER_SALES_GROUP_ID,
996           --p_OWNER_ASSIGN_DATE  => l_header_rec.OWNER_ASSIGN_DATE,
997           p_ORG_ID  => l_header_rec.ORG_ID,
998           p_NO_OPP_ALLOWED_FLAG  => l_header_rec.NO_OPP_ALLOWED_FLAG,
999           p_DELETE_ALLOWED_FLAG  => l_header_rec.DELETE_ALLOWED_FLAG,
1000           p_ATTRIBUTE_CATEGORY  => l_header_rec.ATTRIBUTE_CATEGORY,
1001           p_ATTRIBUTE1  => l_header_rec.ATTRIBUTE1,
1002           p_ATTRIBUTE2  => l_header_rec.ATTRIBUTE2,
1003           p_ATTRIBUTE3  => l_header_rec.ATTRIBUTE3,
1004           p_ATTRIBUTE4  => l_header_rec.ATTRIBUTE4,
1005           p_ATTRIBUTE5  => l_header_rec.ATTRIBUTE5,
1006           p_ATTRIBUTE6  => l_header_rec.ATTRIBUTE6,
1007           p_ATTRIBUTE7  => l_header_rec.ATTRIBUTE7,
1008           p_ATTRIBUTE8  => l_header_rec.ATTRIBUTE8,
1009           p_ATTRIBUTE9  => l_header_rec.ATTRIBUTE9,
1010           p_ATTRIBUTE10  => l_header_rec.ATTRIBUTE10,
1011           p_ATTRIBUTE11  => l_header_rec.ATTRIBUTE11,
1012           p_ATTRIBUTE12  => l_header_rec.ATTRIBUTE12,
1013           p_ATTRIBUTE13  => l_header_rec.ATTRIBUTE13,
1014           p_ATTRIBUTE14  => l_header_rec.ATTRIBUTE14,
1015           p_ATTRIBUTE15  => l_header_rec.ATTRIBUTE15,
1016           p_PARENT_PROJECT  => l_header_rec.PARENT_PROJECT,
1017           p_LEAD_SOURCE_CODE  => l_header_rec.LEAD_SOURCE_CODE,
1018           p_ORIG_SYSTEM_REFERENCE  => l_header_rec.ORIG_SYSTEM_REFERENCE,
1019           p_CLOSE_COMPETITOR_ID  => l_header_rec.CLOSE_COMPETITOR_ID,
1020           p_END_USER_CUSTOMER_NAME  => l_header_rec.END_USER_CUSTOMER_NAME,
1021           p_PRICE_LIST_ID  => l_header_rec.PRICE_LIST_ID,
1022           p_DELETED_FLAG  => l_header_rec.DELETED_FLAG,
1023           p_AUTO_ASSIGNMENT_TYPE  => l_header_rec.AUTO_ASSIGNMENT_TYPE,
1024           p_PRM_ASSIGNMENT_TYPE  => l_header_rec.PRM_ASSIGNMENT_TYPE,
1025           p_CUSTOMER_BUDGET  => l_header_rec.CUSTOMER_BUDGET,
1026           p_METHODOLOGY_CODE  => l_header_rec.METHODOLOGY_CODE,
1027           p_SALES_METHODOLOGY_ID  => l_header_rec.SALES_METHODOLOGY_ID,
1028           p_ORIGINAL_LEAD_ID  => l_header_rec.ORIGINAL_LEAD_ID,
1029           p_DECISION_TIMEFRAME_CODE  => l_header_rec.DECISION_TIMEFRAME_CODE,
1030           p_INC_PARTNER_RESOURCE_ID=>l_header_rec.INCUMBENT_PARTNER_RESOURCE_ID,
1031           p_INC_PARTNER_PARTY_ID  => l_header_rec.INCUMBENT_PARTNER_PARTY_ID,
1032           p_OFFER_ID  => l_header_rec.OFFER_ID,
1033           p_VEHICLE_RESPONSE_CODE  => l_header_rec.VEHICLE_RESPONSE_CODE,
1034           p_BUDGET_STATUS_CODE  => l_header_rec.BUDGET_STATUS_CODE,
1035           p_FOLLOWUP_DATE  => l_header_rec.FOLLOWUP_DATE,
1036           p_PRM_EXEC_SPONSOR_FLAG  => l_header_rec.PRM_EXEC_SPONSOR_FLAG,
1037           p_PRM_PRJ_LEAD_IN_PLACE_FLAG=>l_header_rec.PRM_PRJ_LEAD_IN_PLACE_FLAG,
1038           p_PRM_IND_CLASSIFICATION_CODE =>
1039                                   l_header_rec.PRM_IND_CLASSIFICATION_CODE,
1040           p_PRM_LEAD_TYPE => l_header_rec.PRM_LEAD_TYPE,
1041           p_FREEZE_FLAG => l_header_rec.FREEZE_FLAG,
1042           p_PRM_REFERRAL_CODE => l_header_rec.PRM_REFERRAL_CODE,
1043           p_TOT_REVENUE_OPP_FORECAST_AMT => l_header_rec.TOTAL_REVENUE_OPP_FORECAST_AMT); -- Added for ASNB
1044 
1045       x_LEAD_ID := l_LEAD_ID;
1046 
1047       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1048           RAISE FND_API.G_EXC_ERROR;
1049       END IF;
1050 
1051       /* ffang 091100 for bug 1401095
1052       -- Get the salesgroup_id
1053       l_salesgroup_id := null;
1054       OPEN c_salesgroup_id(P_Identity_Salesforce_Id);
1055         FETCH c_salesgroup_id INTO l_salesgroup_id;
1056       CLOSE c_salesgroup_id;
1057       */
1058 
1059       l_Sales_Team_Rec.last_update_date      := SYSDATE;
1060       l_Sales_Team_Rec.last_updated_by       := FND_GLOBAL.USER_ID;
1061       l_Sales_Team_Rec.creation_date         := SYSDATE;
1062       l_Sales_Team_Rec.created_by            := FND_GLOBAL.USER_ID;
1063       l_Sales_Team_Rec.last_update_login     := FND_GLOBAL.CONC_LOGIN_ID;
1064       l_Sales_Team_Rec.team_leader_flag      := FND_API.G_MISS_CHAR;
1065       l_Sales_Team_Rec.customer_id           := l_header_rec.Customer_Id;
1066       l_Sales_Team_Rec.address_id            := l_header_rec.Address_Id;
1067       l_Sales_Team_Rec.salesforce_id         := P_Identity_Salesforce_Id;
1068       --l_Sales_Team_Rec.partner_cont_party_id := p_partner_cont_party_id;
1069       l_Sales_Team_Rec.lead_id               := x_lead_id;
1070       l_Sales_Team_Rec.team_leader_flag      := 'Y';
1071       l_Sales_Team_Rec.reassign_flag         := 'N';
1072       l_Sales_Team_Rec.freeze_flag           :=
1073                          nvl(FND_PROFILE.Value('AS_DEFAULT_FREEZE_FLAG'), 'Y');
1074 
1075       l_sales_team_rec.sales_group_id        := l_salesgroup_id;
1076       l_sales_team_rec.salesforce_role_code  := FND_PROFILE.Value('AS_DEF_OPP_ST_ROLE');
1077 
1078       OPEN get_person_id_csr(P_Identity_Salesforce_Id);
1079       FETCH get_person_id_csr into l_Sales_Team_Rec.person_id;
1080 
1081       IF (get_person_id_csr%NOTFOUND)
1082       THEN
1083           l_Sales_Team_Rec.person_id := NULL;
1084       END IF;
1085       CLOSE get_person_id_csr;
1086 
1087       -- Debug Message
1088       IF l_debug THEN
1089       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1090                    'owner_sf_id: '||l_header_rec.owner_salesforce_id );
1091       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1092                    'owner_sg_id: '||l_header_rec.owner_sales_group_id );
1093       END IF;
1094 
1095 
1096       -- If owner = creater = employee then set the owner_flag for the salesteam record.
1097       IF (l_header_rec.owner_salesforce_id IS NOT NULL) AND
1098 	 (l_header_rec.owner_sales_group_id IS NOT NULL) AND
1099 	 (l_header_rec.owner_salesforce_id = P_Identity_Salesforce_Id ) AND
1100 	 (l_header_rec.owner_sales_group_id = l_salesgroup_id ) AND
1101 	 ( nvl(FND_PROFILE.Value('AS_DEFAULT_FREEZE_FLAG'), 'Y') = 'Y' ) AND  --Code added for bug14172624
1102 	 Is_Employee(l_header_rec.owner_salesforce_id)
1103       THEN
1104 	  --l_sales_team_rec.owner_flag := 'Y';
1105           l_Sales_Team_Rec.freeze_flag := 'Y';
1106 	  l_is_owner := 'Y';
1107       END IF;
1108 
1109       -- If owner is not selected and creator is employee
1110       -- then set the owner_flag for the creater salesteam record.
1111       IF (l_header_rec.owner_salesforce_id IS NULL OR
1112 	  l_header_rec.owner_salesforce_id = FND_API.G_MISS_NUM ) AND
1113 	 (l_header_rec.owner_sales_group_id IS NULL OR
1114 	  l_header_rec.owner_sales_group_id = FND_API.G_MISS_NUM ) AND
1115  	 Is_Employee(P_Identity_Salesforce_Id)
1116       THEN
1117 	  --l_sales_team_rec.owner_flag := 'Y';
1118           --l_Sales_Team_Rec.freeze_flag := 'Y';
1119 	  l_Sales_Team_Rec.freeze_flag := nvl(FND_PROFILE.Value('AS_DEFAULT_FREEZE_FLAG'), 'Y');
1120 	  l_is_owner := 'Y';
1121       END IF;
1122 
1123       -- Debug Message
1124       IF l_debug THEN
1125       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1126                                    'Calling Create_SalesTeam');
1127       END IF;
1128 
1129       AS_ACCESS_PUB.Create_SalesTeam (
1130          p_api_version_number         => 2.0
1131         ,p_init_msg_list              => FND_API.G_FALSE
1132         ,p_commit                     => FND_API.G_FALSE
1133         ,p_validation_level           => p_Validation_Level
1134         ,p_access_profile_rec         => l_access_profile_rec
1135         ,p_check_access_flag          => 'O' -- P_Check_Access_flag
1136         ,p_admin_flag                 => P_Admin_Flag
1137         ,p_admin_group_id             => P_Admin_Group_Id
1138         ,p_identity_salesforce_id     => P_Identity_Salesforce_Id
1139         ,p_sales_team_rec             => l_Sales_Team_Rec
1140         ,X_Return_Status              => x_Return_Status
1141         ,X_Msg_Count                  => X_Msg_Count
1142         ,X_Msg_Data                   => X_Msg_Data
1143         ,x_access_id                  => l_Access_Id
1144       );
1145 
1146       -- Debug Message
1147       IF l_debug THEN
1148       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1149                            'Create_SalesTeam:l_access_id = ' || l_access_id);
1150       END IF;
1151 
1152 
1153 
1154       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1155            RAISE FND_API.G_EXC_ERROR;
1156       END IF;
1157 
1158       IF ( l_is_owner = 'Y' ) THEN
1159 	  Set_owner(l_access_id );
1160       END IF;
1161 
1162       -- Create salesteam record for owner if different from creater
1163       IF (l_header_rec.owner_salesforce_id IS NOT NULL) AND
1164  	 (l_header_rec.owner_salesforce_id <> FND_API.G_MISS_NUM ) AND
1165 	 (l_header_rec.owner_salesforce_id <> P_Identity_Salesforce_Id OR
1166 	  l_header_rec.owner_sales_group_id <>l_salesgroup_id )
1167       THEN
1168 	  l_Sales_Team_Rec.salesforce_id  := l_header_rec.owner_salesforce_id;
1169 	  l_sales_team_rec.sales_group_id := l_header_rec.owner_sales_group_id;
1170 
1171       	  OPEN get_person_id_csr(l_header_rec.owner_salesforce_id);
1172       	  FETCH get_person_id_csr into l_Sales_Team_Rec.person_id;
1173       	  CLOSE get_person_id_csr;
1174 
1175 	  --l_sales_team_rec.owner_flag := 'Y';
1176           l_Sales_Team_Rec.freeze_flag := 'Y';
1177 	  l_is_owner := 'Y';
1178 
1179       	  -- Debug Message
1180       	  IF l_debug THEN
1181       	  AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1182                                    'Calling Create_SalesTeam for owner');
1183 	  END IF;
1184 
1185       	  AS_ACCESS_PUB.Create_SalesTeam (
1186          	p_api_version_number         => 2.0
1187         	,p_init_msg_list              => FND_API.G_FALSE
1188          	,p_commit                     => FND_API.G_FALSE
1189         	,p_validation_level           => p_Validation_Level
1190         	,p_access_profile_rec         => l_access_profile_rec
1191         	,p_check_access_flag          => 'O' -- P_Check_Access_flag
1192         	,p_admin_flag                 => P_Admin_Flag
1193         	,p_admin_group_id             => P_Admin_Group_Id
1194         	,p_identity_salesforce_id     => P_Identity_Salesforce_Id
1195         	,p_sales_team_rec             => l_Sales_Team_Rec
1196         	,X_Return_Status              => x_Return_Status
1197         	,X_Msg_Count                  => X_Msg_Count
1198         	,X_Msg_Data                   => X_Msg_Data
1199         	,x_access_id                  => l_Access_Id
1200     	  );
1201 
1202       	  -- Debug Message
1203       	  IF l_debug THEN
1204       	  	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Create_Owner_ST:l_access_id = ' || l_access_id);
1205       	  END IF;
1206 
1207 
1208 
1209       	  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1210            	RAISE FND_API.G_EXC_ERROR;
1211       	  END IF;
1212 
1213     	  IF ( l_is_owner = 'Y' ) THEN
1214 	      Set_owner(l_access_id );
1215       	  END IF;
1216 
1217       END IF;
1218 
1219       -- Assign/Reassign the territory resources for the opportunity
1220       -- Debug Message
1221       IF l_debug THEN
1222       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Calling Opportunity Real Time API');
1223       END IF;
1224 
1225 
1226       AS_RTTAP_OPPTY.RTTAP_WRAPPER(
1227     	  P_Api_Version_Number         => 1.0,
1228     	  P_Init_Msg_List              => FND_API.G_FALSE,
1229     	  P_Commit                     => FND_API.G_FALSE,
1230     	  p_lead_id		       => l_lead_id,
1231      	  X_Return_Status              => x_return_status,
1232     	  X_Msg_Count                  => x_msg_count,
1233     	  X_Msg_Data                   => x_msg_data
1234     	);
1235 
1236       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1237             IF l_debug THEN
1238             	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Opportunity Real Time API fail');
1239 	    END IF;
1240             RAISE FND_API.G_EXC_ERROR;
1241       END IF;
1242 
1243 
1244       -- Debug Message
1245       IF l_debug THEN
1246       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Calling Recreate_tasks');
1247       END IF;
1248 
1249       Recreate_tasks(
1250     		p_LEAD_ID		 	=> l_lead_id,
1251     		p_RESOURCE_ID			=> p_identity_salesforce_id,
1252     		p_OLD_SALES_METHODOLOGY_ID	=> l_old_sales_methodology_id,
1253     		p_OLD_SALES_STAGE_ID		=> l_old_sales_stage_id,
1254     		p_SALES_METHODOLOGY_ID		=> l_header_rec.SALES_METHODOLOGY_ID,
1255     		p_SALES_STAGE_ID		=> l_header_rec.SALES_STAGE_ID,
1256     		x_return_status 		=> x_return_status,
1257                 X_Msg_Count                     => X_Msg_Count,
1258                 X_Msg_Data                      => X_Msg_Data,
1259 		X_Warning_Message		=> l_warning_msg );
1260 
1261       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1262             IF l_debug THEN
1263             	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Recreate_tasks fail');
1264 	    END IF;
1265 
1266             RAISE FND_API.G_EXC_ERROR;
1267       END IF;
1268 
1269 
1270 /*
1271       -- Create lead competitor
1272       IF (l_header_rec.CLOSE_COMPETITOR_ID  IS NOT NULL) AND
1273 	 (l_header_rec.CLOSE_COMPETITOR_ID  <> FND_API.G_MISS_NUM ) THEN
1274 
1275           Create_lead_competitor(
1276       		P_Api_Version_Number         => 2.0,
1277       		P_Init_Msg_List              => FND_API.G_FALSE,
1278       		P_Commit                     => p_commit,
1279       		P_Validation_Level           => P_Validation_Level,
1280       		P_Check_Access_Flag          => p_check_access_flag,
1281       		P_Admin_Flag                 => P_Admin_Flag,
1282       		P_Admin_Group_Id             => P_Admin_Group_Id,
1283       		P_Identity_Salesforce_Id     => P_Identity_Salesforce_Id,
1284       		P_Partner_Cont_Party_Id	     => p_partner_cont_party_id,
1285       		P_Profile_Tbl                => P_Profile_tbl,
1286     		p_LEAD_ID		     => l_lead_id,
1287 		p_COMPETITOR_ID		     => l_header_rec.CLOSE_COMPETITOR_ID,
1288       		X_Return_Status              => x_return_status,
1289       		X_Msg_Count                  => x_msg_count,
1290       		X_Msg_Data                   => x_msg_data);
1291 
1292           IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1293                 IF l_debug THEN
1294                 	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Create lead competitor fail');
1295 		END IF;
1296 
1297                 RAISE FND_API.G_EXC_ERROR;
1298           END IF;
1299       END IF;
1300 */
1301 
1302       -- Update competitor Products for the win/loss status
1303       IF (l_lead_id IS NOT NULL)AND
1304          (l_header_rec.STATUS_CODE IS NOT NULL) AND
1305 	 (l_header_rec.STATUS_CODE <> FND_API.G_MISS_CHAR ) THEN
1306 
1307 	  Update_Competitor_Products(
1308     		p_LEAD_ID		=> l_lead_id,
1309     		p_STATUS_CODE		=> l_header_rec.STATUS_CODE,
1310     		x_return_status 	=> x_return_status);
1311 
1312           IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1313                 IF l_debug THEN
1314                 	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Update competitor Products  fail');
1315                 END IF;
1316                 RAISE FND_API.G_EXC_ERROR;
1317           END IF;
1318 
1319       END IF;
1320 
1321 
1322       --
1323       -- End of API body
1324       --
1325 
1326       -- Standard check for p_commit
1327       IF FND_API.to_Boolean( p_commit )
1328       THEN
1329           COMMIT WORK;
1330       END IF;
1331 
1332 
1333       -- Debug Message
1334       IF l_debug THEN
1335       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: ' || l_api_name || ' end');
1336       END IF;
1337 
1338 
1339 
1340       -- Standard call to get message count and if count is 1, get message info.
1341       FND_MSG_PUB.Count_And_Get
1342       (  p_count          =>   x_msg_count,
1343          p_data           =>   x_msg_data
1344       );
1345 
1346       IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
1347         x_msg_data := l_winprob_warning_msg || '#####'|| l_warning_msg;
1348 	--x_msg_data := l_warning_msg;
1349       END IF;
1350 
1351 
1352 
1353 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
1354 /*
1355       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is
1356       -- invoked for customization purpose
1357       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
1358       THEN
1359           AS_CALLOUT_PKG.Create_opp_header_AC(
1360                   p_api_version_number   =>  2.0,
1361                   p_init_msg_list        =>  FND_API.G_FALSE,
1362                   p_commit               =>  FND_API.G_FALSE,
1363                   p_validation_level     =>  p_validation_level,
1364                   P_Header_Rec           =>  l_Header_Rec,
1365           -- Hint: Add detail tables as parameter lists if it's master-detail
1366           -- relationship.
1367                   x_return_status        =>  x_return_status,
1368                   x_msg_count            =>  x_msg_count,
1369                   x_msg_data             =>  x_msg_data);
1370       END IF;
1371 */
1372       EXCEPTION
1373           WHEN FND_API.G_EXC_ERROR THEN
1374               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1375                    P_MODULE => l_module
1376                   ,P_API_NAME => L_API_NAME
1377                   ,P_PKG_NAME => G_PKG_NAME
1378                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
1379                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1380                   ,X_MSG_COUNT => X_MSG_COUNT
1381                   ,X_MSG_DATA => X_MSG_DATA
1382                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1383 
1384           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1385               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1386                    P_MODULE => l_module
1387                   ,P_API_NAME => L_API_NAME
1388                   ,P_PKG_NAME => G_PKG_NAME
1389                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1390                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1391                   ,X_MSG_COUNT => X_MSG_COUNT
1392                   ,X_MSG_DATA => X_MSG_DATA
1393                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1394 
1395           WHEN OTHERS THEN
1396               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1397                    P_MODULE => l_module
1398                   ,P_API_NAME => L_API_NAME
1399                   ,P_PKG_NAME => G_PKG_NAME
1400                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
1401                   ,P_SQLCODE => SQLCODE
1402                   ,P_SQLERRM => SQLERRM
1403                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1404                   ,X_MSG_COUNT => X_MSG_COUNT
1405                   ,X_MSG_DATA => X_MSG_DATA
1406                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1407 End Create_opp_header;
1408 
1409 
1410 PROCEDURE Update_opp_header(
1411     P_Api_Version_Number         IN  NUMBER,
1412     P_Init_Msg_List              IN  VARCHAR2     := FND_API.G_FALSE,
1413     P_Commit                     IN  VARCHAR2     := FND_API.G_FALSE,
1414     p_validation_level           IN  NUMBER       := FND_API.G_VALID_LEVEL_FULL,
1415     P_Check_Access_Flag          IN  VARCHAR2     := FND_API.G_FALSE,
1416     P_Admin_Flag                 IN  VARCHAR2     := FND_API.G_FALSE,
1417     P_Admin_Group_Id             IN  NUMBER,
1418     P_Identity_Salesforce_Id     IN  NUMBER       := NULL,
1419     P_profile_tbl                IN  AS_UTILITY_PUB.PROFILE_TBL_TYPE,
1420     P_Partner_Cont_Party_id      IN  NUMBER       := FND_API.G_MISS_NUM,
1421     P_Header_Rec                 IN  AS_OPPORTUNITY_PUB.Header_Rec_Type,
1422     X_Return_Status              OUT NOCOPY  VARCHAR2,
1423     X_Msg_Count                  OUT NOCOPY  NUMBER,
1424     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1425     )
1426 
1427  IS
1428 Cursor C_Get_opp_header(c_LEAD_ID Number) IS
1429     Select LAST_UPDATE_DATE, DELETED_FLAG,
1430            WIN_PROBABILITY, nvl(TOTAL_REVENUE_OPP_FORECAST_AMT, 0), STATUS,
1431            SALES_STAGE_ID, DECISION_DATE, LEAD_NUMBER, FREEZE_FLAG,
1432            sales_methodology_id, sales_stage_id, customer_id, address_id,
1433            owner_salesforce_id, owner_sales_group_id
1434     FROM AS_LEADS_ALL
1435     WHERE LEAD_ID = c_LEAD_ID
1436     For Update NOWAIT;
1437 
1438 cursor c_close_reason(p_lead_id NUMBER) IS
1439  	select close_reason
1440 	from as_leads_all
1441 	where lead_id = p_lead_id;
1442 
1443 cursor close_competitor_exist(p_lead_id NUMBER) IS
1444 	select 'Y'
1445 	from as_leads_all
1446 	where lead_id = p_lead_id
1447 	and close_competitor_id is not null;
1448 
1449 cursor comp_required ( p_status_profile VARCHAR2, p_lead_id NUMBER) IS
1450 	select 'Y'
1451 	from 	as_leads_all ld,
1452 		as_statuses_b st
1453 	where 	ld.status = st.status_code
1454 	and     ld.lead_id = p_lead_id
1455 	and 	(( p_status_profile = 'BOTH' and
1456 			( st.OPP_OPEN_STATUS_FLAG <> 'Y' or st.FORECAST_ROLLUP_FLAG = 'Y')) OR
1457 		 ( p_status_profile = 'CLOSED' and st.OPP_OPEN_STATUS_FLAG <> 'Y') OR
1458 		 ( p_status_profile = 'FORECASTED' and st.OPP_OPEN_STATUS_FLAG <> 'Y') );
1459 
1460 CURSOR get_person_id_csr(c_salesforce_id NUMBER) is
1461      select employee_person_id
1462      from as_salesforce_v
1463      where salesforce_id = c_salesforce_id;
1464 
1465 CURSOR c_sales_credit_amount (p_lead_id as_leads_all.lead_id%type) IS
1466 	Select sales_credit_id, credit_type_id,credit_amount
1467 	From as_sales_credits
1468 	Where lead_id = p_lead_id;
1469 
1470 CURSOR c_get_status_flags (p_status_code VARCHAR2) IS
1471     Select status.win_loss_indicator,
1472            status.forecast_rollup_flag
1473     From as_statuses_vl status
1474     Where status.status_code = p_status_code;
1475 
1476 l_api_name                CONSTANT VARCHAR2(30) := 'Update_opp_header';
1477 l_api_version_number      CONSTANT NUMBER   := 2.0;
1478 -- Local Variables
1479 l_identity_sales_member_rec   AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
1480 --l_tar_Header_rec        AS_OPPORTUNITY_PUB.Header_Rec_Type := P_Header_Rec;
1481 l_access_profile_rec      AS_ACCESS_PUB.ACCESS_PROFILE_REC_TYPE;
1482 l_access_flag             VARCHAR2(1);
1483 l_deleted_flag            VARCHAR2(1);
1484 l_access_id               NUMBER;
1485 l_last_update_date        DATE;
1486 l_win_prob                NUMBER;
1487 l_status                  VARCHAR2(30);
1488 l_sales_stage_id          NUMBER;
1489 l_decision_date           DATE;
1490 l_lead_number             VARCHAR2(30);
1491 l_freeze_flag             VARCHAR2(1); -- solin, bug 1554330
1492 l_note_id                 NUMBER;
1493 l_header_rec              AS_OPPORTUNITY_PUB.Header_Rec_Type := P_Header_Rec;
1494 l_header_rec1             AS_OPPORTUNITY_PUB.Header_Rec_Type;
1495 l_allow_flag              VARCHAR2(1); -- solin, bug 1554330
1496 
1497 l_old_sales_methodology_id 	NUMBER := null;
1498 l_old_sales_stage_id 		NUMBER := null;
1499 l_new_SALES_METHODOLOGY_ID 		NUMBER := null;
1500 l_new_SALES_STAGE_ID 		NUMBER := null;
1501 
1502 l_comp_required_profile		VARCHAR2(1) := FND_PROFILE.VALUE ('AS_COMPETITOR_REQUIRED');
1503 
1504 l_warning_msg 		VARCHAR2(2000) := '';
1505 l_winprob_warning_msg 	VARCHAR2(2000) := '';
1506 
1507 -- for owner update
1508 l_customer_id		NUMBER;
1509 l_address_id		NUMBER;
1510 l_owner_salesforce_id   NUMBER;
1511 l_owner_sales_group_id	NUMBER;
1512 l_Sales_Team_Rec        AS_ACCESS_PUB.Sales_Team_Rec_Type
1513                               := AS_ACCESS_PUB.G_MISS_SALES_TEAM_REC;
1514 l_opp_worst_forecast_amount NUMBER;
1515 l_opp_forecast_amount       NUMBER;
1516 l_opp_best_forecast_amount  NUMBER;
1517 l_win_probability       NUMBER;
1518 l_win_loss_indicator    as_statuses_b.win_loss_indicator%Type;
1519 l_forecast_rollup_flag  as_statuses_b.forecast_rollup_flag%Type;
1520 l_old_win_probability       NUMBER;
1521 l_old_win_loss_indicator    as_statuses_b.win_loss_indicator%Type;
1522 l_old_forecast_rollup_flag  as_statuses_b.forecast_rollup_flag%Type;
1523 l_old_tot_rev_opp_forecast_amt NUMBER; -- Added for ASNB
1524 l_tot_rev_opp_forecast_amt NUMBER; -- Added for R12
1525 l_update_count             NUMBER;
1526 l_count NUMBER;
1527 l_forecast_credit_type_id CONSTANT NUMBER := FND_PROFILE.VALUE('AS_FORECAST_CREDIT_TYPE_ID');
1528 l_temp_bool     BOOLEAN;
1529 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
1530 x_lead_id		NUMBER;
1531 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Update_opp_header';
1532 
1533  BEGIN
1534       -- Standard Start of API savepoint
1535       SAVEPOINT UPDATE_OPP_HEADER_PVT;
1536 
1537       -- Standard call to check for call compatibility.
1538       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1539                          	             p_api_version_number,
1540                                            l_api_name,
1541                                            G_PKG_NAME)
1542       THEN
1543           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1544       END IF;
1545 
1546 
1547       -- Initialize message list if p_init_msg_list is set to TRUE.
1548       IF FND_API.to_Boolean( p_init_msg_list )
1549       THEN
1550           FND_MSG_PUB.initialize;
1551       END IF;
1552 
1553 
1554       -- Debug Message
1555       IF l_debug THEN
1556       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: ' || l_api_name || ' start');
1557       END IF;
1558 
1559 
1560       -- Initialize API return status to SUCCESS
1561       x_return_status := FND_API.G_RET_STS_SUCCESS;
1562 
1563       --
1564       -- Api body
1565       --
1566 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
1567 /*
1568       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y', callout procedure is
1569       -- invoked for customization purpose
1570       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
1571       THEN
1572           AS_CALLOUT_PKG.Update_opp_header_BU(
1573                   p_api_version_number   =>  2.0,
1574                   p_init_msg_list        =>  FND_API.G_FALSE,
1575                   p_commit               =>  FND_API.G_FALSE,
1576                   p_validation_level     =>  p_validation_level,
1577                   p_identity_salesforce_id => p_identity_salesforce_id,
1578                   P_Header_Rec      =>  l_Header_Rec,
1579           -- Hint: Add detail tables as parameter lists if it's master-detail
1580           -- relationship.
1581                   x_return_status        =>  x_return_status,
1582                   x_msg_count            =>  x_msg_count,
1583                   x_msg_data             =>  x_msg_data);
1584       END IF;
1585 */
1586 
1587       IF (p_validation_level = fnd_api.g_valid_level_full)
1588       THEN
1589           AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
1590               p_api_version_number => 2.0
1591              ,p_init_msg_list      => p_init_msg_list
1592              ,p_salesforce_id => p_identity_salesforce_id
1593              ,p_admin_group_id => p_admin_group_id
1594              ,x_return_status => x_return_status
1595              ,x_msg_count => x_msg_count
1596              ,x_msg_data => x_msg_data
1597              ,x_sales_member_rec => l_identity_sales_member_rec);
1598       END IF;
1599 
1600       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1601           RAISE FND_API.G_EXC_ERROR;
1602       END IF;
1603 
1604       -- Debug Message
1605       IF l_debug THEN
1606       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Open Cursor to Select');
1607       END IF;
1608 
1609 
1610       Open C_Get_opp_header( l_Header_rec.LEAD_ID);
1611       Fetch C_Get_opp_header into l_last_update_date, l_deleted_flag,
1612         l_win_prob, l_old_tot_rev_opp_forecast_amt, l_status,
1613         l_sales_stage_id, l_decision_date, l_lead_number, l_freeze_flag,
1614 		l_old_sales_methodology_id, l_old_sales_stage_id,
1615 		l_customer_id, l_address_id,
1616 		l_owner_salesforce_id, l_owner_sales_group_id;
1617 
1618       -- Basic info for forecast defaulting, includes l_old_tot_rev_opp_forecast_amt and l_status from
1619       -- above cursor
1620       l_old_win_probability := l_win_prob;
1621 
1622       -- If deleted_flag is 'Y', this opportunity header has been soft deleted.
1623       IF (UPPER(l_deleted_flag) = 'Y')
1624       THEN
1625           AS_UTILITY_PVT.Set_Message(
1626               p_module        => l_module,
1627               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1628               p_msg_name      => 'API_DELETED_OPP_HEADER');
1629 
1630           raise FND_API.G_EXC_ERROR;
1631       END IF;
1632 
1633       -- Moved the following section for bug 2407000
1634       -- solin, for bug 1554330
1635       IF l_freeze_flag = 'Y'
1636       THEN
1637           l_allow_flag := NVL(FND_PROFILE.VALUE('AS_ALLOW_UPDATE_FROZEN_OPP'),'Y');
1638           IF l_allow_flag <> 'Y' THEN
1639               AS_UTILITY_PVT.Set_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1640                                            'API_OPP_FROZEN');
1641               RAISE FND_API.G_EXC_ERROR;
1642           END IF;
1643       END IF;
1644       -- end 1554330
1645 
1646       IF ( C_Get_opp_header%NOTFOUND)
1647       THEN
1648           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
1649           THEN
1650               -- FND_MESSAGE.Set_Name('AS', 'API_MISSING_UPDATE_TARGET');
1651               -- FND_MESSAGE.Set_Token ('INFO', 'opp_header', FALSE);
1652               -- FND_MSG_PUB.Add;
1653 
1654               AS_UTILITY_PVT.Set_Message(
1655                   p_module        => l_module,
1656                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1657                   p_msg_name      => 'API_MISSING_OPP_HEADER_UPDATE');
1658 
1659           END IF;
1660           raise FND_API.G_EXC_ERROR;
1661       END IF;
1662 
1663       -- Debug Message
1664       IF l_debug THEN
1665       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Close Cursor');
1666       END IF;
1667       close     C_Get_opp_header;
1668 
1669       If (l_Header_rec.last_update_date is NULL or
1670           l_Header_rec.last_update_date = FND_API.G_MISS_Date ) Then
1671           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
1672           THEN
1673               -- FND_MESSAGE.Set_Name('AS', 'API_MISSING_ID');
1674               -- FND_MESSAGE.Set_Token('COLUMN', 'Last_Update_Date', FALSE);
1675               -- FND_MSG_PUB.ADD;
1676 
1677               AS_UTILITY_PVT.Set_Message(
1678                   p_module        => l_module,
1679                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1680                   p_msg_name      => 'API_MISSING_LAST_UPDATE_DATE');
1681 
1682           END IF;
1683           raise FND_API.G_EXC_ERROR;
1684       End if;
1685       -- Check Whether record has been changed by someone else
1686       If (l_Header_rec.last_update_date <> l_last_update_date) Then
1687           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
1688           THEN
1689               -- FND_MESSAGE.Set_Name('AS', 'API_RECORD_CHANGED');
1690               -- FND_MESSAGE.Set_Token('INFO', 'opp_header', FALSE);
1691               -- FND_MSG_PUB.ADD;
1692 
1693               AS_UTILITY_PVT.Set_Message(
1694                   p_module        => l_module,
1695                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1696                   p_msg_name      => 'API_OPP_HEADER_CHANGED');
1697 
1698           END IF;
1699           raise FND_API.G_EXC_ERROR;
1700       End if;
1701 
1702       -- Set default value to decision_date, channel_code, status_code,
1703       -- sales_stage_id, win_probability, freeze_flag, and currency_code as
1704       -- profile values.
1705       If (l_Header_Rec.decision_date IS NULL) or
1706          (l_Header_Rec.channel_code IS NULL) or
1707          (l_Header_Rec.STATUS_CODE IS NULL) or
1708          (l_Header_Rec.sales_stage_id IS NULL) or
1709          (l_Header_Rec.win_probability IS NULL) or
1710          (l_Header_Rec.currency_code IS NULL) or
1711          (l_Header_Rec.freeze_flag IS NULL) or -- solin for B1554330
1712          (l_Header_Rec.auto_assignment_type IS NULL) or --ffang 091500 for B1407007
1713          (l_Header_Rec.prm_assignment_type IS NULL) --ffang 091500 for B1407007
1714       THEN
1715           IF l_debug THEN
1716           	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Calling Set_opp_default_values');
1717           END IF;
1718 
1719 	  l_header_rec1 := l_header_rec;
1720           Set_opp_default_values(
1721                 p_mode       => AS_UTILITY_PVT.G_UPDATE,
1722                 p_opp_rec    => l_Header_Rec1,
1723                 x_opp_rec    => l_Header_Rec );
1724 
1725       End If;
1726 
1727       -- Trunc desidion date
1728       l_Header_Rec.decision_date := trunc(l_Header_Rec.decision_date);
1729 
1730 
1731       If(l_Header_Rec.close_reason = FND_API.G_MISS_CHAR) THEN
1732 	open c_close_reason(l_Header_Rec.lead_id);
1733 	fetch c_close_reason into l_Header_Rec.close_reason;
1734 	close c_close_reason;
1735       END IF;
1736 
1737       -- Debug message
1738       IF l_debug THEN
1739       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: Validate_opp_header');
1740       END IF;
1741 
1742 
1743       -- Invoke validation procedures
1744       Validate_opp_header(
1745           p_init_msg_list    => FND_API.G_FALSE,
1746           p_validation_level => p_validation_level,
1747           p_validation_mode  => AS_UTILITY_PVT.G_UPDATE,
1748           P_Header_Rec       => l_Header_Rec,
1749           x_return_status    => x_return_status,
1750           x_msg_count        => x_msg_count,
1751           x_msg_data         => x_msg_data);
1752 
1753       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1754           RAISE FND_API.G_EXC_ERROR;
1755       END IF;
1756 
1757       IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
1758                 l_winprob_warning_msg := x_msg_data;
1759       END IF;
1760 
1761 /*
1762       -- Validate required close_competitor_id
1763       IF nvl(l_comp_required_profile, 'N') = 'Y' THEN
1764           open close_competitor_exist(l_Header_Rec.lead_id);
1765           fetch close_competitor_exist into l_close_competitor_exist;
1766           close close_competitor_exist;
1767 
1768           IF (nvl(l_close_competitor_exist, 'N') = 'N' AND
1769 	     l_Header_Rec.CLOSE_COMPETITOR_ID = FND_API.G_MISS_NUM ) OR
1770 	     l_Header_Rec.CLOSE_COMPETITOR_ID IS NULL
1771           THEN
1772 	      open comp_required(l_comp_required_status, l_Header_Rec.lead_id);
1773 	      fetch comp_required into l_comp_required;
1774 	      close comp_required;
1775 
1776 	      IF l_Header_Rec.win_probability >= to_number ( nvl(l_comp_required_prob, '101')) THEN
1777 	 	l_comp_required := 'Y';
1778 	      END IF;
1779 
1780 	      IF nvl(l_comp_required, 'N') = 'Y' THEN
1781 		IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
1782           	THEN
1783               	    AS_UTILITY_PVT.Set_Message(
1784                   	p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1785                   	p_msg_name      => 'API_CLOSE_COMPETITOR_REQUIRED');
1786           	END IF;
1787           	raise FND_API.G_EXC_ERROR;
1788 	      END IF;
1789           END IF;
1790       END IF;
1791 
1792 */
1793       -- Call Get_Access_Profiles to get access_profile_rec
1794       AS_OPPORTUNITY_PUB.Get_Access_Profiles(
1795           p_profile_tbl         => p_profile_tbl,
1796           x_access_profile_rec  => l_access_profile_rec);
1797 
1798 
1799       -- Access checking
1800       IF p_check_access_flag = 'Y'
1801       THEN
1802           -- Please un-comment here and complete it
1803           AS_ACCESS_PUB.Has_updateOpportunityAccess(
1804               p_api_version_number     => 2.0,
1805               p_init_msg_list          => p_init_msg_list,
1806               p_validation_level       => p_validation_level,
1807               p_access_profile_rec     => l_access_profile_rec,
1808               p_admin_flag             => p_admin_flag,
1809               p_admin_group_id         => p_admin_group_id,
1810               p_person_id              =>
1811                                 l_identity_sales_member_rec.employee_person_id,
1812               p_opportunity_id         => l_Header_Rec.lead_id,
1813               p_check_access_flag      => 'Y',
1814               p_identity_salesforce_id => p_identity_salesforce_id,
1815               p_partner_cont_party_id  => NULL,
1816               x_return_status          => x_return_status,
1817               x_msg_count              => x_msg_count,
1818               x_msg_data               => x_msg_data,
1819               x_update_access_flag       => l_access_flag);
1820 
1821           IF l_access_flag <> 'Y' THEN
1822               AS_UTILITY_PVT.Set_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
1823                                            'API_NO_UPDATE_PRIVILEGE');
1824               RAISE FND_API.G_EXC_ERROR;
1825           END IF;
1826 
1827           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1828               RAISE FND_API.G_EXC_ERROR;
1829           END IF;
1830 
1831       END IF;
1832 
1833       -- Create notes
1834 
1835       -- if profile AS_OPPTY_GENERATE_NOTES is Y;
1836       -- when status, decision_date, sales_stage_id, or win prob. changes,
1837       -- note will be created automatically.
1838 
1839       IF NVL(FND_PROFILE.Value('AS_OPPTY_GENERATE_NOTES'),'N') = 'Y'
1840       THEN
1841 
1842 	  IF l_header_rec.status_code = FND_API.G_MISS_CHAR THEN
1843 	      l_header_rec.status_code := l_status;
1844 	  END IF;
1845 	  IF l_header_rec.decision_date = FND_API.G_MISS_DATE THEN
1846 	      l_header_rec.decision_date := l_decision_date;
1847 	  END IF;
1848 	  IF l_header_rec.sales_stage_id = FND_API.G_MISS_NUM THEN
1849 	      l_header_rec.sales_stage_id := l_sales_stage_id;
1850 	  END IF;
1851    	  IF l_header_rec.win_probability = FND_API.G_MISS_NUM THEN
1852 	      l_header_rec.win_probability := l_win_prob;
1853 	  END IF;
1854 
1855           IF (l_header_rec.status_code <> l_status) or
1856              (l_header_rec.decision_date <> l_decision_date) or
1857              (l_header_rec.sales_stage_id <> l_sales_stage_id) or
1858              (l_header_rec.win_probability <> l_win_prob)
1859           THEN
1860               -- Debug message
1861               IF l_debug THEN
1862               	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: Create notes');
1863               END IF;
1864 
1865               IF (l_header_rec.lead_number is NOT NULL) and
1866                  (l_header_rec.lead_number <> FND_API.G_MISS_CHAR)
1867               THEN
1868                   l_lead_number := l_header_rec.lead_number;
1869               END IF;
1870 
1871               HEADER_CREATE_NOTE(
1872                   p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1873                   p_header_rec       => l_header_rec,
1874                   p_lead_number      => l_lead_number,
1875                   p_win_prob         => l_win_prob,
1876                   p_status           => l_status,
1877                   p_sales_stage_id   => l_sales_stage_id,
1878                   p_decision_date    => l_decision_date,
1879                   x_note_id          => l_note_id,
1880                   x_return_status    => x_return_status,
1881                   x_msg_count        => x_msg_count,
1882                   x_msg_data         => x_msg_data
1883               );
1884 
1885               IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1886                   RAISE FND_API.G_EXC_ERROR;
1887               ELSE
1888                   IF l_debug THEN
1889                   	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Notes created. note_id=' || l_note_id);
1890                   END IF;
1891               END IF;
1892           END IF;
1893       END IF;
1894 
1895       -- check the priviledge to change owner.
1896 
1897       IF ( nvl(l_header_rec.owner_salesforce_id, -99) <> FND_API.G_MISS_NUM AND
1898            nvl(l_header_rec.owner_salesforce_id, -99) <> nvl(l_owner_salesforce_id, -99)) OR
1899 	 ( nvl(l_header_rec.owner_sales_group_id, -99) <> FND_API.G_MISS_NUM AND
1900 	   nvl(l_header_rec.owner_sales_group_id, -99) <> nvl(l_owner_sales_group_id, -99))
1901       THEN
1902  	  -- check priviledge
1903       	  AS_ACCESS_PVT.has_oppOwnerAccess
1904 	  (    p_api_version_number     => 2.0
1905 	      ,p_init_msg_list          => p_init_msg_list
1906 	      ,p_validation_level       => p_validation_level
1907 	      ,p_access_profile_rec     => l_access_profile_rec
1908 	      ,p_admin_flag             => p_admin_flag
1909 	      ,p_admin_group_id         => p_admin_group_id
1910 	      ,p_person_id              => l_identity_sales_member_rec.employee_person_id
1911 	      ,p_lead_id         	=> l_Header_Rec.lead_id
1912 	      ,p_check_access_flag      => 'Y'
1913 	      ,p_identity_salesforce_id => p_identity_salesforce_id
1914 	      ,p_partner_cont_party_id  => Null
1915 	      ,x_return_status          => x_return_status
1916 	      ,x_msg_count              => x_msg_count
1917 	      ,x_msg_data               => x_msg_data
1918 	      ,x_update_access_flag     => l_access_flag
1919    	  );
1920 
1921 	  IF (l_access_flag <> 'Y') THEN
1922                 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1923 		    FND_MESSAGE.Set_Name('AS', 'API_NO_OPP_OWNER_PRIVILEGE');
1924 		    FND_MSG_PUB.ADD;
1925 		END IF;
1926 		RAISE FND_API.G_EXC_ERROR;
1927 	  END IF;
1928 
1929 	  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1930 	        IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW) THEN
1931 		    AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'has_oppOwnerAccess fail');
1932 		END IF;
1933                 RAISE FND_API.G_EXC_ERROR;
1934 	  END IF;
1935       END IF;
1936 
1937 
1938 
1939       -- Hint: Add corresponding Master-Detail business logic here if necessary.
1940 
1941       -- Debug Message
1942       IF l_debug THEN
1943       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
1944                                    'Private API: Calling update table handler');
1945 
1946       END IF;
1947 
1948       -- Begin get old and new values for forecast defaulting
1949       Open c_get_status_flags(l_status);
1950       Fetch c_get_status_flags Into l_old_win_loss_indicator, l_old_forecast_rollup_flag;
1951       IF c_get_status_flags%NOTFOUND THEN
1952           l_old_win_loss_indicator := NULL;
1953           l_old_forecast_rollup_flag := NULL;
1954       END IF;
1955       Close c_get_status_flags;
1956 
1957       l_win_probability := l_header_rec.WIN_PROBABILITY;
1958       IF l_win_probability = FND_API.G_MISS_NUM THEN
1959         l_win_probability := l_old_win_probability;
1960       END IF;
1961 
1962       IF l_status = l_header_rec.STATUS_CODE OR l_header_rec.STATUS_CODE = FND_API.G_MISS_CHAR THEN
1963         l_win_loss_indicator := l_old_win_loss_indicator;
1964         l_forecast_rollup_flag := l_old_forecast_rollup_flag;
1965       ELSE
1966         Open c_get_status_flags(l_header_rec.STATUS_CODE);
1967         Fetch c_get_status_flags Into l_win_loss_indicator, l_forecast_rollup_flag;
1968         IF c_get_status_flags%NOTFOUND THEN
1969             l_win_loss_indicator := NULL;
1970             l_forecast_rollup_flag := NULL;
1971         END IF;
1972         Close c_get_status_flags;
1973       END IF;
1974 
1975       l_tot_rev_opp_forecast_amt :=
1976         nvl(l_header_rec.TOTAL_REVENUE_OPP_FORECAST_AMT, FND_API.G_MISS_NUM);
1977 
1978       IF nvl(l_forecast_rollup_flag, 'N') <> 'Y' THEN
1979         l_tot_rev_opp_forecast_amt := FND_API.G_MISS_NUM;
1980       END IF;
1981       -- End get old and new values for forecast defaulting
1982 
1983       -- Invoke table handler(AS_LEADS_PKG.Update_Row)
1984       AS_LEADS_PKG.Update_Row(
1985           p_LEAD_ID  => l_Header_rec.LEAD_ID,
1986           p_LAST_UPDATE_DATE  => SYSDATE,
1987           p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
1988           p_CREATION_DATE  => FND_API.G_MISS_DATE,
1989           p_CREATED_BY  => FND_API.G_MISS_NUM,
1990           p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID,
1991           p_REQUEST_ID  => l_Header_rec.REQUEST_ID,
1992           p_PROGRAM_APPLICATION_ID  => l_Header_rec.PROGRAM_APPLICATION_ID,
1993           p_PROGRAM_ID  => l_Header_rec.PROGRAM_ID,
1994           p_PROGRAM_UPDATE_DATE  => l_Header_rec.PROGRAM_UPDATE_DATE,
1995           p_LEAD_NUMBER  => FND_API.G_MISS_CHAR,  -- l_Header_rec.LEAD_NUMBER,
1996           p_STATUS  => l_HEADER_REC.STATUS_CODE,
1997           p_CUSTOMER_ID  => l_Header_rec.CUSTOMER_ID,
1998           p_ADDRESS_ID  => l_Header_rec.ADDRESS_ID,
1999           p_SALES_STAGE_ID  => l_Header_rec.SALES_STAGE_ID,
2000           p_INITIATING_CONTACT_ID  => l_Header_rec.INITIATING_CONTACT_ID,
2001           p_CHANNEL_CODE  => l_Header_rec.CHANNEL_CODE,
2002           p_TOTAL_AMOUNT  => l_Header_rec.TOTAL_AMOUNT,
2003           p_CURRENCY_CODE  => l_Header_rec.CURRENCY_CODE,
2004           p_DECISION_DATE  => l_Header_rec.DECISION_DATE,
2005           p_WIN_PROBABILITY  => l_Header_rec.WIN_PROBABILITY,
2006           p_CLOSE_REASON  => l_Header_rec.CLOSE_REASON,
2007           p_CLOSE_COMPETITOR_CODE  => l_Header_rec.CLOSE_COMPETITOR_CODE,
2008           p_CLOSE_COMPETITOR  => l_Header_rec.CLOSE_COMPETITOR,
2009           p_CLOSE_COMMENT  => l_Header_rec.CLOSE_COMMENT,
2010           p_DESCRIPTION  => l_Header_rec.DESCRIPTION,
2011           p_RANK  => l_Header_rec.RANK,
2012           p_SOURCE_PROMOTION_ID  => l_Header_rec.SOURCE_PROMOTION_ID,
2013           p_END_USER_CUSTOMER_ID  => l_Header_rec.END_USER_CUSTOMER_ID,
2014           p_END_USER_ADDRESS_ID  => l_Header_rec.END_USER_ADDRESS_ID,
2015           p_OWNER_SALESFORCE_ID  => l_header_rec.OWNER_SALESFORCE_ID,
2016           p_OWNER_SALES_GROUP_ID => l_header_rec.OWNER_SALES_GROUP_ID,
2017           --p_OWNER_ASSIGN_DATE  => l_header_rec.OWNER_ASSIGN_DATE,
2018           p_ORG_ID  => l_Header_rec.ORG_ID,
2019           p_NO_OPP_ALLOWED_FLAG  => l_Header_rec.NO_OPP_ALLOWED_FLAG,
2020           p_DELETE_ALLOWED_FLAG  => l_Header_rec.DELETE_ALLOWED_FLAG,
2021           p_ATTRIBUTE_CATEGORY  => l_Header_rec.ATTRIBUTE_CATEGORY,
2022           p_ATTRIBUTE1  => l_Header_rec.ATTRIBUTE1,
2023           p_ATTRIBUTE2  => l_Header_rec.ATTRIBUTE2,
2024           p_ATTRIBUTE3  => l_Header_rec.ATTRIBUTE3,
2025           p_ATTRIBUTE4  => l_Header_rec.ATTRIBUTE4,
2026           p_ATTRIBUTE5  => l_Header_rec.ATTRIBUTE5,
2027           p_ATTRIBUTE6  => l_Header_rec.ATTRIBUTE6,
2028           p_ATTRIBUTE7  => l_Header_rec.ATTRIBUTE7,
2029           p_ATTRIBUTE8  => l_Header_rec.ATTRIBUTE8,
2030           p_ATTRIBUTE9  => l_Header_rec.ATTRIBUTE9,
2031           p_ATTRIBUTE10  => l_Header_rec.ATTRIBUTE10,
2032           p_ATTRIBUTE11  => l_Header_rec.ATTRIBUTE11,
2033           p_ATTRIBUTE12  => l_Header_rec.ATTRIBUTE12,
2034           p_ATTRIBUTE13  => l_Header_rec.ATTRIBUTE13,
2035           p_ATTRIBUTE14  => l_Header_rec.ATTRIBUTE14,
2036           p_ATTRIBUTE15  => l_Header_rec.ATTRIBUTE15,
2037           p_PARENT_PROJECT  => l_Header_rec.PARENT_PROJECT,
2038           p_LEAD_SOURCE_CODE  => l_Header_rec.LEAD_SOURCE_CODE,
2039           p_ORIG_SYSTEM_REFERENCE  => l_Header_rec.ORIG_SYSTEM_REFERENCE,
2040           p_CLOSE_COMPETITOR_ID  => l_Header_rec.CLOSE_COMPETITOR_ID,
2041           p_END_USER_CUSTOMER_NAME  => l_Header_rec.END_USER_CUSTOMER_NAME,
2042           p_PRICE_LIST_ID  => l_Header_rec.PRICE_LIST_ID,
2043           p_DELETED_FLAG  => l_Header_rec.DELETED_FLAG,
2044           p_AUTO_ASSIGNMENT_TYPE  => l_Header_rec.AUTO_ASSIGNMENT_TYPE,
2045           p_PRM_ASSIGNMENT_TYPE  => l_Header_rec.PRM_ASSIGNMENT_TYPE,
2046           p_CUSTOMER_BUDGET  => l_Header_rec.CUSTOMER_BUDGET,
2047           p_METHODOLOGY_CODE  => l_Header_rec.METHODOLOGY_CODE,
2048           p_SALES_METHODOLOGY_ID  => l_header_rec.SALES_METHODOLOGY_ID,
2049           p_ORIGINAL_LEAD_ID  => l_Header_rec.ORIGINAL_LEAD_ID,
2050           p_DECISION_TIMEFRAME_CODE  => l_Header_rec.DECISION_TIMEFRAME_CODE,
2051           p_INC_PARTNER_RESOURCE_ID=>l_Header_rec.INCUMBENT_PARTNER_RESOURCE_ID,
2052           p_INC_PARTNER_PARTY_ID  => l_Header_rec.INCUMBENT_PARTNER_PARTY_ID,
2053           p_OFFER_ID  => l_Header_rec.OFFER_ID,
2054           p_VEHICLE_RESPONSE_CODE  => l_Header_rec.VEHICLE_RESPONSE_CODE,
2055           p_BUDGET_STATUS_CODE  => l_Header_rec.BUDGET_STATUS_CODE,
2056           p_FOLLOWUP_DATE  => l_Header_rec.FOLLOWUP_DATE,
2057           p_PRM_EXEC_SPONSOR_FLAG  => l_Header_rec.PRM_EXEC_SPONSOR_FLAG,
2058           p_PRM_PRJ_LEAD_IN_PLACE_FLAG=>l_Header_rec.PRM_PRJ_LEAD_IN_PLACE_FLAG,
2059           p_PRM_IND_CLASSIFICATION_CODE  =>
2060                                       l_Header_rec.PRM_IND_CLASSIFICATION_CODE,
2061           p_PRM_LEAD_TYPE  => l_Header_rec.PRM_LEAD_TYPE,
2062           p_FREEZE_FLAG => l_Header_rec.FREEZE_FLAG,
2063           p_PRM_REFERRAL_CODE => l_Header_rec.PRM_REFERRAL_CODE);
2064 
2065       -- If decision_date changed Synchronize the forecast_date in purchase lines
2066       -- with decision_date in the header if the rolloing_forecast_flag = 'Y';
2067 
2068       IF l_Header_rec.DECISION_DATE <> FND_API.G_MISS_DATE AND
2069 	  trunc(l_Header_rec.DECISION_DATE) <> trunc(l_decision_date)
2070       THEN
2071        	  UPDATE AS_LEAD_LINES_ALL
2072       	  SET object_version_number =  nvl(object_version_number,0) + 1, FORECAST_DATE = l_Header_rec.DECISION_DATE
2073 	  --last_update_date = SYSDATE,
2074           --last_updated_by = FND_GLOBAL.USER_ID,
2075           --last_update_login = FND_GLOBAL.CONC_LOGIN_ID
2076       	  WHERE lead_id = l_Header_rec.lead_id
2077       	  AND rolling_forecast_flag = 'Y';
2078       END IF;
2079 
2080       Select lead.win_probability, status.win_loss_indicator,
2081              status.forecast_rollup_flag
2082       Into   l_win_probability, l_win_loss_indicator,
2083              l_forecast_rollup_flag
2084       From as_leads_all lead, as_statuses_vl status
2085       Where lead_id = l_Header_rec.LEAD_ID
2086       And lead.status = status.status_code(+);
2087 
2088       IF AS_OPP_SALES_CREDIT_PVT.Apply_Forecast_Defaults(
2089           l_old_win_probability, l_old_win_loss_indicator,
2090           l_old_forecast_rollup_flag, 0, l_win_probability,
2091           l_win_loss_indicator, l_forecast_rollup_flag, 0, 'ON-UPDATE',
2092           l_opp_worst_forecast_amount, l_opp_forecast_amount,
2093           l_opp_best_forecast_amount)
2094       THEN
2095         l_tot_rev_opp_forecast_amt := 0;
2096         FOR curr_rec_sc_amt IN c_sales_credit_amount (l_Header_rec.LEAD_ID) LOOP
2097             l_temp_bool := AS_OPP_SALES_CREDIT_PVT.Apply_Forecast_Defaults(
2098                 l_old_win_probability, l_old_win_loss_indicator,
2099                 l_old_forecast_rollup_flag, curr_rec_sc_amt.credit_amount,
2100                 l_win_probability, l_win_loss_indicator, l_forecast_rollup_flag,
2101                 curr_rec_sc_amt.credit_amount, 'ON-UPDATE',
2102                 l_opp_worst_forecast_amount, l_opp_forecast_amount,
2103                 l_opp_best_forecast_amount);
2104             Update as_sales_credits
2105             Set object_version_number = nvl(object_version_number, 0) + 1,
2106                 opp_worst_forecast_amount = l_opp_worst_forecast_amount,
2107                 opp_forecast_amount = l_opp_forecast_amount,
2108                 opp_best_forecast_amount = l_opp_best_forecast_amount
2109             Where sales_credit_id = curr_rec_sc_amt.sales_credit_id;
2110             -- The following condition added for ASNB
2111             IF curr_rec_sc_amt.credit_type_id= l_forecast_credit_type_id THEN
2112                 l_tot_rev_opp_forecast_amt := nvl(l_tot_rev_opp_forecast_amt,0) + nvl(l_opp_forecast_amount,0);
2113             END IF;
2114         END LOOP;
2115         -- The following update added for ASNB
2116         UPDATE AS_LEADS_ALL
2117         SET TOTAL_REVENUE_OPP_FORECAST_AMT = nvl(l_tot_rev_opp_forecast_amt,0)
2118         WHERE lead_id = l_Header_rec.lead_id;
2119       ELSIF nvl(l_tot_rev_opp_forecast_amt, 0) <> FND_API.G_MISS_NUM THEN
2120         l_update_count := 0;
2121         -- Trickle down supplied TOTAL_REVENUE_OPP_FORECAST_AMT to
2122         -- sales credits/lines
2123         IF l_old_tot_rev_opp_forecast_amt = 0 THEN
2124             Select count(*) into l_count from as_sales_credits
2125             where lead_id = l_Header_rec.LEAD_ID and
2126                   credit_type_id = l_forecast_credit_type_id;
2127             IF l_count > 0 THEN -- Equally distribute
2128                 l_opp_forecast_amount := nvl(l_tot_rev_opp_forecast_amt, 0)/l_count;
2129                 Update as_sales_credits set opp_forecast_amount = l_opp_forecast_amount
2130                 where lead_id = l_Header_rec.LEAD_ID AND
2131                       credit_type_id = l_forecast_credit_type_id;
2132                 l_update_count := SQL%ROWCOUNT;
2133             END IF;
2134         ELSE
2135             Update as_sales_credits
2136             Set opp_forecast_amount =
2137                 nvl(l_tot_rev_opp_forecast_amt, 0) * (nvl(opp_forecast_amount, 0)/l_old_tot_rev_opp_forecast_amt)
2138             where lead_id = l_Header_rec.LEAD_ID AND
2139                   credit_type_id = l_forecast_credit_type_id;
2140             l_update_count := SQL%ROWCOUNT;
2141         END IF;
2142 
2143         IF l_update_count = 0 THEN
2144             l_tot_rev_opp_forecast_amt := NULL;
2145         END IF;
2146 
2147         UPDATE AS_LEADS_ALL
2148       	SET TOTAL_REVENUE_OPP_FORECAST_AMT = l_tot_rev_opp_forecast_amt
2149       	WHERE lead_id = l_Header_rec.lead_id;
2150       END IF;
2151 
2152       -- Reset the owner in the sales team
2153       -- Debug Message
2154       IF l_debug THEN
2155       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2156                    'owner_sf_id: '||l_header_rec.owner_salesforce_id );
2157       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2158                    'owner_sg_id: '||l_header_rec.owner_sales_group_id );
2159 
2160       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2161                    'l_owner_sf_id: '||l_owner_salesforce_id );
2162       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2163                    'l_owner_sg_id: '||l_owner_sales_group_id );
2164       END IF;
2165 
2166 
2167       IF (l_header_rec.owner_salesforce_id IS NOT NULL) AND
2168 	 (l_header_rec.owner_salesforce_id <> FND_API.G_MISS_NUM ) AND
2169 	 (l_header_rec.owner_sales_group_id IS NOT NULL) AND
2170 	 (l_header_rec.owner_sales_group_id <> FND_API.G_MISS_NUM )
2171       THEN
2172 	  update as_accesses_all
2173 	  set object_version_number =  nvl(object_version_number,0) + 1, owner_flag = null,
2174               last_update_date = SYSDATE,
2175               last_updated_by = FND_GLOBAL.USER_ID,
2176               last_update_login = FND_GLOBAL.CONC_LOGIN_ID
2177 	  where lead_id = l_Header_rec.lead_id;
2178 
2179 	  update as_accesses_all
2180 	  set object_version_number =  nvl(object_version_number,0) + 1, owner_flag = 'Y',
2181 	      freeze_flag = 'Y',
2182 	      team_leader_flag = 'Y', -- Fix for bug# 4196657
2183               last_update_date = SYSDATE,
2184               last_updated_by = FND_GLOBAL.USER_ID,
2185               last_update_login = FND_GLOBAL.CONC_LOGIN_ID
2186 	  where access_id in
2187 		( select min(access_id)
2188 		  from as_accesses_all
2189 		  where lead_id = l_Header_rec.lead_id
2190 		  and sales_group_id = l_header_rec.owner_sales_group_id
2191 		  and salesforce_id = l_header_rec.owner_salesforce_id );
2192 
2193 	  IF (SQL%NOTFOUND) THEN
2194 
2195 	        -- create a salesteam for the new owner
2196       		l_Sales_Team_Rec.last_update_date      := SYSDATE;
2197       		l_Sales_Team_Rec.last_updated_by       := FND_GLOBAL.USER_ID;
2198       		l_Sales_Team_Rec.creation_date         := SYSDATE;
2199       		l_Sales_Team_Rec.created_by            := FND_GLOBAL.USER_ID;
2200       		l_Sales_Team_Rec.last_update_login     := FND_GLOBAL.CONC_LOGIN_ID;
2201       		l_Sales_Team_Rec.customer_id           := l_Customer_Id;
2202       		l_Sales_Team_Rec.address_id            := l_Address_Id;
2203      		l_Sales_Team_Rec.lead_id               := l_header_rec.lead_id;
2204       		l_Sales_Team_Rec.salesforce_id         := l_header_rec.owner_salesforce_id;
2205       		l_sales_team_rec.sales_group_id        := l_header_rec.owner_sales_group_id;
2206       		l_sales_team_rec.salesforce_role_code  := FND_PROFILE.Value('AS_DEF_OPP_ST_ROLE');
2207       		l_Sales_Team_Rec.team_leader_flag      := 'Y';
2208       		l_Sales_Team_Rec.reassign_flag         := 'N';
2209       		l_Sales_Team_Rec.freeze_flag           := 'Y';
2210 		--l_Sales_Team_Rec.owner_flag            := 'Y';
2211 
2212 	     	OPEN get_person_id_csr(l_header_rec.owner_salesforce_id);
2213       	  	FETCH get_person_id_csr into l_Sales_Team_Rec.person_id;
2214       	  	CLOSE get_person_id_csr;
2215 
2216       		-- Debug Message
2217       		IF l_debug THEN
2218       		AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2219                                    'Calling Create_SalesTeam');
2220 
2221       		END IF;
2222 
2223       		AS_ACCESS_PUB.Create_SalesTeam (
2224          		p_api_version_number         => 2.0
2225         		,p_init_msg_list              => FND_API.G_FALSE
2226         		,p_commit                     => FND_API.G_FALSE
2227         		,p_validation_level           => p_Validation_Level
2228         		,p_access_profile_rec         => l_access_profile_rec
2229         		,p_check_access_flag          => 'N' -- P_Check_Access_flag
2230         		,p_admin_flag                 => P_Admin_Flag
2231         		,p_admin_group_id             => P_Admin_Group_Id
2232         		,p_identity_salesforce_id     => P_Identity_Salesforce_Id
2233         		,p_sales_team_rec             => l_Sales_Team_Rec
2234         		,X_Return_Status              => x_Return_Status
2235         		,X_Msg_Count                  => X_Msg_Count
2236         		,X_Msg_Data                   => X_Msg_Data
2237         		,x_access_id                  => l_Access_Id
2238       		);
2239 
2240       		-- Debug Message
2241       		IF l_debug THEN
2242       		AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2243                            'Create_owner_ST :l_access_id = ' || l_access_id);
2244 		END IF;
2245 
2246 
2247       		IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2248            		RAISE FND_API.G_EXC_ERROR;
2249       		END IF;
2250 
2251 		UPDATE AS_ACCESSES_ALL
2252 		SET object_version_number =  nvl(object_version_number,0) + 1, OWNER_FLAG = 'Y'
2253 		WHERE access_id = l_access_id;
2254 
2255 	  END IF; -- NOTFOUND
2256 
2257       ELSIF (l_header_rec.owner_salesforce_id IS NULL) AND
2258 	    (l_header_rec.owner_sales_group_id IS NULL) THEN
2259 
2260 	  update as_accesses_all
2261 	  set object_version_number =  nvl(object_version_number,0) + 1, owner_flag = null,
2262               last_update_date = SYSDATE,
2263               last_updated_by = FND_GLOBAL.USER_ID,
2264               last_update_login = FND_GLOBAL.CONC_LOGIN_ID
2265 	  where lead_id = l_Header_rec.lead_id;
2266 
2267       END IF;
2268 
2269       -- Assign/Reassign the territory resources for the opportunity
2270 
2271       -- Debug Message
2272       IF l_debug THEN
2273 	      AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Calling Opportunity Real Time API');
2274       END IF;
2275 
2276       AS_RTTAP_OPPTY.RTTAP_WRAPPER(
2277     	  P_Api_Version_Number         => 1.0,
2278     	  P_Init_Msg_List              => FND_API.G_FALSE,
2279     	  P_Commit                     => FND_API.G_FALSE,
2280     	  p_lead_id		       => l_header_rec.lead_id,
2281      	  X_Return_Status              => x_return_status,
2282     	  X_Msg_Count                  => x_msg_count,
2283     	  X_Msg_Data                   => x_msg_data
2284     	);
2285 
2286         IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2287             IF l_debug THEN
2288             	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Opportunity Real Time API fail');
2289             END IF;
2290             RAISE FND_API.G_EXC_ERROR;
2291         END IF;
2292 
2293 
2294       -- Debug Message
2295       IF l_debug THEN
2296       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Calling Recreate_tasks');
2297       END IF;
2298 
2299 
2300       l_new_SALES_METHODOLOGY_ID := l_header_rec.SALES_METHODOLOGY_ID;
2301       l_new_SALES_STAGE_ID := l_header_rec.SALES_STAGE_ID;
2302 
2303       IF l_new_SALES_METHODOLOGY_ID = FND_API.G_MISS_NUM THEN
2304 	 l_new_SALES_METHODOLOGY_ID := l_old_sales_methodology_id;
2305       END IF;
2306       IF l_new_SALES_STAGE_ID = FND_API.G_MISS_NUM THEN
2307 	 l_new_SALES_STAGE_ID := l_old_sales_stage_id;
2308       END IF;
2309 
2310       IF l_old_sales_methodology_id IS NOT NULL AND
2311 	 nvl(l_new_SALES_METHODOLOGY_ID, -99) <> l_old_sales_methodology_id THEN
2312 
2313 	    IF l_debug THEN
2314 	    AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2315                       'Should not change Sales methodology');
2316 	    END IF;
2317 
2318             AS_UTILITY_PVT.Set_Message(
2319                   p_module        => l_module,
2320                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2321                   p_msg_name      => 'API_NO_UPDATE_SALES_METHODOLOGY');
2322 
2323 
2324             RAISE FND_API.G_EXC_ERROR;
2325       END IF;
2326 
2327       Recreate_tasks(
2328     		p_LEAD_ID		 	=> l_header_rec.lead_id,
2329     		p_RESOURCE_ID			=> p_identity_salesforce_id,
2330     		p_OLD_SALES_METHODOLOGY_ID	=> l_old_sales_methodology_id,
2331     		p_OLD_SALES_STAGE_ID		=> l_old_sales_stage_id,
2332     		p_SALES_METHODOLOGY_ID		=> l_new_SALES_METHODOLOGY_ID,
2333     		p_SALES_STAGE_ID		=> l_new_SALES_STAGE_ID,
2334     		x_return_status 		=> x_return_status,
2335                 X_Msg_Count                     => X_Msg_Count,
2336                 X_Msg_Data                      => X_Msg_Data,
2337 		X_Warning_Message		=> l_warning_msg );
2338 
2339       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2340             IF l_debug THEN
2341             AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2342                   'Recreate_tasks fail');
2343 	    END IF;
2344 
2345             RAISE FND_API.G_EXC_ERROR;
2346       END IF;
2347 /*
2348       -- Create lead competitor
2349       IF (l_header_rec.CLOSE_COMPETITOR_ID  IS NOT NULL) AND
2350 	 (l_header_rec.CLOSE_COMPETITOR_ID  <> FND_API.G_MISS_NUM ) THEN
2351 
2352           Create_lead_competitor(
2353       		P_Api_Version_Number         => 2.0,
2354       		P_Init_Msg_List              => FND_API.G_FALSE,
2355       		P_Commit                     => p_commit,
2356       		P_Validation_Level           => P_Validation_Level,
2357       		P_Check_Access_Flag          => p_check_access_flag,
2358       		P_Admin_Flag                 => P_Admin_Flag,
2359       		P_Admin_Group_Id             => P_Admin_Group_Id,
2360       		P_Identity_Salesforce_Id     => P_Identity_Salesforce_Id,
2361       		P_Partner_Cont_Party_Id	     => p_partner_cont_party_id,
2362       		P_Profile_Tbl                => P_Profile_tbl,
2363     		p_LEAD_ID		     => l_header_rec.lead_id,
2364 		p_COMPETITOR_ID		     => l_header_rec.CLOSE_COMPETITOR_ID,
2365       		X_Return_Status              => x_return_status,
2366       		X_Msg_Count                  => x_msg_count,
2367       		X_Msg_Data                   => x_msg_data);
2368 
2369           IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2370                 IF l_debug THEN
2371                 AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2372                       'Create lead competitor fail');
2373                 END IF;
2374 
2375                 RAISE FND_API.G_EXC_ERROR;
2376           END IF;
2377 
2378       END IF;
2379 */
2380 
2381       -- Update competitor Products for the win/loss status
2382       IF (l_header_rec.lead_id IS NOT NULL)AND
2383          (l_header_rec.STATUS_CODE IS NOT NULL) AND
2384 	 (l_header_rec.STATUS_CODE <> FND_API.G_MISS_CHAR ) THEN
2385 
2386 	  Update_Competitor_Products(
2387     		p_LEAD_ID		=> l_header_rec.LEAD_ID,
2388     		p_STATUS_CODE		=> l_header_rec.STATUS_CODE,
2389     		x_return_status 	=> x_return_status);
2390 
2391           IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2392                 IF l_debug THEN
2393                 AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2394                       'Update competitor Products  fail');
2395                 END IF;
2396                 RAISE FND_API.G_EXC_ERROR;
2397           END IF;
2398       END IF;
2399 
2400 
2401 
2402       --
2403       -- End of API body.
2404       --
2405 
2406       -- Standard check for p_commit
2407       IF FND_API.to_Boolean( p_commit )
2408       THEN
2409           COMMIT WORK;
2410       END IF;
2411 
2412 
2413       -- Debug Message
2414       IF l_debug THEN
2415       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2416                                    'Private API: ' || l_api_name || ' end');
2417       END IF;
2418 
2419 
2420       -- Standard call to get message count and if count is 1, get message info.
2421       FND_MSG_PUB.Count_And_Get
2422       (  p_count          =>   x_msg_count,
2423          p_data           =>   x_msg_data
2424       );
2425 
2426       IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
2427         x_msg_data := l_winprob_warning_msg || '#####'|| l_warning_msg;
2428 	--x_msg_data := l_warning_msg;
2429       END IF;
2430 
2431 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
2432 /*
2433       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is
2434       -- invoked for customization purpose
2435       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
2436       THEN
2437           AS_CALLOUT_PKG.Update_opp_header_AU(
2438                   p_api_version_number   =>  2.0,
2439                   p_init_msg_list        =>  FND_API.G_FALSE,
2440                   p_commit               =>  FND_API.G_FALSE,
2441                   p_validation_level     =>  p_validation_level,
2442                   p_identity_salesforce_id => p_identity_salesforce_id,
2443                   P_Header_Rec      =>  l_Header_Rec,
2444           -- Hint: Add detail tables as parameter lists if it's master-detail
2445           --       relationship.
2446                   x_return_status        =>  x_return_status,
2447                   x_msg_count            =>  x_msg_count,
2448                   x_msg_data             =>  x_msg_data);
2449       END IF;
2450 */
2451       EXCEPTION
2452           WHEN FND_API.G_EXC_ERROR THEN
2453               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
2454                    P_MODULE => l_module
2455                   ,P_API_NAME => L_API_NAME
2456                   ,P_PKG_NAME => G_PKG_NAME
2457                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
2458                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
2459                   ,X_MSG_COUNT => X_MSG_COUNT
2460                   ,X_MSG_DATA => X_MSG_DATA
2461                   ,X_RETURN_STATUS => X_RETURN_STATUS);
2462 
2463           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2464               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
2465                    P_MODULE => l_module
2466                   ,P_API_NAME => L_API_NAME
2467                   ,P_PKG_NAME => G_PKG_NAME
2468                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
2469                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
2470                   ,X_MSG_COUNT => X_MSG_COUNT
2471                   ,X_MSG_DATA => X_MSG_DATA
2472                   ,X_RETURN_STATUS => X_RETURN_STATUS);
2473 
2474           WHEN OTHERS THEN
2475               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
2476                    P_MODULE => l_module
2477                   ,P_API_NAME => L_API_NAME
2478                   ,P_PKG_NAME => G_PKG_NAME
2479                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
2480                   ,P_SQLCODE => SQLCODE
2481                   ,P_SQLERRM => SQLERRM
2482                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
2483                   ,X_MSG_COUNT => X_MSG_COUNT
2484                   ,X_MSG_DATA => X_MSG_DATA
2485                   ,X_RETURN_STATUS => X_RETURN_STATUS);
2486 End Update_opp_header;
2487 
2488 
2489 PROCEDURE Delete_opp_header(
2490     P_Api_Version_Number         IN   NUMBER,
2491     P_Init_Msg_List              IN   VARCHAR2    := FND_API.G_FALSE,
2492     P_Commit                     IN   VARCHAR2    := FND_API.G_FALSE,
2493     p_validation_level           IN   NUMBER      := FND_API.G_VALID_LEVEL_FULL,
2494     P_Check_Access_Flag          IN   VARCHAR2    := FND_API.G_FALSE,
2495     P_Admin_Flag                 IN   VARCHAR2    := FND_API.G_FALSE,
2496     P_Admin_Group_Id             IN   NUMBER,
2497     P_Identity_Salesforce_Id     IN   NUMBER      := NULL,
2498     P_profile_tbl                IN   AS_UTILITY_PUB.PROFILE_TBL_TYPE,
2499     P_Partner_Cont_Party_id      IN   NUMBER      := FND_API.G_MISS_NUM,
2500     P_lead_id                    IN   NUMBER,
2501     X_Return_Status              OUT NOCOPY  VARCHAR2,
2502     X_Msg_Count                  OUT NOCOPY  NUMBER,
2503     X_Msg_Data                   OUT NOCOPY  VARCHAR2
2504     )
2505 
2506  IS
2507 Cursor C_Get_opp_header(c_LEAD_ID Number) IS
2508     Select LAST_UPDATE_DATE, FREEZE_FLAG
2509     FROM AS_LEADS
2510     WHERE LEAD_ID = c_LEAD_ID
2511     For Update NOWAIT;
2512 
2513 l_api_name                CONSTANT VARCHAR2(30) := 'Delete_opp_header';
2514 l_api_version_number      CONSTANT NUMBER   := 2.0;
2515 -- Local Variables
2516 l_identity_sales_member_rec   AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
2517 l_last_update_date      DATE;
2518 l_freeze_flag             VARCHAR2(1) := 'N'; -- solin, for bug 1554330
2519 l_allow_flag              VARCHAR2(1);        -- solin, for bug 1554330
2520 l_access_profile_rec      AS_ACCESS_PUB.ACCESS_PROFILE_REC_TYPE;
2521 l_access_flag             VARCHAR2(1);
2522 l_val                     VARCHAR2(1);
2523 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
2524 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Delete_opp_header';
2525 
2526  BEGIN
2527       -- Standard Start of API savepoint
2528       SAVEPOINT DELETE_OPP_HEADER_PVT;
2529 
2530       -- Standard call to check for call compatibility.
2531       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
2532                          	             p_api_version_number,
2533                                            l_api_name,
2534                                            G_PKG_NAME)
2535       THEN
2536           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2537       END IF;
2538 
2539 
2540       -- Initialize message list if p_init_msg_list is set to TRUE.
2541       IF FND_API.to_Boolean( p_init_msg_list )
2542       THEN
2543           FND_MSG_PUB.initialize;
2544       END IF;
2545 
2546 
2547       -- Debug Message
2548       IF l_debug THEN
2549       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2550                                    'Private API: ' || l_api_name || ' start');
2551       END IF;
2552 
2553 
2554       -- Initialize API return status to SUCCESS
2555       x_return_status := FND_API.G_RET_STS_SUCCESS;
2556 
2557       --
2558       -- Api body
2559       --
2560 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
2561 /*
2562       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y', callout procedure is
2563       -- invoked for customization purpose
2564       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
2565       THEN
2566           AS_CALLOUT_PKG.Delete_opp_header_BU(
2567                   p_api_version_number   =>  2.0,
2568                   p_init_msg_list        =>  FND_API.G_FALSE,
2569                   p_commit               =>  FND_API.G_FALSE,
2570                   p_validation_level     =>  p_validation_level,
2571                   p_identity_salesforce_id => p_identity_salesforce_id,
2572                   P_Header_Rec      =>  p_Header_Rec,
2573           -- Hint: Add detail tables as parameter lists if it's master-detail
2574           -- relationship.
2575                   x_return_status        =>  x_return_status,
2576                   x_msg_count            =>  x_msg_count,
2577                   x_msg_data             =>  x_msg_data);
2578       END IF;
2579 */
2580 
2581       IF (p_validation_level = fnd_api.g_valid_level_full)
2582       THEN
2583           AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
2584               p_api_version_number => 2.0
2585              ,p_init_msg_list      => p_init_msg_list
2586              ,p_salesforce_id => p_identity_salesforce_id
2587              ,p_admin_group_id => p_admin_group_id
2588              ,x_return_status => x_return_status
2589              ,x_msg_count => x_msg_count
2590              ,x_msg_data => x_msg_data
2591              ,x_sales_member_rec => l_identity_sales_member_rec);
2592       END IF;
2593 
2594       -- Debug Message
2595       IF l_debug THEN
2596       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Open Cursor to Select');
2597       END IF;
2598 
2599       Open C_Get_opp_header( p_LEAD_ID);
2600       Fetch C_Get_opp_header into l_last_update_date, l_freeze_flag;
2601 
2602       If ( C_Get_opp_header%NOTFOUND) Then
2603           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
2604           THEN
2605               -- FND_MESSAGE.Set_Name('AS', 'API_MISSING_UPDATE_TARGET');
2606               -- FND_MESSAGE.Set_Token ('INFO', 'opp_header', FALSE);
2607               -- FND_MSG_PUB.Add;
2608 
2609               AS_UTILITY_PVT.Set_Message(
2610                   p_module        => l_module,
2611                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2612                   p_msg_name      => 'API_MISSING_OPP_HEADER_UPDATE');
2613 
2614           END IF;
2615           raise FND_API.G_EXC_ERROR;
2616       END IF;
2617 
2618       -- Debug Message
2619       IF l_debug THEN
2620       	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Close Cursor');
2621       END IF;
2622       close     C_Get_opp_header;
2623 
2624 /*
2625       If (p_Header_rec.last_update_date is NULL or
2626           p_Header_rec.last_update_date = FND_API.G_MISS_Date ) Then
2627           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
2628           THEN
2629               -- FND_MESSAGE.Set_Name('AS', 'API_MISSING_ID');
2630               -- FND_MESSAGE.Set_Token('COLUMN', 'Last_Update_Date', FALSE);
2631               -- FND_MSG_PUB.ADD;
2632 
2633               AS_UTILITY_PVT.Set_Message(
2634                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2635                   p_msg_name      => 'API_MISSING_LAST_UPDATE_DATE');
2636 
2637           END IF;
2638           raise FND_API.G_EXC_ERROR;
2639       End if;
2640       -- Check Whether record has been changed by someone else
2641       If (p_Header_rec.last_update_date <> l_last_update_date) Then
2642           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
2643           THEN
2644               -- FND_MESSAGE.Set_Name('AS', 'API_RECORD_CHANGED');
2645               -- FND_MESSAGE.Set_Token('INFO', 'opp_header', FALSE);
2646               -- FND_MSG_PUB.ADD;
2647 
2648               AS_UTILITY_PVT.Set_Message(
2649                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2650                   p_msg_name      => 'API_OPP_HEADER_CHANGED');
2651 
2652           END IF;
2653           raise FND_API.G_EXC_ERROR;
2654       End if;
2655 */
2656 
2657 
2658 /*
2659       -- Debug message
2660       IF l_debug THEN
2661       	AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: Validate_opp_header');
2662       END IF;
2663 
2664       -- Invoke validation procedures
2665       Validate_opp_header(
2666           p_init_msg_list    => FND_API.G_FALSE,
2667           p_validation_level => p_validation_level,
2668           p_validation_mode  => AS_UTILITY_PVT.G_UPDATE,
2669           P_Header_Rec       => p_Header_Rec,
2670           x_return_status    => x_return_status,
2671           x_msg_count        => x_msg_count,
2672           x_msg_data         => x_msg_data);
2673 
2674       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2675           RAISE FND_API.G_EXC_ERROR;
2676       END IF;
2677 */
2678 
2679 
2680       -- Call Get_Access_Profiles to get access_profile_rec
2681       AS_OPPORTUNITY_PUB.Get_Access_Profiles(
2682           p_profile_tbl         => p_profile_tbl,
2683           x_access_profile_rec  => l_access_profile_rec);
2684 
2685 
2686       -- Access checking
2687       IF p_check_access_flag = 'Y'
2688       THEN
2689           -- Please un-comment here and complete it
2690           AS_ACCESS_PUB.Has_updateOpportunityAccess(
2691               p_api_version_number     => 2.0,
2692               p_init_msg_list          => p_init_msg_list,
2693               p_validation_level       => p_validation_level,
2694               p_access_profile_rec     => l_access_profile_rec,
2695               p_admin_flag             => p_admin_flag,
2696               p_admin_group_id         => p_admin_group_id,
2697               p_person_id              =>
2698                                 l_identity_sales_member_rec.employee_person_id,
2699               p_opportunity_id         => P_lead_id,
2700               p_check_access_flag      => 'Y',
2701               p_identity_salesforce_id => p_identity_salesforce_id,
2702               p_partner_cont_party_id  => NULL,
2703               x_return_status          => x_return_status,
2704               x_msg_count              => x_msg_count,
2705               x_msg_data               => x_msg_data,
2706               x_update_access_flag       => l_access_flag);
2707 
2708           IF l_access_flag <> 'Y' THEN
2709               AS_UTILITY_PVT.Set_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
2710                                            'API_NO_UPDATE_PRIVILEGE');
2711               RAISE FND_API.G_EXC_ERROR;
2712           END IF;
2713 
2714           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2715               RAISE FND_API.G_EXC_ERROR;
2716           END IF;
2717 
2718       END IF;
2719 
2720       -- solin, for bug 1554330
2721       IF l_freeze_flag = 'Y'
2722       THEN
2723           l_allow_flag := NVL(FND_PROFILE.VALUE('AS_ALLOW_UPDATE_FROZEN_OPP'),'Y');
2724           IF l_allow_flag <> 'Y' THEN
2725               AS_UTILITY_PVT.Set_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
2726                                            'API_OPP_FROZEN');
2727               RAISE FND_API.G_EXC_ERROR;
2728           END IF;
2729       END IF;
2730       -- end 1554330
2731 
2732 
2733       -- Hint: Add corresponding Master-Detail business logic here if necessary.
2734 
2735       -- Debug Message
2736       IF l_debug THEN
2737       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2738                                    'Private API: Calling update table handler');
2739 
2740       END IF;
2741 
2742       -- Invoke table handler(AS_LEADS_PKG.Update_Row)
2743       AS_LEADS_PKG.Update_Row(
2744           p_LEAD_ID  => p_LEAD_ID,
2745           p_LAST_UPDATE_DATE  => SYSDATE,
2746           p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID,
2747           p_CREATION_DATE  => FND_API.G_MISS_DATE,
2748           p_CREATED_BY  => FND_API.G_MISS_NUM,
2749           p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID,
2750           p_REQUEST_ID  => FND_API.G_MISS_NUM,
2751           p_PROGRAM_APPLICATION_ID  => FND_API.G_MISS_NUM,
2752           p_PROGRAM_ID  => FND_API.G_MISS_NUM,
2753           p_PROGRAM_UPDATE_DATE  => FND_API.G_MISS_DATE,
2754           p_LEAD_NUMBER  => FND_API.G_MISS_CHAR,
2755           p_STATUS  => FND_API.G_MISS_CHAR,
2756           p_CUSTOMER_ID  => FND_API.G_MISS_NUM,
2757           p_ADDRESS_ID  => FND_API.G_MISS_NUM,
2758           p_SALES_STAGE_ID  => FND_API.G_MISS_NUM,
2759           p_INITIATING_CONTACT_ID  => FND_API.G_MISS_NUM,
2760           p_CHANNEL_CODE  => FND_API.G_MISS_CHAR,
2761           p_TOTAL_AMOUNT  => FND_API.G_MISS_NUM,
2762           p_CURRENCY_CODE  => FND_API.G_MISS_CHAR,
2763           p_DECISION_DATE  => FND_API.G_MISS_DATE,
2764           p_WIN_PROBABILITY  => FND_API.G_MISS_NUM,
2765           p_CLOSE_REASON  => FND_API.G_MISS_CHAR,
2766           p_CLOSE_COMPETITOR_CODE  => FND_API.G_MISS_CHAR,
2767           p_CLOSE_COMPETITOR  => FND_API.G_MISS_CHAR,
2768           p_CLOSE_COMMENT  => FND_API.G_MISS_CHAR,
2769           p_DESCRIPTION  => FND_API.G_MISS_CHAR,
2770           p_RANK  => FND_API.G_MISS_CHAR,
2771           p_SOURCE_PROMOTION_ID  => FND_API.G_MISS_NUM,
2772           p_END_USER_CUSTOMER_ID  => FND_API.G_MISS_NUM,
2773           p_END_USER_ADDRESS_ID  => FND_API.G_MISS_NUM,
2774           p_OWNER_SALESFORCE_ID  => FND_API.G_MISS_NUM,
2775           p_OWNER_SALES_GROUP_ID => FND_API.G_MISS_NUM,
2776           --p_OWNER_ASSIGN_DATE  => FND_API.G_MISS_DATE,
2777           p_ORG_ID  => FND_API.G_MISS_NUM,
2778           p_NO_OPP_ALLOWED_FLAG  => FND_API.G_MISS_CHAR,
2779           p_DELETE_ALLOWED_FLAG  => FND_API.G_MISS_CHAR,
2780           p_ATTRIBUTE_CATEGORY  => FND_API.G_MISS_CHAR,
2781           p_ATTRIBUTE1  => FND_API.G_MISS_CHAR,
2782           p_ATTRIBUTE2  => FND_API.G_MISS_CHAR,
2783           p_ATTRIBUTE3  => FND_API.G_MISS_CHAR,
2784           p_ATTRIBUTE4  => FND_API.G_MISS_CHAR,
2785           p_ATTRIBUTE5  => FND_API.G_MISS_CHAR,
2786           p_ATTRIBUTE6  => FND_API.G_MISS_CHAR,
2787           p_ATTRIBUTE7  => FND_API.G_MISS_CHAR,
2788           p_ATTRIBUTE8  => FND_API.G_MISS_CHAR,
2789           p_ATTRIBUTE9  => FND_API.G_MISS_CHAR,
2790           p_ATTRIBUTE10  => FND_API.G_MISS_CHAR,
2791           p_ATTRIBUTE11  => FND_API.G_MISS_CHAR,
2792           p_ATTRIBUTE12  => FND_API.G_MISS_CHAR,
2793           p_ATTRIBUTE13  => FND_API.G_MISS_CHAR,
2794           p_ATTRIBUTE14  => FND_API.G_MISS_CHAR,
2795           p_ATTRIBUTE15  => FND_API.G_MISS_CHAR,
2796           p_PARENT_PROJECT  => FND_API.G_MISS_CHAR,
2797           p_LEAD_SOURCE_CODE  => FND_API.G_MISS_CHAR,
2798           p_ORIG_SYSTEM_REFERENCE  => FND_API.G_MISS_CHAR,
2799           p_CLOSE_COMPETITOR_ID  => FND_API.G_MISS_NUM,
2800           p_END_USER_CUSTOMER_NAME  => FND_API.G_MISS_CHAR,
2801           p_PRICE_LIST_ID  => FND_API.G_MISS_NUM,
2802           p_DELETED_FLAG  => 'Y',
2803           p_AUTO_ASSIGNMENT_TYPE  => FND_API.G_MISS_CHAR,
2804           p_PRM_ASSIGNMENT_TYPE  => FND_API.G_MISS_CHAR,
2805           p_CUSTOMER_BUDGET  => FND_API.G_MISS_NUM,
2806           p_METHODOLOGY_CODE  => FND_API.G_MISS_CHAR,
2807           p_SALES_METHODOLOGY_ID  => FND_API.G_MISS_NUM,
2808           p_ORIGINAL_LEAD_ID  => FND_API.G_MISS_NUM,
2809           p_DECISION_TIMEFRAME_CODE  => FND_API.G_MISS_CHAR,
2810           p_INC_PARTNER_RESOURCE_ID=>FND_API.G_MISS_NUM,
2811           p_INC_PARTNER_PARTY_ID  => FND_API.G_MISS_NUM,
2812           p_OFFER_ID  => FND_API.G_MISS_NUM,
2813           p_VEHICLE_RESPONSE_CODE  => FND_API.G_MISS_CHAR,
2814           p_BUDGET_STATUS_CODE  => FND_API.G_MISS_CHAR,
2815           p_FOLLOWUP_DATE  => FND_API.G_MISS_DATE,
2816           p_PRM_EXEC_SPONSOR_FLAG  => FND_API.G_MISS_CHAR,
2817           p_PRM_PRJ_LEAD_IN_PLACE_FLAG=>FND_API.G_MISS_CHAR,
2818           p_PRM_IND_CLASSIFICATION_CODE  =>
2819                                       FND_API.G_MISS_CHAR,
2820           p_PRM_LEAD_TYPE  => FND_API.G_MISS_CHAR,
2821           p_FREEZE_FLAG => FND_API.G_MISS_CHAR,
2822           p_PRM_REFERRAL_CODE => FND_API.G_MISS_CHAR);
2823       --
2824       -- End of API body.
2825       --
2826 
2827       -- Standard check for p_commit
2828       IF FND_API.to_Boolean( p_commit )
2829       THEN
2830           COMMIT WORK;
2831       END IF;
2832 
2833 
2834       -- Debug Message
2835       IF l_debug THEN
2836       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
2837                                    'Private API: ' || l_api_name || ' end');
2838       END IF;
2839 
2840 
2841 
2842       -- Standard call to get message count and if count is 1, get message info.
2843       FND_MSG_PUB.Count_And_Get
2844       (  p_count          =>   x_msg_count,
2845          p_data           =>   x_msg_data
2846       );
2847 
2848 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
2849 /*
2850       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is
2851       -- invoked for customization purpose
2852       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
2853       THEN
2854           AS_CALLOUT_PKG.Delete_opp_header_AU(
2855                   p_api_version_number   =>  2.0,
2856                   p_init_msg_list        =>  FND_API.G_FALSE,
2857                   p_commit               =>  FND_API.G_FALSE,
2858                   p_validation_level     =>  p_validation_level,
2859                   p_identity_salesforce_id => p_identity_salesforce_id,
2860                   P_Header_Rec      =>  P_Header_Rec,
2861           -- Hint: Add detail tables as parameter lists if it's master-detail
2862           --       relationship.
2863                   x_return_status        =>  x_return_status,
2864                   x_msg_count            =>  x_msg_count,
2865                   x_msg_data             =>  x_msg_data);
2866       END IF;
2867 */
2868       EXCEPTION
2869           WHEN FND_API.G_EXC_ERROR THEN
2870               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
2871                    P_MODULE => l_module
2872                   ,P_API_NAME => L_API_NAME
2873                   ,P_PKG_NAME => G_PKG_NAME
2874                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
2875                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
2876                   ,X_MSG_COUNT => X_MSG_COUNT
2877                   ,X_MSG_DATA => X_MSG_DATA
2878                   ,X_RETURN_STATUS => X_RETURN_STATUS);
2879 
2880           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2881               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
2882                    P_MODULE => l_module
2883                   ,P_API_NAME => L_API_NAME
2884                   ,P_PKG_NAME => G_PKG_NAME
2885                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
2886                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
2887                   ,X_MSG_COUNT => X_MSG_COUNT
2888                   ,X_MSG_DATA => X_MSG_DATA
2889                   ,X_RETURN_STATUS => X_RETURN_STATUS);
2890 
2891           WHEN OTHERS THEN
2892               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
2893                    P_MODULE => l_module
2894                   ,P_API_NAME => L_API_NAME
2895                   ,P_PKG_NAME => G_PKG_NAME
2896                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
2897                   ,P_SQLCODE => SQLCODE
2898                   ,P_SQLERRM => SQLERRM
2899                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
2900                   ,X_MSG_COUNT => X_MSG_COUNT
2901                   ,X_MSG_DATA => X_MSG_DATA
2902                   ,X_RETURN_STATUS => X_RETURN_STATUS);
2903 End Delete_opp_header;
2904 
2905 
2906 --
2907 -- Item-level validation procedures
2908 --
2909 
2910 PROCEDURE Validate_LEAD_ID (
2911     P_Init_Msg_List       IN   VARCHAR2     := FND_API.G_FALSE,
2912     P_Validation_mode     IN   VARCHAR2,
2913     P_LEAD_ID             IN   NUMBER,
2914     X_Item_Property_Rec   OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
2915     X_Return_Status       OUT NOCOPY  VARCHAR2,
2916     X_Msg_Count           OUT NOCOPY  NUMBER,
2917     X_Msg_Data            OUT NOCOPY  VARCHAR2
2918     )
2919 IS
2920   CURSOR C_Lead_Id_Exists (c_Lead_Id NUMBER) IS
2921       SELECT 'X'
2922       FROM  as_leads
2923       WHERE lead_id = c_Lead_Id;
2924 
2925   l_val   VARCHAR2(1);
2926   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
2927   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_LEAD_ID';
2928 
2929 BEGIN
2930       -- Initialize message list if p_init_msg_list is set to TRUE.
2931       IF FND_API.to_Boolean( p_init_msg_list )
2932       THEN
2933           FND_MSG_PUB.initialize;
2934       END IF;
2935 
2936       -- Initialize API return status to SUCCESS
2937       x_return_status := FND_API.G_RET_STS_SUCCESS;
2938 
2939       -- Calling from Create API
2940       IF(p_validation_mode = AS_UTILITY_PVT.G_CREATE)
2941       THEN
2942           IF (p_LEAD_ID is NOT NULL) and (p_LEAD_ID <> FND_API.G_MISS_NUM)
2943           THEN
2944               OPEN  C_Lead_Id_Exists (p_Lead_Id);
2945               FETCH C_Lead_Id_Exists into l_val;
2946 
2947               IF C_Lead_Id_Exists%FOUND THEN
2948                   -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
2949                   --                           'Private API: LEAD_ID exist');
2950 
2951                   AS_UTILITY_PVT.Set_Message(
2952                       p_module        => l_module,
2953                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2954                       p_msg_name      => 'API_DUPLICATE_LEAD_ID',
2955                       p_token1        => 'VALUE',
2956                       p_token1_value  => p_LEAD_ID );
2957 
2958                   x_return_status := FND_API.G_RET_STS_ERROR;
2959               END IF;
2960 
2961               CLOSE C_Lead_Id_Exists;
2962           END IF;
2963 
2964       -- Calling from Update API
2965       ELSIF(p_validation_mode = AS_UTILITY_PVT.G_UPDATE)
2966       THEN
2967           -- validate NOT NULL column
2968           IF (p_LEAD_ID is NULL) or (p_LEAD_ID = FND_API.G_MISS_NUM)
2969           THEN
2970               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
2971               --          'Private API: Violate NOT NULL constraint(LEAD_ID)');
2972 
2973               AS_UTILITY_PVT.Set_Message(
2974                   p_module        => l_module,
2975                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2976                   p_msg_name      => 'API_MISSING_LEAD_ID');
2977 
2978               x_return_status := FND_API.G_RET_STS_ERROR;
2979           ELSE
2980               OPEN  C_Lead_Id_Exists (p_Lead_Id);
2981               FETCH C_Lead_Id_Exists into l_val;
2982 
2983               IF C_Lead_Id_Exists%NOTFOUND
2984               THEN
2985                   -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
2986                   --                     'Private API: LEAD_ID is not valid');
2987 
2988                   AS_UTILITY_PVT.Set_Message(
2989                       p_module        => l_module,
2990                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
2991                       p_msg_name      => 'API_INVALID_LEAD_ID',
2992                       p_token1        => 'VALUE',
2993                       p_token1_value  => p_LEAD_ID );
2994 
2995                   x_return_status := FND_API.G_RET_STS_ERROR;
2996               END IF;
2997 
2998               CLOSE C_Lead_Id_Exists;
2999           END IF;
3000       END IF;
3001 
3002       -- Standard call to get message count and if count is 1, get message info.
3003       FND_MSG_PUB.Count_And_Get
3004       (  p_count          =>   x_msg_count,
3005          p_data           =>   x_msg_data
3006       );
3007 
3008 END Validate_LEAD_ID;
3009 
3010 
3011 /*
3012 PROCEDURE Validate_LEAD_NUMBER (
3013     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
3014     P_Validation_mode    IN   VARCHAR2,
3015     P_LEAD_NUMBER        IN   VARCHAR2,
3016     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3017     X_Return_Status      OUT NOCOPY  VARCHAR2,
3018     X_Msg_Count          OUT NOCOPY  NUMBER,
3019     X_Msg_Data           OUT NOCOPY  VARCHAR2
3020     )
3021 IS
3022   CURSOR C_LEAD_NUMBER_Exists (c_LEAD_NUMBER CHAR) IS
3023       SELECT 'X'
3024       FROM  as_leads
3025       WHERE lead_number = c_lead_number;
3026 
3027   l_val   VARCHAR2(1);
3028   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3029 
3030 BEGIN
3031 
3032       -- Initialize message list if p_init_msg_list is set to TRUE.
3033       IF FND_API.to_Boolean( p_init_msg_list )
3034       THEN
3035           FND_MSG_PUB.initialize;
3036       END IF;
3037 
3038 
3039       -- Initialize API return status to SUCCESS
3040       x_return_status := FND_API.G_RET_STS_SUCCESS;
3041 
3042       IF(p_LEAD_NUMBER is NULL)
3043       THEN
3044           -- validate NOT NULL column
3045           -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3046           --          'Private API: Violate NOT NULL constraint(LEAD_NUMBER)');
3047 
3048           AS_UTILITY_PVT.Set_Message(
3049               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3050               p_msg_name      => 'API_MISSING_LEAD_NUMBER');
3051 
3052           x_return_status := FND_API.G_RET_STS_ERROR;
3053       ELSE
3054           -- Calling from Create API, LEAD_NUMBER can not be G_MISS_CHAR
3055           IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE) and
3056              (p_LEAD_NUMBER = FND_API.G_MISS_CHAR)
3057           THEN
3058               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3059               --                           'Private API: missing LEAD_NUMBER');
3060 
3061               AS_UTILITY_PVT.Set_Message(
3062                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3063                   p_msg_name      => 'API_MISSING_LEAD_NUMBER');
3064 
3065           END IF;
3066 
3067           -- LEAD_NUMBER should be unique
3068           IF (p_LEAD_NUMBER <> FND_API.G_MISS_CHAR)
3069           THEN
3070               OPEN  C_LEAD_NUMBER_Exists (p_LEAD_NUMBER);
3071               FETCH C_LEAD_NUMBER_Exists into l_val;
3072 
3073               IF C_LEAD_NUMBER_Exists%FOUND THEN
3074                   -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3075                   --                       'Private API: LEAD_NUMBER exist');
3076 
3077                   AS_UTILITY_PVT.Set_Message(
3078                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3079                       p_msg_name      => 'API_DUPLICATE_LEAD_NUMBER',
3080                       p_token1        => 'VALUE',
3081                       p_token1_value  => p_LEAD_NUMBER );
3082 
3083                   x_return_status := FND_API.G_RET_STS_ERROR;
3084               END IF;
3085 
3086               CLOSE C_LEAD_NUMBER_Exists;
3087           END IF;
3088       END IF;
3089 
3090       -- Standard call to get message count and if count is 1, get message info.
3091       FND_MSG_PUB.Count_And_Get
3092       (  p_count          =>   x_msg_count,
3093          p_data           =>   x_msg_data
3094       );
3095 
3096 END Validate_LEAD_NUMBER;
3097 */
3098 
3099 
3100 PROCEDURE Validate_STATUS (
3101     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
3102     P_Validation_mode    IN   VARCHAR2,
3103     P_STATUS             IN   VARCHAR2,
3104     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3105     X_Return_Status      OUT NOCOPY  VARCHAR2,
3106     X_Msg_Count          OUT NOCOPY  NUMBER,
3107     X_Msg_Data           OUT NOCOPY  VARCHAR2
3108     )
3109 IS
3110   CURSOR C_STATUS_Exists (c_status CHAR) IS
3111       SELECT 'X'
3112       FROM  as_statuses_b
3113       WHERE status_code = c_status
3114             and enabled_flag = 'Y'
3115             and opp_flag = 'Y';
3116 
3117   l_val   VARCHAR2(1);
3118   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3119   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_STATUS';
3120 
3121 BEGIN
3122 
3123       -- Initialize message list if p_init_msg_list is set to TRUE.
3124       IF FND_API.to_Boolean( p_init_msg_list )
3125       THEN
3126           FND_MSG_PUB.initialize;
3127       END IF;
3128 
3129 
3130       -- Initialize API return status to SUCCESS
3131       x_return_status := FND_API.G_RET_STS_SUCCESS;
3132 
3133       -- validate NOT NULL column
3134       IF(p_STATUS is NULL)
3135       THEN
3136           -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3137           --                'Private API: Violate NOT NULL constraint(STATUS)');
3138 
3139           AS_UTILITY_PVT.Set_Message(
3140               p_module        => l_module,
3141               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3142               p_msg_name      => 'API_MISSING_STATUS');
3143 
3144           x_return_status := FND_API.G_RET_STS_ERROR;
3145       ELSE
3146           -- Calling from Create API, STATUS can not be G_MISS_CHAR
3147           IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE) and
3148              (p_STATUS = FND_API.G_MISS_CHAR)
3149           THEN
3150               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3151               --            'Private API: STATUS is missing');
3152 
3153               AS_UTILITY_PVT.Set_Message(
3154                   p_module        => l_module,
3155                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3156                   p_msg_name      => 'API_MISSING_STATUS');
3157 
3158               x_return_status := FND_API.G_RET_STS_ERROR;
3159 
3160           -- STATUS should exist in as_statuses_b
3161           ELSIF(p_STATUS <> FND_API.G_MISS_CHAR)
3162           THEN
3163               OPEN  C_STATUS_Exists (p_STATUS);
3164               FETCH C_STATUS_Exists into l_val;
3165 
3166               IF C_STATUS_Exists%NOTFOUND THEN
3167                   -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3168                   --                          'Private API: STATUS is invalid');
3169 
3170                   AS_UTILITY_PVT.Set_Message(
3171                       p_module        => l_module,
3172                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3173                       p_msg_name      => 'API_INVALID_OPP_STATUS',
3174                       p_token1        => 'VALUE',
3175                       p_token1_value  => p_STATUS );
3176 
3177                   x_return_status := FND_API.G_RET_STS_ERROR;
3178               END IF;
3179 
3180               CLOSE C_STATUS_Exists;
3181           END IF;
3182       END IF;
3183 
3184       -- Standard call to get message count and if count is 1, get message info.
3185       FND_MSG_PUB.Count_And_Get
3186       (  p_count          =>   x_msg_count,
3187          p_data           =>   x_msg_data
3188       );
3189 
3190 END Validate_STATUS;
3191 
3192 
3193 -- Added for MOAC
3194 PROCEDURE Validate_ORG_ID (
3195     P_Init_Msg_List      IN   VARCHAR2 := FND_API.G_FALSE,
3196     P_Validation_mode    IN   VARCHAR2,
3197     P_ORG_ID             IN   NUMBER,
3198     X_Return_Status      OUT NOCOPY  VARCHAR2,
3199     X_Msg_Count          OUT NOCOPY  NUMBER,
3200     X_Msg_Data           OUT NOCOPY  VARCHAR2
3201     )
3202 IS
3203   CURSOR C_ORG_ID_Exists (c_ORG_ID NUMBER) IS
3204       SELECT 'X'
3205       FROM hr_operating_units hr
3206       WHERE hr.organization_id= P_ORG_ID
3207             and mo_global.check_access(hr.organization_id) = 'Y';
3208 
3209   l_val   VARCHAR2(1);
3210   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_ORG_ID';
3211 
3212 BEGIN
3213 
3214       -- Initialize message list if p_init_msg_list is set to TRUE.
3215       IF FND_API.to_Boolean( p_init_msg_list )
3216       THEN
3217           FND_MSG_PUB.initialize;
3218       END IF;
3219 
3220 
3221       -- Initialize API return status to SUCCESS
3222       x_return_status := FND_API.G_RET_STS_SUCCESS;
3223 
3224       IF p_validation_mode = AS_UTILITY_PVT.G_CREATE THEN
3225           OPEN  C_ORG_ID_Exists (p_ORG_ID);
3226           FETCH C_ORG_ID_Exists into l_val;
3227 
3228           IF C_ORG_ID_Exists%NOTFOUND THEN
3229 
3230               AS_UTILITY_PVT.Set_Message(
3231                   p_module        => l_module,
3232                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3233                   p_msg_name      => 'AS_ORG_NULL_OR_INVALID');
3234 
3235               x_return_status := FND_API.G_RET_STS_ERROR;
3236           END IF;
3237 
3238           CLOSE C_ORG_ID_Exists;
3239       END IF;
3240 
3241       -- Standard call to get message count and if count is 1, get message info.
3242       FND_MSG_PUB.Count_And_Get
3243       (  p_count          =>   x_msg_count,
3244          p_data           =>   x_msg_data
3245       );
3246 
3247 END Validate_ORG_ID;
3248 
3249 
3250 PROCEDURE Validate_SALES_STAGE_ID (
3251     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
3252     P_Validation_mode    IN   VARCHAR2,
3253     P_SALES_STAGE_ID     IN   NUMBER,
3254     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3255     X_Return_Status      OUT NOCOPY  VARCHAR2,
3256     X_Msg_Count          OUT NOCOPY  NUMBER,
3257     X_Msg_Data           OUT NOCOPY  VARCHAR2
3258     )
3259 IS
3260   CURSOR C_SALES_STAGE_ID_Exists (c_SALES_STAGE_ID NUMBER) IS
3261       SELECT 'X'
3262       FROM  as_sales_stages_all_b
3263       WHERE sales_stage_id = c_sales_stage_id
3264             -- ffang 091200 for bug 1403865
3265             and nvl(start_date_active, sysdate) <= sysdate
3266             and nvl(end_date_active, sysdate) >= sysdate
3267             and enabled_flag = 'Y';
3268             -- end ffang 091200
3269 
3270   l_val   VARCHAR2(1);
3271   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3272   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_SALES_STAGE_ID';
3273 
3274 BEGIN
3275 
3276       -- Initialize message list if p_init_msg_list is set to TRUE.
3277       IF FND_API.to_Boolean( p_init_msg_list )
3278       THEN
3279           FND_MSG_PUB.initialize;
3280       END IF;
3281 
3282 
3283       -- Initialize API return status to SUCCESS
3284       x_return_status := FND_API.G_RET_STS_SUCCESS;
3285 
3286       IF (p_SALES_STAGE_ID is NOT NULL) and
3287          (p_SALES_STAGE_ID <> FND_API.G_MISS_NUM)
3288       THEN
3289           -- SALES_STAGE_ID should exist in as_sales_stages_all_b
3290           OPEN  C_SALES_STAGE_ID_Exists (p_SALES_STAGE_ID);
3291           FETCH C_SALES_STAGE_ID_Exists into l_val;
3292 
3293           IF C_SALES_STAGE_ID_Exists%NOTFOUND THEN
3294               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3295               --                     'Private API: SALES_STAGE_ID is invalid');
3296 
3297               AS_UTILITY_PVT.Set_Message(
3298                   p_module        => l_module,
3299                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3300                   p_msg_name      => 'API_INVALID_SALES_STAGE_ID',
3301                   p_token1        => 'VALUE',
3302                   p_token1_value  => p_SALES_STAGE_ID );
3303 
3304               x_return_status := FND_API.G_RET_STS_ERROR;
3305           END IF;
3306 
3307           CLOSE C_SALES_STAGE_ID_Exists;
3308       END IF;
3309 
3310       -- Standard call to get message count and if count is 1, get message info.
3311       FND_MSG_PUB.Count_And_Get
3312       (  p_count          =>   x_msg_count,
3313          p_data           =>   x_msg_data
3314       );
3315 
3316 END Validate_SALES_STAGE_ID;
3317 
3318 
3319 PROCEDURE Validate_CHANNEL_CODE (
3320     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
3321     P_Validation_mode    IN   VARCHAR2,
3322     P_CHANNEL_CODE       IN   VARCHAR2,
3323     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3324     X_Return_Status      OUT NOCOPY  VARCHAR2,
3325     X_Msg_Count          OUT NOCOPY  NUMBER,
3326     X_Msg_Data           OUT NOCOPY  VARCHAR2
3327     )
3328 IS
3329   CURSOR C_CHANNEL_CODE_Exists (c_CHANNEL_CODE CHAR) IS
3330 	SELECT 'X'
3331 	FROM OE_LOOKUPS
3332 	WHERE lookup_code = c_channel_code
3333 	AND   lookup_type = 'SALES_CHANNEL'
3334 	AND   nvl(start_date_active, sysdate) <= sysdate
3335 	AND   nvl(end_date_active, sysdate) >= sysdate
3336 	AND   enabled_flag = 'Y';
3337 
3338   l_val   VARCHAR2(1);
3339   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3340   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_CHANNEL_CODE';
3341 
3342 BEGIN
3343 
3344       -- Initialize message list if p_init_msg_list is set to TRUE.
3345       IF FND_API.to_Boolean( p_init_msg_list )
3346       THEN
3347           FND_MSG_PUB.initialize;
3348       END IF;
3349 
3350 
3351       -- Initialize API return status to SUCCESS
3352       x_return_status := FND_API.G_RET_STS_SUCCESS;
3353 
3354       IF (p_CHANNEL_CODE is NOT NULL) and
3355          (p_CHANNEL_CODE <> FND_API.G_MISS_CHAR)
3356       THEN
3357           -- CHANNEL_CODE should exist in OE_LOOKUPS
3358           OPEN  C_CHANNEL_CODE_Exists (p_CHANNEL_CODE);
3359           FETCH C_CHANNEL_CODE_Exists into l_val;
3360 
3361           IF C_CHANNEL_CODE_Exists%NOTFOUND THEN
3362               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3363               --                     'Private API: CHANNEL_CODE is invalid');
3364 
3365               AS_UTILITY_PVT.Set_Message(
3366                   p_module        => l_module,
3367                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3368                   p_msg_name      => 'API_INVALID_CHANNEL_CODE',
3369                   p_token1        => 'VALUE',
3370                   p_token1_value  => p_CHANNEL_CODE );
3371 
3372               x_return_status := FND_API.G_RET_STS_ERROR;
3373           END IF;
3374 
3375           CLOSE C_CHANNEL_CODE_Exists;
3376       END IF;
3377 
3378       -- Standard call to get message count and if count is 1, get message info.
3379       FND_MSG_PUB.Count_And_Get
3380       (  p_count          =>   x_msg_count,
3381          p_data           =>   x_msg_data
3382       );
3383 
3384 END Validate_CHANNEL_CODE;
3385 
3386 
3387 PROCEDURE Validate_CURRENCY_CODE (
3388     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
3389     P_Validation_mode    IN   VARCHAR2,
3390     P_CURRENCY_CODE      IN   VARCHAR2,
3391     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3392     X_Return_Status      OUT NOCOPY  VARCHAR2,
3393     X_Msg_Count          OUT NOCOPY  NUMBER,
3394     X_Msg_Data           OUT NOCOPY  VARCHAR2
3395     )
3396 IS
3397   CURSOR C_Currency_Exists (c_currency_code VARCHAR2) IS
3398     SELECT  'X'
3399     FROM  fnd_currencies
3400     WHERE currency_code = c_currency_code
3401           -- ffang 091200 for bug 1403865
3402           and nvl(start_date_active, sysdate) <= sysdate
3403           and nvl(end_date_active, sysdate) >= sysdate
3404           and enabled_flag = 'Y';
3405           -- end ffang 091200
3406 
3407   l_val VARCHAR2(1);
3408   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3409   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_CURRENCY_CODE';
3410 
3411 BEGIN
3412 
3413       -- Initialize message list if p_init_msg_list is set to TRUE.
3414       IF FND_API.to_Boolean( p_init_msg_list )
3415       THEN
3416           FND_MSG_PUB.initialize;
3417       END IF;
3418 
3419 
3420       -- Initialize API return status to SUCCESS
3421       x_return_status := FND_API.G_RET_STS_SUCCESS;
3422 
3423       IF (p_CURRENCY_CODE is NOT NULL) and
3424          (p_CURRENCY_CODE <> FND_API.G_MISS_CHAR)
3425       THEN
3426           -- CURRENCY_CODE should exist in fnd_currencies_vl
3427           OPEN  C_Currency_Exists (p_CURRENCY_CODE);
3428           FETCH C_Currency_Exists into l_val;
3429 
3430           IF C_Currency_Exists%NOTFOUND THEN
3431               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3432               --                     'Private API: CURRENCY_CODE is invalid');
3433 
3434               AS_UTILITY_PVT.Set_Message(
3435                   p_module        => l_module,
3436                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3437                   p_msg_name      => 'API_INVALID_CURRENCY_CODE',
3438                   p_token1        => 'VALUE',
3439                   p_token1_value  => p_CURRENCY_CODE );
3440 
3441               x_return_status := FND_API.G_RET_STS_ERROR;
3442           END IF;
3443 
3444           CLOSE C_Currency_Exists;
3445       END IF;
3446 
3447       -- Standard call to get message count and if count is 1, get message info.
3448       FND_MSG_PUB.Count_And_Get
3449       (  p_count          =>   x_msg_count,
3450          p_data           =>   x_msg_data
3451       );
3452 
3453 END Validate_CURRENCY_CODE;
3454 
3455 
3456 PROCEDURE Validate_WIN_PROBABILITY (
3457     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
3458     P_Validation_mode    IN   VARCHAR2,
3459     P_WIN_PROBABILITY    IN   NUMBER,
3460     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3461     X_Return_Status      OUT NOCOPY  VARCHAR2,
3462     X_Msg_Count          OUT NOCOPY  NUMBER,
3463     X_Msg_Data           OUT NOCOPY  VARCHAR2
3464     )
3465 IS
3466   CURSOR C_Win_Prob_Exists (c_Win_Prob NUMBER) IS
3467      SELECT  'X'
3468      FROM  as_forecast_prob
3469      WHERE probability_value = c_Win_Prob
3470            -- ffang 091200 for bug 1403865
3471            and nvl(start_date_active, sysdate) <= sysdate
3472            and nvl(end_date_active, sysdate) >= sysdate
3473            and enabled_flag = 'Y';
3474            -- end ffang 091200
3475 
3476   l_val VARCHAR2(1);
3477   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3478   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_WIN_PROBABILITY';
3479 
3480 BEGIN
3481 
3482       -- Initialize message list if p_init_msg_list is set to TRUE.
3483       IF FND_API.to_Boolean( p_init_msg_list )
3484       THEN
3485           FND_MSG_PUB.initialize;
3486       END IF;
3487 
3488 
3489       -- Initialize API return status to SUCCESS
3490       x_return_status := FND_API.G_RET_STS_SUCCESS;
3491 
3492       IF (p_WIN_PROBABILITY is NOT NULL) and
3493          (p_WIN_PROBABILITY <> FND_API.G_MISS_NUM)
3494       THEN
3495           -- WIN_PROBABILITY should exist in as_forecast_prob
3496           OPEN  C_Win_Prob_Exists (p_WIN_PROBABILITY);
3497           FETCH C_Win_Prob_Exists into l_val;
3498 
3499           IF C_Win_Prob_Exists%NOTFOUND THEN
3500               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3501               --                     'Private API: WIN_PROBABILITY is invalid');
3502 
3503               AS_UTILITY_PVT.Set_Message(
3504                   p_module        => l_module,
3505                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3506                   p_msg_name      => 'API_INVALID_WIN_PROB',
3507                   p_token1        => 'VALUE',
3508                   p_token1_value  => p_WIN_PROBABILITY );
3509 
3510               x_return_status := FND_API.G_RET_STS_ERROR;
3511           END IF;
3512 
3513           CLOSE C_Win_Prob_Exists;
3514       END IF;
3515 
3516       -- Standard call to get message count and if count is 1, get message info.
3517       FND_MSG_PUB.Count_And_Get
3518       (  p_count          =>   x_msg_count,
3519          p_data           =>   x_msg_data
3520       );
3521 
3522 END Validate_WIN_PROBABILITY;
3523 
3524 
3525 PROCEDURE Validate_CLOSE_REASON (
3526     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
3527     P_Validation_mode    IN   VARCHAR2,
3528     P_CLOSE_REASON       IN   VARCHAR2,
3529     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3530     X_Return_Status      OUT NOCOPY  VARCHAR2,
3531     X_Msg_Count          OUT NOCOPY  NUMBER,
3532     X_Msg_Data           OUT NOCOPY  VARCHAR2
3533     )
3534 IS
3535   CURSOR C_CLOSE_REASON_Exists (c_lookup_type VARCHAR2,
3536                                 c_CLOSE_REASON VARCHAR2) IS
3537      SELECT  'X'
3538      FROM  as_lookups
3539      WHERE lookup_type = c_lookup_type
3540            and lookup_code = c_CLOSE_REASON;
3541            -- and enabled_flag = 'Y';
3542 
3543   l_val VARCHAR2(1);
3544   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3545   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_CLOSE_REASON';
3546 BEGIN
3547 
3548       -- Initialize message list if p_init_msg_list is set to TRUE.
3549       IF FND_API.to_Boolean( p_init_msg_list )
3550       THEN
3551           FND_MSG_PUB.initialize;
3552       END IF;
3553 
3554 
3555       -- Initialize API return status to SUCCESS
3556       x_return_status := FND_API.G_RET_STS_SUCCESS;
3557 
3558       IF (p_CLOSE_REASON is NOT NULL) and
3559          (p_CLOSE_REASON <> FND_API.G_MISS_CHAR)
3560       THEN
3561           -- CLOSE_REASON should exist in as_lookups
3562           OPEN  C_CLOSE_REASON_Exists ('CLOSE_REASON', p_CLOSE_REASON);
3563           FETCH C_CLOSE_REASON_Exists into l_val;
3564 
3565           IF C_CLOSE_REASON_Exists%NOTFOUND THEN
3566               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3567               --                     'Private API: CLOSE_REASON is invalid');
3568 
3569               AS_UTILITY_PVT.Set_Message(
3570                   p_module        => l_module,
3571                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3572                   p_msg_name      => 'API_INVALID_CLOSE_REASON',
3573                   p_token1        => 'VALUE',
3574                   p_token1_value  => p_CLOSE_REASON );
3575 
3576               x_return_status := FND_API.G_RET_STS_ERROR;
3577           END IF;
3578 
3579           CLOSE C_CLOSE_REASON_Exists;
3580       END IF;
3581 
3582       -- Standard call to get message count and if count is 1, get message info.
3583       FND_MSG_PUB.Count_And_Get
3584       (  p_count          =>   x_msg_count,
3585          p_data           =>   x_msg_data
3586       );
3587 
3588 END Validate_CLOSE_REASON;
3589 
3590 
3591 PROCEDURE Validate_SOURCE_PROMOTION_ID (
3592     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
3593     P_Validation_mode            IN   VARCHAR2,
3594     P_SOURCE_PROMOTION_ID        IN   NUMBER,
3595     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3596     X_Return_Status              OUT NOCOPY  VARCHAR2,
3597     X_Msg_Count                  OUT NOCOPY  NUMBER,
3598     X_Msg_Data                   OUT NOCOPY  VARCHAR2
3599     )
3600 IS
3601   CURSOR C_SOURCE_PROMOTION_ID_Exists (c_Source_Code_ID VARCHAR2) IS
3602      SELECT  'X'
3603      FROM  ams_source_codes
3604      WHERE source_code_id = c_Source_Code_ID
3605            -- and active_flag = 'Y'
3606 	   and ARC_SOURCE_CODE_FOR <> 'OFFR';
3607 	   -- nkamble commented below line and put OFFR condition for bug#3133993
3608 	   --in ('CAMP', 'CSCH', 'EVEO', 'EVEH');
3609 
3610   l_source_code_required VARCHAR2(1) := FND_PROFILE.value('AS_OPP_SOURCE_CODE_REQUIRED');
3611 
3612   l_val VARCHAR2(1);
3613   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3614   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_SOURCE_PROMOTION_ID';
3615 BEGIN
3616 
3617       -- Initialize message list if p_init_msg_list is set to TRUE.
3618       IF FND_API.to_Boolean( p_init_msg_list )
3619       THEN
3620           FND_MSG_PUB.initialize;
3621       END IF;
3622 
3623 
3624       -- Initialize API return status to SUCCESS
3625       x_return_status := FND_API.G_RET_STS_SUCCESS;
3626 
3627       IF ( p_SOURCE_PROMOTION_ID is NULL OR
3628 	   ( p_validation_mode = AS_UTILITY_PVT.G_CREATE AND
3629              p_SOURCE_PROMOTION_ID = FND_API.G_MISS_NUM     )  ) AND
3630          nvl(l_source_code_required, 'N') = 'Y' THEN
3631                   AS_UTILITY_PVT.Set_Message(
3632                      p_module        => l_module,
3633                      p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3634                      p_msg_name      => 'API_MISSING_SOURCE_PROM_ID');
3635 
3636                   x_return_status := FND_API.G_RET_STS_ERROR;
3637       END IF;
3638 
3639       IF (p_SOURCE_PROMOTION_ID is NOT NULL )AND
3640          (p_SOURCE_PROMOTION_ID <> FND_API.G_MISS_NUM)
3641       THEN
3642           -- SOURCE_PROMOTION_ID should exist in ams_source_codes
3643           OPEN  C_SOURCE_PROMOTION_ID_Exists (p_SOURCE_PROMOTION_ID);
3644           FETCH C_SOURCE_PROMOTION_ID_Exists into l_val;
3645 
3646           IF C_SOURCE_PROMOTION_ID_Exists%NOTFOUND THEN
3647               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3648               --               'Private API: SOURCE_PROMOTION_ID is invalid');
3649 
3650               AS_UTILITY_PVT.Set_Message(
3651                   p_module        => l_module,
3652                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3653                   p_msg_name      => 'API_INVALID_SOURCE_PROM_ID',
3654                   p_token1        => 'VALUE',
3655                   p_token1_value  => p_SOURCE_PROMOTION_ID );
3656 
3657               x_return_status := FND_API.G_RET_STS_ERROR;
3658           END IF;
3659 
3660           CLOSE C_SOURCE_PROMOTION_ID_Exists;
3661       END IF;
3662 
3663       -- Standard call to get message count and if count is 1, get message info.
3664       FND_MSG_PUB.Count_And_Get
3665       (  p_count          =>   x_msg_count,
3666          p_data           =>   x_msg_data
3667       );
3668 
3669 END Validate_SOURCE_PROMOTION_ID;
3670 
3671 
3672 PROCEDURE Validate_NO_OPP_ALLOWED_FLAG (
3673     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
3674     P_Validation_mode            IN   VARCHAR2,
3675     P_NO_OPP_ALLOWED_FLAG        IN   VARCHAR2,
3676     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3677     X_Return_Status              OUT NOCOPY  VARCHAR2,
3678     X_Msg_Count                  OUT NOCOPY  NUMBER,
3679     X_Msg_Data                   OUT NOCOPY  VARCHAR2
3680     )
3681 IS
3682 
3683 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3684 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_NO_OPP_ALLOWED_FLAG';
3685 BEGIN
3686 
3687       -- Initialize message list if p_init_msg_list is set to TRUE.
3688       IF FND_API.to_Boolean( p_init_msg_list )
3689       THEN
3690           FND_MSG_PUB.initialize;
3691       END IF;
3692 
3693 
3694       -- Initialize API return status to SUCCESS
3695       x_return_status := FND_API.G_RET_STS_SUCCESS;
3696 
3697       IF (p_NO_OPP_ALLOWED_FLAG is NOT NULL) and
3698          (p_NO_OPP_ALLOWED_FLAG <> FND_API.G_MISS_CHAR)
3699       THEN
3700           IF (UPPER(p_NO_OPP_ALLOWED_FLAG) <> 'Y') and
3701              (UPPER(p_NO_OPP_ALLOWED_FLAG) <> 'N')
3702           THEN
3703               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3704               --               'Private API: NO_OPP_ALLOWED_FLAG is invalid');
3705 
3706               AS_UTILITY_PVT.Set_Message(
3707                   p_module        => l_module,
3708                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3709                   p_msg_name      => 'API_INVALID_NO_OPP_ALLOWED_FLG',
3710                   p_token1        => 'VALUE',
3711                   p_token1_value  => p_NO_OPP_ALLOWED_FLAG );
3712 
3713               x_return_status := FND_API.G_RET_STS_ERROR;
3714           END IF;
3715       END IF;
3716 
3717       -- Standard call to get message count and if count is 1, get message info.
3718       FND_MSG_PUB.Count_And_Get
3719       (  p_count          =>   x_msg_count,
3720          p_data           =>   x_msg_data
3721       );
3722 
3723 END Validate_NO_OPP_ALLOWED_FLAG;
3724 
3725 
3726 PROCEDURE Validate_DELETE_ALLOWED_FLAG (
3727     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
3728     P_Validation_mode            IN   VARCHAR2,
3729     P_DELETE_ALLOWED_FLAG        IN   VARCHAR2,
3730     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3731     X_Return_Status              OUT NOCOPY  VARCHAR2,
3732     X_Msg_Count                  OUT NOCOPY  NUMBER,
3733     X_Msg_Data                   OUT NOCOPY  VARCHAR2
3734     )
3735 IS
3736 	l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3737     l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_DELETE_ALLOWED_FLAG';
3738 BEGIN
3739       -- Initialize message list if p_init_msg_list is set to TRUE.
3740       IF FND_API.to_Boolean( p_init_msg_list )
3741       THEN
3742           FND_MSG_PUB.initialize;
3743       END IF;
3744 
3745       -- Initialize API return status to SUCCESS
3746       x_return_status := FND_API.G_RET_STS_SUCCESS;
3747 
3748       IF (p_DELETE_ALLOWED_FLAG is NOT NULL) and
3749          (p_DELETE_ALLOWED_FLAG <> FND_API.G_MISS_CHAR)
3750       THEN
3751           IF (UPPER(p_DELETE_ALLOWED_FLAG) <> 'Y') and
3752              (UPPER(p_DELETE_ALLOWED_FLAG) <> 'N')
3753           THEN
3754               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3755               --               'Private API: DELETE_ALLOWED_FLAG is invalid');
3756 
3757               AS_UTILITY_PVT.Set_Message(
3758                   p_module        => l_module,
3759                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3760                   p_msg_name      => 'API_INVALID_DEL_ALLOWED_FLAG',
3761                   p_token1        => 'VALUE',
3762                   p_token1_value  => p_DELETE_ALLOWED_FLAG );
3763 
3764               x_return_status := FND_API.G_RET_STS_ERROR;
3765           END IF;
3766       END IF;
3767 
3768       -- Standard call to get message count and if count is 1, get message info.
3769       FND_MSG_PUB.Count_And_Get
3770       (  p_count          =>   x_msg_count,
3771          p_data           =>   x_msg_data
3772       );
3773 
3774 END Validate_DELETE_ALLOWED_FLAG;
3775 
3776 
3777 PROCEDURE Validate_LEAD_SOURCE_CODE (
3778     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
3779     P_Validation_mode            IN   VARCHAR2,
3780     P_LEAD_SOURCE_CODE           IN   VARCHAR2,
3781     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3782     X_Return_Status              OUT NOCOPY  VARCHAR2,
3783     X_Msg_Count                  OUT NOCOPY  NUMBER,
3784     X_Msg_Data                   OUT NOCOPY  VARCHAR2
3785     )
3786 IS
3787   CURSOR C_LEAD_SOURCE_CODE_Exists (c_lookup_type VARCHAR2,
3788                                     c_LEAD_SOURCE_CODE VARCHAR2) IS
3789      SELECT  'X'
3790      FROM  as_lookups
3791      WHERE lookup_type = c_lookup_type
3792            and lookup_code = c_LEAD_SOURCE_CODE
3793            and enabled_flag = 'Y';
3794 
3795   l_val VARCHAR2(1);
3796   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3797   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_LEAD_SOURCE_CODE';
3798 BEGIN
3799       -- Initialize message list if p_init_msg_list is set to TRUE.
3800       IF FND_API.to_Boolean( p_init_msg_list )
3801       THEN
3802           FND_MSG_PUB.initialize;
3803       END IF;
3804 
3805       -- Initialize API return status to SUCCESS
3806       x_return_status := FND_API.G_RET_STS_SUCCESS;
3807 
3808       IF (p_LEAD_SOURCE_CODE is NOT NULL) and
3809          (p_LEAD_SOURCE_CODE <> FND_API.G_MISS_CHAR)
3810       THEN
3811           -- LEAD_SOURCE_CODE should exist in as_lookups
3812           OPEN  C_LEAD_SOURCE_CODE_Exists ('LEAD_SOURCE', p_LEAD_SOURCE_CODE);
3813           FETCH C_LEAD_SOURCE_CODE_Exists into l_val;
3814 
3815           IF C_LEAD_SOURCE_CODE_Exists%NOTFOUND THEN
3816               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3817               --                  'Private API: LEAD_SOURCE_CODE is invalid');
3818 
3819               AS_UTILITY_PVT.Set_Message(
3820                   p_module        => l_module,
3821                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3822                   p_msg_name      => 'API_INVALID_LEAD_SOURCE_CODE',
3823                   p_token1        => 'VALUE',
3824                   p_token1_value  => p_LEAD_SOURCE_CODE );
3825 
3826               x_return_status := FND_API.G_RET_STS_ERROR;
3827           END IF;
3828 
3829           CLOSE C_LEAD_SOURCE_CODE_Exists;
3830       END IF;
3831 
3832       -- Standard call to get message count and if count is 1, get message info.
3833       FND_MSG_PUB.Count_And_Get
3834       (  p_count          =>   x_msg_count,
3835          p_data           =>   x_msg_data
3836       );
3837 
3838 END Validate_LEAD_SOURCE_CODE;
3839 
3840 
3841 PROCEDURE Validate_PRICE_LIST_ID (
3842     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
3843     P_Validation_mode            IN   VARCHAR2,
3844     P_PRICE_LIST_ID              IN   NUMBER,
3845     P_CURRENCY_CODE              IN   VARCHAR2,
3846     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3847     X_Return_Status              OUT NOCOPY  VARCHAR2,
3848     X_Msg_Count                  OUT NOCOPY  NUMBER,
3849     X_Msg_Data                   OUT NOCOPY  VARCHAR2
3850     )
3851 IS
3852   CURSOR C_Price_List_Exists (c_Price_List_Id NUMBER,
3853                               c_Currency_Code VARCHAR2) IS
3854       SELECT  'X'
3855       FROM  qp_price_lists_v
3856       WHERE price_list_id = c_Price_List_Id
3857       and currency_code = c_Currency_Code
3858       and nvl(start_date_active, sysdate) <= sysdate
3859       and nvl(end_date_active, sysdate) >= sysdate;
3860 
3861   l_val VARCHAR2(1);
3862   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3863   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_PRICE_LIST_ID';
3864 BEGIN
3865       -- Initialize message list if p_init_msg_list is set to TRUE.
3866       IF FND_API.to_Boolean( p_init_msg_list )
3867       THEN
3868           FND_MSG_PUB.initialize;
3869       END IF;
3870 
3871       -- Initialize API return status to SUCCESS
3872       x_return_status := FND_API.G_RET_STS_SUCCESS;
3873 
3874       IF (p_PRICE_LIST_ID is NOT NULL) and
3875          (p_PRICE_LIST_ID <> FND_API.G_MISS_NUM)
3876       THEN
3877           -- PRICE_LIST_ID should exist in qp_price_lists_v
3878           OPEN  C_Price_List_Exists (p_PRICE_LIST_ID, p_CURRENCY_CODE);
3879           FETCH C_Price_List_Exists into l_val;
3880 
3881           IF C_Price_List_Exists%NOTFOUND THEN
3882               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3883               --                  'Private API: PRICE_LIST_ID is invalid');
3884 
3885               AS_UTILITY_PVT.Set_Message(
3886                   p_module        => l_module,
3887                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3888                   p_msg_name      => 'API_INVALID_PRICE_LIST_ID',
3889                   p_token1        => 'VALUE',
3890                   p_token1_value  => p_PRICE_LIST_ID );
3891 
3892               x_return_status := FND_API.G_RET_STS_ERROR;
3893           END IF;
3894 
3895           CLOSE C_Price_List_Exists;
3896       END IF;
3897 
3898       -- Standard call to get message count and if count is 1, get message info.
3899       FND_MSG_PUB.Count_And_Get
3900       (  p_count          =>   x_msg_count,
3901          p_data           =>   x_msg_data
3902       );
3903 
3904 END Validate_PRICE_LIST_ID;
3905 
3906 
3907 PROCEDURE Validate_DELETED_FLAG (
3908     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
3909     P_Validation_mode            IN   VARCHAR2,
3910     P_DELETED_FLAG               IN   VARCHAR2,
3911     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3912     X_Return_Status              OUT NOCOPY  VARCHAR2,
3913     X_Msg_Count                  OUT NOCOPY  NUMBER,
3914     X_Msg_Data                   OUT NOCOPY  VARCHAR2
3915     )
3916 IS
3917 
3918 	l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3919     l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_DELETED_FLAG';
3920 BEGIN
3921 
3922       -- Initialize message list if p_init_msg_list is set to TRUE.
3923       IF FND_API.to_Boolean( p_init_msg_list )
3924       THEN
3925           FND_MSG_PUB.initialize;
3926       END IF;
3927 
3928 
3929       -- Initialize API return status to SUCCESS
3930       x_return_status := FND_API.G_RET_STS_SUCCESS;
3931 
3932       IF (p_DELETED_FLAG is NOT NULL) and
3933          (p_DELETED_FLAG <> FND_API.G_MISS_CHAR)
3934       THEN
3935           IF (p_DELETED_FLAG <> 'Y') and (p_DELETED_FLAG <> 'N')
3936           THEN
3937               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
3938               --               'Private API: DELETED_FLAG is invalid');
3939 
3940               AS_UTILITY_PVT.Set_Message(
3941                   p_module        => l_module,
3942                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
3943                   p_msg_name      => 'API_INVALID_DELETED_FLAG',
3944                   p_token1        => 'VALUE',
3945                   p_token1_value  => p_DELETED_FLAG );
3946 
3947               x_return_status := FND_API.G_RET_STS_ERROR;
3948           END IF;
3949       END IF;
3950 
3951       -- Standard call to get message count and if count is 1, get message info.
3952       FND_MSG_PUB.Count_And_Get
3953       (  p_count          =>   x_msg_count,
3954          p_data           =>   x_msg_data
3955       );
3956 
3957 END Validate_DELETED_FLAG;
3958 
3959 
3960 PROCEDURE Validate_METHODOLOGY_CODE (
3961     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
3962     P_Validation_mode            IN   VARCHAR2,
3963     P_METHODOLOGY_CODE           IN   VARCHAR2,
3964     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
3965     X_Return_Status              OUT NOCOPY  VARCHAR2,
3966     X_Msg_Count                  OUT NOCOPY  NUMBER,
3967     X_Msg_Data                   OUT NOCOPY  VARCHAR2
3968     )
3969 IS
3970   CURSOR C_METHODOLOGY_CODE_Exists (c_lookup_type VARCHAR2,
3971                                     c_METHODOLOGY_CODE VARCHAR2) IS
3972      SELECT  'X'
3973      FROM  as_lookups
3974      WHERE lookup_type = c_lookup_type
3975            and lookup_code = c_METHODOLOGY_CODE
3976            and enabled_flag = 'Y';
3977 
3978   l_val VARCHAR2(1);
3979   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
3980   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_METHODOLOGY_CODE';
3981 
3982 BEGIN
3983 
3984       -- Initialize message list if p_init_msg_list is set to TRUE.
3985       IF FND_API.to_Boolean( p_init_msg_list )
3986       THEN
3987           FND_MSG_PUB.initialize;
3988       END IF;
3989 
3990 
3991       -- Initialize API return status to SUCCESS
3992       x_return_status := FND_API.G_RET_STS_SUCCESS;
3993 
3994       IF (p_METHODOLOGY_CODE is NOT NULL) and
3995          (p_METHODOLOGY_CODE <> FND_API.G_MISS_CHAR)
3996       THEN
3997           -- METHODOLOGY_CODE should exist in as_lookups
3998           OPEN  C_METHODOLOGY_CODE_Exists ('METHODOLOGY_TYPE',
3999                                            p_METHODOLOGY_CODE);
4000           FETCH C_METHODOLOGY_CODE_Exists into l_val;
4001 
4002           IF C_METHODOLOGY_CODE_Exists%NOTFOUND THEN
4003               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4004               --                  'Private API: METHODOLOGY_CODE is invalid');
4005 
4006               AS_UTILITY_PVT.Set_Message(
4007                   p_module        => l_module,
4008                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4009                   p_msg_name      => 'API_INVALID_METHODOLOGY_CODE',
4010                   p_token1        => 'VALUE',
4011                   p_token1_value  => p_METHODOLOGY_CODE );
4012 
4013               x_return_status := FND_API.G_RET_STS_ERROR;
4014           END IF;
4015 
4016           CLOSE C_METHODOLOGY_CODE_Exists;
4017       END IF;
4018 
4019       -- Standard call to get message count and if count is 1, get message info.
4020       FND_MSG_PUB.Count_And_Get
4021       (  p_count          =>   x_msg_count,
4022          p_data           =>   x_msg_data
4023       );
4024 
4025 END Validate_METHODOLOGY_CODE;
4026 
4027 
4028 PROCEDURE Validate_ORIGINAL_LEAD_ID (
4029     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4030     P_Validation_mode            IN   VARCHAR2,
4031     P_ORIGINAL_LEAD_ID           IN   NUMBER,
4032     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4033     X_Return_Status              OUT NOCOPY  VARCHAR2,
4034     X_Msg_Count                  OUT NOCOPY  NUMBER,
4035     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4036     )
4037 IS
4038   CURSOR C_ORIGINAL_LEAD_ID_Exists (c_ORIGINAL_LEAD_ID VARCHAR2) IS
4039      SELECT  'X'
4040      FROM  as_leads_all
4041      WHERE lead_id = c_original_lead_id;
4042 
4043   l_val VARCHAR2(1);
4044   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_ORIGINAL_LEAD_ID';
4045 
4046 
4047 BEGIN
4048 
4049       -- Initialize message list if p_init_msg_list is set to TRUE.
4050       IF FND_API.to_Boolean( p_init_msg_list )
4051       THEN
4052           FND_MSG_PUB.initialize;
4053       END IF;
4054 
4055 
4056       -- Initialize API return status to SUCCESS
4057       x_return_status := FND_API.G_RET_STS_SUCCESS;
4058 
4059       IF (p_ORIGINAL_LEAD_ID is NOT NULL) and
4060          (p_ORIGINAL_LEAD_ID <> FND_API.G_MISS_NUM)
4061       THEN
4062           -- METHODOLOGY_CODE should exist in as_leads_all
4063           OPEN  C_ORIGINAL_LEAD_ID_Exists (p_ORIGINAL_LEAD_ID);
4064           FETCH C_ORIGINAL_LEAD_ID_Exists into l_val;
4065 
4066           IF C_ORIGINAL_LEAD_ID_Exists%NOTFOUND THEN
4067               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4068               --                  'Private API: ORIGINAL_LEAD_ID is invalid');
4069 
4070               AS_UTILITY_PVT.Set_Message(
4071                   p_module        => l_module,
4072                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4073                   p_msg_name      => 'API_INVALID_ORIG_LEAD_ID',
4074                   p_token1        => 'VALUE',
4075                   p_token1_value  => p_ORIGINAL_LEAD_ID );
4076 
4077               x_return_status := FND_API.G_RET_STS_ERROR;
4078           END IF;
4079 
4080           CLOSE C_ORIGINAL_LEAD_ID_Exists;
4081       END IF;
4082 
4083       -- Standard call to get message count and if count is 1, get message info.
4084       FND_MSG_PUB.Count_And_Get
4085       (  p_count          =>   x_msg_count,
4086          p_data           =>   x_msg_data
4087       );
4088 
4089 END Validate_ORIGINAL_LEAD_ID;
4090 
4091 
4092 PROCEDURE Validate_DECN_TIMEFRAME_CODE (
4093     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4094     P_Validation_mode            IN   VARCHAR2,
4095     P_DECISION_TIMEFRAME_CODE    IN   VARCHAR2,
4096     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4097     X_Return_Status              OUT NOCOPY  VARCHAR2,
4098     X_Msg_Count                  OUT NOCOPY  NUMBER,
4099     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4100     )
4101 IS
4102   CURSOR C_DECN_TIMEFRAME_Exists (c_lookup_type VARCHAR2,
4103                                   c_DECISION_TIMEFRAME_CODE VARCHAR2) IS
4104      SELECT  'X'
4105      FROM  as_lookups
4106      WHERE lookup_type = c_lookup_type
4107            and lookup_code = c_DECISION_TIMEFRAME_CODE
4108            and enabled_flag = 'Y';
4109 
4110   l_val VARCHAR2(1);
4111   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_DECN_TIMEFRAME_CODE';
4112 
4113 BEGIN
4114 
4115       -- Initialize message list if p_init_msg_list is set to TRUE.
4116       IF FND_API.to_Boolean( p_init_msg_list )
4117       THEN
4118           FND_MSG_PUB.initialize;
4119       END IF;
4120 
4121 
4122       -- Initialize API return status to SUCCESS
4123       x_return_status := FND_API.G_RET_STS_SUCCESS;
4124 
4125       IF (p_DECISION_TIMEFRAME_CODE is NOT NULL) and
4126          (p_DECISION_TIMEFRAME_CODE <> FND_API.G_MISS_CHAR)
4127       THEN
4128           -- DECISION_TIMEFRAME_CODE should exist in as_lookups
4129           OPEN  C_DECN_TIMEFRAME_Exists ('DECISION_TIMEFRAME',
4130                                          p_DECISION_TIMEFRAME_CODE);
4131           FETCH C_DECN_TIMEFRAME_Exists into l_val;
4132 
4133           IF C_DECN_TIMEFRAME_Exists%NOTFOUND THEN
4134               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4135               --           'Private API: DECISION_TIMEFRAME_CODE is invalid');
4136 
4137               AS_UTILITY_PVT.Set_Message(
4138                   p_module        => l_module,
4139                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4140                   p_msg_name      => 'API_INVALID_DCN_TIMEFRAME_CODE',
4141                   p_token1        => 'VALUE',
4142                   p_token1_value  => p_DECISION_TIMEFRAME_CODE );
4143 
4144               x_return_status := FND_API.G_RET_STS_ERROR;
4145           END IF;
4146 
4147           CLOSE C_DECN_TIMEFRAME_Exists;
4148       END IF;
4149 
4150       -- Standard call to get message count and if count is 1, get message info.
4151       FND_MSG_PUB.Count_And_Get
4152       (  p_count          =>   x_msg_count,
4153          p_data           =>   x_msg_data
4154       );
4155 
4156 END Validate_DECN_TIMEFRAME_CODE;
4157 
4158 
4159 PROCEDURE Validate_OFFER_ID (
4160     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4161     P_Validation_mode            IN   VARCHAR2,
4162     P_SOURCE_PROMOTION_ID        IN   NUMBER,
4163     P_OFFER_ID                   IN   NUMBER,
4164     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4165     X_Return_Status              OUT NOCOPY  VARCHAR2,
4166     X_Msg_Count                  OUT NOCOPY  NUMBER,
4167     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4168     )
4169 IS
4170 
4171 CURSOR C_OFFER_ID_Exists (c_OFFER_ID NUMBER) IS
4172      SELECT  'X'
4173      FROM  ams_source_codes
4174      WHERE source_code_id = c_offer_id
4175      and   ARC_SOURCE_CODE_FOR = 'OFFR';
4176 
4177 --
4178 --           and nvl(start_date, sysdate) <= sysdate
4179 --           and nvl(end_date, sysdate) >= sysdate
4180            -- ffang 012501
4181 --           and ARC_ACT_OFFER_USED_BY = 'CAMP'
4182 --           and ACT_OFFER_USED_BY_ID =
4183 --	                  (SELECT CAMPAIGN_ID
4184 --	                   FROM AMS_CAMPAIGNS_VL c, AMS_SOURCE_CODES s
4185 --	                   WHERE c.SOURCE_CODE = s.SOURCE_CODE
4186 --                      AND s.SOURCE_CODE_ID = P_SOURCE_PROMOTION_ID);
4187 
4188   l_val VARCHAR2(1);
4189   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
4190   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_OFFER_ID';
4191 BEGIN
4192 
4193       -- Initialize message list IF p_init_msg_list is set to TRUE.
4194       IF FND_API.to_Boolean( p_init_msg_list )
4195       THEN
4196           FND_MSG_PUB.initialize;
4197       END IF;
4198 
4199       -- Initialize API return status to SUCCESS
4200       x_return_status := FND_API.G_RET_STS_SUCCESS;
4201 
4202       -- Debug Message
4203       -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4204                                    -- 'Validate offer id');
4205 
4206       IF (p_OFFER_ID is NOT NULL) and (p_OFFER_ID <> FND_API.G_MISS_NUM)
4207       THEN
4208           -- OFFER_ID should exist in ams_act_offers
4209           OPEN  C_OFFER_ID_Exists (p_OFFER_ID);
4210           FETCH C_OFFER_ID_Exists into l_val;
4211 
4212           IF C_OFFER_ID_Exists%NOTFOUND THEN
4213               IF l_debug THEN
4214               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4215                                            'Private API: OFFER_ID is invalid');
4216               END IF;
4217               AS_UTILITY_PVT.Set_Message(
4218                   p_module        => l_module,
4219                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4220                   p_msg_name      => 'API_INVALID_ID',
4221                   p_token1        => 'COLUMN',
4222                   p_token1_value  => 'OFFER',
4223                   p_token2        => 'VALUE',
4224                   p_token2_value  => p_OFFER_ID );
4225 
4226               x_return_status := FND_API.G_RET_STS_ERROR;
4227           END IF;
4228           CLOSE C_OFFER_ID_Exists;
4229       END IF;
4230 
4231       -- Standard call to get message count and IF count is 1, get message info.
4232       FND_MSG_PUB.Count_And_Get
4233       (  p_count          =>   x_msg_count,
4234          p_data           =>   x_msg_data
4235       );
4236 
4237 END Validate_OFFER_ID;
4238 
4239 
4240 PROCEDURE Validate_VEHICLE_RESPONSE_CODE (
4241     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4242     P_Validation_mode            IN   VARCHAR2,
4243     P_VEHICLE_RESPONSE_CODE      IN   VARCHAR2,
4244     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4245     X_Return_Status              OUT NOCOPY  VARCHAR2,
4246     X_Msg_Count                  OUT NOCOPY  NUMBER,
4247     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4248     )
4249 IS
4250   CURSOR C_VEHICLE_RESPONSE_Exists (c_lookup_type VARCHAR2,
4251                                     c_Lookup_Code VARCHAR2) IS
4252       SELECT  'X'
4253       FROM  fnd_lookup_values
4254       WHERE lookup_type = c_lookup_type
4255         and lookup_code = c_Lookup_Code
4256 	and enabled_flag = 'Y'
4257 	and (end_date_active > SYSDATE OR end_date_active IS NULL);
4258 
4259   l_val VARCHAR2(1);
4260   l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
4261   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_VEHICLE_RESPONSE_CODE';
4262 BEGIN
4263 
4264       -- Initialize message list if p_init_msg_list is set to TRUE.
4265       IF FND_API.to_Boolean( p_init_msg_list )
4266       THEN
4267           FND_MSG_PUB.initialize;
4268       END IF;
4269 
4270 
4271       -- Initialize API return status to SUCCESS
4272       x_return_status := FND_API.G_RET_STS_SUCCESS;
4273 
4274       IF (p_VEHICLE_RESPONSE_CODE is NOT NULL) and
4275          (p_VEHICLE_RESPONSE_CODE <> FND_API.G_MISS_CHAR)
4276       THEN
4277           -- VEHICLE_RESPONSE_CODE should exist in as_lookups
4278           OPEN  C_VEHICLE_RESPONSE_Exists ('VEHICLE_RESPONSE_CODE',
4279                                            p_VEHICLE_RESPONSE_CODE);
4280           FETCH C_VEHICLE_RESPONSE_Exists into l_val;
4281 
4282           IF C_VEHICLE_RESPONSE_Exists%NOTFOUND THEN
4283               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4284               --             'Private API: VEHICLE_RESPONSE_CODE is invalid');
4285 
4286               AS_UTILITY_PVT.Set_Message(
4287                   p_module        => l_module,
4288                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4289                   p_msg_name      => 'API_INVALID_VEHICLE_RESP_CODE',
4290                   p_token1        => 'VALUE',
4291                   p_token1_value  => p_VEHICLE_RESPONSE_CODE );
4292 
4293               x_return_status := FND_API.G_RET_STS_ERROR;
4294           END IF;
4295 
4296           CLOSE C_VEHICLE_RESPONSE_Exists;
4297       END IF;
4298 
4299       -- Standard call to get message count and if count is 1, get message info.
4300       FND_MSG_PUB.Count_And_Get
4301       (  p_count          =>   x_msg_count,
4302          p_data           =>   x_msg_data
4303       );
4304 
4305 END Validate_VEHICLE_RESPONSE_CODE;
4306 
4307 
4308 PROCEDURE Validate_BUDGET_STATUS_CODE (
4309     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4310     P_Validation_mode            IN   VARCHAR2,
4311     P_BUDGET_STATUS_CODE         IN   VARCHAR2,
4312     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4313     X_Return_Status              OUT NOCOPY  VARCHAR2,
4314     X_Msg_Count                  OUT NOCOPY  NUMBER,
4315     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4316     )
4317 IS
4318   CURSOR C_BUDGET_STATUS_Exists (c_lookup_type VARCHAR2,
4319                                  c_Lookup_Code VARCHAR2) IS
4320       SELECT  'X'
4321       FROM  as_lookups
4322       WHERE lookup_type = c_lookup_type
4323             and lookup_code = c_Lookup_Code;
4324   l_val VARCHAR2(1);
4325   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_BUDGET_STATUS_CODE';
4326 
4327 
4328 BEGIN
4329 
4330       -- Initialize message list if p_init_msg_list is set to TRUE.
4331       IF FND_API.to_Boolean( p_init_msg_list )
4332       THEN
4333           FND_MSG_PUB.initialize;
4334       END IF;
4335 
4336 
4337       -- Initialize API return status to SUCCESS
4338       x_return_status := FND_API.G_RET_STS_SUCCESS;
4339 
4340       IF (p_BUDGET_STATUS_CODE is NOT NULL) and
4341          (p_BUDGET_STATUS_CODE <> FND_API.G_MISS_CHAR)
4342       THEN
4343           -- BUDGET_STATUS_CODE should exist in as_lookups
4344           OPEN  C_BUDGET_STATUS_Exists ('BUDGET_STATUS', p_BUDGET_STATUS_CODE);
4345           FETCH C_BUDGET_STATUS_Exists into l_val;
4346 
4347           IF C_BUDGET_STATUS_Exists%NOTFOUND THEN
4348               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4349               --             'Private API: BUDGET_STATUS_CODE is invalid');
4350 
4351               AS_UTILITY_PVT.Set_Message(
4352                   p_module        => l_module,
4353                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4354                   p_msg_name      => 'API_INVALID_BUDGET_STATUS_CODE',
4355                   p_token1        => 'VALUE',
4356                   p_token1_value  => p_BUDGET_STATUS_CODE );
4357 
4358               x_return_status := FND_API.G_RET_STS_ERROR;
4359           END IF;
4360 
4361           CLOSE C_BUDGET_STATUS_Exists;
4362       END IF;
4363 
4364       -- Standard call to get message count and if count is 1, get message info.
4365       FND_MSG_PUB.Count_And_Get
4366       (  p_count          =>   x_msg_count,
4367          p_data           =>   x_msg_data
4368       );
4369 
4370 END Validate_BUDGET_STATUS_CODE;
4371 
4372 
4373 PROCEDURE Validate_PRM_LEAD_TYPE (
4374     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4375     P_Validation_mode            IN   VARCHAR2,
4376     P_PRM_LEAD_TYPE              IN   VARCHAR2,
4377     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4378     X_Return_Status              OUT NOCOPY  VARCHAR2,
4379     X_Msg_Count                  OUT NOCOPY  NUMBER,
4380     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4381     )
4382 IS
4383   CURSOR C_PRM_LEAD_TYPE_Exists (c_lookup_type VARCHAR2,
4384                                  c_Lookup_Code VARCHAR2) IS
4385       SELECT  'X'
4386       FROM  as_lookups
4387       WHERE lookup_type = c_lookup_type
4388             and lookup_code = c_Lookup_Code;
4389   l_val VARCHAR2(1);
4390   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_PRM_LEAD_TYPE';
4391 
4392 BEGIN
4393 
4394       -- Initialize message list if p_init_msg_list is set to TRUE.
4395       IF FND_API.to_Boolean( p_init_msg_list )
4396       THEN
4397           FND_MSG_PUB.initialize;
4398       END IF;
4399 
4400 
4401       -- Initialize API return status to SUCCESS
4402       x_return_status := FND_API.G_RET_STS_SUCCESS;
4403 
4404       IF (p_PRM_LEAD_TYPE is NOT NULL) and
4405          (p_PRM_LEAD_TYPE <> FND_API.G_MISS_CHAR)
4406       THEN
4407           -- PRM_LEAD_TYPE should exist in as_lookups
4408           OPEN  C_PRM_LEAD_TYPE_Exists ('PRM_LEAD_TYPE', p_PRM_LEAD_TYPE);
4409           FETCH C_PRM_LEAD_TYPE_Exists into l_val;
4410 
4411           IF C_PRM_LEAD_TYPE_Exists%NOTFOUND THEN
4412               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4413               --                     'Private API: PRM_LEAD_TYPE is invalid');
4414 
4415               AS_UTILITY_PVT.Set_Message(
4416                   p_module        => l_module,
4417                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4418                   p_msg_name      => 'API_INVALID_PRM_LEAD_TYPE',
4419                   p_token1        => 'VALUE',
4420                   p_token1_value  => p_PRM_LEAD_TYPE );
4421 
4422               x_return_status := FND_API.G_RET_STS_ERROR;
4423           END IF;
4424 
4425           CLOSE C_PRM_LEAD_TYPE_Exists;
4426       END IF;
4427 
4428       -- Standard call to get message count and if count is 1, get message info.
4429       FND_MSG_PUB.Count_And_Get
4430       (  p_count          =>   x_msg_count,
4431          p_data           =>   x_msg_data
4432       );
4433 
4434 END Validate_PRM_LEAD_TYPE;
4435 
4436 
4437 PROCEDURE Validate_CUSTOMER_ID (
4438     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
4439     P_Validation_mode    IN   VARCHAR2,
4440     P_CUSTOMER_ID        IN   NUMBER,
4441     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4442     X_Return_Status      OUT NOCOPY  VARCHAR2,
4443     X_Msg_Count          OUT NOCOPY  NUMBER,
4444     X_Msg_Data           OUT NOCOPY  VARCHAR2
4445     )
4446 IS
4447 
4448 CURSOR c_customer_status(p_customer_id number) IS
4449 	select STATUS
4450 	from hz_parties
4451 	where party_id = p_customer_id;
4452 l_status 	VARCHAR2(1);
4453 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_CUSTOMER_ID';
4454 
4455 BEGIN
4456       -- Initialize message list if p_init_msg_list is set to TRUE.
4457       IF FND_API.to_Boolean( p_init_msg_list )
4458       THEN
4459           FND_MSG_PUB.initialize;
4460       END IF;
4461 
4462       -- Initialize API return status to SUCCESS
4463       x_return_status := FND_API.G_RET_STS_SUCCESS;
4464 
4465       -- validate NOT NULL column
4466       IF(p_CUSTOMER_ID is NULL)
4467       THEN
4468           -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4469           --          'Private API: Violate NOT NULL constraint(CUSTOMER_ID)');
4470 
4471           AS_UTILITY_PVT.Set_Message(
4472               p_module        => l_module,
4473               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4474               p_msg_name      => 'API_MISSING_CUSTOMER_ID');
4475 
4476           x_return_status := FND_API.G_RET_STS_ERROR;
4477       ELSE
4478 	  -- Check customer status in creation mode
4479           IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE) and
4480              (p_CUSTOMER_ID <> FND_API.G_MISS_NUM)
4481           THEN
4482 	      OPEN c_customer_status(P_CUSTOMER_ID);
4483 	      FETCH c_customer_status into l_status;
4484 	      CLOSE c_customer_status;
4485 	      IF l_status = 'I' THEN
4486           	  IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
4487           	  THEN
4488               	      AS_UTILITY_PVT.Set_Message(
4489                   	p_module        => l_module,
4490                   	p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4491                   	p_msg_name      => 'WARN_INACTIVE_CUSTOMER');
4492 
4493           	  END IF;
4494 		  x_return_status := FND_API.G_RET_STS_ERROR;
4495                   raise FND_API.G_EXC_ERROR;
4496 	      END IF;
4497 	  END IF;
4498 
4499           -- Calling from Create APIs, customer_id can not be G_MISS_NUM
4500           IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE) and
4501              (p_CUSTOMER_ID = FND_API.G_MISS_NUM)
4502           THEN
4503               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4504               --                        'Private API: CUSTOMER_ID is missing');
4505 
4506               AS_UTILITY_PVT.Set_Message(
4507                   p_module        => l_module,
4508                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4509                   p_msg_name      => 'API_MISSING_CUSTOMER_ID');
4510 
4511               x_return_status := FND_API.G_RET_STS_ERROR;
4512 
4513           -- If customer_id <> G_MISS_NUM, use TCA validation procedure
4514           ELSIF (p_CUSTOMER_ID <> FND_API.G_MISS_NUM)
4515           THEN
4516               AS_TCA_PVT.validate_party_id(
4517                   p_init_msg_list          => FND_API.G_FALSE,
4518                   p_party_id               => P_CUSTOMER_ID,
4519                   x_return_status          => x_return_status,
4520                   x_msg_count              => x_msg_count,
4521                   x_msg_data               => x_msg_data);
4522 
4523               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4524                   -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4525                   --                 'Private API: CUSTOMER_ID is invalid');
4526 
4527                   AS_UTILITY_PVT.Set_Message(
4528                       p_module        => l_module,
4529                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4530                       p_msg_name      => 'API_INVALID_CUSTOMER_ID',
4531                       p_token1        => 'VALUE',
4532                       p_token1_value  => p_CUSTOMER_ID );
4533 
4534               END IF;
4535 
4536           END IF;
4537       END IF;
4538 
4539       -- Standard call to get message count and if count is 1, get message info.
4540       FND_MSG_PUB.Count_And_Get
4541       (  p_count          =>   x_msg_count,
4542          p_data           =>   x_msg_data
4543       );
4544 END Validate_CUSTOMER_ID;
4545 
4546 
4547 
4548 PROCEDURE Validate_INC_PARTNER_PARTY_ID (
4549     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4550     P_Validation_mode            IN   VARCHAR2,
4551     P_INC_PARTNER_PARTY_ID       IN   NUMBER,
4552     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4553     X_Return_Status              OUT NOCOPY  VARCHAR2,
4554     X_Msg_Count                  OUT NOCOPY  NUMBER,
4555     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4556     )
4557 IS
4558   CURSOR C_INC_PRTN_PARTY_ID_Exist (c_inc_parn_party_id NUMBER) IS
4559       SELECT  'X'
4560 	 FROM as_sf_ptr_v
4561 	 WHERE partner_customer_id = c_inc_parn_party_id;
4562       -- FROM  pv_partners_v
4563       -- WHERE partner_id = c_inc_parn_party_id;
4564   l_val VARCHAR2(1);
4565   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_INC_PARTNER_PARTY_ID';
4566 
4567 BEGIN
4568 
4569       -- Initialize message list if p_init_msg_list is set to TRUE.
4570       IF FND_API.to_Boolean( p_init_msg_list )
4571       THEN
4572           FND_MSG_PUB.initialize;
4573       END IF;
4574 
4575 
4576       -- Initialize API return status to SUCCESS
4577       x_return_status := FND_API.G_RET_STS_SUCCESS;
4578 
4579       IF (P_INC_PARTNER_PARTY_ID is NOT NULL) and
4580          (P_INC_PARTNER_PARTY_ID <> FND_API.G_MISS_NUM)
4581       THEN
4582           -- AS_TCA_PVT.validate_party_id(
4583           --     p_init_msg_list          => FND_API.G_FALSE,
4584           --     p_party_id               => P_INC_PARTNER_PARTY_ID,
4585           --     x_return_status          => x_return_status,
4586           --     x_msg_count              => x_msg_count,
4587           --     x_msg_data               => x_msg_data);
4588 
4589           -- IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4590           --     -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4591           --     --             'Private API: INC_PARTNER_PARTY_ID is invalid');
4592 
4593 
4594           OPEN  C_INC_PRTN_PARTY_ID_Exist (P_INC_PARTNER_PARTY_ID);
4595           FETCH C_INC_PRTN_PARTY_ID_Exist into l_val;
4596 
4597           IF C_INC_PRTN_PARTY_ID_Exist%NOTFOUND THEN
4598 
4599               AS_UTILITY_PVT.Set_Message(
4600                   p_module        => l_module,
4601                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4602                   p_msg_name      => 'API_INVALID_INC_PTNR_PARTY_ID',
4603                   p_token1        => 'VALUE',
4604                   p_token1_value  => p_INC_PARTNER_PARTY_ID );
4605 
4606           END IF;
4607       END IF;
4608 
4609       -- Standard call to get message count and if count is 1, get message info.
4610       FND_MSG_PUB.Count_And_Get
4611       (  p_count          =>   x_msg_count,
4612          p_data           =>   x_msg_data
4613       );
4614 
4615 END Validate_INC_PARTNER_PARTY_ID;
4616 
4617 
4618 PROCEDURE Validate_CLOSE_COMPETITOR_ID (
4619     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4620     P_Validation_mode            IN   VARCHAR2,
4621     P_CLOSE_COMPETITOR_ID        IN   NUMBER,
4622     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4623     X_Return_Status              OUT NOCOPY  VARCHAR2,
4624     X_Msg_Count                  OUT NOCOPY  NUMBER,
4625     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4626     )
4627 IS
4628 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_CLOSE_COMPETITOR_ID';
4629 BEGIN
4630 
4631       -- Initialize message list if p_init_msg_list is set to TRUE.
4632       IF FND_API.to_Boolean( p_init_msg_list )
4633       THEN
4634           FND_MSG_PUB.initialize;
4635       END IF;
4636 
4637 
4638       -- Initialize API return status to SUCCESS
4639       x_return_status := FND_API.G_RET_STS_SUCCESS;
4640 
4641       IF (p_CLOSE_COMPETITOR_ID is NOT NULL) and
4642          (p_CLOSE_COMPETITOR_ID <> FND_API.G_MISS_NUM)
4643       THEN
4644           AS_TCA_PVT.validate_party_id(
4645               p_init_msg_list          => FND_API.G_FALSE,
4646               p_party_id               => p_CLOSE_COMPETITOR_ID,
4647               x_return_status          => x_return_status,
4648               x_msg_count              => x_msg_count,
4649               x_msg_data               => x_msg_data);
4650 
4651           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4652               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4653               --               'Private API: CLOSE_COMPETITOR_ID is invalid');
4654 
4655               AS_UTILITY_PVT.Set_Message(
4656                   p_module        => l_module,
4657                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4658                   p_msg_name      => 'API_INVALID_CLOSE_COMP_ID',
4659                   p_token1        => 'VALUE',
4660                   p_token1_value  => p_CLOSE_COMPETITOR_ID );
4661 
4662           END IF;
4663       END IF;
4664 
4665       -- Standard call to get message count and if count is 1, get message info.
4666       FND_MSG_PUB.Count_And_Get
4667       (  p_count          =>   x_msg_count,
4668          p_data           =>   x_msg_data
4669       );
4670 
4671 END Validate_CLOSE_COMPETITOR_ID;
4672 
4673 
4674 PROCEDURE Validate_END_USER_CUSTOMER_ID (
4675     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4676     P_Validation_mode            IN   VARCHAR2,
4677     P_END_USER_CUSTOMER_ID       IN   NUMBER,
4678     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4679     X_Return_Status              OUT NOCOPY  VARCHAR2,
4680     X_Msg_Count                  OUT NOCOPY  NUMBER,
4681     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4682     )
4683 IS
4684 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_END_USER_CUSTOMER_ID';
4685 BEGIN
4686 
4687       -- Initialize message list if p_init_msg_list is set to TRUE.
4688       IF FND_API.to_Boolean( p_init_msg_list )
4689       THEN
4690           FND_MSG_PUB.initialize;
4691       END IF;
4692 
4693 
4694       -- Initialize API return status to SUCCESS
4695       x_return_status := FND_API.G_RET_STS_SUCCESS;
4696 
4697       IF (p_END_USER_CUSTOMER_ID is NOT NULL) and
4698          (p_END_USER_CUSTOMER_ID <> FND_API.G_MISS_NUM)
4699       THEN
4700           AS_TCA_PVT.validate_party_id(
4701               p_init_msg_list          => FND_API.G_FALSE,
4702               p_party_id               => p_END_USER_CUSTOMER_ID,
4703               x_return_status          => x_return_status,
4704               x_msg_count              => x_msg_count,
4705               x_msg_data               => x_msg_data);
4706 
4707           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4708               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4709               --               'Private API: END_USER_CUSTOMER_ID is invalid');
4710 
4711               AS_UTILITY_PVT.Set_Message(
4712                   p_module        => l_module,
4713                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4714                   p_msg_name      => 'API_INVALID_END_USER_CUST_ID',
4715                   p_token1        => 'VALUE',
4716                   p_token1_value  => p_END_USER_CUSTOMER_ID );
4717 
4718           END IF;
4719       END IF;
4720 
4721       -- Standard call to get message count and if count is 1, get message info.
4722       FND_MSG_PUB.Count_And_Get
4723       (  p_count          =>   x_msg_count,
4724          p_data           =>   x_msg_data
4725       );
4726 
4727 END Validate_END_USER_CUSTOMER_ID;
4728 
4729 
4730 
4731 PROCEDURE Validate_ADDRESS_ID (
4732     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
4733     P_Validation_mode    IN   VARCHAR2,
4734     P_ADDRESS_ID         IN   NUMBER,
4735     P_CUSTOMER_ID        IN   NUMBER,
4736     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4737     X_Return_Status      OUT NOCOPY  VARCHAR2,
4738     X_Msg_Count          OUT NOCOPY  NUMBER,
4739     X_Msg_Data           OUT NOCOPY  VARCHAR2
4740     )
4741 IS
4742 l_check_address  VARCHAR2(1);
4743 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
4744 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_ADDRESS_ID';
4745 
4746 BEGIN
4747       -- Initialize message list if p_init_msg_list is set to TRUE.
4748       IF FND_API.to_Boolean( p_init_msg_list )
4749       THEN
4750           FND_MSG_PUB.initialize;
4751       END IF;
4752 
4753       -- Initialize API return status to SUCCESS
4754       x_return_status := FND_API.G_RET_STS_SUCCESS;
4755 
4756       IF (p_ADDRESS_ID is not NULL) and (p_ADDRESS_ID <> FND_API.G_MISS_NUM)
4757       THEN
4758           IF (p_CUSTOMER_ID is NULL) or (p_CUSTOMER_ID = FND_API.G_MISS_NUM)
4759           THEN
4760               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4761               --      'Private API: need CUSTOMER_ID to validate ADDRESS_ID');
4762 
4763               AS_UTILITY_PVT.Set_Message(
4764                   p_module        => l_module,
4765                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4766                   p_msg_name      => 'API_MISSING_CUSTOMER_ID');
4767 
4768               x_return_status := FND_API.G_RET_STS_ERROR;
4769 
4770           ELSE
4771               AS_TCA_PVT.validate_party_site_id(
4772                   p_init_msg_list          => FND_API.G_FALSE,
4773                   p_party_id               => P_CUSTOMER_ID,
4774                   p_party_site_id          => P_ADDRESS_ID,
4775                   x_return_status          => x_return_status,
4776                   x_msg_count              => x_msg_count,
4777                   x_msg_data               => x_msg_data);
4778 
4779               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4780                   -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4781                   --               'Private API: ADDRESS_ID is invalid');
4782 		  FND_MSG_PUB.initialize;
4783                   AS_UTILITY_PVT.Set_Message(
4784                       p_module        => l_module,
4785                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4786                       p_msg_name      => 'AS_INVALID_ADDRESS_ID');
4787 
4788               END IF;
4789           END IF;
4790 
4791       ELSIF p_ADDRESS_ID = FND_API.G_MISS_NUM AND
4792             p_validation_mode = AS_UTILITY_PVT.G_UPDATE THEN
4793  	  NULL;
4794 
4795       ELSE  -- address_id is NULL or g_miss_num in creation mode
4796           IF l_debug THEN
4797           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4798                                        'ADDRESS_ID is not entered');
4799           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
4800                   FND_PROFILE.Value('AS_OPP_ADDRESS_REQUIRED'));
4801 
4802           END IF;
4803 
4804           l_check_address :=
4805                     nvl(FND_PROFILE.Value('AS_OPP_ADDRESS_REQUIRED'),'Y');
4806           IF (l_check_address = 'Y')
4807           THEN
4808               AS_UTILITY_PVT.Set_Message(
4809                   p_module        => l_module,
4810                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4811                   p_msg_name      => 'API_MISSING_ADDRESS_ID');
4812 
4813               x_return_status := FND_API.G_RET_STS_ERROR;
4814           END IF;
4815       END IF;
4816 
4817       -- Standard call to get message count and if count is 1, get message info.
4818       FND_MSG_PUB.Count_And_Get
4819       (  p_count          =>   x_msg_count,
4820          p_data           =>   x_msg_data
4821       );
4822 
4823 END Validate_ADDRESS_ID;
4824 
4825 
4826 PROCEDURE Validate_END_USER_ADDRESS_ID (
4827     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
4828     P_Validation_mode            IN   VARCHAR2,
4829     P_END_USER_ADDRESS_ID        IN   NUMBER,
4830     P_END_USER_CUSTOMER_ID       IN   NUMBER,
4831     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4832     X_Return_Status              OUT NOCOPY  VARCHAR2,
4833     X_Msg_Count                  OUT NOCOPY  NUMBER,
4834     X_Msg_Data                   OUT NOCOPY  VARCHAR2
4835     )
4836 IS
4837 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_END_USER_ADDRESS_ID';
4838 BEGIN
4839 
4840       -- Initialize message list if p_init_msg_list is set to TRUE.
4841       IF FND_API.to_Boolean( p_init_msg_list )
4842       THEN
4843           FND_MSG_PUB.initialize;
4844       END IF;
4845 
4846 
4847       -- Initialize API return status to SUCCESS
4848       x_return_status := FND_API.G_RET_STS_SUCCESS;
4849 
4850       IF (p_END_USER_ADDRESS_ID is not NULL) and
4851          (p_END_USER_ADDRESS_ID <> FND_API.G_MISS_NUM)
4852       THEN
4853           IF (p_END_USER_CUSTOMER_ID is NULL) or
4854              (p_END_USER_CUSTOMER_ID = FND_API.G_MISS_NUM)
4855           THEN
4856               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4857               --       'Private API: need CUSTOMER_ID to validate ADDRESS_ID');
4858 
4859               AS_UTILITY_PVT.Set_Message(
4860                   p_module        => l_module,
4861                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4862                   p_msg_name      => 'API_MISSING_END_USER_CUST_ID');
4863 
4864               x_return_status := FND_API.G_RET_STS_ERROR;
4865 
4866           ELSE
4867               AS_TCA_PVT.validate_party_site_id(
4868                   p_init_msg_list          => FND_API.G_FALSE,
4869                   p_party_id               => P_END_USER_CUSTOMER_ID,
4870                   p_party_site_id          => P_END_USER_ADDRESS_ID,
4871                   x_return_status          => x_return_status,
4872                   x_msg_count              => x_msg_count,
4873                   x_msg_data               => x_msg_data);
4874 
4875               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4876                   -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
4877                   --           'Private API: END_USER_ADDRESS_ID is invalid');
4878 
4879                   AS_UTILITY_PVT.Set_Message(
4880                       p_module        => l_module,
4881                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4882                       p_msg_name      => 'API_INVALID_END_USER_ADDR_ID',
4883                       p_token1        => 'VALUE',
4884                       p_token1_value  => p_END_USER_ADDRESS_ID );
4885 
4886               END IF;
4887           END IF;
4888       END IF;
4889 
4890       -- Standard call to get message count and if count is 1, get message info.
4891       FND_MSG_PUB.Count_And_Get
4892       (  p_count          =>   x_msg_count,
4893          p_data           =>   x_msg_data
4894       );
4895 
4896 END Validate_END_USER_ADDRESS_ID;
4897 
4898 PROCEDURE Validate_OPP_OWNER (
4899     P_Init_Msg_List          IN   VARCHAR2     := FND_API.G_FALSE,
4900     P_Validation_mode        IN   VARCHAR2,
4901     P_OWNER_SALESFORCE_ID    IN   NUMBER,
4902     P_OWNER_SALES_GROUP_ID   IN   NUMBER,
4903     X_Item_Property_Rec      OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
4904     X_Return_Status          OUT NOCOPY  VARCHAR2,
4905     X_Msg_Count              OUT NOCOPY  NUMBER,
4906     X_Msg_Data               OUT NOCOPY  VARCHAR2
4907     )
4908 IS
4909 
4910 CURSOR VALIDATE_SALESGROUP (p_SALESGROUP_ID NUMBER)
4911 IS
4912       SELECT 'X'
4913       FROM   jtf_rs_groups_b grp
4914       WHERE  NVL(GRP.end_date_active,SYSDATE) >= SYSDATE
4915       AND    grp.group_id = p_SALESGROUP_ID ;
4916 
4917 CURSOR VALIDATE_COMBINATION (p_SALESREP_ID NUMBER, p_SALESGROUP_ID NUMBER)
4918 IS
4919 	SELECT 'X'
4920 	  FROM jtf_rs_group_members GRPMEM
4921 	 WHERE resource_id = p_SALESREP_ID
4922 	   AND group_id = p_SALESGROUP_ID
4923 	   AND delete_flag = 'N'
4924 	   AND EXISTS
4925 		(SELECT 'X'
4926 		   FROM jtf_rs_role_relations REL
4927 		  WHERE role_resource_type = 'RS_GROUP_MEMBER'
4928 		    AND delete_flag = 'N'
4929 		    AND sysdate between REL.start_date_active  and nvl(REL.end_date_active,sysdate)
4930 		    AND REL.role_resource_id = GRPMEM.group_member_id
4931 		    AND role_id IN (SELECT role_id FROM jtf_rs_roles_b WHERE role_type_code IN ('SALES','TELESALES','FIELDSALES','PRM')));
4932 
4933 
4934 CURSOR VALIDATE_SALESREP (P_SALESREP_ID NUMBER)
4935 IS
4936       SELECT 'X'
4937       FROM   jtf_rs_resource_extns res,
4938 	     jtf_rs_role_relations rrel,
4939 	     jtf_rs_roles_b role
4940       WHERE  sysdate between res.start_date_active  and nvl(res.end_date_active,sysdate)
4941       AND    sysdate between rrel.start_date_active and nvl(rrel.end_date_active,sysdate)
4942       AND    res.resource_id = rrel.role_resource_id
4943       AND    rrel.role_resource_type = 'RS_INDIVIDUAL'
4944       AND    rrel.role_id = role.role_id
4945       AND    role.role_type_code IN ('SALES', 'TELESALES', 'FIELDSALES', 'PRM')
4946       AND    role.admin_flag = 'N'
4947       AND    res.resource_id = p_SALESREP_ID
4948       AND    res.category = 'EMPLOYEE';
4949 
4950 l_val   VARCHAR2(1);
4951 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
4952 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_OPP_OWNER';
4953 
4954 BEGIN
4955 
4956       -- Initialize message list if p_init_msg_list is set to TRUE.
4957       IF FND_API.to_Boolean( p_init_msg_list )
4958       THEN
4959           FND_MSG_PUB.initialize;
4960       END IF;
4961 
4962       -- Initialize API return status to SUCCESS
4963       x_return_status := FND_API.G_RET_STS_SUCCESS;
4964 
4965 	  OPEN  VALIDATE_SALESREP (p_owner_salesforce_id);
4966 	  FETCH VALIDATE_SALESREP into l_val;
4967 	  IF VALIDATE_SALESREP%NOTFOUND THEN
4968 	      IF l_debug THEN
4969 	      AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
4970 		    'Private API: OWNER_SALESFORCE_ID is not valid');
4971 	      END IF;
4972 		AS_UTILITY_PVT.Set_Message(
4973 		  p_module        => l_module,
4974 		  p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4975 		  p_msg_name      => 'API_INVALID_ID',
4976 		  p_token1        => 'COLUMN',
4977 		  p_token1_value  => 'OWNER SALESFORCE_ID',
4978 		  p_token2        => 'VALUE',
4979 		  p_token2_value  => p_owner_salesforce_id );
4980 	      x_return_status := FND_API.G_RET_STS_ERROR;
4981 	  END IF;
4982 	  CLOSE VALIDATE_SALESREP;
4983 
4984 	  OPEN  VALIDATE_SALESGROUP (p_owner_sales_group_id);
4985 	  FETCH VALIDATE_SALESGROUP into l_val;
4986 	  IF VALIDATE_SALESGROUP%NOTFOUND THEN
4987 	      IF l_debug THEN
4988 		      AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
4989 			    'Private API: OWNER_SALES_GROUP_ID is not valid');
4990 	      END IF;
4991 		AS_UTILITY_PVT.Set_Message(
4992 		  p_module        => l_module,
4993 		  p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
4994 		  p_msg_name      => 'API_INVALID_ID',
4995 		  p_token1        => 'COLUMN',
4996 		  p_token1_value  => 'OWNER SALESGROUP_ID',
4997 		  p_token2        => 'VALUE',
4998 		  p_token2_value  => p_owner_sales_group_id );
4999 	      x_return_status := FND_API.G_RET_STS_ERROR;
5000 	  END IF;
5001 	  CLOSE VALIDATE_SALESGROUP;
5002 
5003 	  OPEN  VALIDATE_COMBINATION (p_owner_salesforce_id,p_owner_sales_group_id);
5004 	  FETCH VALIDATE_COMBINATION into l_val;
5005 	  IF VALIDATE_COMBINATION%NOTFOUND THEN
5006 	      IF l_debug THEN
5007 	      AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_ERROR,
5008 		    'Private API: OWNER_SALES_GROUP_ID is not valid');
5009 	      END IF;
5010 		AS_UTILITY_PVT.Set_Message(
5011 		  p_module        => l_module,
5012 		  p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5013 		  p_msg_name      => 'API_INVALID_ID',
5014 		  p_token1        => 'COLUMN',
5015 		  p_token1_value  => 'OWNER SALESFORCE/SALESGROUP COMBINATION',
5016 		  p_token2        => 'VALUE',
5017 		  p_token2_value  => to_char(p_owner_salesforce_id) || '/' || to_char(p_owner_sales_group_id) );
5018 	      x_return_status := FND_API.G_RET_STS_ERROR;
5019 	  END IF;
5020 	  CLOSE VALIDATE_COMBINATION;
5021 
5022       -- Standard call to get message count and if count is 1, get message info.
5023       FND_MSG_PUB.Count_And_Get
5024       (  p_count          =>   x_msg_count,
5025          p_data           =>   x_msg_data
5026       );
5027 
5028 END Validate_OPP_OWNER;
5029 
5030 PROCEDURE Validate_AUTO_ASGN_TYPE (
5031     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5032     P_Validation_mode            IN   VARCHAR2,
5033     P_AUTO_ASSIGNMENT_TYPE       IN   VARCHAR2,
5034     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5035     X_Return_Status              OUT NOCOPY  VARCHAR2,
5036     X_Msg_Count                  OUT NOCOPY  NUMBER,
5037     X_Msg_Data                   OUT NOCOPY  VARCHAR2
5038     )
5039 IS
5040   CURSOR C_AUTO_ASGN_TYPE_Exists (c_lookup_type VARCHAR2,
5041                                   c_Lookup_Code VARCHAR2) IS
5042       SELECT  'X'
5043       FROM  as_lookups
5044       WHERE lookup_type = c_lookup_type
5045             and lookup_code = c_Lookup_Code;
5046   l_val VARCHAR2(1);
5047   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_AUTO_ASGN_TYPE';
5048 
5049 BEGIN
5050 
5051       -- Initialize message list if p_init_msg_list is set to TRUE.
5052       IF FND_API.to_Boolean( p_init_msg_list )
5053       THEN
5054           FND_MSG_PUB.initialize;
5055       END IF;
5056 
5057 
5058       -- Initialize API return status to SUCCESS
5059       x_return_status := FND_API.G_RET_STS_SUCCESS;
5060 
5061       IF (p_AUTO_ASSIGNMENT_TYPE is NOT NULL) and
5062          (p_AUTO_ASSIGNMENT_TYPE <> FND_API.G_MISS_CHAR)
5063       THEN
5064           -- AUTO_ASSIGNMENT_TYPE should exist in as_lookups
5065           OPEN  C_AUTO_ASGN_TYPE_Exists ('AUTO_ASSIGNMENT_TYPE',
5066                                          p_AUTO_ASSIGNMENT_TYPE);
5067           FETCH C_AUTO_ASGN_TYPE_Exists into l_val;
5068 
5069           IF C_AUTO_ASGN_TYPE_Exists%NOTFOUND THEN
5070               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5071               --              'Private API: AUTO_ASSIGNMENT_TYPE is invalid');
5072 
5073               AS_UTILITY_PVT.Set_Message(
5074                   p_module        => l_module,
5075                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5076                   p_msg_name      => 'API_INVALID_AUTO_ASGN_TYPE',
5077                   p_token1        => 'VALUE',
5078                   p_token1_value  => p_AUTO_ASSIGNMENT_TYPE );
5079 
5080               x_return_status := FND_API.G_RET_STS_ERROR;
5081           END IF;
5082 
5083           CLOSE C_AUTO_ASGN_TYPE_Exists;
5084       END IF;
5085 
5086       -- Standard call to get message count and if count is 1, get message info.
5087       FND_MSG_PUB.Count_And_Get
5088       (  p_count          =>   x_msg_count,
5089          p_data           =>   x_msg_data
5090       );
5091 
5092 END Validate_AUTO_ASGN_TYPE;
5093 
5094 
5095 PROCEDURE Validate_PRM_ASGN_TYPE (
5096     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5097     P_Validation_mode            IN   VARCHAR2,
5098     P_PRM_ASSIGNMENT_TYPE        IN   VARCHAR2,
5099     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5100     X_Return_Status              OUT NOCOPY  VARCHAR2,
5101     X_Msg_Count                  OUT NOCOPY  NUMBER,
5102     X_Msg_Data                   OUT NOCOPY  VARCHAR2
5103     )
5104 IS
5105   CURSOR C_PRM_ASGN_TYPE_Exists (c_lookup_type VARCHAR2,
5106                                  c_Lookup_Code VARCHAR2) IS
5107       SELECT  'X'
5108       FROM  as_lookups
5109       WHERE lookup_type = c_lookup_type
5110             and lookup_code = c_Lookup_Code;
5111   l_val VARCHAR2(1);
5112   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_PRM_ASGN_TYPE';
5113 
5114 BEGIN
5115       -- Initialize message list if p_init_msg_list is set to TRUE.
5116       IF FND_API.to_Boolean( p_init_msg_list )
5117       THEN
5118           FND_MSG_PUB.initialize;
5119       END IF;
5120 
5121       -- Initialize API return status to SUCCESS
5122       x_return_status := FND_API.G_RET_STS_SUCCESS;
5123 
5124       IF (p_PRM_ASSIGNMENT_TYPE is NOT NULL) and
5125          (p_PRM_ASSIGNMENT_TYPE <> FND_API.G_MISS_CHAR)
5126       THEN
5127           -- PRM_ASSIGNMENT_TYPE should exist in as_lookups
5128           OPEN  C_PRM_ASGN_TYPE_Exists ('PRM_ASSIGNMENT_TYPE',
5129                                         p_PRM_ASSIGNMENT_TYPE);
5130           FETCH C_PRM_ASGN_TYPE_Exists into l_val;
5131 
5132           IF C_PRM_ASGN_TYPE_Exists%NOTFOUND THEN
5133               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5134               --              'Private API: PRM_ASSIGNMENT_TYPE is invalid');
5135 
5136               AS_UTILITY_PVT.Set_Message(
5137                   p_module        => l_module,
5138                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5139                   p_msg_name      => 'API_INVALID_PRM_ASGN_TYPE',
5140                   p_token1        => 'VALUE',
5141                   p_token1_value  => p_PRM_ASSIGNMENT_TYPE );
5142 
5143               x_return_status := FND_API.G_RET_STS_ERROR;
5144           END IF;
5145 
5146           CLOSE C_PRM_ASGN_TYPE_Exists;
5147       END IF;
5148 
5149       -- Standard call to get message count and if count is 1, get message info.
5150       FND_MSG_PUB.Count_And_Get
5151       (  p_count          =>   x_msg_count,
5152          p_data           =>   x_msg_data
5153       );
5154 
5155 END Validate_PRM_ASGN_TYPE;
5156 
5157 
5158 PROCEDURE Validate_INC_PRTNR_RESOURCE_ID (
5159     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5160     P_Validation_mode            IN   VARCHAR2,
5161     P_INC_PARTNER_RESOURCE_ID    IN   NUMBER,
5162     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5163     X_Return_Status              OUT NOCOPY  VARCHAR2,
5164     X_Msg_Count                  OUT NOCOPY  NUMBER,
5165     X_Msg_Data                   OUT NOCOPY  VARCHAR2
5166     )
5167 IS
5168   CURSOR C_RESOURCE_ID_Exists (c_INC_PARTNER_RESOURCE_ID VARCHAR2) IS
5169       SELECT  'X'
5170 	 FROM as_sf_ptr_v
5171 	 WHERE SALESFORCE_ID = c_INC_PARTNER_RESOURCE_ID;
5172       --FROM  jtf_rs_resource_extns
5173       --WHERE RESOURCE_ID = c_INC_PARTNER_RESOURCE_ID;
5174   l_val VARCHAR2(1);
5175   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_INC_PRTNR_RESOURCE_ID';
5176 
5177 BEGIN
5178       -- Initialize message list if p_init_msg_list is set to TRUE.
5179       IF FND_API.to_Boolean( p_init_msg_list )
5180       THEN
5181           FND_MSG_PUB.initialize;
5182       END IF;
5183 
5184       -- Initialize API return status to SUCCESS
5185       x_return_status := FND_API.G_RET_STS_SUCCESS;
5186 
5187       IF (p_INC_PARTNER_RESOURCE_ID is NOT NULL) and
5188          (p_INC_PARTNER_RESOURCE_ID <> FND_API.G_MISS_NUM)
5189       THEN
5190           -- INCUMBENT_PARTNER_RESOURCE_ID should exist in jtf_rs_resource_extns
5191           OPEN  C_RESOURCE_ID_Exists (p_INC_PARTNER_RESOURCE_ID);
5192           FETCH C_RESOURCE_ID_Exists into l_val;
5193 
5194           IF C_RESOURCE_ID_Exists%NOTFOUND THEN
5195               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5196               --          'Private API: INC_PARTNER_RESOURCE_ID is invalid');
5197 
5198               AS_UTILITY_PVT.Set_Message(
5199                   p_module        => l_module,
5200                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5201                   p_msg_name      => 'API_INVALID_INC_PRTN_RS_ID',
5202                   p_token1        => 'VALUE',
5203                   p_token1_value  => p_INC_PARTNER_RESOURCE_ID );
5204 
5205               x_return_status := FND_API.G_RET_STS_ERROR;
5206           END IF;
5207 
5208           CLOSE C_RESOURCE_ID_Exists;
5209       END IF;
5210 
5211       -- Standard call to get message count and if count is 1, get message info.
5212       FND_MSG_PUB.Count_And_Get
5213       (  p_count          =>   x_msg_count,
5214          p_data           =>   x_msg_data
5215       );
5216 
5217 END Validate_INC_PRTNR_RESOURCE_ID;
5218 
5219 
5220 PROCEDURE Validate_PRM_IND_CLS_CODE (
5221     P_Init_Msg_List               IN   VARCHAR2     := FND_API.G_FALSE,
5222     P_Validation_mode             IN   VARCHAR2,
5223     P_PRM_IND_CLASSIFICATION_CODE IN   VARCHAR2,
5224     x_Item_Property_Rec           OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5225     X_Return_Status               OUT NOCOPY  VARCHAR2,
5226     X_Msg_Count                   OUT NOCOPY  NUMBER,
5227     X_Msg_Data                    OUT NOCOPY  VARCHAR2
5228     )
5229 IS
5230   CURSOR C_PRM_IND_CLS_CODE_Exists (c_lookup_type VARCHAR2,
5231                                     c_Lookup_Code VARCHAR2) IS
5232       SELECT  'X'
5233       FROM  as_lookups
5234       WHERE lookup_type = c_lookup_type
5235             and lookup_code = c_Lookup_Code;
5236   l_val VARCHAR2(1);
5237   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_PRM_IND_CLS_CODE';
5238 
5239 BEGIN
5240 
5241       -- Initialize message list if p_init_msg_list is set to TRUE.
5242       IF FND_API.to_Boolean( p_init_msg_list )
5243       THEN
5244           FND_MSG_PUB.initialize;
5245       END IF;
5246 
5247 
5248       -- Initialize API return status to SUCCESS
5249       x_return_status := FND_API.G_RET_STS_SUCCESS;
5250 
5251       IF (p_PRM_IND_CLASSIFICATION_CODE is NOT NULL) and
5252          (p_PRM_IND_CLASSIFICATION_CODE <> FND_API.G_MISS_CHAR)
5253       THEN
5254           -- PRM_IND_CLASSIFICATION_CODE should exist in as_lookups
5255           OPEN  C_PRM_IND_CLS_CODE_Exists ('PRM_IND_CLASSIFICATION_TYPE',
5256                                            p_PRM_IND_CLASSIFICATION_CODE);
5257           FETCH C_PRM_IND_CLS_CODE_Exists into l_val;
5258 
5259           IF C_PRM_IND_CLS_CODE_Exists%NOTFOUND THEN
5260               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5261               --       'Private API: PRM_IND_CLASSIFICATION_CODE is invalid');
5262 
5263               AS_UTILITY_PVT.Set_Message(
5264                   p_module        => l_module,
5265                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5266                   p_msg_name      => 'API_INVALID_PRM_IND_CLS_CODE',
5267                   p_token1        => 'VALUE',
5268                   p_token1_value  => p_PRM_IND_CLASSIFICATION_CODE );
5269 
5270               x_return_status := FND_API.G_RET_STS_ERROR;
5271           END IF;
5272 
5273           CLOSE C_PRM_IND_CLS_CODE_Exists;
5274       END IF;
5275 
5276       -- Standard call to get message count and if count is 1, get message info.
5277       FND_MSG_PUB.Count_And_Get
5278       (  p_count          =>   x_msg_count,
5279          p_data           =>   x_msg_data
5280       );
5281 
5282 END Validate_PRM_IND_CLS_CODE;
5283 
5284 
5285 PROCEDURE Validate_PRM_EXEC_SPONSOR_FLAG (
5286     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5287     P_Validation_mode            IN   VARCHAR2,
5288     P_PRM_EXEC_SPONSOR_FLAG      IN   VARCHAR2,
5289     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5290     X_Return_Status              OUT NOCOPY  VARCHAR2,
5291     X_Msg_Count                  OUT NOCOPY  NUMBER,
5292     X_Msg_Data                   OUT NOCOPY  VARCHAR2
5293     )
5294 IS
5295 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_PRM_EXEC_SPONSOR_FLAG';
5296 BEGIN
5297       -- Initialize message list if p_init_msg_list is set to TRUE.
5298       IF FND_API.to_Boolean( p_init_msg_list )
5299       THEN
5300           FND_MSG_PUB.initialize;
5301       END IF;
5302 
5303       -- Initialize API return status to SUCCESS
5304       x_return_status := FND_API.G_RET_STS_SUCCESS;
5305 
5306       IF (p_PRM_EXEC_SPONSOR_FLAG is NOT NULL) and
5307          (p_PRM_EXEC_SPONSOR_FLAG <> FND_API.G_MISS_CHAR)
5308       THEN
5309           IF (UPPER(p_PRM_EXEC_SPONSOR_FLAG) <> 'Y') and
5310              (UPPER(p_PRM_EXEC_SPONSOR_FLAG) <> 'N')
5311           THEN
5312               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5313               --        'Private API: PRM_EXEC_SPONSOR_FLAG is invalid');
5314 
5315               AS_UTILITY_PVT.Set_Message(
5316                   p_module        => l_module,
5317                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5318                   p_msg_name      => 'API_INVALID_PRM_EXEC_SPNR_FLAG',
5319                   p_token1        => 'VALUE',
5320                   p_token1_value  => p_PRM_EXEC_SPONSOR_FLAG );
5321 
5322               x_return_status := FND_API.G_RET_STS_ERROR;
5323           END IF;
5324       END IF;
5325 
5326       -- Standard call to get message count and if count is 1, get message info.
5327       FND_MSG_PUB.Count_And_Get
5328       (  p_count          =>   x_msg_count,
5329          p_data           =>   x_msg_data
5330       );
5331 
5332 END Validate_PRM_EXEC_SPONSOR_FLAG;
5333 
5334 
5335 PROCEDURE Validate_PRM_PRJ_LDINPLE_FLAG (
5336     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5337     P_Validation_mode            IN   VARCHAR2,
5338     P_PRM_PRJ_LEAD_IN_PLACE_FLAG IN   VARCHAR2,
5339     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5340     X_Return_Status              OUT NOCOPY  VARCHAR2,
5341     X_Msg_Count                  OUT NOCOPY  NUMBER,
5342     X_Msg_Data                   OUT NOCOPY  VARCHAR2
5343     )
5344 IS
5345 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_PRM_PRJ_LDINPLE_FLAG';
5346 BEGIN
5347       -- Initialize message list if p_init_msg_list is set to TRUE.
5348       IF FND_API.to_Boolean( p_init_msg_list )
5349       THEN
5350           FND_MSG_PUB.initialize;
5351       END IF;
5352 
5353       -- Initialize API return status to SUCCESS
5354       x_return_status := FND_API.G_RET_STS_SUCCESS;
5355 
5356       IF (p_PRM_PRJ_LEAD_IN_PLACE_FLAG is NOT NULL) and
5357          (p_PRM_PRJ_LEAD_IN_PLACE_FLAG <> FND_API.G_MISS_CHAR)
5358       THEN
5359           IF (UPPER(p_PRM_PRJ_LEAD_IN_PLACE_FLAG) <> 'Y') and
5360              (UPPER(p_PRM_PRJ_LEAD_IN_PLACE_FLAG) <> 'N')
5361           THEN
5362               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5363               --        'Private API: PRM_PRJ_LEAD_IN_PLACE_FLAG is invalid');
5364 
5365               AS_UTILITY_PVT.Set_Message(
5366                   p_module        => l_module,
5367                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5368                   p_msg_name      => 'API_INVALID_PRM_PRJ_LDINPL_FLG',
5369                   p_token1        => 'VALUE',
5370                   p_token1_value  => p_PRM_PRJ_LEAD_IN_PLACE_FLAG );
5371 
5372               x_return_status := FND_API.G_RET_STS_ERROR;
5373           END IF;
5374       END IF;
5375 
5376       -- Standard call to get message count and if count is 1, get message info.
5377       FND_MSG_PUB.Count_And_Get
5378       (  p_count          =>   x_msg_count,
5379          p_data           =>   x_msg_data
5380       );
5381 
5382 END Validate_PRM_PRJ_LDINPLE_FLAG;
5383 
5384 
5385 -- 091200 ffang, for bug 1402449, description is a mandatory column
5386 PROCEDURE Validate_Description (
5387     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
5388     P_Validation_mode    IN   VARCHAR2,
5389     P_Description        IN   VARCHAR2,
5390     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5391     X_Return_Status      OUT NOCOPY  VARCHAR2,
5392     X_Msg_Count          OUT NOCOPY  NUMBER,
5393     X_Msg_Data           OUT NOCOPY  VARCHAR2
5394     )
5395 IS
5396 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_Description';
5397 BEGIN
5398 
5399       -- Initialize message list if p_init_msg_list is set to TRUE.
5400       IF FND_API.to_Boolean( p_init_msg_list )
5401       THEN
5402           FND_MSG_PUB.initialize;
5403       END IF;
5404 
5405 
5406       -- Initialize API return status to SUCCESS
5407       x_return_status := FND_API.G_RET_STS_SUCCESS;
5408 
5409       -- validate NOT NULL column
5410       IF(p_Description is NULL)
5411       THEN
5412           AS_UTILITY_PVT.Set_Message(
5413               p_module        => l_module,
5414               p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5415               p_msg_name      => 'API_MISSING_DESCRIPTION');
5416 
5417           x_return_status := FND_API.G_RET_STS_ERROR;
5418       END IF;
5419 END Validate_Description;
5420 -- end 091200 ffang
5421 
5422 
5423 PROCEDURE Validate_FREEZE_FLAG (
5424     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5425     P_Validation_mode            IN   VARCHAR2,
5426     P_FREEZE_FLAG                IN   VARCHAR2,
5427     X_Item_Property_Rec          OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5428     X_Return_Status              OUT NOCOPY  VARCHAR2,
5429     X_Msg_Count                  OUT NOCOPY  NUMBER,
5430     X_Msg_Data                   OUT NOCOPY  VARCHAR2
5431     )
5432 IS
5433 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_FREEZE_FLAG';
5434 BEGIN
5435       -- Initialize message list if p_init_msg_list is set to TRUE.
5436       IF FND_API.to_Boolean( p_init_msg_list )
5437       THEN
5438           FND_MSG_PUB.initialize;
5439       END IF;
5440 
5441       -- Initialize API return status to SUCCESS
5442       x_return_status := FND_API.G_RET_STS_SUCCESS;
5443 
5444       IF (p_FREEZE_FLAG is NOT NULL) and
5445          (p_FREEZE_FLAG <> FND_API.G_MISS_CHAR)
5446       THEN
5447           IF (UPPER(p_FREEZE_FLAG) <> 'Y') and
5448              (UPPER(p_FREEZE_FLAG) <> 'N')
5449           THEN
5450 
5451               AS_UTILITY_PVT.Set_Message(
5452                   p_module        => l_module,
5453                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5454                   p_msg_name      => 'API_INVALID_FREEZE_FLAG',
5455                   p_token1        => 'VALUE',
5456                   p_token1_value  => p_FREEZE_FLAG );
5457 
5458               x_return_status := FND_API.G_RET_STS_ERROR;
5459           END IF;
5460       END IF;
5461 
5462       -- Standard call to get message count and if count is 1, get message info.
5463       FND_MSG_PUB.Count_And_Get
5464       (  p_count          =>   x_msg_count,
5465          p_data           =>   x_msg_data
5466       );
5467 
5468 END Validate_FREEZE_FLAG;
5469 
5470 
5471 
5472 --
5473 -- Record-level validation procedures
5474 --
5475 
5476 PROCEDURE Validate_WinPorb_StageID (
5477     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
5478     P_Validation_mode    IN   VARCHAR2,
5479     P_Sales_Methodology_ID IN NUMBER,
5480     P_SALES_STAGE_ID     IN   NUMBER,
5481     P_WIN_PROBABILITY    IN   NUMBER,
5482     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5483     X_Return_Status      OUT NOCOPY  VARCHAR2,
5484     X_Msg_Count          OUT NOCOPY  NUMBER,
5485     X_Msg_Data           OUT NOCOPY  VARCHAR2
5486     )
5487 IS
5488   CURSOR C_Get_Stage_Info (c_SALES_STAGE_ID NUMBER) IS
5489       SELECT  nvl(min_win_probability, 0), nvl(max_win_probability, 100)
5490       FROM  as_sales_stages_all_b
5491       WHERE sales_stage_id = c_Sales_Stage_Id;
5492 
5493   CURSOR c_Win_Prob_Limit(c_SALES_METHODOLOGY_ID NUMBER, c_SALES_STAGE_ID NUMBER) IS
5494       SELECT  nvl(min_win_probability, 0), nvl(max_win_probability, 100)
5495       FROM as_sales_meth_stage_map
5496       WHERE sales_methodology_id = c_SALES_METHODOLOGY_ID
5497       AND   sales_stage_id = c_SALES_STAGE_ID;
5498 
5499 
5500   l_min_winprob   NUMBER;
5501   l_max_winprob   NUMBER;
5502   l_warning_msg   VARCHAR2(2000) := '';
5503 
5504   l_prob_ss_link  VARCHAR2(10) :=
5505         NVL(FND_PROFILE.Value('AS_OPPTY_PROB_SS_LINK'), 'WARNING');
5506 
5507   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_WinPorb_StageID';
5508 
5509 BEGIN
5510 
5511       -- Initialize message list if p_init_msg_list is set to TRUE.
5512       IF FND_API.to_Boolean( p_init_msg_list )
5513       THEN
5514           FND_MSG_PUB.initialize;
5515       END IF;
5516 
5517 
5518       -- Initialize API return status to SUCCESS
5519       x_return_status := FND_API.G_RET_STS_SUCCESS;
5520 
5521    IF(p_SALES_METHODOLOGY_ID is NOT NULL) and
5522      (p_SALES_METHODOLOGY_ID <> FND_API.G_MISS_NUM) THEN
5523 
5524       IF (p_SALES_STAGE_ID is NOT NULL) and
5525          (p_SALES_STAGE_ID <> FND_API.G_MISS_NUM) and
5526          (P_WIN_PROBABILITY is NOT NULL) and
5527          (P_WIN_PROBABILITY  <> FND_API.G_MISS_NUM)
5528       THEN
5529           -- get Sales Stage information
5530           OPEN  c_Win_Prob_Limit (p_SALES_METHODOLOGY_ID, p_SALES_STAGE_ID);
5531           FETCH c_Win_Prob_Limit into l_min_winprob, l_max_winprob;
5532 
5533           IF c_Win_Prob_Limit%NOTFOUND THEN
5534               AS_UTILITY_PVT.Set_Message(
5535                   p_module        => l_module,
5536                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5537                   p_msg_name      => 'API_INVALID_SALES_STAGE_ID',
5538                   p_token1        => 'VALUE',
5539                   p_token1_value  => p_SALES_STAGE_ID );
5540 
5541               x_return_status := FND_API.G_RET_STS_ERROR;
5542 
5543           -- Validate the win probability/sales stage link
5544           ELSIF l_min_winprob > p_win_probability or
5545               l_max_winprob < p_win_probability
5546           THEN
5547               IF l_prob_ss_link = 'WARNING'
5548               THEN
5549                   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
5550                   THEN
5551 
5552 			NULL; -- bug 2437635
5553 			--FND_MESSAGE.Set_Name('AS', 'API_WARN_PROB_SS_LINK');
5554                         --FND_MSG_PUB.ADD;
5555                         --FND_MSG_PUB.G_MSG_LVL_ERROR
5556 
5557               		--AS_UTILITY_PVT.Set_Message(
5558                   	--p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5559                   	--p_msg_name      =>  'API_WARN_PROB_SS_LINK');
5560 
5561 		  	 l_warning_msg := FND_MESSAGE.GET_STRING('AS','API_WARN_PROB_SS_LINK');
5562                   -- x_return_status := FND_API.G_RET_STS_ERROR;
5563 
5564 
5565                   END IF;
5566 
5567               ELSIF l_prob_ss_link = 'ERROR'
5568               THEN
5569                   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
5570                   THEN
5571                       -- FND_MESSAGE.Set_Name('AS', 'API_ERROR_PROB_SS_LINK');
5572                       -- FND_MSG_PUB.ADD;
5573 
5574               		AS_UTILITY_PVT.Set_Message(
5575                   	p_module        => l_module,
5576                   	p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5577                   	p_msg_name      =>  'API_ERROR_PROB_SS_LINK');
5578 
5579                   END IF;
5580 
5581                   x_return_status := FND_API.G_RET_STS_ERROR;
5582 
5583               END IF;
5584           END IF;
5585 
5586           CLOSE c_Win_Prob_Limit;
5587       END IF;
5588 
5589    ELSE
5590 
5591       IF (p_SALES_STAGE_ID is NOT NULL) and
5592          (p_SALES_STAGE_ID <> FND_API.G_MISS_NUM) and
5593          (P_WIN_PROBABILITY is NOT NULL) and
5594          (P_WIN_PROBABILITY  <> FND_API.G_MISS_NUM)
5595       THEN
5596           -- get Sales Stage information
5597           OPEN  C_Get_Stage_Info (p_SALES_STAGE_ID);
5598           FETCH C_Get_Stage_Info into l_min_winprob, l_max_winprob;
5599 
5600           IF C_Get_Stage_Info%NOTFOUND THEN
5601               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5602               --                     'Private API: SALES_STAGE_ID is invalid');
5603 
5604               AS_UTILITY_PVT.Set_Message(
5605                   p_module        => l_module,
5606                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5607                   p_msg_name      => 'API_INVALID_SALES_STAGE_ID',
5608                   p_token1        => 'VALUE',
5609                   p_token1_value  => p_SALES_STAGE_ID );
5610 
5611               x_return_status := FND_API.G_RET_STS_ERROR;
5612 
5613           -- Validate the win probability/sales stage link
5614           ELSIF l_min_winprob > p_win_probability or
5615               l_max_winprob < p_win_probability
5616           THEN
5617               IF l_prob_ss_link = 'WARNING'
5618               THEN
5619                   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
5620                   THEN
5621                        --FND_MESSAGE.Set_Name('AS', 'API_WARN_PROB_SS_LINK');
5622                        --FND_MSG_PUB.ADD;
5623 
5624               		--AS_UTILITY_PVT.Set_Message(
5625                   	--p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5626                   	--p_msg_name      =>  'API_WARN_PROB_SS_LINK');
5627 		  l_warning_msg := FND_MESSAGE.GET_STRING('AS','API_WARN_PROB_SS_LINK');
5628                   -- x_return_status := FND_API.G_RET_STS_ERROR;
5629 
5630 
5631                   END IF;
5632 
5633               ELSIF l_prob_ss_link = 'ERROR'
5634               THEN
5635                   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
5636                   THEN
5637                       -- FND_MESSAGE.Set_Name('AS', 'API_ERROR_PROB_SS_LINK');
5638                       -- FND_MSG_PUB.ADD;
5639 
5640               		AS_UTILITY_PVT.Set_Message(
5641                   	p_module        => l_module,
5642                   	p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5643                   	p_msg_name      =>  'API_ERROR_PROB_SS_LINK');
5644 
5645                   END IF;
5646 
5647                   x_return_status := FND_API.G_RET_STS_ERROR;
5648 
5649               END IF;
5650           END IF;
5651 
5652           CLOSE C_Get_Stage_Info;
5653       END IF;
5654 
5655    END IF;
5656 
5657       -- Standard call to get message count and if count is 1, get message info.
5658       FND_MSG_PUB.Count_And_Get
5659       (  p_count          =>   x_msg_count,
5660          p_data           =>   x_msg_data
5661       );
5662 
5663        IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
5664        		x_msg_data := l_warning_msg;
5665        END IF;
5666 
5667 END Validate_WinPorb_StageID;
5668 
5669 
5670 PROCEDURE Validate_Status_CloseReason (
5671     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
5672     P_Validation_mode    IN   VARCHAR2,
5673     P_STATUS             IN   VARCHAR2,
5674     P_CLOSE_REASON       IN   VARCHAR2,
5675     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5676     X_Return_Status      OUT NOCOPY  VARCHAR2,
5677     X_Msg_Count          OUT NOCOPY  NUMBER,
5678     X_Msg_Data           OUT NOCOPY  VARCHAR2
5679     )
5680 IS
5681   CURSOR C_Get_OppOpenStatusFlag (c_STATUS_CODE VARCHAR2) IS
5682       SELECT  opp_open_status_flag
5683       FROM  as_statuses_b
5684       WHERE STATUS_CODE = c_STATUS_CODE
5685 		  and opp_flag = 'Y'
5686             and ENABLED_FLAG = 'Y';
5687   l_val VARCHAR2(1);
5688   l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_Status_CloseReason';
5689 
5690 BEGIN
5691 
5692       -- Initialize message list if p_init_msg_list is set to TRUE.
5693       IF FND_API.to_Boolean( p_init_msg_list )
5694       THEN
5695           FND_MSG_PUB.initialize;
5696       END IF;
5697 
5698 
5699       -- Initialize API return status to SUCCESS
5700       x_return_status := FND_API.G_RET_STS_SUCCESS;
5701 
5702 	 IF (p_STATUS is NOT NULL) and (p_STATUS <> FND_API.G_MISS_CHAR)
5703 	 THEN
5704           IF (P_CLOSE_REASON is NULL) or (P_CLOSE_REASON = FND_API.G_MISS_CHAR)
5705           THEN
5706               -- get opp_open_status_flag
5707               OPEN  C_Get_OppOpenStatusFlag (p_STATUS);
5708               FETCH C_Get_OppOpenStatusFlag into l_val;
5709 
5710               IF C_Get_OppOpenStatusFlag%NOTFOUND THEN
5711               -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5712               --                     'Private API: STATUS is invalid');
5713 
5714                   AS_UTILITY_PVT.Set_Message(
5715                       p_module        => l_module,
5716                       p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5717                       p_msg_name      => 'API_INVALID_OPP_STATUS',
5718                       p_token1        => 'VALUE',
5719                       p_token1_value  => p_STATUS );
5720 
5721                   x_return_status := FND_API.G_RET_STS_ERROR;
5722 
5723               -- If opp_open_status_flag = 'N' (closed status),
5724               -- then close_reason should exist
5725               ELSIF l_val = 'N'
5726               THEN
5727                   -- AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR,
5728                   --     'Private API: CLOSE_REASON is missing');
5729 
5730                   AS_UTILITY_PVT.Set_Message(
5731                      p_module        => l_module,
5732                      p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5733                      p_msg_name      => 'API_MISSING_CLOSE_REASON');
5734 
5735                   x_return_status := FND_API.G_RET_STS_ERROR;
5736 
5737               END IF;
5738 
5739               CLOSE C_Get_OppOpenStatusFlag;
5740           END IF;
5741       END IF;
5742 
5743       -- Standard call to get message count and if count is 1, get message info.
5744       FND_MSG_PUB.Count_And_Get
5745       (  p_count          =>   x_msg_count,
5746          p_data           =>   x_msg_data
5747       );
5748 
5749 END Validate_Status_CloseReason;
5750 
5751 
5752 
5753 
5754 PROCEDURE Validate_DecisionDate (
5755     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
5756     P_Validation_mode    IN   VARCHAR2,
5757     P_DECISION_DATE      IN   DATE,
5758     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5759     X_Return_Status      OUT NOCOPY  VARCHAR2,
5760     X_Msg_Count          OUT NOCOPY  NUMBER,
5761     X_Msg_Data           OUT NOCOPY  VARCHAR2
5762     )
5763 IS
5764 
5765 l_max_date DATE;
5766 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_DecisionDate';
5767 
5768 BEGIN
5769 
5770       -- Initialize message list if p_init_msg_list is set to TRUE.
5771       IF FND_API.to_Boolean( p_init_msg_list )
5772       THEN
5773           FND_MSG_PUB.initialize;
5774       END IF;
5775 
5776 
5777       -- Initialize API return status to SUCCESS
5778       x_return_status := FND_API.G_RET_STS_SUCCESS;
5779 
5780 
5781       IF FND_PROFILE.value('AS_MAX_DAY_CLOSE_OPPORTUNITY') IS NOT NULL THEN
5782       l_max_date := TRUNC(SYSDATE)+ to_number(FND_PROFILE.value('AS_MAX_DAY_CLOSE_OPPORTUNITY'));
5783              IF TRUNC(P_DECISION_DATE) > l_max_date THEN
5784       		--DBMS_OUTPUT.PUT_LINE('rAISE ERROR');
5785       		x_return_status := FND_API.G_RET_STS_ERROR;
5786               	AS_UTILITY_PVT.Set_Message(
5787               	         p_module        => l_module,
5788               	         p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5789               	         p_msg_name      => 'AS_CLOSE_DATE_VALIDATION',
5790               	         p_token1        => 'DATE',
5791                          p_token1_value  =>  TO_CHAR(l_max_date));
5792              END IF;
5793       END IF;
5794 
5795 
5796       -- Standard call to get message count and if count is 1, get message info.
5797       FND_MSG_PUB.Count_And_Get
5798       (  p_count          =>   x_msg_count,
5799          p_data           =>   x_msg_data
5800       );
5801 
5802 EXCEPTION
5803       WHEN VALUE_ERROR THEN
5804       	--DBMS_OUTPUT.PUT_LINE('In VALUE_ERROR exception');
5805       	x_return_status := FND_API.G_RET_STS_ERROR;
5806       	AS_UTILITY_PVT.Set_Message(
5807                        p_module        => l_module,
5808                        p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5809                        p_msg_name      => 'AS_MAX_DAY_ERROR');
5810 
5811 END Validate_DecisionDate;
5812 
5813 
5814 PROCEDURE Validate_BudgetAmt_Currency (
5815     P_Init_Msg_List      IN   VARCHAR2     := FND_API.G_FALSE,
5816     P_Validation_mode    IN   VARCHAR2,
5817     P_TOTAL_AMOUNT       IN   NUMBER,
5818     P_CURRENCY_CODE      IN   VARCHAR2,
5819     X_Item_Property_Rec  OUT NOCOPY  AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE,
5820     X_Return_Status      OUT NOCOPY  VARCHAR2,
5821     X_Msg_Count          OUT NOCOPY  NUMBER,
5822     X_Msg_Data           OUT NOCOPY  VARCHAR2
5823     )
5824 IS
5825 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_BudgetAmt_Currency';
5826 
5827 BEGIN
5828 
5829       -- Initialize message list if p_init_msg_list is set to TRUE.
5830       IF FND_API.to_Boolean( p_init_msg_list )
5831       THEN
5832           FND_MSG_PUB.initialize;
5833       END IF;
5834 
5835 
5836       -- Initialize API return status to SUCCESS
5837       x_return_status := FND_API.G_RET_STS_SUCCESS;
5838 
5839       -- If budget amount is entered
5840       -- then currency_code should exist
5841       IF (P_TOTAL_AMOUNT is NOT NULL) and
5842          (P_TOTAL_AMOUNT <> FND_API.G_MISS_NUM)
5843       THEN
5844           IF (p_CURRENCY_CODE is NULL) or
5845              (p_CURRENCY_CODE = FND_API.G_MISS_CHAR)
5846           THEN
5847               AS_UTILITY_PVT.Set_Message(
5848                  p_module        => l_module,
5849                  p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
5850                  p_msg_name      => 'API_MISSING_CURRENCY_CODE');
5851 
5852               x_return_status := FND_API.G_RET_STS_ERROR;
5853           END IF;
5854       END IF;
5855 
5856       -- Standard call to get message count and if count is 1, get message info.
5857       FND_MSG_PUB.Count_And_Get
5858       (  p_count          =>   x_msg_count,
5859          p_data           =>   x_msg_data
5860       );
5861 
5862 
5863 END Validate_BudgetAmt_Currency;
5864 
5865 
5866 
5867 PROCEDURE Validate_opp_header(
5868     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
5869     P_Validation_level           IN   NUMBER := FND_API.G_VALID_LEVEL_FULL,
5870     P_Validation_mode            IN   VARCHAR2,
5871     P_Header_Rec                 IN   AS_OPPORTUNITY_PUB.Header_Rec_Type,
5872     X_Return_Status              OUT NOCOPY  VARCHAR2,
5873     X_Msg_Count                  OUT NOCOPY  NUMBER,
5874     X_Msg_Data                   OUT NOCOPY  VARCHAR2
5875 
5876     )
5877 IS
5878 l_api_name   CONSTANT VARCHAR2(30) := 'Validate_opp_header';
5879 l_Item_Property_Rec   AS_UTILITY_PUB.ITEM_PROPERTY_REC_TYPE;
5880 l_debug BOOLEAN := FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
5881 l_Win_prob_warning_msg VARCHAR2(2000) := '';
5882 l_module CONSTANT VARCHAR2(255) := 'as.plsql.ldhpv.Validate_opp_header';
5883  BEGIN
5884 
5885       -- Debug Message
5886       IF l_debug THEN
5887       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5888                                    'Private API: ' || l_api_name || ' start');
5889       END IF;
5890 
5891 
5892       -- Initialize API return status to SUCCESS
5893       x_return_status := FND_API.G_RET_STS_SUCCESS;
5894 
5895       -- Added for MOAC
5896       Validate_ORG_ID(
5897           p_init_msg_list          => FND_API.G_FALSE,
5898           p_validation_mode        => p_validation_mode,
5899           p_ORG_ID                 => P_Header_Rec.ORG_ID,
5900           x_return_status          => x_return_status,
5901           x_msg_count              => x_msg_count,
5902           x_msg_data               => x_msg_data);
5903       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5904           raise FND_API.G_EXC_ERROR;
5905       END IF;
5906 
5907       -- Calling item level validation procedures
5908       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_ITEM)
5909       THEN
5910               IF l_debug THEN
5911               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5912                                            'Validate_LEAD_ID');
5913               END IF;
5914 
5915               Validate_LEAD_ID(
5916                   p_init_msg_list          => FND_API.G_FALSE,
5917                   p_validation_mode        => p_validation_mode,
5918                   p_LEAD_ID                => P_Header_Rec.LEAD_ID,
5919                   x_item_property_rec      => l_item_property_rec,
5920                   x_return_status          => x_return_status,
5921                   x_msg_count              => x_msg_count,
5922                   x_msg_data               => x_msg_data);
5923               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5924                   raise FND_API.G_EXC_ERROR;
5925               END IF;
5926 
5927 
5928 
5929               IF l_debug THEN
5930               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5931                                            'Validate_STATUS');
5932 	      END IF;
5933 
5934               Validate_STATUS(
5935                   p_init_msg_list          => FND_API.G_FALSE,
5936                   p_validation_mode        => p_validation_mode,
5937                   p_STATUS                 => P_HEADER_REC.STATUS_CODE,
5938                   x_item_property_rec      => l_item_property_rec,
5939                   x_return_status          => x_return_status,
5940                   x_msg_count              => x_msg_count,
5941                   x_msg_data               => x_msg_data);
5942               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5943                   raise FND_API.G_EXC_ERROR;
5944               END IF;
5945 
5946               IF l_debug THEN
5947               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5948                                            'Validate_SALES_STAGE_ID');
5949 	      END IF;
5950 
5951               Validate_SALES_STAGE_ID(
5952                   p_init_msg_list          => FND_API.G_FALSE,
5953                   p_validation_mode        => p_validation_mode,
5954                   p_SALES_STAGE_ID         => P_Header_Rec.SALES_STAGE_ID,
5955                   x_item_property_rec      => l_item_property_rec,
5956                   x_return_status          => x_return_status,
5957                   x_msg_count              => x_msg_count,
5958                   x_msg_data               => x_msg_data);
5959               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5960                   raise FND_API.G_EXC_ERROR;
5961               END IF;
5962 
5963               IF l_debug THEN
5964               	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Validate_CHANNEL_CODE');
5965               END IF;
5966 
5967               Validate_CHANNEL_CODE(
5968                   p_init_msg_list          => FND_API.G_FALSE,
5969                   p_validation_mode        => p_validation_mode,
5970                   p_CHANNEL_CODE           => P_Header_Rec.CHANNEL_CODE,
5971                   x_item_property_rec      => l_item_property_rec,
5972                   x_return_status          => x_return_status,
5973                   x_msg_count              => x_msg_count,
5974                   x_msg_data               => x_msg_data);
5975               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5976                   raise FND_API.G_EXC_ERROR;
5977               END IF;
5978 
5979               IF l_debug THEN
5980               	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Validate_CURRENCY_CODE');
5981               END IF;
5982 
5983               Validate_CURRENCY_CODE(
5984                   p_init_msg_list          => FND_API.G_FALSE,
5985                   p_validation_mode        => p_validation_mode,
5986                   p_CURRENCY_CODE          => P_Header_Rec.CURRENCY_CODE,
5987                   x_item_property_rec      => l_item_property_rec,
5988                   x_return_status          => x_return_status,
5989                   x_msg_count              => x_msg_count,
5990                   x_msg_data               => x_msg_data);
5991               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5992                   raise FND_API.G_EXC_ERROR;
5993               END IF;
5994 
5995 	      IF l_debug THEN
5996 	            AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
5997 	                                         'Validate_DecisionDate');
5998 	      END IF;
5999 	  	Validate_DecisionDate(
6000 	                p_init_msg_list          => FND_API.G_FALSE,
6001 	                p_validation_mode        => p_validation_mode,
6002 	                P_DECISION_DATE          => P_Header_Rec.DECISION_DATE,
6003 	                x_item_property_rec      => l_item_property_rec,
6004 	                x_return_status          => x_return_status,
6005 	                x_msg_count              => x_msg_count,
6006 	                x_msg_data               => x_msg_data);
6007 	        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6008 	                raise FND_API.G_EXC_ERROR;
6009 	        END IF;
6010 
6011           	IF l_debug THEN
6012           	AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6013                                        'Validate_BudgetAmt_Currency');
6014 
6015           	END IF;
6016 
6017               IF l_debug THEN
6018               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6019                                            'Validate_WIN_PROBABILITY');
6020 
6021               END IF;
6022 
6023               Validate_WIN_PROBABILITY(
6024                   p_init_msg_list          => FND_API.G_FALSE,
6025                   p_validation_mode        => p_validation_mode,
6026                   p_WIN_PROBABILITY        => P_Header_Rec.WIN_PROBABILITY,
6027                   x_item_property_rec      => l_item_property_rec,
6028                   x_return_status          => x_return_status,
6029                       x_msg_count              => x_msg_count,
6030                   x_msg_data               => x_msg_data);
6031                   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6032                   raise FND_API.G_EXC_ERROR;
6033               END IF;
6034 
6035               IF l_debug THEN
6036               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6037                                            'Validate_CLOSE_REASON');
6038 	      END IF;
6039 
6040               Validate_CLOSE_REASON(
6041                   p_init_msg_list          => FND_API.G_FALSE,
6042                   p_validation_mode        => p_validation_mode,
6043                   p_CLOSE_REASON           => P_Header_Rec.CLOSE_REASON,
6044                   x_item_property_rec      => l_item_property_rec,
6045                   x_return_status          => x_return_status,
6046                   x_msg_count              => x_msg_count,
6047                   x_msg_data               => x_msg_data);
6048               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6049                   raise FND_API.G_EXC_ERROR;
6050               END IF;
6051 
6052               IF l_debug THEN
6053               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6054                                        'Validate_SOURCE_PROMOTION_ID');
6055 		END IF;
6056 
6057               Validate_SOURCE_PROMOTION_ID(
6058                   p_init_msg_list          => FND_API.G_FALSE,
6059                   p_validation_mode        => p_validation_mode,
6060                   p_SOURCE_PROMOTION_ID    => P_Header_Rec.SOURCE_PROMOTION_ID,
6061                   x_item_property_rec      => l_item_property_rec,
6062                   x_return_status          => x_return_status,
6063                   x_msg_count              => x_msg_count,
6064                   x_msg_data               => x_msg_data);
6065               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6066                   raise FND_API.G_EXC_ERROR;
6067               END IF;
6068 
6069               IF l_debug THEN
6070               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6071                                            'Validate_NO_OPP_ALLOWED_FLAG');
6072               END IF;
6073 
6074               Validate_NO_OPP_ALLOWED_FLAG(
6075                   p_init_msg_list          => FND_API.G_FALSE,
6076                   p_validation_mode        => p_validation_mode,
6077                   p_NO_OPP_ALLOWED_FLAG    => P_Header_Rec.NO_OPP_ALLOWED_FLAG,
6078                   x_item_property_rec      => l_item_property_rec,
6079                   x_return_status          => x_return_status,
6080                   x_msg_count              => x_msg_count,
6081                   x_msg_data               => x_msg_data);
6082               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6083                   raise FND_API.G_EXC_ERROR;
6084               END IF;
6085 
6086               IF l_debug THEN
6087               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6088                                            'Validate_DELETE_ALLOWED_FLAG');
6089               END IF;
6090 
6091               Validate_DELETE_ALLOWED_FLAG(
6092                   p_init_msg_list          => FND_API.G_FALSE,
6093                   p_validation_mode        => p_validation_mode,
6094                   p_DELETE_ALLOWED_FLAG    => P_Header_Rec.DELETE_ALLOWED_FLAG,
6095                   x_item_property_rec      => l_item_property_rec,
6096                   x_return_status          => x_return_status,
6097                   x_msg_count              => x_msg_count,
6098                   x_msg_data               => x_msg_data);
6099               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6100                   raise FND_API.G_EXC_ERROR;
6101               END IF;
6102 
6103               IF l_debug THEN
6104               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6105                                            'Validate_LEAD_SOURCE_CODE');
6106               END IF;
6107 
6108               Validate_LEAD_SOURCE_CODE(
6109                   p_init_msg_list          => FND_API.G_FALSE,
6110                   p_validation_mode        => p_validation_mode,
6111                   p_LEAD_SOURCE_CODE       => P_Header_Rec.LEAD_SOURCE_CODE,
6112                   x_item_property_rec      => l_item_property_rec,
6113                   x_return_status          => x_return_status,
6114                   x_msg_count              => x_msg_count,
6115                   x_msg_data               => x_msg_data);
6116               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6117                   raise FND_API.G_EXC_ERROR;
6118               END IF;
6119 
6120               IF l_debug THEN
6121               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6122                                            'Validate_PRICE_LIST_ID');
6123               END IF;
6124 
6125               Validate_PRICE_LIST_ID(
6126                   p_init_msg_list          => FND_API.G_FALSE,
6127                   p_validation_mode        => p_validation_mode,
6128                   p_PRICE_LIST_ID          => P_Header_Rec.PRICE_LIST_ID,
6129                   p_CURRENCY_CODE          => P_Header_Rec.CURRENCY_CODE,
6130                   x_item_property_rec      => l_item_property_rec,
6131                   x_return_status          => x_return_status,
6132                   x_msg_count              => x_msg_count,
6133                   x_msg_data               => x_msg_data);
6134               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6135                   raise FND_API.G_EXC_ERROR;
6136               END IF;
6137 
6138               IF l_debug THEN
6139               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6140                                            'Validate_DELETED_FLAG');
6141               END IF;
6142 
6143               Validate_DELETED_FLAG(
6144                   p_init_msg_list          => FND_API.G_FALSE,
6145                   p_validation_mode        => p_validation_mode,
6146                   p_DELETED_FLAG           => P_Header_Rec.DELETED_FLAG,
6147                   x_item_property_rec      => l_item_property_rec,
6148                   x_return_status          => x_return_status,
6149                   x_msg_count              => x_msg_count,
6150                   x_msg_data               => x_msg_data);
6151               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6152                   raise FND_API.G_EXC_ERROR;
6153               END IF;
6154 
6155               IF l_debug THEN
6156               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6157                                            'Validate_METHODOLOGY_CODE');
6158               END IF;
6159 
6160               Validate_METHODOLOGY_CODE(
6161                   p_init_msg_list          => FND_API.G_FALSE,
6162                   p_validation_mode        => p_validation_mode,
6163                   p_METHODOLOGY_CODE       => P_Header_Rec.METHODOLOGY_CODE,
6164                   x_item_property_rec      => l_item_property_rec,
6165                   x_return_status          => x_return_status,
6166                   x_msg_count              => x_msg_count,
6167                   x_msg_data               => x_msg_data);
6168               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6169                   raise FND_API.G_EXC_ERROR;
6170               END IF;
6171 
6172               IF l_debug THEN
6173               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6174                                            'Validate_ORIGINAL_LEAD_ID');
6175               END IF;
6176 
6177               Validate_ORIGINAL_LEAD_ID(
6178                   p_init_msg_list          => FND_API.G_FALSE,
6179                   p_validation_mode        => p_validation_mode,
6180                   p_ORIGINAL_LEAD_ID       => P_Header_Rec.ORIGINAL_LEAD_ID,
6181                   x_item_property_rec      => l_item_property_rec,
6182                   x_return_status          => x_return_status,
6183                   x_msg_count              => x_msg_count,
6184                   x_msg_data               => x_msg_data);
6185               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6186                   raise FND_API.G_EXC_ERROR;
6187               END IF;
6188 
6189               IF l_debug THEN
6190               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6191                                            'Validate_DECN_TIMEFRAME_CODE');
6192               END IF;
6193 
6194               Validate_DECN_TIMEFRAME_CODE(
6195                   p_init_msg_list          => FND_API.G_FALSE,
6196                   p_validation_mode        => p_validation_mode,
6197                   p_DECISION_TIMEFRAME_CODE
6198                                        => P_Header_Rec.DECISION_TIMEFRAME_CODE,
6199                   x_item_property_rec      => l_item_property_rec,
6200                   x_return_status          => x_return_status,
6201                   x_msg_count              => x_msg_count,
6202                   x_msg_data               => x_msg_data);
6203               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6204                   raise FND_API.G_EXC_ERROR;
6205               END IF;
6206 
6207               IF l_debug THEN
6208               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6209                                            'Validate_OFFER_ID');
6210               END IF;
6211 
6212               Validate_OFFER_ID(
6213                   p_init_msg_list          => FND_API.G_FALSE,
6214                   p_validation_mode        => p_validation_mode,
6215 		  p_SOURCE_PROMOTION_ID    => P_Header_Rec.SOURCE_PROMOTION_ID,
6216                   p_OFFER_ID               => P_Header_Rec.OFFER_ID,
6217                   x_item_property_rec      => l_item_property_rec,
6218                   x_return_status          => x_return_status,
6219                   x_msg_count              => x_msg_count,
6220                   x_msg_data               => x_msg_data);
6221               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6222                   raise FND_API.G_EXC_ERROR;
6223               END IF;
6224 
6225               IF l_debug THEN
6226               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6227                                            'Validate_VEHICLE_RESPONSE_CODE');
6228               END IF;
6229 
6230               Validate_VEHICLE_RESPONSE_CODE(
6231                   p_init_msg_list          => FND_API.G_FALSE,
6232                   p_validation_mode        => p_validation_mode,
6233                   p_VEHICLE_RESPONSE_CODE => P_Header_Rec.VEHICLE_RESPONSE_CODE,
6234                   x_item_property_rec      => l_item_property_rec,
6235                   x_return_status          => x_return_status,
6236                   x_msg_count              => x_msg_count,
6237                   x_msg_data               => x_msg_data);
6238               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6239                   raise FND_API.G_EXC_ERROR;
6240               END IF;
6241 
6242               IF l_debug THEN
6243               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6244                                            'Validate_BUDGET_STATUS_CODE');
6245               END IF;
6246 
6247               Validate_BUDGET_STATUS_CODE(
6248                   p_init_msg_list          => FND_API.G_FALSE,
6249                   p_validation_mode        => p_validation_mode,
6250                   p_BUDGET_STATUS_CODE   => P_Header_Rec.BUDGET_STATUS_CODE,
6251                   x_item_property_rec      => l_item_property_rec,
6252                   x_return_status          => x_return_status,
6253                   x_msg_count              => x_msg_count,
6254                   x_msg_data               => x_msg_data);
6255               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6256                   raise FND_API.G_EXC_ERROR;
6257               END IF;
6258 
6259               IF l_debug THEN
6260               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6261                                            'Validate_PRM_LEAD_TYPE');
6262               END IF;
6263 
6264               Validate_PRM_LEAD_TYPE(
6265                   p_init_msg_list          => FND_API.G_FALSE,
6266                   p_validation_mode        => p_validation_mode,
6267                   P_PRM_LEAD_TYPE          => P_Header_Rec.PRM_LEAD_TYPE,
6268                   x_item_property_rec      => l_item_property_rec,
6269                   x_return_status          => x_return_status,
6270                   x_msg_count              => x_msg_count,
6271                   x_msg_data               => x_msg_data);
6272               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6273                   raise FND_API.G_EXC_ERROR;
6274               END IF;
6275 
6276               IF l_debug THEN
6277               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6278                                        'Validate_CUSTOMER_ID');
6279               END IF;
6280 
6281               Validate_CUSTOMER_ID(
6282                   p_init_msg_list          => FND_API.G_FALSE,
6283                   p_validation_mode        => p_validation_mode,
6284                   p_CUSTOMER_ID            => P_Header_Rec.CUSTOMER_ID,
6285                   x_item_property_rec      => l_item_property_rec,
6286                   x_return_status          => x_return_status,
6287                   x_msg_count              => x_msg_count,
6288                   x_msg_data               => x_msg_data);
6289               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6290                   raise FND_API.G_EXC_ERROR;
6291               END IF;
6292 
6293               IF l_debug THEN
6294               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6295                                            'Validate_INC_PARTNER_PARTY_ID');
6296               END IF;
6297 
6298               Validate_INC_PARTNER_PARTY_ID(
6299                   p_init_msg_list          => FND_API.G_FALSE,
6300                   p_validation_mode        => p_validation_mode,
6301                   P_INC_PARTNER_PARTY_ID   =>
6302                                       P_Header_Rec.INCUMBENT_PARTNER_PARTY_ID,
6303                   x_item_property_rec      => l_item_property_rec,
6304                   x_return_status          => x_return_status,
6305                   x_msg_count              => x_msg_count,
6306                   x_msg_data               => x_msg_data);
6307               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6308                   raise FND_API.G_EXC_ERROR;
6309               END IF;
6310 
6311               IF l_debug THEN
6312               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6313                                            'Validate_CLOSE_COMPETITOR_ID');
6314               END IF;
6315 
6316               Validate_CLOSE_COMPETITOR_ID(
6317                   p_init_msg_list          => FND_API.G_FALSE,
6318                   p_validation_mode        => p_validation_mode,
6319                   p_CLOSE_COMPETITOR_ID    => P_Header_Rec.CLOSE_COMPETITOR_ID,
6320                   x_item_property_rec      => l_item_property_rec,
6321                   x_return_status          => x_return_status,
6322                   x_msg_count              => x_msg_count,
6323                   x_msg_data               => x_msg_data);
6324               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6325                   raise FND_API.G_EXC_ERROR;
6326               END IF;
6327 
6328               IF l_debug THEN
6329               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6330                                        'Validate_END_USER_CUSTOMER_ID');
6331               END IF;
6332 
6333               Validate_END_USER_CUSTOMER_ID(
6334                   p_init_msg_list          => FND_API.G_FALSE,
6335                   p_validation_mode        => p_validation_mode,
6336                   p_END_USER_CUSTOMER_ID   => P_Header_Rec.END_USER_CUSTOMER_ID,
6337                   x_item_property_rec      => l_item_property_rec,
6338                   x_return_status          => x_return_status,
6339                   x_msg_count              => x_msg_count,
6340                   x_msg_data               => x_msg_data);
6341               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6342                   raise FND_API.G_EXC_ERROR;
6343               END IF;
6344 
6345               IF l_debug THEN
6346               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6347                                            'Validate_ADDRESS_ID');
6348               END IF;
6349 
6350               Validate_ADDRESS_ID(
6351                   p_init_msg_list          => FND_API.G_FALSE,
6352                   p_validation_mode        => p_validation_mode,
6353                   p_ADDRESS_ID             => P_Header_Rec.ADDRESS_ID,
6354                   p_CUSTOMER_ID            => P_Header_Rec.CUSTOMER_ID,
6355                   x_item_property_rec      => l_item_property_rec,
6356                   x_return_status          => x_return_status,
6357                   x_msg_count              => x_msg_count,
6358                   x_msg_data               => x_msg_data);
6359               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6360                   raise FND_API.G_EXC_ERROR;
6361               END IF;
6362 
6363               IF l_debug THEN
6364               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6365                                            'Validate_END_USER_ADDRESS_ID');
6366               END IF;
6367 
6368               Validate_END_USER_ADDRESS_ID(
6369                   p_init_msg_list          => FND_API.G_FALSE,
6370                   p_validation_mode        => p_validation_mode,
6371                   p_END_USER_ADDRESS_ID    => P_Header_Rec.END_USER_ADDRESS_ID,
6372                   P_END_USER_CUSTOMER_ID   => P_Header_Rec.END_USER_CUSTOMER_ID,
6373                   x_item_property_rec      => l_item_property_rec,
6374                   x_return_status          => x_return_status,
6375                   x_msg_count              => x_msg_count,
6376                   x_msg_data               => x_msg_data);
6377               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6378                   raise FND_API.G_EXC_ERROR;
6379               END IF;
6380 
6381               IF l_debug THEN
6382               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6383                                            'Validate_AUTO_ASGN_TYPE');
6384               END IF;
6385 
6386               Validate_AUTO_ASGN_TYPE(
6387                   p_init_msg_list          => FND_API.G_FALSE,
6388                   p_validation_mode        => p_validation_mode,
6389                   p_AUTO_ASSIGNMENT_TYPE   => P_Header_Rec.AUTO_ASSIGNMENT_TYPE,
6390                   x_item_property_rec      => l_item_property_rec,
6391                   x_return_status          => x_return_status,
6392                   x_msg_count              => x_msg_count,
6393                   x_msg_data               => x_msg_data);
6394               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6395                   raise FND_API.G_EXC_ERROR;
6396               END IF;
6397 
6398               IF l_debug THEN
6399               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6400                                            'Validate_PRM_ASGN_TYPE');
6401               END IF;
6402 
6403               Validate_PRM_ASGN_TYPE(
6404                   p_init_msg_list          => FND_API.G_FALSE,
6405                   p_validation_mode        => p_validation_mode,
6406                   p_PRM_ASSIGNMENT_TYPE    => P_Header_Rec.PRM_ASSIGNMENT_TYPE,
6407                   x_item_property_rec      => l_item_property_rec,
6408                   x_return_status          => x_return_status,
6409                   x_msg_count              => x_msg_count,
6410                   x_msg_data               => x_msg_data);
6411               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6412                   raise FND_API.G_EXC_ERROR;
6413               END IF;
6414 
6415               IF l_debug THEN
6416               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6417                                            'Validate_INC_PRTNR_RESOURCE_ID');
6418               END IF;
6419 
6420               Validate_INC_PRTNR_RESOURCE_ID(
6421                   p_init_msg_list          => FND_API.G_FALSE,
6422                   p_validation_mode        => p_validation_mode,
6423                   P_INC_PARTNER_RESOURCE_ID   =>
6424                                     P_Header_Rec.INCUMBENT_PARTNER_RESOURCE_ID,
6425                   x_item_property_rec      => l_item_property_rec,
6426                   x_return_status          => x_return_status,
6427                   x_msg_count              => x_msg_count,
6428                   x_msg_data               => x_msg_data);
6429               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6430                   raise FND_API.G_EXC_ERROR;
6431               END IF;
6432 
6433               IF l_debug THEN
6434               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6435                                            'Validate_PRM_IND_CLS_CODE');
6436               END IF;
6437 
6438               Validate_PRM_IND_CLS_CODE(
6439                   p_init_msg_list          => FND_API.G_FALSE,
6440                   p_validation_mode        => p_validation_mode,
6441                   p_PRM_IND_CLASSIFICATION_CODE   =>
6442                                       P_Header_Rec.PRM_IND_CLASSIFICATION_CODE,
6443                   x_item_property_rec      => l_item_property_rec,
6444                   x_return_status          => x_return_status,
6445                   x_msg_count              => x_msg_count,
6446                   x_msg_data               => x_msg_data);
6447               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6448                   raise FND_API.G_EXC_ERROR;
6449               END IF;
6450 
6451               IF l_debug THEN
6452               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6453                                            'Validate_PRM_EXEC_SPONSOR_FLAG');
6454               END IF;
6455 
6456               Validate_PRM_EXEC_SPONSOR_FLAG(
6457                   p_init_msg_list          => FND_API.G_FALSE,
6458                   p_validation_mode        => p_validation_mode,
6459                   p_PRM_EXEC_SPONSOR_FLAG => P_Header_Rec.PRM_EXEC_SPONSOR_FLAG,
6460                   x_item_property_rec      => l_item_property_rec,
6461                   x_return_status          => x_return_status,
6462                   x_msg_count              => x_msg_count,
6463                   x_msg_data               => x_msg_data);
6464               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6465                   raise FND_API.G_EXC_ERROR;
6466               END IF;
6467 
6468               IF l_debug THEN
6469               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6470                                            'Validate_PRM_PRJ_LDINPLE_FLAG');
6471               END IF;
6472 
6473               Validate_PRM_PRJ_LDINPLE_FLAG(
6474                   p_init_msg_list          => FND_API.G_FALSE,
6475                   p_validation_mode        => p_validation_mode,
6476                   p_PRM_PRJ_LEAD_IN_PLACE_FLAG   =>
6477                                       P_Header_Rec.PRM_PRJ_LEAD_IN_PLACE_FLAG,
6478                   x_item_property_rec      => l_item_property_rec,
6479                   x_return_status          => x_return_status,
6480                   x_msg_count              => x_msg_count,
6481                   x_msg_data               => x_msg_data);
6482               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6483                   raise FND_API.G_EXC_ERROR;
6484               END IF;
6485 
6486               -- 091200 ffang, for bug 1402449
6487               IF l_debug THEN
6488               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6489                                            'Validate_DESCRIPTION');
6490               END IF;
6491 
6492               Validate_DESCRIPTION(
6493                   p_init_msg_list          => FND_API.G_FALSE,
6494                   p_validation_mode        => p_validation_mode,
6495                   p_DESCRIPTION            => P_Header_Rec.DESCRIPTION,
6496                   x_item_property_rec      => l_item_property_rec,
6497                   x_return_status          => x_return_status,
6498                   x_msg_count              => x_msg_count,
6499                   x_msg_data               => x_msg_data);
6500               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6501                   raise FND_API.G_EXC_ERROR;
6502               END IF;
6503               -- end 091200 ffang
6504 
6505               -- solin, for bug 1554330
6506               IF l_debug THEN
6507               AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6508                                            'Validate_FREEZE_FLAG');
6509               END IF;
6510 
6511               Validate_FREEZE_FLAG(
6512                   p_init_msg_list          => FND_API.G_FALSE,
6513                   p_validation_mode        => p_validation_mode,
6514                   p_FREEZE_FLAG            =>
6515                                       P_Header_Rec.FREEZE_FLAG,
6516                   x_item_property_rec      => l_item_property_rec,
6517                   x_return_status          => x_return_status,
6518                   x_msg_count              => x_msg_count,
6519                   x_msg_data               => x_msg_data);
6520               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6521                   raise FND_API.G_EXC_ERROR;
6522               END IF;
6523               IF (P_Header_Rec.OWNER_SALESFORCE_ID IS NOT NULL AND
6524 	          P_Header_Rec.OWNER_SALESFORCE_ID <> FND_API.G_MISS_NUM)  AND
6525 	          (P_Header_Rec.OWNER_SALES_GROUP_ID IS NOT NULL AND
6526 		   P_Header_Rec.OWNER_SALES_GROUP_ID  <> FND_API.G_MISS_NUM) THEN
6527 		      VALIDATE_OPP_OWNER(
6528 			    P_Init_Msg_List          => FND_API.G_FALSE,
6529 			    P_Validation_mode        => p_validation_mode,
6530 			    P_OWNER_SALESFORCE_ID    => P_Header_Rec.OWNER_SALESFORCE_ID,
6531 			    P_OWNER_SALES_GROUP_ID   => P_Header_Rec.OWNER_SALES_GROUP_ID,
6532 			    x_item_property_rec      => l_item_property_rec,
6533 			    x_return_status          => x_return_status,
6534 			    x_msg_count              => x_msg_count,
6535 			    x_msg_data               => x_msg_data);
6536 		      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6537 			  raise FND_API.G_EXC_ERROR;
6538 		      END IF;
6539 	      END IF;
6540 
6541               -- end solin
6542 
6543       END IF;
6544 
6545       -- Calling record level validation procedures
6546       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_RECORD)
6547       THEN
6548           IF l_debug THEN
6549           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6550                                        'Validate_WinPorb_StageID');
6551           END IF;
6552 
6553           Validate_WinPorb_StageID(
6554               p_init_msg_list          => FND_API.G_FALSE,
6555               p_validation_mode        => p_validation_mode,
6556 	      p_SALES_METHODOLOGY_ID   => P_Header_Rec.SALES_METHODOLOGY_ID,
6557               P_SALES_STAGE_ID         => P_Header_Rec.SALES_STAGE_ID,
6558               P_WIN_PROBABILITY        => P_Header_Rec.WIN_PROBABILITY,
6559               x_item_property_rec      => l_item_property_rec,
6560               x_return_status          => x_return_status,
6561               x_msg_count              => x_msg_count,
6562               x_msg_data               => x_msg_data);
6563           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6564               raise FND_API.G_EXC_ERROR;
6565           END IF;
6566 
6567           IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
6568              l_Win_prob_warning_msg := x_msg_data;
6569           END IF;
6570 
6571           IF l_debug THEN
6572           AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6573                                        'Validate_Status_CloseReason');
6574           END IF;
6575 
6576           Validate_Status_CloseReason(
6577               p_init_msg_list          => FND_API.G_FALSE,
6578               p_validation_mode        => p_validation_mode,
6579               P_STATUS                 => P_Header_Rec.STATUS_CODE,
6580               P_CLOSE_REASON           => P_Header_Rec.CLOSE_REASON,
6581               x_item_property_rec      => l_item_property_rec,
6582               x_return_status          => x_return_status,
6583               x_msg_count              => x_msg_count,
6584               x_msg_data               => x_msg_data);
6585           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6586               raise FND_API.G_EXC_ERROR;
6587           END IF;
6588 
6589 
6590 
6591           Validate_BudgetAmt_Currency (
6592               P_Init_Msg_List          => FND_API.G_FALSE,
6593               P_Validation_mode        => p_validation_mode,
6594               P_TOTAL_AMOUNT           => P_Header_Rec.TOTAL_AMOUNT,
6595               P_CURRENCY_CODE          => P_Header_Rec.CURRENCY_CODE,
6596               X_Item_Property_Rec      => l_item_property_rec,
6597               X_Return_Status          => x_return_status,
6598               X_Msg_Count              => x_msg_count,
6599               X_Msg_Data               => x_msg_data);
6600           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6601               raise FND_API.G_EXC_ERROR;
6602           END IF;
6603 
6604       END IF;
6605 
6606       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_INTER_RECORD) THEN
6607           -- invoke inter-record level validation procedures
6608           NULL;
6609       END IF;
6610 
6611       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_INTER_ENTITY) THEN
6612           -- invoke inter-entity level validation procedures
6613           NULL;
6614       END IF;
6615 
6616 
6617       -- Debug Message
6618       IF l_debug THEN
6619       AS_UTILITY_PVT.Debug_Message(l_module, FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,
6620                                    'Private API: ' || l_api_name || ' end');
6621 
6622       END IF;
6623 
6624       -- Standard call to get message count and if count is 1, get message info.
6625       FND_MSG_PUB.Count_And_Get
6626       (  p_count          =>   x_msg_count,
6627          p_data           =>   x_msg_data
6628       );
6629 
6630       IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
6631             x_msg_data := l_Win_prob_warning_msg;
6632       END IF;
6633 
6634 END Validate_opp_header;
6635 
6636 
6637 End AS_OPP_HEADER_PVT;