[Home] [Help]
PACKAGE BODY: APPS.PV_PEC_RULES_PVT
Source
1 PACKAGE BODY PV_Pec_Rules_PVT as
2 /* $Header: pvxvecrb.pls 120.1 2005/09/06 04:36:22 appldev ship $ */
3 -- ===============================================================
4 -- Start of Comments
5 -- Package name
6 -- PV_Pec_Rules_PVT
7 -- Purpose
8 --
9 -- History
10 --
11 -- NOTE
12 --
13 -- This Api is generated with Latest version of
14 -- Rosetta, where g_miss indicates NULL and
15 -- NULL indicates missing value. Rosetta Version 1.55
16 -- End of Comments
17 -- ===============================================================
18
19
20 G_PKG_NAME CONSTANT VARCHAR2(30):= 'PV_Pec_Rules_PVT';
21 G_FILE_NAME CONSTANT VARCHAR2(12) := 'pvxvecrb.pls';
22
23 -- G_USER_ID NUMBER := FND_GLOBAL.USER_ID;
24 -- G_LOGIN_ID NUMBER := FND_GLOBAL.CONC_LOGIN_ID;
25 --
26 -- Foreward Procedure Declarations
27 --
28
29 PROCEDURE Default_Pec_Rules_Items (
30 p_pec_rules_rec IN pec_rules_rec_type ,
31 x_pec_rules_rec OUT NOCOPY pec_rules_rec_type
32 ) ;
33
34
35
36 -- Hint: Primary key needs to be returned.
37 -- ==============================================================================
38 -- Start of Comments
39 -- ==============================================================================
40 -- API Name
41 -- Create_Pec_Rules
42 -- Type
43 -- Private
44 -- Pre-Req
45 --
46 -- Parameters
47 --
48 -- IN
49 -- p_api_version_number IN NUMBER Required
50 -- p_init_msg_list IN VARCHAR2 Optional Default = FND_API_G_FALSE
51 -- p_commit IN VARCHAR2 Optional Default = FND_API.G_FALSE
52 -- p_validation_level IN NUMBER Optional Default = FND_API.G_VALID_LEVEL_FULL
53 -- p_pec_rules_rec IN pec_rules_rec_type Required
54 --
55 -- OUT
56 -- x_return_status OUT VARCHAR2
57 -- x_msg_count OUT NUMBER
58 -- x_msg_data OUT VARCHAR2
59 -- Version : Current version 1.0
60 -- Note: This automatic generated procedure definition, it includes standard IN/OUT parameters
61 -- and basic operation, developer must manually add parameters and business logic as necessary.
62 --
63 -- History
64 --
65 -- NOTE
66 --
67 -- End of Comments
68 -- ==============================================================================
69
70 PV_DEBUG_HIGH_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
71 PV_DEBUG_LOW_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
72 PV_DEBUG_MEDIUM_ON CONSTANT boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
73
74 PROCEDURE Create_Pec_Rules(
75 p_api_version_number IN NUMBER,
76 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
77 p_commit IN VARCHAR2 := FND_API.G_FALSE,
78 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
79
80 x_return_status OUT NOCOPY VARCHAR2,
81 x_msg_count OUT NOCOPY NUMBER,
82 x_msg_data OUT NOCOPY VARCHAR2,
83
84 p_pec_rules_rec IN pec_rules_rec_type := g_miss_pec_rules_rec,
85 x_enrl_change_rule_id OUT NOCOPY NUMBER
86 )
87
88 IS
89 L_API_NAME CONSTANT VARCHAR2(30) := 'Create_Pec_Rules';
90 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
91 l_return_status_full VARCHAR2(1);
92 l_object_version_number NUMBER := 1;
93 l_org_id NUMBER := FND_API.G_MISS_NUM;
94 l_enrl_change_rule_id NUMBER;
95 l_dummy NUMBER;
96 l_pec_rules_rec pec_rules_rec_type := p_pec_rules_rec;
97 l_change_direction_code VARCHAR2(30);
98 l_enrl_change_from_id_rev NUMBER;
99 l_enrl_change_to_id_rev NUMBER;
100 l_enrl_change_rule_id_rev NUMBER;
101 l_value NUMBER;
102
103 CURSOR c_id IS
104 SELECT pv_pg_enrl_change_rules_s.NEXTVAL
105 FROM dual;
106
107 CURSOR c_id_exists (l_id IN NUMBER) IS
108 SELECT 1
109 FROM PV_PG_ENRL_CHANGE_RULES
110 WHERE enrl_change_rule_id = l_id;
111
112 /*CURSOR c_program_id_exists (from_id IN NUMBER,to_id IN NUMBER) IS
113 SELECT 1
114 FROM PV_PG_ENRL_CHANGE_RULES
115 WHERE change_from_program_id = from_id
116 AND change_to_program_id = to_id
117 AND NVL(effective_to_date,sysdate) >= SYSDATE
118 AND change_direction_code = 'UPGRADE';
119 */
120 CURSOR c_program_id_exists (from_id IN NUMBER,to_id IN NUMBER,p_direction_code in VARCHAR2) IS
121 SELECT 1
122 FROM PV_PG_ENRL_CHANGE_RULES
123 WHERE change_from_program_id = from_id
124 AND change_to_program_id = to_id
125 AND NVL(effective_to_date,sysdate) >= SYSDATE
126 AND change_direction_code = p_direction_code;
127 BEGIN
128
129 IF (PV_DEBUG_HIGH_ON) THEN
130
131
132
133 PVX_UTILITY_PVT.debug_message('Inside Create Proc ');
134
135 END IF;
136
137 -- Standard Start of API savepoint
138 SAVEPOINT create_pec_rules_pvt;
139
140 IF (PV_DEBUG_HIGH_ON) THEN
141
142
143
144 PVX_UTILITY_PVT.debug_message('Comparing compatibility ');
145
146 END IF;
147
148
149
150
151 -- Standard call to check for call compatibility.
152 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
153 p_api_version_number,
154 l_api_name,
155 G_PKG_NAME)
156 THEN
157 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
158 END IF;
159
160 IF (PV_DEBUG_HIGH_ON) THEN
161
162
163
164 PVX_UTILITY_PVT.debug_message('After Comparing compatibility ');
165
166 END IF;
167
168 -- Initialize message list if p_init_msg_list is set to TRUE.
169 IF FND_API.to_Boolean( p_init_msg_list )
170 THEN
171 FND_MSG_PUB.initialize;
172 END IF;
173
174
175 -- Debug Message
176 IF (PV_DEBUG_HIGH_ON) THEN
177
178 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' start');
179 END IF;
180
181
182 -- Initialize API return status to SUCCESS
183 x_return_status := FND_API.G_RET_STS_SUCCESS;
184
185 l_value := NULL;
186
187 /*
188 OPEN c_program_id_exists(l_pec_rules_rec.change_from_program_id,l_pec_rules_rec.change_to_program_id,l_pec_rules_rec.change_direction_code );
189 FETCH c_program_id_exists INTO l_value;
190 IF c_program_id_exists%FOUND THEN
191 CLOSE c_program_id_exists;
192 IF l_pec_rules_rec.change_direction_code='UPGRADE' THEN
193 FND_MESSAGE.set_name('PV', 'PV_DENY_CREATE_UPGRADE_RULE');
194 FND_MSG_PUB.add;
195 --x_return_status := FND_API.G_RET_STS_ERROR;
196 ELSIF l_pec_rules_rec.change_direction_code='PREREQUISITE' THEN
197 FND_MESSAGE.set_name('PV', 'PV_DENY_CREATE_PREREQ_RULE');
198 FND_MSG_PUB.add;
199 END IF;
200 RAISE FND_API.G_EXC_ERROR;
201 ELSE
202 CLOSE c_program_id_exists;
203 */
204
205
206 OPEN c_program_id_exists(l_pec_rules_rec.change_from_program_id,l_pec_rules_rec.change_to_program_id,'UPGRADE' );
207 FETCH c_program_id_exists INTO l_value;
208 IF c_program_id_exists%FOUND THEN
209 CLOSE c_program_id_exists;
210 IF l_pec_rules_rec.change_direction_code='UPGRADE' THEN
211 FND_MESSAGE.set_name('PV', 'PV_DENY_CREATE_UPGRADE_RULE');
212 FND_MSG_PUB.add;
213 ELSIF l_pec_rules_rec.change_direction_code='PREREQUISITE' THEN
214 FND_MESSAGE.set_name('PV', 'PV_UPGRADE_EXISTS');
215 FND_MSG_PUB.add;
216 END IF;
217 RAISE FND_API.G_EXC_ERROR;
218 ELSE
219 CLOSE c_program_id_exists;
220 END If;
221
222 OPEN c_program_id_exists(l_pec_rules_rec.change_from_program_id,l_pec_rules_rec.change_to_program_id,'PREREQUISITE' );
223 FETCH c_program_id_exists INTO l_value;
224 IF c_program_id_exists%FOUND THEN
225 CLOSE c_program_id_exists;
226 IF l_pec_rules_rec.change_direction_code='UPGRADE' THEN
227 FND_MESSAGE.set_name('PV', 'PV_PREREQ_EXISTS');
228 FND_MSG_PUB.add;
229 ELSIF l_pec_rules_rec.change_direction_code='PREREQUISITE' THEN
230 FND_MESSAGE.set_name('PV', 'PV_DENY_CREATE_PREREQ_RULE');
231 FND_MSG_PUB.add;
232 END IF;
233 RAISE FND_API.G_EXC_ERROR;
234 ELSE
235 CLOSE c_program_id_exists;
236 END If;
237
238
239
240 -- Local variable initialization
241
242 IF p_pec_rules_rec.enrl_change_rule_id IS NULL OR p_pec_rules_rec.enrl_change_rule_id = FND_API.g_miss_num THEN
243 LOOP
244 l_dummy := NULL;
245 OPEN c_id;
246 FETCH c_id INTO l_pec_rules_rec.enrl_change_rule_id;
247 CLOSE c_id;
248
249 OPEN c_id_exists(l_pec_rules_rec.enrl_change_rule_id);
250 FETCH c_id_exists INTO l_dummy;
251 CLOSE c_id_exists;
252 EXIT WHEN l_dummy IS NULL;
253 END LOOP;
254 ELSE
255 l_pec_rules_rec.enrl_change_rule_id := p_pec_rules_rec.enrl_change_rule_id;
256 END IF;
257
258
259 -- =========================================================================
260 -- Validate Environment
261 -- =========================================================================
262
263 IF FND_GLOBAL.USER_ID IS NULL
264 THEN
265 PVX_Utility_PVT.Error_Message(p_message_name => 'USER_PROFILE_MISSING');
266 RAISE FND_API.G_EXC_ERROR;
267 END IF;
268
269 IF (PV_DEBUG_HIGH_ON) THEN
270
271
272
273 PVX_UTILITY_PVT.debug_message('Before Validating ');
274
275 END IF;
276
277 IF ( p_validation_level >= FND_API.G_VALID_LEVEL_FULL)
278 THEN
279 -- Debug message
280 IF (PV_DEBUG_HIGH_ON) THEN
281
282 PVX_UTILITY_PVT.debug_message('Private API: Validate_Pec_Rules');
283 END IF;
284
285 l_pec_rules_rec.last_update_date := SYSDATE;
286 l_pec_rules_rec.last_updated_by := FND_GLOBAL.user_id;
287 l_pec_rules_rec.creation_date := SYSDATE;
288 l_pec_rules_rec.created_by := FND_GLOBAL.user_id;
289 l_pec_rules_rec.last_update_login := FND_GLOBAL.conc_login_id;
290 l_pec_rules_rec.object_version_number := l_object_version_number;
291
292 l_pec_rules_rec.effective_from_date := SYSDATE;
293
294
295 -- Invoke validation procedures
296 Validate_pec_rules(
297 p_api_version_number => 1.0,
298 p_init_msg_list => FND_API.G_FALSE,
299 p_validation_level => p_validation_level,
300 p_validation_mode => JTF_PLSQL_API.g_create,
301 p_pec_rules_rec => l_pec_rules_rec,
302 x_return_status => x_return_status,
303 x_msg_count => x_msg_count,
304 x_msg_data => x_msg_data);
305 END IF;
306
307 IF (PV_DEBUG_HIGH_ON) THEN
308
309
310
311 PVX_UTILITY_PVT.debug_message('After Validating ');
312
313 END IF;
314
315
316 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
317 RAISE FND_API.G_EXC_ERROR;
318 END IF;
319
320
321 -- Debug Message
322 IF (PV_DEBUG_HIGH_ON) THEN
323
324 PVX_UTILITY_PVT.debug_message( 'Private API: Calling create table handler');
325 END IF;
326
327
328
329
330 -- Invoke table handler(Pv_Pec_Rules_Pkg.Insert_Row)
331 Pv_Pec_Rules_Pkg.Insert_Row(
332 px_enrl_change_rule_id => l_pec_rules_rec.enrl_change_rule_id,
333 px_object_version_number => l_object_version_number,
334 p_change_from_program_id => l_pec_rules_rec.change_from_program_id,
335 p_change_to_program_id => l_pec_rules_rec.change_to_program_id,
336 p_change_direction_code => l_pec_rules_rec.change_direction_code,
337 p_effective_from_date => l_pec_rules_rec.effective_from_date,
338 p_effective_to_date => l_pec_rules_rec.effective_to_date,
339 p_active_flag => l_pec_rules_rec.active_flag,
340 p_created_by => FND_GLOBAL.USER_ID,
341 p_creation_date => SYSDATE,
342 p_last_updated_by => FND_GLOBAL.USER_ID,
343 p_last_update_date => SYSDATE,
344 p_last_update_login => FND_GLOBAL.conc_login_id
345 );
346
347 x_enrl_change_rule_id := l_enrl_change_rule_id;
348
349 IF l_pec_rules_rec.change_direction_code='UPGRADE' THEN
350 -- Invoke table handler(Pv_Pec_Rules_Pkg.Insert_Row) to insert a second row with reverse Direction Code
351 l_change_direction_code := 'DOWNGRADE';
352 l_enrl_change_from_id_rev := l_pec_rules_rec.change_to_program_id;
353 l_enrl_change_to_id_rev := l_pec_rules_rec.change_from_program_id;
354 OPEN c_id;
355 FETCH c_id INTO l_pec_rules_rec.enrl_change_rule_id;
356 CLOSE c_id;
357
358 Pv_Pec_Rules_Pkg.Insert_Row(
359 px_enrl_change_rule_id => l_pec_rules_rec.enrl_change_rule_id ,
360 px_object_version_number => l_object_version_number,
361 p_change_from_program_id => l_enrl_change_from_id_rev,
362 p_change_to_program_id => l_enrl_change_to_id_rev,
363 p_change_direction_code => l_change_direction_code,
364 p_effective_from_date => l_pec_rules_rec.effective_from_date,
365 p_effective_to_date => l_pec_rules_rec.effective_to_date,
366 p_active_flag => l_pec_rules_rec.active_flag,
367 p_created_by => FND_GLOBAL.USER_ID,
368 p_creation_date => SYSDATE,
369 p_last_updated_by => FND_GLOBAL.USER_ID,
370 p_last_update_date => SYSDATE,
371 p_last_update_login => FND_GLOBAL.conc_login_id
372 );
373
374 x_enrl_change_rule_id := l_enrl_change_rule_id;
375 END IF;
376
377 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
378 RAISE FND_API.G_EXC_ERROR;
379 END IF;
380 --
381 -- End of API body
382 --
383
384 -- Standard check for p_commit
385 IF FND_API.to_Boolean( p_commit )
386 THEN
387 COMMIT WORK;
388 END IF;
389
390
391
392 -- Debug Message
393 IF (PV_DEBUG_HIGH_ON) THEN
394
395 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
396 END IF;
397
398
399 -- Standard call to get message count and if count is 1, get message info.
400 FND_MSG_PUB.Count_And_Get
401 (p_count => x_msg_count,
402 p_data => x_msg_data
403 );
404
405
406 EXCEPTION
407
408 WHEN PVX_Utility_PVT.resource_locked THEN
409 x_return_status := FND_API.g_ret_sts_error;
410 PVX_Utility_PVT.Error_Message(p_message_name => 'PV_API_RESOURCE_LOCKED');
411
412 WHEN FND_API.G_EXC_ERROR THEN
413 ROLLBACK TO CREATE_Pec_Rules_PVT;
414 x_return_status := FND_API.G_RET_STS_ERROR;
415 -- Standard call to get message count and if count=1, get the message
416 FND_MSG_PUB.Count_And_Get (
417 p_encoded => FND_API.G_FALSE,
418 p_count => x_msg_count,
419 p_data => x_msg_data
420 );
421
422 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
423 ROLLBACK TO CREATE_Pec_Rules_PVT;
424 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
425 -- Standard call to get message count and if count=1, get the message
426 FND_MSG_PUB.Count_And_Get (
427 p_encoded => FND_API.G_FALSE,
428 p_count => x_msg_count,
429 p_data => x_msg_data
430 );
431
432 WHEN OTHERS THEN
433 ROLLBACK TO CREATE_Pec_Rules_PVT;
434 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
435 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
436 THEN
437 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
438 END IF;
439 -- Standard call to get message count and if count=1, get the message
440 FND_MSG_PUB.Count_And_Get (
441 p_encoded => FND_API.G_FALSE,
442 p_count => x_msg_count,
443 p_data => x_msg_data
444 );
445 End Create_Pec_Rules;
446
447
448 -- ==============================================================================
449 -- Start of Comments
450 -- ==============================================================================
451 -- API Name
452 -- Update_Pec_Rules
453 -- Type
454 -- Private
455 -- Pre-Req
456 --
457 -- Parameters
458 --
459 -- IN
460 -- p_api_version_number IN NUMBER Required
461 -- p_init_msg_list IN VARCHAR2 Optional Default = FND_API_G_FALSE
462 -- p_commit IN VARCHAR2 Optional Default = FND_API.G_FALSE
463 -- p_validation_level IN NUMBER Optional Default = FND_API.G_VALID_LEVEL_FULL
464 -- p_pec_rules_rec IN pec_rules_rec_type Required
465 --
466 -- OUT
467 -- x_return_status OUT VARCHAR2
468 -- x_msg_count OUT NUMBER
469 -- x_msg_data OUT VARCHAR2
470 -- Version : Current version 1.0
471 -- Note: This automatic generated procedure definition, it includes standard IN/OUT parameters
472 -- and basic operation, developer must manually add parameters and business logic as necessary.
473 --
474 -- History
475 --
476 -- NOTE
477 --
478 -- End of Comments
479 -- ==============================================================================
480
481 PROCEDURE Update_Pec_Rules(
482 p_api_version_number IN NUMBER,
483 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
484 p_commit IN VARCHAR2 := FND_API.G_FALSE,
485 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
486
487 x_return_status OUT NOCOPY VARCHAR2,
488 x_msg_count OUT NOCOPY NUMBER,
489 x_msg_data OUT NOCOPY VARCHAR2,
490
491 p_pec_rules_rec IN pec_rules_rec_type,
492 x_object_version_number OUT NOCOPY NUMBER
493 )
494
495 IS
496
497
498 CURSOR c_get_pec_rules(enrl_change_rule_id NUMBER) IS
499 SELECT *
500 FROM PV_PG_ENRL_CHANGE_RULES
501 WHERE enrl_change_rule_id = p_pec_rules_rec.enrl_change_rule_id;
502 -- Hint: Developer need to provide Where clause
503
504 CURSOR c_get_pec_rec_down(l_enrl_change_from_id_rev IN NUMBER, l_enrl_change_to_id_rev IN NUMBER ) IS
505 SELECT *
506 FROM PV_PG_ENRL_CHANGE_RULES
507 WHERE change_from_program_id = l_enrl_change_from_id_rev
508 AND change_to_program_id = l_enrl_change_to_id_rev
509 AND effective_to_date is null
510 AND change_direction_code='DOWNGRADE';
511
512 L_API_NAME CONSTANT VARCHAR2(30) := 'Update_Pec_Rules';
513 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
514 -- Local Variables
515 l_object_version_number NUMBER ;
516 l_enrl_change_rule_id NUMBER;
517
518 l_ref_pec_rules_rec c_get_Pec_Rules%ROWTYPE ;
519 l_tar_pec_rules_rec pec_rules_rec_type := P_pec_rules_rec;
520 l_ref_pec_rules_rec_down c_get_pec_rec_down%ROWTYPE ;
521 l_rowid ROWID;
522 from_id_rev NUMBER;
523 to_id_rev NUMBER;
524
525
526
527 BEGIN
528 -- Standard Start of API savepoint
529 SAVEPOINT update_pec_rules_pvt;
530
531 -- Standard call to check for call compatibility.
532 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
533 p_api_version_number,
534 l_api_name,
535 G_PKG_NAME)
536 THEN
537 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
538 END IF;
539
540
541 -- Initialize message list if p_init_msg_list is set to TRUE.
542 IF FND_API.to_Boolean( p_init_msg_list )
543 THEN
544 FND_MSG_PUB.initialize;
545 END IF;
546
547
548
549 -- Debug Message
550 IF (PV_DEBUG_HIGH_ON) THEN
551
552 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
553 END IF;
554
555
556
557 -- Initialize API return status to SUCCESS
558 x_return_status := FND_API.G_RET_STS_SUCCESS;
559
560 -- Debug Message
561 IF (PV_DEBUG_HIGH_ON) THEN
562
563 PVX_UTILITY_PVT.debug_message('Private API: - Open Cursor to Select');
564 END IF;
565
566 OPEN c_get_Pec_Rules( l_tar_pec_rules_rec.enrl_change_rule_id);
567
568 FETCH c_get_Pec_Rules INTO l_ref_pec_rules_rec ;
569
570 If ( c_get_Pec_Rules%NOTFOUND) THEN
571 PVX_Utility_PVT.Error_Message(p_message_name => 'API_MISSING_UPDATE_TARGET',
572 p_token_name => 'INFO',
573 p_token_value => 'Pec_Rules') ;
574 RAISE FND_API.G_EXC_ERROR;
575 END IF;
576 -- Debug Message
577 IF (PV_DEBUG_HIGH_ON) THEN
578
579 PVX_UTILITY_PVT.debug_message('Private API: - Close Cursor');
580 END IF;
581 CLOSE c_get_Pec_Rules;
582
583 -- l_tar_pec_rules_rec.object_version_number := l_object_version_number;
584
585
586 If (l_tar_pec_rules_rec.object_version_number is NULL or
587 l_tar_pec_rules_rec.object_version_number = FND_API.G_MISS_NUM ) Then
588 PVX_Utility_PVT.Error_Message(p_message_name => 'API_VERSION_MISSING',
589 p_token_name => 'COLUMN',
590 p_token_value => 'Last_Update_Date') ;
591 raise FND_API.G_EXC_ERROR;
592 End if;
593 -- Check Whether record has been changed by someone else
594 If (l_tar_pec_rules_rec.object_version_number <> l_ref_pec_rules_rec.object_version_number) Then
595 PVX_Utility_PVT.Error_Message(p_message_name => 'API_RECORD_CHANGED',
596 p_token_name => 'INFO',
597 p_token_value => 'Pec_Rules') ;
598 raise FND_API.G_EXC_ERROR;
599 End if;
600
601
602 IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
603 THEN
604 -- Debug message
605 IF (PV_DEBUG_HIGH_ON) THEN
606
607 PVX_UTILITY_PVT.debug_message('Private API: Validate_Pec_Rules');
608 END IF;
609
610 -- Invoke validation procedures
611 Validate_pec_rules(
612 p_api_version_number => 1.0,
613 p_init_msg_list => FND_API.G_FALSE,
614 p_validation_level => p_validation_level,
615 p_validation_mode => JTF_PLSQL_API.g_update,
616 p_pec_rules_rec => p_pec_rules_rec,
617 x_return_status => x_return_status,
618 x_msg_count => x_msg_count,
619 x_msg_data => x_msg_data);
620 END IF;
621
622 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
623 RAISE FND_API.G_EXC_ERROR;
624 END IF;
625
626
627 -- Debug Message
628 --IF (PV_DEBUG_HIGH_ON) THENPVX_UTILITY_PVT.debug_message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: Calling update table handler');END IF;
629
630 l_object_version_number := p_pec_rules_rec.object_version_number;
631
632 -- Invoke table handler(Pv_Pec_Rules_Pkg.Update_Row)
633 Pv_Pec_Rules_Pkg.Update_Row(
634 p_enrl_change_rule_id => p_pec_rules_rec.enrl_change_rule_id,
635 px_object_version_number => l_object_version_number,
636 p_change_from_program_id => p_pec_rules_rec.change_from_program_id,
637 p_change_to_program_id => p_pec_rules_rec.change_to_program_id,
638 p_change_direction_code => p_pec_rules_rec.change_direction_code,
639 p_effective_from_date => p_pec_rules_rec.effective_from_date,
640 p_effective_to_date => p_pec_rules_rec.effective_to_date,
641 p_active_flag => p_pec_rules_rec.active_flag,
642 p_last_updated_by => FND_GLOBAL.USER_ID,
643 p_last_update_date => SYSDATE,
644 p_last_update_login => FND_GLOBAL.conc_login_id );
645
646 x_object_version_number := l_object_version_number;
647
648
649 IF l_ref_pec_rules_rec.change_direction_code='UPGRADE' THEN
650 from_id_rev := p_pec_rules_rec.change_to_program_id;
651 to_id_rev := p_pec_rules_rec.change_from_program_id ;
652
653 --
654 for downg in c_get_pec_rec_down(from_id_rev, to_id_rev) LOOP
655 Pv_Pec_Rules_Pkg.Update_Row(
656 p_enrl_change_rule_id => downg.enrl_change_rule_id,
657 px_object_version_number => downg.object_version_number,
658 p_change_from_program_id => downg.change_from_program_id,
659 p_change_to_program_id => downg.change_to_program_id,
660 p_change_direction_code => downg.change_direction_code,
661 p_effective_from_date => downg.effective_from_date,
662 p_effective_to_date => downg.effective_to_date,
663 p_active_flag => p_pec_rules_rec.active_flag,
664 p_last_updated_by => FND_GLOBAL.USER_ID,
665 p_last_update_date => SYSDATE,
666 p_last_update_login => FND_GLOBAL.conc_login_id);
667
668 END LOOP;
669 END IF;
670 -- End of API body.
671 --
672
673 -- Standard check for p_commit
674 IF FND_API.to_Boolean( p_commit )
675 THEN
676 COMMIT WORK;
677 END IF;
678
679
680 -- Debug Message
681 IF (PV_DEBUG_HIGH_ON) THEN
682
683 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
684 END IF;
685
686
687 -- Standard call to get message count and if count is 1, get message info.
688 FND_MSG_PUB.Count_And_Get
689 (p_count => x_msg_count,
690 p_data => x_msg_data
691 );
692 EXCEPTION
693
694 WHEN PVX_Utility_PVT.resource_locked THEN
695 x_return_status := FND_API.g_ret_sts_error;
696 PVX_Utility_PVT.Error_Message(p_message_name => 'PV_API_RESOURCE_LOCKED');
697
698 WHEN FND_API.G_EXC_ERROR THEN
699 ROLLBACK TO UPDATE_Pec_Rules_PVT;
700 x_return_status := FND_API.G_RET_STS_ERROR;
701 -- Standard call to get message count and if count=1, get the message
702 FND_MSG_PUB.Count_And_Get (
703 p_encoded => FND_API.G_FALSE,
704 p_count => x_msg_count,
705 p_data => x_msg_data
706 );
707
708 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
709 ROLLBACK TO UPDATE_Pec_Rules_PVT;
710 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
711 -- Standard call to get message count and if count=1, get the message
712 FND_MSG_PUB.Count_And_Get (
713 p_encoded => FND_API.G_FALSE,
714 p_count => x_msg_count,
715 p_data => x_msg_data
716 );
717
718 WHEN OTHERS THEN
719 ROLLBACK TO UPDATE_Pec_Rules_PVT;
720 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
721 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
722 THEN
723 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
724 END IF;
725 -- Standard call to get message count and if count=1, get the message
726 FND_MSG_PUB.Count_And_Get (
727 p_encoded => FND_API.G_FALSE,
728 p_count => x_msg_count,
729 p_data => x_msg_data
730 );
731 End Update_Pec_Rules;
732
733
734 -- ==============================================================================
735 -- Start of Comments
736 -- ==============================================================================
737 -- API Name
738 -- Delete_Pec_Rules
739 -- Type
740 -- Private
741 -- Pre-Req
742 --
743 -- Parameters
744 --
745 -- IN
746 -- p_api_version_number IN NUMBER Required
747 -- p_init_msg_list IN VARCHAR2 Optional Default = FND_API_G_FALSE
748 -- p_commit IN VARCHAR2 Optional Default = FND_API.G_FALSE
749 -- p_validation_level IN NUMBER Optional Default = FND_API.G_VALID_LEVEL_FULL
750 -- p_enrl_change_rule_id IN NUMBER
751 -- p_object_version_number IN NUMBER Optional Default = NULL
752 --
753 -- OUT
754 -- x_return_status OUT VARCHAR2
755 -- x_msg_count OUT NUMBER
756 -- x_msg_data OUT VARCHAR2
757 -- Version : Current version 1.0
758 -- Note: This automatic generated procedure definition, it includes standard IN/OUT parameters
759 -- and basic operation, developer must manually add parameters and business logic as necessary.
760 --
761 -- History
762 --
763 -- NOTE
764 --
765 -- End of Comments
766 -- ==============================================================================
767
768 PROCEDURE Delete_Pec_Rules(
769 p_api_version_number IN NUMBER,
770 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
771 p_commit IN VARCHAR2 := FND_API.G_FALSE,
772 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
773 x_return_status OUT NOCOPY VARCHAR2,
774 x_msg_count OUT NOCOPY NUMBER,
775 x_msg_data OUT NOCOPY VARCHAR2,
776 p_enrl_change_rule_id IN NUMBER,
777 p_object_version_number IN NUMBER
778 )
779
780 IS
781
782 CURSOR c_get_pec_rec IS
783 SELECT *
784 FROM PV_PG_ENRL_CHANGE_RULES
785 WHERE enrl_change_rule_id = p_enrl_change_rule_id;
786
787 CURSOR c_get_pec_rec_down(l_enrl_change_from_id_rev IN NUMBER, l_enrl_change_to_id_rev IN NUMBER ) IS
788 SELECT *
789 FROM PV_PG_ENRL_CHANGE_RULES
790 WHERE change_from_program_id = l_enrl_change_from_id_rev
791 AND change_to_program_id = l_enrl_change_to_id_rev
792 AND effective_to_date is null
793 AND change_direction_code='DOWNGRADE';
794
795 L_API_NAME CONSTANT VARCHAR2(30) := 'Delete_Pec_Rules';
796 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
797 l_object_version_number NUMBER;
798 l_enrl_change_rule_id NUMBER;
799 l_ref_pec_rules_rec c_get_pec_rec%ROWTYPE ;
800 l_ref_pec_rules_rec_down c_get_pec_rec_down%ROWTYPE ;
801 from_id_rev NUMBER;
802 to_id_rev NUMBER;
803
804 BEGIN
805 -- Standard Start of API savepoint
806 SAVEPOINT delete_pec_rules_pvt;
807
808 -- Standard call to check for call compatibility.
809 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
810 p_api_version_number,
811 l_api_name,
812 G_PKG_NAME)
813 THEN
814 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
815 END IF;
816
817
818 -- Initialize message list if p_init_msg_list is set to TRUE.
819 IF FND_API.to_Boolean( p_init_msg_list )
820 THEN
821 FND_MSG_PUB.initialize;
822 END IF;
823
824
825
826 -- Debug Message
827 IF (PV_DEBUG_HIGH_ON) THEN
828
829 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
830 END IF;
831
832
833
834 -- Initialize API return status to SUCCESS
835 x_return_status := FND_API.G_RET_STS_SUCCESS;
836
837 --
838 -- Api body
839 --
840 -- Debug Message
841 IF (PV_DEBUG_HIGH_ON) THEN
842
843 PVX_UTILITY_PVT.debug_message( 'Private API: Calling delete table handler');
844 END IF;
845
846 -- Invoke table handler(Pv_Pec_Rules_Pkg.Delete_Row)
847 --Pv_Pec_Rules_Pkg.Delete_Row(
848 -- p_enrl_change_rule_id => p_enrl_change_rule_id,
849 -- p_object_version_number => p_object_version_number );
850 --
851 -- End of API body
852 --
853 --Pv_Pec_Rules_Pkg.Delete_Row(
854 --p_enrl_change_rule_id => l_enrl_change_rule_id,
855 --p_object_version_number => p_object_version_number );
856
857 -- Debug Message
858 IF (PV_DEBUG_HIGH_ON) THEN
859
860 PVX_UTILITY_PVT.debug_message('Private API: - Open Cursor to Select');
861 END IF;
862
863 OPEN c_get_pec_rec;
864
865 FETCH c_get_pec_rec INTO l_ref_pec_rules_rec ;
866
867 If ( c_get_pec_rec%NOTFOUND) THEN
868 PVX_Utility_PVT.Error_Message(p_message_name => 'API_MISSING_UPDATE_TARGET',
869 p_token_name => 'INFO',
870 p_token_value => 'Pec_Rules') ;
871 RAISE FND_API.G_EXC_ERROR;
872 END IF;
873 -- Debug Message
874 IF (PV_DEBUG_HIGH_ON) THEN
875
876 PVX_UTILITY_PVT.debug_message('Private API: - Close Cursor');
877 END IF;
878 CLOSE c_get_pec_rec;
879
880 l_object_version_number := p_object_version_number;
881
882 -- Make the record end dated when it is deleted.
883 -- Invoke table handler(Pv_Pec_Rules_Pkg.Update_Row)
884 Pv_Pec_Rules_Pkg.Update_Row(
885 p_enrl_change_rule_id => p_enrl_change_rule_id,
886 px_object_version_number => l_object_version_number,
887 p_change_from_program_id => l_ref_pec_rules_rec.change_from_program_id,
888 p_change_to_program_id => l_ref_pec_rules_rec.change_to_program_id,
889 p_change_direction_code => l_ref_pec_rules_rec.change_direction_code,
890 p_effective_from_date => l_ref_pec_rules_rec.effective_from_date,
891 p_effective_to_date => SYSDATE,
892 p_active_flag => l_ref_pec_rules_rec.active_flag,
893 p_last_updated_by => FND_GLOBAL.USER_ID,
894 p_last_update_date => SYSDATE,
895 p_last_update_login => FND_GLOBAL.conc_login_id);
896
897
898 -- x_object_version_number => l_object_version_number);
899 --
900 -- End of API body.
901
902 -- Make the corresponding DOWNGRADE record also end dated when it is deleted.
903 -- Invoke table handler(Pv_Pec_Rules_Pkg.Update_Row)
904 IF l_ref_pec_rules_rec.change_direction_code='UPGRADE' THEN
905 from_id_rev := l_ref_pec_rules_rec.change_to_program_id;
906 to_id_rev := l_ref_pec_rules_rec.change_from_program_id ;
907 -- Debug Message
908 IF (PV_DEBUG_HIGH_ON) THEN
909
910 PVX_UTILITY_PVT.debug_message('Private API: - Open Cursor to Select DOWNGRADE rule');
911 END IF;
912
913 OPEN c_get_pec_rec_down(from_id_rev, to_id_rev);
914
915 FETCH c_get_pec_rec_down INTO l_ref_pec_rules_rec_down ;
916
917 If ( c_get_pec_rec_down%NOTFOUND) THEN
918 --PVX_Utility_PVT.Error_Message(p_message_name => 'API_MISSING_UPDATE_TARGET',
919 --p_token_name => 'INFO',
920 --p_token_value => 'Pec_Rules') ;
921 FND_MESSAGE.set_name('PV', 'PV_MISC_ERROR_GROUP_CREATE');
922 FND_MESSAGE.set_token('ID',to_char(from_id_rev));
923 FND_MESSAGE.set_token('ID',to_char(to_id_rev));
924 FND_MSG_PUB.add;
925 RAISE FND_API.G_EXC_ERROR;
926 END IF;
927 -- Debug Message
928 IF (PV_DEBUG_HIGH_ON) THEN
929
930 PVX_UTILITY_PVT.debug_message('Private API: - Close Cursor');
931 END IF;
932 CLOSE c_get_pec_rec_down;
933
934 for downg in c_get_pec_rec_down(from_id_rev, to_id_rev) LOOP
935 Pv_Pec_Rules_Pkg.Update_Row(
936 p_enrl_change_rule_id => downg.enrl_change_rule_id,
937 px_object_version_number => downg.object_version_number,
938 p_change_from_program_id => downg.change_from_program_id,
939 p_change_to_program_id => downg.change_to_program_id,
940 p_change_direction_code => downg.change_direction_code,
941 p_effective_from_date => downg.effective_from_date,
942 p_effective_to_date => SYSDATE,
943 p_active_flag => downg.active_flag,
944 p_last_updated_by => FND_GLOBAL.USER_ID,
945 p_last_update_date => SYSDATE,
946 p_last_update_login => FND_GLOBAL.conc_login_id);
947
948 END LOOP;
949 END IF;
950
951 -- Standard check for p_commit
952 IF FND_API.to_Boolean( p_commit )
953 THEN
954 COMMIT WORK;
955 END IF;
956
957
958 -- Debug Message
959 IF (PV_DEBUG_HIGH_ON) THEN
960
961 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
962 END IF;
963
964
965 -- Standard call to get message count and if count is 1, get message info.
966 FND_MSG_PUB.Count_And_Get
967 (p_count => x_msg_count,
968 p_data => x_msg_data
969 );
970 EXCEPTION
971
972 WHEN PVX_Utility_PVT.resource_locked THEN
973 x_return_status := FND_API.g_ret_sts_error;
974 PVX_Utility_PVT.Error_Message(p_message_name => 'PV_API_RESOURCE_LOCKED');
975
976 WHEN FND_API.G_EXC_ERROR THEN
977 ROLLBACK TO DELETE_Pec_Rules_PVT;
978 x_return_status := FND_API.G_RET_STS_ERROR;
979 -- Standard call to get message count and if count=1, get the message
980 FND_MSG_PUB.Count_And_Get (
981 p_encoded => FND_API.G_FALSE,
982 p_count => x_msg_count,
983 p_data => x_msg_data
984 );
985
986 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
987 ROLLBACK TO DELETE_Pec_Rules_PVT;
988 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
989 -- Standard call to get message count and if count=1, get the message
990 FND_MSG_PUB.Count_And_Get (
991 p_encoded => FND_API.G_FALSE,
992 p_count => x_msg_count,
993 p_data => x_msg_data
994 );
995
996 WHEN OTHERS THEN
997 ROLLBACK TO DELETE_Pec_Rules_PVT;
998 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
999 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1000 THEN
1001 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1002 END IF;
1003 -- Standard call to get message count and if count=1, get the message
1004 FND_MSG_PUB.Count_And_Get (
1005 p_encoded => FND_API.G_FALSE,
1006 p_count => x_msg_count,
1007 p_data => x_msg_data
1008 );
1009 End Delete_Pec_Rules;
1010
1011
1012
1013 -- Hint: Primary key needs to be returned.
1014 -- ==============================================================================
1015 -- Start of Comments
1016 -- ==============================================================================
1017 -- API Name
1018 -- Lock_Pec_Rules
1019 -- Type
1020 -- Private
1021 -- Pre-Req
1022 --
1023 -- Parameters
1024 --
1025 -- IN
1026 -- p_api_version_number IN NUMBER Required
1027 -- p_init_msg_list IN VARCHAR2 Optional Default = FND_API_G_FALSE
1028 -- p_commit IN VARCHAR2 Optional Default = FND_API.G_FALSE
1029 -- p_validation_level IN NUMBER Optional Default = FND_API.G_VALID_LEVEL_FULL
1030 -- p_pec_rules_rec IN pec_rules_rec_type Required
1031 --
1032 -- OUT
1033 -- x_return_status OUT VARCHAR2
1034 -- x_msg_count OUT NUMBER
1035 -- x_msg_data OUT VARCHAR2
1036 -- Version : Current version 1.0
1037 -- Note: This automatic generated procedure definition, it includes standard IN/OUT parameters
1038 -- and basic operation, developer must manually add parameters and business logic as necessary.
1039 --
1040 -- History
1041 --
1042 -- NOTE
1043 --
1044 -- End of Comments
1045 -- ==============================================================================
1046
1047 PROCEDURE Lock_Pec_Rules(
1048 p_api_version_number IN NUMBER,
1049 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1050
1051 x_return_status OUT NOCOPY VARCHAR2,
1052 x_msg_count OUT NOCOPY NUMBER,
1053 x_msg_data OUT NOCOPY VARCHAR2,
1054
1055 p_enrl_change_rule_id IN NUMBER,
1056 p_object_version IN NUMBER
1057 )
1058
1059 IS
1060 L_API_NAME CONSTANT VARCHAR2(30) := 'Lock_Pec_Rules';
1061 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
1062 L_FULL_NAME CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1063 l_enrl_change_rule_id NUMBER;
1064
1065 BEGIN
1066
1067 -- Debug Message
1068 IF (PV_DEBUG_HIGH_ON) THEN
1069
1070 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
1071 END IF;
1072
1073
1074 -- Initialize message list if p_init_msg_list is set to TRUE.
1075 IF FND_API.to_Boolean( p_init_msg_list )
1076 THEN
1077 FND_MSG_PUB.initialize;
1078 END IF;
1079
1080
1081
1082 -- Standard call to check for call compatibility.
1083 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1084 p_api_version_number,
1085 l_api_name,
1086 G_PKG_NAME)
1087 THEN
1088 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1089 END IF;
1090
1091
1092
1093 -- Initialize API return status to SUCCESS
1094 x_return_status := FND_API.G_RET_STS_SUCCESS;
1095
1096
1097 ------------------------ lock -------------------------
1098 Pv_Pec_Rules_Pkg.Lock_Row(l_enrl_change_rule_id,p_object_version);
1099
1100
1101 -------------------- finish --------------------------
1102 FND_MSG_PUB.count_and_get(
1103 p_encoded => FND_API.g_false,
1104 p_count => x_msg_count,
1105 p_data => x_msg_data);
1106 IF (PV_DEBUG_HIGH_ON) THEN
1107
1108 PVX_UTIlity_PVT.debug_message(l_full_name ||': end');
1109 END IF;
1110 EXCEPTION
1111
1112 WHEN PVX_UTIlity_PVT.resource_locked THEN
1113 x_return_status := FND_API.g_ret_sts_error;
1114 PVX_UTIlity_PVT.Error_Message(p_message_name => 'PV_API_RESOURCE_LOCKED');
1115
1116 WHEN FND_API.G_EXC_ERROR THEN
1117 ROLLBACK TO LOCK_Pec_Rules_PVT;
1118 x_return_status := FND_API.G_RET_STS_ERROR;
1119 -- Standard call to get message count and if count=1, get the message
1120 FND_MSG_PUB.Count_And_Get (
1121 p_encoded => FND_API.G_FALSE,
1122 p_count => x_msg_count,
1123 p_data => x_msg_data
1124 );
1125
1126 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1127 ROLLBACK TO LOCK_Pec_Rules_PVT;
1128 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1129 -- Standard call to get message count and if count=1, get the message
1130 FND_MSG_PUB.Count_And_Get (
1131 p_encoded => FND_API.G_FALSE,
1132 p_count => x_msg_count,
1133 p_data => x_msg_data
1134 );
1135
1136 WHEN OTHERS THEN
1137 ROLLBACK TO LOCK_Pec_Rules_PVT;
1138 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1139 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1140 THEN
1141 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1142 END IF;
1143 -- Standard call to get message count and if count=1, get the message
1144 FND_MSG_PUB.Count_And_Get (
1145 p_encoded => FND_API.G_FALSE,
1146 p_count => x_msg_count,
1147 p_data => x_msg_data
1148 );
1149 End Lock_Pec_Rules;
1150
1151
1152
1153
1154 PROCEDURE check_Pec_Rules_Uk_Items(
1155 p_pec_rules_rec IN pec_rules_rec_type,
1156 p_validation_mode IN VARCHAR2 := JTF_PLSQL_API.g_create,
1157 x_return_status OUT NOCOPY VARCHAR2)
1158 IS
1159 l_valid_flag VARCHAR2(1);
1160
1161 BEGIN
1162 IF (PV_DEBUG_HIGH_ON) THEN
1163
1164 PVX_UTILITY_PVT.debug_message('Inside check uk 1');
1165 END IF;
1166
1167 x_return_status := FND_API.g_ret_sts_success;
1168
1169
1170 IF p_validation_mode = JTF_PLSQL_API.g_create
1171 AND p_pec_rules_rec.enrl_change_rule_id IS NOT NULL
1172 THEN
1173 l_valid_flag := PVX_UTIlity_PVT.check_uniqueness(
1174 'PV_PG_ENRL_CHANGE_RULES',
1175 ' enrl_change_rule_id = ''' || p_pec_rules_rec.enrl_change_rule_id ||''''
1176 );
1177 END IF;
1178
1179 IF (PV_DEBUG_HIGH_ON) THEN
1180
1181
1182
1183 PVX_UTILITY_PVT.debug_message('Inside check uk 2' || l_valid_flag);
1184
1185 END IF;
1186
1187 IF l_valid_flag = FND_API.g_false THEN
1188 --PVX_UTIlity_PVT.Error_Message(p_message_name => 'PV_enrl_change_rule_id_DUPLICATE');
1189 x_return_status := FND_API.g_ret_sts_error;
1190 -- x_return_status := FND_API.g_ret_sts_success;
1191 END IF;
1192
1193 IF (PV_DEBUG_HIGH_ON) THEN
1194
1195
1196
1197 PVX_UTILITY_PVT.debug_message('Inside check uk 3' || l_valid_flag);
1198
1199 END IF;
1200
1201
1202 END check_Pec_Rules_Uk_Items;
1203
1204
1205
1206 PROCEDURE check_Pec_Rules_Req_Items(
1207 p_pec_rules_rec IN pec_rules_rec_type,
1208 p_validation_mode IN VARCHAR2 := JTF_PLSQL_API.g_create,
1209 x_return_status OUT NOCOPY VARCHAR2
1210 )
1211 IS
1212 BEGIN
1213 x_return_status := FND_API.g_ret_sts_success;
1214
1215 IF p_validation_mode = JTF_PLSQL_API.g_create THEN
1216
1217
1218 IF p_pec_rules_rec.enrl_change_rule_id = FND_API.G_MISS_NUM OR p_pec_rules_rec.enrl_change_rule_id IS NULL THEN
1219 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'ENRL_CHANGE_RULE_ID' );
1220 x_return_status := FND_API.g_ret_sts_error;
1221 END IF;
1222
1223
1224 IF p_pec_rules_rec.object_version_number = FND_API.G_MISS_NUM OR p_pec_rules_rec.object_version_number IS NULL THEN
1225 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'OBJECT_VERSION_NUMBER' );
1226 x_return_status := FND_API.g_ret_sts_error;
1227 END IF;
1228
1229
1230 IF p_pec_rules_rec.change_from_program_id = FND_API.G_MISS_NUM OR p_pec_rules_rec.change_from_program_id IS NULL THEN
1231 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'CHANGE_FROM_PROGRAM_ID' );
1232 x_return_status := FND_API.g_ret_sts_error;
1233 END IF;
1234
1235
1236 IF p_pec_rules_rec.change_to_program_id = FND_API.G_MISS_NUM OR p_pec_rules_rec.change_to_program_id IS NULL THEN
1237 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'CHANGE_TO_PROGRAM_ID' );
1238 x_return_status := FND_API.g_ret_sts_error;
1239 END IF;
1240
1241
1242 IF p_pec_rules_rec.change_direction_code = FND_API.g_miss_char OR p_pec_rules_rec.change_direction_code IS NULL THEN
1243 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'CHANGE_DIRECTION_CODE' );
1244 x_return_status := FND_API.g_ret_sts_error;
1245 END IF;
1246
1247
1248 IF p_pec_rules_rec.effective_from_date = FND_API.G_MISS_DATE OR p_pec_rules_rec.effective_from_date IS NULL THEN
1249 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'EFFECTIVE_FROM_DATE' );
1250 x_return_status := FND_API.g_ret_sts_error;
1251 END IF;
1252
1253
1254 IF p_pec_rules_rec.active_flag = FND_API.g_miss_char OR p_pec_rules_rec.active_flag IS NULL THEN
1255 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'ACTIVE_FLAG' );
1256 x_return_status := FND_API.g_ret_sts_error;
1257 END IF;
1258
1259
1260 ELSE
1261
1262
1263 IF p_pec_rules_rec.enrl_change_rule_id = FND_API.G_MISS_NUM THEN
1264 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'ENRL_CHANGE_RULE_ID' );
1265 x_return_status := FND_API.g_ret_sts_error;
1266 END IF;
1267
1268
1269 IF p_pec_rules_rec.object_version_number = FND_API.G_MISS_NUM THEN
1270 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'OBJECT_VERSION_NUMBER' );
1271 x_return_status := FND_API.g_ret_sts_error;
1272 END IF;
1273
1274
1275 IF p_pec_rules_rec.change_from_program_id = FND_API.G_MISS_NUM THEN
1276 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'CHANGE_FROM_PROGRAM_ID' );
1277 x_return_status := FND_API.g_ret_sts_error;
1278 END IF;
1279
1280
1281 IF p_pec_rules_rec.change_to_program_id = FND_API.G_MISS_NUM THEN
1282 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'CHANGE_TO_PROGRAM_ID' );
1283 x_return_status := FND_API.g_ret_sts_error;
1284 END IF;
1285
1286
1287 IF p_pec_rules_rec.change_direction_code = FND_API.g_miss_char THEN
1288 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'CHANGE_DIRECTION_CODE' );
1289 x_return_status := FND_API.g_ret_sts_error;
1290 END IF;
1291
1292
1293 IF p_pec_rules_rec.effective_from_date = FND_API.G_MISS_DATE THEN
1294 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'EFFECTIVE_FROM_DATE' );
1295 x_return_status := FND_API.g_ret_sts_error;
1296 END IF;
1297
1298
1299 IF p_pec_rules_rec.active_flag = FND_API.g_miss_char THEN
1300 PVX_UTIlity_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD', 'ACTIVE_FLAG' );
1301 x_return_status := FND_API.g_ret_sts_error;
1302 END IF;
1303 END IF;
1304
1305 END check_Pec_Rules_Req_Items;
1306
1307
1308
1309 PROCEDURE check_Pec_Rules_Fk_Items(
1310 p_pec_rules_rec IN pec_rules_rec_type,
1311 x_return_status OUT NOCOPY VARCHAR2
1312 )
1313 IS
1314 BEGIN
1315 x_return_status := FND_API.g_ret_sts_success;
1316
1317 -- Enter custom code here
1318
1319 END check_Pec_Rules_Fk_Items;
1320
1321
1322
1323 PROCEDURE check_Pec_Rules_Lookup_Items(
1324 p_pec_rules_rec IN pec_rules_rec_type,
1325 x_return_status OUT NOCOPY VARCHAR2
1326 )
1327 IS
1328 BEGIN
1329 x_return_status := FND_API.g_ret_sts_success;
1330
1331 -- Enter custom code here
1332
1333 END check_Pec_Rules_Lookup_Items;
1334
1335
1336
1337 PROCEDURE Check_Pec_Rules_Items (
1338 P_pec_rules_rec IN pec_rules_rec_type,
1339 p_validation_mode IN VARCHAR2,
1340 x_return_status OUT NOCOPY VARCHAR2
1341 )
1342 IS
1343 l_return_status VARCHAR2(1);
1344 BEGIN
1345
1346 IF (PV_DEBUG_HIGH_ON) THEN
1347
1348
1349
1350 PVX_UTILITY_PVT.debug_message('Start ' );
1351
1352 END IF;
1353
1354 l_return_status := FND_API.g_ret_sts_success;
1355 -- Check Items Uniqueness API calls
1356
1357 check_Pec_rules_Uk_Items(
1358 p_pec_rules_rec => p_pec_rules_rec,
1359 p_validation_mode => p_validation_mode,
1360 x_return_status => x_return_status);
1361 IF x_return_status <> FND_API.g_ret_sts_success THEN
1362 l_return_status := FND_API.g_ret_sts_error;
1363 END IF;
1364
1365 -- Check Items Required/NOT NULL API calls
1366 IF (PV_DEBUG_HIGH_ON) THEN
1367
1368 PVX_UTILITY_PVT.debug_message('Middle 1 ' );
1369 END IF;
1370
1371 check_pec_rules_req_items(
1372 p_pec_rules_rec => p_pec_rules_rec,
1373 p_validation_mode => p_validation_mode,
1374 x_return_status => x_return_status);
1375 IF x_return_status <> FND_API.g_ret_sts_success THEN
1376 l_return_status := FND_API.g_ret_sts_error;
1377 END IF;
1378 -- Check Items Foreign Keys API calls
1379
1380 IF (PV_DEBUG_HIGH_ON) THEN
1381
1382
1383
1384 PVX_UTILITY_PVT.debug_message('Middle 2 ' );
1385
1386 END IF;
1387
1388 check_pec_rules_FK_items(
1389 p_pec_rules_rec => p_pec_rules_rec,
1390 x_return_status => x_return_status);
1391 IF x_return_status <> FND_API.g_ret_sts_success THEN
1392 l_return_status := FND_API.g_ret_sts_error;
1393 END IF;
1394 -- Check Items Lookups
1395
1396 IF (PV_DEBUG_HIGH_ON) THEN
1397
1398
1399
1400 PVX_UTILITY_PVT.debug_message('Middle 3 ' );
1401
1402 END IF;
1403
1404 check_pec_rules_Lookup_items(
1405 p_pec_rules_rec => p_pec_rules_rec,
1406 x_return_status => x_return_status);
1407 IF x_return_status <> FND_API.g_ret_sts_success THEN
1408 l_return_status := FND_API.g_ret_sts_error;
1409 END IF;
1410
1411 x_return_status := l_return_status;
1412
1413 IF (PV_DEBUG_HIGH_ON) THEN
1414
1415
1416
1417 PVX_UTILITY_PVT.debug_message('Error status is ' || x_return_status);
1418
1419 END IF;
1420
1421 END Check_pec_rules_Items;
1422
1423
1424
1425
1426
1427 PROCEDURE Complete_Pec_Rules_Rec (
1428 p_pec_rules_rec IN pec_rules_rec_type,
1429 x_complete_rec OUT NOCOPY pec_rules_rec_type)
1430 IS
1431 l_return_status VARCHAR2(1);
1432
1433 CURSOR c_complete IS
1434 SELECT *
1435 FROM pv_pg_enrl_change_rules
1436 WHERE enrl_change_rule_id = p_pec_rules_rec.enrl_change_rule_id;
1437 l_pec_rules_rec c_complete%ROWTYPE;
1438 BEGIN
1439 x_complete_rec := p_pec_rules_rec;
1440
1441
1442 OPEN c_complete;
1443 FETCH c_complete INTO l_pec_rules_rec;
1444 CLOSE c_complete;
1445
1446 -- enrl_change_rule_id
1447 IF p_pec_rules_rec.enrl_change_rule_id IS NULL THEN
1448 x_complete_rec.enrl_change_rule_id := l_pec_rules_rec.enrl_change_rule_id;
1449 END IF;
1450
1451 -- object_version_number
1452 IF p_pec_rules_rec.object_version_number IS NULL THEN
1453 x_complete_rec.object_version_number := l_pec_rules_rec.object_version_number;
1454 END IF;
1455
1456 -- change_from_program_id
1457 IF p_pec_rules_rec.change_from_program_id IS NULL THEN
1458 x_complete_rec.change_from_program_id := l_pec_rules_rec.change_from_program_id;
1459 END IF;
1460
1461 -- change_to_program_id
1462 IF p_pec_rules_rec.change_to_program_id IS NULL THEN
1463 x_complete_rec.change_to_program_id := l_pec_rules_rec.change_to_program_id;
1464 END IF;
1465
1466 -- change_direction_code
1467 IF p_pec_rules_rec.change_direction_code IS NULL THEN
1468 x_complete_rec.change_direction_code := l_pec_rules_rec.change_direction_code;
1469 END IF;
1470
1471 -- effective_from_date
1472 IF p_pec_rules_rec.effective_from_date IS NULL THEN
1473 x_complete_rec.effective_from_date := l_pec_rules_rec.effective_from_date;
1474 END IF;
1475
1476 -- effective_to_date
1477 IF p_pec_rules_rec.effective_to_date IS NULL THEN
1478 x_complete_rec.effective_to_date := l_pec_rules_rec.effective_to_date;
1479 END IF;
1480
1481 -- active_flag
1482 IF p_pec_rules_rec.active_flag IS NULL THEN
1483 x_complete_rec.active_flag := l_pec_rules_rec.active_flag;
1484 END IF;
1485
1486 -- created_by
1487 IF p_pec_rules_rec.created_by IS NULL THEN
1488 x_complete_rec.created_by := l_pec_rules_rec.created_by;
1489 END IF;
1490
1491 -- creation_date
1492 IF p_pec_rules_rec.creation_date IS NULL THEN
1493 x_complete_rec.creation_date := l_pec_rules_rec.creation_date;
1494 END IF;
1495
1496 -- last_updated_by
1497 IF p_pec_rules_rec.last_updated_by IS NULL THEN
1498 x_complete_rec.last_updated_by := l_pec_rules_rec.last_updated_by;
1499 END IF;
1500
1501 -- last_update_date
1502 IF p_pec_rules_rec.last_update_date IS NULL THEN
1503 x_complete_rec.last_update_date := l_pec_rules_rec.last_update_date;
1504 END IF;
1505
1506 -- last_update_login
1507 IF p_pec_rules_rec.last_update_login IS NULL THEN
1508 x_complete_rec.last_update_login := l_pec_rules_rec.last_update_login;
1509 END IF;
1510 -- Note: Developers need to modify the procedure
1511 -- to handle any business specific requirements.
1512 END Complete_Pec_Rules_Rec;
1513
1514
1515
1516
1517 PROCEDURE Default_Pec_Rules_Items ( p_pec_rules_rec IN pec_rules_rec_type ,
1518 x_pec_rules_rec OUT NOCOPY pec_rules_rec_type )
1519 IS
1520 l_pec_rules_rec pec_rules_rec_type := p_pec_rules_rec;
1521 BEGIN
1522 -- Developers should put their code to default the record type
1523 -- e.g. IF p_campaign_rec.status_code IS NULL
1524 -- OR p_campaign_rec.status_code = FND_API.G_MISS_CHAR THEN
1525 -- l_campaign_rec.status_code := 'NEW' ;
1526 -- END IF ;
1527 --
1528 -- NULL ;
1529 x_pec_rules_rec := l_pec_rules_rec;
1530 END;
1531
1532
1533
1534
1535 PROCEDURE Validate_Pec_Rules(
1536 p_api_version_number IN NUMBER,
1537 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1538 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
1539 p_pec_rules_rec IN pec_rules_rec_type,
1540 p_validation_mode IN VARCHAR2,
1541 x_return_status OUT NOCOPY VARCHAR2,
1542 x_msg_count OUT NOCOPY NUMBER,
1543 x_msg_data OUT NOCOPY VARCHAR2
1544 )
1545 IS
1546 L_API_NAME CONSTANT VARCHAR2(30) := 'Validate_Pec_Rules';
1547 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
1548 l_object_version_number NUMBER;
1549 l_pec_rules_rec pec_rules_rec_type;
1550 ld_pec_rules_rec pec_rules_rec_type;
1551
1552 BEGIN
1553
1554 IF (PV_DEBUG_HIGH_ON) THEN
1555
1556
1557
1558 PVX_UTILITY_PVT.debug_message('Inside Validate ');
1559
1560 END IF;
1561
1562 -- Standard Start of API savepoint
1563 SAVEPOINT validate_pec_rules_;
1564
1565 -- Standard call to check for call compatibility.
1566 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1567 p_api_version_number,
1568 l_api_name,
1569 G_PKG_NAME)
1570 THEN
1571 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1572 END IF;
1573
1574
1575 -- Initialize message list if p_init_msg_list is set to TRUE.
1576 IF FND_API.to_Boolean( p_init_msg_list )
1577 THEN
1578 FND_MSG_PUB.initialize;
1579 END IF;
1580
1581 IF (PV_DEBUG_HIGH_ON) THEN
1582
1583
1584
1585 PVX_UTILITY_PVT.debug_message('Before JTF comparison ');
1586
1587 END IF;
1588
1589 IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1590 Check_pec_rules_Items(
1591 p_pec_rules_rec => p_pec_rules_rec,
1592 p_validation_mode => p_validation_mode,
1593 x_return_status => x_return_status
1594 );
1595
1596 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1597 RAISE FND_API.G_EXC_ERROR;
1598 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1599 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1600 END IF;
1601 END IF;
1602
1603 IF (PV_DEBUG_HIGH_ON) THEN
1604
1605
1606
1607 PVX_UTILITY_PVT.debug_message('Before JTF comparison : 1');
1608
1609 END IF;
1610
1611 IF p_validation_mode = JTF_PLSQL_API.g_create THEN
1612 Default_Pec_Rules_Items (p_pec_rules_rec => p_pec_rules_rec ,
1613 x_pec_rules_rec => ld_pec_rules_rec) ;
1614 END IF ;
1615
1616
1617 IF (PV_DEBUG_HIGH_ON) THEN
1618
1619
1620
1621
1622
1623 PVX_UTILITY_PVT.debug_message('Before JTF comparison : 2');
1624
1625
1626 END IF;
1627
1628 Complete_pec_rules_Rec(
1629 p_pec_rules_rec => ld_pec_rules_rec,
1630 x_complete_rec => l_pec_rules_rec
1631 );
1632
1633 IF (PV_DEBUG_HIGH_ON) THEN
1634
1635
1636
1637 PVX_UTILITY_PVT.debug_message('Before JTF comparison : 3');
1638
1639 END IF;
1640
1641 IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1642 Validate_pec_rules_Rec(
1643 p_api_version_number => 1.0,
1644 p_init_msg_list => FND_API.G_FALSE,
1645 x_return_status => x_return_status,
1646 x_msg_count => x_msg_count,
1647 x_msg_data => x_msg_data,
1648 p_pec_rules_rec => l_pec_rules_rec);
1649
1650 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1651 RAISE FND_API.G_EXC_ERROR;
1652 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1653 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1654 END IF;
1655 END IF;
1656
1657 IF (PV_DEBUG_HIGH_ON) THEN
1658
1659
1660
1661 PVX_UTILITY_PVT.debug_message('Before JTF comparison : 4');
1662
1663 END IF;
1664
1665 IF (PV_DEBUG_HIGH_ON) THEN
1666
1667
1668
1669 PVX_UTILITY_PVT.debug_message('After jtf comparison ');
1670
1671 END IF;
1672 -- Debug Message
1673 IF (PV_DEBUG_HIGH_ON) THEN
1674
1675 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' start');
1676 END IF;
1677
1678
1679
1680 -- Initialize API return status to SUCCESS
1681 x_return_status := FND_API.G_RET_STS_SUCCESS;
1682
1683
1684 -- Debug Message
1685 IF (PV_DEBUG_HIGH_ON) THEN
1686
1687 PVX_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
1688 END IF;
1689
1690
1691 -- Standard call to get message count and if count is 1, get message info.
1692 FND_MSG_PUB.Count_And_Get
1693 (p_count => x_msg_count,
1694 p_data => x_msg_data
1695 );
1696 EXCEPTION
1697
1698 WHEN PVX_UTIlity_PVT.resource_locked THEN
1699 x_return_status := FND_API.g_ret_sts_error;
1700 PVX_UTIlity_PVT.Error_Message(p_message_name => 'PV_API_RESOURCE_LOCKED');
1701
1702 WHEN FND_API.G_EXC_ERROR THEN
1703 ROLLBACK TO VALIDATE_Pec_Rules_;
1704 x_return_status := FND_API.G_RET_STS_ERROR;
1705 -- Standard call to get message count and if count=1, get the message
1706 FND_MSG_PUB.Count_And_Get (
1707 p_encoded => FND_API.G_FALSE,
1708 p_count => x_msg_count,
1709 p_data => x_msg_data
1710 );
1711
1712 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1713 ROLLBACK TO VALIDATE_Pec_Rules_;
1714 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1715 -- Standard call to get message count and if count=1, get the message
1716 FND_MSG_PUB.Count_And_Get (
1717 p_encoded => FND_API.G_FALSE,
1718 p_count => x_msg_count,
1719 p_data => x_msg_data
1720 );
1721
1722 WHEN OTHERS THEN
1723 ROLLBACK TO VALIDATE_Pec_Rules_;
1724 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1725 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1726 THEN
1727 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1728 END IF;
1729 -- Standard call to get message count and if count=1, get the message
1730 FND_MSG_PUB.Count_And_Get (
1731 p_encoded => FND_API.G_FALSE,
1732 p_count => x_msg_count,
1733 p_data => x_msg_data
1734 );
1735 End Validate_Pec_Rules;
1736
1737
1738 PROCEDURE Validate_Pec_Rules_Rec (
1739 p_api_version_number IN NUMBER,
1740 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1741 x_return_status OUT NOCOPY VARCHAR2,
1742 x_msg_count OUT NOCOPY NUMBER,
1743 x_msg_data OUT NOCOPY VARCHAR2,
1744 p_pec_rules_rec IN pec_rules_rec_type
1745 )
1746 IS
1747 BEGIN
1748 -- Initialize message list if p_init_msg_list is set to TRUE.
1749 IF FND_API.to_Boolean( p_init_msg_list )
1750 THEN
1751 FND_MSG_PUB.initialize;
1752 END IF;
1753
1754
1755
1756 -- Initialize API return status to SUCCESS
1757 x_return_status := FND_API.G_RET_STS_SUCCESS;
1758
1759 -- Hint: Validate data
1760 -- If data not valid
1761 -- THEN
1762 -- x_return_status := FND_API.G_RET_STS_ERROR;
1763
1764 -- Debug Message
1765 IF (PV_DEBUG_HIGH_ON) THEN
1766
1767 PVX_UTILITY_PVT.debug_message('Private API: Validate_dm_model_rec');
1768 END IF;
1769 -- Standard call to get message count and if count is 1, get message info.
1770 FND_MSG_PUB.Count_And_Get
1771 (p_count => x_msg_count,
1772 p_data => x_msg_data
1773 );
1774 END Validate_pec_rules_Rec;
1775
1776 END PV_Pec_Rules_PVT;