DBA Data[Home] [Help]

PACKAGE BODY: APPS.EAM_METER_PUB

Source


1 PACKAGE BODY EAM_METER_PUB AS
2 /* $Header: EAMPMETB.pls 120.19.12020000.2 2013/03/21 12:28:06 antmishr ship $ */
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 CURSOR primary_failure_flag_csr (p_meter_id NUMBER) is
580   select instance_association_id, counter_id, primary_failure_flag
581   from csi_counter_associations
582   where counter_id = p_meter_id;
583 
584 l_api_name			          CONSTANT VARCHAR2(30)	:= 'update_meter';
585 l_api_version           	CONSTANT NUMBER 		:= 1.0;
586 l_meter_id                         number;
587 l_meter_type                       NUMBER;
588 l_commit                               VARCHAR2(1);
589 l_init_msg_list                     VARCHAR2(1);
590 l_validation_level                 NUMBER;
591 l_counter_instance_rec	           CSI_CTR_DATASTRUCTURES_PUB.Counter_instance_rec;
592 l_counter_template_rec	           CSI_CTR_DATASTRUCTURES_PUB.Counter_template_rec;
593 l_ctr_properties_tbl               CSI_CTR_DATASTRUCTURES_PUB.Ctr_properties_tbl;
594 l_counter_relationships_tbl        CSI_CTR_DATASTRUCTURES_PUB.counter_relationships_tbl;
595 l_ctr_derived_filters_tbl          CSI_CTR_DATASTRUCTURES_PUB.ctr_derived_filters_tbl;
596 l_counter_associations_tbl         CSI_CTR_DATASTRUCTURES_PUB.counter_associations_tbl;
597 l_ctr_item_associations_tbl        CSI_CTR_DATASTRUCTURES_PUB.ctr_item_associations_tbl;
598 l_ctr_property_template_tbl        CSI_CTR_DATASTRUCTURES_PUB.ctr_property_template_tbl;
599 l_meter_reading_rec                Eam_MeterReading_PUB.Meter_Reading_Rec_Type;
600 l_ctr_property_readings_tbl        EAM_MeterReading_PUB.Ctr_Property_readings_Tbl;
601 l_object_version_number            Number;
602 
603 l_prev_source_counter_id        Number;
604 l_prev_relationship_id          Number;
605 l_previous_factor               Number;
606 l_source_meter_id		Number;
607 l_prev_required_flag varchar2(1);
608 l_primary_flag varchar2(1);
609 
610 l_module            varchar2(200);
611 l_log_level CONSTANT NUMBER := fnd_log.g_current_runtime_level;
612 l_uLog CONSTANT BOOLEAN := fnd_log.level_unexpected >= l_log_level ;
613 l_pLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_procedure >= l_log_level;
614 l_sLog CONSTANT BOOLEAN := l_pLog AND fnd_log.level_statement >= l_log_level;
615 l_primary_failure_flag_csr          primary_failure_flag_csr%ROWTYPE;
616 
617 BEGIN
618 	-- Standard Start of API savepoint
619     SAVEPOINT	update_meter_pub;
620     if( l_ulog) then
621            l_module    := 'eam.plsql.'||g_pkg_name|| '.' || l_api_name;
622     end if;
623 
624     IF (l_plog) THEN
625 	        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
626 		'==================== Entered EAM_METER_PUB.update_meter ====================');
627                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
628                 'it is now' || sysdate);
629     END IF;
630 
631     -- Standard call to check for call compatibility.
632     IF NOT FND_API.Compatible_API_Call ( 	l_api_version        	,
633         	    	    	    	 	p_api_version        	,
634    	       	    	 			l_api_name 	    	,
635 		    	    	    	    	G_PKG_NAME )
636 	THEN
637 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
638 	END IF;
639 
640 	l_commit := p_commit;
641 	l_init_msg_list := p_init_msg_list;
642 	l_validation_level := p_validation_level;
643 
644 	IF l_commit IS NULL THEN
645 		l_commit := FND_API.G_TRUE;
646 	END IF;
647 
648         IF l_init_msg_list IS NULL THEN
649 		l_init_msg_list := FND_API.G_TRUE;
650 	END IF;
651 
652          IF l_validation_level IS NULL THEN
653 		l_validation_level := FND_API.G_VALID_LEVEL_FULL;
654 	END IF;
655 
656 	-- Initialize message list if p_init_msg_list is set to TRUE.
657 	IF FND_API.to_Boolean( l_init_msg_list ) THEN
658 		FND_MSG_PUB.initialize;
659 	END IF;
660 
661 	--  Initialize API return status to success
662     x_return_status := FND_API.G_RET_STS_SUCCESS;
663 
664 -- API body
665 
666 	l_source_meter_id := p_source_meter_id;
667 
668 	l_ctr_properties_tbl.DELETE;
669 	l_counter_relationships_tbl.DELETE;
670 	l_ctr_derived_filters_tbl.DELETE;
671 	l_ctr_property_readings_tbl.DELETE;
672 	l_counter_associations_tbl.DELETE;
673 
674   	IF p_tmpl_flag = 'N' THEN
675   		SELECT object_version_number
676   		INTO l_object_version_number
677   		FROM CSI_COUNTERS_B
678   		WHERE counter_id = p_meter_id;
679                 l_counter_instance_rec.counter_id := p_meter_id;
680 		l_counter_instance_rec.name := p_meter_name;
681 
682 	IF p_value_change_dir is not null THEN
683 		IF p_value_change_dir = 1 THEN
684 			l_counter_instance_rec.direction := 'A';
685 		ELSIF p_value_change_dir = 2 THEN
686 			l_counter_instance_rec.direction := 'D';
687 		ELSE l_counter_instance_rec.direction := 'B';
688 		END IF;
689 	END IF;
690 		if nvl(p_eam_required_flag, 'N') = 'N' then
691 			select eam_required_flag into l_prev_required_flag
692 			from csi_counters_b
693 			where counter_id = p_meter_id;
694 
695 			if nvl(l_prev_required_flag, 'N') = 'Y' then
696 
697                                 begin
698                                           /* Bug 6832829
699                                           When a meter is associated with multiple assets, multiple asociations get created
700                                           in csi_counter_associations table. A SELECT to check whether the primary_failure_flag is
701                                           'Y' thus returns more than one row. Need to change the code to loop through a cursor
702                                           and check for the first record with primary_failure_flag set to 'Y'.
703                                           */
704                                           OPEN primary_failure_flag_csr(p_meter_id);
705                                           FETCH primary_failure_flag_csr into l_primary_failure_flag_csr;
706                                           WHILE primary_failure_flag_csr%FOUND
707                                             LOOP
708                                              IF nvl(l_primary_failure_flag_csr.primary_failure_flag, 'N') = 'Y' THEN
709                                                     FND_MESSAGE.SET_NAME('EAM', 'EAM_PRIMARY_FLAG_EXISTS');
710                                                     FND_MSG_PUB.ADD;
711                                                     RAISE  FND_API.G_EXC_ERROR;
712                                                     EXIT;
713                                               END IF;
714                                               FETCH primary_failure_flag_csr into l_primary_failure_flag_csr;
715                                             END LOOP;
716                                           CLOSE primary_failure_flag_csr;
717                               exception when no_data_found then
718 					-- this is not an error condition.
719 					null;
720                               end;
721                           end if;
722 		end if;
723 
724 		l_counter_instance_rec.counter_type := 'REGULAR';
725 		l_counter_instance_rec.object_version_number := l_object_version_number;
726 		l_counter_instance_rec.created_from_counter_tmpl_id := p_source_tmpl_id;
727 		l_counter_instance_rec.uom_code := p_meter_uom;
728 		l_counter_instance_rec.start_date_active := p_from_effective_date;
729 		l_counter_instance_rec.end_date_active := p_to_effective_date;
730 		l_counter_instance_rec.reading_type := p_meter_type;
731 		l_counter_instance_rec.default_usage_rate := p_user_defined_rate;
732 		l_counter_instance_rec.use_past_reading := p_use_past_reading;
733 		l_counter_instance_rec.used_in_scheduling := p_used_in_scheduling;
734 		l_counter_instance_rec.description := p_description;
735   	    	l_counter_instance_rec.time_based_manual_entry := 'Y';
736 		l_counter_instance_rec.eam_required_flag := p_eam_required_flag;
737 		l_counter_instance_rec.attribute_category := p_attribute_category;
738 		l_counter_instance_rec.attribute1 := Nvl(p_attribute1, FND_API.G_MISS_CHAR); --bug # 16329758 start
739 		l_counter_instance_rec.attribute2 := Nvl(p_attribute2, FND_API.G_MISS_CHAR);
740 		l_counter_instance_rec.attribute3 := Nvl(p_attribute3, FND_API.G_MISS_CHAR);
741 		l_counter_instance_rec.attribute4 := Nvl(p_attribute4, FND_API.G_MISS_CHAR);
742 		l_counter_instance_rec.attribute5 := Nvl(p_attribute5, FND_API.G_MISS_CHAR);
743 		l_counter_instance_rec.attribute6 := Nvl(p_attribute6, FND_API.G_MISS_CHAR);
744 		l_counter_instance_rec.attribute7 := Nvl(p_attribute7, FND_API.G_MISS_CHAR);
745 		l_counter_instance_rec.attribute8 := Nvl(p_attribute8, FND_API.G_MISS_CHAR);
746 		l_counter_instance_rec.attribute9 := Nvl(p_attribute9, FND_API.G_MISS_CHAR);
747 		l_counter_instance_rec.attribute10 := Nvl(p_attribute10, FND_API.G_MISS_CHAR);
748 		l_counter_instance_rec.attribute11 := Nvl(p_attribute11, FND_API.G_MISS_CHAR);
749 		l_counter_instance_rec.attribute12 := Nvl(p_attribute12, FND_API.G_MISS_CHAR);
750 		l_counter_instance_rec.attribute13 := Nvl(p_attribute13, FND_API.G_MISS_CHAR);
751 		l_counter_instance_rec.attribute14 := Nvl(p_attribute14, FND_API.G_MISS_CHAR);
752 		l_counter_instance_rec.attribute15 := Nvl(p_attribute15, FND_API.G_MISS_CHAR);
753 		l_counter_instance_rec.attribute16 := Nvl(p_attribute16, FND_API.G_MISS_CHAR);
754 		l_counter_instance_rec.attribute17 := Nvl(p_attribute17, FND_API.G_MISS_CHAR);
755 		l_counter_instance_rec.attribute18 := Nvl(p_attribute18, FND_API.G_MISS_CHAR);
756 		l_counter_instance_rec.attribute19 := Nvl(p_attribute19, FND_API.G_MISS_CHAR);
757 		l_counter_instance_rec.attribute20 := Nvl(p_attribute20, FND_API.G_MISS_CHAR);
758 		l_counter_instance_rec.attribute21 := Nvl(p_attribute21, FND_API.G_MISS_CHAR);
759 		l_counter_instance_rec.attribute22 := Nvl(p_attribute22, FND_API.G_MISS_CHAR);
760 		l_counter_instance_rec.attribute23 := Nvl(p_attribute23, FND_API.G_MISS_CHAR);
761 		l_counter_instance_rec.attribute24 := Nvl(p_attribute24, FND_API.G_MISS_CHAR);
762 		l_counter_instance_rec.attribute25 := Nvl(p_attribute25, FND_API.G_MISS_CHAR);
763 		l_counter_instance_rec.attribute26 := Nvl(p_attribute26, FND_API.G_MISS_CHAR);
764 		l_counter_instance_rec.attribute27 := Nvl(p_attribute27, FND_API.G_MISS_CHAR);
765 		l_counter_instance_rec.attribute28 := Nvl(p_attribute28, FND_API.G_MISS_CHAR);
766 		l_counter_instance_rec.attribute29 := Nvl(p_attribute29, FND_API.G_MISS_CHAR);
767 		l_counter_instance_rec.attribute30 := Nvl(p_attribute30, FND_API.G_MISS_CHAR); --bug # 16329758 end
768 
769 		BEGIN
770 			select source_counter_id,relationship_id,factor,object_version_number
771 			into l_prev_source_counter_id,l_prev_relationship_id,l_previous_factor,l_object_version_number
772 			from csi_counter_relationships
773 			where object_counter_id = p_meter_id and active_end_date is null;
774 
775 			if nvl(p_from_eam, 'N') = 'Y' then
776 
777 				if l_source_meter_id is null and l_prev_source_counter_id is not null then
778 		   			l_source_meter_id := FND_API.G_MISS_NUM;
779 				end if;
780 
781 			end if;
782 
783 
784 
785 			IF l_source_meter_id IS NOT NULL THEN
786 				IF l_source_meter_id = FND_API.G_MISS_NUM THEN
787 			        	l_counter_relationships_tbl(1).object_version_number := l_object_version_number;
788 					l_counter_relationships_tbl(1).RELATIONSHIP_ID := l_prev_relationship_id;
789 					l_counter_relationships_tbl(1).ACTIVE_END_DATE := SYSDATE;
790 				ELSIF l_prev_source_counter_id  <> l_source_meter_id THEN
791 			               -- When source counter is changed .. End date the old one and insert a new one
792 					l_counter_relationships_tbl(1).object_version_number := l_object_version_number;
793 					l_counter_relationships_tbl(1).RELATIONSHIP_ID := l_prev_relationship_id;
794 					l_counter_relationships_tbl(1).ACTIVE_END_DATE := SYSDATE;
795 					l_counter_relationships_tbl(2).source_counter_id := l_source_meter_id;
796 					l_counter_relationships_tbl(2).factor := p_factor;
797 					IF( p_relationship_start_date is not null) THEN
798 						l_counter_relationships_tbl(2).active_start_date := p_relationship_start_date;
799 					ELSE
800 						l_counter_relationships_tbl(2).active_start_date := sysdate;
801 					END IF;
802 					l_counter_relationships_tbl(2).active_end_date := null;
803 					l_counter_relationships_tbl(2).relationship_type_code := 'CONFIGURATION';
804 				ELSE
805 					l_counter_relationships_tbl(1).object_version_number := l_object_version_number;
806 					l_counter_relationships_tbl(1).RELATIONSHIP_ID := l_prev_relationship_id;
807 					l_counter_relationships_tbl(1).factor := p_factor;
808 					IF( p_relationship_start_date is not null) THEN
809 						l_counter_relationships_tbl(1).active_start_date := p_relationship_start_date;
810 					ELSE
811 						l_counter_relationships_tbl(1).active_start_date := sysdate;
812 					END IF;
813 				END IF;
814 			ELSE
815 				l_counter_relationships_tbl.delete;
816 			END IF;
817 
818 			EXCEPTION
819 				WHEN NO_DATA_FOUND THEN
820 					IF (l_source_meter_id IS NOT NULL) THEN -- When a relationship has to be added
821 					       l_counter_relationships_tbl(1).source_counter_id := l_source_meter_id;
822 					       l_counter_relationships_tbl(1).factor := p_factor;
823 					       l_counter_relationships_tbl(1).relationship_type_code := 'CONFIGURATION';
824 					       	IF( p_relationship_start_date is not null) THEN
825 							l_counter_relationships_tbl(1).active_start_date := p_relationship_start_date;
826 						ELSE
827 							l_counter_relationships_tbl(1).active_start_date := sysdate;
828 						END IF;
829 					END IF;
830 			END;
831 
832 
833 				      IF (l_plog) THEN
834 								 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
835 									'==================== Calling CSI_COUNTER_PUB.update_counter ===================='
836 									||'x_return_status:'||x_return_status
837 				||' x_msg_count:'||x_msg_count
838 				||'x_msg_data:'||x_msg_data);
839 				    END IF;
840 				    CSI_COUNTER_PUB.update_counter(p_api_version,
841 								   l_init_msg_list,
842 								   l_commit,
843 								   l_validation_level,
844 								   l_counter_instance_rec,
845 								   l_ctr_properties_tbl,
846 								   l_counter_relationships_tbl,
847 								   l_ctr_derived_filters_tbl,
848 								   l_counter_associations_tbl,
849 								   x_return_status,
850 								   x_msg_count,
851 								   x_msg_data);
852 
853 				  IF (l_plog) THEN
854 								 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
855 									'==================== Returning from CSI_COUNTER_PUB.update_counter ===================='
856 									||'x_return_status:'||x_return_status
857 				||' x_msg_count:'||x_msg_count
858 				||'x_msg_data:'||x_msg_data);
859 				    END IF;
860 
861   ELSE
862   		SELECT object_version_number
863   		INTO l_object_version_number
864   		FROM CSI_COUNTER_TEMPLATE_B
865   		WHERE counter_id = p_meter_id;
866 
867 									    l_counter_template_rec.counter_id := p_meter_id;
868 									    l_counter_template_rec.name := p_meter_name;
869 									    IF (l_plog) THEN
870 										  FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
871 											'l_object_version_number:'||l_object_version_number);
872 										END IF;
873 									  IF p_value_change_dir = 1 THEN
874 												l_counter_template_rec.direction := 'A';
875 									  ELSIF p_value_change_dir = 2 THEN
876 												l_counter_template_rec.direction := 'D';
877 									  ELSE l_counter_template_rec.direction := 'B';
878 									  END IF;
879 									    l_counter_template_rec.counter_type := 'REGULAR';
880 								      l_counter_template_rec.object_version_number := l_object_version_number;
881 									    l_counter_template_rec.uom_code := p_meter_uom;
882 									    l_counter_template_rec.start_date_active := p_from_effective_date;
883 									    l_counter_template_rec.end_date_active := p_to_effective_date;
884 									    l_counter_template_rec.reading_type := p_meter_type;
885 									    l_counter_template_rec.default_usage_rate := p_user_defined_rate;
886 									    l_counter_template_rec.use_past_reading := p_use_past_reading;
887 									    l_counter_template_rec.used_in_scheduling := p_used_in_scheduling;
888 									    l_counter_template_rec.description := p_description;
889 									    l_counter_template_rec.time_based_manual_entry := 'Y';
890 									    l_counter_template_rec.eam_required_flag := p_eam_required_flag;
891 									    l_counter_template_rec.attribute_category := p_attribute_category;
892 										  l_counter_template_rec.attribute1 := p_attribute1;
893 										  l_counter_template_rec.attribute2 := p_attribute2;
894 										  l_counter_template_rec.attribute3 := p_attribute3;
895 										  l_counter_template_rec.attribute4 := p_attribute4;
896 										  l_counter_template_rec.attribute5 := p_attribute5;
897 										  l_counter_template_rec.attribute6 := p_attribute6;
898 										  l_counter_template_rec.attribute7 := p_attribute7;
899 										  l_counter_template_rec.attribute8 := p_attribute8;
900 										  l_counter_template_rec.attribute9 := p_attribute9;
901 										  l_counter_template_rec.attribute10 := p_attribute10;
902 										  l_counter_template_rec.attribute11 := p_attribute11;
903 										  l_counter_template_rec.attribute12 := p_attribute12;
904 										  l_counter_template_rec.attribute13 := p_attribute13;
905 										  l_counter_template_rec.attribute14 := p_attribute14;
906 										  l_counter_template_rec.attribute15 := p_attribute15;
907 										  l_counter_template_rec.attribute16 := p_attribute16;
908 										  l_counter_template_rec.attribute17 := p_attribute17;
909 										  l_counter_template_rec.attribute18 := p_attribute18;
910 										  l_counter_template_rec.attribute19 := p_attribute19;
911 										  l_counter_template_rec.attribute20 := p_attribute20;
912 										  l_counter_template_rec.attribute21 := p_attribute21;
913 										  l_counter_template_rec.attribute22 := p_attribute22;
914 										  l_counter_template_rec.attribute23 := p_attribute23;
915 										  l_counter_template_rec.attribute24 := p_attribute24;
916 										  l_counter_template_rec.attribute25 := p_attribute25;
917 										  l_counter_template_rec.attribute26 := p_attribute26;
918 										  l_counter_template_rec.attribute27 := p_attribute27;
919 										  l_counter_template_rec.attribute28 := p_attribute28;
920 										  l_counter_template_rec.attribute29 := p_attribute29;
921 										  l_counter_template_rec.attribute30 := p_attribute30;
922 
923 									    IF (l_plog) THEN
924 										 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
925 										'==================== Calling csi_counter_template_pub.update_counter_template ===================='
926 										||'x_return_status:'||x_return_status
927 				||' x_msg_count:'||x_msg_count
928 				||'x_msg_data:'||x_msg_data);
929 									   END IF;
930 									    csi_counter_template_pub.update_counter_template(p_api_version,
931 															 l_commit,
932 															 l_init_msg_list,
933 															 l_validation_level,
934 															 l_counter_template_rec,
935 															 l_ctr_item_associations_tbl,
936 															 l_ctr_property_template_tbl,
937 															 l_counter_relationships_tbl,
938 															 l_ctr_derived_filters_tbl,
939 															 x_return_status,
940 															 x_msg_count,
941 															 x_msg_data);
942 									 IF (l_plog) THEN
943 										 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
944 										'==================== Returning from csi_counter_template_pub.update_counter_template ===================='
945 										||'x_return_status:'||x_return_status
946 				||' x_msg_count:'||x_msg_count
947 				||'x_msg_data:'||x_msg_data);
948 									  END IF;
949   END IF;
950 
951 
952 
953 	-- End of API body.
954 	-- Standard check of l_commit.
955 	IF FND_API.To_Boolean( l_commit ) THEN
956 		COMMIT WORK;
957 		IF (l_plog) THEN
958 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'Commiting Work');
959 		END IF;
960 	END IF;
961 	IF (l_plog) THEN
962 	        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
963 		'==================== Calling FND_MSG_PUB.get ====================');
964 	END IF;
965 
966 	-- Standard call to get message count and if count is 1, get message info.
967 	FND_MSG_PUB.get
968     	(  	p_msg_index_out        	=>      x_msg_count ,
969         	p_data          	=>      x_msg_data
970     	);
971 	  IF (l_plog) THEN
972 	        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
973 		'==================== Returned from FND_MSG_PUB.get ====================');
974 
975 		FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
976 		'==================== Exiting EAM_METER_PUB.update_meter ====================');
977 	END IF;
978 	x_msg_data := substr(x_msg_data,1,4000);
979 EXCEPTION
980     WHEN FND_API.G_EXC_ERROR THEN
981 		ROLLBACK TO update_meter_pub;
982 		x_return_status := FND_API.G_RET_STS_ERROR ;
983 		IF (l_plog) THEN
984 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO update_meter_pub');
985 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
986 		        '===================EAM_METER_PUB.update_meter: EXPECTED ERROR======='||
987 			'==================== Calling FND_MSG_PUB.get ====================');
988 		END IF;
989 		FND_MSG_PUB.get
990     		(  	p_msg_index_out         	=>      x_msg_count     	,
991         			p_data          	=>      x_msg_data
992     		);
993 		IF (l_plog) THEN
994 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
995 			'==================== Returned from FND_MSG_PUB.get ====================');
996  		END IF;
997 
998 		x_msg_data := substr(x_msg_data,1,4000);
999 	WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1000 		ROLLBACK TO update_meter_pub;
1001 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1002                 IF (l_plog) THEN
1003 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO update_meter_pub');
1004 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1005 		        '===================EAM_METER_PUB.update_meter: UNEXPECTED ERROR======='||
1006 			'==================== Calling FND_MSG_PUB.get ====================');
1007 		END IF;
1008 		FND_MSG_PUB.get
1009     		(  	p_msg_index_out         	=>      x_msg_count     	,
1010         			p_data          	=>      x_msg_data
1011     		);
1012 		IF (l_plog) THEN
1013 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1014 			'==================== Returned from FND_MSG_PUB.get ====================');
1015  		END IF;
1016 		x_msg_data := substr(x_msg_data,1,4000);
1017 	WHEN OTHERS THEN
1018 		ROLLBACK TO update_meter_pub;
1019 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1020 		IF (l_plog) THEN
1021 		     FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,'ROLLBACK TO update_meter_pub');
1022 	             FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1023 		        '===================EAM_METER_PUB.update_meter: OTHERS ERROR=======');
1024 		END IF;
1025   		IF 	FND_MSG_PUB.Check_Msg_Level
1026 			(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1027 		THEN
1028 			IF (l_plog) THEN
1029 				 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1030 				'==================== Calling FND_MSG_PUB.Add_Exc_Msg ====================');
1031 	 		END IF;
1032         		FND_MSG_PUB.Add_Exc_Msg
1033     	    		(	G_PKG_NAME  	    ,
1034     	    			l_api_name
1035 	    		);
1036 			IF (l_plog) THEN
1037 				 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1038 				'==================== Returned from FND_MSG_PUB.Add_Exc_Msg ====================');
1039  			END IF;
1040 		END IF;
1041 		IF (l_plog) THEN
1042 		       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1043 			'==================== Calling FND_MSG_PUB.get ====================');
1044 		END IF;
1045 		FND_MSG_PUB.get
1046     		(  	p_msg_index_out         	=>      x_msg_count     	,
1047         			p_data          	=>      x_msg_data
1048     		);
1049 		IF (l_plog) THEN
1050 			 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
1051 			'==================== Returned from FND_MSG_PUB.get ====================');
1052  		END IF;
1053 
1054 		x_msg_data := substr(x_msg_data,1,4000);
1055 end update_meter;
1056 
1057 
1058 
1059 END EAM_METER_PUB;
1060