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