DBA Data[Home] [Help]

PACKAGE BODY: APPS.CS_CTR_CAPTURE_READING_PUB

Source


1 PACKAGE BODY CS_CTR_CAPTURE_READING_PUB as
2 -- $Header: csxpcrdb.pls 120.2.12010000.2 2009/04/17 14:23:18 ngoutam ship $
3 -- Start of Comments
4 -- Package name     : CS_CAPTURE_READING_PUB
5 -- Purpose          : Capture readings for counters
6 -- History          :
7 -- NOTE             :
8 -- End of Comments
9 G_PKG_NAME CONSTANT VARCHAR2(30):= 'CS_CTR_CAPTURE_READING_PUB';
10 G_FILE_NAME CONSTANT VARCHAR2(12) := 'csxpcrdb.pls';
11 
12 PROCEDURE Capture_Counter_Reading(
13     P_Api_Version_Number         IN   NUMBER,
14     P_Init_Msg_List              IN   VARCHAR2,
15     P_Commit                     IN   VARCHAR2,
16     p_validation_level           IN   NUMBER,
17     p_CTR_GRP_LOG_Rec            IN   CTR_GRP_LOG_Rec_Type,
18     p_CTR_RDG_Tbl                IN   CTR_RDG_Tbl_Type,
19     p_PROP_RDG_Tbl               IN   PROP_RDG_Tbl_Type,
20     X_Return_Status              OUT  NOCOPY VARCHAR2,
21     X_Msg_Count                  OUT  NOCOPY NUMBER,
22     X_Msg_Data                   OUT  NOCOPY VARCHAR2
23  )
24 IS
25    l_api_name                CONSTANT VARCHAR2(30) := 'CAPTURE_COUNTER_READING';
26    l_api_version_number      CONSTANT NUMBER   := 1.0;
27    l_return_status_full      VARCHAR2(1);
28    l_ctr_grp_log_id          NUMBER;
29    l_array_counter           NUMBER;
30    l_txn_tbl                 csi_datastructures_pub.transaction_tbl;
31    l_ctr_rdg_tbl             csi_ctr_datastructures_pub.counter_readings_tbl;
32    --
33    l_ctr_prop_rdg_tbl        csi_ctr_datastructures_pub.ctr_property_readings_tbl;
34    --
35    l_counter_id              NUMBER;
36    l_rdg_count               NUMBER := 0;
37    l_prop_rdg_count          NUMBER := 0;
38    l_msg_index               NUMBER;
39    l_msg_count               NUMBER;
40    l_empty_txn               VARCHAR2(1);
41    l_src_obj_code            CSI_COUNTER_ASSOCIATIONS.source_object_code%TYPE;
42    l_src_obj_id              NUMBER;
43 
44 BEGIN
45    -- Standard Start of API savepoint
46    SAVEPOINT CS_CTR_CAPTURE_READING_PUB;
47    -- Standard call to check for call compatibility.
48    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
49 					p_api_version_number,
50 					l_api_name,
51 					G_PKG_NAME)
52    THEN
53        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
54    END IF;
55    --
56    x_return_status := FND_API.G_RET_STS_SUCCESS;
57    --
58    IF p_ctr_rdg_tbl.count = 0 THEN
59       x_return_status := FND_API.G_RET_STS_ERROR ;
60       csi_ctr_gen_utility_pvt.put_line('No Counter Readings captured...');
61       Return;
62    END IF;
63    --
64    IF NVL(p_ctr_grp_log_rec.source_transaction_code,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
65       IF p_ctr_grp_log_rec.source_transaction_code in ('CP','INTERNAL') THEN
66 	 l_txn_tbl(1).transaction_type_id := 80;
67       ELSIF p_ctr_grp_log_rec.source_transaction_code = 'CONTRACT_LINE' THEN
68 	 l_txn_tbl(1).transaction_type_id := 81;
69       ELSIF p_ctr_grp_log_rec.source_transaction_code = 'OKL_CNTR_GRP' THEN
70 	 l_txn_tbl(1).transaction_type_id := 85;
71       ELSIF p_ctr_grp_log_rec.source_transaction_code = 'FS' THEN
72          l_txn_tbl(1).transaction_type_id := 86;
73       ELSIF p_ctr_grp_log_rec.source_transaction_code = 'DR' THEN
74          l_txn_tbl(1).transaction_type_id := 87;
75       ELSE
76 	 csi_ctr_gen_utility_pvt.put_line('Invalid Source Transaction Code : '||p_ctr_grp_log_rec.source_transaction_code);
77 	 csi_ctr_gen_utility_pvt.ExitWithErrMsg('CS_API_CTR_SRC_TXN_INFO_REQD');
78       END IF;
79       --
80       l_txn_tbl(1).source_header_ref_id := p_CTR_GRP_LOG_Rec.source_transaction_id;
81       l_txn_tbl(1).source_transaction_date := sysdate;
82       l_txn_tbl(1).ATTRIBUTE1 := p_CTR_GRP_LOG_Rec.ATTRIBUTE1;
83       l_txn_tbl(1).ATTRIBUTE2 := p_CTR_GRP_LOG_Rec.ATTRIBUTE2;
84       l_txn_tbl(1).ATTRIBUTE3 := p_CTR_GRP_LOG_Rec.ATTRIBUTE3;
85       l_txn_tbl(1).ATTRIBUTE4 := p_CTR_GRP_LOG_Rec.ATTRIBUTE4;
86       l_txn_tbl(1).ATTRIBUTE5 := p_CTR_GRP_LOG_Rec.ATTRIBUTE5;
87       l_txn_tbl(1).ATTRIBUTE6 := p_CTR_GRP_LOG_Rec.ATTRIBUTE6;
88       l_txn_tbl(1).ATTRIBUTE7 := p_CTR_GRP_LOG_Rec.ATTRIBUTE7;
89       l_txn_tbl(1).ATTRIBUTE8 := p_CTR_GRP_LOG_Rec.ATTRIBUTE8;
90       l_txn_tbl(1).ATTRIBUTE9 := p_CTR_GRP_LOG_Rec.ATTRIBUTE9;
91       l_txn_tbl(1).ATTRIBUTE10 := p_CTR_GRP_LOG_Rec.ATTRIBUTE10;
92       l_txn_tbl(1).ATTRIBUTE11 := p_CTR_GRP_LOG_Rec.ATTRIBUTE11;
93       l_txn_tbl(1).ATTRIBUTE12 := p_CTR_GRP_LOG_Rec.ATTRIBUTE12;
94       l_txn_tbl(1).ATTRIBUTE13 := p_CTR_GRP_LOG_Rec.ATTRIBUTE13;
95       l_txn_tbl(1).ATTRIBUTE14 := p_CTR_GRP_LOG_Rec.ATTRIBUTE14;
96       l_txn_tbl(1).ATTRIBUTE15 := p_CTR_GRP_LOG_Rec.ATTRIBUTE15;
97       l_txn_tbl(1).CONTEXT := p_CTR_GRP_LOG_Rec.CONTEXT;
98       l_empty_txn := 'N';
99    ELSE
100       l_txn_tbl.DELETE;
101       l_empty_txn := 'Y';
102    END IF; -- Group Log Source Txn code check
103    --
104    l_array_counter := p_CTR_RDG_Tbl.First;
105    WHILE p_ctr_rdg_tbl.EXISTS(l_array_counter) LOOP
106       l_rdg_count := l_rdg_count + 1;
107       l_ctr_rdg_tbl(l_rdg_count).COUNTER_VALUE_ID := p_ctr_rdg_tbl(l_array_counter).counter_value_id;
108       l_ctr_rdg_tbl(l_rdg_count).COUNTER_ID := p_ctr_rdg_tbl(l_array_counter).counter_id;
109       l_ctr_rdg_tbl(l_rdg_count).VALUE_TIMESTAMP  := p_ctr_rdg_tbl(l_array_counter).VALUE_TIMESTAMP;
110       l_ctr_rdg_tbl(l_rdg_count).COUNTER_READING := p_ctr_rdg_tbl(l_array_counter).COUNTER_READING ;
111       --
112       IF NVL(p_ctr_rdg_tbl(l_array_counter).RESET_FLAG,'N') = 'Y' THEN
113 	 l_ctr_rdg_tbl(l_rdg_count).RESET_MODE  := 'SOFT';
114       ELSE
115 	 l_ctr_rdg_tbl(l_rdg_count).RESET_MODE  := NULL;
116       END IF;
117       --
118       l_ctr_rdg_tbl(l_rdg_count).RESET_REASON  := p_ctr_rdg_tbl(l_array_counter).RESET_REASON;
119       l_ctr_rdg_tbl(l_rdg_count).RESET_COUNTER_READING :=p_ctr_rdg_tbl(l_array_counter).POST_RESET_FIRST_RDG;
120       l_ctr_rdg_tbl(l_rdg_count).ADJUSTMENT_TYPE  := p_ctr_rdg_tbl(l_array_counter).MISC_READING_TYPE;
121       l_ctr_rdg_tbl(l_rdg_count).ADJUSTMENT_READING   := p_ctr_rdg_tbl(l_array_counter).MISC_READING ;
122       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE1 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE1;
123       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE2 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE2;
124       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE3 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE3;
125       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE4 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE4;
126       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE5 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE5;
127       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE6 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE6;
128       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE7 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE7;
129       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE8 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE8;
130       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE9 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE9;
131       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE10 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE10;
132       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE11 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE11;
133       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE12 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE12;
134       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE13 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE13;
135       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE14 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE14;
136       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE15 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE15;
137       l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE_CATEGORY := p_ctr_rdg_tbl(l_array_counter).CONTEXT;
138       l_ctr_rdg_tbl(l_rdg_count).COMMENTS     := p_ctr_rdg_tbl(l_array_counter).COMMENTS;
139       l_ctr_rdg_tbl(l_rdg_count).DISABLED_FLAG := p_ctr_rdg_tbl(l_array_counter).OVERRIDE_VALID_FLAG;
140       --
141       IF l_empty_txn = 'N' THEN
142          l_ctr_rdg_tbl(l_rdg_count).PARENT_TBL_INDEX := 1; -- Grouped against single transaction
143       ELSE -- No Group Log provided. So, using the counter info to create Transaction
144          Begin
145             select source_object_code,source_object_id
146             into l_src_obj_code,l_src_obj_id
147             from CSI_COUNTER_ASSOCIATIONS
148             where counter_id = p_ctr_rdg_tbl(l_array_counter).counter_id
149             and   rownum < 2;
150             --
151             l_txn_tbl(l_rdg_count).source_transaction_date := sysdate;
152             l_txn_tbl(l_rdg_count).source_header_ref_id := l_src_obj_id;
153             IF l_src_obj_code = 'CP' THEN
154                l_txn_tbl(l_rdg_count).transaction_type_id := 80;
155             ELSIF l_src_obj_code = 'CONTRACT_LINE' THEN
156                l_txn_tbl(l_rdg_count).transaction_type_id := 81;
157             ELSE
158                csi_ctr_gen_utility_pvt.put_line('Unable to get Source Txn Code from Counter Associations..');
159 	       csi_ctr_gen_utility_pvt.ExitWithErrMsg('CS_API_CTR_SRC_TXN_INFO_REQD');
160             END IF;
161          Exception
162             When no_data_found then
163                csi_ctr_gen_utility_pvt.ExitWithErrMsg('CSI_API_CTR_INVALID');
164          End;
165          l_ctr_rdg_tbl(l_rdg_count).PARENT_TBL_INDEX := l_rdg_count;
166       END IF;
167       --
168       l_array_counter := p_ctr_rdg_tbl.NEXT(l_array_counter);
169    END LOOP;
170    --
171    IF p_prop_rdg_tbl.count > 0 THEN
172       l_array_counter := p_prop_rdg_tbl.First;
173       WHILE p_prop_rdg_tbl.EXISTS(l_array_counter) LOOP
174          l_prop_rdg_count := l_prop_rdg_count + 1; --Put here for 8441477
175 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).parent_tbl_index := NULL;
176 	 --l_prop_rdg_count := l_prop_rdg_count + 1; --Commented for bug 8441477
177 	 -- Property should be valid and belong to one of the counters captured above
178 	 Begin
179 	    select counter_id
180 	    into l_counter_id
181 	    from CSI_COUNTER_PROPERTIES_B
182 	    where counter_property_id = p_prop_rdg_tbl(l_array_counter).counter_property_id;
183 	 Exception
184 	    when no_data_found then
185 	       csi_ctr_gen_utility_pvt.put_line('Counter Property is Invalid or Expired...');
186 	       csi_ctr_gen_utility_pvt.ExitWithErrMsg('CSI_API_CTR_PROP_INVALID');
187 	 End;
188 	 --
189 	 FOR j IN l_ctr_rdg_tbl.FIRST .. l_ctr_rdg_tbl.LAST LOOP
190 	    IF l_ctr_rdg_tbl(j).counter_id = l_counter_id THEN
191 	       l_ctr_prop_rdg_tbl(l_prop_rdg_count).parent_tbl_index := j;
192 	       l_ctr_prop_rdg_tbl(l_prop_rdg_count).VALUE_TIMESTAMP := l_ctr_rdg_tbl(j).VALUE_TIMESTAMP;
193 	       exit;
194 	    END IF;
195 	 END LOOP;
196 	 --
197 	 IF l_ctr_prop_rdg_tbl(l_prop_rdg_count).parent_tbl_index IS NULL THEN
198 	    csi_ctr_gen_utility_pvt.ExitWithErrMsg('CSI_API_CTR_PROP_INVALID');
199 	 END IF;
200 	 --
201 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).COUNTER_PROP_VALUE_ID := p_prop_rdg_tbl(l_array_counter).counter_prop_value_id;
202 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).COUNTER_PROPERTY_ID := p_prop_rdg_tbl(l_array_counter).counter_property_id;
203 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).PROPERTY_VALUE := p_prop_rdg_tbl(l_array_counter).PROPERTY_VALUE ;
204 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE1 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE1;
205 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE2 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE2;
206 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE3 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE3;
207 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE4 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE4;
208 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE5 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE5;
209 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE6 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE6;
210 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE7 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE7;
211 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE8 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE8;
212 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE9 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE9;
213 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE10 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE10;
214 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE11 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE11;
215 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE12 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE12;
216 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE13 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE13;
217 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE14 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE14;
218 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE15 := p_prop_rdg_tbl(l_array_counter).ATTRIBUTE15;
219 	 l_ctr_prop_rdg_tbl(l_prop_rdg_count).ATTRIBUTE_CATEGORY := p_prop_rdg_tbl(l_array_counter).CONTEXT;
220 	 l_array_counter := p_prop_rdg_tbl.NEXT(l_array_counter);
221       END LOOP;
222    END IF;
223    --
224    -- Call CSI Capture Counter Reading API
225    Csi_Counter_Readings_Pub.Capture_Counter_Reading
226    (
227        p_api_version           =>   1.0
228       ,p_commit                =>   p_commit
229       ,p_init_msg_list         =>   p_init_msg_list
230       ,p_validation_level      =>   p_validation_level
231       ,p_txn_tbl               =>   l_txn_tbl
232       ,p_ctr_rdg_tbl           =>   l_ctr_rdg_tbl
233       ,p_ctr_prop_rdg_tbl      =>   l_ctr_prop_rdg_tbl
234       ,x_return_status         =>   x_return_status
235       ,x_msg_count             =>   x_msg_count
236       ,x_msg_data              =>   x_msg_data
237    );
238    --
239    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
240       csi_ctr_gen_utility_pvt.put_line('ERROR FROM Capture_Counter_Reading_pub API ');
241       l_msg_index := 1;
242       l_msg_count := x_msg_count;
243       WHILE l_msg_count > 0 LOOP
244 	 x_msg_data := FND_MSG_PUB.GET
245 	 (  l_msg_index,
246 	    FND_API.G_FALSE
247 	 );
248 	 csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
249 	 l_msg_index := l_msg_index + 1;
250 	 l_msg_count := l_msg_count - 1;
251       END LOOP;
252       RAISE FND_API.G_EXC_ERROR;
253    END IF;
254    --
255    -- End of API body
256    --
257    -- Standard check for p_commit
258    IF FND_API.to_Boolean( p_commit )
259    THEN
260        COMMIT WORK;
261    END IF;
262    -- Standard call to get message count and if count is 1, get message info.
263    FND_MSG_PUB.Count_And_Get
264    (  p_count          =>   x_msg_count,
265       p_data           =>   x_msg_data
266    );
267 EXCEPTION
268    WHEN FND_API.G_EXC_ERROR THEN
269       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
270       x_return_status := FND_API.G_RET_STS_ERROR ;
271       FND_MSG_PUB.Count_And_Get
272             (p_count => x_msg_count ,
273              p_data => x_msg_data
274             );
275    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
276       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
277       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
278       FND_MSG_PUB.Count_And_Get
279              (p_count => x_msg_count ,
280               p_data => x_msg_data
281              );
282    WHEN OTHERS THEN
283       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
284       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
285       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
286          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME ,l_api_name);
287       END IF;
288       FND_MSG_PUB.Count_And_Get
289             (p_count => x_msg_count ,
290              p_data => x_msg_data
291             );
292 END Capture_Counter_Reading;
293 
294 PROCEDURE Update_Counter_Reading(
295     P_Api_Version_Number         IN   NUMBER,
296     P_Init_Msg_List              IN   VARCHAR2,
297     P_Commit                     IN   VARCHAR2,
298     p_validation_level           IN   NUMBER,
299     p_CTR_GRP_LOG_ID             IN   NUMBER,
300     p_CTR_RDG_Tbl                IN   CTR_RDG_Tbl_Type,
301     p_PROP_RDG_Tbl               IN   PROP_RDG_Tbl_Type,
305  )
302     X_Return_Status              OUT  NOCOPY VARCHAR2,
303     X_Msg_Count                  OUT  NOCOPY NUMBER,
304     X_Msg_Data                   OUT  NOCOPY VARCHAR2
306 IS
307    l_api_name                CONSTANT VARCHAR2(30) := 'UPDATE_COUNTER_READING';
308    l_api_version_number      CONSTANT NUMBER   := 1.0;
309    l_return_status_full      VARCHAR2(1);
310    l_s_temp                  VARCHAR2(100);
311    l_ctr_grp_log_id          NUMBER;
312    l_array_counter           NUMBER;
313    l_ctr_rdg_tbl             csi_ctr_datastructures_pub.counter_readings_tbl;
314    --
315    l_rdg_count               NUMBER := 0;
316    l_msg_index               NUMBER;
317    l_msg_count               NUMBER;
318 BEGIN
319    -- Standard Start of API savepoint
320    SAVEPOINT CS_CTR_CAPTURE_READING_PUB;
321    -- Standard call to check for call compatibility.
322    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
323 					p_api_version_number,
324 					l_api_name,
325 					G_PKG_NAME)
326    THEN
327        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
328    END IF;
329    --
330    x_return_status := FND_API.G_RET_STS_SUCCESS;
331    --
332    -- API body
333    --
334    IF p_ctr_rdg_tbl.count > 0 THEN
335       l_array_counter := p_ctr_rdg_tbl.First;
336       WHILE p_ctr_rdg_tbl.EXISTS(l_array_counter) LOOP
337 	 l_rdg_count := l_rdg_count + 1;
338 	 l_ctr_rdg_tbl(l_rdg_count).COUNTER_VALUE_ID := p_ctr_rdg_tbl(l_array_counter).counter_value_id;
339 	 l_ctr_rdg_tbl(l_rdg_count).COUNTER_ID := p_ctr_rdg_tbl(l_array_counter).counter_id;
340 	 l_ctr_rdg_tbl(l_rdg_count).VALUE_TIMESTAMP  := p_ctr_rdg_tbl(l_array_counter).VALUE_TIMESTAMP;
341 	 l_ctr_rdg_tbl(l_rdg_count).COUNTER_READING := p_ctr_rdg_tbl(l_array_counter).COUNTER_READING ;
342 	 --
343 	 IF NVL(p_ctr_rdg_tbl(l_array_counter).RESET_FLAG,'N') = 'Y' THEN
344 	    l_ctr_rdg_tbl(l_rdg_count).RESET_MODE  := 'SOFT';
345 	 ELSE
346 	    l_ctr_rdg_tbl(l_rdg_count).RESET_MODE  := NULL;
347 	 END IF;
348 	 --
349 	 l_ctr_rdg_tbl(l_rdg_count).RESET_REASON  := p_ctr_rdg_tbl(l_array_counter).RESET_REASON;
350 	 l_ctr_rdg_tbl(l_rdg_count).COUNTER_READING  := p_ctr_rdg_tbl(l_array_counter).PRE_RESET_LAST_RDG;
351 	 l_ctr_rdg_tbl(l_rdg_count).RESET_COUNTER_READING :=p_ctr_rdg_tbl(l_array_counter).POST_RESET_FIRST_RDG;
352 	 l_ctr_rdg_tbl(l_rdg_count).ADJUSTMENT_TYPE  := p_ctr_rdg_tbl(l_array_counter).MISC_READING_TYPE;
353 	 l_ctr_rdg_tbl(l_rdg_count).ADJUSTMENT_READING   := p_ctr_rdg_tbl(l_array_counter).MISC_READING ;
354 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE1 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE1;
355 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE2 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE2;
356 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE3 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE3;
357 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE4 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE4;
358 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE5 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE5;
359 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE6 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE6;
360 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE7 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE7;
361 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE8 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE8;
362 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE9 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE9;
363 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE10 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE10;
364 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE11 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE11;
365 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE12 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE12;
366 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE13 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE13;
367 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE14 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE14;
368 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE15 := p_ctr_rdg_tbl(l_array_counter).ATTRIBUTE15;
369 	 l_ctr_rdg_tbl(l_rdg_count).ATTRIBUTE_CATEGORY := p_ctr_rdg_tbl(l_array_counter).CONTEXT;
370 	 l_ctr_rdg_tbl(l_rdg_count).COMMENTS     := p_ctr_rdg_tbl(l_array_counter).COMMENTS;
371 	 l_ctr_rdg_tbl(l_rdg_count).DISABLED_FLAG := p_ctr_rdg_tbl(l_array_counter).OVERRIDE_VALID_FLAG;
372 	 --
373 	 l_array_counter := p_ctr_rdg_tbl.NEXT(l_array_counter);
374       END LOOP;
375       --
376       -- Call CSI Update Counter Reading API
377       Csi_Counter_Readings_Pub.Update_Counter_Reading
378       (
379 	  p_api_version           =>   1.0
380 	 ,p_commit                =>   p_commit
381 	 ,p_init_msg_list         =>   p_init_msg_list
382 	 ,p_validation_level      =>   p_validation_level
383 	 ,p_ctr_rdg_tbl           =>   l_ctr_rdg_tbl
384 	 ,x_return_status         =>   x_return_status
385 	 ,x_msg_count             =>   x_msg_count
386 	 ,x_msg_data              =>   x_msg_data
387       );
388       --
389       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
390 	 csi_ctr_gen_utility_pvt.put_line('ERROR FROM Update_Counter_Reading_pub API ');
391 	 l_msg_index := 1;
392 	 l_msg_count := x_msg_count;
393 	 WHILE l_msg_count > 0 LOOP
394 	    x_msg_data := FND_MSG_PUB.GET
395 	    (  l_msg_index,
396 	       FND_API.G_FALSE
397 	    );
398 	    csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
399 	    l_msg_index := l_msg_index + 1;
400 	    l_msg_count := l_msg_count - 1;
401 	 END LOOP;
402 	 RAISE FND_API.G_EXC_ERROR;
403       END IF;
404    END IF;
405    --
406    -- Standard check for p_commit
407    IF FND_API.to_Boolean( p_commit )
408    THEN
409        COMMIT WORK;
410    END IF;
411    -- Standard call to get message count and if count is 1, get message info.
412    FND_MSG_PUB.Count_And_Get
413    (  p_count          =>   x_msg_count,
414       p_data           =>   x_msg_data
415    );
416 EXCEPTION
417    WHEN FND_API.G_EXC_ERROR THEN
418       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
419       x_return_status := FND_API.G_RET_STS_ERROR ;
420       FND_MSG_PUB.Count_And_Get
424    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
421             (p_count => x_msg_count ,
422              p_data => x_msg_data
423             );
425       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
426       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
427       FND_MSG_PUB.Count_And_Get
428              (p_count => x_msg_count ,
429               p_data => x_msg_data
430              );
431    WHEN OTHERS THEN
432       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
433       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
434       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
435          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME ,l_api_name);
436       END IF;
437       FND_MSG_PUB.Count_And_Get
438             (p_count => x_msg_count ,
439              p_data => x_msg_data
440             );
441 END Update_Counter_Reading;
442 
443 PROCEDURE CAPTURE_COUNTER_READING(
444     P_Api_Version_Number         IN   NUMBER,
445     P_Init_Msg_List              IN   VARCHAR2,
446     P_Commit                     IN   VARCHAR2,
447     p_validation_level           IN   NUMBER,
448     p_CTR_RDG_Rec                IN   CTR_RDG_Rec_Type,
449     p_COUNTER_GRP_LOG_ID         IN   NUMBER,
450     X_Return_Status              OUT  NOCOPY VARCHAR2,
451     X_Msg_Count                  OUT  NOCOPY NUMBER,
452     X_Msg_Data                   OUT  NOCOPY VARCHAR2
453    ) IS
454    l_api_name                CONSTANT   VARCHAR2(30)   := 'CAPTURE_COUNTER_READING';
455    l_api_version_number      CONSTANT   NUMBER         := 1.0;
456    l_txn_tbl                 csi_datastructures_pub.transaction_tbl;
457    l_ctr_rdg_tbl             csi_ctr_datastructures_pub.counter_readings_tbl;
458    l_ctr_prop_rdg_tbl        csi_ctr_datastructures_pub.ctr_property_readings_tbl;
459    l_src_obj_code            CSI_COUNTER_ASSOCIATIONS.source_object_code%TYPE;
460    l_src_obj_id              NUMBER;
461    --
462    l_rdg_count               NUMBER := 0;
463    l_msg_index               NUMBER;
464    l_msg_count               NUMBER;
465 BEGIN
466    -- Standard Start of API savepoint
467    SAVEPOINT CS_CTR_CAPTURE_READING_PUB;
468    -- Standard call to check for call compatibility.
469    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
470 					p_api_version_number,
471 					l_api_name,
472 					G_PKG_NAME)
473    THEN
474        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
475    END IF;
476    --
477    x_return_status := FND_API.G_RET_STS_SUCCESS;
478    --
479    IF p_counter_grp_log_id IS NULL THEN
480       Begin
481 	 select source_object_code,source_object_id
482 	 into l_src_obj_code,l_src_obj_id
483 	 from CSI_COUNTER_ASSOCIATIONS
484 	 where counter_id = p_ctr_rdg_rec.counter_id
485 	 and   rownum < 2;
486 	 --
487 	 l_txn_tbl(1).source_transaction_date := sysdate;
488 	 l_txn_tbl(1).source_header_ref_id := l_src_obj_id;
489 	 IF l_src_obj_code = 'CP' THEN
490 	    l_txn_tbl(1).transaction_type_id := 80;
491 	 ELSIF l_src_obj_code = 'CONTRACT_LINE' THEN
492 	    l_txn_tbl(1).transaction_type_id := 81;
493 	 ELSE
494 	    csi_ctr_gen_utility_pvt.put_line('Unable to get Source Txn Code from Counter Associations..');
495 	    csi_ctr_gen_utility_pvt.ExitWithErrMsg('CS_API_CTR_SRC_TXN_INFO_REQD');
496 	 END IF;
497       Exception
498          When no_data_found then
499 	    csi_ctr_gen_utility_pvt.ExitWithErrMsg('CSI_API_CTR_INVALID');
500       End;
501    ELSE -- Should have got inserted into CSI Transaction during Pre Capture Phase
502       Begin
503          select transaction_type_id,source_header_ref_id,source_transaction_date
504          into l_txn_tbl(1).transaction_type_id,
505               l_txn_tbl(1).source_header_ref_id,
506               l_txn_tbl(1).source_transaction_date
507          from CSI_TRANSACTIONS
508          where transaction_id = p_counter_grp_log_id;
509       Exception
510          when no_data_found then
511             csi_ctr_gen_utility_pvt.put_line('Counter Group Log passed did not get into CSI_TRANSACTIONS..');
512 	    csi_ctr_gen_utility_pvt.ExitWithErrMsg
513 	       ( p_msg_name    =>  'CSI_INVALID_TXN_ID',
514 	         p_token1_name =>  'transaction_id',
515 	         p_token1_val  =>  to_char(p_counter_grp_log_id)
516 	       );
517       End;
518    END IF;
519    --
520    l_ctr_rdg_tbl(1).COUNTER_VALUE_ID := p_ctr_rdg_rec.counter_value_id;
521    l_ctr_rdg_tbl(1).COUNTER_ID := p_ctr_rdg_rec.counter_id;
522    l_ctr_rdg_tbl(1).VALUE_TIMESTAMP  := p_ctr_rdg_rec.VALUE_TIMESTAMP;
523    l_ctr_rdg_tbl(1).COUNTER_READING := p_ctr_rdg_rec.COUNTER_READING ;
524    --
525    IF NVL(p_ctr_rdg_rec.RESET_FLAG,'N') = 'Y' THEN
526       l_ctr_rdg_tbl(1).RESET_MODE  := 'SOFT';
527    ELSE
528       l_ctr_rdg_tbl(1).RESET_MODE  := NULL;
529    END IF;
530    --
531    l_ctr_rdg_tbl(1).RESET_REASON  := p_ctr_rdg_rec.RESET_REASON;
532    l_ctr_rdg_tbl(1).COUNTER_READING  := p_ctr_rdg_rec.PRE_RESET_LAST_RDG;
533    l_ctr_rdg_tbl(1).RESET_COUNTER_READING :=p_ctr_rdg_rec.POST_RESET_FIRST_RDG;
534    l_ctr_rdg_tbl(1).ADJUSTMENT_TYPE  := p_ctr_rdg_rec.MISC_READING_TYPE;
535    l_ctr_rdg_tbl(1).ADJUSTMENT_READING   := p_ctr_rdg_rec.MISC_READING ;
536    l_ctr_rdg_tbl(1).ATTRIBUTE1 := p_ctr_rdg_rec.ATTRIBUTE1;
537    l_ctr_rdg_tbl(1).ATTRIBUTE2 := p_ctr_rdg_rec.ATTRIBUTE2;
538    l_ctr_rdg_tbl(1).ATTRIBUTE3 := p_ctr_rdg_rec.ATTRIBUTE3;
539    l_ctr_rdg_tbl(1).ATTRIBUTE4 := p_ctr_rdg_rec.ATTRIBUTE4;
540    l_ctr_rdg_tbl(1).ATTRIBUTE5 := p_ctr_rdg_rec.ATTRIBUTE5;
541    l_ctr_rdg_tbl(1).ATTRIBUTE6 := p_ctr_rdg_rec.ATTRIBUTE6;
542    l_ctr_rdg_tbl(1).ATTRIBUTE7 := p_ctr_rdg_rec.ATTRIBUTE7;
543    l_ctr_rdg_tbl(1).ATTRIBUTE8 := p_ctr_rdg_rec.ATTRIBUTE8;
544    l_ctr_rdg_tbl(1).ATTRIBUTE9 := p_ctr_rdg_rec.ATTRIBUTE9;
545    l_ctr_rdg_tbl(1).ATTRIBUTE10 := p_ctr_rdg_rec.ATTRIBUTE10;
546    l_ctr_rdg_tbl(1).ATTRIBUTE11 := p_ctr_rdg_rec.ATTRIBUTE11;
550    l_ctr_rdg_tbl(1).ATTRIBUTE15 := p_ctr_rdg_rec.ATTRIBUTE15;
547    l_ctr_rdg_tbl(1).ATTRIBUTE12 := p_ctr_rdg_rec.ATTRIBUTE12;
548    l_ctr_rdg_tbl(1).ATTRIBUTE13 := p_ctr_rdg_rec.ATTRIBUTE13;
549    l_ctr_rdg_tbl(1).ATTRIBUTE14 := p_ctr_rdg_rec.ATTRIBUTE14;
551    l_ctr_rdg_tbl(1).ATTRIBUTE_CATEGORY := p_ctr_rdg_rec.CONTEXT;
552    l_ctr_rdg_tbl(1).COMMENTS     := p_ctr_rdg_rec.COMMENTS;
553    l_ctr_rdg_tbl(1).DISABLED_FLAG := p_ctr_rdg_rec.OVERRIDE_VALID_FLAG;
554    l_ctr_rdg_tbl(1).PARENT_TBL_INDEX := 1; -- Grouped against single transaction
555    --
556    -- Call CSI Capture Counter Reading API
557    Csi_Counter_Readings_Pub.Capture_Counter_Reading
558    (
559        p_api_version           =>   1.0
560       ,p_commit                =>   p_commit
561       ,p_init_msg_list         =>   p_init_msg_list
562       ,p_validation_level      =>   p_validation_level
563       ,p_txn_tbl               =>   l_txn_tbl
564       ,p_ctr_rdg_tbl           =>   l_ctr_rdg_tbl
565       ,p_ctr_prop_rdg_tbl      =>   l_ctr_prop_rdg_tbl
566       ,x_return_status         =>   x_return_status
567       ,x_msg_count             =>   x_msg_count
568       ,x_msg_data              =>   x_msg_data
569    );
570    --
571    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
572       csi_ctr_gen_utility_pvt.put_line('ERROR FROM Capture_Counter_Reading_pub API ');
573       l_msg_index := 1;
574       l_msg_count := x_msg_count;
575       WHILE l_msg_count > 0 LOOP
576 	 x_msg_data := FND_MSG_PUB.GET
577 	 (  l_msg_index,
578 	    FND_API.G_FALSE
579 	 );
580 	 csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
581 	 l_msg_index := l_msg_index + 1;
582 	 l_msg_count := l_msg_count - 1;
583       END LOOP;
584       RAISE FND_API.G_EXC_ERROR;
585    END IF;
586    --
587    -- End of API body
588    --
589    -- Standard check for p_commit
590    IF FND_API.to_Boolean( p_commit )
591    THEN
592        COMMIT WORK;
593    END IF;
594    -- Standard call to get message count and if count is 1, get message info.
595    FND_MSG_PUB.Count_And_Get
596    (  p_count          =>   x_msg_count,
597       p_data           =>   x_msg_data
598    );
599 EXCEPTION
600    WHEN FND_API.G_EXC_ERROR THEN
601       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
602       x_return_status := FND_API.G_RET_STS_ERROR ;
603       FND_MSG_PUB.Count_And_Get
604             (p_count => x_msg_count ,
605              p_data => x_msg_data
606             );
607    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
608       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
609       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
610       FND_MSG_PUB.Count_And_Get
611              (p_count => x_msg_count ,
612               p_data => x_msg_data
613              );
614    WHEN OTHERS THEN
615       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
616       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
617       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
618          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME ,l_api_name);
619       END IF;
620       FND_MSG_PUB.Count_And_Get
621             (p_count => x_msg_count ,
622              p_data => x_msg_data
623             );
624 END Capture_Counter_Reading;
625 
626 PROCEDURE Update_Counter_Reading(
627     p_Api_Version_Number         IN   NUMBER,
628     P_Init_Msg_List              IN   VARCHAR2,
629     P_Commit                     IN   VARCHAR2,
630     p_validation_level           IN   NUMBER,
631     p_CTR_RDG_Rec                IN   CTR_RDG_Rec_Type,
632     p_COUNTER_GRP_LOG_ID         IN   NUMBER,
633     p_object_version_number      IN   NUMBER,
634     X_Return_Status              OUT  NOCOPY VARCHAR2,
635     X_Msg_Count                  OUT  NOCOPY NUMBER,
636     X_Msg_Data                   OUT  NOCOPY VARCHAR2
637    ) IS
638    --
639    l_api_name                CONSTANT   VARCHAR2(30)   := 'UPDATE_COUNTER_READING';
640    l_api_version_number      CONSTANT   NUMBER         := 1.0;
641    l_ctr_rdg_tbl             csi_ctr_datastructures_pub.counter_readings_tbl;
642    l_msg_index               NUMBER;
643    l_msg_count               NUMBER;
644 BEGIN
645    -- Standard Start of API savepoint
646    SAVEPOINT CS_CTR_CAPTURE_READING_PUB;
647    -- Standard call to check for call compatibility.
648    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
649 					p_api_version_number,
650 					l_api_name,
651 					G_PKG_NAME)
652    THEN
653        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
654    END IF;
655    --
656    x_return_status := FND_API.G_RET_STS_SUCCESS;
657    --
658    -- API body
659    --
660    l_ctr_rdg_tbl(1).COUNTER_VALUE_ID := p_ctr_rdg_rec.counter_value_id;
661    l_ctr_rdg_tbl(1).COUNTER_ID := p_ctr_rdg_rec.counter_id;
662    l_ctr_rdg_tbl(1).VALUE_TIMESTAMP  := p_ctr_rdg_rec.VALUE_TIMESTAMP;
663    l_ctr_rdg_tbl(1).COUNTER_READING := p_ctr_rdg_rec.COUNTER_READING ;
664    --
665    IF NVL(p_ctr_rdg_rec.RESET_FLAG,'N') = 'Y' THEN
666       l_ctr_rdg_tbl(1).RESET_MODE  := 'SOFT';
667    ELSE
668       l_ctr_rdg_tbl(1).RESET_MODE  := NULL;
669    END IF;
670    --
671    l_ctr_rdg_tbl(1).RESET_REASON  := p_ctr_rdg_rec.RESET_REASON;
672    l_ctr_rdg_tbl(1).COUNTER_READING  := p_ctr_rdg_rec.PRE_RESET_LAST_RDG;
673    l_ctr_rdg_tbl(1).RESET_COUNTER_READING :=p_ctr_rdg_rec.POST_RESET_FIRST_RDG;
674    l_ctr_rdg_tbl(1).ADJUSTMENT_TYPE  := p_ctr_rdg_rec.MISC_READING_TYPE;
675    l_ctr_rdg_tbl(1).ADJUSTMENT_READING   := p_ctr_rdg_rec.MISC_READING ;
676    l_ctr_rdg_tbl(1).ATTRIBUTE1 := p_ctr_rdg_rec.ATTRIBUTE1;
677    l_ctr_rdg_tbl(1).ATTRIBUTE2 := p_ctr_rdg_rec.ATTRIBUTE2;
678    l_ctr_rdg_tbl(1).ATTRIBUTE3 := p_ctr_rdg_rec.ATTRIBUTE3;
679    l_ctr_rdg_tbl(1).ATTRIBUTE4 := p_ctr_rdg_rec.ATTRIBUTE4;
683    l_ctr_rdg_tbl(1).ATTRIBUTE8 := p_ctr_rdg_rec.ATTRIBUTE8;
680    l_ctr_rdg_tbl(1).ATTRIBUTE5 := p_ctr_rdg_rec.ATTRIBUTE5;
681    l_ctr_rdg_tbl(1).ATTRIBUTE6 := p_ctr_rdg_rec.ATTRIBUTE6;
682    l_ctr_rdg_tbl(1).ATTRIBUTE7 := p_ctr_rdg_rec.ATTRIBUTE7;
684    l_ctr_rdg_tbl(1).ATTRIBUTE9 := p_ctr_rdg_rec.ATTRIBUTE9;
685    l_ctr_rdg_tbl(1).ATTRIBUTE10 := p_ctr_rdg_rec.ATTRIBUTE10;
686    l_ctr_rdg_tbl(1).ATTRIBUTE11 := p_ctr_rdg_rec.ATTRIBUTE11;
687    l_ctr_rdg_tbl(1).ATTRIBUTE12 := p_ctr_rdg_rec.ATTRIBUTE12;
688    l_ctr_rdg_tbl(1).ATTRIBUTE13 := p_ctr_rdg_rec.ATTRIBUTE13;
689    l_ctr_rdg_tbl(1).ATTRIBUTE14 := p_ctr_rdg_rec.ATTRIBUTE14;
690    l_ctr_rdg_tbl(1).ATTRIBUTE15 := p_ctr_rdg_rec.ATTRIBUTE15;
691    l_ctr_rdg_tbl(1).ATTRIBUTE_CATEGORY := p_ctr_rdg_rec.CONTEXT;
692    l_ctr_rdg_tbl(1).COMMENTS     := p_ctr_rdg_rec.COMMENTS;
693    l_ctr_rdg_tbl(1).DISABLED_FLAG := p_ctr_rdg_rec.OVERRIDE_VALID_FLAG;
694    --
695    -- Call CSI Update Counter Reading API
696    Csi_Counter_Readings_Pub.Update_Counter_Reading
697    (
698        p_api_version           =>   1.0
699       ,p_commit                =>   p_commit
700       ,p_init_msg_list         =>   p_init_msg_list
701       ,p_validation_level      =>   p_validation_level
702       ,p_ctr_rdg_tbl           =>   l_ctr_rdg_tbl
703       ,x_return_status         =>   x_return_status
704       ,x_msg_count             =>   x_msg_count
705       ,x_msg_data              =>   x_msg_data
706    );
707    --
708    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
709       csi_ctr_gen_utility_pvt.put_line('ERROR FROM Update_Counter_Reading_pub API ');
710       l_msg_index := 1;
711       l_msg_count := x_msg_count;
712       WHILE l_msg_count > 0 LOOP
713 	 x_msg_data := FND_MSG_PUB.GET
714 	 (  l_msg_index,
715 	    FND_API.G_FALSE
716 	 );
717 	 csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
718 	 l_msg_index := l_msg_index + 1;
719 	 l_msg_count := l_msg_count - 1;
720       END LOOP;
721       RAISE FND_API.G_EXC_ERROR;
722       END IF;
723    --
724    -- Standard check for p_commit
725    IF FND_API.to_Boolean( p_commit )
726    THEN
727        COMMIT WORK;
728    END IF;
729    -- Standard call to get message count and if count is 1, get message info.
730    FND_MSG_PUB.Count_And_Get
731    (  p_count          =>   x_msg_count,
732       p_data           =>   x_msg_data
733    );
734 EXCEPTION
735    WHEN FND_API.G_EXC_ERROR THEN
736       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
737       x_return_status := FND_API.G_RET_STS_ERROR ;
738       FND_MSG_PUB.Count_And_Get
739             (p_count => x_msg_count ,
740              p_data => x_msg_data
741             );
742    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
743       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
744       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
745       FND_MSG_PUB.Count_And_Get
746              (p_count => x_msg_count ,
747               p_data => x_msg_data
748              );
749    WHEN OTHERS THEN
750       ROLLBACK TO CS_CTR_CAPTURE_READING_PUB;
751       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
752       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
753          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME ,l_api_name);
754       END IF;
755       FND_MSG_PUB.Count_And_Get
756             (p_count => x_msg_count ,
757              p_data => x_msg_data
758             );
759 END Update_Counter_Reading;
760 
761 
762  PROCEDURE Capture_Ctr_Prop_Reading(
763      p_Api_version_number      IN   NUMBER,
764      p_Init_Msg_List           IN   VARCHAR2,
765      P_Commit                  IN   VARCHAR2,
766      p_validation_level        IN   NUMBER,
767      p_PROP_RDG_Rec            IN   PROP_RDG_Rec_Type,
768      p_COUNTER_GRP_LOG_ID      IN   NUMBER,
769      X_Return_Status           OUT  NOCOPY VARCHAR2,
770      X_Msg_Count               OUT  NOCOPY NUMBER,
771      X_Msg_Data                OUT  NOCOPY VARCHAR2
772      ) IS
773          l_api_name            CONSTANT VARCHAR2(30)  := 'CAPTURE_CTR_PROP_READING';
774          l_api_version_number  CONSTANT NUMBER        := 1.0;
775  BEGIN
776     x_return_status := FND_API.G_RET_STS_SUCCESS;
777  END Capture_CTR_Prop_Reading;
778 
779 PROCEDURE PRE_CAPTURE_CTR_READING(
780     P_Api_Version_Number         IN   NUMBER,
781     P_Init_Msg_List              IN   VARCHAR2,
782     P_Commit                     IN   VARCHAR2,
783     p_validation_level           IN   NUMBER,
784     P_CTR_GRP_LOG_Rec            IN   CTR_GRP_LOG_Rec_Type,
785     X_COUNTER_GRP_LOG_ID         IN OUT  NOCOPY NUMBER,
786     X_Return_Status              OUT  NOCOPY VARCHAR2,
787     X_Msg_Count                  OUT  NOCOPY NUMBER,
788     X_Msg_Data                   OUT  NOCOPY VARCHAR2
789     ) IS
790    --
791    l_api_name                CONSTANT VARCHAR2(30) := 'PRE_CAPTURE_COUNTER_READING';
792    l_api_version_number      CONSTANT NUMBER   := 1.0;
793    l_txn_rec                 csi_datastructures_pub.transaction_rec;
794    l_msg_data                VARCHAR2(2000);
795    l_msg_index               NUMBER;
796    l_msg_count               NUMBER;
797 BEGIN
798    -- Standard Start of API savepoint
799    SAVEPOINT PRE_CAPTURE_READING_PUB;
800    -- Standard call to check for call compatibility.
801    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
802 					p_api_version_number,
803 					l_api_name,
804 					G_PKG_NAME)
805    THEN
806        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
807    END IF;
808    --
809    x_return_status := FND_API.G_RET_STS_SUCCESS;
810    --
811    csi_ctr_gen_utility_pvt.put_line('Inside PRE_CAPTURE_COUNTER_READING...');
812    csi_ctr_gen_utility_pvt.put_line('Source Transaction Code : '||p_ctr_grp_log_rec.source_transaction_code);
816       IF p_ctr_grp_log_rec.source_transaction_code in ('CP','INTERNAL') THEN
813    csi_ctr_gen_utility_pvt.put_line('Source Transaction ID : '||to_char(p_ctr_grp_log_rec.source_transaction_id));
814    --
815    IF NVL(p_ctr_grp_log_rec.source_transaction_code,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
817 	 l_txn_rec.transaction_type_id := 80;
818       ELSIF p_ctr_grp_log_rec.source_transaction_code = 'CONTRACT_LINE' THEN
819 	 l_txn_rec.transaction_type_id := 81;
820       ELSIF p_ctr_grp_log_rec.source_transaction_code = 'OKL_CNTR_GRP' THEN
821 	 l_txn_rec.transaction_type_id := 85;
822       ELSIF p_ctr_grp_log_rec.source_transaction_code = 'FS' THEN
823          l_txn_rec.transaction_type_id := 86;
824       ELSIF p_ctr_grp_log_rec.source_transaction_code = 'DR' THEN
825          l_txn_rec.transaction_type_id := 87;
826       ELSE
827 	 csi_ctr_gen_utility_pvt.put_line('Invalid Source Transaction Code : '||p_ctr_grp_log_rec.source_transaction_code);
828 	 csi_ctr_gen_utility_pvt.ExitWithErrMsg('CS_API_CTR_SRC_TXN_INFO_REQD');
829       END IF;
830       --
831       l_txn_rec.source_header_ref_id := p_ctr_grp_log_rec.source_transaction_id;
832       l_txn_rec.source_transaction_date := sysdate;
833       l_txn_rec.ATTRIBUTE1 := p_CTR_GRP_LOG_Rec.ATTRIBUTE1;
834       l_txn_rec.ATTRIBUTE2 := p_CTR_GRP_LOG_Rec.ATTRIBUTE2;
835       l_txn_rec.ATTRIBUTE3 := p_CTR_GRP_LOG_Rec.ATTRIBUTE3;
836       l_txn_rec.ATTRIBUTE4 := p_CTR_GRP_LOG_Rec.ATTRIBUTE4;
837       l_txn_rec.ATTRIBUTE5 := p_CTR_GRP_LOG_Rec.ATTRIBUTE5;
838       l_txn_rec.ATTRIBUTE6 := p_CTR_GRP_LOG_Rec.ATTRIBUTE6;
839       l_txn_rec.ATTRIBUTE7 := p_CTR_GRP_LOG_Rec.ATTRIBUTE7;
840       l_txn_rec.ATTRIBUTE8 := p_CTR_GRP_LOG_Rec.ATTRIBUTE8;
841       l_txn_rec.ATTRIBUTE9 := p_CTR_GRP_LOG_Rec.ATTRIBUTE9;
842       l_txn_rec.ATTRIBUTE10 := p_CTR_GRP_LOG_Rec.ATTRIBUTE10;
843       l_txn_rec.ATTRIBUTE11 := p_CTR_GRP_LOG_Rec.ATTRIBUTE11;
844       l_txn_rec.ATTRIBUTE12 := p_CTR_GRP_LOG_Rec.ATTRIBUTE12;
845       l_txn_rec.ATTRIBUTE13 := p_CTR_GRP_LOG_Rec.ATTRIBUTE13;
846       l_txn_rec.ATTRIBUTE14 := p_CTR_GRP_LOG_Rec.ATTRIBUTE14;
847       l_txn_rec.ATTRIBUTE15 := p_CTR_GRP_LOG_Rec.ATTRIBUTE15;
848       l_txn_rec.CONTEXT := p_CTR_GRP_LOG_Rec.CONTEXT;
849       --
850       -- Call Create_Reading Transaction to insert into CSI_TRANSACTIONS
851       csi_ctr_gen_utility_pvt.put_line('Calling Create_Reading_Transaction...');
852       Csi_Counter_Readings_Pvt.Create_Reading_Transaction
853 	 ( p_api_version           =>  1.0
854 	  ,p_commit                =>  fnd_api.g_false
855 	  ,p_init_msg_list         =>  fnd_api.g_true
856 	  ,p_validation_level      =>  fnd_api.g_valid_level_full
857 	  ,p_txn_rec               =>  l_txn_rec
858 	  ,x_return_status         =>  x_return_status
859 	  ,x_msg_count             =>  x_msg_count
860 	  ,x_msg_data              =>  x_msg_data
861 	 );
862       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
863 	 csi_ctr_gen_utility_pvt.put_line('Error from Create_Reading_Transaction...');
864 	 l_msg_index := 1;
865 	 FND_MSG_PUB.Count_And_Get
866 	      (p_count  =>  x_msg_count,
867 	       p_data   =>  x_msg_data
868 	      );
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 		csi_ctr_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
875 		l_msg_index := l_msg_index + 1;
876 		l_msg_count := l_msg_count - 1;
877 	 END LOOP;
878 	 RAISE FND_API.G_EXC_ERROR;
879       ELSE -- Transaction created successfully
880          X_COUNTER_GRP_LOG_ID := l_txn_rec.transaction_id;
881       END IF;
882    ELSE
883       X_COUNTER_GRP_LOG_ID := NULL;
884    END IF;
885    --
886    -- End of API body
887    --
888    -- Standard check for p_commit
889    IF FND_API.to_Boolean( p_commit )
890    THEN
891        COMMIT WORK;
892    END IF;
893    -- Standard call to get message count and if count is 1, get message info.
894    FND_MSG_PUB.Count_And_Get
895    (  p_count          =>   x_msg_count,
896       p_data           =>   x_msg_data
897    );
898 EXCEPTION
899    WHEN FND_API.G_EXC_ERROR THEN
900       ROLLBACK TO PRE_CAPTURE_READING_PUB;
901       x_return_status := FND_API.G_RET_STS_ERROR ;
902       FND_MSG_PUB.Count_And_Get
903             (p_count => x_msg_count ,
904              p_data => x_msg_data
905             );
906    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
907       ROLLBACK TO PRE_CAPTURE_READING_PUB;
908       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
909       FND_MSG_PUB.Count_And_Get
910              (p_count => x_msg_count ,
911               p_data => x_msg_data
912              );
913    WHEN OTHERS THEN
914       ROLLBACK TO PRE_CAPTURE_READING_PUB;
915       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
916       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
917          FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME ,l_api_name);
918       END IF;
919       FND_MSG_PUB.Count_And_Get
920             (p_count => x_msg_count ,
921              p_data => x_msg_data
922             );
923 END PRE_CAPTURE_CTR_READING;
924 --
925 PROCEDURE POST_CAPTURE_CTR_READING(
926     P_Api_Version_Number         IN   NUMBER,
927     P_Init_Msg_List              IN   VARCHAR2,
928     P_Commit                     IN   VARCHAR2,
929     p_validation_level           IN   NUMBER,
930     p_COUNTER_GRP_LOG_ID         IN   NUMBER,
931     P_READING_UPDATED            IN   VARCHAR2,
932     X_Return_Status              OUT  NOCOPY VARCHAR2,
933     X_Msg_Count                  OUT  NOCOPY NUMBER,
934     X_Msg_Data                   OUT  NOCOPY VARCHAR2
935     ) IS
936 BEGIN
937    x_return_status := FND_API.G_RET_STS_SUCCESS;
938 END POST_CAPTURE_CTR_READING;
939 --
940 PROCEDURE UPDATE_CTR_PROP_READING(
944     p_validation_level           IN   NUMBER,
941     p_api_version_number         IN   NUMBER,
942     p_init_msg_list              IN   VARCHAR2,
943     p_commit                     IN   VARCHAR2,
945     p_PROP_RDG_Rec               IN   PROP_RDG_Rec_Type,
946     p_COUNTER_GRP_LOG_ID         IN   NUMBER,
947     p_object_version_number      IN   NUMBER,
948     X_Return_Status              OUT  NOCOPY VARCHAR2,
949     X_Msg_Count                  OUT  NOCOPY NUMBER,
950     X_Msg_Data                   OUT  NOCOPY VARCHAR2
951     ) IS
952      l_api_name            CONSTANT  VARCHAR2(30)  := 'UPDATE_CTR_PROP_READING';
953      l_api_version_number  CONSTANT  NUMBER  := 1.0;
954 BEGIN
955    x_return_status := FND_API.G_RET_STS_SUCCESS;
956 END Update_CTR_Prop_Reading;
957 END CS_CTR_CAPTURE_READING_PUB;