DBA Data[Home] [Help]

PACKAGE BODY: APPS.EAM_METER_PUB

Source


1 PACKAGE BODY EAM_METER_PUB AS
2 /* $Header: EAMPMETB.pls 120.18 2006/10/26 14:22:16 vmec noship $ */
3 
4 /* for de-bugging */
5 /* g_sr_no		number ; */
6 
7 PROCEDURE print_log(info varchar2) is
8 PRAGMA  AUTONOMOUS_TRANSACTION;
9 l_dummy number;
10 BEGIN
11   FND_FILE.PUT_LINE(FND_FILE.LOG, info);
12 
13 END;
14 
15 -- Start of comments
16 --	API name 	: create_meter
17 --	Type		: Public
18 --	Function	:
19 --	Pre-reqs	: None.
20 --	Parameters	:
21 --	IN		:	p_api_version           	IN NUMBER	Required
22 --				p_init_msg_list		IN VARCHAR2 	Optional
23 --					Default = FND_API.G_FALSE
24 --				p_commit	    		IN VARCHAR2	Optional
25 --					Default = FND_API.G_FALSE
26 --				p_validation_level		IN NUMBER	Optional
27 --					Default = FND_API.G_VALID_LEVEL_FULL
28 --				parameter1
29 --				parameter2
30 
31 --	OUT		:	x_return_status		OUT	VARCHAR2(1)
32 --				x_msg_count			OUT	NUMBER
33 --				x_msg_data			OUT	VARCHAR2(2000)
34 --	Version	: Current version	1.0
35 -- End of comments
36 
37 
38 procedure create_meter
39 (
40   p_api_version            IN          Number        ,
41   p_init_msg_list          IN          VARCHAR2 := FND_API.G_FALSE,
42   p_commit                 IN          VARCHAR2 := FND_API.G_FALSE ,
43   p_validation_level       IN          NUMBER  := FND_API.G_VALID_LEVEL_FULL,
44   x_return_status          OUT nocopy  VARCHAR2,
45   x_msg_count              OUT nocopy  NUMBER,
46   x_msg_data               OUT nocopy  VARCHAR2,
47   p_meter_name             IN          VARCHAR2,
48   p_meter_uom              IN          VARCHAR2,
49   p_meter_type             IN          NUMBER default 1,
50   p_VALUE_CHANGE_DIR       IN          NUMBER DEFAULT 1,
51   p_USED_IN_SCHEDULING     IN          VARCHAR2 default 'N',
52   p_USER_DEFINED_RATE      IN          NUMBER default null,
53   p_USE_PAST_READING       IN          NUMBER default null,
54   p_DESCRIPTION            IN          VARCHAR2 default null,
55   p_FROM_EFFECTIVE_DATE    IN          DATE default null,
56   p_TO_EFFECTIVE_DATE      IN          DATE default null,
57   p_source_meter_id        IN          Number DEFAULT NULL,
58   p_factor                 IN          NUMBER DEFAULT 1,
59   p_relationship_start_date IN         DATE default null,
60   p_ATTRIBUTE_CATEGORY     IN          VARCHAR2 default null,
61   p_ATTRIBUTE1             IN          VARCHAR2 default null,
62   p_ATTRIBUTE2             IN          VARCHAR2 default null,
63   p_ATTRIBUTE3             IN          VARCHAR2 default null,
64   p_ATTRIBUTE4             IN          VARCHAR2 default null,
65   p_ATTRIBUTE5             IN          VARCHAR2 default null,
66   p_ATTRIBUTE6             IN          VARCHAR2 default null,
67   p_ATTRIBUTE7             IN          VARCHAR2 default null,
68   p_ATTRIBUTE8             IN          VARCHAR2 default null,
69   p_ATTRIBUTE9             IN          VARCHAR2 default null,
70   p_ATTRIBUTE10            IN          VARCHAR2 default null,
71   p_ATTRIBUTE11            IN          VARCHAR2 default null,
72   p_ATTRIBUTE12            IN          VARCHAR2 default null,
73   p_ATTRIBUTE13            IN          VARCHAR2 default null,
74   p_ATTRIBUTE14            IN          VARCHAR2 default null,
75   p_ATTRIBUTE15            IN          VARCHAR2 default null,
76   p_ATTRIBUTE16            IN          VARCHAR2 default null,
77   p_ATTRIBUTE17            IN          VARCHAR2 default null,
78   p_ATTRIBUTE18            IN          VARCHAR2 default null,
79   p_ATTRIBUTE19            IN          VARCHAR2 default null,
80   p_ATTRIBUTE20            IN          VARCHAR2 default null,
81   p_ATTRIBUTE21            IN          VARCHAR2 default null,
82   p_ATTRIBUTE22            IN          VARCHAR2 default null,
83   p_ATTRIBUTE23            IN          VARCHAR2 default null,
84   p_ATTRIBUTE24            IN          VARCHAR2 default null,
85   p_ATTRIBUTE25            IN          VARCHAR2 default null,
86   p_ATTRIBUTE26            IN          VARCHAR2 default null,
87   p_ATTRIBUTE27            IN          VARCHAR2 default null,
88   p_ATTRIBUTE28            IN          VARCHAR2 default null,
89   p_ATTRIBUTE29            IN          VARCHAR2 default null,
90   p_ATTRIBUTE30            IN          VARCHAR2 default null,
91   p_TMPL_FLAG              IN          VARCHAR2 default 'N',
92   p_SOURCE_TMPL_ID         IN          Number default null,
93   p_INITIAL_READING        IN          NUMBER default 0,
94   P_INITIAL_READING_DATE   IN          DATE default SYSDATE,
95   P_EAM_REQUIRED_FLAG	  IN		VARCHAR2 default 'N',
96   x_new_meter_id           OUT nocopy  Number
97 
98 )
99 is
100 
101 l_api_name			   CONSTANT  VARCHAR2(30)     :=   'create_meter';
102 l_api_version      CONSTANT  NUMBER 		:= 1.0;
103 l_meter_id                   number;
104 l_validated	                 boolean;
105 l_meter_reading_id           number;
106 l_initial_reading            number;
107 l_tmpl_flag                  varchar2(30);
108 l_meter_type                 number;
109 l_value_before_reset         Number;
110 l_INITIAL_READING_DATE       date;
111 l_commit       VARCHAR2(1);
112 l_init_msg_list     VARCHAR2(1);
113 l_validation_level          NUMBER;
114 l_counter_instance_rec	     CSI_CTR_DATASTRUCTURES_PUB.Counter_instance_rec;
115 l_counter_template_rec	     CSI_CTR_DATASTRUCTURES_PUB.Counter_template_rec;
116 l_ctr_properties_tbl         CSI_CTR_DATASTRUCTURES_PUB.Ctr_properties_tbl;
117 l_counter_relationships_tbl  CSI_CTR_DATASTRUCTURES_PUB.counter_relationships_tbl;
118 l_ctr_derived_filters_tbl    CSI_CTR_DATASTRUCTURES_PUB.ctr_derived_filters_tbl;
119 l_counter_associations_tbl   CSI_CTR_DATASTRUCTURES_PUB.counter_associations_tbl;
120 l_ctr_item_associations_tbl  CSI_CTR_DATASTRUCTURES_PUB.ctr_item_associations_tbl;
121 l_ctr_property_template_tbl  CSI_CTR_DATASTRUCTURES_PUB.ctr_property_template_tbl;
122 l_meter_reading_rec          Eam_MeterReading_PUB.Meter_Reading_Rec_Type;
123 l_ctr_property_readings_tbl  EAM_MeterReading_PUB.Ctr_Property_readings_Tbl;
124 l_object_version_number            Number;
125 
126 l_module            varchar2(200) ;
127 l_log_level CONSTANT NUMBER := fnd_log.g_current_runtime_level;
128 l_uLog CONSTANT BOOLEAN := fnd_log.level_unexpected >= l_log_level ;
129 l_pLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_procedure >= l_log_level;
130 l_sLog CONSTANT BOOLEAN := l_pLog AND fnd_log.level_statement >= l_log_level;
131 
132 begin
133 
134 	-- Standard Start of API savepoint
135   SAVEPOINT create_meter_pub;
136   if( l_ulog) then
137            l_module    := 'eam.plsql.'||g_pkg_name|| '.' || l_api_name;
138   end if;
139 
140   IF (l_plog) THEN
141 	        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
142 		'==================== Entered EAM_METER_PUB.create_meter ====================');
143   END IF;
144 
145   -- Standard call to check for call compatibility.
146   IF NOT FND_API.Compatible_API_Call ( 	l_api_version        	,
147         	    	    	    	 	p_api_version        	,
148    	       	    	 			l_api_name 	    	,
149 		    	    	    	    	G_PKG_NAME )
150 	THEN
151 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
152 	END IF;
153 
154 	l_commit := p_commit;
155 	l_init_msg_list := p_init_msg_list;
156 	l_validation_level := p_validation_level;
157 
158 	IF l_commit IS NULL THEN
159 		l_commit := FND_API.G_TRUE;
160 	END IF;
161 
162         IF l_init_msg_list IS NULL THEN
163 		l_init_msg_list := FND_API.G_TRUE;
164 	END IF;
165 
166          IF l_validation_level IS NULL THEN
167 		l_validation_level := FND_API.G_VALID_LEVEL_FULL;
168 	END IF;
169 
170 	-- Initialize message list if p_init_msg_list is set to TRUE.
171 	IF FND_API.to_Boolean( l_init_msg_list ) THEN
172 		FND_MSG_PUB.initialize;
173 	END IF;
174 
175 	--  Initialize API return status to success
176     x_return_status := FND_API.G_RET_STS_SUCCESS;
177 
178 	-- API body
179 
180 	l_ctr_properties_tbl.DELETE;
181 	l_counter_relationships_tbl.DELETE;
182 	l_ctr_derived_filters_tbl.DELETE;
183 	l_counter_associations_tbl.DELETE;
184 	l_ctr_property_readings_tbl.DELETE;
185 
186 
187 	if (p_tmpl_flag is null) then
188 		l_tmpl_flag:='N';
189 	else
190 		l_tmpl_flag:=p_tmpl_flag;
191 	end if;
192 
193 	if (p_meter_type is null) then
194 		l_meter_type:=1;
195 	else
196 		l_meter_type:=p_meter_type;
197 	end if;
198 
199 	if (p_initial_reading is null) then
200 		l_initial_reading:=0;
201 	else
202 		l_initial_reading:=p_initial_reading;
203 	end if;
204 
205   IF l_tmpl_flag = 'N' THEN
206 							  l_counter_instance_rec.name := p_meter_name;
207 							  IF p_value_change_dir = 1 THEN
208 										l_counter_instance_rec.direction := 'A';
209 							  ELSIF p_value_change_dir = 2 THEN
210 										l_counter_instance_rec.direction := 'D';
211 							  ELSE l_counter_instance_rec.direction := 'B';
212 							  END IF;
213 
214 						    l_counter_instance_rec.counter_type := 'REGULAR';
215 						    l_counter_instance_rec.initial_reading := p_initial_reading;
216 						    l_counter_instance_rec.initial_reading_date := p_initial_reading_date;
217 						    l_counter_instance_rec.created_from_counter_tmpl_id := p_source_tmpl_id;
218 						    l_counter_instance_rec.uom_code := p_meter_uom;
219 						    l_counter_instance_rec.start_date_active := p_from_effective_date;
220 						    l_counter_instance_rec.end_date_active := p_to_effective_date;
221 						    l_counter_instance_rec.reading_type := p_meter_type;
222 
223 						    l_counter_instance_rec.default_usage_rate := p_user_defined_rate;
224 						    l_counter_instance_rec.use_past_reading := p_use_past_reading;
225 						    l_counter_instance_rec.used_in_scheduling := p_used_in_scheduling;
226 						    l_counter_instance_rec.description := p_description;
227 						    l_counter_instance_rec.time_based_manual_entry := 'Y';
228 						    l_counter_instance_rec.eam_required_flag := p_eam_required_flag;
229 						    l_counter_instance_rec.attribute_category := p_attribute_category;
230 							  l_counter_instance_rec.attribute1 := p_attribute1;
231 							  l_counter_instance_rec.attribute2 := p_attribute2;
232 							  l_counter_instance_rec.attribute3 := p_attribute3;
233 							  l_counter_instance_rec.attribute4 := p_attribute4;
234 							  l_counter_instance_rec.attribute5 := p_attribute5;
235 							  l_counter_instance_rec.attribute6 := p_attribute6;
236 							  l_counter_instance_rec.attribute7 := p_attribute7;
237 							  l_counter_instance_rec.attribute8 := p_attribute8;
238 							  l_counter_instance_rec.attribute9 := p_attribute9;
239 							  l_counter_instance_rec.attribute10 := p_attribute10;
240 							  l_counter_instance_rec.attribute11 := p_attribute11;
241 							  l_counter_instance_rec.attribute12 := p_attribute12;
242 							  l_counter_instance_rec.attribute13 := p_attribute13;
243 							  l_counter_instance_rec.attribute14 := p_attribute14;
244 							  l_counter_instance_rec.attribute15 := p_attribute15;
245 							  l_counter_instance_rec.attribute16 := p_attribute16;
246 							  l_counter_instance_rec.attribute17 := p_attribute17;
247 							  l_counter_instance_rec.attribute18 := p_attribute18;
248 							  l_counter_instance_rec.attribute19 := p_attribute19;
249 							  l_counter_instance_rec.attribute20 := p_attribute20;
250 							  l_counter_instance_rec.attribute21 := p_attribute21;
251 							  l_counter_instance_rec.attribute22 := p_attribute22;
252 							  l_counter_instance_rec.attribute23 := p_attribute23;
253 							  l_counter_instance_rec.attribute24 := p_attribute24;
254 							  l_counter_instance_rec.attribute25 := p_attribute25;
255 							  l_counter_instance_rec.attribute26 := p_attribute26;
256 							  l_counter_instance_rec.attribute27 := p_attribute27;
257 							  l_counter_instance_rec.attribute28 := p_attribute28;
258 							  l_counter_instance_rec.attribute29 := p_attribute29;
259 							  l_counter_instance_rec.attribute30 := p_attribute30;
260 
261 						    IF (l_plog) THEN
262 								 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
263 									'==================== Calling CSI_COUNTER_PUB.create_counter ===================='
264 									||'x_return_status:'||x_return_status
265 				||' x_msg_count:'||x_msg_count
266 				||'x_msg_data:'||x_msg_data);
267 						    END IF;
268 						    CSI_COUNTER_PUB.create_counter(p_api_version,
269 										   l_init_msg_list,
270 										   l_commit,
271 										   l_validation_level,
272 										   l_counter_instance_rec,
273 										   l_ctr_properties_tbl,
274 										   l_counter_relationships_tbl,
275 										   l_ctr_derived_filters_tbl,
276 										   l_counter_associations_tbl,
277 										   x_return_status,
278 										   x_msg_count,
279 										   x_msg_data,
280 										   x_new_meter_id);
281 
282 							IF (l_plog) THEN
283 								 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
284 									'==================== Returned from CSI_COUNTER_PUB.create_counter ===================='
285 									||'x_return_status:'||x_return_status
286 				||' x_msg_count:'||x_msg_count
287 				||'x_msg_data:'||x_msg_data);
288 						        END IF;
289 
290 			    IF p_source_meter_id IS NOT NULL THEN
291 
292                         l_counter_relationships_tbl(1).relationship_type_code := 'CONFIGURATION';
293         				l_counter_relationships_tbl(1).source_counter_id := p_source_meter_id;
294         				l_counter_relationships_tbl(1).factor := p_factor;
295         				l_counter_relationships_tbl(1).active_start_date := p_relationship_start_date;
296         				l_counter_relationships_tbl(1).active_end_date := to_date(null);
297 
298 
299                   		SELECT object_version_number
300                       		INTO l_object_version_number
301                   		FROM CSI_COUNTERS_B
302                   		WHERE counter_id = x_new_meter_id;
303 
304         			     l_counter_instance_rec.counter_id := x_new_meter_id;
305 	                     l_counter_instance_rec.object_version_number := l_object_version_number;
306 
307         				      IF (l_plog) THEN
308         								 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
309         									'==================== Calling CSI_COUNTER_PUB.update_counter ===================='
310         									||'x_return_status:'||x_return_status
311         				||' x_msg_count:'||x_msg_count
312         				||'x_msg_data:'||x_msg_data);
313         				    END IF;
314     				    CSI_COUNTER_PUB.update_counter(p_api_version,
315     								   l_init_msg_list,
316     								   l_commit,
317     								   l_validation_level,
318     								   l_counter_instance_rec,
319     								   l_ctr_properties_tbl,
320     								   l_counter_relationships_tbl,
321     								   l_ctr_derived_filters_tbl,
322     								   l_counter_associations_tbl,
323     								   x_return_status,
324     								   x_msg_count,
325     								   x_msg_data);
326 
327             			  IF (l_plog) THEN
328             							 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
329             								'==================== Returning from CSI_COUNTER_PUB.update_counter ===================='
330             								||'x_return_status:'||x_return_status
331             			||' x_msg_count:'||x_msg_count
332             			||'x_msg_data:'||x_msg_data);
333             			    END IF;
334 
335    			    END IF;
336 
337 --for template meters
338   ELSE
339 								l_counter_template_rec.name := p_meter_name;
340 							    l_counter_template_rec.counter_type := 'REGULAR';
341 							  IF p_value_change_dir = 1 THEN
342 										l_counter_template_rec.direction := 'A';
343 							  ELSIF p_value_change_dir = 2 THEN
344 										l_counter_template_rec.direction := 'D';
345 							  ELSE l_counter_template_rec.direction := 'B';
346 							  END IF;
347 							    l_counter_template_rec.initial_reading := p_initial_reading;
348 							    l_counter_template_rec.initial_reading_date := p_initial_reading_date;
349 							    l_counter_template_rec.uom_code := p_meter_uom;
350 							    l_counter_template_rec.start_date_active := p_from_effective_date;
351 							    l_counter_template_rec.end_date_active := p_to_effective_date;
352 							    l_counter_template_rec.reading_type := p_meter_type;
353 							    l_counter_template_rec.default_usage_rate := p_user_defined_rate;
354 							    l_counter_template_rec.use_past_reading := p_use_past_reading;
355 							    l_counter_template_rec.used_in_scheduling := p_used_in_scheduling;
356 							    l_counter_template_rec.description := p_description;
357 							    l_counter_template_rec.time_based_manual_entry := 'Y';
358 							    l_counter_template_rec.eam_required_flag := p_eam_required_flag;
359 							    l_counter_template_rec.attribute_category := p_attribute_category;
360 								  l_counter_template_rec.attribute1 := p_attribute1;
361 								  l_counter_template_rec.attribute2 := p_attribute2;
362 								  l_counter_template_rec.attribute3 := p_attribute3;
363 								  l_counter_template_rec.attribute4 := p_attribute4;
364 								  l_counter_template_rec.attribute5 := p_attribute5;
365 								  l_counter_template_rec.attribute6 := p_attribute6;
366 								  l_counter_template_rec.attribute7 := p_attribute7;
367 								  l_counter_template_rec.attribute8 := p_attribute8;
368 								  l_counter_template_rec.attribute9 := p_attribute9;
369 								  l_counter_template_rec.attribute10 := p_attribute10;
370 								  l_counter_template_rec.attribute11 := p_attribute11;
371 								  l_counter_template_rec.attribute12 := p_attribute12;
372 								  l_counter_template_rec.attribute13 := p_attribute13;
373 								  l_counter_template_rec.attribute14 := p_attribute14;
374 								  l_counter_template_rec.attribute15 := p_attribute15;
375 								  l_counter_template_rec.attribute16 := p_attribute16;
376 								  l_counter_template_rec.attribute17 := p_attribute17;
377 								  l_counter_template_rec.attribute18 := p_attribute18;
378 								  l_counter_template_rec.attribute19 := p_attribute19;
379 								  l_counter_template_rec.attribute20 := p_attribute20;
380 								  l_counter_template_rec.attribute21 := p_attribute21;
381 								  l_counter_template_rec.attribute22 := p_attribute22;
382 								  l_counter_template_rec.attribute23 := p_attribute23;
383 								  l_counter_template_rec.attribute24 := p_attribute24;
384 								  l_counter_template_rec.attribute25 := p_attribute25;
385 								  l_counter_template_rec.attribute26 := p_attribute26;
386 								  l_counter_template_rec.attribute27 := p_attribute27;
387 								  l_counter_template_rec.attribute28 := p_attribute28;
388 								  l_counter_template_rec.attribute29 := p_attribute29;
389 								  l_counter_template_rec.attribute30 := p_attribute30;
390 							    IF (l_plog) THEN
391 									 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
392 										'==================== Calling csi_counter_template_pub.create_counter_template ===================='
393 										||'x_return_status:'||x_return_status
394 										||' x_msg_count:'||x_msg_count
395 										||'x_msg_data:'||x_msg_data);
396 							    END IF;
397 							    csi_counter_template_pub.create_counter_template(p_api_version,
398 													 l_commit,
399 													 l_init_msg_list,
400 													 l_validation_level,
401 													 l_counter_template_rec,
402 													 l_ctr_item_associations_tbl,
403 													 l_ctr_property_template_tbl,
404 													 l_counter_relationships_tbl,
405 													 l_ctr_derived_filters_tbl,
406 													 x_return_status,
407 													 x_msg_count,
408 													 x_msg_data);
409 							    IF (l_plog) THEN
410 									 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
411 										'==================== Returning from csi_counter_template_pub.create_counter_template ===================='
412 										||'x_return_status:'||x_return_status
413 										||' x_msg_count:'||x_msg_count
414 										||'x_msg_data:'||x_msg_data);
415 							    END IF;
416   END IF;
417   --end of check for meter/meter template
418 
419 
420 	-- End of API body.
421 	-- Standard check of l_commit.
422 	IF FND_API.To_Boolean( l_commit ) THEN
423 
424 		COMMIT WORK;
425 		IF (l_plog) THEN
426 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'Commiting Work');
427 		END IF;
428 	END IF;
429 	-- Standard call to get message count and if count is 1, get message info.
430 	FND_MSG_PUB.get
431     	(  	p_msg_index_out         	=>      x_msg_count ,
432         	p_data          	=>      x_msg_data
433     	);
434 	x_msg_data := substr(x_msg_data,1,4000);
435 	IF (l_plog) THEN
436 	        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
437 		'==================== Exiting from EAM_METER_PUB.create_meter ====================');
438        END IF;
439 
440 EXCEPTION
441     WHEN FND_API.G_EXC_ERROR THEN
442 		ROLLBACK TO create_meter_pub;
443 		x_return_status := FND_API.G_RET_STS_ERROR ;
444 		IF (l_plog) THEN
445 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO create_meter_pub');
446 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
447 		        '===================EAM_METER_PUB.create_meter: EXPECTED ERROR======='||
448 			'==================== Calling FND_MSG_PUB.get ====================');
449 		END IF;
450 		FND_MSG_PUB.get
451     		(  	p_msg_index_out         	=>      x_msg_count     	,
452         			p_data          	=>      x_msg_data
453     		);
454 		IF (l_plog) THEN
455 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
456 			'==================== Returned from FND_MSG_PUB.get ====================');
457  		END IF;
458 		x_msg_data := substr(x_msg_data,1,4000);
459 	WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
460 		ROLLBACK TO create_meter_pub;
461 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
462 		IF (l_plog) THEN
463 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO create_meter_pub');
464 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
465 		        '===================EAM_METER_PUB.create_meter: UNEXPECTED ERROR======='||
466 			'==================== Calling FND_MSG_PUB.get ====================');
467 		END IF;
468 		FND_MSG_PUB.get
469     		(  	p_msg_index_out         	=>      x_msg_count     	,
470         			p_data          	=>      x_msg_data
471     		);
472 		IF (l_plog) THEN
473 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
474 			'==================== Returned from FND_MSG_PUB.get ====================');
475  		END IF;
476 		x_msg_data := substr(x_msg_data,1,4000);
477 	WHEN OTHERS THEN
478 		ROLLBACK TO create_meter_pub;
479 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
480 		IF (l_plog) THEN
481 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO create_meter_pub');
482 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
483 		        '===================EAM_METER_PUB.create_meter: OTHERS ERROR=======');
484 		END IF;
485   		IF 	FND_MSG_PUB.Check_Msg_Level
486 			(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
487 		THEN
488 		        IF (l_plog) THEN
489 				 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
490 				'==================== Calling FND_MSG_PUB.Add_Exc_Msg ====================');
491 	 		END IF;
492         		FND_MSG_PUB.Add_Exc_Msg
493     	    		(	G_PKG_NAME  	    ,
494     	    			l_api_name
495 	    		);
496 			IF (l_plog) THEN
497 				 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
498 				'==================== Returned from FND_MSG_PUB.Add_Exc_Msg ====================');
499  			END IF;
500 		END IF;
501 		IF (l_plog) THEN
502 		       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
503 			'==================== Calling FND_MSG_PUB.get ====================');
504 		END IF;
505 		FND_MSG_PUB.get
506     		(  	p_msg_index_out         	=>      x_msg_count     	,
507         			p_data          	=>      x_msg_data
508     		);
509 		IF (l_plog) THEN
510 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
511 			'==================== Returned from FND_MSG_PUB.get ====================');
512  		END IF;
513 
514 		x_msg_data := substr(x_msg_data,1,4000);
515 end create_meter;
516 
517 
518 procedure update_meter
519 (
520   p_api_version           IN            Number,
521   p_init_msg_list         IN            VARCHAR2 := FND_API.G_FALSE,
522   p_commit                IN            VARCHAR2 := FND_API.G_FALSE,
523   p_validation_level      IN            NUMBER := FND_API.G_VALID_LEVEL_FULL,
524   x_return_status         OUT nocopy    VARCHAR2,
525   x_msg_count             OUT nocopy    NUMBER,
526   x_msg_data              OUT nocopy    VARCHAR2,
527   p_meter_id              IN            number,
528   p_meter_name            IN            varchar DEFAULT NULL,
529   p_meter_uom             IN            varchar DEFAULT NULL,
530   p_METER_TYPE            IN            Number default NULL,
531   p_VALUE_CHANGE_DIR      IN            Number default NULL,
532   p_USED_IN_SCHEDULING    IN            VARCHAR2 default NULL,
533   p_USER_DEFINED_RATE     IN            NUMBER default null,
534   p_USE_PAST_READING      IN            Number default null,
535   p_DESCRIPTION           IN            VARCHAR2 default null,
536   p_FROM_EFFECTIVE_DATE   IN            DATE default null,
537   p_TO_EFFECTIVE_DATE     IN            DATE default null,
538   p_source_meter_id       IN            Number DEFAULT NULL,
539   p_factor                IN            NUMBER DEFAULT NULL,
540   p_relationship_start_date IN          DATE default null,
541   p_ATTRIBUTE_CATEGORY    IN            VARCHAR2 default null,
542   p_ATTRIBUTE1            IN            VARCHAR2 default null,
543   p_ATTRIBUTE2            IN            VARCHAR2 default null,
544   p_ATTRIBUTE3            IN            VARCHAR2 default null,
545   p_ATTRIBUTE4            IN            VARCHAR2 default null,
546   p_ATTRIBUTE5            IN            VARCHAR2 default null,
547   p_ATTRIBUTE6            IN            VARCHAR2 default null,
548   p_ATTRIBUTE7            IN            VARCHAR2 default null,
549   p_ATTRIBUTE8            IN            VARCHAR2 default null,
550   p_ATTRIBUTE9            IN            VARCHAR2 default null,
551   p_ATTRIBUTE10           IN            VARCHAR2 default null,
552   p_ATTRIBUTE11           IN            VARCHAR2 default null,
553   p_ATTRIBUTE12           IN            VARCHAR2 default null,
554   p_ATTRIBUTE13           IN            VARCHAR2 default null,
555   p_ATTRIBUTE14           IN            VARCHAR2 default null,
556   p_ATTRIBUTE15           IN            VARCHAR2 default null,
557   p_ATTRIBUTE16           IN            VARCHAR2 default null,
558   p_ATTRIBUTE17           IN            VARCHAR2 default null,
559   p_ATTRIBUTE18           IN            VARCHAR2 default null,
560   p_ATTRIBUTE19           IN            VARCHAR2 default null,
561   p_ATTRIBUTE20           IN            VARCHAR2 default null,
562   p_ATTRIBUTE21           IN            VARCHAR2 default null,
563   p_ATTRIBUTE22           IN            VARCHAR2 default null,
564   p_ATTRIBUTE23           IN            VARCHAR2 default null,
565   p_ATTRIBUTE24           IN            VARCHAR2 default null,
566   p_ATTRIBUTE25           IN            VARCHAR2 default null,
567   p_ATTRIBUTE26           IN            VARCHAR2 default null,
568   p_ATTRIBUTE27           IN            VARCHAR2 default null,
569   p_ATTRIBUTE28           IN            VARCHAR2 default null,
570   p_ATTRIBUTE29           IN            VARCHAR2 default null,
571   p_ATTRIBUTE30           IN            VARCHAR2 default null,
572   p_TMPL_FLAG             IN            VARCHAR2 default 'N',
573   p_SOURCE_TMPL_ID        IN            Number default NULL,
574   P_EAM_REQUIRED_FLAG	  IN		VARCHAR2 default 'N',
575   p_from_eam		  IN		varchar2 default null
576 )
577 is
578 
579 l_api_name			          CONSTANT VARCHAR2(30)	:= 'update_meter';
580 l_api_version           	CONSTANT NUMBER 		:= 1.0;
581 l_meter_id                         number;
582 l_meter_type                       NUMBER;
583 l_commit                               VARCHAR2(1);
584 l_init_msg_list                     VARCHAR2(1);
585 l_validation_level                 NUMBER;
586 l_counter_instance_rec	           CSI_CTR_DATASTRUCTURES_PUB.Counter_instance_rec;
587 l_counter_template_rec	           CSI_CTR_DATASTRUCTURES_PUB.Counter_template_rec;
588 l_ctr_properties_tbl               CSI_CTR_DATASTRUCTURES_PUB.Ctr_properties_tbl;
589 l_counter_relationships_tbl        CSI_CTR_DATASTRUCTURES_PUB.counter_relationships_tbl;
590 l_ctr_derived_filters_tbl          CSI_CTR_DATASTRUCTURES_PUB.ctr_derived_filters_tbl;
591 l_counter_associations_tbl         CSI_CTR_DATASTRUCTURES_PUB.counter_associations_tbl;
592 l_ctr_item_associations_tbl        CSI_CTR_DATASTRUCTURES_PUB.ctr_item_associations_tbl;
593 l_ctr_property_template_tbl        CSI_CTR_DATASTRUCTURES_PUB.ctr_property_template_tbl;
594 l_meter_reading_rec                Eam_MeterReading_PUB.Meter_Reading_Rec_Type;
595 l_ctr_property_readings_tbl        EAM_MeterReading_PUB.Ctr_Property_readings_Tbl;
596 l_object_version_number            Number;
597 
598 l_prev_source_counter_id        Number;
599 l_prev_relationship_id          Number;
600 l_previous_factor               Number;
601 l_source_meter_id		Number;
602 l_prev_required_flag varchar2(1);
603 l_primary_flag varchar2(1);
604 
605 l_module            varchar2(200);
606 l_log_level CONSTANT NUMBER := fnd_log.g_current_runtime_level;
607 l_uLog CONSTANT BOOLEAN := fnd_log.level_unexpected >= l_log_level ;
608 l_pLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_procedure >= l_log_level;
609 l_sLog CONSTANT BOOLEAN := l_pLog AND fnd_log.level_statement >= l_log_level;
610 
611 BEGIN
612 	-- Standard Start of API savepoint
613     SAVEPOINT	update_meter_pub;
614     if( l_ulog) then
615            l_module    := 'eam.plsql.'||g_pkg_name|| '.' || l_api_name;
616     end if;
617 
618     IF (l_plog) THEN
619 	        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
620 		'==================== Entered EAM_METER_PUB.update_meter ====================');
621     END IF;
622 
623     -- Standard call to check for call compatibility.
624     IF NOT FND_API.Compatible_API_Call ( 	l_api_version        	,
625         	    	    	    	 	p_api_version        	,
626    	       	    	 			l_api_name 	    	,
627 		    	    	    	    	G_PKG_NAME )
628 	THEN
629 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
630 	END IF;
631 
632 	l_commit := p_commit;
633 	l_init_msg_list := p_init_msg_list;
634 	l_validation_level := p_validation_level;
635 
636 	IF l_commit IS NULL THEN
637 		l_commit := FND_API.G_TRUE;
638 	END IF;
639 
640         IF l_init_msg_list IS NULL THEN
641 		l_init_msg_list := FND_API.G_TRUE;
642 	END IF;
643 
644          IF l_validation_level IS NULL THEN
645 		l_validation_level := FND_API.G_VALID_LEVEL_FULL;
646 	END IF;
647 
648 	-- Initialize message list if p_init_msg_list is set to TRUE.
649 	IF FND_API.to_Boolean( l_init_msg_list ) THEN
650 		FND_MSG_PUB.initialize;
651 	END IF;
652 
653 	--  Initialize API return status to success
654     x_return_status := FND_API.G_RET_STS_SUCCESS;
655 
656 -- API body
657 
658 	l_source_meter_id := p_source_meter_id;
659 
660 	l_ctr_properties_tbl.DELETE;
661 	l_counter_relationships_tbl.DELETE;
662 	l_ctr_derived_filters_tbl.DELETE;
663 	l_ctr_property_readings_tbl.DELETE;
664 	l_counter_associations_tbl.DELETE;
665 
666   	IF p_tmpl_flag = 'N' THEN
667 
668   		SELECT object_version_number
669   		INTO l_object_version_number
670   		FROM CSI_COUNTERS_B
671   		WHERE counter_id = p_meter_id;
672 
673 
674 
675 		l_counter_instance_rec.counter_id := p_meter_id;
676 		l_counter_instance_rec.name := p_meter_name;
677 
678 	IF p_value_change_dir is not null THEN
679 		IF p_value_change_dir = 1 THEN
680 			l_counter_instance_rec.direction := 'A';
681 		ELSIF p_value_change_dir = 2 THEN
682 			l_counter_instance_rec.direction := 'D';
683 		ELSE l_counter_instance_rec.direction := 'B';
684 		END IF;
685 	END IF;
686 
687 		if nvl(p_eam_required_flag, 'N') = 'N' then
688 			select eam_required_flag into l_prev_required_flag
689 			from csi_counters_b
690 			where counter_id = p_meter_id;
691 
692 			if nvl(l_prev_required_flag, 'N') = 'Y' then
693 
694 				begin
695 					select primary_failure_flag into l_primary_flag
696 					from csi_counter_associations
697 					where counter_id = p_meter_id;
698 
699 					if nvl(l_primary_flag, 'N') = 'Y' then
700 			                	FND_MESSAGE.SET_NAME('EAM', 'EAM_PRIMARY_FLAG_EXISTS');
701                   				FND_MSG_PUB.ADD;
702                   				RAISE  FND_API.G_EXC_ERROR;
703 					end if;
704 
705 				exception when no_data_found then
706 					-- this is not an error condition.
707 					null;
708 				end;
709 
710 			end if;
711 		end if;
712 
713 
714 		l_counter_instance_rec.counter_type := 'REGULAR';
715 		l_counter_instance_rec.object_version_number := l_object_version_number;
716 		l_counter_instance_rec.created_from_counter_tmpl_id := p_source_tmpl_id;
717 		l_counter_instance_rec.uom_code := p_meter_uom;
718 		l_counter_instance_rec.start_date_active := p_from_effective_date;
719 		l_counter_instance_rec.end_date_active := p_to_effective_date;
720 		l_counter_instance_rec.reading_type := p_meter_type;
721 		l_counter_instance_rec.default_usage_rate := p_user_defined_rate;
722 		l_counter_instance_rec.use_past_reading := p_use_past_reading;
723 		l_counter_instance_rec.used_in_scheduling := p_used_in_scheduling;
724 		l_counter_instance_rec.description := p_description;
725   	    	l_counter_instance_rec.time_based_manual_entry := 'Y';
726 		l_counter_instance_rec.eam_required_flag := p_eam_required_flag;
727 		l_counter_instance_rec.attribute_category := p_attribute_category;
728 		l_counter_instance_rec.attribute1 := p_attribute1;
729 		l_counter_instance_rec.attribute2 := p_attribute2;
730 		l_counter_instance_rec.attribute3 := p_attribute3;
731 		l_counter_instance_rec.attribute4 := p_attribute4;
732 		l_counter_instance_rec.attribute5 := p_attribute5;
733 		l_counter_instance_rec.attribute6 := p_attribute6;
734 		l_counter_instance_rec.attribute7 := p_attribute7;
735 		l_counter_instance_rec.attribute8 := p_attribute8;
736 		l_counter_instance_rec.attribute9 := p_attribute9;
737 		l_counter_instance_rec.attribute10 := p_attribute10;
738 		l_counter_instance_rec.attribute11 := p_attribute11;
739 		l_counter_instance_rec.attribute12 := p_attribute12;
740 		l_counter_instance_rec.attribute13 := p_attribute13;
741 		l_counter_instance_rec.attribute14 := p_attribute14;
742 		l_counter_instance_rec.attribute15 := p_attribute15;
743 		l_counter_instance_rec.attribute16 := p_attribute16;
744 		l_counter_instance_rec.attribute17 := p_attribute17;
745 		l_counter_instance_rec.attribute18 := p_attribute18;
746 		l_counter_instance_rec.attribute19 := p_attribute19;
747 		l_counter_instance_rec.attribute20 := p_attribute20;
748 		l_counter_instance_rec.attribute21 := p_attribute21;
749 		l_counter_instance_rec.attribute22 := p_attribute22;
750 		l_counter_instance_rec.attribute23 := p_attribute23;
751 		l_counter_instance_rec.attribute24 := p_attribute24;
752 		l_counter_instance_rec.attribute25 := p_attribute25;
753 		l_counter_instance_rec.attribute26 := p_attribute26;
754 		l_counter_instance_rec.attribute27 := p_attribute27;
755 		l_counter_instance_rec.attribute28 := p_attribute28;
756 		l_counter_instance_rec.attribute29 := p_attribute29;
757 		l_counter_instance_rec.attribute30 := p_attribute30;
758 
759 		BEGIN
760 			select source_counter_id,relationship_id,factor,object_version_number
761 			into l_prev_source_counter_id,l_prev_relationship_id,l_previous_factor,l_object_version_number
762 			from csi_counter_relationships
763 			where object_counter_id = p_meter_id and active_end_date is null;
764 
765 			if nvl(p_from_eam, 'N') = 'Y' then
766 
767 				if l_source_meter_id is null and l_prev_source_counter_id is not null then
768 		   			l_source_meter_id := FND_API.G_MISS_NUM;
769 				end if;
770 
771 			end if;
772 
773 
774 
775 			IF l_source_meter_id IS NOT NULL THEN
776 				IF l_source_meter_id = FND_API.G_MISS_NUM THEN
777 			        	l_counter_relationships_tbl(1).object_version_number := l_object_version_number;
778 					l_counter_relationships_tbl(1).RELATIONSHIP_ID := l_prev_relationship_id;
779 					l_counter_relationships_tbl(1).ACTIVE_END_DATE := SYSDATE;
780 				ELSIF l_prev_source_counter_id  <> l_source_meter_id THEN
781 			               -- When source counter is changed .. End date the old one and insert a new one
782 					l_counter_relationships_tbl(1).object_version_number := l_object_version_number;
783 					l_counter_relationships_tbl(1).RELATIONSHIP_ID := l_prev_relationship_id;
784 					l_counter_relationships_tbl(1).ACTIVE_END_DATE := SYSDATE;
785 					l_counter_relationships_tbl(2).source_counter_id := l_source_meter_id;
786 					l_counter_relationships_tbl(2).factor := p_factor;
787 					IF( p_relationship_start_date is not null) THEN
788 						l_counter_relationships_tbl(2).active_start_date := p_relationship_start_date;
789 					ELSE
790 						l_counter_relationships_tbl(2).active_start_date := sysdate;
791 					END IF;
792 					l_counter_relationships_tbl(2).active_end_date := null;
793 					l_counter_relationships_tbl(2).relationship_type_code := 'CONFIGURATION';
794 				ELSE
795 					l_counter_relationships_tbl(1).object_version_number := l_object_version_number;
796 					l_counter_relationships_tbl(1).RELATIONSHIP_ID := l_prev_relationship_id;
797 					l_counter_relationships_tbl(1).factor := p_factor;
798 					IF( p_relationship_start_date is not null) THEN
799 						l_counter_relationships_tbl(1).active_start_date := p_relationship_start_date;
800 					ELSE
801 						l_counter_relationships_tbl(1).active_start_date := sysdate;
802 					END IF;
803 				END IF;
804 			ELSE
805 				l_counter_relationships_tbl.delete;
806 			END IF;
807 
808 			EXCEPTION
809 				WHEN NO_DATA_FOUND THEN
810 					IF (l_source_meter_id IS NOT NULL) THEN -- When a relationship has to be added
811 					       l_counter_relationships_tbl(1).source_counter_id := l_source_meter_id;
812 					       l_counter_relationships_tbl(1).factor := p_factor;
813 					       l_counter_relationships_tbl(1).relationship_type_code := 'CONFIGURATION';
814 					       	IF( p_relationship_start_date is not null) THEN
815 							l_counter_relationships_tbl(1).active_start_date := p_relationship_start_date;
816 						ELSE
817 							l_counter_relationships_tbl(1).active_start_date := sysdate;
818 						END IF;
819 					END IF;
820 			END;
821 
822 
823 				      IF (l_plog) THEN
824 								 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
825 									'==================== Calling CSI_COUNTER_PUB.update_counter ===================='
826 									||'x_return_status:'||x_return_status
827 				||' x_msg_count:'||x_msg_count
828 				||'x_msg_data:'||x_msg_data);
829 				    END IF;
830 				    CSI_COUNTER_PUB.update_counter(p_api_version,
831 								   l_init_msg_list,
832 								   l_commit,
833 								   l_validation_level,
834 								   l_counter_instance_rec,
835 								   l_ctr_properties_tbl,
836 								   l_counter_relationships_tbl,
837 								   l_ctr_derived_filters_tbl,
838 								   l_counter_associations_tbl,
839 								   x_return_status,
840 								   x_msg_count,
841 								   x_msg_data);
842 
843 				  IF (l_plog) THEN
844 								 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
845 									'==================== Returning from CSI_COUNTER_PUB.update_counter ===================='
846 									||'x_return_status:'||x_return_status
847 				||' x_msg_count:'||x_msg_count
848 				||'x_msg_data:'||x_msg_data);
849 				    END IF;
850 
851   ELSE
852 
853 
854   		SELECT object_version_number
855   		INTO l_object_version_number
856   		FROM CSI_COUNTER_TEMPLATE_B
857   		WHERE counter_id = p_meter_id;
858 
859 									    l_counter_template_rec.counter_id := p_meter_id;
860 									    l_counter_template_rec.name := p_meter_name;
861 									    IF (l_plog) THEN
862 										  FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
863 											'l_object_version_number:'||l_object_version_number);
864 										END IF;
865 									  IF p_value_change_dir = 1 THEN
866 												l_counter_template_rec.direction := 'A';
867 									  ELSIF p_value_change_dir = 2 THEN
868 												l_counter_template_rec.direction := 'D';
869 									  ELSE l_counter_template_rec.direction := 'B';
870 									  END IF;
871 									    l_counter_template_rec.counter_type := 'REGULAR';
872 								      l_counter_template_rec.object_version_number := l_object_version_number;
873 									    l_counter_template_rec.uom_code := p_meter_uom;
874 									    l_counter_template_rec.start_date_active := p_from_effective_date;
875 									    l_counter_template_rec.end_date_active := p_to_effective_date;
876 									    l_counter_template_rec.reading_type := p_meter_type;
877 									    l_counter_template_rec.default_usage_rate := p_user_defined_rate;
878 									    l_counter_template_rec.use_past_reading := p_use_past_reading;
879 									    l_counter_template_rec.used_in_scheduling := p_used_in_scheduling;
880 									    l_counter_template_rec.description := p_description;
881 									    l_counter_template_rec.time_based_manual_entry := 'Y';
882 									    l_counter_template_rec.eam_required_flag := p_eam_required_flag;
883 									    l_counter_template_rec.attribute_category := p_attribute_category;
884 										  l_counter_template_rec.attribute1 := p_attribute1;
885 										  l_counter_template_rec.attribute2 := p_attribute2;
886 										  l_counter_template_rec.attribute3 := p_attribute3;
887 										  l_counter_template_rec.attribute4 := p_attribute4;
888 										  l_counter_template_rec.attribute5 := p_attribute5;
889 										  l_counter_template_rec.attribute6 := p_attribute6;
890 										  l_counter_template_rec.attribute7 := p_attribute7;
891 										  l_counter_template_rec.attribute8 := p_attribute8;
892 										  l_counter_template_rec.attribute9 := p_attribute9;
893 										  l_counter_template_rec.attribute10 := p_attribute10;
894 										  l_counter_template_rec.attribute11 := p_attribute11;
895 										  l_counter_template_rec.attribute12 := p_attribute12;
896 										  l_counter_template_rec.attribute13 := p_attribute13;
897 										  l_counter_template_rec.attribute14 := p_attribute14;
898 										  l_counter_template_rec.attribute15 := p_attribute15;
899 										  l_counter_template_rec.attribute16 := p_attribute16;
900 										  l_counter_template_rec.attribute17 := p_attribute17;
901 										  l_counter_template_rec.attribute18 := p_attribute18;
902 										  l_counter_template_rec.attribute19 := p_attribute19;
903 										  l_counter_template_rec.attribute20 := p_attribute20;
904 										  l_counter_template_rec.attribute21 := p_attribute21;
905 										  l_counter_template_rec.attribute22 := p_attribute22;
906 										  l_counter_template_rec.attribute23 := p_attribute23;
907 										  l_counter_template_rec.attribute24 := p_attribute24;
908 										  l_counter_template_rec.attribute25 := p_attribute25;
909 										  l_counter_template_rec.attribute26 := p_attribute26;
910 										  l_counter_template_rec.attribute27 := p_attribute27;
911 										  l_counter_template_rec.attribute28 := p_attribute28;
912 										  l_counter_template_rec.attribute29 := p_attribute29;
913 										  l_counter_template_rec.attribute30 := p_attribute30;
914 
915 									    IF (l_plog) THEN
916 										 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
917 										'==================== Calling csi_counter_template_pub.update_counter_template ===================='
918 										||'x_return_status:'||x_return_status
919 				||' x_msg_count:'||x_msg_count
920 				||'x_msg_data:'||x_msg_data);
921 									   END IF;
922 									    csi_counter_template_pub.update_counter_template(p_api_version,
923 															 l_commit,
924 															 l_init_msg_list,
925 															 l_validation_level,
926 															 l_counter_template_rec,
927 															 l_ctr_item_associations_tbl,
928 															 l_ctr_property_template_tbl,
929 															 l_counter_relationships_tbl,
930 															 l_ctr_derived_filters_tbl,
931 															 x_return_status,
932 															 x_msg_count,
933 															 x_msg_data);
934 									 IF (l_plog) THEN
935 										 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
936 										'==================== Returning from csi_counter_template_pub.update_counter_template ===================='
937 										||'x_return_status:'||x_return_status
938 				||' x_msg_count:'||x_msg_count
939 				||'x_msg_data:'||x_msg_data);
940 									  END IF;
941   END IF;
942 
943 
944 
945 	-- End of API body.
946 	-- Standard check of l_commit.
947 	IF FND_API.To_Boolean( l_commit ) THEN
948 		COMMIT WORK;
949 		IF (l_plog) THEN
950 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'Commiting Work');
951 		END IF;
952 	END IF;
953 	IF (l_plog) THEN
954 	        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
955 		'==================== Calling FND_MSG_PUB.get ====================');
956 	END IF;
957 
958 	-- Standard call to get message count and if count is 1, get message info.
959 	FND_MSG_PUB.get
960     	(  	p_msg_index_out        	=>      x_msg_count ,
961         	p_data          	=>      x_msg_data
962     	);
963 	  IF (l_plog) THEN
964 	        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
965 		'==================== Returned from FND_MSG_PUB.get ====================');
966 
967 		FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
968 		'==================== Exiting EAM_METER_PUB.update_meter ====================');
969 	END IF;
970 	x_msg_data := substr(x_msg_data,1,4000);
971 EXCEPTION
972     WHEN FND_API.G_EXC_ERROR THEN
973 		ROLLBACK TO update_meter_pub;
974 		x_return_status := FND_API.G_RET_STS_ERROR ;
975 		IF (l_plog) THEN
976 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO update_meter_pub');
977 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
978 		        '===================EAM_METER_PUB.update_meter: EXPECTED ERROR======='||
979 			'==================== Calling FND_MSG_PUB.get ====================');
980 		END IF;
981 		FND_MSG_PUB.get
982     		(  	p_msg_index_out         	=>      x_msg_count     	,
983         			p_data          	=>      x_msg_data
984     		);
985 		IF (l_plog) THEN
986 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
987 			'==================== Returned from FND_MSG_PUB.get ====================');
988  		END IF;
989 
990 		x_msg_data := substr(x_msg_data,1,4000);
991 	WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
992 		ROLLBACK TO update_meter_pub;
993 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
994                 IF (l_plog) THEN
995 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO update_meter_pub');
996 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
997 		        '===================EAM_METER_PUB.update_meter: UNEXPECTED ERROR======='||
998 			'==================== Calling FND_MSG_PUB.get ====================');
999 		END IF;
1000 		FND_MSG_PUB.get
1001     		(  	p_msg_index_out         	=>      x_msg_count     	,
1002         			p_data          	=>      x_msg_data
1003     		);
1004 		IF (l_plog) THEN
1005 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1006 			'==================== Returned from FND_MSG_PUB.get ====================');
1007  		END IF;
1008 		x_msg_data := substr(x_msg_data,1,4000);
1009 	WHEN OTHERS THEN
1010 		ROLLBACK TO update_meter_pub;
1011 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1012 		IF (l_plog) THEN
1013 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO update_meter_pub');
1014 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1015 		        '===================EAM_METER_PUB.update_meter: OTHERS ERROR=======');
1016 		END IF;
1017   		IF 	FND_MSG_PUB.Check_Msg_Level
1018 			(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1019 		THEN
1020 			IF (l_plog) THEN
1021 				 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1022 				'==================== Calling FND_MSG_PUB.Add_Exc_Msg ====================');
1023 	 		END IF;
1024         		FND_MSG_PUB.Add_Exc_Msg
1025     	    		(	G_PKG_NAME  	    ,
1026     	    			l_api_name
1027 	    		);
1028 			IF (l_plog) THEN
1029 				 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1030 				'==================== Returned from FND_MSG_PUB.Add_Exc_Msg ====================');
1031  			END IF;
1032 		END IF;
1033 		IF (l_plog) THEN
1034 		       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1035 			'==================== Calling FND_MSG_PUB.get ====================');
1036 		END IF;
1037 		FND_MSG_PUB.get
1038     		(  	p_msg_index_out         	=>      x_msg_count     	,
1039         			p_data          	=>      x_msg_data
1040     		);
1041 		IF (l_plog) THEN
1042 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1043 			'==================== Returned from FND_MSG_PUB.get ====================');
1044  		END IF;
1045 
1046 		x_msg_data := substr(x_msg_data,1,4000);
1047 end update_meter;
1048 
1049 
1050 
1051 END EAM_METER_PUB;
1052