[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;