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