DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSI_COUNTER_READINGS_PUB

Source


1 PACKAGE BODY CSI_COUNTER_READINGS_PUB as
2 /* $Header: csipcrdb.pls 120.3.12010000.2 2008/10/31 21:13:03 rsinn ship $ */
3 
4 G_PKG_NAME CONSTANT VARCHAR2(30):= 'CSI_COUNTER_READINGS_PUB';
5 G_FILE_NAME CONSTANT VARCHAR2(12) := 'csipcrdb.pls';
6 --
7 /*----------------------------------------------------*/
8 /* procedure name: Capture_Counter_Reading            */
9 /* description :   procedure used to                  */
10 /*                 capture counter readings           */
11 /*----------------------------------------------------*/
12 
13 PROCEDURE Capture_Counter_Reading
14  (
15      p_api_version           IN     NUMBER
16     ,p_commit                IN     VARCHAR2
17     ,p_init_msg_list         IN     VARCHAR2
18     ,p_validation_level      IN     NUMBER
19     ,p_txn_tbl               IN OUT NOCOPY csi_datastructures_pub.transaction_tbl
20     ,p_ctr_rdg_tbl           IN OUT NOCOPY csi_ctr_datastructures_pub.counter_readings_tbl
21     ,p_ctr_prop_rdg_tbl      IN OUT NOCOPY csi_ctr_datastructures_pub.ctr_property_readings_tbl
22     ,x_return_status         OUT    NOCOPY VARCHAR2
23     ,x_msg_count             OUT    NOCOPY NUMBER
24     ,x_msg_data              OUT    NOCOPY VARCHAR2
25  )
26 IS
27    l_api_name                      CONSTANT VARCHAR2(30)   := 'CAPTURE_COUNTER_READING';
28    l_api_version                   CONSTANT NUMBER         := 1.0;
29    -- l_debug_level                   NUMBER;
30    l_msg_data                      VARCHAR2(2000);
31    l_msg_index                     NUMBER;
32    l_msg_count                     NUMBER;
33    l_dflt_ctr_prop_rec             csi_ctr_datastructures_pub.ctr_property_readings_rec;
34    l_temp_ctr_prop_rec             csi_ctr_datastructures_pub.ctr_property_readings_rec;
35    l_derive_ctr_rec                csi_ctr_datastructures_pub.counter_readings_rec;
36    l_temp_ctr_rdg_rec              csi_ctr_datastructures_pub.counter_readings_rec;
37    l_process_flag                  BOOLEAN := TRUE;
38    l_dummy                         VARCHAR2(1);
39    l_reset_only                    VARCHAR2(1);
40    l_instance_id                   NUMBER;
41    l_formula_rel_type              VARCHAR2(30) := 'FORMULA';
42    l_target_rel_type               VARCHAR2(30) := 'CONFIGURATION';
43    --
44    TYPE T_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
45    l_assembler_tbl                 T_NUM;
46    --
47    CURSOR DFLT_PROP_RDG(p_counter_id IN NUMBER, p_value_id IN NUMBER) IS
48    select ccp.counter_property_id,ccp.default_value
49    from CSI_COUNTER_PROPERTIES_B ccp
50    where ccp.counter_id = p_counter_id
51    and    ((ccp.default_value is not null) or
52            (ccp.default_value is null and ccp.is_nullable = 'N'))
53    and   nvl(end_date_active,(sysdate+1)) > sysdate
54    and   not exists (select 'x' from CSI_CTR_PROPERTY_READINGS cpr
55                      Where cpr.counter_value_id = p_value_id
56                      and   cpr.counter_property_id = ccp.counter_property_id);
57    --
58    CURSOR LATER_READINGS_CUR(p_counter_id IN NUMBER,p_value_timestamp IN DATE) IS
59    select counter_value_id,counter_reading,net_reading,value_timestamp,adjustment_reading
60          ,reset_mode,adjustment_type,include_target_resets
61    from CSI_COUNTER_READINGS
62    where counter_id = p_counter_id
63    and   nvl(disabled_flag,'N') = 'N'
64    and   value_timestamp > p_value_timestamp
65    ORDER BY value_timestamp asc, counter_value_id asc;
66    --
67    CURSOR FORMULA_CUR(p_src_ctr_id IN NUMBER) IS
68    select distinct object_counter_id
69    from csi_counter_relationships
70    where source_counter_id = p_src_ctr_id
71    and   relationship_type_code = l_formula_rel_type
72    and   nvl(active_end_date,(sysdate+1)) > sysdate;
73    --
74    CURSOR TARGET_CUR(p_src_ctr_id IN NUMBER,p_value_timestamp IN DATE) IS
75    select ccr.object_counter_id
76    from CSI_COUNTER_RELATIONSHIPS ccr,
77         CSI_COUNTERS_B ccv
78    where ccr.source_counter_id = p_src_ctr_id
79    and   ccr.relationship_type_code = l_target_rel_type
80    and   nvl(ccr.active_start_date,sysdate) <= p_value_timestamp
81    and   nvl(ccr.active_end_date,(sysdate+1)) > p_value_timestamp
82    and   ccv.counter_id = ccr.object_counter_id;
83    --
84    CURSOR UPD_TARGET_CUR(p_ctr_value_id IN NUMBER,p_src_ctr_id IN NUMBER) IS
85    SELECT crg.counter_id
86    from CSI_COUNTER_READINGS crg,
87         CSI_COUNTER_RELATIONSHIPS ccr,
88         CSI_COUNTERS_B ccv
89    where crg.source_counter_value_id = p_ctr_value_id
90    and   ccr.object_counter_id = crg.counter_id
91    and   ccr.source_counter_id = p_src_ctr_id
92    and   ccr.relationship_type_code = l_target_rel_type
93    and   ccv.counter_id = crg.counter_id;
94    --
95    CURSOR DERIVE_CUR(p_ctr_value_id IN NUMBER) IS
96    SELECT ctr.counter_id
97    FROM CSI_COUNTERS_B ctr, CSI_COUNTER_READINGS cv
98    WHERE cv.counter_value_id = p_ctr_value_id
99    AND   ctr.derive_counter_id = cv.counter_id
100    AND   NVL(ctr.start_date_active,sysdate) <= cv.value_timestamp
101    AND   NVL(ctr.end_date_active,(sysdate+1)) > cv.value_timestamp;
102    --
103 BEGIN
104    -- Standard Start of API savepoint
105    SAVEPOINT  capture_counter_reading;
106    -- Standard call to check for call compatibility.
107    IF NOT FND_API.Compatible_API_Call (l_api_version,
108                                        p_api_version,
109                                        l_api_name   ,
110                                        G_PKG_NAME   ) THEN
111       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
112    END IF;
113    -- Initialize message list if p_init_msg_list is set to TRUE.
114    IF FND_API.to_Boolean(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
115       FND_MSG_PUB.initialize;
116    END IF;
117    --  Initialize API return status to success
118    x_return_status := FND_API.G_RET_STS_SUCCESS;
119 
120    -- Read the debug profiles values in to global variable 7197402
121    CSI_CTR_GEN_UTILITY_PVT.read_debug_profiles;
122 
123    --
124    -- Check the profile option debug_level for debug message reporting
125    -- l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
126    --
127    IF (CSI_CTR_GEN_UTILITY_PVT.g_debug_level > 0) THEN
128       csi_ctr_gen_utility_pvt.put_line( 'capture_counter_reading_pub'               ||'-'||
129                                      p_api_version                              ||'-'||
130                                      nvl(p_commit,FND_API.G_FALSE)              ||'-'||
131                                      nvl(p_init_msg_list,FND_API.G_FALSE)       ||'-'||
132                                      nvl(p_validation_level,FND_API.G_VALID_LEVEL_FULL) );
133    END IF;
134    --
135    IF p_txn_tbl.count = 0 THEN
136       csi_ctr_gen_utility_pvt.put_line('Transaction Information is empty. Cannot Proceed...');
137       csi_ctr_gen_utility_pvt.ExitWithErrMsg('CSI_NO_TXN_TYPE_ID');
138    END IF;
139    --
140    FOR j in p_txn_tbl.FIRST .. p_txn_tbl.LAST LOOP
141       IF p_txn_tbl.EXISTS(j) THEN
142          csi_ctr_gen_utility_pvt.put_line('Dumping Transaction Record #  '||to_char(j));
143          csi_ctr_gen_utility_pvt.dump_txn_rec(p_txn_rec   =>  p_txn_tbl(j));
144          csi_ctr_gen_utility_pvt.put_line('Calling Create_Reading_Transaction...');
145 	 Csi_Counter_Readings_Pvt.Create_Reading_Transaction
146 	       ( p_api_version           =>  1.0
147 		,p_commit                =>  fnd_api.g_false
148 		,p_init_msg_list         =>  fnd_api.g_true
149 		,p_validation_level      =>  fnd_api.g_valid_level_full
150 		,p_txn_rec               =>  p_txn_tbl(j)
151 		,x_return_status         =>  x_return_status
152 		,x_msg_count             =>  x_msg_count
153 		,x_msg_data              =>  x_msg_data
154 	       );
155 	 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
156             csi_ctr_gen_utility_pvt.put_line('Error from Create_Reading_Transaction...');
157 	    l_msg_index := 1;
158 	    FND_MSG_PUB.Count_And_Get
159 		    (p_count  =>  x_msg_count,
160 		     p_data   =>  x_msg_data
161 		    );
162 	    l_msg_count := x_msg_count;
163 	    WHILE l_msg_count > 0 LOOP
164 	       x_msg_data := FND_MSG_PUB.GET
165 			  (  l_msg_index,
166 			     FND_API.G_FALSE        );
167                csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
168 	       l_msg_index := l_msg_index + 1;
169 	       l_msg_count := l_msg_count - 1;
170 	    END LOOP;
171             RAISE FND_API.G_EXC_ERROR;
172 	 END IF;
173       END IF; -- p_txn_tbl record exists check
174    END LOOP; -- End of Txn Tbl Loop
175    --
176    -- Calling Customer Pre-processing Hook
177    IF ( JTF_USR_HKS.Ok_to_execute(  G_PKG_NAME, l_api_name, 'B', 'C' )  )  then
178       CSI_COUNTER_READINGS_CUHK.CAPTURE_COUNTER_READING_PRE
179              (
180 		p_api_version          => p_api_version
181 	       ,p_commit               => p_commit
182 	       ,p_init_msg_list        => p_init_msg_list
183 	       ,p_validation_level     => p_validation_level
184                ,p_txn_tbl              => p_txn_tbl
185 	       ,p_ctr_rdg_tbl          => p_ctr_rdg_tbl
186 	       ,p_ctr_prop_rdg_tbl     => p_ctr_prop_rdg_tbl
187 	       ,x_return_status        => x_return_status
188 	       ,x_msg_count            => x_msg_count
189 	       ,x_msg_data             => x_msg_data
190             );
191       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
192          csi_ctr_gen_utility_pvt.put_line('ERROR FROM CSI_COUNTER_READINGS_CUHK.Capture_Counter_Reading_Pre API ');
193          l_msg_index := 1;
194          l_msg_count := x_msg_count;
195          WHILE l_msg_count > 0 LOOP
196             x_msg_data := FND_MSG_PUB.GET
197             (  l_msg_index,
198                FND_API.G_FALSE
199             );
200             csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
201             l_msg_index := l_msg_index + 1;
202             l_msg_count := l_msg_count - 1;
203          END LOOP;
204          RAISE FND_API.G_EXC_ERROR;
205       END IF;
206    END IF;
207    --
208    -- Calling Vertical Pre-processing Hook
209    IF ( JTF_USR_HKS.Ok_to_execute(  G_PKG_NAME, l_api_name, 'B', 'V' )  )  then
210       CSI_COUNTER_READINGS_VUHK.CAPTURE_COUNTER_READING_PRE
211              (
212 		p_api_version          => p_api_version
213 	       ,p_commit               => p_commit
214 	       ,p_init_msg_list        => p_init_msg_list
215 	       ,p_validation_level     => p_validation_level
216                ,p_txn_tbl              => p_txn_tbl
217 	       ,p_ctr_rdg_tbl          => p_ctr_rdg_tbl
218 	       ,p_ctr_prop_rdg_tbl     => p_ctr_prop_rdg_tbl
219 	       ,x_return_status        => x_return_status
220 	       ,x_msg_count            => x_msg_count
221 	       ,x_msg_data             => x_msg_data
222             );
223       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
224          csi_ctr_gen_utility_pvt.put_line('ERROR FROM CSI_COUNTER_READINGS_VUHK.Capture_Counter_Reading_Pre API ');
225          l_msg_index := 1;
226          l_msg_count := x_msg_count;
227          WHILE l_msg_count > 0 LOOP
228             x_msg_data := FND_MSG_PUB.GET
229             (  l_msg_index,
230                FND_API.G_FALSE
231             );
232             csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
233             l_msg_index := l_msg_index + 1;
234             l_msg_count := l_msg_count - 1;
235          END LOOP;
236          RAISE FND_API.G_EXC_ERROR;
237       END IF;
238    END IF;
239    --
240    IF p_ctr_rdg_tbl.count > 0 THEN
241       FOR j IN p_ctr_rdg_tbl.FIRST .. p_ctr_rdg_tbl.LAST LOOP
242          IF p_ctr_rdg_tbl.EXISTS(j) THEN
243             -- Call Capture Counter reading PVT;
244             csi_ctr_gen_utility_pvt.dump_counter_readings_rec(p_ctr_rdg_tbl(j));
245             IF NOT p_txn_tbl.EXISTS(p_ctr_rdg_tbl(j).parent_tbl_index) THEN
246                csi_ctr_gen_utility_pvt.put_line('Counter Reading record does not have a Transaction...');
247                csi_ctr_gen_utility_pvt.ExitWithErrMsg('CSI_API_CTR_RDG_NO_TXN');
248             END IF;
249             --
250             -- Check whether this is Reset only reading.
251             -- This will decide whether to compute Derive counters or not
252             --
253             IF NVL(p_ctr_rdg_tbl(j).counter_reading,FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM AND
254                NVL(p_ctr_rdg_tbl(j).reset_mode,FND_API.G_MISS_CHAR) = 'SOFT' THEN
255                l_reset_only := 'T';
256             ELSE
257                l_reset_only := 'F';
258             END IF;
259             --
260             IF p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index).transaction_type_id in (88,91,92,94,95) THEN
261                IF p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index).transaction_type_id = 91 THEN
262                   l_instance_id := p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index).source_header_ref_id;
263                ELSE
264                   l_instance_id := null;
265                END IF;
266                csi_ctr_gen_utility_pvt.put_line('Calling Insert Meter Log...');
267                Eam_Asset_Log_Pvt.Insert_Meter_Log
268                   (
269                     P_api_version           =>  1.0,
270                     P_init_msg_list         =>  fnd_api.g_false,
271                     P_commit                =>  fnd_api.g_false,
272                     P_validation_level      =>  fnd_api.g_valid_level_full,
273                     P_event_date            =>  p_ctr_rdg_tbl(j).value_timestamp,
274                     P_instance_id           =>  l_instance_id,
275                     P_ref_id                =>  p_ctr_rdg_tbl(j).counter_id,
276                     X_return_status         =>  x_return_status,
277                     X_msg_count             =>  x_msg_count,
278                     X_msg_data              =>  x_msg_data
279                );
280                -- Since this is only for logging we are ignoring the x_return_status.
281                -- Just report the API error and proceed.
282                --
283 	       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
284 		  csi_ctr_gen_utility_pvt.put_line('ERROR FROM Insert_Meter_Log API ');
285 		  l_msg_index := 1;
286 		  l_msg_count := x_msg_count;
287 		  WHILE l_msg_count > 0 LOOP
288 		     x_msg_data := FND_MSG_PUB.GET
289 		     (  l_msg_index,
290 			FND_API.G_FALSE
291 		     );
292 		     csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
293 		     l_msg_index := l_msg_index + 1;
294 		     l_msg_count := l_msg_count - 1;
295 		  END LOOP;
296                   -- DO NOT RAISE ERROR
297 	       END IF;
298             END IF; -- EAM Logging Check
299             --
300             IF p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index).transaction_type_id = 92 THEN
301                csi_ctr_gen_utility_pvt.put_line('Calling Update_Last_Service_Reading_Wo...');
302                Eam_Meters_Util.Update_Last_Service_Reading_Wo
303                   (
304                     p_wip_entity_id    =>  p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index).source_header_ref_id,
305                     p_meter_id         =>  p_ctr_rdg_tbl(j).counter_id,
306 		    p_meter_reading    =>  p_ctr_rdg_tbl(j).counter_reading,
307 		    p_wo_end_date      =>  p_ctr_rdg_tbl(j).value_timestamp,
308                     X_return_status    =>  x_return_status,
309                     X_msg_count        =>  x_msg_count,
310                     X_msg_data         =>  x_msg_data
311 	           );
312 	       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
313 		  csi_ctr_gen_utility_pvt.put_line('ERROR FROM Update_Last_Service_Reading_Wo API ');
314 		  l_msg_index := 1;
315 		  l_msg_count := x_msg_count;
316 		  WHILE l_msg_count > 0 LOOP
317 		     x_msg_data := FND_MSG_PUB.GET
318 		     (  l_msg_index,
319 			FND_API.G_FALSE
320 		     );
321 		     csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
322 		     l_msg_index := l_msg_index + 1;
323 		     l_msg_count := l_msg_count - 1;
324 		  END LOOP;
325 		  RAISE FND_API.G_EXC_ERROR;
326 	       END IF;
327             END IF; -- Call Update_Last_Service_Reading_WO check
328             --
329 	    csi_ctr_gen_utility_pvt.put_line('Calling Capture_Counter_Reading_pvt...');
330 	    Csi_Counter_Readings_Pvt.Capture_Counter_Reading
331 	       (
332 		 p_api_version           => 1.0
333 		,p_commit                => p_commit
334 		,p_init_msg_list         => p_init_msg_list
335 		,p_validation_level      => p_validation_level
336                 ,p_txn_rec               => p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index)
337 		,p_ctr_rdg_rec           => p_ctr_rdg_tbl(j)
338 		,x_return_status         => x_return_status
339 		,x_msg_count             => x_msg_count
340 		,x_msg_data              => x_msg_data
341 	       );
342 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
343                csi_ctr_gen_utility_pvt.put_line('ERROR FROM Capture_Counter_Reading_pvt API ');
344 	       l_msg_index := 1;
345 	       l_msg_count := x_msg_count;
346 	       WHILE l_msg_count > 0 LOOP
347 		  x_msg_data := FND_MSG_PUB.GET
348 		  (  l_msg_index,
349 		     FND_API.G_FALSE
350 		  );
351 		  csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
352 		  l_msg_index := l_msg_index + 1;
353 		  l_msg_count := l_msg_count - 1;
354 	       END LOOP;
355 	       RAISE FND_API.G_EXC_ERROR;
356 	    END IF;
357             --
358             IF p_ctr_prop_rdg_tbl.count > 0 THEN
359                FOR k IN p_ctr_prop_rdg_tbl.FIRST .. p_ctr_prop_rdg_tbl.LAST LOOP
360                   IF p_ctr_prop_rdg_tbl.EXISTS(k) THEN
361                      IF p_ctr_prop_rdg_tbl(k).parent_tbl_index = j THEN
362                         p_ctr_prop_rdg_tbl(k).counter_value_id := p_ctr_rdg_tbl(j).counter_value_id;
363                         p_ctr_prop_rdg_tbl(k).value_timestamp := p_ctr_rdg_tbl(j).value_timestamp;
364                         -- Call Property reading PVT;
365                         csi_ctr_gen_utility_pvt.dump_ctr_property_readings_rec(p_ctr_prop_rdg_tbl(k));
366                         csi_ctr_gen_utility_pvt.put_line('Calling Capture_Ctr_Property_Reading...');
367 			Csi_Counter_Readings_Pvt.Capture_Ctr_Property_Reading
368 			   (
369 			     p_api_version           => 1.0
370 			    ,p_commit                => p_commit
371 			    ,p_init_msg_list         => p_init_msg_list
372 			    ,p_validation_level      => p_validation_level
373 			    ,p_ctr_prop_rdg_rec      => p_ctr_prop_rdg_tbl(k)
374 		            ,x_return_status         => x_return_status
375 		            ,x_msg_count             => x_msg_count
376 		            ,x_msg_data              => x_msg_data
377 			 );
378 			IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
379 			   csi_ctr_gen_utility_pvt.put_line('ERROR FROM Capture_Ctr_Property_Reading API ');
380 			   l_msg_index := 1;
381 			   l_msg_count := x_msg_count;
382 			   WHILE l_msg_count > 0 LOOP
383 			      x_msg_data := FND_MSG_PUB.GET
384 			      (  l_msg_index,
385 				 FND_API.G_FALSE
386 			      );
387 			      csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
388 			      l_msg_index := l_msg_index + 1;
389 			      l_msg_count := l_msg_count - 1;
390 			   END LOOP;
391 			   RAISE FND_API.G_EXC_ERROR;
392 			END IF;
393                      END IF; -- Current counter property
394                   END IF; -- Prop rec exists
395                END LOOP; -- Property Tbl Loop
396             END IF; -- Prop Tbl > 0
397             -- Capture Default_Property
398             --
399             FOR dflt_rec IN DFLT_PROP_RDG(p_ctr_rdg_tbl(j).counter_id,p_ctr_rdg_tbl(j).counter_value_id)
400             LOOP
401                l_dflt_ctr_prop_rec := l_temp_ctr_prop_rec; -- Initialize
402                --
403                l_dflt_ctr_prop_rec.counter_property_id := dflt_rec.counter_property_id;
404                l_dflt_ctr_prop_rec.property_value := dflt_rec.default_value;
405                l_dflt_ctr_prop_rec.value_timestamp := p_ctr_rdg_tbl(j).value_timestamp;
406                l_dflt_ctr_prop_rec.counter_value_id := p_ctr_rdg_tbl(j).counter_value_id;
407                --
408                csi_ctr_gen_utility_pvt.dump_ctr_property_readings_rec(l_dflt_ctr_prop_rec);
409 	       csi_ctr_gen_utility_pvt.put_line('Calling Capture_Ctr_Property_Reading for Dflt Property');
410 	       Csi_Counter_Readings_Pvt.Capture_Ctr_Property_Reading
411 		  (
412 		    p_api_version           => 1.0
413 		   ,p_commit                => p_commit
414 		   ,p_init_msg_list         => p_init_msg_list
415 		   ,p_validation_level      => p_validation_level
416 		   ,p_ctr_prop_rdg_rec      => l_dflt_ctr_prop_rec
417 		   ,x_return_status         => x_return_status
418 		   ,x_msg_count             => x_msg_count
419 		   ,x_msg_data              => x_msg_data
420 		);
421 	       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
422 		  csi_ctr_gen_utility_pvt.put_line('ERROR FROM Capture_Ctr_Property_Reading API ');
423 		  l_msg_index := 1;
424 		  l_msg_count := x_msg_count;
425 		  WHILE l_msg_count > 0 LOOP
426 		     x_msg_data := FND_MSG_PUB.GET
427 		     (  l_msg_index,
428 			FND_API.G_FALSE
429 		     );
430 		     csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
431 		     l_msg_index := l_msg_index + 1;
432 		     l_msg_count := l_msg_count - 1;
433 		  END LOOP;
434 		  RAISE FND_API.G_EXC_ERROR;
435 	       END IF;
436             END LOOP; -- Default Property Loop
437             --
438             -- Call compute Derive filters only if the current capture is not a pure reset.
439             -- This is applicable for the Later readings cursor as Reset should be the last reading.
440             IF l_reset_only = 'F' THEN
441 	       l_derive_ctr_rec := l_temp_ctr_rdg_rec;
442 	       --
443 	       l_derive_ctr_rec.counter_value_id := p_ctr_rdg_tbl(j).counter_value_id;
444 	       l_derive_ctr_rec.counter_id := p_ctr_rdg_tbl(j).counter_id;
445 	       l_derive_ctr_rec.value_timestamp := p_ctr_rdg_tbl(j).value_timestamp;
446 	       l_derive_ctr_rec.source_code := p_ctr_rdg_tbl(j).source_code;
447 	       l_derive_ctr_rec.source_line_id := p_ctr_rdg_tbl(j).source_line_id;
448 	       --
449 	       -- Call Compute Derive Counters
450 	       csi_ctr_gen_utility_pvt.put_line('Calling Compute_Derive_Counters...');
451 	       Csi_Counter_Readings_Pvt.Compute_Derive_Counters
452 		  (
453 		    p_api_version           => 1.0
454 		   ,p_commit                => p_commit
455 		   ,p_init_msg_list         => p_init_msg_list
456 		   ,p_validation_level      => p_validation_level
457 		   ,p_txn_rec               => p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index)
458 		   ,p_ctr_rdg_rec           => l_derive_ctr_rec
459 		   ,p_mode                  => 'CREATE'
460 		   ,x_return_status         => x_return_status
461 		   ,x_msg_count             => x_msg_count
462 		   ,x_msg_data              => x_msg_data
463 		 );
464 	       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
465 		  csi_ctr_gen_utility_pvt.put_line('ERROR FROM Compute_Derive_Counters API ');
466 		  l_msg_index := 1;
467 		  l_msg_count := x_msg_count;
468 		  WHILE l_msg_count > 0 LOOP
469 		     x_msg_data := FND_MSG_PUB.GET
470 		     (  l_msg_index,
471 			FND_API.G_FALSE
472 		     );
473 		     csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
474 		     l_msg_index := l_msg_index + 1;
475 		     l_msg_count := l_msg_count - 1;
476 		  END LOOP;
477 		  RAISE FND_API.G_EXC_ERROR;
478 	       END IF;
479 	       --
480 	       -- Re-compute Derive comunters for the Later Readings
481 	       -- No need for SOFT reset as we would not have created it before.
482 	       FOR later_rdg IN LATER_READINGS_CUR(p_ctr_rdg_tbl(j).counter_id,
483                                                    p_ctr_rdg_tbl(j).value_timestamp)
484 	       LOOP
485 		  IF NVL(later_rdg.reset_mode,'$#$') <> 'SOFT' THEN
486 		     l_derive_ctr_rec := l_temp_ctr_rdg_rec;
487 		     --
488 		     l_derive_ctr_rec.counter_value_id := later_rdg.counter_value_id;
489 		     l_derive_ctr_rec.counter_id := p_ctr_rdg_tbl(j).counter_id;
490 		     l_derive_ctr_rec.value_timestamp := later_rdg.value_timestamp;
491 		     --
492 		     csi_ctr_gen_utility_pvt.put_line('Calling Compute_Derive_Counters for Update...');
493 		     Csi_Counter_Readings_Pvt.Compute_Derive_Counters
494 			(
495 			  p_api_version           => 1.0
496 			 ,p_commit                => p_commit
497 			 ,p_init_msg_list         => p_init_msg_list
498 			 ,p_validation_level      => p_validation_level
499 			 ,p_txn_rec               => p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index)
500 			 ,p_ctr_rdg_rec           => l_derive_ctr_rec
501 			 ,p_mode                  => 'UPDATE'
502 			 ,x_return_status         => x_return_status
503 			 ,x_msg_count             => x_msg_count
504 			 ,x_msg_data              => x_msg_data
505 		       );
506 		     IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
507 			csi_ctr_gen_utility_pvt.put_line('ERROR FROM Compute_Derive_Counters API ');
508 			l_msg_index := 1;
509 			l_msg_count := x_msg_count;
510 			WHILE l_msg_count > 0 LOOP
511 			   x_msg_data := FND_MSG_PUB.GET
512 			   (  l_msg_index,
513 			      FND_API.G_FALSE
514 			   );
515 			   csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
516 			   l_msg_index := l_msg_index + 1;
517 			   l_msg_count := l_msg_count - 1;
518 			END LOOP;
519 			RAISE FND_API.G_EXC_ERROR;
520 		     END IF;
521 		  END IF; -- End of Derive counter call check
522 	       END LOOP;
523 	    END IF; -- l_reset_only check
524 	    -- Call Compute Formula
525 	    Csi_Counter_Readings_Pvt.Compute_Formula_Counters
526 	       (
527 		 p_api_version           => 1.0
528 		,p_commit                => p_commit
529 		,p_init_msg_list         => p_init_msg_list
530 		,p_validation_level      => p_validation_level
531 		,p_txn_rec               => p_txn_tbl(p_ctr_rdg_tbl(j).parent_tbl_index)
532 		,p_ctr_rdg_rec           => p_ctr_rdg_tbl(j)
533 		,x_return_status         => x_return_status
534 		,x_msg_count             => x_msg_count
535 		,x_msg_data              => x_msg_data
536 	      );
537 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
538                csi_ctr_gen_utility_pvt.put_line('ERROR FROM Compute_Formula_Counters API ');
539 	       l_msg_index := 1;
540 	       l_msg_count := x_msg_count;
541 	       WHILE l_msg_count > 0 LOOP
542 		  x_msg_data := FND_MSG_PUB.GET
543 		  (  l_msg_index,
544 		     FND_API.G_FALSE
545 		  );
546 		  csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
547 		  l_msg_index := l_msg_index + 1;
548 		  l_msg_count := l_msg_count - 1;
549 	       END LOOP;
550 	       RAISE FND_API.G_EXC_ERROR;
551 	    END IF;
552             --
553          END IF; -- Rdg rec exists
554       END LOOP; -- Ctr Reading Tbl Loop
555    END IF;
556    --
557    csi_ctr_gen_utility_pvt.put_line('End of Private API Calls...');
558    -- Calling Customer Post-processing Hook
559    IF ( JTF_USR_HKS.Ok_to_execute(  G_PKG_NAME, l_api_name, 'A', 'C' )  )  then
560       CSI_COUNTER_READINGS_CUHK.CAPTURE_COUNTER_READING_POST
561              (
562 		p_api_version          => p_api_version
563 	       ,p_commit               => p_commit
564 	       ,p_init_msg_list        => p_init_msg_list
565 	       ,p_validation_level     => p_validation_level
566                ,p_txn_tbl              => p_txn_tbl
567 	       ,p_ctr_rdg_tbl          => p_ctr_rdg_tbl
568 	       ,p_ctr_prop_rdg_tbl     => p_ctr_prop_rdg_tbl
569 	       ,x_return_status        => x_return_status
570 	       ,x_msg_count            => x_msg_count
571 	       ,x_msg_data             => x_msg_data
572             );
573       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
574          csi_ctr_gen_utility_pvt.put_line('ERROR FROM CSI_COUNTER_READINGS_CUHK.Capture_Counter_Reading_Post API ');
575          l_msg_index := 1;
576          l_msg_count := x_msg_count;
577          WHILE l_msg_count > 0 LOOP
578             x_msg_data := FND_MSG_PUB.GET
579             (  l_msg_index,
580                FND_API.G_FALSE
581             );
582             csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
583             l_msg_index := l_msg_index + 1;
584             l_msg_count := l_msg_count - 1;
585          END LOOP;
586          RAISE FND_API.G_EXC_ERROR;
587       END IF;
588    END IF;
589    --
590    -- Calling Vertical Post-processing Hook
591    IF ( JTF_USR_HKS.Ok_to_execute(  G_PKG_NAME, l_api_name, 'A', 'V' )  )  then
592       CSI_COUNTER_READINGS_VUHK.CAPTURE_COUNTER_READING_POST
593              (
594 		p_api_version          => p_api_version
595 	       ,p_commit               => p_commit
596 	       ,p_init_msg_list        => p_init_msg_list
597 	       ,p_validation_level     => p_validation_level
598                ,p_txn_tbl              => p_txn_tbl
599 	       ,p_ctr_rdg_tbl          => p_ctr_rdg_tbl
600 	       ,p_ctr_prop_rdg_tbl     => p_ctr_prop_rdg_tbl
601 	       ,x_return_status        => x_return_status
602 	       ,x_msg_count            => x_msg_count
603 	       ,x_msg_data             => x_msg_data
604             );
605       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
606          csi_ctr_gen_utility_pvt.put_line('ERROR FROM CSI_COUNTER_READINGS_VUHK.Capture_Counter_Reading_Post API ');
607          l_msg_index := 1;
608          l_msg_count := x_msg_count;
609          WHILE l_msg_count > 0 LOOP
610             x_msg_data := FND_MSG_PUB.GET
611             (  l_msg_index,
612                FND_API.G_FALSE
613             );
614             csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
615             l_msg_index := l_msg_index + 1;
616             l_msg_count := l_msg_count - 1;
617          END LOOP;
618          RAISE FND_API.G_EXC_ERROR;
619       END IF;
620    END IF;
621    --
622    -- Need to Call the Contracts Assembler Event for all the counters that got captured in this Transaction
623    l_assembler_tbl.DELETE;
624    --
625    FOR J IN p_ctr_rdg_tbl.FIRST .. p_ctr_rdg_tbl.LAST LOOP
626       IF p_ctr_rdg_tbl.EXISTS(J) THEN
627          /*
628          FOR formula_rec IN FORMULA_CUR(p_ctr_rdg_tbl(J).counter_id) LOOP
629             IF NOT(l_assembler_tbl.EXISTS(formula_rec.object_counter_id)) THEN
630                l_assembler_tbl(formula_rec.object_counter_id) := formula_rec.object_counter_id;
631             END IF;
632          END LOOP;
633          --
634          FOR target_rec IN TARGET_CUR(p_ctr_rdg_tbl(J).counter_id,p_ctr_rdg_tbl(J).value_timestamp) LOOP
635             IF NOT(l_assembler_tbl.EXISTS(target_rec.object_counter_id)) THEN
636                l_assembler_tbl(target_rec.object_counter_id) := target_rec.object_counter_id;
637             END IF;
638          END LOOP;
639          --
640          FOR upd_rec IN UPD_TARGET_CUR(p_ctr_rdg_tbl(J).counter_value_id,p_ctr_rdg_tbl(J).counter_id) LOOP
641             IF NOT(l_assembler_tbl.EXISTS(upd_rec.counter_id)) THEN
642                l_assembler_tbl(upd_rec.counter_id) := upd_rec.counter_id;
643             END IF;
644          END LOOP;
645          --
646          FOR derive_rec IN DERIVE_CUR(p_ctr_rdg_tbl(J).counter_value_id) LOOP
647             IF NOT(l_assembler_tbl.EXISTS(derive_rec.counter_id)) THEN
648                l_assembler_tbl(derive_rec.counter_id) := derive_rec.counter_id;
649             END IF;
650          END LOOP;
651          */
652 
653          OKC_CG_UPD_ASMBLR_PVT.Acn_Assemble
654             (  p_api_version        =>  1.0,
655                x_return_status      =>  x_return_status,
656                x_msg_count          =>  x_msg_count,
657                x_msg_data           =>  x_msg_data,
658                p_counter_id         =>  p_ctr_rdg_tbl(J).counter_id
659             );
660 
661 	 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
662 	    csi_ctr_gen_utility_pvt.put_line('ERROR FROM OKC_CG_UPD_ASMBLR_PVT.Acn_Assemble API ');
663 	    l_msg_index := 1;
664 	    l_msg_count := x_msg_count;
665 	    WHILE l_msg_count > 0 LOOP
666 	       x_msg_data := FND_MSG_PUB.GET
667 		  (  l_msg_index,
668 		     FND_API.G_FALSE
669 		  );
670 	       csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
671 	       l_msg_index := l_msg_index + 1;
672 	       l_msg_count := l_msg_count - 1;
673 	    END LOOP;
674 	    RAISE FND_API.G_EXC_ERROR;
675 	 END IF;
676       END IF;
677    END LOOP;
678    --
679    -- Loop thru' the Assembler Table and call the OKC Event
680    --
681    /* IF l_assembler_tbl.count > 0 THEN
682       FOR J IN l_assembler_tbl.FIRST .. l_assembler_tbl.LAST LOOP
683          IF l_assembler_tbl.EXISTS(J) THEN
684             OKC_CG_UPD_ASMBLR_PVT.Acn_Assemble
685                (  p_api_version        =>  1.0,
686                   x_return_status      =>  x_return_status,
687                   x_msg_count          =>  x_msg_count,
688                   x_msg_data           =>  x_msg_data,
689                   p_counter_id         =>  l_assembler_tbl(J)
690                );
691 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
692 	       csi_ctr_gen_utility_pvt.put_line('ERROR FROM OKC_CG_UPD_ASMBLR_PVT.Acn_Assemble API ');
693 	       l_msg_index := 1;
694 	       l_msg_count := x_msg_count;
695 	       WHILE l_msg_count > 0 LOOP
696 		  x_msg_data := FND_MSG_PUB.GET
697 		  (  l_msg_index,
698 		     FND_API.G_FALSE
699 		  );
700 		  csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
701 		  l_msg_index := l_msg_index + 1;
702 		  l_msg_count := l_msg_count - 1;
703 	       END LOOP;
704 	       RAISE FND_API.G_EXC_ERROR;
705 	    END IF;
706          END IF;
707       END LOOP;
708    END IF;
709    */
710    --
711    IF FND_API.to_Boolean(nvl(p_commit,FND_API.G_FALSE)) THEN
712       COMMIT WORK;
713    END IF;
714    --
715    csi_ctr_gen_utility_pvt.put_line('Capture Counter Reading Public API Successfully Completed...');
716    csi_ctr_gen_utility_pvt.put_line('*******************************************************************');
717    -- Standard call to get message count and IF count is  get message info.
718    FND_MSG_PUB.Count_And_Get
719       ( p_count  =>  x_msg_count,
720         p_data   =>  x_msg_data
721       );
722 EXCEPTION
723    WHEN FND_API.G_EXC_ERROR THEN
724       x_return_status := FND_API.G_RET_STS_ERROR ;
725       ROLLBACK TO capture_counter_reading;
726       FND_MSG_PUB.Count_And_Get
727          ( p_count => x_msg_count,
728            p_data  => x_msg_data
729          );
730    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
731       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
732       ROLLBACK TO capture_counter_reading;
733       FND_MSG_PUB.Count_And_Get
734          ( p_count => x_msg_count,
735            p_data  => x_msg_data
736          );
737    WHEN OTHERS THEN
738       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
739       ROLLBACK TO capture_counter_reading;
740       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
741          FND_MSG_PUB.Add_Exc_Msg
742             ( G_PKG_NAME,
743               l_api_name
744             );
745       END IF;
746       FND_MSG_PUB.Count_And_Get
747          ( p_count  => x_msg_count,
748            p_data   => x_msg_data
749          );
750 END Capture_Counter_Reading;
751 --
752 /*----------------------------------------------------*/
753 /* procedure name: Update_Counter_Reading             */
754 /* description :   procedure used to                  */
755 /*                 update counter readings            */
756 /*----------------------------------------------------*/
757 
758 PROCEDURE Update_Counter_Reading
759  (
760      p_api_version           IN     NUMBER
761     ,p_commit                IN     VARCHAR2
762     ,p_init_msg_list         IN     VARCHAR2
763     ,p_validation_level      IN     NUMBER
764     ,p_ctr_rdg_tbl           IN OUT NOCOPY csi_ctr_datastructures_pub.counter_readings_tbl
765     ,x_return_status         OUT    NOCOPY VARCHAR2
766     ,x_msg_count             OUT    NOCOPY NUMBER
767     ,x_msg_data              OUT    NOCOPY VARCHAR2
768  )
769 IS
770    l_api_name                      CONSTANT VARCHAR2(30)   := 'UPDATE_COUNTER_READING';
771    l_api_version                   CONSTANT NUMBER         := 1.0;
772    -- l_debug_level                   NUMBER;
773    l_msg_data                      VARCHAR2(2000);
774    l_msg_index                     NUMBER;
775    l_msg_count                     NUMBER;
776    l_formula_rel_type              VARCHAR2(30) := 'FORMULA';
777    l_target_rel_type               VARCHAR2(30) := 'CONFIGURATION';
778    --
779    TYPE T_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
780    l_assembler_tbl                 T_NUM;
781    --
782    CURSOR FORMULA_CUR(p_src_ctr_id IN NUMBER) IS
783    select distinct object_counter_id
784    from csi_counter_relationships
785    where source_counter_id = p_src_ctr_id
786    and   relationship_type_code = l_formula_rel_type
787    and   nvl(active_end_date,(sysdate+1)) > sysdate;
788    --
789    CURSOR TARGET_CUR(p_src_ctr_id IN NUMBER,p_value_timestamp IN DATE) IS
790    select ccr.object_counter_id
791    from CSI_COUNTER_RELATIONSHIPS ccr,
792         CSI_COUNTERS_B ccv
793    where ccr.source_counter_id = p_src_ctr_id
794    and   ccr.relationship_type_code = l_target_rel_type
795    and   nvl(ccr.active_start_date,sysdate) <= p_value_timestamp
796    and   nvl(ccr.active_end_date,(sysdate+1)) > p_value_timestamp
797    and   ccv.counter_id = ccr.object_counter_id;
798    --
799    CURSOR UPD_TARGET_CUR(p_ctr_value_id IN NUMBER,p_src_ctr_id IN NUMBER) IS
800    SELECT crg.counter_id
801    from CSI_COUNTER_READINGS crg,
802         CSI_COUNTER_RELATIONSHIPS ccr,
803         CSI_COUNTERS_B ccv
804    where crg.source_counter_value_id = p_ctr_value_id
805    and   ccr.object_counter_id = crg.counter_id
806    and   ccr.source_counter_id = p_src_ctr_id
807    and   ccr.relationship_type_code = l_target_rel_type
808    and   ccv.counter_id = crg.counter_id;
809    --
810    CURSOR DERIVE_CUR(p_ctr_value_id IN NUMBER) IS
811    SELECT ctr.counter_id
812    FROM CSI_COUNTERS_B ctr, CSI_COUNTER_READINGS cv
813    WHERE cv.counter_value_id = p_ctr_value_id
814    AND   ctr.derive_counter_id = cv.counter_id
815    AND   NVL(ctr.start_date_active,sysdate) <= cv.value_timestamp
816    AND   NVL(ctr.end_date_active,(sysdate+1)) > cv.value_timestamp;
817    --
818 BEGIN
819    -- Standard Start of API savepoint
820    SAVEPOINT  update_counter_reading;
821    -- Standard call to check for call compatibility.
822    IF NOT FND_API.Compatible_API_Call (l_api_version,
823                                        p_api_version,
824                                        l_api_name   ,
825                                        G_PKG_NAME   ) THEN
826       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
827    END IF;
828    -- Initialize message list if p_init_msg_list is set to TRUE.
829    IF FND_API.to_Boolean(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
830       FND_MSG_PUB.initialize;
831    END IF;
832    --  Initialize API return status to success
833    x_return_status := FND_API.G_RET_STS_SUCCESS;
834 
835    -- Read the debug profiles values in to global variable 7197402
836    CSI_CTR_GEN_UTILITY_PVT.read_debug_profiles;
837 
838    --
839    -- Check the profile option debug_level for debug message reporting
840    -- l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
841    --
842    IF (CSI_CTR_GEN_UTILITY_PVT.g_debug_level > 0) THEN
843       csi_ctr_gen_utility_pvt.put_line( 'update_counter_reading');
844    END IF;
845    --
846    IF (CSI_CTR_GEN_UTILITY_PVT.g_debug_level > 1) THEN
847       csi_ctr_gen_utility_pvt.put_line( 'update_counter_reading'     ||
848                                      p_api_version         ||'-'||
849                                      nvl(p_commit,FND_API.G_FALSE)              ||'-'||
850                                      nvl(p_init_msg_list,FND_API.G_FALSE)       ||'-'||
851                                      nvl(p_validation_level,FND_API.G_VALID_LEVEL_FULL) );
852    END IF;
853    -- Calling Customer Pre-processing Hook
854    IF ( JTF_USR_HKS.Ok_to_execute(  G_PKG_NAME, l_api_name, 'B', 'C' )  )  then
855       CSI_COUNTER_READINGS_CUHK.UPDATE_COUNTER_READING_PRE
856              (
857 		p_api_version          => p_api_version
858 	       ,p_commit               => p_commit
859 	       ,p_init_msg_list        => p_init_msg_list
860 	       ,p_validation_level     => p_validation_level
861 	       ,p_ctr_rdg_tbl          => p_ctr_rdg_tbl
862 	       ,x_return_status        => x_return_status
863 	       ,x_msg_count            => x_msg_count
864 	       ,x_msg_data             => x_msg_data
865             );
866       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
867          csi_ctr_gen_utility_pvt.put_line('ERROR FROM CSI_COUNTER_READINGS_CUHK.Update_Counter_Reading_Pre API ');
868          l_msg_index := 1;
869          l_msg_count := x_msg_count;
870          WHILE l_msg_count > 0 LOOP
871             x_msg_data := FND_MSG_PUB.GET
872             (  l_msg_index,
873                FND_API.G_FALSE
874             );
875             csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
876             l_msg_index := l_msg_index + 1;
877             l_msg_count := l_msg_count - 1;
878          END LOOP;
879          RAISE FND_API.G_EXC_ERROR;
880       END IF;
881    END IF;
882    --
883    -- Calling Vertical Pre-processing Hook
884    IF ( JTF_USR_HKS.Ok_to_execute(  G_PKG_NAME, l_api_name, 'B', 'V' )  )  then
885       CSI_COUNTER_READINGS_VUHK.UPDATE_COUNTER_READING_PRE
886              (
887 		p_api_version          => p_api_version
888 	       ,p_commit               => p_commit
889 	       ,p_init_msg_list        => p_init_msg_list
890 	       ,p_validation_level     => p_validation_level
891 	       ,p_ctr_rdg_tbl          => p_ctr_rdg_tbl
892 	       ,x_return_status        => x_return_status
893 	       ,x_msg_count            => x_msg_count
894 	       ,x_msg_data             => x_msg_data
895             );
896       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
897          csi_ctr_gen_utility_pvt.put_line('ERROR FROM CSI_COUNTER_READINGS_VUHK.Update_Counter_Reading_Pre API ');
898          l_msg_index := 1;
899          l_msg_count := x_msg_count;
900          WHILE l_msg_count > 0 LOOP
901             x_msg_data := FND_MSG_PUB.GET
902             (  l_msg_index,
903                FND_API.G_FALSE
904             );
905             csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
906             l_msg_index := l_msg_index + 1;
907             l_msg_count := l_msg_count - 1;
908          END LOOP;
909          RAISE FND_API.G_EXC_ERROR;
910       END IF;
911    END IF;
912    --
913    IF p_ctr_rdg_tbl.count > 0 THEN
914       FOR j IN p_ctr_rdg_tbl.FIRST .. p_ctr_rdg_tbl.LAST LOOP
915          IF p_ctr_rdg_tbl.EXISTS(j) THEN
916             -- Call Update Counter reading PVT;
917             csi_ctr_gen_utility_pvt.dump_counter_readings_rec(p_ctr_rdg_tbl(j));
918 	    csi_ctr_gen_utility_pvt.put_line('Calling Update_Counter_Reading_pvt...');
919 	    Csi_Counter_Readings_Pvt.Update_Counter_Reading
920 	       (
921 		 p_api_version           => 1.0
922 		,p_commit                => p_commit
923 		,p_init_msg_list         => p_init_msg_list
924 		,p_validation_level      => p_validation_level
925 		,p_ctr_rdg_rec           => p_ctr_rdg_tbl(j)
926 		,x_return_status         => x_return_status
927 		,x_msg_count             => x_msg_count
928 		,x_msg_data              => x_msg_data
929 	       );
930 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
931                csi_ctr_gen_utility_pvt.put_line('ERROR FROM Update_Counter_Reading_pvt API ');
932 	       l_msg_index := 1;
933 	       l_msg_count := x_msg_count;
934 	       WHILE l_msg_count > 0 LOOP
935 		  x_msg_data := FND_MSG_PUB.GET
936 		  (  l_msg_index,
937 		     FND_API.G_FALSE
938 		  );
939 		  csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
940 		  l_msg_index := l_msg_index + 1;
941 		  l_msg_count := l_msg_count - 1;
942 	       END LOOP;
943 	       RAISE FND_API.G_EXC_ERROR;
944 	    END IF;
945          END IF; -- Rdg rec exists
946       END LOOP; -- Ctr Reading Tbl Loop
947    END IF;
948    --
949    -- Calling Customer Post-processing Hook
950    IF ( JTF_USR_HKS.Ok_to_execute(  G_PKG_NAME, l_api_name, 'A', 'C' )  )  then
951       CSI_COUNTER_READINGS_CUHK.UPDATE_COUNTER_READING_POST
952              (
953 		p_api_version          => p_api_version
954 	       ,p_commit               => p_commit
955 	       ,p_init_msg_list        => p_init_msg_list
956 	       ,p_validation_level     => p_validation_level
957 	       ,p_ctr_rdg_tbl          => p_ctr_rdg_tbl
958 	       ,x_return_status        => x_return_status
959 	       ,x_msg_count            => x_msg_count
960 	       ,x_msg_data             => x_msg_data
961             );
962       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
963          csi_ctr_gen_utility_pvt.put_line('ERROR FROM CSI_COUNTER_READINGS_CUHK.Update_Counter_Reading_Post API ');
964          l_msg_index := 1;
965          l_msg_count := x_msg_count;
966          WHILE l_msg_count > 0 LOOP
967             x_msg_data := FND_MSG_PUB.GET
968             (  l_msg_index,
969                FND_API.G_FALSE
970             );
971             csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
972             l_msg_index := l_msg_index + 1;
973             l_msg_count := l_msg_count - 1;
974          END LOOP;
975          RAISE FND_API.G_EXC_ERROR;
976       END IF;
977    END IF;
978    --
979    -- Calling Vertical Post-processing Hook
980    IF ( JTF_USR_HKS.Ok_to_execute(  G_PKG_NAME, l_api_name, 'A', 'V' )  )  then
981       CSI_COUNTER_READINGS_VUHK.UPDATE_COUNTER_READING_POST
982              (
983 		p_api_version          => p_api_version
984 	       ,p_commit               => p_commit
985 	       ,p_init_msg_list        => p_init_msg_list
986 	       ,p_validation_level     => p_validation_level
987 	       ,p_ctr_rdg_tbl          => p_ctr_rdg_tbl
988 	       ,x_return_status        => x_return_status
989 	       ,x_msg_count            => x_msg_count
990 	       ,x_msg_data             => x_msg_data
991             );
992       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
993          csi_ctr_gen_utility_pvt.put_line('ERROR FROM CSI_COUNTER_READINGS_VUHK.Update_Counter_Reading_Post API ');
994          l_msg_index := 1;
995          l_msg_count := x_msg_count;
996          WHILE l_msg_count > 0 LOOP
997             x_msg_data := FND_MSG_PUB.GET
998             (  l_msg_index,
999                FND_API.G_FALSE
1000             );
1001             csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
1002             l_msg_index := l_msg_index + 1;
1003             l_msg_count := l_msg_count - 1;
1004          END LOOP;
1005          RAISE FND_API.G_EXC_ERROR;
1006       END IF;
1007    END IF;
1008    --
1009    -- Need to Call the Contracts Assembler Event for all the counters that got captured in this Transaction
1010    l_assembler_tbl.DELETE;
1011    --
1012    FOR J IN p_ctr_rdg_tbl.FIRST .. p_ctr_rdg_tbl.LAST LOOP
1013       IF p_ctr_rdg_tbl.EXISTS(J) THEN
1014          /*
1015          FOR formula_rec IN FORMULA_CUR(p_ctr_rdg_tbl(J).counter_id) LOOP
1016             IF NOT(l_assembler_tbl.EXISTS(formula_rec.object_counter_id)) THEN
1017                l_assembler_tbl(formula_rec.object_counter_id) := formula_rec.object_counter_id;
1018             END IF;
1019          END LOOP;
1020          --
1021          FOR target_rec IN TARGET_CUR(p_ctr_rdg_tbl(J).counter_id,p_ctr_rdg_tbl(J).value_timestamp) LOOP
1022             IF NOT(l_assembler_tbl.EXISTS(target_rec.object_counter_id)) THEN
1023                l_assembler_tbl(target_rec.object_counter_id) := target_rec.object_counter_id;
1024             END IF;
1025          END LOOP;
1026          --
1027          FOR upd_rec IN UPD_TARGET_CUR(p_ctr_rdg_tbl(J).counter_value_id,p_ctr_rdg_tbl(J).counter_id) LOOP
1028             IF NOT(l_assembler_tbl.EXISTS(upd_rec.counter_id)) THEN
1029                l_assembler_tbl(upd_rec.counter_id) := upd_rec.counter_id;
1030             END IF;
1031          END LOOP;
1032          --
1033          FOR derive_rec IN DERIVE_CUR(p_ctr_rdg_tbl(J).counter_value_id) LOOP
1034             IF NOT(l_assembler_tbl.EXISTS(derive_rec.counter_id)) THEN
1035                l_assembler_tbl(derive_rec.counter_id) := derive_rec.counter_id;
1036             END IF;
1037          END LOOP;
1038          */
1039          OKC_CG_UPD_ASMBLR_PVT.Acn_Assemble
1040             (  p_api_version        =>  1.0,
1041                x_return_status      =>  x_return_status,
1042                x_msg_count          =>  x_msg_count,
1043                x_msg_data           =>  x_msg_data,
1044                p_counter_id         =>  p_ctr_rdg_tbl(J).counter_id
1045             );
1046 	 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1047 	    csi_ctr_gen_utility_pvt.put_line('ERROR FROM OKC_CG_UPD_ASMBLR_PVT.Acn_Assemble API ');
1048 	    l_msg_index := 1;
1049 	    l_msg_count := x_msg_count;
1050 	    WHILE l_msg_count > 0 LOOP
1051 	       x_msg_data := FND_MSG_PUB.GET
1052 		  (  l_msg_index,
1053 		     FND_API.G_FALSE
1054 		  );
1055 	       csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
1056 	       l_msg_index := l_msg_index + 1;
1057 	       l_msg_count := l_msg_count - 1;
1058 	    END LOOP;
1059 	    RAISE FND_API.G_EXC_ERROR;
1060 	 END IF;
1061        END IF;
1062    END LOOP;
1063    --
1064    -- Loop thru' the Assembler Table and call the OKC Event
1065    --
1066    /*
1067    IF l_assembler_tbl.count > 0 THEN
1068       FOR J IN l_assembler_tbl.FIRST .. l_assembler_tbl.LAST LOOP
1069          IF l_assembler_tbl.EXISTS(J) THEN
1070             OKC_CG_UPD_ASMBLR_PVT.Acn_Assemble
1071                (  p_api_version        =>  1.0,
1072                   x_return_status      =>  x_return_status,
1073                   x_msg_count          =>  x_msg_count,
1074                   x_msg_data           =>  x_msg_data,
1075                   p_counter_id         =>  l_assembler_tbl(J)
1076                );
1077 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1078 	       csi_ctr_gen_utility_pvt.put_line('ERROR FROM OKC_CG_UPD_ASMBLR_PVT.Acn_Assemble API ');
1079 	       l_msg_index := 1;
1080 	       l_msg_count := x_msg_count;
1081 	       WHILE l_msg_count > 0 LOOP
1082 		  x_msg_data := FND_MSG_PUB.GET
1083 		  (  l_msg_index,
1084 		     FND_API.G_FALSE
1085 		  );
1086 		  csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
1087 		  l_msg_index := l_msg_index + 1;
1088 		  l_msg_count := l_msg_count - 1;
1089 	       END LOOP;
1090 	       RAISE FND_API.G_EXC_ERROR;
1091 	    END IF;
1092          END IF;
1093       END LOOP;
1094    END IF;
1095    */
1096     --
1097    IF FND_API.to_Boolean(nvl(p_commit,FND_API.G_FALSE)) THEN
1098       COMMIT WORK;
1099    END IF;
1100    --
1101    -- Standard call to get message count and IF count is  get message info.
1102    FND_MSG_PUB.Count_And_Get
1103       ( p_count  =>  x_msg_count,
1104         p_data   =>  x_msg_data
1105       );
1106 EXCEPTION
1107    WHEN FND_API.G_EXC_ERROR THEN
1108       x_return_status := FND_API.G_RET_STS_ERROR ;
1109       ROLLBACK TO update_counter_reading;
1110       FND_MSG_PUB.Count_And_Get
1111          ( p_count => x_msg_count,
1112            p_data  => x_msg_data
1113          );
1114    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1115       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1116       ROLLBACK TO update_counter_reading;
1117       FND_MSG_PUB.Count_And_Get
1118          ( p_count => x_msg_count,
1119            p_data  => x_msg_data
1120          );
1121    WHEN OTHERS THEN
1122       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1123       ROLLBACK TO update_counter_reading;
1124       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1125          FND_MSG_PUB.Add_Exc_Msg
1126             ( G_PKG_NAME,
1127               l_api_name
1128             );
1129       END IF;
1130       FND_MSG_PUB.Count_And_Get
1131          ( p_count  => x_msg_count,
1132            p_data   => x_msg_data
1133          );
1134 END Update_Counter_Reading;
1135 
1136 END CSI_COUNTER_READINGS_PUB;