DBA Data[Home] [Help]

PACKAGE BODY: APPS.PV_PROCESS_RULE_PVT

Source


1 PACKAGE BODY PV_PROCESS_RULE_PVT as
2 /* $Header: pvrvprub.pls 115.21 2004/01/13 19:53:33 pklin ship $ */
3 -- Start of Comments
4 -- Package name     : PV_PROCESS_RULE_PVT
5 -- Purpose          :
6 -- History          :
7 --      01/08/2002  SOLIN    Created.
8 -- NOTE             :
9 -- End of Comments
10 
11 
12 G_PKG_NAME CONSTANT VARCHAR2(30):= 'PV_PROCESS_RULE_PVT';
13 G_FILE_NAME CONSTANT VARCHAR2(12) := 'pvrvprub.pls';
14 
15 -- -----------------------------------------------------------
16 --
17 -- -----------------------------------------------------------
18 G_PROCESS_TYPE VARCHAR2(30) := NULL;
19 G_ACTION       VARCHAR2(30) := NULL;
20 
21 
22 TYPE NUMBER_TABLE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
23 
24 
25 -- Hint: Primary key needs to be returned.
26 AS_DEBUG_HIGH_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
27 AS_DEBUG_LOW_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
28 AS_DEBUG_MEDIUM_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
29 
30 PROCEDURE Create_process_rule(
31     P_Api_Version_Number         IN   NUMBER,
32     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
33     P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
34     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
35     P_Identity_Resource_Id       IN   NUMBER,
36     P_PROCESS_RULE_Rec           IN   PV_RULE_RECTYPE_PUB.RULES_REC_TYPE
37                                 := PV_RULE_RECTYPE_PUB.G_MISS_RULES_REC,
38     X_PROCESS_RULE_ID            OUT NOCOPY  NUMBER,
39     X_Return_Status              OUT NOCOPY  VARCHAR2,
40     X_Msg_Count                  OUT NOCOPY  NUMBER,
41     X_Msg_Data                   OUT NOCOPY  VARCHAR2
42     )
43 
44  IS
45 l_api_name                  CONSTANT VARCHAR2(30) := 'Create_process_rule';
46 l_api_version_number        CONSTANT NUMBER   := 2.0;
47 l_return_status_full        VARCHAR2(1);
48 l_access_flag               VARCHAR2(1);
49  BEGIN
50       -- Standard Start of API savepoint
51       SAVEPOINT CREATE_PROCESS_RULE_PVT;
52 
53       -- Standard call to check for call compatibility.
54       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
55                                            p_api_version_number,
56                                            l_api_name,
57                                            G_PKG_NAME)
58       THEN
59           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
60       END IF;
61 
62 
63       -- Initialize message list if p_init_msg_list is set to TRUE.
64       IF FND_API.to_Boolean( p_init_msg_list )
65       THEN
66           FND_MSG_PUB.initialize;
67       END IF;
68 
69 
70       -- Debug Message
71       IF (AS_DEBUG_HIGH_ON) THEN
72 
73       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'start');
74       END IF;
75 
76 
77       -- Initialize API return status to SUCCESS
78       x_return_status := FND_API.G_RET_STS_SUCCESS;
79 
80       --
81       -- API body
82       --
83       -- ******************************************************************
84       -- Validate Environment
85       -- ******************************************************************
86       IF FND_GLOBAL.User_Id IS NULL
87       THEN
88           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
89           THEN
90               FND_MESSAGE.Set_Name('PV', 'UT_CANNOT_GET_PROFILE_VALUE');
91               FND_MESSAGE.Set_Token('PROFILE', 'USER_ID', FALSE);
92               FND_MSG_PUB.ADD;
93           END IF;
94           RAISE FND_API.G_EXC_ERROR;
95       END IF;
96 
97       -- Debug message
98       IF (AS_DEBUG_HIGH_ON) THEN
99 
100       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: Validate_process_rule');
101       END IF;
102 
103       -- Invoke validation procedures
104       Validate_process_rule(
105           p_init_msg_list    => FND_API.G_FALSE,
106           p_validation_level => p_validation_level,
107           p_validation_mode  => AS_UTILITY_PVT.G_CREATE,
108 	  P_PROCESS_RULE_Rec => p_PROCESS_RULE_rec,
109           x_return_status    => x_return_status,
110           x_msg_count        => x_msg_count,
111           x_msg_data         => x_msg_data);
112 
113       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
114           RAISE FND_API.G_EXC_ERROR;
115       END IF;
116 
117      /*
118      --
119      -- ========================================================================
120               FND_MESSAGE.Set_Name('PV', 'UT_CANNOT_GET_PROFILE_VALUE');
121               FND_MESSAGE.Set_Token('TEXT', 'parent_rule_id:' || p_PROCESS_RULE_rec.PARENT_RULE_ID);
122               FND_MESSAGE.Set_Token('TEXT', 'child_rule_id:' || x_PROCESS_RULE_ID);
123               FND_MESSAGE.Set_Token('TEXT', 'rank:' || p_PROCESS_RULE_rec.rank);
124               FND_MSG_PUB.ADD;
125               RAISE FND_API.G_EXC_ERROR;
126      -- ========================================================================
127      */
128       Validate_rank(
129           P_Init_Msg_List   => FND_API.G_FALSE,
130           P_Validation_mode => AS_UTILITY_PVT.G_CREATE,
131 	  P_Parent_Rule_ID  => p_PROCESS_RULE_rec.PARENT_RULE_ID,
132           P_Child_Rule_ID   => x_PROCESS_RULE_ID,
133           P_RANK            => p_PROCESS_RULE_rec.rank,
134           X_Return_Status   => x_return_status,
135           X_Msg_Count       => x_msg_count,
136           X_Msg_Data        => x_msg_data);
137 
138       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
139           RAISE FND_API.G_EXC_ERROR;
140       END IF;
141 
142       Validate_enddate(
143           P_Init_Msg_List   => FND_API.G_FALSE,
144           P_Validation_mode => AS_UTILITY_PVT.G_CREATE,
145 	  P_START_DATE      => p_PROCESS_RULE_rec.start_date,
146           P_END_DATE        => p_PROCESS_RULE_rec.end_date,
147           X_Return_Status   => x_return_status,
148           X_Msg_Count       => x_msg_count,
149           X_Msg_Data        => x_msg_data);
150 
151       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
152           RAISE FND_API.G_EXC_ERROR;
153       END IF;
154 
155       Validate_startdate(
156 	  P_Init_Msg_List   => FND_API.G_FALSE,
157 	  P_Validation_mode => AS_UTILITY_PVT.G_CREATE,
158 	  P_Parent_Rule_ID  => p_PROCESS_RULE_rec.PARENT_RULE_ID,
159 	  P_START_DATE      => p_PROCESS_RULE_rec.start_date,
160 	  X_Return_Status   => x_return_status,
161           X_Msg_Count       => x_msg_count,
162           X_Msg_Data        => x_msg_data);
163 
164       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
165           RAISE FND_API.G_EXC_ERROR;
166       END IF;
167 
168       Validate_status(
169 	  P_Init_Msg_List   => FND_API.G_FALSE,
170           P_Validation_mode => AS_UTILITY_PVT.G_CREATE,
171 	  P_Parent_Rule_ID  => p_PROCESS_RULE_rec.PARENT_RULE_ID,
172 	  P_STATUS          => p_PROCESS_RULE_rec.status_code,
173 	  X_Return_Status   => x_return_status,
174           X_Msg_Count       => x_msg_count,
175           X_Msg_Data        => x_msg_data);
176 
177       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
178           RAISE FND_API.G_EXC_ERROR;
179       END IF;
180 
181       -- Debug Message
182       IF (AS_DEBUG_HIGH_ON) THEN
183 
184       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: Calling create table handler');
185       END IF;
186 
187 
188       -- Invoke table handler(PV_PROCESS_RULES_B_PKG.Insert_Row)
189       PV_PROCESS_RULES_PKG.Insert_Row(
190           px_PROCESS_RULE_ID  => x_PROCESS_RULE_ID
191          ,p_PARENT_RULE_ID  => p_PROCESS_RULE_rec.PARENT_RULE_ID
192          ,p_LAST_UPDATE_DATE  => SYSDATE
193          ,p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID
194          ,p_CREATION_DATE  => SYSDATE
195          ,p_CREATED_BY  => FND_GLOBAL.USER_ID
196          ,p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID
197          ,p_OBJECT_VERSION_NUMBER  => p_PROCESS_RULE_rec.OBJECT_VERSION_NUMBER
198          ,p_REQUEST_ID  => p_PROCESS_RULE_rec.REQUEST_ID
199          ,p_PROGRAM_APPLICATION_ID  => p_PROCESS_RULE_rec.PROGRAM_APPLICATION_ID
200          ,p_PROGRAM_ID  => p_PROCESS_RULE_rec.PROGRAM_ID
201          ,p_PROGRAM_UPDATE_DATE  => p_PROCESS_RULE_rec.PROGRAM_UPDATE_DATE
202          ,p_PROCESS_TYPE  => p_PROCESS_RULE_rec.PROCESS_TYPE
203          ,p_RANK  => p_PROCESS_RULE_rec.RANK
204          ,p_STATUS_CODE  => p_PROCESS_RULE_rec.STATUS_CODE
205          ,p_START_DATE  => p_PROCESS_RULE_rec.START_DATE
206          ,p_END_DATE  => p_PROCESS_RULE_rec.END_DATE
207          ,p_ACTION  => p_PROCESS_RULE_rec.ACTION
208          ,p_ACTION_VALUE  => p_PROCESS_RULE_rec.ACTION_VALUE
209          ,p_OWNER_RESOURCE_ID  => p_PROCESS_RULE_rec.OWNER_RESOURCE_ID
210          ,p_CURRENCY_CODE  => p_PROCESS_RULE_rec.CURRENCY_CODE
211          ,p_PROCESS_RULE_NAME  => p_PROCESS_RULE_rec.PROCESS_RULE_NAME
212          ,p_DESCRIPTION  => p_PROCESS_RULE_rec.DESCRIPTION
213          ,p_ATTRIBUTE_CATEGORY  => p_PROCESS_RULE_rec.ATTRIBUTE_CATEGORY
214          ,p_ATTRIBUTE1  => p_PROCESS_RULE_rec.ATTRIBUTE1
215          ,p_ATTRIBUTE2  => p_PROCESS_RULE_rec.ATTRIBUTE2
216          ,p_ATTRIBUTE3  => p_PROCESS_RULE_rec.ATTRIBUTE3
217          ,p_ATTRIBUTE4  => p_PROCESS_RULE_rec.ATTRIBUTE4
218          ,p_ATTRIBUTE5  => p_PROCESS_RULE_rec.ATTRIBUTE5
219          ,p_ATTRIBUTE6  => p_PROCESS_RULE_rec.ATTRIBUTE6
220          ,p_ATTRIBUTE7  => p_PROCESS_RULE_rec.ATTRIBUTE7
221          ,p_ATTRIBUTE8  => p_PROCESS_RULE_rec.ATTRIBUTE8
222          ,p_ATTRIBUTE9  => p_PROCESS_RULE_rec.ATTRIBUTE9
223          ,p_ATTRIBUTE10  => p_PROCESS_RULE_rec.ATTRIBUTE10
224          ,p_ATTRIBUTE11  => p_PROCESS_RULE_rec.ATTRIBUTE11
225          ,p_ATTRIBUTE12  => p_PROCESS_RULE_rec.ATTRIBUTE12
226          ,p_ATTRIBUTE13  => p_PROCESS_RULE_rec.ATTRIBUTE13
227          ,p_ATTRIBUTE14  => p_PROCESS_RULE_rec.ATTRIBUTE14
228          ,p_ATTRIBUTE15  => p_PROCESS_RULE_rec.ATTRIBUTE15
229 );
230 
231       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
232           RAISE FND_API.G_EXC_ERROR;
233       END IF;
234 
235       --
236       -- End of API body
237       --
238 
239       -- Standard check for p_commit
240       IF FND_API.to_Boolean( p_commit )
241       THEN
242           COMMIT WORK;
243       END IF;
244 
245 
246       -- Debug Message
247       IF (AS_DEBUG_HIGH_ON) THEN
248 
249       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'end');
250       END IF;
251 
252 
253       -- Standard call to get message count and if count is 1, get message info.
254       FND_MSG_PUB.Count_And_Get
255       (  p_count          =>   x_msg_count,
256          p_data           =>   x_msg_data
257       );
258 
259       EXCEPTION
260           WHEN FND_API.G_EXC_ERROR THEN
261               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
262                    P_API_NAME => L_API_NAME
263                   ,P_PKG_NAME => G_PKG_NAME
264                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
265                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
266                   ,X_MSG_COUNT => X_MSG_COUNT
267                   ,X_MSG_DATA => X_MSG_DATA
268                   ,X_RETURN_STATUS => X_RETURN_STATUS);
269 
270           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
271               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
272                    P_API_NAME => L_API_NAME
273                   ,P_PKG_NAME => G_PKG_NAME
274                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
275                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
276                   ,X_MSG_COUNT => X_MSG_COUNT
277                   ,X_MSG_DATA => X_MSG_DATA
278                   ,X_RETURN_STATUS => X_RETURN_STATUS);
279 
280           WHEN OTHERS THEN
281               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
282                    P_API_NAME => L_API_NAME
283                   ,P_PKG_NAME => G_PKG_NAME
284                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
285                   ,P_SQLCODE => SQLCODE
286                   ,P_SQLERRM => SQLERRM
287                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
288                   ,X_MSG_COUNT => X_MSG_COUNT
289                   ,X_MSG_DATA => X_MSG_DATA
290                   ,X_RETURN_STATUS => X_RETURN_STATUS);
291 End Create_process_rule;
292 
293 
294 -- Hint: Add corresponding update detail table procedures if it's master-detail relationship.
295 PROCEDURE Update_process_rule(
296     P_Api_Version_Number         IN   NUMBER,
297     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
298     P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
299     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
300     P_Identity_Resource_Id       IN   NUMBER,
301     P_PROCESS_RULE_Rec           IN   PV_RULE_RECTYPE_PUB.RULES_REC_TYPE,
302     X_Return_Status              OUT NOCOPY  VARCHAR2,
303     X_Msg_Count                  OUT NOCOPY  NUMBER,
304     X_Msg_Data                   OUT NOCOPY  VARCHAR2
305     )
306 
307  IS
308 
309 Cursor C_Get_process_rule(pc_PROCESS_RULE_ID Number) IS
310     Select OBJECT_VERSION_NUMBER
311     From  PV_PROCESS_RULES_B
312     where process_rule_id = pc_process_rule_id
313     For Update NOWAIT;
314 
315 l_api_name                CONSTANT VARCHAR2(30) := 'Update_process_rule';
316 l_api_version_number      CONSTANT NUMBER   := 2.0;
317 -- Local Variables
318 l_ref_PROCESS_RULE_rec    PV_RULE_RECTYPE_PUB.RULES_REC_TYPE;
319 l_tar_PROCESS_RULE_rec    PV_RULE_RECTYPE_PUB.RULES_REC_TYPE := P_PROCESS_RULE_Rec;
320  BEGIN
321       -- Standard Start of API savepoint
322       SAVEPOINT UPDATE_PROCESS_RULE_PVT;
323 
324       -- Standard call to check for call compatibility.
325       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
326                                            p_api_version_number,
327                                            l_api_name,
328                                            G_PKG_NAME)
329       THEN
330           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
331       END IF;
332 
333 
334       -- Initialize message list if p_init_msg_list is set to TRUE.
335       IF FND_API.to_Boolean( p_init_msg_list )
336       THEN
337           FND_MSG_PUB.initialize;
338       END IF;
339 
340 
341       -- Debug Message
342       IF (AS_DEBUG_HIGH_ON) THEN
343 
344       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'start');
345       END IF;
346 
347 
348       -- Initialize API return status to SUCCESS
349       x_return_status := FND_API.G_RET_STS_SUCCESS;
350 
351       --
352       -- Api body
353       --
354 
355       -- Debug Message
356       IF (AS_DEBUG_HIGH_ON) THEN
357 
358       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Open Cursor to Select');
359       END IF;
360 
361 
362       Open C_Get_process_rule( l_tar_PROCESS_RULE_rec.PROCESS_RULE_ID);
363 
364       Fetch C_Get_process_rule into
365                l_ref_PROCESS_RULE_rec.OBJECT_VERSION_NUMBER;
366 
367       If ( C_Get_process_rule%NOTFOUND) Then
368           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
369           THEN
370               FND_MESSAGE.Set_Name('AS', 'API_MISSING_UPDATE_TARGET');
371               FND_MESSAGE.Set_Token ('INFO', 'process_rule', FALSE);
372               FND_MSG_PUB.Add;
373           END IF;
374           Close C_Get_process_rule;
375           raise FND_API.G_EXC_ERROR;
376       END IF;
377       -- Debug Message
378       IF (AS_DEBUG_HIGH_ON) THEN
379 
380       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Close Cursor');
381       END IF;
382       Close     C_Get_process_rule;
383 
384       If (l_tar_PROCESS_RULE_rec.object_version_number is NULL or
385           l_tar_PROCESS_RULE_rec.object_version_number = FND_API.G_MISS_NUM ) Then
386           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
387           THEN
388               FND_MESSAGE.Set_Name('AS', 'API_MISSING_ID');
389               FND_MESSAGE.Set_Token('COLUMN', 'object_version_number', FALSE);
390               FND_MSG_PUB.ADD;
391           END IF;
392           raise FND_API.G_EXC_ERROR;
393       End if;
394       -- Check Whether record has been changed by someone else
395       If (l_tar_PROCESS_RULE_rec.object_version_number <> l_ref_PROCESS_RULE_rec.object_version_number) Then
396           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
397           THEN
398               FND_MESSAGE.Set_Name('AS', 'API_RECORD_CHANGED');
399               FND_MESSAGE.Set_Token('INFO', 'process_rule', FALSE);
400               FND_MSG_PUB.ADD;
401           END IF;
402           raise FND_API.G_EXC_ERROR;
403       End if;
404 
405       -- Debug message
406       IF (AS_DEBUG_HIGH_ON) THEN
407 
408       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: Validate_process_rule');
409       END IF;
410 
411       -- Invoke validation procedures
412       Validate_process_rule(
413           p_init_msg_list    => FND_API.G_FALSE,
414           p_validation_level => p_validation_level,
415           p_validation_mode  => AS_UTILITY_PVT.G_UPDATE,
416           P_PROCESS_RULE_Rec => P_PROCESS_RULE_Rec,
417           x_return_status    => x_return_status,
418           x_msg_count        => x_msg_count,
419           x_msg_data         => x_msg_data);
420 
421       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
422           RAISE FND_API.G_EXC_ERROR;
423       END IF;
424 
425 
426       Validate_rank(
427           P_Init_Msg_List   => FND_API.G_FALSE,
428           P_Validation_mode => AS_UTILITY_PVT.G_UPDATE,
429 	  P_Parent_Rule_ID  => p_PROCESS_RULE_rec.PARENT_RULE_ID,
430           P_Child_Rule_ID   => P_PROCESS_RULE_Rec.PROCESS_RULE_ID,
431           P_RANK            => p_PROCESS_RULE_rec.rank,
432           X_Return_Status   => x_return_status,
433           X_Msg_Count       => x_msg_count,
434           X_Msg_Data        => x_msg_data);
435 
436       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
437           RAISE FND_API.G_EXC_ERROR;
438       END IF;
439 
440 
441       Validate_enddate(
442           P_Init_Msg_List   => FND_API.G_FALSE,
443           P_Validation_mode => AS_UTILITY_PVT.G_UPDATE,
444 	  P_START_DATE      => p_PROCESS_RULE_rec.start_date,
445           P_END_DATE        => p_PROCESS_RULE_rec.end_date,
446           X_Return_Status   => x_return_status,
447           X_Msg_Count       => x_msg_count,
448           X_Msg_Data        => x_msg_data);
449 
450       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
451           RAISE FND_API.G_EXC_ERROR;
452       END IF;
453 
454       Validate_startdate(
455 	  P_Init_Msg_List   => FND_API.G_FALSE,
456 	  P_Validation_mode => AS_UTILITY_PVT.G_UPDATE,
457 	  P_Parent_Rule_ID  => p_PROCESS_RULE_rec.PARENT_RULE_ID,
458 	  P_START_DATE      => p_PROCESS_RULE_rec.start_date,
459 	  X_Return_Status   => x_return_status,
460           X_Msg_Count       => x_msg_count,
461           X_Msg_Data        => x_msg_data);
462 
463       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
464           RAISE FND_API.G_EXC_ERROR;
465       END IF;
466 
467       G_PROCESS_TYPE := p_PROCESS_RULE_rec.process_type;
468       G_ACTION       := 'UPDATE';
469 
470       Validate_status(
471 	  P_Init_Msg_List   => FND_API.G_FALSE,
472           P_Validation_mode => AS_UTILITY_PVT.G_UPDATE,
473 	  P_Parent_Rule_ID  => p_PROCESS_RULE_rec.process_RULE_ID,
474 	  P_STATUS          => p_PROCESS_RULE_rec.status_code,
475 	  X_Return_Status   => x_return_status,
476           X_Msg_Count       => x_msg_count,
477           X_Msg_Data        => x_msg_data);
478 
479       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
480           RAISE FND_API.G_EXC_ERROR;
481       END IF;
482 
483 
484       -- Debug Message
485       IF (AS_DEBUG_HIGH_ON) THEN
486 
487       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: Calling update table handler');
488       END IF;
489 
490       -- Invoke table handler(PV_PROCESS_RULES_B_PKG.Update_Row)
491       PV_PROCESS_RULES_PKG.Update_Row(
492           p_PROCESS_RULE_ID  => p_PROCESS_RULE_rec.PROCESS_RULE_ID
493          ,p_LAST_UPDATE_DATE  => SYSDATE
494          ,p_LAST_UPDATED_BY  => FND_GLOBAL.USER_ID
495          ,p_CREATION_DATE  => FND_API.G_MISS_DATE
496          ,p_CREATED_BY     => FND_API.G_MISS_NUM
497          ,p_LAST_UPDATE_LOGIN  => FND_GLOBAL.CONC_LOGIN_ID
498          ,p_OBJECT_VERSION_NUMBER  => p_PROCESS_RULE_rec.OBJECT_VERSION_NUMBER
499          ,p_REQUEST_ID  => p_PROCESS_RULE_rec.REQUEST_ID
500          ,p_PROGRAM_APPLICATION_ID  => p_PROCESS_RULE_rec.PROGRAM_APPLICATION_ID
501          ,p_PROGRAM_ID  => p_PROCESS_RULE_rec.PROGRAM_ID
502          ,p_PROGRAM_UPDATE_DATE  => p_PROCESS_RULE_rec.PROGRAM_UPDATE_DATE
503          ,p_PROCESS_TYPE  => p_PROCESS_RULE_rec.PROCESS_TYPE
504          ,p_RANK  => p_PROCESS_RULE_rec.RANK
505          ,p_STATUS_CODE  => p_PROCESS_RULE_rec.STATUS_CODE
506          ,p_START_DATE  => p_PROCESS_RULE_rec.START_DATE
507          ,p_END_DATE  => p_PROCESS_RULE_rec.END_DATE
508          ,p_ACTION  => p_PROCESS_RULE_rec.ACTION
509          ,p_ACTION_VALUE  => p_PROCESS_RULE_rec.ACTION_VALUE
510          ,p_OWNER_RESOURCE_ID  => p_PROCESS_RULE_rec.OWNER_RESOURCE_ID
511          ,p_CURRENCY_CODE  => p_PROCESS_RULE_rec.CURRENCY_CODE
512          ,p_PROCESS_RULE_NAME  => p_PROCESS_RULE_rec.PROCESS_RULE_NAME
513          ,p_DESCRIPTION  => p_PROCESS_RULE_rec.DESCRIPTION
514          ,p_ATTRIBUTE_CATEGORY  => p_PROCESS_RULE_rec.ATTRIBUTE_CATEGORY
515          ,p_ATTRIBUTE1  => p_PROCESS_RULE_rec.ATTRIBUTE1
516          ,p_ATTRIBUTE2  => p_PROCESS_RULE_rec.ATTRIBUTE2
517          ,p_ATTRIBUTE3  => p_PROCESS_RULE_rec.ATTRIBUTE3
518          ,p_ATTRIBUTE4  => p_PROCESS_RULE_rec.ATTRIBUTE4
519          ,p_ATTRIBUTE5  => p_PROCESS_RULE_rec.ATTRIBUTE5
520          ,p_ATTRIBUTE6  => p_PROCESS_RULE_rec.ATTRIBUTE6
521          ,p_ATTRIBUTE7  => p_PROCESS_RULE_rec.ATTRIBUTE7
522          ,p_ATTRIBUTE8  => p_PROCESS_RULE_rec.ATTRIBUTE8
523          ,p_ATTRIBUTE9  => p_PROCESS_RULE_rec.ATTRIBUTE9
524          ,p_ATTRIBUTE10  => p_PROCESS_RULE_rec.ATTRIBUTE10
525          ,p_ATTRIBUTE11  => p_PROCESS_RULE_rec.ATTRIBUTE11
526          ,p_ATTRIBUTE12  => p_PROCESS_RULE_rec.ATTRIBUTE12
527          ,p_ATTRIBUTE13  => p_PROCESS_RULE_rec.ATTRIBUTE13
528          ,p_ATTRIBUTE14  => p_PROCESS_RULE_rec.ATTRIBUTE14
529          ,p_ATTRIBUTE15  => p_PROCESS_RULE_rec.ATTRIBUTE15
530 );
531       --
532       -- End of API body.
533       --
534 
535       -- Standard check for p_commit
536       IF FND_API.to_Boolean( p_commit )
537       THEN
538           COMMIT WORK;
539       END IF;
540 
541 
542       -- Debug Message
543       IF (AS_DEBUG_HIGH_ON) THEN
544 
545       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'end');
546       END IF;
547 
548 
549       -- Standard call to get message count and if count is 1, get message info.
550       FND_MSG_PUB.Count_And_Get
551       (  p_count          =>   x_msg_count,
552          p_data           =>   x_msg_data
553       );
554 
555       EXCEPTION
556           WHEN FND_API.G_EXC_ERROR THEN
557               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
558                    P_API_NAME => L_API_NAME
559                   ,P_PKG_NAME => G_PKG_NAME
560                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
561                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
562                   ,X_MSG_COUNT => X_MSG_COUNT
563                   ,X_MSG_DATA => X_MSG_DATA
564                   ,X_RETURN_STATUS => X_RETURN_STATUS);
565 
566           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
567               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
568                    P_API_NAME => L_API_NAME
569                   ,P_PKG_NAME => G_PKG_NAME
570                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
571                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
572                   ,X_MSG_COUNT => X_MSG_COUNT
573                   ,X_MSG_DATA => X_MSG_DATA
574                   ,X_RETURN_STATUS => X_RETURN_STATUS);
575 
576           WHEN OTHERS THEN
577               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
578                    P_API_NAME => L_API_NAME
579                   ,P_PKG_NAME => G_PKG_NAME
580                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
581                   ,P_SQLCODE => SQLCODE
582                   ,P_SQLERRM => SQLERRM
583                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
584                   ,X_MSG_COUNT => X_MSG_COUNT
585                   ,X_MSG_DATA => X_MSG_DATA
586                   ,X_RETURN_STATUS => X_RETURN_STATUS);
587 End Update_process_rule;
588 
589 -- ----------------------------------------------------------------------------------------
590 -- Delete_Process_Rule
591 --
592 -- Hint: Add corresponding delete detail table procedures if it's master-detail relationship.
593 --       The Master delete procedure may not be needed depends on different business requirements.
594 -- ----------------------------------------------------------------------------------------
595 PROCEDURE Delete_process_rule(
596     P_Api_Version_Number         IN   NUMBER,
597     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
598     P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
599     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
600     P_Identity_Resource_Id       IN   NUMBER,
601     P_PROCESS_RULE_Rec           IN   PV_RULE_RECTYPE_PUB.RULES_REC_TYPE,
602     X_Return_Status              OUT NOCOPY  VARCHAR2,
603     X_Msg_Count                  OUT NOCOPY  NUMBER,
604     X_Msg_Data                   OUT NOCOPY  VARCHAR2
605     )
606 
607  IS
608 l_api_name                CONSTANT VARCHAR2(30) := 'Delete_process_rule';
609 l_api_version_number      CONSTANT NUMBER   := 2.0;
610 
611 -- ------------------------------------------------------------------------
612 -- These columns can be retrieved from the VO to save a database call.
613 -- However, OSO has a bug that doesn't allow parent_Rule_id to be returned.
614 -- ------------------------------------------------------------------------
615 /*
616 cursor lc_retrieve_rule_components(pc_rule_id number) is
617    select parent_rule_id, process_type
618    from   pv_process_rules_vl
619    where  process_rule_id = pc_rule_id;
620 */
621 
622 -- ------------------------------------------------------------------------
623 -- SQL is tuned to make use of an index on fnd_profile_option_values
624 -- ------------------------------------------------------------------------
625 cursor lc_validate_rule_profile_ref(pc_rule_id number) is
626    select process_rule_name
627    from   fnd_profile_option_values a, pv_process_rules_tl b,
628           fnd_profile_options c
629    where  a.profile_option_value = to_char(pc_rule_id)
630    and    a.profile_option_value = b.process_rule_id AND
631           b.language             = USERENV('LANG') and
632           a.application_Id       = 691 and
633           a.profile_option_id    = c.profile_option_id AND
634           c.profile_option_name  = 'PV_AUTO_MATCHING_RULE';
635 
636 
637 /* ------------------------------------------------------
638 cursor lc_validate_rule_referenced(pc_rule_id number) is
639    select process_rule_name
640    from pv_entity_rules_applied a, pv_process_rules_vl b
641    where a.process_rule_id = pc_rule_id
642    and   a.process_rule_id = b.process_rule_id;
643    ------------------------------------------------------- */
644 cursor lc_validate_rule_referenced1(pc_rule_id number) is
645    SELECT process_rule_name
646    FROM   pv_process_rules_vl a
647    WHERE  process_rule_id = pc_rule_id AND
648           EXISTS (SELECT 'x' FROM pv_entity_rules_applied b
649                   WHERE  a.process_rule_id = b.process_rule_id);
650 
651 cursor lc_validate_rule_referenced2(pc_rule_id number) is
652    SELECT process_rule_name
653    FROM   pv_process_rules_vl a
654    WHERE  process_rule_id = pc_rule_id AND
655           EXISTS (SELECT 'x' FROM pv_entity_rules_applied b
656                   WHERE  b.parent_process_rule_id = a.process_rule_id);
657 
658 
659 cursor lc_get_selcrit (pc_rule_id number) is
660    select selection_criteria_id
661    from pv_enty_select_criteria
662    where process_rule_id = pc_rule_id;
663 
664 cursor lc_get_attr_mapping (pc_rule_id number) is
665    select mapping_id
666    from pv_entity_attr_mappings
667    where process_rule_id = pc_rule_id;
668 
669 cursor lc_get_entity_routing (pc_rule_id number) is
670    select entity_routing_id
671    from pv_entity_routings
672    where process_rule_id = pc_rule_id;
673 
674 cursor lc_get_parent_rule_id (pc_rule_id number) is
675    select process_rule_id
676    from pv_process_rules_vl
677    where parent_rule_id = pc_rule_id;
678 
679 
680 l_ENTYROUT_rec    PV_RULE_RECTYPE_PUB.ENTYROUT_Rec_Type;
681 l_ENTYATTMAP_rec  PV_RULE_RECTYPE_PUB.ENTYATTMAP_Rec_Type;
682 l_SELCRIT_rec     PV_RULE_RECTYPE_PUB.SELCRIT_Rec_Type;
683 
684 l_process_rule_name varchar2(100);
685 l_selection_criteria_id number;
686 l_mapping_id            number;
687 l_entity_routing_id     number;
688 
689 l_is_main_rule_flag     BOOLEAN;
690 l_process_type          VARCHAR2(30);
691 l_process_rule_id       NUMBER;
692 
693 
694  BEGIN
695       -- Standard Start of API savepoint
696       SAVEPOINT DELETE_PROCESS_RULE_PVT;
697 
698       -- Standard call to check for call compatibility.
699       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
700                                            p_api_version_number,
701                                            l_api_name,
702                                            G_PKG_NAME)
703       THEN
704           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
705       END IF;
706 
707 
708       -- Initialize message list if p_init_msg_list is set to TRUE.
709       IF FND_API.to_Boolean( p_init_msg_list )
710       THEN
711           FND_MSG_PUB.initialize;
712       END IF;
713 
714 
715       -- Debug Message
716       IF (AS_DEBUG_HIGH_ON) THEN
717 
718       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'start');
719       END IF;
720 
721 
722       -- Initialize API return status to SUCCESS
723       x_return_status := FND_API.G_RET_STS_SUCCESS;
724 
725       --
726       -- Api body
727       --
728       -- ------------------------------------------------------------------
729       -- Find out if the current rule is a main rule or a subrule.
730       -- ------------------------------------------------------------------
731       FOR x IN (
732          SELECT parent_rule_id, process_type
733          FROM   pv_process_rules_vl
734          WHERE  process_rule_id = p_PROCESS_RULE_rec.PROCESS_RULE_ID)
735       LOOP
736          IF (x.parent_rule_id IS NOT NULL) THEN
737             l_is_main_rule_flag := FALSE;
738 
739          ELSE
740             l_is_main_rule_flag := TRUE;
741          END IF;
742 
743          l_process_type := x.process_type;
744       END LOOP;
745 
746 
747       open lc_validate_rule_profile_ref (pc_rule_id => p_PROCESS_RULE_rec.PROCESS_RULE_ID);
748       fetch lc_validate_rule_profile_ref into l_process_rule_name;
749       close lc_validate_rule_profile_ref;
750 
751       if l_process_rule_name is not null then
752 
753           IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
754 	  THEN
755               FND_MESSAGE.Set_Name('PV', 'PV_RULE_REF_BY_PROFILE');
756               FND_MESSAGE.Set_Token('PROCESS_RULE_NAME',l_process_rule_name);
757               FND_MSG_PUB.Add;
758           END IF;
759 
760           RAISE FND_API.G_EXC_ERROR;
761 
762 	  l_process_rule_name := null;
763 
764       end if;
765 
766       -- ------------------------------------------------------------------
767       -- Check if the rule is referenced by any leads.
768       -- ------------------------------------------------------------------
769       IF (l_process_type IN ('LEAD_RATING', 'CHANNEL_SELECTION', 'LEAD_QUALIFICATION') AND
770           l_is_main_rule_flag)
771       THEN
772          open lc_validate_rule_referenced2 (pc_rule_id => p_PROCESS_RULE_rec.PROCESS_RULE_ID);
773          fetch lc_validate_rule_referenced2 into l_process_rule_name;
774          close lc_validate_rule_referenced2;
775 
776       ELSE
777          open lc_validate_rule_referenced1 (pc_rule_id => p_PROCESS_RULE_rec.PROCESS_RULE_ID);
778          fetch lc_validate_rule_referenced1 into l_process_rule_name;
779          close lc_validate_rule_referenced1;
780       END IF;
781 
782       if l_process_rule_name is not null then
783 
784           IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
785 	  THEN
786               FND_MESSAGE.Set_Name('PV', 'PV_RULE_REFERENCED');
787               FND_MESSAGE.Set_Token('PROCESS_RULE_NAME',l_process_rule_name);
788               FND_MSG_PUB.Add;
789           END IF;
790 
791           RAISE FND_API.G_EXC_ERROR;
792 
793       end if;
794 
795       begin
796 
797          open lc_get_entity_routing (pc_rule_id => p_PROCESS_RULE_rec.PROCESS_RULE_ID);
798          loop
799 
800             fetch lc_get_entity_routing into l_entity_routing_id;
801             exit when lc_get_entity_routing%notfound;
802 
803             l_entyrout_rec.entity_routing_id := l_entity_routing_id;
804 
805             PV_entyrout_PVT.Delete_entyrout(
806                P_Api_Version_Number         => 2.0,
807                P_Init_Msg_List              => FND_API.G_FALSE,
808                P_Commit                     => p_commit,
809                P_Validation_Level           => p_Validation_Level,
810                P_Identity_Resource_Id       => P_Identity_Resource_Id,
811                P_ENTYROUT_Rec               => l_ENTYROUT_Rec,
812                X_Return_Status              => x_return_status,
813                X_Msg_Count                  => x_msg_count,
814                X_Msg_Data                   => x_msg_data);
815 
816               -- Check return status from the above procedure call
817               IF x_return_status = FND_API.G_RET_STS_ERROR then
818                   raise FND_API.G_EXC_ERROR;
819               elsif x_return_status = FND_API.G_RET_STS_UNEXP_ERROR then
820                   raise FND_API.G_EXC_UNEXPECTED_ERROR;
821               END IF;
822 
823          end loop;
824          close lc_get_entity_routing;
825 
826       exception
827       when others then
828          close lc_get_entity_routing;
829          raise;
830       end;
831 
832       begin
833 
834          open lc_get_attr_mapping (pc_rule_id => p_PROCESS_RULE_rec.PROCESS_RULE_ID);
835          loop
836 
837             fetch lc_get_attr_mapping into l_mapping_id;
838             exit when lc_get_attr_mapping%notfound;
839 
840             l_entyattmap_rec.mapping_id := l_mapping_id;
841 
842 
843             PV_entyattmap_PVT.Delete_entyattmap(
844                P_Api_Version_Number         => 2.0,
845                P_Init_Msg_List              => FND_API.G_FALSE,
846                P_Commit                     => p_commit,
847                P_Validation_Level           => p_Validation_Level,
848                P_Identity_Resource_Id       => P_Identity_Resource_Id,
849                P_ENTYATTMAP_Rec             => l_ENTYATTMAP_Rec,
850                X_Return_Status              => x_return_status,
851                X_Msg_Count                  => x_msg_count,
852                X_Msg_Data                   => x_msg_data);
853 
854             -- Check return status from the above procedure call
855             IF x_return_status = FND_API.G_RET_STS_ERROR then
856                 raise FND_API.G_EXC_ERROR;
857             elsif x_return_status = FND_API.G_RET_STS_UNEXP_ERROR then
858                 raise FND_API.G_EXC_UNEXPECTED_ERROR;
859             END IF;
860 
861          end loop;
862          close lc_get_attr_mapping;
863 
864       exception
865       when others then
866          close lc_get_attr_mapping;
867          raise;
868       end;
869 
870       begin
871 
872          open lc_get_selcrit (pc_rule_id => p_PROCESS_RULE_rec.PROCESS_RULE_ID);
873          loop
874 
875             fetch lc_get_selcrit into l_selection_criteria_id;
876             exit when lc_get_selcrit%notfound;
877 
878             l_selcrit_rec.selection_criteria_id := l_selection_criteria_id;
879 
880             PV_selcrit_PVT.Delete_selcrit(
881                P_Api_Version_Number         => 2.0,
882                P_Init_Msg_List              => FND_API.G_FALSE,
883                P_Commit                     => p_commit,
884                P_Validation_Level           => p_Validation_Level,
885                P_Identity_Resource_Id       => P_Identity_Resource_Id,
886                P_SELCRIT_Rec                => l_SELCRIT_Rec,
887                X_Return_Status              => x_return_status,
888                X_Msg_Count                  => x_msg_count,
889                X_Msg_Data                   => x_msg_data);
890 
891               -- Check return status from the above procedure call
892               IF x_return_status = FND_API.G_RET_STS_ERROR then
893                   raise FND_API.G_EXC_ERROR;
894               elsif x_return_status = FND_API.G_RET_STS_UNEXP_ERROR then
895                   raise FND_API.G_EXC_UNEXPECTED_ERROR;
896               END IF;
897 
898          end loop;
899          close lc_get_selcrit;
900 
901       exception
902       when others then
903          close lc_get_selcrit;
904          raise;
905       end;
906 
907       -- Debug Message
908       IF (AS_DEBUG_HIGH_ON) THEN
909 
910       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: PV_PROCESS_RULES_PKG.Delete_Row');
911       END IF;
912 
913       -- Invoke table handler(PV_PROCESS_RULES_B_PKG.Delete_Row)
914       PV_PROCESS_RULES_PKG.Delete_Row(
915           p_PROCESS_RULE_ID  => p_PROCESS_RULE_rec.PROCESS_RULE_ID);
916       --
917       -- End of API body
918       --
919 
920       -- Code change by ryellapu to delete the child rules when parent rule is deleted
921       -- Invoke table handler(PV_PROCESS_RULES_B_PKG.Delete_Row) to DELETE the child rows
922 
923       -- BEGIN OF CHILD RULE DELETION
924 
925      begin
926       open lc_get_parent_rule_id (pc_rule_id => p_PROCESS_RULE_rec.PROCESS_RULE_ID);
927          loop
928             fetch lc_get_parent_rule_id into l_process_rule_id;
929             exit when lc_get_parent_rule_id%notfound;
930 
931        PV_PROCESS_RULES_PKG.Delete_Row(
932           p_PROCESS_RULE_ID  => l_process_rule_id);
933 
934           -- Check return status from the above procedure call
935               IF x_return_status = FND_API.G_RET_STS_ERROR then
936                   raise FND_API.G_EXC_ERROR;
937               elsif x_return_status = FND_API.G_RET_STS_UNEXP_ERROR then
938                   raise FND_API.G_EXC_UNEXPECTED_ERROR;
939               END IF;
940          end loop;
941          close lc_get_parent_rule_id;
942 	 exception
943         when others then
944          close lc_get_parent_rule_id;
945          raise;
946 	end;
947 
948      -- END OF CHILD RULE DELETION
949 
950       -- Standard check for p_commit
951       IF FND_API.to_Boolean( p_commit )
952       THEN
953           COMMIT WORK;
954       END IF;
955 
956 
957       -- Debug Message
958       IF (AS_DEBUG_HIGH_ON) THEN
959 
960       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'end');
961       END IF;
962 
963 
964       -- Standard call to get message count and if count is 1, get message info.
965       FND_MSG_PUB.Count_And_Get
966       (  p_count          =>   x_msg_count,
967          p_data           =>   x_msg_data
968       );
969 
970       EXCEPTION
971           WHEN FND_API.G_EXC_ERROR THEN
972               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
973                    P_API_NAME => L_API_NAME
974                   ,P_PKG_NAME => G_PKG_NAME
975                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
976                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
977                   ,X_MSG_COUNT => X_MSG_COUNT
978                   ,X_MSG_DATA => X_MSG_DATA
979                   ,X_RETURN_STATUS => X_RETURN_STATUS);
980 
981           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
982               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
983                    P_API_NAME => L_API_NAME
984                   ,P_PKG_NAME => G_PKG_NAME
985                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
986                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
987                   ,X_MSG_COUNT => X_MSG_COUNT
988                   ,X_MSG_DATA => X_MSG_DATA
989                   ,X_RETURN_STATUS => X_RETURN_STATUS);
990 
991           WHEN OTHERS THEN
992               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
993                    P_API_NAME => L_API_NAME
994                   ,P_PKG_NAME => G_PKG_NAME
995                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
996                   ,P_SQLCODE => SQLCODE
997                   ,P_SQLERRM => SQLERRM
998                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
999                   ,X_MSG_COUNT => X_MSG_COUNT
1000                   ,X_MSG_DATA => X_MSG_DATA
1001                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1002 End Delete_process_rule;
1003 
1004 
1005 -- Hint: Primary key needs to be returned.
1006 PROCEDURE Copy_process_rule(
1007     P_Api_Version_Number         IN   NUMBER,
1008     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1009     P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
1010     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
1011     P_Identity_Resource_Id       IN   NUMBER,
1012     P_PROCESS_RULE_Rec           IN   PV_RULE_RECTYPE_PUB.RULES_REC_TYPE
1013                                 := PV_RULE_RECTYPE_PUB.G_MISS_RULES_REC,
1014     X_PROCESS_RULE_ID            OUT NOCOPY  NUMBER,
1015     X_Return_Status              OUT NOCOPY  VARCHAR2,
1016     X_Msg_Count                  OUT NOCOPY  NUMBER,
1017     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1018     )
1019 
1020  IS
1021 l_api_name                  CONSTANT VARCHAR2(30) := 'Copy_process_rule';
1022 l_api_version_number        CONSTANT NUMBER   := 2.0;
1023 l_return_status_full        VARCHAR2(1);
1024 l_access_flag               VARCHAR2(1);
1025 
1026 Cursor C_Get_parent_process_rules(pc_PROCESS_RULE_ID Number) IS
1027     Select RLSB.PROCESS_RULE_ID, RLSB.LAST_UPDATE_DATE, RLSB.LAST_UPDATED_BY, RLSB.CREATION_DATE, RLSB.CREATED_BY,
1028            RLSB.LAST_UPDATE_LOGIN, RLSB.OBJECT_VERSION_NUMBER, RLSB.REQUEST_ID, RLSB.PROGRAM_APPLICATION_ID, RLSB.PROGRAM_ID,
1029            RLSB.PROGRAM_UPDATE_DATE, PROCESS_RULE_NAME, PARENT_RULE_ID, PROCESS_TYPE , RANK, STATUS_CODE, START_DATE, END_DATE,
1030 	   ACTION, ACTION_VALUE, OWNER_RESOURCE_ID, CURRENCY_CODE, LANGUAGE, SOURCE_LANG ,DESCRIPTION, ATTRIBUTE_CATEGORY,
1031 	   ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9,
1032 	   ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15
1033     From  PV_PROCESS_RULES_B RLSB,PV_PROCESS_RULES_TL RLST
1034     where RLSB.process_rule_id = RLST.process_rule_id and
1035           (RLSB.parent_rule_id = pc_process_rule_id or RLSB.process_rule_id = pc_process_rule_id) and
1036 	  RLST.language = USERENV('LANG') order by parent_rule_id desc;
1037 
1038   Cursor C_Get_enty_select_criteria(pc_PROCESS_RULE_ID Number) IS
1039     Select SELECTION_CRITERIA_ID, LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN,
1040            OBJECT_VERSION_NUMBER,REQUEST_ID,PROGRAM_APPLICATION_ID,PROGRAM_ID,PROGRAM_UPDATE_DATE,PROCESS_RULE_ID,
1041            ATTRIBUTE_ID, SELECTION_TYPE_CODE, OPERATOR, RANK, ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3,
1042            ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12,
1043            ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15
1044     From  PV_ENTY_SELECT_CRITERIA
1045     Where process_rule_id = pc_PROCESS_RULE_ID;
1046 
1047   Cursor C_Get_selected_attr_values(pc_SELECTION_CRITERIA_ID Number) IS
1048     Select ATTR_VALUE_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY,LAST_UPDATE_LOGIN,OBJECT_VERSION_NUMBER,
1049            REQUEST_ID,PROGRAM_APPLICATION_ID,PROGRAM_ID,PROGRAM_UPDATE_DATE,SELECTION_CRITERIA_ID,ATTRIBUTE_VALUE,
1050            ATTRIBUTE_TO_VALUE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5,ATTRIBUTE6,
1051            ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15,SCORE
1052     From  PV_SELECTED_ATTR_VALUES
1053     Where SELECTION_CRITERIA_ID = pc_SELECTION_CRITERIA_ID;
1054 
1055   Cursor C_Get_entity_attr_mappings(pc_PROCESS_RULE_ID Number) IS
1056     Select MAPPING_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY,LAST_UPDATE_LOGIN,OBJECT_VERSION_NUMBER,
1057 	   REQUEST_ID,PROGRAM_APPLICATION_ID,PROGRAM_ID,PROGRAM_UPDATE_DATE,PROCESS_RULE_ID,SOURCE_ATTR_TYPE,
1058 	   SOURCE_ATTR_ID,TARGET_ATTR_TYPE,TARGET_ATTR_ID,OPERATOR,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,
1059 	   ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,
1060 	   ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
1061     From  PV_ENTITY_ATTR_MAPPINGS
1062     Where process_rule_id = pc_PROCESS_RULE_ID;
1063 
1064     Cursor C_Get_entity_routings(pc_PROCESS_RULE_ID Number) IS
1065     Select ENTITY_ROUTING_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY,LAST_UPDATE_LOGIN,OBJECT_VERSION_NUMBER,
1066 	   REQUEST_ID,PROGRAM_APPLICATION_ID,PROGRAM_ID,PROGRAM_UPDATE_DATE,PROCESS_RULE_ID,DISTANCE_FROM_CUSTOMER,
1067 	   DISTANCE_UOM_CODE,MAX_NEAREST_PARTNER,ROUTING_TYPE,BYPASS_CM_OK_FLAG,CM_TIMEOUT,CM_TIMEOUT_UOM_CODE,PARTNER_TIMEOUT,
1068 	   PARTNER_TIMEOUT_UOM_CODE,UNMATCHED_INT_RESOURCE_ID,UNMATCHED_CALL_TAP_FLAG,ATTRIBUTE_CATEGORY,ATTRIBUTE1,
1069 	   ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,
1070 	   ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
1071      From PV_ENTITY_ROUTINGS
1072      Where process_rule_id = pc_PROCESS_RULE_ID;
1073 
1074     --l_PROCESS_RULE_rec		PV_RULE_RECTYPE_PUB.RULES_REC_TYPE;
1075     --l_ENTY_SELECT_CRITERIA_rec	PV_RULE_RECTYPE_PUB.SELCRIT_REC_TYPE;
1076     --l_SELECT_ATTR_VALUES_rec	PV_RULE_RECTYPE_PUB.SELATTVAL_REC_TYPE;
1077     --l_ENTITY_ATTR_MAPPINGS_rec  PV_RULE_RECTYPE_PUB.ENTYATTMAP_REC_TYPE;
1078     --l_ENTITY_ROUTINGS_rec       PV_RULE_RECTYPE_PUB.ENTYROUT_REC_TYPE;
1079     --l_api_version_number  CONSTANT NUMBER   := 2.0;
1080     --l_Init_Msg_List       VARCHAR2(30) := FND_API.G_FALSE;
1081     --l_Commit              VARCHAR2(30) := FND_API.G_FALSE;
1082     --l_validation_level    NUMBER       := FND_API.G_VALID_LEVEL_FULL;
1083     --L_API_NAME            VARCHAR2(30) := 'PV_RULES_COPY_PUB';
1084     --l_PROCESS_RULE_ID     NUMBER  ;
1085 
1086     l_Return_Status       VARCHAR2(30);
1087     l_Msg_Count           NUMBER;
1088     l_Msg_Data            VARCHAR2(1000);
1089     l_copy_exists         NUMBER := 0;
1090     l_rule_length         NUMBER := 0;
1091     l_rule_suffix         VARCHAR2(200);
1092     v_selection_criteria_id NUMBER;
1093     x_selection_criteria_id NUMBER;
1094     x_entity_routing_id     NUMBER;
1095     x_mapping_id	    NUMBER;
1096     x_attr_value_id         NUMBER;
1097     v_dummy                 NUMBER;
1098     l_parent_rule_id_tbl    NUMBER_TABLE;
1099     l_parent_rule_id_index  NUMBER :=1;
1100 
1101  BEGIN
1102       -- Standard Start of API savepoint
1103       SAVEPOINT COPY_PROCESS_RULE_PVT;
1104 
1105       -- Standard call to check for call compatibility.
1106       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1107                                            p_api_version_number,
1108                                            l_api_name,
1109                                            G_PKG_NAME)
1110       THEN
1111           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1112       END IF;
1113 
1114 
1115       -- Initialize message list if p_init_msg_list is set to TRUE.
1116       IF FND_API.to_Boolean( p_init_msg_list )
1117       THEN
1118           FND_MSG_PUB.initialize;
1119       END IF;
1120 
1121 
1122       -- Debug Message
1123       IF (AS_DEBUG_HIGH_ON) THEN
1124 
1125       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'start');
1126       END IF;
1127 
1128 
1129       -- Initialize API return status to SUCCESS
1130       x_return_status := FND_API.G_RET_STS_SUCCESS;
1131 
1132       --
1133       -- API body
1134       --
1135       -- ******************************************************************
1136       -- Validate Environment
1137       -- ******************************************************************
1138       IF FND_GLOBAL.User_Id IS NULL
1139       THEN
1140           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
1141           THEN
1142               FND_MESSAGE.Set_Name('PV', 'UT_CANNOT_GET_PROFILE_VALUE');
1143               FND_MESSAGE.Set_Token('PROFILE', 'USER_ID', FALSE);
1144               FND_MSG_PUB.ADD;
1145           END IF;
1146           RAISE FND_API.G_EXC_ERROR;
1147       END IF;
1148 
1149       -- Debug message
1150       IF (AS_DEBUG_HIGH_ON) THEN
1151 
1152       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: Validate_process_rule');
1153       END IF;
1154 
1155       -- Invoke validation procedures
1156       Validate_process_rule(
1157           p_init_msg_list    => FND_API.G_FALSE,
1158           p_validation_level => p_validation_level,
1159           p_validation_mode  => AS_UTILITY_PVT.G_CREATE,
1160           P_PROCESS_RULE_Rec  =>  P_PROCESS_RULE_Rec,
1161           x_return_status    => x_return_status,
1162           x_msg_count        => x_msg_count,
1163           x_msg_data         => x_msg_data);
1164 
1165       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1166           RAISE FND_API.G_EXC_ERROR;
1167       END IF;
1168 
1169 
1170       FOR V_Get_parent_process_rules IN C_Get_parent_process_rules(P_PROCESS_RULE_Rec.Process_Rule_Id) LOOP
1171        if C_Get_parent_process_rules%found then
1172 
1173          if l_parent_rule_id_tbl.count > 0 then
1174            V_Get_parent_process_rules.parent_rule_id := l_parent_rule_id_tbl(2);
1175 	   V_Get_parent_process_rules.last_update_date       := null;
1176 	   V_Get_parent_process_rules.last_updated_by        := null;
1177 	   V_Get_parent_process_rules.creation_date          := null;
1178 	   V_Get_parent_process_rules.created_by	     := null;
1179 	   V_Get_parent_process_rules.last_update_login	     := null;
1180 	   V_Get_parent_process_rules.object_version_number  := null;
1181 	 else
1182 	   V_Get_parent_process_rules.process_rule_name := P_PROCESS_RULE_Rec.process_rule_name;
1183 	   V_Get_parent_process_rules.description	:= P_PROCESS_RULE_Rec.description;
1184 	   V_Get_parent_process_rules.status_code       := P_PROCESS_RULE_Rec.status_code;
1185 	   V_Get_parent_process_rules.start_date        := P_PROCESS_RULE_Rec.start_date;
1186 	   V_Get_parent_process_rules.end_date          := P_PROCESS_RULE_Rec.end_date;
1187 	   V_Get_parent_process_rules.rank              := P_PROCESS_RULE_Rec.rank;
1188 	   V_Get_parent_process_rules.owner_resource_id := P_PROCESS_RULE_Rec.owner_resource_id;
1189 	   V_Get_parent_process_rules.currency_code     := P_PROCESS_RULE_Rec.currency_code;
1190 
1191 	   V_Get_parent_process_rules.last_update_date       := null;
1192 	   V_Get_parent_process_rules.last_updated_by        := null;
1193 	   V_Get_parent_process_rules.creation_date          := null;
1194 	   V_Get_parent_process_rules.created_by	     := null;
1195 	   V_Get_parent_process_rules.last_update_login	     := null;
1196 	   V_Get_parent_process_rules.object_version_number  := null;
1197 	 end if;
1198 
1199   PV_PROCESS_RULE_PVT.Create_process_rule(p_api_version_number,p_Init_Msg_List,p_Commit,p_validation_level,
1200                                           P_Identity_Resource_Id,V_Get_parent_process_rules,
1201                                           x_PROCESS_RULE_ID,x_Return_Status,x_Msg_Count,x_Msg_Data);
1202 
1203          l_parent_rule_id_index := l_parent_rule_id_index+1;
1204 	 l_parent_rule_id_tbl(l_parent_rule_id_index) := x_PROCESS_RULE_ID;
1205          V_Get_parent_process_rules.parent_rule_id := l_parent_rule_id_tbl(2);
1206 
1207 
1208   if l_parent_rule_id_index > 2 then
1209 
1210          FOR V_Get_enty_select_criteria IN C_Get_enty_select_criteria(V_Get_parent_process_rules.process_rule_id) LOOP
1211 	   if C_Get_enty_select_criteria%found then
1212 	     V_Get_enty_select_criteria.process_rule_id := x_PROCESS_RULE_ID;
1213 	     v_selection_criteria_id := V_Get_enty_select_criteria.SELECTION_CRITERIA_ID;
1214 	     V_Get_enty_select_criteria.SELECTION_CRITERIA_ID := null;
1215 	     PV_SELCRIT_PVT.Create_selcrit(p_api_version_number,p_Init_Msg_List,p_Commit,p_validation_level,
1216                                            P_Identity_Resource_Id,V_Get_enty_select_criteria,x_selection_criteria_id,x_Return_Status,
1217 				           x_Msg_Count,x_Msg_Data);
1218 
1219          FOR V_Get_selected_attr_values IN C_Get_selected_attr_values(v_selection_criteria_id) LOOP
1220 	   if C_Get_selected_attr_values%found then
1221 	     V_Get_selected_attr_values.SELECTION_CRITERIA_ID := x_selection_criteria_id;
1222 	     V_Get_selected_attr_values.ATTR_VALUE_ID := null;
1223 	     PV_SELATTVAL_PVT.Create_selattval(p_api_version_number,
1224 	                                       p_Init_Msg_List,
1225 	                                       p_Commit,
1226 					       p_validation_level,
1227                                                P_Identity_Resource_Id,
1228 					       V_Get_selected_attr_values,
1229 					       x_attr_value_id,
1230 					       x_Return_Status,
1231 				               x_Msg_Count,
1232 					       x_Msg_Data);
1233 
1234 	   end if;
1235 	 END LOOP;
1236 
1237 
1238 	   end if;
1239 	 END LOOP;
1240 	 x_PROCESS_RULE_ID := l_parent_rule_id_tbl(2);
1241 
1242 	 else
1243 
1244 	 FOR V_Get_enty_select_criteria IN C_Get_enty_select_criteria(P_PROCESS_RULE_Rec.Process_Rule_Id) LOOP
1245 	   if C_Get_enty_select_criteria%found then
1246 	     V_Get_enty_select_criteria.process_rule_id := x_PROCESS_RULE_ID;
1247 	     v_selection_criteria_id := V_Get_enty_select_criteria.SELECTION_CRITERIA_ID;
1248 	     V_Get_enty_select_criteria.SELECTION_CRITERIA_ID := null;
1249 	     PV_SELCRIT_PVT.Create_selcrit(p_api_version_number,p_Init_Msg_List,p_Commit,p_validation_level,
1250                                            P_Identity_Resource_Id,V_Get_enty_select_criteria,x_selection_criteria_id,x_Return_Status,
1251 				           x_Msg_Count,x_Msg_Data);
1252 
1253          FOR V_Get_selected_attr_values IN C_Get_selected_attr_values(v_selection_criteria_id) LOOP
1254 	   if C_Get_selected_attr_values%found then
1255 	     V_Get_selected_attr_values.SELECTION_CRITERIA_ID := x_selection_criteria_id;
1256 	     V_Get_selected_attr_values.ATTR_VALUE_ID := null;
1257 	     PV_SELATTVAL_PVT.Create_selattval(p_api_version_number,p_Init_Msg_List,p_Commit,p_validation_level,
1258                                                P_Identity_Resource_Id,V_Get_selected_attr_values,x_attr_value_id,x_Return_Status,
1259 				               x_Msg_Count,x_Msg_Data);
1260 
1261 	   end if;
1262 	 END LOOP;
1263 
1264 	   end if;
1265 	 END LOOP;
1266 
1267   end if;
1268 
1269   FOR V_Get_entity_attr_mappings IN C_Get_entity_attr_mappings(P_PROCESS_RULE_Rec.Process_Rule_Id) LOOP
1270 	   if C_Get_entity_attr_mappings%found then
1271 	     V_Get_entity_attr_mappings.process_rule_id := x_PROCESS_RULE_ID;
1272 	     V_Get_entity_attr_mappings.MAPPING_ID := null;
1273 	     PV_ENTYATTMAP_PVT.Create_entyattmap(p_api_version_number,p_Init_Msg_List,p_Commit,p_validation_level,
1274                                                  P_Identity_Resource_Id,V_Get_entity_attr_mappings,x_mapping_id,x_Return_Status,
1275 						 x_Msg_Count,x_Msg_Data);
1276 	   end if;
1277 	 END LOOP;
1278 
1279 	 FOR V_Get_entity_routings IN C_Get_entity_routings(P_PROCESS_RULE_Rec.Process_Rule_Id) LOOP
1280 	   if C_Get_entity_routings%found then
1281 	     V_Get_entity_routings.process_rule_id := x_PROCESS_RULE_ID;
1282 	     V_Get_entity_routings.ENTITY_ROUTING_ID := null;
1283 	     PV_ENTYROUT_PVT.Create_entyrout(p_api_version_number,p_Init_Msg_List,p_Commit,p_validation_level,
1284                                              P_Identity_Resource_Id,V_Get_entity_routings,x_entity_routing_id,x_Return_Status,
1285 					     x_Msg_Count,x_Msg_Data);
1286 	   end if;
1287 	 END LOOP;
1288 
1289        end if;
1290       END LOOP;
1291 
1292          --
1293       -- End of API body
1294       --
1295 
1296       -- Standard check for p_commit
1297       IF FND_API.to_Boolean( p_commit )
1298       THEN
1299           COMMIT WORK;
1300       END IF;
1301 
1302 
1303       -- Debug Message
1304       IF (AS_DEBUG_HIGH_ON) THEN
1305 
1306       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'end');
1307       END IF;
1308 
1309 
1310       -- Standard call to get message count and if count is 1, get message info.
1311       FND_MSG_PUB.Count_And_Get
1312       (  p_count          =>   x_msg_count,
1313          p_data           =>   x_msg_data
1314       );
1315 
1316       EXCEPTION
1317           WHEN FND_API.G_EXC_ERROR THEN
1318               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1319                    P_API_NAME => L_API_NAME
1320                   ,P_PKG_NAME => G_PKG_NAME
1321                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
1322                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1323                   ,X_MSG_COUNT => X_MSG_COUNT
1324                   ,X_MSG_DATA => X_MSG_DATA
1325                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1326 
1327           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1328               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1329                    P_API_NAME => L_API_NAME
1330                   ,P_PKG_NAME => G_PKG_NAME
1331                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1332                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1333                   ,X_MSG_COUNT => X_MSG_COUNT
1334                   ,X_MSG_DATA => X_MSG_DATA
1335                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1336 
1337           WHEN OTHERS THEN
1338               AS_UTILITY_PVT.HANDLE_EXCEPTIONS(
1339                    P_API_NAME => L_API_NAME
1340                   ,P_PKG_NAME => G_PKG_NAME
1341                   ,P_EXCEPTION_LEVEL => AS_UTILITY_PVT.G_EXC_OTHERS
1342                   ,P_SQLCODE => SQLCODE
1343                   ,P_SQLERRM => SQLERRM
1344                   ,P_PACKAGE_TYPE => AS_UTILITY_PVT.G_PVT
1345                   ,X_MSG_COUNT => X_MSG_COUNT
1346                   ,X_MSG_DATA => X_MSG_DATA
1347                   ,X_RETURN_STATUS => X_RETURN_STATUS);
1348 End Copy_process_rule;
1349 
1350 -- Item-level validation procedures
1351 PROCEDURE Validate_PROCESS_RULE_ID (
1352     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1353     P_Validation_mode            IN   VARCHAR2,
1354     P_PROCESS_RULE_ID            IN   NUMBER,
1355     X_Return_Status              OUT NOCOPY  VARCHAR2,
1356     X_Msg_Count                  OUT NOCOPY  NUMBER,
1357     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1358     )
1359 IS
1360   CURSOR C_Process_Rule_Id_Exists (c_process_rule_id NUMBER) IS
1361       SELECT 'X'
1362       FROM  pv_process_rules_b
1363       WHERE process_rule_id = c_process_rule_id;
1364 
1365   l_val   VARCHAR2(1);
1366 
1367 BEGIN
1368 
1369       -- Initialize message list if p_init_msg_list is set to TRUE.
1370       IF FND_API.to_Boolean( p_init_msg_list )
1371       THEN
1372           FND_MSG_PUB.initialize;
1373       END IF;
1374 
1375 
1376       -- Initialize API return status to SUCCESS
1377       x_return_status := FND_API.G_RET_STS_SUCCESS;
1378 
1379       IF(p_validation_mode = AS_UTILITY_PVT.G_CREATE)
1380       THEN
1381           IF (p_process_rule_id IS NOT NULL) AND
1382              (p_process_rule_id <> FND_API.G_MISS_NUM)
1383           THEN
1384               OPEN  C_Process_Rule_Id_Exists (p_process_rule_id);
1385               FETCH C_Process_Rule_Id_Exists into l_val;
1386 
1387               IF C_Process_Rule_Id_Exists%NOTFOUND
1388               THEN
1389                   AS_UTILITY_PVT.Set_Message(
1390                       p_msg_level => FND_MSG_PUB.G_MSG_LVL_ERROR,
1391                       p_msg_name => 'API_INVALID_ID',
1392                       p_token1 => 'COLUMN',
1393                       p_token1_value => 'PROCESS_RULE_ID',
1394                       p_token2 => 'VALUE',
1395                       p_token2_value => p_process_rule_id);
1396 
1397                   x_return_status := FND_API.G_RET_STS_ERROR;
1398               END IF;
1399               CLOSE C_Process_Rule_Id_Exists ;
1400           END IF;
1401 
1402       ELSIF(p_validation_mode = AS_UTILITY_PVT.G_UPDATE)
1403       THEN
1404           -- validate NOT NULL column
1405           IF (p_process_rule_id IS NULL) OR
1406              (p_process_rule_id = FND_API.G_MISS_NUM)
1407           THEN
1408               AS_UTILITY_PVT.Set_Message(
1409                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1410                   p_msg_name      => 'API_MISSING_ID',
1411                   p_token1        => 'COLUMN',
1412                   p_token1_value  => 'PROCESS_RULE_ID');
1413 
1414               x_return_status := FND_API.G_RET_STS_ERROR;
1415           ELSE
1416               OPEN  C_Process_Rule_Id_Exists (p_process_rule_id);
1417               FETCH C_Process_Rule_Id_Exists into l_val;
1418 
1419               IF C_Process_Rule_Id_Exists%NOTFOUND
1420               THEN
1421                   AS_UTILITY_PVT.Set_Message(
1422                       p_msg_level => FND_MSG_PUB.G_MSG_LVL_ERROR,
1423                       p_msg_name => 'API_INVALID_ID',
1424                       p_token1 => 'COLUMN',
1425                       p_token1_value => 'PROCESS_RULE_ID',
1426                       p_token2 => 'VALUE',
1427                       p_token2_value => p_process_rule_id);
1428 
1429                   x_return_status := FND_API.G_RET_STS_ERROR;
1430               END IF;
1431 
1432               CLOSE C_Process_Rule_Id_Exists;
1433           END IF;
1434       END IF;
1435 
1436       -- Standard call to get message count and if count is 1, get message info.
1437       FND_MSG_PUB.Count_And_Get
1438       (  p_count          =>   x_msg_count,
1439          p_data           =>   x_msg_data
1440       );
1441 
1442 END Validate_PROCESS_RULE_ID;
1443 
1444 
1445 PROCEDURE Validate_OWNER_RESOURCE_ID (
1446     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1447     P_Validation_mode            IN   VARCHAR2,
1448     P_OWNER_RESOURCE_ID          IN   NUMBER,
1449     X_Return_Status              OUT NOCOPY  VARCHAR2,
1450     X_Msg_Count                  OUT NOCOPY  NUMBER,
1451     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1452     )
1453 IS
1454     Cursor C_Check_Resource_Id (C_Resource_Id NUMBER) IS
1455       SELECT 'X'
1456       FROM   jtf_rs_resource_extns res
1457       WHERE  res.resource_id = c_resource_id;
1458 
1459     l_val VARCHAR2(1);
1460 BEGIN
1461 
1462       -- Initialize message list if p_init_msg_list is set to TRUE.
1463       IF FND_API.to_Boolean( p_init_msg_list )
1464       THEN
1465           FND_MSG_PUB.initialize;
1466       END IF;
1467 
1468 
1469       -- Initialize API return status to SUCCESS
1470       x_return_status := FND_API.G_RET_STS_SUCCESS;
1471 
1472       -- Validate RESOURCE_ID
1473       IF (p_owner_resource_id IS NOT NULL
1474           AND p_owner_resource_id <> FND_API.G_MISS_NUM)
1475       THEN
1476           OPEN C_Check_Resource_Id (p_owner_resource_id);
1477           FETCH C_Check_Resource_Id INTO l_val;
1478           IF (C_Check_Resource_Id%NOTFOUND)
1479           THEN
1480               AS_UTILITY_PVT.Set_Message(
1481                   p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1482                   p_msg_name      => 'API_INVALID_ID',
1483                   p_token1        => 'COLUMN',
1484                   p_token1_value  => 'OWNER_RESOURCE_ID',
1485                   p_token2        => 'VALUE',
1486                   p_token2_value  =>  p_OWNER_RESOURCE_ID );
1487 
1488               x_return_status := FND_API.G_RET_STS_ERROR;
1489           END IF;
1490           CLOSE C_Check_Resource_Id;
1491       END IF;
1492 
1493       -- Standard call to get message count and if count is 1, get message info.
1494       FND_MSG_PUB.Count_And_Get
1495       (  p_count          =>   x_msg_count,
1496          p_data           =>   x_msg_data
1497       );
1498 
1499 END Validate_OWNER_RESOURCE_ID;
1500 
1501 
1502 PROCEDURE Validate_CURRENCY_CODE (
1503     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1504     P_Validation_mode            IN   VARCHAR2,
1505     P_CURRENCY_CODE              IN   VARCHAR2,
1506     X_Return_Status              OUT NOCOPY  VARCHAR2,
1507     X_Msg_Count                  OUT NOCOPY  NUMBER,
1508     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1509     )
1510 IS
1511     CURSOR C_Currency_Exists (C_Currency_Code VARCHAR2) IS
1512       SELECT  'X'
1513       FROM  fnd_currencies
1514       WHERE currency_code = C_Currency_Code
1515             and nvl(start_date_active, sysdate) <= sysdate
1516             and nvl(end_date_active, sysdate) >= sysdate
1517             and enabled_flag = 'Y';
1518 
1519     l_val VARCHAR2(1);
1520 BEGIN
1521 
1522       -- Initialize message list if p_init_msg_list is set to TRUE.
1523       IF FND_API.to_Boolean( p_init_msg_list )
1524       THEN
1525           FND_MSG_PUB.initialize;
1526       END IF;
1527 
1528       -- Initialize API return status to SUCCESS
1529       x_return_status := FND_API.G_RET_STS_SUCCESS;
1530 
1531       -- Validate Currency Code
1532       IF (p_currency_code is NOT NULL
1533           AND p_currency_code <> FND_API.G_MISS_CHAR)
1534       THEN
1535          OPEN C_Currency_Exists ( p_currency_code );
1536          FETCH C_Currency_Exists into l_val;
1537          IF C_Currency_Exists%NOTFOUND THEN
1538             AS_UTILITY_PVT.Set_Message(
1539                 p_msg_level     => FND_MSG_PUB.G_MSG_LVL_ERROR,
1540                 p_msg_name      => 'API_INVALID_ID',
1541                 p_token1        => 'COLUMN',
1542                 p_token1_value  => 'CURRENCY',
1543                 p_token2        => 'VALUE',
1544                 p_token2_value  =>  p_CURRENCY_CODE );
1545 
1546             x_return_status := FND_API.G_RET_STS_ERROR;
1547          END IF;
1548          CLOSE C_Currency_Exists;
1549       END IF;
1550 
1551       -- Standard call to get message count and if count is 1, get message info.
1552       FND_MSG_PUB.Count_And_Get
1553       (  p_count          =>   x_msg_count,
1554          p_data           =>   x_msg_data
1555       );
1556 
1557 END Validate_CURRENCY_CODE;
1558 
1559 PROCEDURE Validate_RANK (
1560     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1561     P_Validation_mode            IN   VARCHAR2,
1562     P_Parent_Rule_ID             IN   NUMBER,
1563     P_Child_Rule_ID              IN   NUMBER,
1564     P_RANK                       IN   NUMBER,
1565     X_Return_Status              OUT NOCOPY  VARCHAR2,
1566     X_Msg_Count                  OUT NOCOPY  NUMBER,
1567     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1568     )
1569 IS
1570    -- pklin
1571    cursor lc_chk_criterion_dups (pc_parent_rule_id number,
1572                                  pc_child_rule_id  number,
1573                                  pc_rank           number) is
1574       SELECT child.rank
1575       FROM   pv_process_rules_vl parent,
1576              pv_process_rules_vl child
1577       WHERE  parent.process_rule_id = pc_parent_rule_id AND
1578              parent.process_rule_id = child.parent_rule_id AND
1579              child.process_rule_id <> NVL(pc_child_rule_id, 0) AND
1580 	     child.rank = pc_rank;
1581 
1582    l_rank NUMBER;
1583 
1584 BEGIN
1585 
1586       -- Initialize message list if p_init_msg_list is set to TRUE.
1587       IF FND_API.to_Boolean( p_init_msg_list )
1588       THEN
1589           FND_MSG_PUB.initialize;
1590       END IF;
1591 
1592 
1593       -- Initialize API return status to SUCCESS
1594       x_return_status := FND_API.G_RET_STS_SUCCESS;
1595 
1596       IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE OR
1597           p_validation_mode = AS_UTILITY_PVT.G_UPDATE)
1598       THEN
1599           IF (p_rank IS NULL) OR (p_rank = FND_API.G_MISS_NUM) THEN
1600                   AS_UTILITY_PVT.Set_Message(
1601                       p_msg_level => FND_MSG_PUB.G_MSG_LVL_ERROR,
1602                       p_msg_name => 'API_MISSING_RANK',
1603                       p_token1 => 'RANK',
1604                       p_token1_value => p_rank);
1605 
1606                   x_return_status := FND_API.G_RET_STS_ERROR;
1607 
1608 	  -- -------------------------------------------------------------------------
1609           -- Check for the duplicate criteria, which are criteria with the same rank
1610 	  -- (Order of Evaluation).
1611 	  -- -------------------------------------------------------------------------
1612           ELSE
1613              OPEN lc_chk_criterion_dups(P_Parent_Rule_ID, P_Child_Rule_ID, P_Rank);
1614              Fetch lc_chk_criterion_dups into l_rank;
1615 
1616 	     IF (lc_chk_criterion_dups%FOUND) THEN
1617                 FND_MESSAGE.Set_Name('PV', 'PV_DUPLICATE_CRITERION');
1618                 FND_MSG_PUB.Add;
1619 
1620 		CLOSE lc_chk_criterion_dups;
1621                 RAISE FND_API.G_EXC_ERROR;
1622              END IF;
1623 
1624              -- Debug Message
1625              IF (AS_DEBUG_HIGH_ON) THEN
1626 
1627              AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Close Cursor');
1628              END IF;
1629              CLOSE lc_chk_criterion_dups;
1630           END IF;
1631        END IF;
1632 
1633       -- Standard call to get message count and if count is 1, get message info.
1634       FND_MSG_PUB.Count_And_Get
1635       (  p_count          =>   x_msg_count,
1636          p_data           =>   x_msg_data
1637       );
1638 
1639 END Validate_Rank;
1640 
1641 
1642 PROCEDURE Validate_enddate(
1643     P_Init_Msg_List        IN   VARCHAR2     := FND_API.G_FALSE,
1644     P_Validation_mode      IN   VARCHAR2,
1645     P_START_DATE           IN   DATE,
1646     P_END_DATE             IN   DATE,
1647     X_Return_Status        OUT NOCOPY  VARCHAR2,
1648     X_Msg_Count            OUT NOCOPY  NUMBER,
1649     X_Msg_Data             OUT NOCOPY  VARCHAR2
1650     )
1651 IS
1652 l_api_name   CONSTANT VARCHAR2(30) := 'Validate_end_date';
1653  BEGIN
1654      -- Initialize message list if p_init_msg_list is set to TRUE.
1655       IF FND_API.to_Boolean( p_init_msg_list )
1656       THEN
1657           FND_MSG_PUB.initialize;
1658       END IF;
1659 
1660       -- Initialize API return status to SUCCESS
1661       x_return_status := FND_API.G_RET_STS_SUCCESS;
1662 
1663       IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE OR
1664           p_validation_mode = AS_UTILITY_PVT.G_UPDATE)
1665       THEN
1666          IF (P_START_DATE is not null and P_END_DATE is not null)
1667 	 THEN
1668 	    IF P_END_DATE < P_START_DATE
1669 	    THEN
1670 	       FND_MESSAGE.Set_Name('PV', 'PV_END_DATE_GREATER_START_DATE');
1671                 FND_MSG_PUB.Add;
1672                 RAISE FND_API.G_EXC_ERROR;
1673             END IF;
1674 	 END IF;
1675              -- Debug Message
1676              IF (AS_DEBUG_HIGH_ON) THEN
1677              AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Close Cursor');
1678              END IF;
1679       END IF;
1680 
1681       -- Standard call to get message count and if count is 1, get message info.
1682       FND_MSG_PUB.Count_And_Get
1683       (  p_count          =>   x_msg_count,
1684          p_data           =>   x_msg_data
1685       );
1686 END Validate_enddate;
1687 
1688 PROCEDURE Validate_startdate(
1689     P_Init_Msg_List        IN   VARCHAR2     := FND_API.G_FALSE,
1690     P_Validation_mode      IN   VARCHAR2,
1691     P_Parent_Rule_ID       IN   NUMBER,
1692     P_START_DATE           IN   DATE,
1693     X_Return_Status        OUT NOCOPY  VARCHAR2,
1694     X_Msg_Count            OUT NOCOPY  NUMBER,
1695     X_Msg_Data             OUT NOCOPY  VARCHAR2
1696     )
1697 IS
1698    l_api_name   CONSTANT VARCHAR2(30) := 'Validate_start_date';
1699 
1700 BEGIN
1701      -- Initialize message list if p_init_msg_list is set to TRUE.
1702       IF FND_API.to_Boolean( p_init_msg_list )
1703       THEN
1704           FND_MSG_PUB.initialize;
1705       END IF;
1706 
1707       -- Initialize API return status to SUCCESS
1708       x_return_status := FND_API.G_RET_STS_SUCCESS;
1709 
1710       IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE OR p_validation_mode = AS_UTILITY_PVT.G_UPDATE)
1711       THEN
1712          IF (P_PARENT_RULE_ID is null or P_PARENT_RULE_ID = FND_API.G_MISS_NUM) then
1713 	   IF (P_START_DATE is null or P_START_DATE = FND_API.G_MISS_DATE) then
1714              FND_MESSAGE.Set_Name('PV', 'PV_STARTDATE_NOTNULL');
1715              FND_MSG_PUB.Add;
1716              RAISE FND_API.G_EXC_ERROR;
1717            END IF;
1718          END IF;
1719 	   IF (AS_DEBUG_HIGH_ON) THEN
1720              AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Close Cursor');
1721            END IF;
1722       END IF;
1723 -- Standard call to get message count and if count is 1, get message info.
1724       FND_MSG_PUB.Count_And_Get
1725       (  p_count          =>   x_msg_count,
1726          p_data           =>   x_msg_data
1727       );
1728 END Validate_startdate;
1729 
1730 -- ------------------------------------------------------------------------------
1731 --  Validate_status
1732 -- ------------------------------------------------------------------------------
1733 PROCEDURE Validate_status(
1734     P_Init_Msg_List        IN   VARCHAR2     := FND_API.G_FALSE,
1735     P_Validation_mode      IN   VARCHAR2,
1736     P_Parent_Rule_ID       IN   NUMBER,
1737     P_STATUS               IN   VARCHAR2,
1738     X_Return_Status        OUT NOCOPY  VARCHAR2,
1739     X_Msg_Count            OUT NOCOPY  NUMBER,
1740     X_Msg_Data             OUT NOCOPY  VARCHAR2
1741     )
1742 IS
1743    l_api_name   CONSTANT VARCHAR2(30) := 'Validate_status';
1744    l_previous_status     VARCHAR2(30);
1745    l_result              VARCHAR2(1);
1746 
1747    CURSOR lc_check_rule_reference IS
1748       SELECT 'x' result
1749       FROM   fnd_profile_options a,
1750              fnd_profile_option_values b
1751       WHERE  a.profile_option_id    = b.profile_option_id AND
1752              a.profile_option_name  = 'PV_AUTO_MATCHING_RULE' AND
1753              b.application_id       = 691 AND
1754              b.profile_option_value = TO_CHAR(p_parent_rule_id);
1755 
1756 BEGIN
1757 
1758      -- Initialize message list if p_init_msg_list is set to TRUE.
1759       IF FND_API.to_Boolean( p_init_msg_list )
1760       THEN
1761           FND_MSG_PUB.initialize;
1762       END IF;
1763 
1764       -- Initialize API return status to SUCCESS
1765       x_return_status := FND_API.G_RET_STS_SUCCESS;
1766 
1767       IF (p_validation_mode = AS_UTILITY_PVT.G_CREATE OR p_validation_mode = AS_UTILITY_PVT.G_UPDATE)
1768       THEN
1769 	 IF (P_PARENT_RULE_ID is null or P_PARENT_RULE_ID = FND_API.G_MISS_NUM) then
1770 	   IF (P_STATUS is null or P_STATUS = FND_API.G_MISS_CHAR) then
1771              FND_MESSAGE.Set_Name('PV', 'PV_STATUS_NOTNULL');
1772              FND_MSG_PUB.Add;
1773              RAISE FND_API.G_EXC_ERROR;
1774            END IF;
1775          END IF;
1776 	   IF (AS_DEBUG_HIGH_ON) THEN
1777              AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW,'Private API: - Close Cursor');
1778            END IF;
1779       END IF;
1780 
1781       -- ---------------------------------------------------------------------
1782       -- Status check for LEAD_MONITOR rules. This is checked only in the case
1783       -- of an update.
1784       -- The requirements of LEAD_MONITOR rules are such that when the status
1785       -- of the rule is 'ACTIVE', nothing on the html page is updatable.
1786       -- ---------------------------------------------------------------------
1787       IF (G_PROCESS_TYPE = 'LEAD_MONITOR' AND G_ACTION = 'UPDATE' AND
1788           p_status = 'ACTIVE') THEN
1789              -- --------------------------------------------------------------
1790              -- Check the database for the "before" image. We need to compare
1791              -- the before image to the after image.
1792              -- --------------------------------------------------------------
1793              FOR x IN (SELECT status_code FROM pv_process_rules_b
1794                        WHERE  process_rule_id = p_parent_rule_id)
1795              LOOP
1796                 l_previous_status := x.status_code;
1797              END LOOP;
1798 
1799              IF (l_previous_status = 'ACTIVE') THEN
1800                 FND_MESSAGE.Set_Name('PV', 'PV_MONITOR_RULE_ACTIVE');
1801                 FND_MSG_PUB.Add;
1802                 RAISE FND_API.G_EXC_ERROR;
1803              END IF;
1804 
1805       ELSIF (G_PROCESS_TYPE = 'PARTNER_MATCHING' AND G_ACTION = 'UPDATE' AND
1806              p_status <> 'ACTIVE')
1807       THEN
1808          FOR x IN lc_check_rule_reference LOOP
1809             l_result := x.result;
1810          END LOOP;
1811 
1812          IF l_result IS NOT NULL THEN
1813                 FND_MESSAGE.Set_Name('PV', 'PV_RULE_REF_BY_PROFILE_STATUS');
1814                 FND_MSG_PUB.Add;
1815                 RAISE FND_API.G_EXC_ERROR;
1816          END IF;
1817       END IF;
1818 
1819       -- Standard call to get message count and if count is 1, get message info.
1820       FND_MSG_PUB.Count_And_Get
1821       (  p_count          =>   x_msg_count,
1822          p_data           =>   x_msg_data
1823       );
1824 END Validate_status;
1825 
1826 
1827 
1828 PROCEDURE Validate_process_rule(
1829     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1830     P_Validation_level           IN   NUMBER := FND_API.G_VALID_LEVEL_FULL,
1831     P_Validation_mode            IN   VARCHAR2,
1832     P_PROCESS_RULE_Rec           IN   PV_RULE_RECTYPE_PUB.RULES_REC_TYPE,
1833     X_Return_Status              OUT NOCOPY  VARCHAR2,
1834     X_Msg_Count                  OUT NOCOPY  NUMBER,
1835     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1836     )
1837 IS
1838 l_api_name   CONSTANT VARCHAR2(30) := 'Validate_process_rule';
1839  BEGIN
1840 
1841       -- Debug Message
1842       IF (AS_DEBUG_HIGH_ON) THEN
1843 
1844       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'start');
1845       END IF;
1846 
1847 
1848       -- Initialize API return status to SUCCESS
1849       x_return_status := FND_API.G_RET_STS_SUCCESS;
1850 
1851       IF (p_validation_level >= AS_UTILITY_PUB.G_VALID_LEVEL_ITEM) THEN
1852           -- Hint: We provide validation procedure for every column. Developer should delete
1853           --       unnecessary validation procedures.
1854           Validate_PROCESS_RULE_ID(
1855               p_init_msg_list          => FND_API.G_FALSE,
1856               p_validation_mode        => p_validation_mode,
1857               p_PROCESS_RULE_ID   => P_PROCESS_RULE_Rec.PROCESS_RULE_ID,
1858               x_return_status          => x_return_status,
1859               x_msg_count              => x_msg_count,
1860               x_msg_data               => x_msg_data);
1861           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1862               raise FND_API.G_EXC_ERROR;
1863           END IF;
1864 
1865           PV_COMMON_CHECKS_PVT.Validate_OBJECT_VERSION_NUMBER(
1866               p_init_msg_list          => FND_API.G_FALSE,
1867               p_validation_mode        => p_validation_mode,
1868               p_OBJECT_VERSION_NUMBER   => P_PROCESS_RULE_Rec.OBJECT_VERSION_NUMBER,
1869               x_return_status          => x_return_status,
1870               x_msg_count              => x_msg_count,
1871               x_msg_data               => x_msg_data);
1872           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1873               raise FND_API.G_EXC_ERROR;
1874           END IF;
1875 
1876           PV_COMMON_CHECKS_PVT.Validate_Lookup(
1877               p_init_msg_list          => FND_API.G_FALSE,
1878               p_validation_mode        => p_validation_mode,
1879               p_TABLE_NAME             => 'PV_PROCESS_RULES_B',
1880               p_COLUMN_NAME            => 'PROCESS_TYPE',
1881               p_LOOKUP_TYPE            => 'PV_PROCESS_TYPE',
1882               p_LOOKUP_CODE            => P_PROCESS_RULE_Rec.PROCESS_TYPE,
1883               x_return_status          => x_return_status,
1884               x_msg_count              => x_msg_count,
1885               x_msg_data               => x_msg_data);
1886           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1887               raise FND_API.G_EXC_ERROR;
1888           END IF;
1889 
1890 		if p_PROCESS_RULE_Rec.STATUS_CODE is NOT NULL and
1891 		   p_PROCESS_RULE_Rec.STATUS_CODE <> FND_API.G_MISS_CHAR then
1892 
1893              PV_COMMON_CHECKS_PVT.Validate_Lookup(
1894                  p_init_msg_list          => FND_API.G_FALSE,
1895                  p_validation_mode        => p_validation_mode,
1896                  p_TABLE_NAME             => 'PV_PROCESS_RULES_B',
1897                  p_COLUMN_NAME            => 'STATUS_CODE',
1898                  p_LOOKUP_TYPE            => 'PV_RULE_STATUS_CODE',
1899                  p_LOOKUP_CODE            => P_PROCESS_RULE_Rec.STATUS_CODE,
1900                  x_return_status          => x_return_status,
1901                  x_msg_count              => x_msg_count,
1902                  x_msg_data               => x_msg_data);
1903              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1904                  raise FND_API.G_EXC_ERROR;
1905              END IF;
1906 
1907 		end if;
1908 
1909           Validate_OWNER_RESOURCE_ID(
1910               p_init_msg_list          => FND_API.G_FALSE,
1911               p_validation_mode        => p_validation_mode,
1912               p_OWNER_RESOURCE_ID   => P_PROCESS_RULE_Rec.OWNER_RESOURCE_ID,
1913               x_return_status          => x_return_status,
1914               x_msg_count              => x_msg_count,
1915               x_msg_data               => x_msg_data);
1916           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1917               raise FND_API.G_EXC_ERROR;
1918           END IF;
1919 
1920           Validate_CURRENCY_CODE(
1921               p_init_msg_list          => FND_API.G_FALSE,
1922               p_validation_mode        => p_validation_mode,
1923               p_CURRENCY_CODE   => P_PROCESS_RULE_Rec.CURRENCY_CODE,
1924               x_return_status          => x_return_status,
1925               x_msg_count              => x_msg_count,
1926               x_msg_data               => x_msg_data);
1927           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1928               raise FND_API.G_EXC_ERROR;
1929           END IF;
1930 
1931 /*
1932 	  Validate_RANK(
1933               p_init_msg_list          => FND_API.G_FALSE,
1934               p_validation_mode        => p_validation_mode,
1935               P_Parent_Rule_ID         => p_PROCESS_RULE_rec.PARENT_RULE_ID,
1936               P_Child_Rule_ID          => p_CHILD_RULE_ID,
1937               p_RANK    	       => P_PROCESS_RULE_Rec.RANK,
1938               x_return_status          => x_return_status,
1939               x_msg_count              => x_msg_count,
1940               x_msg_data               => x_msg_data);
1941 
1942           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1943               raise FND_API.G_EXC_ERROR;
1944           END IF;
1945 */
1946       END IF;
1947 
1948       -- Debug Message
1949       IF (AS_DEBUG_HIGH_ON) THEN
1950 
1951       AS_UTILITY_PVT.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'Private API: ' || l_api_name || 'end');
1952       END IF;
1953 
1954 END Validate_process_rule;
1955 
1956 End PV_PROCESS_RULE_PVT;