DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_RM_OPERATION_PUB

Source


1 PACKAGE BODY AHL_RM_OPERATION_PUB AS
2 /* $Header: AHLPOPEB.pls 120.4 2008/03/13 13:48:42 amsriniv ship $ */
3 
4 
5 
6 PROCEDURE Create_Operation
7 (
8 	-- standard IN params
9 	p_api_version			IN		NUMBER,
10 	p_init_msg_list			IN		VARCHAR2	:=FND_API.G_FALSE,
11 	p_commit			IN		VARCHAR2	:=FND_API.G_FALSE,
12 	p_validation_level		IN		NUMBER		:=FND_API.G_VALID_LEVEL_FULL,
13 	p_default			IN		VARCHAR2	:=FND_API.G_FALSE,
14 	p_module_type			IN		VARCHAR2	:=NULL,
15 	-- standard OUT params
16 	x_return_status             	OUT NOCOPY  	VARCHAR2,
17 	x_msg_count                	OUT NOCOPY  	NUMBER,
18 	x_msg_data                  	OUT NOCOPY  	VARCHAR2,
19 	-- procedure params
20 	p_x_oper_rec        		IN OUT NOCOPY 	AHL_RM_OPERATION_PVT.operation_rec_type,
21 	p_x_oper_doc_tbl  		IN OUT NOCOPY  	AHL_RM_ASSO_DOCASO_PVT.doc_association_tbl,
22 	p_x_oper_resource_tbl		IN OUT NOCOPY 	AHL_RM_RT_OPER_RESOURCE_PVT.rt_oper_resource_tbl_type,
23 	p_x_oper_material_tbl 		IN OUT NOCOPY 	AHL_RM_MATERIAL_AS_PVT.material_req_tbl_type,
24 	p_x_oper_panel_tbl		IN OUT NOCOPY	AHL_RM_RT_OPER_PANEL_PVT.rt_oper_panel_tbl_type
25 )
26 IS
27 l_api_name       CONSTANT   VARCHAR2(30)   := 'CREATE_OPERATION';
28 l_api_version    CONSTANT   NUMBER         := 2.0;
29 l_debug_module   CONSTANT   VARCHAR2(60)  := 'ahl.plsql.'||g_pkg_name||'.'||l_api_name;
30 l_x_rt_oper_cost_rec AHL_RM_RT_OPER_RESOURCE_PVT.rt_oper_cost_rec_type;
31 
32 BEGIN
33 
34   -- Initialize API return status to success
35   x_return_status := FND_API.G_RET_STS_SUCCESS;
36 
37   -- Standard Start of API savepoint
38   SAVEPOINT create_operation_pub;
39 
40   -- Standard call to check for call compatibility.
41   IF NOT FND_API.compatible_api_call
42   (
43     l_api_version,
44     p_api_version,
45     l_api_name,
46     G_PKG_NAME
47   )
48   THEN
49     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
50   END IF;
51 
52   -- Initialize message list if p_init_msg_list is set to TRUE.
53   IF FND_API.to_boolean( p_init_msg_list ) THEN
54     FND_MSG_PUB.initialize;
55   END IF;
56 
57   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
58 	fnd_log.string
59 	(
60 		fnd_log.level_procedure,
61 		l_debug_module ||'.begin',
62 		'At the start of PLSQL procedure'
63 	);
64   END IF;
65 
66   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
67 
68          fnd_log.string
69          (
70 	     fnd_log.level_statement,
71              l_debug_module ,
72 	     'Before calling the private API AHL_RM_OPERATION_PVT.process_operation.....'
73          );
74 
75   END IF;
76 
77   -- PRITHWI: discuss with Shailaja whether to default to 'C' or to throw error if there is no Defaul
78   IF p_x_oper_rec.DML_OPERATION = 'C'
79   THEN
80 
81   	AHL_RM_OPERATION_PVT.process_operation
82   	(
83   	 p_api_version		=>	1.0,
84   	 p_init_msg_list	=>	FND_API.G_FALSE,
85   	 p_commit		=>	FND_API.G_FALSE,
86   	 p_validation_level	=>	FND_API.G_VALID_LEVEL_FULL,
87   	 p_default		=>	p_default,
88   	 p_module_type		=>	p_module_type,
89   	 x_return_status	=>	x_return_status,
90   	 x_msg_count		=>	x_msg_count,
91   	 x_msg_data		=>	x_msg_data,
92   	 p_x_operation_rec	=>	p_x_oper_rec
93 	);
94 
95 	  -- to raise errors from AHL_RM_OPERATION_PVT.process_operation
96 	  x_msg_count := FND_MSG_PUB.count_msg;
97 
98 	  IF x_msg_count > 0 THEN
99 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
100 	    RAISE FND_API.G_EXC_ERROR;
101 	  END IF;
102           -- if the OPERATION ID returned is null then throw error
103           IF p_x_oper_rec.OPERATION_ID IS NULL THEN
104           -- if not id has been created then throw unexpected error
105               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
106 
107   END IF;
108 
109    ElSE
110           -- If the DML operation is not Cretae then its invalid
111           FND_MESSAGE.SET_NAME('AHL','AHL_COM_INVALID_DML_FLAG');
112           FND_MSG_PUB.ADD;
113           IF (fnd_log.level_error >= fnd_log.g_current_runtime_level) THEN
114 		    fnd_log.string
115 		    (
116 			    fnd_log.level_error,
117        			    l_debug_module ,
118 			    'Invalid DML Operation is specified....DML Operation should be create'
119 		    );
120           END IF;
121           RAISE FND_API.G_EXC_ERROR;
122   END IF;
123 
124 
125   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
126 
127          fnd_log.string
128          (
129 	     fnd_log.level_statement,
130             l_debug_module ,
131 	     'Operation Id of the Operation created  .....' || p_x_oper_rec.OPERATION_ID
132          );
133 
134   END IF;
135 
136 
137 
138   -- populate the record attributes that are necessary for the API
139 
140   -- Attach documents
141   IF p_x_oper_doc_tbl.count > 0 THEN
142 
143          FOR i in p_x_oper_doc_tbl.FIRST .. p_x_oper_doc_tbl.LAST
144          LOOP
145 		 p_x_oper_doc_tbl(i).OBJECT_TYPE_CODE  := 'OPERATION';
146 		 p_x_oper_doc_tbl(i).OBJECT_ID := p_x_oper_rec.OPERATION_ID;
147 		 p_x_oper_doc_tbl(i).DML_OPERATION := 'C';
148 
149          END LOOP;
150 
151 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
152 
153 	         fnd_log.string
154 	         (
155 		     fnd_log.level_statement,
156 	            l_debug_module,
157 		     'Before calling the private API AHL_RM_ASSO_DOCASO_PVT.PROCESS_ASSOCIATION.....'
158 	         );
159 
160 	  END IF;
161 
162 	  AHL_RM_ASSO_DOCASO_PVT.PROCESS_ASSOCIATION
163 	  (
164 
165 	  	 p_api_version		=>	1.0,
166 	  	 p_init_msg_list	=>	FND_API.G_FALSE,
167 	  	 p_commit		=>	FND_API.G_FALSE,
168 	  	 p_validation_level	=>	FND_API.G_VALID_LEVEL_FULL,
169 	  	 p_default		=>	p_default,
170 	  	 p_module_type		=>	p_module_type,
171 	  	 x_return_status	=>	x_return_status,
172 	  	 x_msg_count		=>	x_msg_count,
173 	  	 x_msg_data		=>	x_msg_data,
174 	 	 p_x_association_tbl     =>     p_x_oper_doc_tbl
175 	  );
176 
177 	  -- to raise errors from AHL_RM_ASSO_DOCASO_PVT.PROCESS_ASSOCIATION
178 	  x_msg_count := FND_MSG_PUB.count_msg;
179 
180 	  IF x_msg_count > 0 THEN
181 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
182 	    RAISE FND_API.G_EXC_ERROR;
183 	  END IF;
184 
185   END IF;
186 
187   -- Attach Resources
188   IF p_x_oper_resource_tbl.count > 0 THEN
189 
190          FOR i in p_x_oper_resource_tbl.FIRST .. p_x_oper_resource_tbl.LAST
191          LOOP
192 
193 		 p_x_oper_resource_tbl(i).DML_OPERATION := 'C';
194 
195          END LOOP;
196 
197 	 AHL_RM_RT_OPER_RESOURCE_PVT.process_rt_oper_resource
198 	 (
199 			 p_api_version		   =>	1.0,
200 			 p_init_msg_list	   =>	FND_API.G_FALSE,
201 			 p_commit		   =>	FND_API.G_FALSE,
202 			 p_validation_level	   =>	FND_API.G_VALID_LEVEL_FULL,
203 			 p_default		   =>	p_default,
204 			 p_module_type		   =>	p_module_type,
205 			 x_return_status	   =>	x_return_status,
206 			 x_msg_count		   =>	x_msg_count,
207 			 x_msg_data		   =>	x_msg_data,
208 			 p_x_rt_oper_resource_tbl  =>   p_x_oper_resource_tbl,
209 			 p_association_type_code   =>   'OPERATION',
210 			 p_object_id               =>   p_x_oper_rec.OPERATION_ID
211 	 );
212 
213 	  -- to raise errors from AHL_RM_RT_OPER_RESOURCE_PVT.process_rt_oper_resource
214 	  x_msg_count := FND_MSG_PUB.count_msg;
215 
216 	  IF x_msg_count > 0 THEN
217 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
218 	    RAISE FND_API.G_EXC_ERROR;
219 	  END IF;
220 
221 	  -- populate the cost rec from the resource rec and call the cost api to add costing info
222 	  -- per resource rec
223 	  FOR i IN 1..p_x_oper_resource_tbl.count LOOP
224 
225 		  l_x_rt_oper_cost_rec.RT_OPER_RESOURCE_ID := p_x_oper_resource_tbl(i).RT_OPER_RESOURCE_ID ;
226 		  l_x_rt_oper_cost_rec.OBJECT_VERSION_NUMBER := p_x_oper_resource_tbl(i).OBJECT_VERSION_NUMBER;
227 		  l_x_rt_oper_cost_rec.ACTIVITY_ID := p_x_oper_resource_tbl(i).ACTIVITY_ID;
228 		  l_x_rt_oper_cost_rec.ACTIVITY  := p_x_oper_resource_tbl(i).ACTIVITY;
229 		  l_x_rt_oper_cost_rec.COST_BASIS_ID := p_x_oper_resource_tbl(i).COST_BASIS_ID;
230 		  l_x_rt_oper_cost_rec.COST_BASIS := p_x_oper_resource_tbl(i).COST_BASIS;
231 		  l_x_rt_oper_cost_rec.SCHEDULED_TYPE_ID := p_x_oper_resource_tbl(i).SCHEDULED_TYPE_ID;
232 		  l_x_rt_oper_cost_rec.SCHEDULED_TYPE := p_x_oper_resource_tbl(i).SCHEDULED_TYPE;
233 		  l_x_rt_oper_cost_rec.AUTOCHARGE_TYPE_ID := p_x_oper_resource_tbl(i).AUTOCHARGE_TYPE_ID;
234 		  l_x_rt_oper_cost_rec.AUTOCHARGE_TYPE := p_x_oper_resource_tbl(i).AUTOCHARGE_TYPE;
235 		  l_x_rt_oper_cost_rec.STANDARD_RATE_FLAG := p_x_oper_resource_tbl(i).STANDARD_RATE_FLAG;
236 		  l_x_rt_oper_cost_rec.STANDARD_RATE  := p_x_oper_resource_tbl(i).STANDARD_RATE;
237 
238 		  AHL_RM_RT_OPER_RESOURCE_PVT.define_cost_parameter
239 		  (
240 		    p_api_version        => 1.0,
241 		    p_init_msg_list      => FND_API.G_FALSE,
242 		    p_commit             => FND_API.G_FALSE,
243 		    p_validation_level   => FND_API.G_VALID_LEVEL_FULL,
244 		    p_default            => FND_API.G_FALSE,
245 		    p_module_type        => NULL,
246 		    x_return_status      => x_return_status,
247 		    x_msg_count          => x_msg_count,
248 		    x_msg_data           => x_msg_data,
249 		    p_x_rt_oper_cost_rec => l_x_rt_oper_cost_rec
250 		  );
251 
252 		  x_msg_count := FND_MSG_PUB.count_msg;
253 
254 		  IF x_msg_count > 0 THEN
255 		     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
256 		     RAISE FND_API.G_EXC_ERROR;
257 	          END IF;
258 
259 	  END LOOP;
260   END IF;
261 
262 
263   --Attach Material Requirements
264   IF p_x_oper_material_tbl.count > 0 THEN
265 
266          FOR i in p_x_oper_material_tbl.FIRST .. p_x_oper_material_tbl.LAST
267          LOOP
268 
269 		 p_x_oper_material_tbl(i).DML_OPERATION := 'C';
270 
271          END LOOP;
272 
273 	 AHL_RM_MATERIAL_AS_PVT.process_material_req
274 	 (
275 			 p_api_version		   =>	1.0,
276 			 p_init_msg_list	   =>	FND_API.G_FALSE,
277 			 p_commit		   =>	FND_API.G_FALSE,
278 			 p_validation_level	   =>	FND_API.G_VALID_LEVEL_FULL,
279 			 p_default		   =>	p_default,
280 			 p_module_type		   =>	p_module_type,
281 			 x_return_status	   =>	x_return_status,
282 			 x_msg_count		   =>	x_msg_count,
283 			 x_msg_data		   =>	x_msg_data,
284 			 p_x_material_req_tbl      =>   p_x_oper_material_tbl,
285 			 p_object_id		   =>   p_x_oper_rec.OPERATION_ID,
286 			 p_association_type        =>   'OPERATION'
287 	 );
288  	  -- to raise errors from AHL_RM_MATERIAL_AS_PVT.process_material_req
289 	  x_msg_count := FND_MSG_PUB.count_msg;
290 
291 	  IF x_msg_count > 0 THEN
292 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
293 	    RAISE FND_API.G_EXC_ERROR;
294 	  END IF;
295 
296   END IF;
297 
298   --Adithya added for Access Panels ER# 6143687.
299   --Attach Access Panels
300   IF p_x_oper_panel_tbl.count > 0 THEN
301 
302          FOR i in p_x_oper_panel_tbl.FIRST .. p_x_oper_panel_tbl.LAST
303          LOOP
304          p_x_oper_panel_tbl(i).DML_OPERATION := 'C';
305          END LOOP;
306 
307 	 AHL_RM_RT_OPER_PANEL_PVT.process_rt_oper_panel
308 	 (
309 			 p_api_version		   =>	1.0,
310 			 p_init_msg_list	   =>	FND_API.G_FALSE,
311 			 p_commit		   =>	FND_API.G_FALSE,
312 			 p_validation_level	   =>	FND_API.G_VALID_LEVEL_FULL,
313 			 p_default		   =>	p_default,
314 			 p_module_type		   =>	p_module_type,
315 			 x_return_status	   =>	x_return_status,
316 			 x_msg_count		   =>	x_msg_count,
317 			 x_msg_data		   =>	x_msg_data,
318 			 p_x_rt_oper_panel_tbl     =>   p_x_oper_panel_tbl,
319 			 p_association_type_code   =>   'OPERATION',
320 			 p_object_id		   =>   p_x_oper_rec.OPERATION_ID
321 	 );
322  	  -- to raise errors from AHL_RM_RT_OPER_PANEL_PVT.process_rt_oper_panel
323 	  x_msg_count := FND_MSG_PUB.count_msg;
324 
325 	  IF x_msg_count > 0 THEN
326 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
327 	    RAISE FND_API.G_EXC_ERROR;
328 	  END IF;
329 
330   END IF;
331 
332   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
333 	fnd_log.string
334 	(
335 		fnd_log.level_procedure,
336 		l_debug_module ||'.End',
337 		'At the end of PLSQL procedure...'
338 	);
339   END IF;
340 
341   -- Check Error Message stack.
342   IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
343       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level) THEN
344        fnd_log.string
345        (
346   	    fnd_log.level_error,
347   	    l_debug_module,
348   	    'Private API raised expected error....'
349        );
350       END IF;
351       RAISE FND_API.G_EXC_ERROR;
352   ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
353       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
354        fnd_log.string
355        (
356   	    fnd_log.level_error,
357   	    l_debug_module,
358   	    'Private API raised unexpected error....'
359        );
360       END IF;
361      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
362   END IF;
363 
364   -- Standard check of p_commit
365   IF FND_API.To_Boolean(p_commit) THEN
366     COMMIT WORK;
367   END IF;
368 
369   --
370   EXCEPTION
371    WHEN FND_API.G_EXC_ERROR THEN
372      x_return_status := FND_API.G_RET_STS_ERROR;
373      Rollback to create_operation_pub;
374      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
375                                 p_data  => x_msg_data,
376                                 p_encoded => fnd_api.g_false);
377 
378 
379    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
380      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
381      Rollback to create_operation_pub;
382      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
383                                 p_data  => x_msg_data,
384                                  p_encoded => fnd_api.g_false);
385 
386    WHEN OTHERS THEN
387       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
388       Rollback to create_operation_pub;
389       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
390          fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
391                                  p_procedure_name => 'CREATE_OPERATION',
392                                  p_error_text     => SQLERRM);
393       END IF;
394       FND_MSG_PUB.count_and_get( p_count => x_msg_count,
395                                  p_data  => x_msg_data,
396                                   p_encoded => fnd_api.g_false);
397 
398 END Create_Operation;
399 
400 -- Overloaded procedure retained for backaward compatibility (pre 12.0.4).
401 -- This procedure will call the above procedure with api_version = 2.
402 PROCEDURE Create_Operation
403 (
404 	-- standard IN params
405 	p_api_version			IN		NUMBER,
406 	p_init_msg_list			IN		VARCHAR2	:=FND_API.G_FALSE,
407 	p_commit			IN		VARCHAR2	:=FND_API.G_FALSE,
408 	p_validation_level		IN		NUMBER		:=FND_API.G_VALID_LEVEL_FULL,
409 	p_default			IN		VARCHAR2	:=FND_API.G_FALSE,
410 	p_module_type			IN		VARCHAR2	:=NULL,
411 	-- standard OUT params
412 	x_return_status             	OUT NOCOPY  	VARCHAR2,
413 	x_msg_count                	OUT NOCOPY  	NUMBER,
414 	x_msg_data                  	OUT NOCOPY  	VARCHAR2,
415 	-- procedure params
416 	p_x_oper_rec        		IN OUT NOCOPY 	AHL_RM_OPERATION_PVT.operation_rec_type,
417 	p_x_oper_doc_tbl  		IN OUT NOCOPY  	AHL_RM_ASSO_DOCASO_PVT.doc_association_tbl,
418 	p_x_oper_resource_tbl		IN OUT NOCOPY 	AHL_RM_RT_OPER_RESOURCE_PVT.rt_oper_resource_tbl_type,
419 	p_x_oper_material_tbl 		IN OUT NOCOPY 	AHL_RM_MATERIAL_AS_PVT.material_req_tbl_type
420 )
421 IS
422 
423 l_api_name       CONSTANT   VARCHAR2(30)   := 'CREATE_OPERATION';
424 l_api_version    CONSTANT   NUMBER         := 1.0;
425 
426 l_x_oper_panel_tbl AHL_RM_RT_OPER_PANEL_PVT.rt_oper_panel_tbl_type;
427 
428 BEGIN
429 
430    -- Initialize API return status to success
431    x_return_status := FND_API.G_RET_STS_SUCCESS;
432 
433    -- Standard call to check for call compatibility.
434    IF NOT FND_API.compatible_api_call
435      (
436        l_api_version,
437        p_api_version,
438        l_api_name,
439        G_PKG_NAME
440      )
441      THEN
442        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
443    END IF;
444 
445    AHL_RM_OPERATION_PUB.Create_Operation
446        (
447 	-- standard IN params
448 	p_api_version	        => 2.0,
449 	p_init_msg_list		=> p_init_msg_list,
450 	p_commit		=> p_commit,
451 	p_validation_level	=> p_validation_level,
452 	p_default		=> p_default,
453 	p_module_type		=> p_module_type,
454 	-- standard OUT params
455 	x_return_status         => x_return_status,
456 	x_msg_count             => x_msg_count,
457 	x_msg_data              => x_msg_data,
458 	-- procedure params
459 	p_x_oper_rec        	=> p_x_oper_rec,
460 	p_x_oper_doc_tbl  	=> p_x_oper_doc_tbl,
461 	p_x_oper_resource_tbl	=> p_x_oper_resource_tbl,
462 	p_x_oper_material_tbl 	=> p_x_oper_material_tbl,
463 	p_x_oper_panel_tbl	=> l_x_oper_panel_tbl);
464 
465   --
466   EXCEPTION
467    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
468      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
469      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
470                                 p_data  => x_msg_data,
471                                 p_encoded => fnd_api.g_false);
472 
473    WHEN OTHERS THEN
474       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
475       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
476          fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
477                                  p_procedure_name => 'CREATE_OPERATION',
478                                  p_error_text     => SQLERRM);
479       END IF;
480       FND_MSG_PUB.count_and_get( p_count => x_msg_count,
481                                  p_data  => x_msg_data,
482                                  p_encoded => fnd_api.g_false);
483 
484 END Create_Operation;
485 
486 
487 
488 PROCEDURE Modify_Operation
489 (
490 	-- standard IN params
491 	p_api_version			IN		NUMBER,
492 	p_init_msg_list			IN		VARCHAR2	:=FND_API.G_FALSE,
493 	p_commit			IN		VARCHAR2	:=FND_API.G_FALSE,
494 	p_validation_level		IN		NUMBER		:=FND_API.G_VALID_LEVEL_FULL,
495 	p_default			IN		VARCHAR2	:=FND_API.G_FALSE,
496 	p_module_type			IN		VARCHAR2	:=NULL,
497 	-- standard OUT params
498 	x_return_status             	OUT NOCOPY  	VARCHAR2,
499 	x_msg_count                	OUT NOCOPY  	NUMBER,
500 	x_msg_data                  	OUT NOCOPY  	VARCHAR2,
501 	-- procedure params
502 	p_oper_rec        	        IN	        AHL_RM_OPERATION_PVT.operation_rec_type,
503 	p_x_oper_doc_tbl  		IN OUT NOCOPY  	AHL_RM_ASSO_DOCASO_PVT.doc_association_tbl,
504 	p_x_oper_resource_tbl		IN OUT NOCOPY 	AHL_RM_RT_OPER_RESOURCE_PVT.rt_oper_resource_tbl_type,
505 	p_x_oper_material_tbl 		IN OUT NOCOPY 	AHL_RM_MATERIAL_AS_PVT.material_req_tbl_type,
506 	p_x_oper_panel_tbl		IN OUT NOCOPY	AHL_RM_RT_OPER_PANEL_PVT.rt_oper_panel_tbl_type
507 )
508 IS
509 l_api_name       CONSTANT   VARCHAR2(30)   := 'MODIFY_OPERATION';
510 l_api_version    CONSTANT   NUMBER         := 2.0;
511 l_debug_module  CONSTANT   VARCHAR2(60)  := 'ahl.plsql.'||g_pkg_name||'.'||l_api_name;
512 l_oper_id                   NUMBER;
513 l_oper_rec       AHL_RM_OPERATION_PVT.operation_rec_type;
514 l_x_rt_oper_cost_rec AHL_RM_RT_OPER_RESOURCE_PVT.rt_oper_cost_rec_type;
515 
516 BEGIN
517 
518   -- Initialize API return status to success
519   x_return_status := FND_API.G_RET_STS_SUCCESS;
520 
521   -- Standard Start of API savepoint
522   SAVEPOINT modify_operation_pub;
523 
524   -- Standard call to check for call compatibility.
525   IF NOT FND_API.compatible_api_call
526   (
527     l_api_version,
528     p_api_version,
529     l_api_name,
530     G_PKG_NAME
531   )
532   THEN
533     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
534   END IF;
535 
536   -- Initialize message list if p_init_msg_list is set to TRUE.
537   IF FND_API.to_boolean( p_init_msg_list ) THEN
538     FND_MSG_PUB.initialize;
539   END IF;
540 
541   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
542 	fnd_log.string
543 	(
544 		fnd_log.level_procedure,
545 		l_debug_module ||'.begin',
546 		'At the start of PLSQL procedure'
547 	);
548   END IF;
549 
550   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
551 
552          fnd_log.string
553          (
554 	     fnd_log.level_statement,
555              l_debug_module,
556 	     'Before calling the private API AHL_RM_OPERATION_PVT.process_operation.....'
557          );
558 
559   END IF;
560 
561   l_oper_id := p_oper_rec.operation_id;
562 
563   -- If Id is null derive Operation id from Operation Number and revision
564   IF l_oper_id IS NULL THEN
565 
566   	-- Function to convert Operation number, operation revision to id
567 
568   	 AHL_RM_ROUTE_UTIL.Operation_Number_To_Id
569   	  (
570   	   p_operation_number		=>	p_oper_rec.concatenated_segments,
571   	   p_operation_revision		=>	p_oper_rec.revision_number,
572   	   x_operation_id		=>	l_oper_id,
573   	   x_return_status		=>	x_return_status
574   	  );
575 
576   	  IF x_return_status = FND_API.G_RET_STS_ERROR THEN
577   	     IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
578   		 fnd_log.string
579   		 (
580   		     fnd_log.level_error,
581   		     l_debug_module,
582   		     'Error in AHL_RM_ROUTE_UTIL.Operation_Number_To_Id API'
583   		 );
584   	     END IF;
585   	     RAISE FND_API.G_EXC_ERROR;
586   	  END IF;
587   END IF;
588 
589   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
590 
591          fnd_log.string
592          (
593 	     fnd_log.level_statement,
594              l_debug_module,
595 	     'Operation Id of the Operation that is being updated  .....' || l_oper_id
596          );
597 
598   END IF;
599 
600 
601 
602   -- if DML is 'U' then the operation has to be updated
603   -- no check on OBJ VER NO as PVT already does it.
604   IF p_oper_rec.DML_OPERATION = 'U'
605   THEN
606 
607         l_oper_rec := p_oper_rec;
608 
609   	AHL_RM_OPERATION_PVT.process_operation
610   	(
611   	 p_api_version		=>	1.0,
612   	 p_init_msg_list	=>	FND_API.G_FALSE,
613   	 p_commit		=>	FND_API.G_FALSE,
614   	 p_validation_level	=>	FND_API.G_VALID_LEVEL_FULL,
615   	 p_default		=>	p_default,
616   	 p_module_type		=>	p_module_type,
617   	 x_return_status	=>	x_return_status,
618   	 x_msg_count		=>	x_msg_count,
619   	 x_msg_data		=>	x_msg_data,
620   	 p_x_operation_rec	=>	l_oper_rec
621 	);
622 	  -- to raise errors from AHL_RM_OPERATION_PVT.process_operation
623 	  x_msg_count := FND_MSG_PUB.count_msg;
624 
625 
626 	  IF x_msg_count > 0 THEN
627 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
628 	    RAISE FND_API.G_EXC_ERROR;
629 	  END IF;
630 
631    ElSIF p_oper_rec.DML_OPERATION IS NOT NULL	THEN
632           -- If the DML operation is not 'U' and is also not NULL, then throw an error
633           FND_MESSAGE.SET_NAME('AHL','AHL_COM_INVALID_DML_FLAG');
634           FND_MSG_PUB.ADD;
635           IF (fnd_log.level_error >= fnd_log.g_current_runtime_level) THEN
636 		    fnd_log.string
637 		    (
638 			    fnd_log.level_error,
639        			    l_debug_module,
640 			    'Invalid DML Operation is specified....DML Operation should be Update'
641 		    );
642           END IF;
643           RAISE FND_API.G_EXC_ERROR;
644   END IF;
645 
646 
647 
648 
649   -- populate the record attributes that are necessary for the API
650 
651 
652   -- Attach documents
653   IF p_x_oper_doc_tbl.count > 0 THEN
654 
655          FOR i in p_x_oper_doc_tbl.FIRST .. p_x_oper_doc_tbl.LAST
656          LOOP
657 
658 		 p_x_oper_doc_tbl(i).OBJECT_TYPE_CODE  := 'OPERATION';
659 		 p_x_oper_doc_tbl(i).OBJECT_ID := l_oper_id;
660 		 --p_x_oper_doc_tbl(i).DML_OPERATION := 'C'; amsriniv. Bug 6032272
661 
662          END LOOP;
663 
664 	  IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
665 
666 	         fnd_log.string
667 	         (
668 		     fnd_log.level_statement,
669 	             l_debug_module,
670 		     'Before calling the private API AHL_RM_ASSO_DOCASO_PVT.PROCESS_ASSOCIATION.....'
671 	         );
672 
673 	  END IF;
674 
675 	  AHL_RM_ASSO_DOCASO_PVT.PROCESS_ASSOCIATION
676 	  (
677 
678 	  	 p_api_version		=>	1.0,
679 	  	 p_init_msg_list	=>	FND_API.G_FALSE,
680 	  	 p_commit		=>	FND_API.G_FALSE,
681 	  	 p_validation_level	=>	FND_API.G_VALID_LEVEL_FULL,
682 	  	 p_default		=>	p_default,
683 	  	 p_module_type		=>	p_module_type,
684 	  	 x_return_status	=>	x_return_status,
685 	  	 x_msg_count		=>	x_msg_count,
686 	  	 x_msg_data		=>	x_msg_data,
687 	 	 p_x_association_tbl     =>     p_x_oper_doc_tbl
688 	  );
689 
690 	  -- to raise errors from AHL_RM_ASSO_DOCASO_PVT.PROCESS_ASSOCIATION
691 	  x_msg_count := FND_MSG_PUB.count_msg;
692 
693 	  IF x_msg_count > 0 THEN
694 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
695 	    RAISE FND_API.G_EXC_ERROR;
696 	  END IF;
697 
698   END IF;
699 
700   -- Attach Resources
701   IF p_x_oper_resource_tbl.count > 0 THEN
702 
703 	 AHL_RM_RT_OPER_RESOURCE_PVT.process_rt_oper_resource
704 	 (
705 			 p_api_version		   =>	1.0,
706 			 p_init_msg_list	   =>	FND_API.G_FALSE,
707 			 p_commit		   =>	FND_API.G_FALSE,
708 			 p_validation_level	   =>	FND_API.G_VALID_LEVEL_FULL,
709 			 p_default		   =>	p_default,
710 			 p_module_type		   =>	p_module_type,
711 			 x_return_status	   =>	x_return_status,
712 			 x_msg_count		   =>	x_msg_count,
713 			 x_msg_data		   =>	x_msg_data,
714 			 p_x_rt_oper_resource_tbl  =>   p_x_oper_resource_tbl,
715 			 p_association_type_code   =>   'OPERATION',
716 			 p_object_id               =>   l_oper_id
717 	 );
718 
719 	  -- to raise errors from AHL_RM_RT_OPER_RESOURCE_PVT.process_rt_oper_resource
720 	  x_msg_count := FND_MSG_PUB.count_msg;
721 
722 	  IF x_msg_count > 0 THEN
723 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
724 	    RAISE FND_API.G_EXC_ERROR;
725 	  END IF;
726 
727 	  -- populate the cost rec from the resource rec and call the cost api to add costing info
728 	  -- per resource rec
729 	  FOR i IN 1..p_x_oper_resource_tbl.count LOOP
730 		  --pdoki added condition to check if the DML operation is Delete for Bug# 6435925
731       IF ( p_x_oper_resource_tbl(i).dml_operation <> 'D' ) THEN
732 
733 				l_x_rt_oper_cost_rec.RT_OPER_RESOURCE_ID := p_x_oper_resource_tbl(i).RT_OPER_RESOURCE_ID ;
734 				l_x_rt_oper_cost_rec.OBJECT_VERSION_NUMBER := p_x_oper_resource_tbl(i).OBJECT_VERSION_NUMBER;
735 				l_x_rt_oper_cost_rec.ACTIVITY_ID := p_x_oper_resource_tbl(i).ACTIVITY_ID;
736 				l_x_rt_oper_cost_rec.ACTIVITY  := p_x_oper_resource_tbl(i).ACTIVITY;
737 				l_x_rt_oper_cost_rec.COST_BASIS_ID := p_x_oper_resource_tbl(i).COST_BASIS_ID;
738 				l_x_rt_oper_cost_rec.COST_BASIS := p_x_oper_resource_tbl(i).COST_BASIS;
739 				l_x_rt_oper_cost_rec.SCHEDULED_TYPE_ID := p_x_oper_resource_tbl(i).SCHEDULED_TYPE_ID;
740 				l_x_rt_oper_cost_rec.SCHEDULED_TYPE := p_x_oper_resource_tbl(i).SCHEDULED_TYPE;
741 				l_x_rt_oper_cost_rec.AUTOCHARGE_TYPE_ID := p_x_oper_resource_tbl(i).AUTOCHARGE_TYPE_ID;
742 				l_x_rt_oper_cost_rec.AUTOCHARGE_TYPE := p_x_oper_resource_tbl(i).AUTOCHARGE_TYPE;
743 				l_x_rt_oper_cost_rec.STANDARD_RATE_FLAG := p_x_oper_resource_tbl(i).STANDARD_RATE_FLAG;
744 				l_x_rt_oper_cost_rec.STANDARD_RATE  := p_x_oper_resource_tbl(i).STANDARD_RATE;
745 
746 				AHL_RM_RT_OPER_RESOURCE_PVT.define_cost_parameter
747 				(
748 					p_api_version        => 1.0,
749 					p_init_msg_list      => FND_API.G_FALSE,
750 					p_commit             => FND_API.G_FALSE,
751 					p_validation_level   => FND_API.G_VALID_LEVEL_FULL,
752 					p_default            => FND_API.G_FALSE,
753 					p_module_type        => NULL,
754 					x_return_status      => x_return_status,
755 					x_msg_count          => x_msg_count,
756 					x_msg_data           => x_msg_data,
757 					p_x_rt_oper_cost_rec => l_x_rt_oper_cost_rec
758 				);
759 
760 				IF x_msg_count > 0 THEN
761 					 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
762 					 RAISE FND_API.G_EXC_ERROR;
763 							END IF;
764 	     END IF;
765 
766 	  END LOOP;
767 
768 /*
769 
770 YPE rt_oper_resource_rec_type IS RECORD
771 (
772         RT_OPER_RESOURCE_ID              NUMBER,
773         OBJECT_VERSION_NUMBER            NUMBER,
774         LAST_UPDATE_DATE                 DATE,
775         LAST_UPDATED_BY                  NUMBER(15),
776         CREATION_DATE                    DATE,
777         CREATED_BY                       NUMBER(15),
778         LAST_UPDATE_LOGIN                NUMBER(15),
779         ASO_RESOURCE_ID                  NUMBER,
780         ASO_RESOURCE_NAME                VARCHAR2(30),
781         RESOURCE_TYPE_ID                 NUMBER,
782         RESOURCE_TYPE                    VARCHAR2(80),
783         QUANTITY                         NUMBER,
784         DURATION                         NUMBER,
785         ACTIVITY_ID                      NUMBER,
786         ACTIVITY                         VARCHAR2(10),
787         COST_BASIS_ID                    NUMBER,
788         COST_BASIS                       VARCHAR2(80),
789         SCHEDULED_TYPE_ID                NUMBER,
790         SCHEDULED_TYPE                   VARCHAR2(80),
791         AUTOCHARGE_TYPE_ID               NUMBER,
792         AUTOCHARGE_TYPE                  VARCHAR2(80),
793         STANDARD_RATE_FLAG               NUMBER,
794         STANDARD_RATE                    VARCHAR2(80),
795         ATTRIBUTE_CATEGORY               VARCHAR2(30),
796         ATTRIBUTE1                       VARCHAR2(150),
797         ATTRIBUTE2                       VARCHAR2(150),
798         ATTRIBUTE3                       VARCHAR2(150),
799         ATTRIBUTE4                       VARCHAR2(150),
800         ATTRIBUTE5                       VARCHAR2(150),
801         ATTRIBUTE6                       VARCHAR2(150),
802         ATTRIBUTE7                       VARCHAR2(150),
803         ATTRIBUTE8                       VARCHAR2(150),
804         ATTRIBUTE9                       VARCHAR2(150),
805         ATTRIBUTE10                      VARCHAR2(150),
806         ATTRIBUTE11                      VARCHAR2(150),
807         ATTRIBUTE12                      VARCHAR2(150),
808         ATTRIBUTE13                      VARCHAR2(150),
809         ATTRIBUTE14                      VARCHAR2(150),
810         ATTRIBUTE15                      VARCHAR2(150),
811         DML_OPERATION                    VARCHAR2(1)
812 );
813 PROCEDURE define_cost_parameter
814 (
815   p_api_version        IN            NUMBER     := 1.0,
816   p_init_msg_list      IN            VARCHAR2   := FND_API.G_TRUE,
817   p_commit             IN            VARCHAR2   := FND_API.G_FALSE,
818   p_validation_level   IN            NUMBER     := FND_API.G_VALID_LEVEL_FULL,
819   p_default            IN            VARCHAR2   := FND_API.G_FALSE,
820   p_module_type        IN            VARCHAR2   := NULL,
821   x_return_status      OUT NOCOPY    VARCHAR2,
822   x_msg_count          OUT NOCOPY    NUMBER,
823   x_msg_data           OUT NOCOPY    VARCHAR2,
824   p_x_rt_oper_cost_rec IN OUT NOCOPY rt_oper_cost_rec_type
825 );
826 TYPE rt_oper_cost_rec_type IS RECORD
827 (
828         RT_OPER_RESOURCE_ID              NUMBER,
829         OBJECT_VERSION_NUMBER            NUMBER,
830         ACTIVITY_ID                      NUMBER,
831         ACTIVITY                         VARCHAR2(10),
832         COST_BASIS_ID                    NUMBER,
833         COST_BASIS                       VARCHAR2(80),
834         SCHEDULED_TYPE_ID                NUMBER,
835         SCHEDULED_TYPE                   VARCHAR2(80),
836         AUTOCHARGE_TYPE_ID               NUMBER,
837         AUTOCHARGE_TYPE                  VARCHAR2(80),
838         STANDARD_RATE_FLAG               NUMBER,
839         STANDARD_RATE                    VARCHAR2(80)
840 );*/
841 
842 
843   END IF;
844 
845 
846   --Attach Material Requirements
847   IF p_x_oper_material_tbl.count > 0 THEN
848 
849 
850 	 AHL_RM_MATERIAL_AS_PVT.process_material_req
851 	 (
852 			 p_api_version		   =>	1.0,
853 			 p_init_msg_list	   =>	FND_API.G_FALSE,
854 			 p_commit		   =>	FND_API.G_FALSE,
855 			 p_validation_level	   =>	FND_API.G_VALID_LEVEL_FULL,
856 			 p_default		   =>	p_default,
857 			 p_module_type		   =>	p_module_type,
858 			 x_return_status	   =>	x_return_status,
859 			 x_msg_count		   =>	x_msg_count,
860 			 x_msg_data		   =>	x_msg_data,
861 			 p_x_material_req_tbl      =>   p_x_oper_material_tbl,
862 			 p_object_id		   =>   l_oper_id,
863 			 p_association_type        =>   'OPERATION'
864 	 );
865 
866  	  -- to raise errors from AHL_RM_MATERIAL_AS_PVT.process_material_req
867 	  x_msg_count := FND_MSG_PUB.count_msg;
868 
869 	  IF x_msg_count > 0 THEN
870 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
871 	    RAISE FND_API.G_EXC_ERROR;
872 	  END IF;
873 
874   END IF;
875 
876   --Adithya added for Access Panels ER# 6143687.
877   --Attach Access Panels
878   IF p_x_oper_panel_tbl.count > 0 THEN
879 
880 
881 	 AHL_RM_RT_OPER_PANEL_PVT.process_rt_oper_panel
882 	 (
883 			 p_api_version		   =>	1.0,
884 			 p_init_msg_list	   =>	FND_API.G_FALSE,
885 			 p_commit		   =>	FND_API.G_FALSE,
886 			 p_validation_level	   =>	FND_API.G_VALID_LEVEL_FULL,
887 			 p_default		   =>	p_default,
888 			 p_module_type		   =>	p_module_type,
889 			 x_return_status	   =>	x_return_status,
890 			 x_msg_count		   =>	x_msg_count,
891 			 x_msg_data		   =>	x_msg_data,
892 			 p_x_rt_oper_panel_tbl     =>   p_x_oper_panel_tbl,
893 			 p_association_type_code   =>   'OPERATION',
894 			 p_object_id		   =>   l_oper_id
895 	 );
896 
897  	  -- to raise errors from AHL_RM_RT_OPER_PANEL_PVT.process_rt_oper_panel
898 	  x_msg_count := FND_MSG_PUB.count_msg;
899 
900 	  IF x_msg_count > 0 THEN
901 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
902 	    RAISE FND_API.G_EXC_ERROR;
903 	  END IF;
904 
905   END IF;
906 
907   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
908 	fnd_log.string
909 	(
910 		fnd_log.level_procedure,
911 		l_debug_module ||'.End',
912 		'At the end of PLSQL procedure...'
913 	);
914   END IF;
915 
916   -- Check Error Message stack.
917   IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
918       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level) THEN
919        fnd_log.string
920        (
921   	    fnd_log.level_error,
922   	    l_debug_module,
923   	    'Private API raised expected error....'
924        );
925       END IF;
926       RAISE FND_API.G_EXC_ERROR;
927   ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
928       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
929        fnd_log.string
930        (
931   	    fnd_log.level_error,
932   	    l_debug_module,
933   	    'Private API raised unexpected error....'
934        );
935       END IF;
936      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
937   END IF;
938 
939   -- Standard check of p_commit
940   IF FND_API.To_Boolean(p_commit) THEN
941     COMMIT WORK;
942   END IF;
943 
944   --
945   EXCEPTION
946    WHEN FND_API.G_EXC_ERROR THEN
947      x_return_status := FND_API.G_RET_STS_ERROR;
948      Rollback to modify_operation_pub;
949      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
950                                 p_data  => x_msg_data,
951                                 p_encoded => fnd_api.g_false);
952 
953 
954    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
955      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
956      Rollback to modify_operation_pub;
957      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
958                                 p_data  => x_msg_data,
959                                  p_encoded => fnd_api.g_false);
960 
961    WHEN OTHERS THEN
962       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
963       Rollback to modify_operation_pub;
964       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
965          fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
966                                  p_procedure_name => 'MODIFY_OPERATION',
967                                  p_error_text     => SQLERRM);
968       END IF;
969       FND_MSG_PUB.count_and_get( p_count => x_msg_count,
970                                  p_data  => x_msg_data,
971                                   p_encoded => fnd_api.g_false);
972 
973 END Modify_Operation;
974 
975 
976 -- Overloaded procedure retained for backaward compatibility.
977 -- This procedure will call the above procedure with api_version = 2.
978 PROCEDURE Modify_Operation
979 (
980 	-- standard IN params
981 	p_api_version			IN		NUMBER,
982 	p_init_msg_list			IN		VARCHAR2	:=FND_API.G_FALSE,
983 	p_commit			IN		VARCHAR2	:=FND_API.G_FALSE,
984 	p_validation_level		IN		NUMBER		:=FND_API.G_VALID_LEVEL_FULL,
985 	p_default			IN		VARCHAR2	:=FND_API.G_FALSE,
986 	p_module_type			IN		VARCHAR2	:=NULL,
987 	-- standard OUT params
988 	x_return_status             	OUT NOCOPY  	VARCHAR2,
989 	x_msg_count                	OUT NOCOPY  	NUMBER,
990 	x_msg_data                  	OUT NOCOPY  	VARCHAR2,
991 	-- procedure params
992 	p_oper_rec        	        IN 	        AHL_RM_OPERATION_PVT.operation_rec_type,
993 	p_x_oper_doc_tbl  		IN OUT NOCOPY  	AHL_RM_ASSO_DOCASO_PVT.doc_association_tbl,
994 	p_x_oper_resource_tbl		IN OUT NOCOPY 	AHL_RM_RT_OPER_RESOURCE_PVT.rt_oper_resource_tbl_type,
995 	p_x_oper_material_tbl 		IN OUT NOCOPY 	AHL_RM_MATERIAL_AS_PVT.material_req_tbl_type
996 )
997 IS
998 
999   l_api_name       CONSTANT   VARCHAR2(30)   := 'CREATE_OPERATION';
1000   l_api_version    CONSTANT   NUMBER         := 1.0;
1001 
1002   l_x_oper_panel_tbl AHL_RM_RT_OPER_PANEL_PVT.rt_oper_panel_tbl_type;
1003 
1004 BEGIN
1005 
1006   -- Initialize API return status to success
1007   x_return_status := FND_API.G_RET_STS_SUCCESS;
1008 
1009   -- Standard call to check for call compatibility.
1010   IF NOT FND_API.compatible_api_call
1011   (
1012     l_api_version,
1013     p_api_version,
1014     l_api_name,
1015     G_PKG_NAME
1016   )
1017   THEN
1018     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1019   END IF;
1020 
1021   AHL_RM_OPERATION_PUB.Modify_Operation
1022        (
1023 	-- standard IN params
1024 	p_api_version	        => 2.0,
1025 	p_init_msg_list		=> p_init_msg_list,
1026 	p_commit		=> p_commit,
1027 	p_validation_level	=> p_validation_level,
1028 	p_default		=> p_default,
1029 	p_module_type		=> p_module_type,
1030 	-- standard OUT params
1031 	x_return_status         => x_return_status,
1032 	x_msg_count             => x_msg_count,
1033 	x_msg_data              => x_msg_data,
1034 	-- procedure params
1035 	p_oper_rec        	=> p_oper_rec,
1036 	p_x_oper_doc_tbl  	=> p_x_oper_doc_tbl,
1037 	p_x_oper_resource_tbl	=> p_x_oper_resource_tbl,
1038 	p_x_oper_material_tbl 	=> p_x_oper_material_tbl,
1039 	p_x_oper_panel_tbl	=> l_x_oper_panel_tbl
1040        );
1041 
1042   --
1043   EXCEPTION
1044    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1045      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1046      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1047                                 p_data  => x_msg_data,
1048                                  p_encoded => fnd_api.g_false);
1049 
1050    WHEN OTHERS THEN
1051       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1052       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1053          fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
1054                                  p_procedure_name => 'MODIFY_OPERATION',
1055                                  p_error_text     => SQLERRM);
1056       END IF;
1057       FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1058                                  p_data  => x_msg_data,
1059                                  p_encoded => fnd_api.g_false);
1060 
1061 END Modify_Operation;
1062 
1063 
1064 PROCEDURE Delete_Operation
1065 (
1066 	-- standard IN params
1067 	p_api_version			IN		NUMBER,
1068 	p_init_msg_list			IN		VARCHAR2	:=FND_API.G_FALSE,
1069 	p_commit			IN		VARCHAR2	:=FND_API.G_FALSE,
1070 	p_validation_level		IN		NUMBER		:=FND_API.G_VALID_LEVEL_FULL,
1071 	p_default			IN		VARCHAR2	:=FND_API.G_FALSE,
1072 	p_module_type			IN		VARCHAR2	:=NULL,
1073 	-- standard OUT params
1074 	x_return_status             	OUT NOCOPY  	VARCHAR2,
1075 	x_msg_count                	OUT NOCOPY  	NUMBER,
1076 	x_msg_data                  	OUT NOCOPY  	VARCHAR2,
1077 	-- procedure params
1078 	p_oper_id			IN		NUMBER,
1079 	p_oper_number			IN		VARCHAR2,
1080 	p_oper_revision			IN		NUMBER,
1081 	p_oper_object_version 		IN		NUMBER
1082 )
1083 IS
1084 l_api_name       CONSTANT   VARCHAR2(30)   := 'DELETE_OPERATION';
1085 l_api_version    CONSTANT   NUMBER         := 1.0;
1086 l_debug_module  CONSTANT   VARCHAR2(60)  := 'ahl.plsql.'||g_pkg_name||'.'||l_api_name;
1087 l_oper_id        NUMBER;
1088 
1089 BEGIN
1090 
1091   -- Initialize API return status to success
1092   x_return_status := FND_API.G_RET_STS_SUCCESS;
1093 
1094   -- Standard Start of API savepoint
1095   SAVEPOINT delete_operation_pub;
1096 
1097   -- Standard call to check for call compatibility.
1098   IF NOT FND_API.compatible_api_call
1099   (
1100     l_api_version,
1101     p_api_version,
1102     l_api_name,
1103     G_PKG_NAME
1104   )
1105   THEN
1106     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1107   END IF;
1108 
1109   -- Initialize message list if p_init_msg_list is set to TRUE.
1110   IF FND_API.to_boolean( p_init_msg_list ) THEN
1111     FND_MSG_PUB.initialize;
1112   END IF;
1113 
1114   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1115 	fnd_log.string
1116 	(
1117 		fnd_log.level_procedure,
1118 		l_debug_module ||'.begin',
1119 		'At the start of PLSQL procedure'
1120 	);
1121   END IF;
1122 
1123   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1124 
1125          fnd_log.string
1126          (
1127 	     fnd_log.level_statement,
1128              l_debug_module,
1129 	     'Before calling the private API AHL_RM_OPERATION_PVT.delete_operation.....'
1130          );
1131 
1132   END IF;
1133 
1134   l_oper_id := p_oper_id;
1135   -- If Id is null derive Operation id from Operation Number and revision
1136   IF l_oper_id IS NULL THEN
1137 
1138   	-- Function to convert Operation number, operation revision to id
1139   	-- PRITHWI : CODE ERROR
1140   	 AHL_RM_ROUTE_UTIL.Operation_Number_To_Id
1141   	  (
1142   	   p_operation_number		=>	p_oper_number,
1143   	   p_operation_revision		=>	p_oper_revision,
1144   	   x_operation_id		=>	l_oper_id,
1145   	   x_return_status		=>	x_return_status
1146   	  );
1147 
1148   	  IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1149   	     IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1150   		 fnd_log.string
1151   		 (
1152   		     fnd_log.level_error,
1153   		     l_debug_module,
1154   		     'Error in AHL_RM_ROUTE_UTIL.Operation_Number_To_Id API'
1155   		 );
1156   	     END IF;
1157   	     RAISE FND_API.G_EXC_ERROR;
1158   	  END IF;
1159   END IF;
1160 
1161   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1162 
1163          fnd_log.string
1164          (
1165 	     fnd_log.level_statement,
1166              l_debug_module,
1167 	     'Operation Id of the Operation that is being deleted  .....' || l_oper_id
1168          );
1169 
1170   END IF;
1171 
1172 
1173 	AHL_RM_OPERATION_PVT.delete_operation
1174 	 (
1175 	  p_api_version			=>	1.0,
1176 	  p_init_msg_list		=>	FND_API.G_FALSE,
1177 	  p_commit			=>	FND_API.G_FALSE,
1178 	  p_validation_level		=>	FND_API.G_VALID_LEVEL_FULL,
1179 	  p_default			=>	p_default,
1180 	  p_module_type			=>	p_module_type,
1181 	  x_return_status		=>	x_return_status,
1182 	  x_msg_count			=>	x_msg_count,
1183 	  x_msg_data			=>	x_msg_data,
1184 	  p_operation_id		=>	l_oper_id ,
1185 	  p_object_version_number	=>	p_oper_object_version
1186 	 );
1187 	  -- to raise errors from AHL_RM_OPERATION_PVT.process_operation
1188 	  x_msg_count := FND_MSG_PUB.count_msg;
1189 
1190 	  IF x_msg_count > 0 THEN
1191 	    X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1192 	    RAISE FND_API.G_EXC_ERROR;
1193 	  END IF;
1194 
1195   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1196 	fnd_log.string
1197 	(
1198 		fnd_log.level_procedure,
1199 		l_debug_module ||'.End',
1200 		'At the end of PLSQL procedure...'
1201 	);
1202   END IF;
1203 
1204   -- Check Error Message stack.
1205   IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1206       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level) THEN
1207        fnd_log.string
1208        (
1209   	    fnd_log.level_error,
1210   	    l_debug_module,
1211   	    'Private API raised expected error....'
1212        );
1213       END IF;
1214       RAISE FND_API.G_EXC_ERROR;
1215   ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1216       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1217        fnd_log.string
1218        (
1219   	    fnd_log.level_error,
1220   	    l_debug_module,
1221   	    'Private API raised unexpected error....'
1222        );
1223       END IF;
1224      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1225   END IF;
1226 
1227   -- Standard check of p_commit
1228   IF FND_API.To_Boolean(p_commit) THEN
1229     COMMIT WORK;
1230   END IF;
1231 
1232   --
1233   EXCEPTION
1234    WHEN FND_API.G_EXC_ERROR THEN
1235      x_return_status := FND_API.G_RET_STS_ERROR;
1236      Rollback to delete_operation_pub;
1237      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1238                                 p_data  => x_msg_data,
1239                                 p_encoded => fnd_api.g_false);
1240 
1241 
1242    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1243      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1244      Rollback to delete_operation_pub;
1245      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1246                                 p_data  => x_msg_data,
1247                                  p_encoded => fnd_api.g_false);
1248 
1249    WHEN OTHERS THEN
1250       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1251       Rollback to delete_operation_pub;
1252       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1253          fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
1254                                  p_procedure_name => 'DELETE_OPERATION',
1255                                  p_error_text     => SQLERRM);
1256       END IF;
1257       FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1258                                  p_data  => x_msg_data,
1259                                   p_encoded => fnd_api.g_false);
1260 
1261 END Delete_Operation;
1262 
1263 
1264 PROCEDURE Process_Oper_Alt_Resources
1265 (
1266 	-- standard IN params
1267 	p_api_version			IN		NUMBER,
1268 	p_init_msg_list			IN		VARCHAR2	:=FND_API.G_FALSE,
1269 	p_commit			IN		VARCHAR2	:=FND_API.G_FALSE,
1270 	p_validation_level		IN		NUMBER		:=FND_API.G_VALID_LEVEL_FULL,
1271 	p_default			IN		VARCHAR2	:=FND_API.G_FALSE,
1272 	p_module_type			IN		VARCHAR2	:=NULL,
1273 	-- standard OUT params
1274 	x_return_status             	OUT NOCOPY  	VARCHAR2,
1275 	x_msg_count                	OUT NOCOPY  	NUMBER,
1276 	x_msg_data                  	OUT NOCOPY  	VARCHAR2,
1277 	-- procedure params
1278 	p_operation_number	        IN	VARCHAR2,
1279 	p_operation_revision		IN	NUMBER,
1280         p_operation_id			IN	NUMBER,
1281         p_resource_id			IN	NUMBER,
1282         p_resource_name 		IN	VARCHAR2,
1283 	p_x_alt_resource_tbl 		IN OUT NOCOPY	AHL_RM_RT_OPER_RESOURCE_PVT.alt_resource_tbl_type
1284 )
1285 IS
1286 
1287 -- cursor to fetch the resource Id if the resource name is known
1288 CURSOR get_res_id( c_resource_name IN VARCHAR2)
1289 IS
1290 SELECT RESOURCE_ID
1291 from AHL_RESOURCES
1292 where name = c_resource_name;
1293 
1294 
1295 -- cursor to get the resource association id given the operation and the resource details
1296 CURSOR get_rt_oper_resource (c_operation_id IN NUMBER, c_resource_id IN NUMBER )
1297 IS
1298 SELECT rt_oper_resource_id
1299 from AHL_RT_OPER_RESOURCES
1300 where
1301 object_ID = c_operation_id
1302 and aso_resource_id = c_resource_id;
1303 
1304 
1305 
1306 l_api_name       CONSTANT   VARCHAR2(30)   := 'PROCESS_OPER_ALT_RESOURCES';
1307 l_api_version    CONSTANT   NUMBER         := 1.0;
1308 l_debug_module   CONSTANT   VARCHAR2(60)  := 'ahl.plsql.'||g_pkg_name||'.'||l_api_name;
1309 l_rt_oper_resource_id       NUMBER;
1310 l_resource_id               NUMBER;
1311 l_operation_id              NUMBER;
1312 
1313 BEGIN
1314 
1315   -- Initialize API return status to success
1316   x_return_status := FND_API.G_RET_STS_SUCCESS;
1317 
1318   -- Standard Start of API savepoint
1319   SAVEPOINT Process_Alt_Resources;
1320 
1321   -- Standard call to check for call compatibility.
1322   IF NOT FND_API.compatible_api_call
1323   (
1324     l_api_version,
1325     p_api_version,
1326     l_api_name,
1327     G_PKG_NAME
1328   )
1329   THEN
1330     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1331   END IF;
1332 
1333   -- Initialize message list if p_init_msg_list is set to TRUE.
1334   IF FND_API.to_boolean( p_init_msg_list ) THEN
1335     FND_MSG_PUB.initialize;
1336   END IF;
1337 
1338   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1339 	fnd_log.string
1340 	(
1341 		fnd_log.level_procedure,
1342 		l_debug_module ||'.begin',
1343 		'At the start of PLSQL procedure'
1344 	);
1345   END IF;
1346 
1347   l_operation_id := p_operation_id;
1348   -- If Id is null derive Operation id from Operation Number and revision
1349   IF l_operation_id IS NULL THEN
1350 
1351   	-- Function to convert Operation number, operation revision to id
1352   	 AHL_RM_ROUTE_UTIL.Operation_Number_To_Id
1353   	  (
1354   	   p_operation_number		=>	p_operation_number,
1355   	   p_operation_revision		=>	p_operation_revision,
1356   	   x_operation_id		=>	l_operation_id,
1357   	   x_return_status		=>	x_return_status
1358   	  );
1359   	  IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1360   	     IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1361   		 fnd_log.string
1362   		 (
1363   		     fnd_log.level_error,
1364   		     l_debug_module,
1365   		     'Error in AHL_RM_ROUTE_UTIL.Operation_Number_To_Id API'
1366   		 );
1367   	     END IF;
1368   	     RAISE FND_API.G_EXC_ERROR;
1369   	  END IF;
1370   END IF;
1371 
1372   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1373 
1374          fnd_log.string
1375          (
1376 	     fnd_log.level_statement,
1377              l_debug_module,
1378 	     'Operation Id of the Operation that is being updated  .....' || l_operation_id
1379          );
1380   END IF;
1381 
1382   -- if Id is null derive Resource Id from Resource name
1383   -- if resource Id cannot be found then throw error
1384   l_resource_id := p_resource_id;
1385   IF l_resource_id IS NULL THEN
1386 
1387 	OPEN get_res_id(p_resource_name );
1388 	FETCH get_res_id INTO l_resource_id;
1389 
1390 	IF get_res_id%NOTFOUND THEN
1391 	-- PRITHWI : please run this message and check what it displays.
1392       		FND_MESSAGE.set_name( 'AHL','AHL_RM_INVALID_ASO_RES_ID' );
1393       		FND_MESSAGE.set_token( 'RECORD', p_resource_name );
1394       		FND_MSG_PUB.add;
1395           	RAISE FND_API.G_EXC_ERROR;
1396     	END IF;
1397 
1398 	CLOSE get_res_id;
1399 
1400   END IF;
1401 
1402   -- check whether the association ID between Operation and resource exists.
1403   OPEN get_rt_oper_resource (l_operation_id , l_resource_id);
1404   FETCH get_rt_oper_resource INTO l_rt_oper_resource_id;
1405   IF get_rt_oper_resource%NOTFOUND THEN
1406 	-- PRITHWI : please run this message and check what it displays.
1407       	FND_MESSAGE.set_name( 'AHL', 'AHL_RM_INVALID_OBJECT' );
1408       	FND_MSG_PUB.add;
1409         RAISE FND_API.G_EXC_ERROR;
1410   END IF;
1411 
1412   CLOSE get_rt_oper_resource;
1413 
1414   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1415 
1416          fnd_log.string
1417          (
1418 	     fnd_log.level_statement,
1419              l_debug_module,
1420 	     'Before calling Private API AHL_RM_RT_OPER_RESOURCE_PVT.process_alternate_resource'
1421          );
1422   END IF;
1423 
1424   AHL_RM_RT_OPER_RESOURCE_PVT.process_alternate_resource
1425   (
1426     p_api_version        => 1.0 ,
1427     p_init_msg_list      => p_init_msg_list,
1428     p_commit             => p_commit,
1429     p_validation_level   => p_validation_level,
1430     p_default            => p_default,
1431     p_module_type        => p_module_type,
1432     x_return_status      => x_return_status,
1433     x_msg_count          => x_msg_count,
1434     x_msg_data           => x_msg_data,
1435     p_rt_oper_resource_id => l_rt_oper_resource_id,
1436     p_x_alt_resource_tbl  => p_x_alt_resource_tbl
1437   );
1438 
1439   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1440 
1441          fnd_log.string
1442          (
1443 	     fnd_log.level_statement,
1444              l_debug_module,
1445 	     'After calling Private API AHL_RM_RT_OPER_RESOURCE_PVT.process_alternate_resource'
1446          );
1447   END IF;
1448 
1449 
1450   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1451 	fnd_log.string
1452 	(
1453 		fnd_log.level_procedure,
1454 		l_debug_module ||'.End',
1455 		'At the end of PLSQL procedure...'
1456 	);
1457   END IF;
1458 
1459   -- Check Error Message stack.
1460   IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1461       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level) THEN
1462        fnd_log.string
1463        (
1464   	    fnd_log.level_error,
1465   	    l_debug_module,
1466   	    'Public API raised expected error....'
1467        );
1468       END IF;
1469       RAISE FND_API.G_EXC_ERROR;
1470   ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1471       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1472        fnd_log.string
1473        (
1474   	    fnd_log.level_error,
1475   	    l_debug_module,
1476   	    'Public API raised unexpected error....'
1477        );
1478       END IF;
1479      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1480   END IF;
1481 
1482   -- Standard check of p_commit
1483   IF FND_API.To_Boolean(p_commit) THEN
1484     COMMIT WORK;
1485   END IF;
1486 
1487   --
1488   EXCEPTION
1489    WHEN FND_API.G_EXC_ERROR THEN
1490      x_return_status := FND_API.G_RET_STS_ERROR;
1491      Rollback to Process_Alt_Resources;
1492      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1493                                 p_data  => x_msg_data,
1494                                 p_encoded => fnd_api.g_false);
1495 
1496 
1497    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1498      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1499      Rollback to Process_Alt_Resources;
1500      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1501                                 p_data  => x_msg_data,
1502                                  p_encoded => fnd_api.g_false);
1503 
1504    WHEN OTHERS THEN
1505       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1506       Rollback to Process_Alt_Resources;
1507       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1508          fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
1509                                  p_procedure_name => 'Process_Oper_Alt_Resources',
1510                                  p_error_text     => SQLERRM);
1511       END IF;
1512       FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1513                                  p_data  => x_msg_data,
1514                                  p_encoded => fnd_api.g_false);
1515 
1516 END Process_Oper_Alt_Resources;
1517 
1518 
1519 
1520 PROCEDURE Create_Oper_Revision
1521 (
1522 	-- standard IN params
1523 	p_api_version			IN		NUMBER,
1524 	p_init_msg_list			IN		VARCHAR2	:=FND_API.G_FALSE,
1525 	p_commit			IN		VARCHAR2	:=FND_API.G_FALSE,
1526 	p_validation_level		IN		NUMBER		:=FND_API.G_VALID_LEVEL_FULL,
1527 	p_default			IN		VARCHAR2	:=FND_API.G_FALSE,
1528 	p_module_type			IN		VARCHAR2	:=NULL,
1529 	-- standard OUT params
1530 	x_return_status             	OUT NOCOPY  	VARCHAR2,
1531 	x_msg_count                	OUT NOCOPY  	NUMBER,
1532 	x_msg_data                  	OUT NOCOPY  	VARCHAR2,
1533 	-- procedure params
1534 	p_oper_id 			IN          	NUMBER,
1535 	p_oper_number			IN		VARCHAR2,
1536 	p_oper_revision			IN		NUMBER,
1537 	p_oper_object_version		IN		NUMBER,
1538 	x_new_oper_id         		OUT NOCOPY  	NUMBER
1539 )
1540 IS
1541 
1542 l_api_name       CONSTANT   VARCHAR2(30)   := 'CREATE_OPER_REVISION';
1543 l_api_version    CONSTANT   NUMBER         := 1.0;
1544 l_debug_module   CONSTANT   VARCHAR2(60)  := 'ahl.plsql.'||g_pkg_name||'.'||l_api_name;
1545 l_operation_id		    NUMBER;
1546 
1547 BEGIN
1548 
1549   -- Initialize API return status to success
1550   x_return_status := FND_API.G_RET_STS_SUCCESS;
1551 
1552   -- Standard Start of API savepoint
1553   SAVEPOINT create_oper_revision_pub;
1554 
1555   -- Standard call to check for call compatibility.
1556   IF NOT FND_API.compatible_api_call
1557   (
1558     l_api_version,
1559     p_api_version,
1560     l_api_name,
1561     G_PKG_NAME
1562   )
1563   THEN
1564     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1565   END IF;
1566 
1567   -- Initialize message list if p_init_msg_list is set to TRUE.
1568   IF FND_API.to_boolean( p_init_msg_list ) THEN
1569     FND_MSG_PUB.initialize;
1570   END IF;
1571 
1572   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1573 	fnd_log.string
1574 	(
1575 		fnd_log.level_procedure,
1576 		l_debug_module ||'.begin',
1577 		'At the start of PLSQL procedure'
1578 	);
1579   END IF;
1580 
1581   -- If Id is null derive Operation id from Operation Number and revision
1582   l_operation_id := p_oper_id;
1583   IF ( p_oper_id IS NULL  OR
1584        p_oper_id = FND_API.G_MISS_NUM )
1585   THEN
1586 	  -- Function to convert Operation number, operation revision to id
1587 	  AHL_RM_ROUTE_UTIL.Operation_Number_To_Id
1588 	  (
1589 	   p_operation_number		=>	p_oper_number,
1590 	   p_operation_revision		=>	p_oper_revision,
1591 	   x_operation_id		=>	l_operation_id,
1592 	   x_return_status		=>	x_return_status
1593 	  );
1594 	  IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1595 	     IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1596 		 fnd_log.string
1597 		 (
1598 		     fnd_log.level_error,
1599 		     l_debug_module,
1600 		     'Error in AHL_RM_ROUTE_UTIL.Operation_Number_To_Id API'
1601 		 );
1602 	     END IF;
1603 	     RAISE FND_API.G_EXC_ERROR;
1604 	  END IF;
1605   END IF;
1606 
1607   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1608          fnd_log.string
1609          (
1610 	     fnd_log.level_statement,
1611              l_debug_module,
1612 	     'Before calling the private API.....'
1613          );
1614   END IF;
1615 
1616   -- Call the private API
1617 
1618 
1619   AHL_RM_OPERATION_PVT.create_oper_revision
1620   (
1621    p_api_version		=>	1.0,
1622    p_init_msg_list		=>	FND_API.G_FALSE,
1623    p_commit			=>	FND_API.G_FALSE,
1624    p_validation_level		=>	FND_API.G_VALID_LEVEL_FULL,
1625    p_default			=>	p_default,
1626    p_module_type		=>	p_module_type,
1627    x_return_status		=>	x_return_status,
1628    x_msg_count			=>	x_msg_count,
1629    x_msg_data			=>	x_msg_data,
1630    p_operation_id		        =>	l_operation_id,
1631    p_object_version_number	=>	p_oper_object_version,
1632    x_operation_id		=>	x_new_oper_id
1633   );
1634 
1635 
1636   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1637 	fnd_log.string
1638 	(
1639 		fnd_log.level_procedure,
1640 		l_debug_module ||'.End',
1641 		'At the end of PLSQL procedure...'
1642 	);
1643   END IF;
1644 
1645   -- Check Error Message stack.
1646   IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1647       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1648        fnd_log.string
1649        (
1650   	    fnd_log.level_error,
1651   	    l_debug_module ,
1652   	    'Private API raised expected error....'
1653        );
1654       END IF;
1655       RAISE FND_API.G_EXC_ERROR;
1656   ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1657       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1658        fnd_log.string
1659        (
1660   	    fnd_log.level_error,
1661   	    l_debug_module ,
1662   	    'Private API raised unexpected error....'
1663        );
1664       END IF;
1665      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1666   END IF;
1667 
1668   -- Standard check of p_commit
1669   IF FND_API.To_Boolean(p_commit) THEN
1670     COMMIT WORK;
1671   END IF;
1672 
1673   --
1674   EXCEPTION
1675    WHEN FND_API.G_EXC_ERROR THEN
1676      x_return_status := FND_API.G_RET_STS_ERROR;
1677      Rollback to create_oper_revision_pub;
1678      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1679                                 p_data  => x_msg_data,
1680                                 p_encoded => fnd_api.g_false);
1681 
1682 
1683    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1684      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1685      Rollback to create_oper_revision_pub;
1686      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1687                                 p_data  => x_msg_data,
1688                                  p_encoded => fnd_api.g_false);
1689 
1690    WHEN OTHERS THEN
1691       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1692       Rollback to create_oper_revision_pub;
1693       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1694          fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
1695                                  p_procedure_name => 'create_oper_revision',
1696                                  p_error_text     => SQLERRM);
1697       END IF;
1698       FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1699                                  p_data  => x_msg_data,
1700                                   p_encoded => fnd_api.g_false);
1701 
1702  END Create_Oper_Revision;
1703 
1704 
1705 PROCEDURE Initiate_Oper_Approval
1706 (
1707 	-- standard IN params
1708 	p_api_version			IN		NUMBER,
1709 	p_init_msg_list			IN		VARCHAR2	:=FND_API.G_FALSE,
1710 	p_commit			IN		VARCHAR2	:=FND_API.G_FALSE,
1711 	p_validation_level		IN		NUMBER		:=FND_API.G_VALID_LEVEL_FULL,
1712 	p_default			IN		VARCHAR2	:=FND_API.G_FALSE,
1713 	p_module_type			IN		VARCHAR2	:=NULL,
1714 	-- standard OUT params
1715 	x_return_status             	OUT NOCOPY  	VARCHAR2,
1716 	x_msg_count                	OUT NOCOPY  	NUMBER,
1717 	x_msg_data                  	OUT NOCOPY  	VARCHAR2,
1718 	-- procedure params
1719 	p_oper_id 			IN          	NUMBER,
1720 	p_oper_number			IN		VARCHAR2,
1721 	p_oper_revision			IN		NUMBER,
1722 	p_oper_object_version		IN          	NUMBER,
1723 	p_apprv_type		     	IN          	VARCHAR2	:='COMPLETE'
1724 )
1725  IS
1726  l_api_version  CONSTANT NUMBER       := 1.0;
1727  l_api_name	CONSTANT VARCHAR2(30) := 'INITIATE_OPER_APPROVAL';
1728  l_debug_module   CONSTANT   VARCHAR2(60)  := 'ahl.plsql.'||g_pkg_name||'.'||l_api_name;
1729  l_source_operation_id	 NUMBER;
1730 
1731  BEGIN
1732 
1733   -- Initialize API return status to success
1734   x_return_status := FND_API.G_RET_STS_SUCCESS;
1735 
1736   -- Standard Start of API savepoint
1737   SAVEPOINT initiate_oper_approval_pub;
1738 
1739   -- Standard call to check for call compatibility.
1740   IF NOT FND_API.compatible_api_call
1741   (
1742     l_api_version,
1743     p_api_version,
1744     l_api_name,
1745     G_PKG_NAME
1746   )
1747   THEN
1748     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1749   END IF;
1750 
1751   -- Initialize message list if p_init_msg_list is set to TRUE.
1752   IF FND_API.to_boolean( p_init_msg_list ) THEN
1753     FND_MSG_PUB.initialize;
1754   END IF;
1755 
1756   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1757 	fnd_log.string
1758 	(
1759 		fnd_log.level_procedure,
1760 		l_debug_module || '.begin',
1761 		'At the start of PLSQL procedure'
1762 	);
1763   END IF;
1764 
1765   -- If Id is null derive Operation id from Operation Number and revision
1766   l_source_operation_id := p_oper_id;
1767   IF ( p_oper_id IS NULL OR
1768        p_oper_id = FND_API.G_MISS_NUM )
1769   THEN
1770 	  -- Function to convert Operation number, operation revision to id
1771 	  AHL_RM_ROUTE_UTIL.Operation_Number_To_Id
1772 	  (
1773 	   p_operation_number		=>	p_oper_number,
1774 	   p_operation_revision		=>	p_oper_revision,
1775 	   x_operation_id		=>	l_source_operation_id,
1776 	   x_return_status		=>	x_return_status
1777 	  );
1778 	  IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1779 	     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1780 		 fnd_log.string
1781 		 (
1782 		     fnd_log.level_statement,
1783 		     l_debug_module ,
1784 		     'Error in AHL_RM_ROUTE_UTIL.Operation_Number_To_Id API'
1785 		 );
1786 	     END IF;
1787 	     RAISE FND_API.G_EXC_ERROR;
1788 	  END IF;
1789   END IF;
1790 
1791   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1792          fnd_log.string
1793          (
1794 	     fnd_log.level_statement,
1795              l_debug_module,
1796 	     'Before calling the private API.....'
1797          );
1798   END IF;
1799 
1800 
1801   -- Call the private API
1802   AHL_RM_APPROVAL_PVT.INITIATE_OPER_APPROVAL
1803    (
1804    p_api_version		=>	1.0,
1805    p_init_msg_list		=>	FND_API.G_FALSE,
1806    p_commit			=>	FND_API.G_FALSE,
1807    p_validation_level		=>	FND_API.G_VALID_LEVEL_FULL,
1808    p_default			=>	p_default,
1809    p_module_type		=>	p_module_type,
1810    x_return_status		=>	x_return_status,
1811    x_msg_count			=>	x_msg_count,
1812    x_msg_data			=>	x_msg_data,
1813    p_source_operation_id	=>	l_source_operation_id,
1814    p_object_Version_number	=>	p_oper_object_version,
1815    p_apprvl_type		=>	p_apprv_type
1816    );
1817 
1818   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1819 	fnd_log.string
1820 	(
1821 		fnd_log.level_procedure,
1822 		'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
1823 		'At the end of PLSQL procedure...'
1824 	);
1825   END IF;
1826 
1827   -- Check Error Message stack.
1828   IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1829       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1830        fnd_log.string
1831        (
1832   	    fnd_log.level_error,
1833   	    l_debug_module,
1834   	    'Private API raised expected error....'
1835        );
1836       END IF;
1837       RAISE FND_API.G_EXC_ERROR;
1838   ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1839       IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1840        fnd_log.string
1841        (
1842   	    fnd_log.level_error,
1843   	    l_debug_module,
1844   	    'Private API raised unexpected error....'
1845        );
1846       END IF;
1847      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1848   END IF;
1849 
1850   -- Standard check of p_commit
1851   IF FND_API.To_Boolean(p_commit) THEN
1852     COMMIT WORK;
1853   END IF;
1854 
1855   -- Standard call to get message count and if count is 1, get message
1856   FND_MSG_PUB.Count_And_Get
1857     ( p_count => x_msg_count,
1858       p_data  => x_msg_data,
1859       p_encoded => fnd_api.g_false);
1860 
1861   --
1862   EXCEPTION
1863    WHEN FND_API.G_EXC_ERROR THEN
1864      x_return_status := FND_API.G_RET_STS_ERROR;
1865      Rollback to initiate_oper_approval_pub;
1866      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1867                                 p_data  => x_msg_data,
1868                                 p_encoded => fnd_api.g_false);
1869 
1870 
1871    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1872      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1873      Rollback to initiate_oper_approval_pub;
1874      FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1875                                 p_data  => x_msg_data,
1876                                  p_encoded => fnd_api.g_false);
1877 
1878    WHEN OTHERS THEN
1879       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1880       Rollback to initiate_oper_approval_pub;
1881       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1882          fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
1883                                  p_procedure_name => 'INITIATE_OPER_APPROVAL',
1884                                  p_error_text     => SQLERRM);
1885       END IF;
1886       FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1887                                  p_data  => x_msg_data,
1888                                   p_encoded => fnd_api.g_false);
1889 
1890  END Initiate_Oper_Approval;
1891 
1892 END AHL_RM_OPERATION_PUB;
1893