[Home] [Help]
PACKAGE BODY: APPS.CSI_TRANSACTIONS_PVT
Source
1 PACKAGE BODY csi_transactions_pvt AS
2 /* $Header: csivtrxb.pls 120.3 2005/12/15 13:41:57 brmanesh noship $ */
3 -- start of comments
4 -- PACKAGE name : csi_transactions_pvt
5 -- purpose :
6 -- history :
7 -- note :
8 -- END of comments
9
10
11 g_pkg_name CONSTANT VARCHAR2(30):= 'csi_transactions_pvt';
12 g_file_name CONSTANT VARCHAR2(12) := 'csivtrxb.pls';
13
14 /* ---------------------------------------------------------------------------------- */
15 /* --- This local procedure is used to validate --- */
16 /* --- the transaction_id passed --- */
17 /* ---------------------------------------------------------------------------------- */
18
19 -- this procudure defines the columns for the dynamic sql.
20 PROCEDURE define_columns(
21 p_txnfind_rec IN csi_datastructures_pub.transaction_header_rec,
22 p_cur_get_transactions IN NUMBER
23 )
24 IS
25 BEGIN
26
27 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 1, p_txnfind_rec.transaction_id);
28 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 2, p_txnfind_rec.transaction_date);
29 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 3, p_txnfind_rec.source_transaction_date);
30 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 4, p_txnfind_rec.transaction_type_id);
31 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 5, p_txnfind_rec.source_group_ref_id);
32 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 6, p_txnfind_rec.source_group_ref,50);
33 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 7, p_txnfind_rec.source_header_ref_id );
34 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 8, p_txnfind_rec.source_header_ref,50);
35 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 9, p_txnfind_rec.source_line_ref_id);
36 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 10, p_txnfind_rec.source_line_ref,50);
37 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 11, p_txnfind_rec.source_dist_ref_id1);
38 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 12, p_txnfind_rec.source_dist_ref_id2);
39 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 13, p_txnfind_rec.inv_material_transaction_id);
40 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 14, p_txnfind_rec.transaction_quantity);
41 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 15, p_txnfind_rec.transaction_uom_code,3);
42 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 16, p_txnfind_rec.transacted_by);
43 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 17, p_txnfind_rec.transaction_status_code,30);
44 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 18, p_txnfind_rec.transaction_action_code,30);
45 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 19, p_txnfind_rec.message_id);
46 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 21, p_txnfind_rec.attribute1,150);
47 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 22, p_txnfind_rec.attribute2,150);
48 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 23, p_txnfind_rec.attribute3,150);
49 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 24, p_txnfind_rec.attribute4,150);
50 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 25, p_txnfind_rec.attribute5,150);
51 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 26, p_txnfind_rec.attribute6,150);
52 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 27, p_txnfind_rec.attribute7,150);
53 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 28, p_txnfind_rec.attribute8,150);
54 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 29, p_txnfind_rec.attribute9,150);
55 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 30, p_txnfind_rec.attribute10,150);
56 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 31, p_txnfind_rec.attribute11,150);
57 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 32, p_txnfind_rec.attribute12,150);
58 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 33, p_txnfind_rec.attribute13,150);
59 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 34, p_txnfind_rec.attribute14,150);
60 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 35, p_txnfind_rec.attribute15,150);
61 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 36, p_txnfind_rec.object_version_number);
62 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 37, p_txnfind_rec.txn_sub_type_id);
63 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 38, p_txnfind_rec.transaction_status_code,30);
64 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 39, p_txnfind_rec.split_reason_code,30);
65 DBMS_SQL.DEFINE_COLUMN(p_cur_get_transactions, 40, p_txnfind_rec.txn_user_id);
66 END define_columns;
67
68 -- This procudure gets column values by the dynamic sql.
69 PROCEDURE get_column_values(
70 p_cur_get_transactions IN NUMBER,
71 x_txnfind_rec OUT NOCOPY csi_datastructures_pub.transaction_header_rec
72 )
73 IS
74 BEGIN
75 -- get all column values for csi_transactions table
76 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 1, x_txnfind_rec.transaction_id);
77 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 2, x_txnfind_rec.transaction_date);
78 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 3, x_txnfind_rec.source_transaction_date);
79 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 4, x_txnfind_rec.transaction_type_id);
80 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 5, x_txnfind_rec.source_group_ref_id);
81 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 6, x_txnfind_rec.source_group_ref);
82 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 7, x_txnfind_rec.source_header_ref_id);
83 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 8, x_txnfind_rec.source_header_ref);
84 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 9, x_txnfind_rec.source_line_ref_id);
85 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 10, x_txnfind_rec.source_line_ref);
86 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 11, x_txnfind_rec.source_dist_ref_id1);
87 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 12, x_txnfind_rec.source_dist_ref_id2);
88 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 13, x_txnfind_rec.inv_material_transaction_id);
89 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 14, x_txnfind_rec.transaction_quantity);
90 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 15, x_txnfind_rec.transaction_uom_code);
91 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 16, x_txnfind_rec.transacted_by);
92 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 17, x_txnfind_rec.transaction_status_code);
93 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 18, x_txnfind_rec.transaction_action_code);
94 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 19, x_txnfind_rec.message_id);
95 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 21, x_txnfind_rec.attribute1);
96 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 22, x_txnfind_rec.attribute2);
97 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 23, x_txnfind_rec.attribute3);
98 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 24, x_txnfind_rec.attribute4);
99 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 25, x_txnfind_rec.attribute5);
100 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 26, x_txnfind_rec.attribute6);
101 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 27, x_txnfind_rec.attribute7);
102 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 28, x_txnfind_rec.attribute8);
103 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 29, x_txnfind_rec.attribute9);
104 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 30, x_txnfind_rec.attribute10);
105 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 31, x_txnfind_rec.attribute11);
106 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 32, x_txnfind_rec.attribute12);
107 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 33, x_txnfind_rec.attribute13);
108 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 34, x_txnfind_rec.attribute14);
109 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 35, x_txnfind_rec.attribute15);
110 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 36, x_txnfind_rec.object_version_number);
111 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 37, x_txnfind_rec.txn_sub_type_id);
112 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 38, x_txnfind_rec.transaction_status_code);
113 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 39, x_txnfind_rec.split_reason_code);
114 DBMS_SQL.COLUMN_VALUE(p_cur_get_transactions, 40, x_txnfind_rec.txn_user_id);
115 END get_column_values;
116
117
118 PROCEDURE gen_transactions_order_cl(
119 p_order_by_rec IN csi_datastructures_pub.transaction_sort_rec,
120 x_order_by_cl OUT NOCOPY VARCHAR2,
121 x_return_status OUT NOCOPY VARCHAR2,
122 x_msg_count OUT NOCOPY NUMBER,
123 x_msg_data OUT NOCOPY VARCHAR2
124 )
125 IS
126 l_order_by_cl VARCHAR2(1000) := NULL;
127 l_util_order_by_tbl util_order_by_tbl_type;
128 l_column VARCHAR2(30) :=fnd_api.g_miss_char;
129 BEGIN
130
131 IF p_order_by_rec.transaction_date = 'Y' THEN
132 l_column:=' transaction_date';
133 ELSIF p_order_by_rec.transaction_type_id = 'Y' THEN
134 l_column:=' transaction_type_id';
135 END IF;
136
137 IF l_column <> fnd_api.g_miss_char THEN
138 x_order_by_cl := ' order by' || l_column;
139 ELSE
140 x_order_by_cl :=l_order_by_cl;
141 END IF;
142
143 END gen_transactions_order_cl;
144
145 -- This procedure bind the variables for the dynamic sql
146 PROCEDURE bind(
147 p_txnfind_rec IN csi_datastructures_pub.transaction_query_rec,
148 p_cur_get_transactions IN NUMBER
149 )
150 IS
151 BEGIN
152 IF( (p_txnfind_rec.transaction_id IS NOT NULL) AND (p_txnfind_rec.transaction_id <> fnd_api.g_miss_num) )
153 THEN
154 dbms_sql.bind_variable(p_cur_get_transactions, 'transaction_id', p_txnfind_rec.transaction_id);
155 END IF;
156
157 IF( (p_txnfind_rec.transaction_type_id IS NOT NULL) AND (p_txnfind_rec.transaction_type_id <> fnd_api.g_miss_num) )
158 THEN
159 dbms_sql.bind_variable(p_cur_get_transactions, ':transaction_type_id', p_txnfind_rec.transaction_type_id);
160 END IF;
161
162 IF( (p_txnfind_rec.txn_sub_type_id IS NOT NULL) AND (p_txnfind_rec.txn_sub_type_id <> fnd_api.g_miss_num) )
163 THEN
164 dbms_sql.bind_variable(p_cur_get_transactions, ':txn_sub_type_id', p_txnfind_rec.txn_sub_type_id);
165 END IF;
166
167 IF( (p_txnfind_rec.source_group_ref_id IS NOT NULL) AND (p_txnfind_rec.source_group_ref_id<> fnd_api.g_miss_num) )
168 THEN
169 dbms_sql.bind_variable(p_cur_get_transactions, ':source_group_ref_id', p_txnfind_rec.source_group_ref_id);
170 END IF;
171
172 IF( (p_txnfind_rec.source_group_ref IS NOT NULL) AND (p_txnfind_rec.source_group_ref <> fnd_api.g_miss_char) )
173 THEN
174 dbms_sql.bind_variable(p_cur_get_transactions, ':source_group_ref', p_txnfind_rec.source_group_ref);
175 END IF;
176
177 IF( (p_txnfind_rec.source_header_ref_id IS NOT NULL) AND (p_txnfind_rec.source_header_ref_id <> fnd_api.g_miss_num) )
178 THEN
179 dbms_sql.bind_variable(p_cur_get_transactions, ':source_header_ref_id', p_txnfind_rec.source_header_ref_id);
180 END IF;
181
182 IF( (p_txnfind_rec.source_header_ref IS NOT NULL) AND (p_txnfind_rec.source_header_ref <> fnd_api.g_miss_char) )
183 THEN
184 dbms_sql.bind_variable(p_cur_get_transactions, ':source_header_ref', p_txnfind_rec.source_header_ref);
185 END IF;
186
187 IF( (p_txnfind_rec.source_line_ref_id IS NOT NULL) AND (p_txnfind_rec.source_line_ref_id <> fnd_api.g_miss_num) )
188 THEN
189 dbms_sql.bind_variable(p_cur_get_transactions, ':source_line_ref_id', p_txnfind_rec.source_line_ref_id);
190 END IF;
191
192 IF( (p_txnfind_rec.source_line_ref IS NOT NULL) AND (p_txnfind_rec.source_line_ref <> fnd_api.g_miss_char) )
193 THEN
194 dbms_sql.bind_variable(p_cur_get_transactions, ':source_line_ref', rtrim(ltrim(p_txnfind_rec.source_line_ref)));
195 END IF;
196
197 IF( (p_txnfind_rec.source_transaction_date IS NOT NULL) AND (p_txnfind_rec.source_transaction_date <> fnd_api.g_miss_date) )
198 THEN
199 dbms_sql.bind_variable(p_cur_get_transactions, ':source_txn_date', p_txnfind_rec.source_transaction_date);
200 END IF;
201
202 IF( (p_txnfind_rec.inv_material_transaction_id IS NOT NULL) AND (p_txnfind_rec.inv_material_transaction_id <> fnd_api.g_miss_num) )
203 THEN
204 dbms_sql.bind_variable(p_cur_get_transactions, ':inv_material_transaction_id', p_txnfind_rec.inv_material_transaction_id);
205 END IF;
206
207 IF( (p_txnfind_rec.message_id IS NOT NULL) AND (p_txnfind_rec.message_id <> fnd_api.g_miss_num) )
208 THEN
209 dbms_sql.bind_variable(p_cur_get_transactions, ':message_id', p_txnfind_rec.message_id);
210 END IF;
211
212 IF( (p_txnfind_rec.instance_id IS NOT NULL) AND (p_txnfind_rec.instance_id <> fnd_api.g_miss_num) )
213 THEN
214 dbms_sql.bind_variable(p_cur_get_transactions, ':instance_id', p_txnfind_rec.instance_id);
215 END IF;
216
217
218 IF( (p_txnfind_rec.transaction_start_date IS NOT NULL) AND (p_txnfind_rec.transaction_start_date <> fnd_api.g_miss_date) )
219 THEN
220 dbms_sql.bind_variable(p_cur_get_transactions, ':transaction_start_date', p_txnfind_rec.transaction_start_date);
221 END IF;
222
223
224 IF( (p_txnfind_rec.transaction_end_date IS NOT NULL) AND (p_txnfind_rec.transaction_end_date <> fnd_api.g_miss_date) )
225 THEN
226 dbms_sql.bind_variable(p_cur_get_transactions, ':transaction_end_date', p_txnfind_rec.transaction_end_date);
227 END IF;
228
229 IF( (p_txnfind_rec.transaction_status_code IS NOT NULL) AND (p_txnfind_rec.transaction_status_code <> fnd_api.g_miss_char) )
230 THEN
231 dbms_sql.bind_variable(p_cur_get_transactions, ':transaction_status_code', p_txnfind_rec.transaction_status_code);
232 END IF;
233
234 END bind;
235
236 /* ---------------------------------------------------------------------------------- */
237 /* --- When instance_id is passed then select from csi_inst_trx_details_v --- */
238 /* --- else from csi_transactions --- */
239 /* ---------------------------------------------------------------------------------- */
240
241 PROCEDURE gen_select(
242 p_txnfind_rec IN csi_datastructures_pub.transaction_query_rec,
243 x_select_cl OUT NOCOPY VARCHAR2
244 )
245 IS
246 l_table_name VARCHAR2(30);
247 BEGIN
248 IF ( (p_txnfind_rec.instance_id IS NOT NULL) AND (p_txnfind_rec.instance_id <> fnd_api.g_miss_num) ) THEN
249 l_table_name:='csi_inst_trx_details_v';
250 ELSE
251 l_table_name:='csi_transactions';
252 END IF;
253
254 x_select_cl := 'SELECT transaction_id,transaction_date, source_transaction_date, '||
255 'transaction_type_id, source_group_ref_id, source_group_ref, source_header_ref_id, '||
256 'source_header_ref, source_line_ref_id, source_line_ref, source_dist_ref_id1, '||
257 'source_dist_ref_id2, inv_material_transaction_id, transaction_quantity, '||
258 'transaction_uom_code, transacted_by, transaction_status_code, '||
259 'transaction_action_code, message_id, context, attribute1, attribute2, attribute3, '||
260 'attribute4, attribute5, attribute6, attribute7, attribute8, attribute9, attribute10, '||
261 'attribute11, attribute12, attribute13, attribute14, attribute15, '||
262 'object_version_number, txn_sub_type_id, transaction_status_code, split_reason_code, '||
263 'last_updated_by FROM '||l_table_name;
264
265 END gen_select;
266
267
268 PROCEDURE gen_transactions_where(
269 p_txnfind_rec IN csi_datastructures_pub.transaction_query_rec,
270 x_transactions_where OUT NOCOPY VARCHAR2
271 )
272 IS
273 -- cursors to check if wildcard values '%' and '_' have been passed
274 -- as item values
275 CURSOR c_chk_str1(p_rec_item VARCHAR2) IS
276 SELECT instr(p_rec_item, '%', 1, 1)
277 FROM dual;
278 CURSOR c_chk_str2(p_rec_item VARCHAR2) IS
279 SELECT instr(p_rec_item, '_', 1, 1)
280 FROM dual;
281
282 -- return values from cursors
283 str_csr1 NUMBER;
284 str_csr2 NUMBER;
285 i NUMBER ;
286 l_operator VARCHAR2(10);
287
288 BEGIN
289
290
291 IF( (p_txnfind_rec.transaction_id IS NOT NULL) AND (p_txnfind_rec.transaction_id <> fnd_api.g_miss_num) )
292 THEN
293
294 IF(x_transactions_where IS NULL) THEN
295 x_transactions_where := ' WHERE ';
296 ELSE
297 x_transactions_where := x_transactions_where || ' AND ';
298 END IF;
299 x_transactions_where := x_transactions_where || 'transaction_id = :transaction_id';
300 END IF;
301
302 IF( (p_txnfind_rec.transaction_type_id IS NOT NULL) AND (p_txnfind_rec.transaction_type_id <> fnd_api.g_miss_num) )
303 THEN
304
305 IF(x_transactions_where IS NULL) THEN
306 x_transactions_where := ' WHERE ';
307 ELSE
308 x_transactions_where := x_transactions_where || ' AND ';
309 END IF;
310 x_transactions_where := x_transactions_where || 'transaction_type_id = :transaction_type_id';
311 END IF;
312
313 IF( (p_txnfind_rec.txn_sub_type_id IS NOT NULL) AND (p_txnfind_rec.txn_sub_type_id <> fnd_api.g_miss_num) )
314 THEN
315
316 IF(x_transactions_where IS NULL) THEN
317 x_transactions_where := ' WHERE ';
318 ELSE
319 x_transactions_where := x_transactions_where || ' AND ';
320 END IF;
321 x_transactions_where := x_transactions_where || 'txn_sub_type_id = :txn_sub_type_id';
322 END IF;
323
324 IF( (p_txnfind_rec.source_group_ref_id IS NOT NULL) AND (p_txnfind_rec.source_group_ref_id <> fnd_api.g_miss_num) )
325 THEN
326
327
328 IF(x_transactions_where IS NULL) THEN
329 x_transactions_where := ' WHERE ';
330 ELSE
331 x_transactions_where := x_transactions_where || ' AND ';
332 END IF;
333 x_transactions_where := x_transactions_where || 'source_group_ref_id = :source_group_ref_id';
334 END IF;
335
336 IF( (p_txnfind_rec.source_group_ref IS NOT NULL) AND (p_txnfind_rec.source_group_ref <> fnd_api.g_miss_char) )
337 THEN
338
339 i:=0;
340 -- check if item value contains '%' wildcard
341 OPEN c_chk_str1(p_txnfind_rec.source_group_ref);
342 FETCH c_chk_str1 INTO str_csr1;
343 CLOSE c_chk_str1;
344
345 IF(str_csr1 <> 0) THEN
346
347 l_operator := ' LIKE ';
348 i:=1;
349 ELSE
350
351 l_operator := ' = ';
352 END IF;
353 IF i=0 THEN
354 -- check if item value contains '_' wildcard
355 OPEN c_chk_str2(p_txnfind_rec.source_group_ref);
356 FETCH c_chk_str2 INTO str_csr2;
357 CLOSE c_chk_str2;
358
359 IF(str_csr2 <> 0) THEN
360
361 l_operator := ' LIKE ';
362 ELSE
363
364 l_operator := ' = ';
365 END IF;
366 END IF;
367 IF(x_transactions_where IS NULL) THEN
368 x_transactions_where := ' WHERE ';
369 ELSE
370 x_transactions_where := x_transactions_where || ' AND ';
371 END IF;
372 x_transactions_where := x_transactions_where || 'source_group_ref ' || l_operator || ' :source_group_ref';
373 END IF;
374
375
376 IF( (p_txnfind_rec.source_header_ref_id IS NOT NULL) AND (p_txnfind_rec.source_header_ref_id <> fnd_api.g_miss_num) )
377 THEN
378
379
380 IF(x_transactions_where IS NULL) THEN
381 x_transactions_where := ' WHERE ';
382 ELSE
383 x_transactions_where := x_transactions_where || ' AND ';
384 END IF;
385 x_transactions_where := x_transactions_where || 'source_header_ref_id = :source_header_ref_id';
386 END IF;
387
388 IF( (p_txnfind_rec.source_header_ref IS NOT NULL) AND (p_txnfind_rec.source_header_ref <> fnd_api.g_miss_char) )
389 THEN
390 i:=0;
391 -- check if item value contains '%' wildcard
392 OPEN c_chk_str1(p_txnfind_rec.source_header_ref);
393 FETCH c_chk_str1 INTO str_csr1;
394 CLOSE c_chk_str1;
395
396 IF(str_csr1 <> 0) THEN
397 l_operator := ' LIKE ';
398 i:=1;
399 ELSE
400 l_operator := ' = ';
401 END IF;
402 IF i=0 THEN
403 -- check if item value contains '_' wildcard
404 OPEN c_chk_str2(p_txnfind_rec.source_header_ref);
405 FETCH c_chk_str2 INTO str_csr2;
406 CLOSE c_chk_str2;
407
408 IF(str_csr2 <> 0) THEN
409 l_operator := ' LIKE ';
410 ELSE
411 l_operator := ' = ';
412 END IF;
413 END IF;
414 IF(x_transactions_where IS NULL) THEN
415 x_transactions_where := ' WHERE ';
416 ELSE
417 x_transactions_where := x_transactions_where || ' AND ';
418 END IF;
419 x_transactions_where := x_transactions_where || 'source_header_ref ' || l_operator || ' :source_header_ref';
420 END IF;
421
422
423
424 IF( (p_txnfind_rec.source_line_ref_id IS NOT NULL) AND (p_txnfind_rec.source_line_ref_id <> fnd_api.g_miss_num) )
425 THEN
426
427 IF(x_transactions_where IS NULL) THEN
428 x_transactions_where := ' WHERE ';
429 ELSE
430 x_transactions_where := x_transactions_where || ' AND ';
431 END IF;
432 x_transactions_where := x_transactions_where || 'source_line_ref_id = :source_line_ref_id';
433 END IF;
434
435 IF( (p_txnfind_rec.source_line_ref IS NOT NULL) AND (p_txnfind_rec.source_line_ref <> fnd_api.g_miss_char) )
436 THEN
437 i:=0;
438 -- check if item value contains '%' wildcard
439 OPEN c_chk_str1(p_txnfind_rec.source_line_ref);
440 FETCH c_chk_str1 INTO str_csr1;
441 CLOSE c_chk_str1;
442
443 IF(str_csr1 <> 0) THEN
444 l_operator := ' LIKE ';
445 i:=1;
446 ELSE
447 l_operator := ' = ';
448 END IF;
449 IF i=0 THEN
450 -- check if item value contains '_' wildcard
451 OPEN c_chk_str2(p_txnfind_rec.source_line_ref);
452 FETCH c_chk_str2 INTO str_csr2;
453 CLOSE c_chk_str2;
454
455 IF(str_csr2 <> 0) THEN
456 l_operator := ' LIKE ';
457 ELSE
458 l_operator := ' = ';
459 END IF;
460 END IF;
461 IF(x_transactions_where IS NULL) THEN
462 x_transactions_where := ' WHERE ';
463 ELSE
464 x_transactions_where := x_transactions_where || ' AND ';
465 END IF;
466 x_transactions_where := x_transactions_where || 'source_line_ref ' || l_operator || ' :source_line_ref';
467 END IF;
468
469 IF( (p_txnfind_rec.source_transaction_date IS NOT NULL) AND (p_txnfind_rec.source_transaction_date <> fnd_api.g_miss_date) )
470 THEN
471 i:=0;
472 -- check if item value contains '%' wildcard
473 OPEN c_chk_str1(p_txnfind_rec.source_transaction_date);
474 FETCH c_chk_str1 INTO str_csr1;
475 CLOSE c_chk_str1;
476
477 IF(str_csr1 <> 0) THEN
478 l_operator := ' LIKE ';
479 i:=1;
480 ELSE
481 l_operator := ' = ';
482 END IF;
483
484 -- check if item value contains '_' wildcard
485 OPEN c_chk_str2(p_txnfind_rec.source_transaction_date);
486 FETCH c_chk_str2 INTO str_csr2;
487 CLOSE c_chk_str2;
488 IF i=0 THEN
489 IF(str_csr2 <> 0) THEN
490 l_operator := ' LIKE ';
491 ELSE
492 l_operator := ' = ';
493 END IF;
494 END IF;
495 IF(x_transactions_where IS NULL) THEN
496 x_transactions_where := ' WHERE ';
497 ELSE
498 x_transactions_where := x_transactions_where || ' AND ';
499 END IF;
500 -- bug 4349049 x_transactions_where := x_transactions_where || 'trunc(source_transaction_date) ' || l_operator || ' trunc(:source_txn_date)';
501 IF l_operator = ' LIKE ' THEN
502 x_transactions_where := x_transactions_where || 'trunc(source_transaction_date) ' || l_operator || ' trunc(:source_txn_date) ';
503 ELSE
504 x_transactions_where := x_transactions_where || 'source_transaction_date between :source_txn_date and :source_txn_date+1 ';
505 END IF;
506 END IF;
507
508
509 IF( (p_txnfind_rec.inv_material_transaction_id IS NOT NULL) AND (p_txnfind_rec.inv_material_transaction_id <> fnd_api.g_miss_num) )
510 THEN
511
512 IF(x_transactions_where IS NULL) THEN
513 x_transactions_where := ' WHERE ';
514 ELSE
515 x_transactions_where := x_transactions_where || ' AND ';
516 END IF;
517 x_transactions_where := x_transactions_where || 'inv_material_transaction_id = :inv_material_transaction_id';
518 END IF;
519
520 IF( (p_txnfind_rec.message_id IS NOT NULL) AND (p_txnfind_rec.message_id <> fnd_api.g_miss_num) )
521 THEN
522
523 IF(x_transactions_where IS NULL) THEN
524 x_transactions_where := ' WHERE ';
525 ELSE
526 x_transactions_where := x_transactions_where || ' AND ';
527 END IF;
528 x_transactions_where := x_transactions_where || 'message_id = :message_id';
529 END IF;
530
531
532 IF( (p_txnfind_rec.transaction_start_date IS NOT NULL) AND (p_txnfind_rec.transaction_start_date <> fnd_api.g_miss_date) )
533 THEN
534 IF ( (p_txnfind_rec.transaction_end_date IS NOT NULL) AND (p_txnfind_rec.transaction_end_date <> fnd_api.g_miss_date) )
535 THEN
536 i:=0;
537 IF(x_transactions_where IS NULL) THEN
538 x_transactions_where := ' WHERE ';
539 ELSE
540 x_transactions_where := x_transactions_where || ' AND ';
541 END IF;
542 x_transactions_where := x_transactions_where || ' transaction_date between :transaction_start_date AND :transaction_end_date ';
543 ELSE
544 IF(x_transactions_where IS NULL) THEN
545 x_transactions_where := ' WHERE ';
546 ELSE
547 x_transactions_where := x_transactions_where || ' AND ';
548 END IF;
549 -- bug 4349049 x_transactions_where := x_transactions_where || 'trunc(transaction_date) ' || l_operator || ' trunc(:transaction_start_date)';
550 x_transactions_where := x_transactions_where || 'transaction_date between :transaction_start_date and :transaction_start_date+1 ';
551 END IF;
552 END IF;
553
554 IF( (p_txnfind_rec.instance_id IS NOT NULL) AND (p_txnfind_rec.instance_id <> fnd_api.g_miss_num) )
555 THEN
556
557 IF(x_transactions_where IS NULL) THEN
558 x_transactions_where := ' WHERE ';
559 ELSE
560 x_transactions_where := x_transactions_where || ' AND ';
561 END IF;
562 x_transactions_where := x_transactions_where || 'instance_id = :instance_id';
563 END IF;
564
565 IF( (p_txnfind_rec.transaction_status_code IS NOT NULL) AND (p_txnfind_rec.transaction_status_code <> fnd_api.g_miss_char) )
566 THEN
567 i:=0;
568 -- check if item value contains '%' wildcard
569 OPEN c_chk_str1(p_txnfind_rec.transaction_status_code);
570 FETCH c_chk_str1 INTO str_csr1;
571 CLOSE c_chk_str1;
572
573 IF(str_csr1 <> 0) THEN
574 l_operator := ' LIKE ';
575 i:=1;
576 ELSE
577 l_operator := ' = ';
578 END IF;
579 IF i=0 THEN
580 -- check if item value contains '_' wildcard
581 OPEN c_chk_str2(p_txnfind_rec.transaction_status_code);
582 FETCH c_chk_str2 INTO str_csr2;
583 CLOSE c_chk_str2;
584
585 IF(str_csr2 <> 0) THEN
586 l_operator := ' LIKE ';
587 ELSE
588 l_operator := ' = ';
589 END IF;
590 END IF;
591 IF(x_transactions_where IS NULL) THEN
592 x_transactions_where := ' WHERE ';
593 ELSE
594 x_transactions_where := x_transactions_where || ' AND ';
595 END IF;
596 x_transactions_where := x_transactions_where || 'transaction_status_code ' || l_operator || ' :transaction_status_code';
597 END IF;
598 END gen_transactions_where;
599
600 PROCEDURE get_transactions(
601 p_api_version_number IN NUMBER,
602 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
603 p_commit IN VARCHAR2 := fnd_api.g_false,
604 p_validation_level IN NUMBER := fnd_api.g_valid_level_full,
605 p_txnfind_rec IN csi_datastructures_pub.transaction_query_rec ,
606 p_rec_requested IN NUMBER := g_default_num_rec_fetch,
607 p_start_rec_prt IN NUMBER := 1,
608 p_return_tot_count IN VARCHAR2 := fnd_api.g_false,
609 p_order_by_rec IN csi_datastructures_pub.transaction_sort_rec,
610 x_return_status OUT NOCOPY VARCHAR2,
611 x_msg_count OUT NOCOPY NUMBER,
612 x_msg_data OUT NOCOPY VARCHAR2,
613 x_transaction_tbl OUT NOCOPY csi_datastructures_pub.transaction_header_tbl,
614 x_returned_rec_count OUT NOCOPY NUMBER,
615 x_next_rec_ptr OUT NOCOPY NUMBER,
616 x_tot_rec_count OUT NOCOPY NUMBER
617 )
618
619 IS
620 l_api_name CONSTANT VARCHAR2(30) := 'get_transactions';
621 l_api_version_number CONSTANT NUMBER := 1.0;
622 l_returned_rec_count NUMBER := 0; -- number of records returned in x_txnfind_rec
623 l_next_record_ptr NUMBER := 1;
624 l_ignore NUMBER;
625 -- total number of records accessable by caller
626 l_tot_rec_count NUMBER := 0;
627 l_tot_rec_amount NUMBER := 0;
628 -- status local variables
629 l_return_status VARCHAR2(1); -- return value from procedures
630 l_return_status_full VARCHAR2(1); -- calculated return status from
631 -- dynamic sql statement elements
632 l_cur_get_transactions NUMBER;
633 l_select_cl VARCHAR2(2000) := '';
634 l_order_by_cl VARCHAR2(2000);
635 l_transactions_where VARCHAR2(2000) := '';
636 -- local scratch record
637 l_transaction_rec csi_datastructures_pub.transaction_query_rec;
638 l_crit_transaction_rec csi_datastructures_pub.transaction_query_rec :=p_txnfind_rec;
639
640 l_txn_rec csi_datastructures_pub.transaction_header_rec;
641 l_def_transaction_rec csi_datastructures_pub.transaction_header_rec;
642 l_debug_level NUMBER;
643
644
645 BEGIN
646
647 -- standard start of api savepoint
648 IF fnd_api.to_boolean(p_commit)
649 THEN
650 SAVEPOINT get_transactions_pvt;
651 END IF;
652
653 -- standard call to check for call compatibility.
654 IF NOT fnd_api.compatible_api_call ( l_api_version_number,
655 p_api_version_number,
656 l_api_name,
657 g_pkg_name)
658 THEN
659 RAISE fnd_api.g_exc_unexpected_error;
660 END IF;
661
662
663 -- initialize message list if p_init_msg_list is set to true.
664 IF fnd_api.to_boolean( p_init_msg_list )
665 THEN
666 fnd_msg_pub.initialize;
667 END IF;
668
669
670 -- initialize api return status to success
671 x_return_status := fnd_api.g_ret_sts_success;
672
673 l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
674 IF (l_debug_level > 0) THEN
675 CSI_gen_utility_pvt.put_line( 'get_transactions');
676 END IF;
677
678 IF (l_debug_level > 1) THEN
679
680 CSI_gen_utility_pvt.put_line(
681 p_api_version_number ||'-'||
682 p_init_msg_list ||'-'||
683 p_commit ||'-'||
684 p_validation_level ||'-'||
685 p_rec_requested ||'-'||
686 p_start_rec_prt ||'-'||
687 p_return_tot_count
688 );
689
690 csi_gen_utility_pvt.dump_txn_query_rec(p_txnfind_rec);
691 csi_gen_utility_pvt.dump_txn_sort_rec(p_order_by_rec);
692
693
694 END IF;
695
696
697
698 --
699 -- api BODY
700 --
701 -- *************************************************
702 -- generate dynamic sql based on criteria passed in.
703
704 IF( ((p_txnfind_rec.transaction_id IS NULL) OR (p_txnfind_rec.transaction_id = fnd_api.g_miss_num))
705 AND ((p_txnfind_rec.transaction_type_id IS NULL) OR (p_txnfind_rec.transaction_type_id = fnd_api.g_miss_num))
706 AND ((p_txnfind_rec.txn_sub_type_id IS NULL) OR (p_txnfind_rec.txn_sub_type_id = fnd_api.g_miss_num))
707 AND ((p_txnfind_rec.source_group_ref_id IS NULL) OR (p_txnfind_rec.source_group_ref_id = fnd_api.g_miss_num))
708 AND ((p_txnfind_rec.source_group_ref IS NULL) OR (p_txnfind_rec.source_group_ref = fnd_api.g_miss_char))
709 AND ((p_txnfind_rec.source_header_ref_id IS NULL) OR (p_txnfind_rec.source_header_ref_id = fnd_api.g_miss_num))
710 AND ((p_txnfind_rec.source_header_ref IS NULL) OR (p_txnfind_rec.source_header_ref = fnd_api.g_miss_char))
711 AND ((p_txnfind_rec.source_line_ref_id IS NULL) OR (p_txnfind_rec.source_line_ref_id = fnd_api.g_miss_num))
712 AND ((p_txnfind_rec.source_line_ref IS NULL) OR (p_txnfind_rec.source_line_ref = fnd_api.g_miss_char))
713 AND ((p_txnfind_rec.source_transaction_date IS NULL) OR (p_txnfind_rec.source_transaction_date = fnd_api.g_miss_date))
714 AND ((p_txnfind_rec.inv_material_transaction_id IS NULL) OR (p_txnfind_rec.inv_material_transaction_id = fnd_api.g_miss_num))
715 AND ((p_txnfind_rec.message_id IS NULL) OR (p_txnfind_rec.message_id = fnd_api.g_miss_num))
716 AND ((p_txnfind_rec.instance_id IS NULL) OR (p_txnfind_rec.instance_id = fnd_api.g_miss_num))
717 AND ((p_txnfind_rec.transaction_start_date IS NULL) OR (p_txnfind_rec.transaction_start_date = fnd_api.g_miss_date))
718 AND ((p_txnfind_rec.transaction_end_date IS NULL) OR (p_txnfind_rec.transaction_end_date = fnd_api.g_miss_date))
719 AND ((p_txnfind_rec.transaction_status_code IS NULL) OR (p_txnfind_rec.transaction_status_code = fnd_api.g_miss_char))
720
721 ) THEN
722 fnd_message.set_name('CSI', 'CSI_INVALID_PARAMETERS');
723 fnd_msg_pub.add;
724 x_return_status := fnd_api.g_ret_sts_error;
725 RAISE fnd_api.g_exc_error;
726 END IF;
727 x_tot_rec_count:=l_tot_rec_count;
728 x_returned_rec_count:=l_returned_rec_count;
729 gen_select(l_crit_transaction_rec,l_select_cl);
730 gen_transactions_where(l_crit_transaction_rec, l_transactions_where);
731 gen_transactions_order_cl(p_order_by_rec, l_order_by_cl, l_return_status, x_msg_count, x_msg_data);
732
733 IF dbms_sql.is_open(l_cur_get_transactions) THEN
734 dbms_sql.close_cursor(l_cur_get_transactions);
735 END IF;
736
737 l_cur_get_transactions := dbms_sql.open_cursor;
738 dbms_sql.parse(l_cur_get_transactions, l_select_cl|| l_transactions_where || l_order_by_cl , dbms_sql.native);
739 bind(l_crit_transaction_rec, l_cur_get_transactions);
740 define_columns(l_def_transaction_rec, l_cur_get_transactions);
741 l_ignore := dbms_sql.execute(l_cur_get_transactions);
742
743 LOOP
744
745 IF((dbms_sql.fetch_rows(l_cur_get_transactions)>0) AND ((p_return_tot_count = fnd_api.g_true)
746 OR (l_returned_rec_count<p_rec_requested) OR (p_rec_requested=fnd_api.g_miss_num)))
747 THEN
748 get_column_values(l_cur_get_transactions, l_txn_rec);
749 l_tot_rec_count := l_tot_rec_count + 1;
750 x_tot_rec_count := l_tot_rec_count;
751 IF(l_returned_rec_count < p_rec_requested) AND (l_tot_rec_count >= p_start_rec_prt) THEN
752 l_returned_rec_count := l_returned_rec_count + 1;
753 x_returned_rec_count := l_returned_rec_count;
754
755 -- defaulting the transaction user name added by brmanesh
756 BEGIN
757
758 SELECT user_name
759 INTO l_txn_rec.txn_user_name
760 FROM fnd_user
761 WHERE user_id = l_txn_rec.txn_user_id;
762
763 EXCEPTION
764 WHEN others THEN
765 l_txn_rec.txn_user_name := NULL;
766 END;
767
768 -- resolved the foreign key columns: Bug# 2136312 - 12/18/01 rtalluri
769 BEGIN
770
771 SELECT source_txn_type_name
772 INTO l_txn_rec.transaction_type_name
773 FROM csi_txn_types
774 WHERE transaction_type_id = l_txn_rec.transaction_type_id;
775
776 EXCEPTION
777 WHEN others THEN
778 l_txn_rec.transaction_type_name := NULL;
779 END;
780
781 BEGIN
782
783 SELECT name
784 INTO l_txn_rec.txn_sub_type_name
785 FROM csi_txn_sub_types
786 WHERE transaction_type_id = l_txn_rec.transaction_type_id
787 AND sub_type_id = l_txn_rec.txn_sub_type_id;
788
789 EXCEPTION
790 WHEN others THEN
791 l_txn_rec.txn_sub_type_name := NULL;
792 END;
793
794 BEGIN
795
796 SELECT application_name
797 INTO l_txn_rec.source_application_name
798 FROM fnd_application_vl
799 WHERE application_id IN (SELECT source_application_id
800 FROM csi_txn_types
801 WHERE transaction_type_id = l_txn_rec.transaction_type_id);
802
803 EXCEPTION
804 WHEN others THEN
805 l_txn_rec.source_application_name := NULL;
806 END;
807
808 BEGIN
809 SELECT meaning
810 INTO l_txn_rec.transaction_status_name
811 FROM csi_lookups
812 WHERE lookup_code = l_txn_rec.transaction_status_code
813 AND lookup_type = 'CSI_TRANSACTION_STATUS_CODE';
814 EXCEPTION
815 WHEN others THEN
816 l_txn_rec.transaction_status_name := NULL;
817 END;
818
819 x_transaction_tbl(l_returned_rec_count) :=l_txn_rec;
820 END IF;
821 ELSE
822 EXIT;
823 END IF;
824 END LOOP;
825 --
826 -- end of api body
827 --
828 dbms_sql.close_cursor(l_cur_get_transactions);
829
830 -- standard call to get message count and if count is 1, get message info.
831 fnd_msg_pub.count_and_get
832 ( p_count => x_msg_count,
833 p_data => x_msg_data
834 );
835 EXCEPTION
836 WHEN fnd_api.g_exc_error THEN
837 IF fnd_api.to_boolean(p_commit)
838 THEN
839 ROLLBACK TO get_transactions_pvt;
840 END IF;
841 x_return_status := fnd_api.g_ret_sts_error ;
842 fnd_msg_pub.count_and_get
843 (p_count => x_msg_count ,
844 p_data => x_msg_data
845 );
846
847 WHEN fnd_api.g_exc_unexpected_error THEN
848 IF fnd_api.to_boolean(p_commit)
849 THEN
850 ROLLBACK TO get_transactions_pvt;
851 END IF;
852 x_return_status := fnd_api.g_ret_sts_unexp_error ;
853 fnd_msg_pub.count_and_get
854 (p_count => x_msg_count ,
855 p_data => x_msg_data
856 );
857
858 WHEN OTHERS THEN
859 IF fnd_api.to_boolean(p_commit)
860 THEN
861 ROLLBACK TO get_transactions_pvt;
862 END IF;
863 x_return_status := fnd_api.g_ret_sts_unexp_error ;
864 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
865 fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
866 END IF;
867 fnd_msg_pub.count_and_get
868 ( p_count => x_msg_count ,
869 p_data => x_msg_data
870 );
871 END get_transactions;
872
873 /* ---------------------------------------------------------------------------------- */
874 /* --- This local procedure is used to validate --- */
875 /* --- the transaction_id passed --- */
876 /* ---------------------------------------------------------------------------------- */
877
878 PROCEDURE validate_transaction_id (
879 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
880 p_validation_mode IN VARCHAR2,
881 p_transaction_id IN NUMBER,
882 x_return_status OUT NOCOPY VARCHAR2,
883 x_msg_count OUT NOCOPY NUMBER,
884 x_msg_data OUT NOCOPY VARCHAR2
885 );
886
887 /* ---------------------------------------------------------------------------------- */
888 /* --- This local procedure is used to validate --- */
889 /* --- the transaction_date passed --- */
890 /* ---------------------------------------------------------------------------------- */
891
892
893
894 PROCEDURE validate_s_transaction_date (
895 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
896 p_source_transaction_date IN DATE,
897 x_return_status OUT NOCOPY VARCHAR2,
898 x_msg_count OUT NOCOPY NUMBER,
899 x_msg_data OUT NOCOPY VARCHAR2
900 );
901
902 /* ---------------------------------------------------------------------------------- */
903 /* --- This local procedure is used to validate --- */
904 /* --- the transaction_type_id passed --- */
905 /* ---------------------------------------------------------------------------------- */
906
907 PROCEDURE validate_transaction_type_id (
908 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
909 p_transaction_type_id IN NUMBER,
910 x_return_status OUT NOCOPY VARCHAR2,
911 x_msg_count OUT NOCOPY NUMBER,
912 x_msg_data OUT NOCOPY VARCHAR2
913 );
914
915 /* --------------------------------------------------------------------------------- */
916 /* --- This local procedure is used to validate --- */
917 /* --- the object_version_number passed --- */
918 /* --------------------------------------------------------------------------------- */
919
920 PROCEDURE validate_object_version_num (
921 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
922 p_validation_mode IN VARCHAR2,
923 p_object_version_number IN NUMBER,
924 x_return_status OUT NOCOPY VARCHAR2,
925 x_msg_count OUT NOCOPY NUMBER,
926 x_msg_data OUT NOCOPY VARCHAR2
927 );
928
929 /* ---------------------------------------------------------------------------------- */
930 /* --- This local procedure is used to validate --- */
931 /* --- the transaction_type_id passed --- */
932 /* ---------------------------------------------------------------------------------- */
933
934 PROCEDURE validate_source_object (
935 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
936 p_transaction_type_id IN NUMBER,
937 p_source_line_ref_id IN NUMBER,
938 x_return_status OUT NOCOPY VARCHAR2,
939 x_msg_count OUT NOCOPY NUMBER,
940 x_msg_data OUT NOCOPY VARCHAR2
941 );
942
943 /* ---------------------------------------------------------------------------------- */
944 /* --- This local procedure is used to validate --- */
945 /* --- the split_reason_code passed --- */
946 /* ---------------------------------------------------------------------------------- */
947
948
949 PROCEDURE validate_split_code (
950 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
951 p_split_reason_code IN VARCHAR2,
952 x_return_status OUT NOCOPY VARCHAR2,
953 x_msg_count OUT NOCOPY NUMBER ,
954 x_msg_data OUT NOCOPY VARCHAR2
955 );
956
957
958 /* ---------------------------------------------------------------------------------- */
959 /* --- This local procedure is used to validate --- */
960 /* --- the transactions for the parameters passed --- */
961 /* ---------------------------------------------------------------------------------- */
962
963
964 PROCEDURE validate_transactions(
965 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
966 p_validation_level IN NUMBER := fnd_api.g_valid_level_full,
967 p_validation_mode IN VARCHAR2,
968 p_transaction_rec IN csi_datastructures_pub.transaction_rec,
969 x_return_status OUT NOCOPY VARCHAR2,
970 x_msg_count OUT NOCOPY NUMBER,
971 x_msg_data OUT NOCOPY VARCHAR2
972 );
973
974 /* ---------------------------------------------------------------------------------- */
975 /* --- This procedure is used to create transactions --- */
976 /* --- and call table handler after performing all the validations --- */
977 /* ---------------------------------------------------------------------------------- */
978
979
980 PROCEDURE create_transaction(
981 p_api_version IN NUMBER,
982 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
983 p_commit IN VARCHAR2 := fnd_api.g_false,
984 p_validation_level IN NUMBER := fnd_api.g_valid_level_full,
985 p_success_if_exists_flag IN VARCHAR2 := 'N',
986 p_transaction_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec ,
987 x_return_status OUT NOCOPY VARCHAR2,
988 x_msg_count OUT NOCOPY NUMBER,
989 x_msg_data OUT NOCOPY VARCHAR2
990 )
991
992 IS
993 l_api_name CONSTANT VARCHAR2(30) := 'create_transaction';
994 l_api_version CONSTANT NUMBER := 1.0;
995 l_transaction_date DATE; -- local variable for sysdate
996 l_return_status_full VARCHAR2(1);
997 l_access_flag VARCHAR2(1);
998 l_dummy VARCHAR2(1);
999 l_create_flag VARCHAR2(1):='Y';
1000 l_debug_level NUMBER;
1001
1002 BEGIN
1003
1004 -- standard start of api savepoint
1005 IF fnd_api.to_boolean(p_commit)
1006 THEN
1007 SAVEPOINT create_transactions_pvt;
1008 END IF;
1009
1010 -- standard call to check for call compatibility.
1011 IF NOT fnd_api.compatible_api_call ( l_api_version,
1012 p_api_version,
1013 l_api_name,
1014 g_pkg_name)
1015 THEN
1016 RAISE fnd_api.g_exc_unexpected_error;
1017 END IF;
1018
1019
1020 -- initialize message list if p_init_msg_list is set to true.
1021 IF fnd_api.to_boolean( p_init_msg_list )
1022 THEN
1023 fnd_msg_pub.initialize;
1024 END IF;
1025
1026
1027 -- initialize api return status to success
1028 x_return_status := fnd_api.g_ret_sts_success;
1029
1030 l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
1031 IF (l_debug_level > 0) THEN
1032 CSI_gen_utility_pvt.put_line( 'create_transaction');
1033 END IF;
1034
1035 IF (l_debug_level > 1) THEN
1036 CSI_gen_utility_pvt.put_line(
1037 p_api_version ||'-'||
1038 p_init_msg_list ||'-'||
1039 p_commit ||'-'||
1040 p_validation_level ||'-'||
1041 p_success_if_exists_flag
1042 );
1043 csi_gen_utility_pvt.dump_txn_rec(p_transaction_rec);
1044
1045
1046 END IF;
1047 --
1048 -- api body
1049 --
1050
1051 IF p_success_if_exists_flag ='Y' THEN
1052 /* If success flag is Y then */
1053 IF ((p_transaction_rec.transaction_id IS NOT NULL) AND
1054 (p_transaction_rec.transaction_id <> fnd_api.g_miss_num)) THEN
1055 /* If success flag is Y then check for id if present return success */
1056
1057 BEGIN
1058 SELECT 'x'
1059 INTO l_dummy
1060 FROM csi_transactions
1061 WHERE transaction_id=p_transaction_rec.transaction_id
1062 AND rownum=1;
1063 IF SQL%FOUND THEN
1064 x_return_status := fnd_api.g_ret_sts_success;
1065 l_create_flag :='N';
1066 END IF;
1067
1068 EXCEPTION WHEN no_data_found THEN
1069 /* If success flag is Y then if passed id not found then proceed with validations */
1070 validate_transactions(
1071 p_init_msg_list => fnd_api.g_false,
1072 p_validation_level => p_validation_level,
1073 p_validation_mode => 'CREATE',
1074 p_transaction_rec => p_transaction_rec,
1075 x_return_status => x_return_status,
1076 x_msg_count => x_msg_count,
1077 x_msg_data => x_msg_data);
1078 END;
1079 ELSE
1080 /* If success flag is Y then if id not passed proceed with validations */
1081 validate_transactions(
1082 p_init_msg_list => fnd_api.g_false,
1083 p_validation_level => p_validation_level,
1084 p_validation_mode => 'CREATE',
1085 p_transaction_rec => p_transaction_rec,
1086 x_return_status => x_return_status,
1087 x_msg_count => x_msg_count,
1088 x_msg_data => x_msg_data);
1089 END IF;
1090 ELSE
1091
1092 /* If success flag is 'N' then if id passed already exists then return error mesg */
1093
1094 IF ((p_transaction_rec.transaction_id IS NOT NULL) AND
1095 (p_transaction_rec.transaction_id <> fnd_api.g_miss_num)) THEN
1096 BEGIN
1097 SELECT 'x'
1098 INTO l_dummy
1099 FROM csi_transactions
1100 WHERE transaction_id=p_transaction_rec.transaction_id
1101 AND rownum=1;
1102
1103 IF SQL%FOUND THEN
1104 fnd_message.set_name('CSI', 'CSI_TXN_ID_ALREADY_EXISTS');
1105 fnd_message.set_token('transaction_id',p_transaction_rec.transaction_id);
1106 fnd_msg_pub.add;
1107 x_return_status := fnd_api.g_ret_sts_error;
1108 END IF;
1109
1110 EXCEPTION WHEN no_data_found THEN
1111 /* If success flag is 'N' then if id passed not exists then proceed with validations */
1112 validate_transactions(
1113 p_init_msg_list => fnd_api.g_false,
1114 p_validation_level => p_validation_level,
1115 p_validation_mode => 'CREATE',
1116 p_transaction_rec => p_transaction_rec,
1117 x_return_status => x_return_status,
1118 x_msg_count => x_msg_count,
1119 x_msg_data => x_msg_data);
1120 END;
1121 -- added code for flag ='n and id passed
1122 ELSE
1123 /* If success flag is 'N' then if id not passed then proceed with validations */
1124 validate_transactions(
1125 p_init_msg_list => fnd_api.g_false,
1126 p_validation_level => p_validation_level,
1127 p_validation_mode => 'CREATE',
1128 p_transaction_rec => p_transaction_rec,
1129 x_return_status => x_return_status,
1130 x_msg_count => x_msg_count,
1131 x_msg_data => x_msg_data);
1132 END IF;
1133 END IF;
1134
1135
1136
1137 IF x_return_status<>fnd_api.g_ret_sts_success THEN
1138
1139 RAISE fnd_api.g_exc_error;
1140 END IF;
1141
1142
1143
1144 SELECT SYSDATE
1145 INTO l_transaction_date
1146 FROM dual;
1147
1148 IF p_transaction_rec.transaction_date=fnd_api.g_miss_date THEN
1149 l_transaction_date:=l_transaction_date;
1150 END IF;
1151
1152 IF p_transaction_rec.gl_interface_status_code IS NULL OR
1153 p_transaction_rec.gl_interface_status_code = FND_API.G_MISS_NUM
1154 THEN
1155 p_transaction_rec.gl_interface_status_code :=1;
1156 ELSE
1157 IF p_transaction_rec.gl_interface_status_code NOT IN (1,2,3)
1158 THEN
1159 FND_MESSAGE.SET_NAME('CSI','CSI_INVALID_GL_STATUS');
1160 FND_MESSAGE.SET_TOKEN('STATUS_CODE',p_transaction_rec.gl_interface_status_code);
1161 FND_MSG_PUB.Add;
1162 RAISE fnd_api.g_exc_error;
1163 END IF;
1164 END IF;
1165
1166 --x_transaction_id:=p_transaction_rec.transaction_id;
1167 -- invoke table handler(csi_transactions_pkg.insert_row)
1168 IF l_create_flag ='Y' THEN
1169 p_transaction_rec.object_version_number:=1;
1170 csi_transactions_pkg.insert_row(
1171 px_transaction_id => p_transaction_rec.transaction_id,
1172 p_transaction_date => l_transaction_date,
1173 p_source_transaction_date => p_transaction_rec.source_transaction_date,
1174 p_transaction_type_id => p_transaction_rec.transaction_type_id,
1175 p_txn_sub_type_id => p_transaction_rec.txn_sub_type_id,
1176 p_source_group_ref_id => p_transaction_rec.source_group_ref_id,
1177 p_source_group_ref => p_transaction_rec.source_group_ref,
1178 p_source_header_ref_id => p_transaction_rec.source_header_ref_id,
1179 p_source_header_ref => p_transaction_rec.source_header_ref,
1180 p_source_line_ref_id => p_transaction_rec.source_line_ref_id,
1181 p_source_line_ref => p_transaction_rec.source_line_ref,
1182 p_source_dist_ref_id1 => p_transaction_rec.source_dist_ref_id1,
1183 p_source_dist_ref_id2 => p_transaction_rec.source_dist_ref_id2,
1184 p_inv_material_transaction_id => p_transaction_rec.inv_material_transaction_id,
1185 p_transaction_quantity => p_transaction_rec.transaction_quantity,
1186 p_transaction_uom_code => p_transaction_rec.transaction_uom_code,
1187 p_transacted_by => p_transaction_rec.transacted_by,
1188 p_transaction_status_code => p_transaction_rec.transaction_status_code,
1189 p_transaction_action_code => p_transaction_rec.transaction_action_code,
1190 p_message_id => p_transaction_rec.message_id,
1191 p_context => p_transaction_rec.context,
1192 p_attribute1 => p_transaction_rec.attribute1,
1193 p_attribute2 => p_transaction_rec.attribute2,
1194 p_attribute3 => p_transaction_rec.attribute3,
1195 p_attribute4 => p_transaction_rec.attribute4,
1196 p_attribute5 => p_transaction_rec.attribute5,
1197 p_attribute6 => p_transaction_rec.attribute6,
1198 p_attribute7 => p_transaction_rec.attribute7,
1199 p_attribute8 => p_transaction_rec.attribute8,
1200 p_attribute9 => p_transaction_rec.attribute9,
1201 p_attribute10 => p_transaction_rec.attribute10,
1202 p_attribute11 => p_transaction_rec.attribute11,
1203 p_attribute12 => p_transaction_rec.attribute12,
1204 p_attribute13 => p_transaction_rec.attribute13,
1205 p_attribute14 => p_transaction_rec.attribute14,
1206 p_attribute15 => p_transaction_rec.attribute15,
1207 p_created_by => fnd_global.user_id,
1208 p_creation_date => SYSDATE,
1209 p_last_updated_by => fnd_global.user_id,
1210 p_last_update_date => SYSDATE,
1211 p_last_update_login => fnd_global.conc_login_id,
1212 p_object_version_number => p_transaction_rec.object_version_number,
1213 p_split_reason_code => p_transaction_rec.split_reason_code,
1214 p_gl_interface_status_code => p_transaction_rec.gl_interface_status_code
1215 );
1216
1217 END IF;
1218 -- hint: primary key should be returned.
1219 -- x_transaction_id := px_transaction_id;
1220 --p_transaction_rec.transaction_id := px_transaction_id;
1221
1222 IF x_return_status <> fnd_api.g_ret_sts_success THEN
1223 RAISE fnd_api.g_exc_error;
1224 END IF;
1225
1226 --
1227 -- end of api body
1228 --
1229
1230 -- standard check for p_commit
1231 IF fnd_api.to_boolean( p_commit )
1232 THEN
1233 COMMIT WORK;
1234 END IF;
1235
1236
1237 -- standard call to get message count and if count is 1, get message info.
1238 fnd_msg_pub.count_and_get
1239 ( p_count => x_msg_count,
1240 p_data => x_msg_data
1241 );
1242
1243 EXCEPTION
1244 WHEN fnd_api.g_exc_error THEN
1245 IF fnd_api.to_boolean(p_commit)
1246 THEN
1247 ROLLBACK TO create_transactions_pvt;
1248 END IF;
1249 x_return_status := fnd_api.g_ret_sts_error ;
1250 fnd_msg_pub.count_and_get
1251 (p_count => x_msg_count ,
1252 p_data => x_msg_data
1253 );
1254
1255 WHEN fnd_api.g_exc_unexpected_error THEN
1256 IF fnd_api.to_boolean(p_commit)
1257 THEN
1258 ROLLBACK TO create_transactions_pvt;
1259 END IF;
1260 x_return_status := fnd_api.g_ret_sts_unexp_error ;
1261 fnd_msg_pub.count_and_get
1262 (p_count => x_msg_count ,
1263 p_data => x_msg_data
1264 );
1265
1266 WHEN OTHERS THEN
1267 IF fnd_api.to_boolean(p_commit)
1268 THEN
1269 ROLLBACK TO create_transactions_pvt;
1270 END IF;
1271 x_return_status := fnd_api.g_ret_sts_unexp_error ;
1272 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1273 fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
1274 END IF;
1275 fnd_msg_pub.count_and_get
1276 (p_count => x_msg_count ,
1277 p_data => x_msg_data
1278 );
1279
1280
1281 END create_transaction;
1282
1283
1284 /* ---------------------------------------------------------------------------------- */
1285 /* --- This procedure is used to update transactions --- */
1286 /* --- and call table handler after performing all the validations --- */
1287 /* ---------------------------------------------------------------------------------- */
1288
1289
1290 PROCEDURE update_transactions(
1291 p_api_version IN NUMBER,
1292 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
1293 p_commit IN VARCHAR2 := fnd_api.g_false,
1294 p_validation_level IN NUMBER := fnd_api.g_valid_level_full,
1295 p_transaction_rec IN csi_datastructures_pub.transaction_rec,
1296 x_return_status OUT NOCOPY VARCHAR2,
1297 x_msg_count OUT NOCOPY NUMBER,
1298 x_msg_data OUT NOCOPY VARCHAR2
1299 )
1300
1301 IS
1302 CURSOR lock_csr (p_transaction_rec IN csi_datastructures_pub.transaction_rec) IS
1303 SELECT object_version_number
1304 FROM csi_transactions
1305 WHERE transaction_id = p_transaction_rec.transaction_id
1306 FOR UPDATE OF object_version_number;
1307
1308
1309 l_api_name CONSTANT VARCHAR2(30) := 'update_transactions';
1310 l_api_version CONSTANT NUMBER := 1.0;
1311 -- local variables
1312 l_tar_transaction_rec csi_datastructures_pub.transaction_rec := p_transaction_rec;
1313 l_row_notfound BOOLEAN := FALSE;
1314 l_object_version_number NUMBER;
1315 l_last_update_date DATE;
1316 l_rowid ROWID;
1317 l_debug_level NUMBER;
1318
1319 BEGIN
1320 -- standard start of api savepoint
1321 IF fnd_api.to_boolean(p_commit)
1322 THEN
1323 SAVEPOINT update_transactions_pvt;
1324 END IF;
1325
1326 -- standard call to check for call compatibility.
1327 IF NOT fnd_api.compatible_api_call ( l_api_version,
1328 p_api_version,
1329 l_api_name,
1330 g_pkg_name)
1331 THEN
1332 RAISE fnd_api.g_exc_unexpected_error;
1333 END IF;
1334
1335
1336 -- initialize message list if p_init_msg_list is set to true.
1337 IF fnd_api.to_boolean( p_init_msg_list )
1338 THEN
1339 fnd_msg_pub.initialize;
1340 END IF;
1341 -- initialize api return status to success
1342 x_return_status := fnd_api.g_ret_sts_success;
1343
1344 l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
1345 IF (l_debug_level > 0) THEN
1346 CSI_gen_utility_pvt.put_line( 'update_transactions');
1347 END IF;
1348 IF (l_debug_level > 1) THEN
1349 CSI_gen_utility_pvt.put_line(
1350 p_api_version ||'-'||
1351 p_init_msg_list ||'-'||
1352 p_commit ||'-'||
1353 p_validation_level );
1354 csi_gen_utility_pvt.dump_txn_rec(p_transaction_rec);
1355
1356
1357 END IF;
1358
1359 --
1360 -- api body
1361 --
1362
1363 OPEN lock_csr (p_transaction_rec);
1364 FETCH lock_csr INTO l_object_version_number;
1365 IF ( (l_object_version_number<>p_transaction_rec.object_version_number)
1366 AND (p_transaction_rec.object_version_number <> fnd_api.g_miss_num) ) THEN
1367 fnd_message.set_name('CSI', 'CSI_RECORD_CHANGED');
1368 fnd_msg_pub.add;
1369 RAISE fnd_api.g_exc_error;
1370 END IF;
1371
1372 IF lock_csr%NOTFOUND THEN
1373 fnd_message.set_name('CSI', 'CSI_RECORD_LOCKED');
1374 fnd_msg_pub.add;
1375 RAISE fnd_api.g_exc_error;
1376 END IF;
1377
1378 CLOSE lock_csr;
1379
1380 -- invoke validation procedures
1381
1382 validate_transaction_id (
1383 p_init_msg_list => fnd_api.g_false,
1384 p_validation_mode => 'UPDATE',
1385 p_transaction_id => p_transaction_rec.transaction_id,
1386 x_return_status => x_return_status,
1387 x_msg_count => x_msg_count,
1388 x_msg_data => x_msg_data);
1389
1390 IF x_return_status=fnd_api.g_ret_sts_success THEN
1391 validate_object_version_num (
1392 p_init_msg_list => fnd_api.g_false,
1393 p_validation_mode => 'UPDATE',
1394 p_object_version_number => p_transaction_rec.object_version_number,
1395 x_return_status => x_return_status,
1396 x_msg_count => x_msg_count,
1397 x_msg_data => x_msg_data);
1398 END IF;
1399
1400 IF x_return_status<>fnd_api.g_ret_sts_success THEN
1401 RAISE fnd_api.g_exc_error;
1402 END IF;
1403
1404 IF p_transaction_rec.gl_interface_status_code IS NOT NULL AND
1405 p_transaction_rec.gl_interface_status_code <> FND_API.G_MISS_NUM AND
1406 p_transaction_rec.gl_interface_status_code NOT IN (1,2,3)
1407 THEN
1408 FND_MESSAGE.SET_NAME('CSI','CSI_INVALID_GL_STATUS');
1409 FND_MESSAGE.SET_TOKEN('STATUS_CODE',p_transaction_rec.gl_interface_status_code);
1410 FND_MSG_PUB.Add;
1411 RAISE fnd_api.g_exc_error;
1412 END IF;
1413
1414 -- invoke table handler(csi_transactions_pkg.update_row)
1415 csi_transactions_pkg.update_row(
1416 p_transaction_id => p_transaction_rec.transaction_id,
1417 p_transaction_status_code => p_transaction_rec.transaction_status_code,
1418 p_transaction_action_code => p_transaction_rec.transaction_action_code,
1419 p_source_group_ref => p_transaction_rec.source_group_ref,
1420 p_source_group_ref_id => p_transaction_rec.source_group_ref_id,
1421 p_source_dist_ref_id2 => p_transaction_rec.source_dist_ref_id2,
1422 p_source_header_ref => p_transaction_rec.source_header_ref,
1423 p_source_header_ref_id => p_transaction_rec.source_header_ref_id,
1424 p_source_line_ref => p_transaction_rec.source_line_ref,
1425 p_source_line_ref_id => p_transaction_rec.source_line_ref_id,
1426 p_last_updated_by => fnd_global.user_id,
1427 p_last_update_date => SYSDATE,
1428 p_last_update_login => fnd_global.conc_login_id,
1429 p_object_version_number => p_transaction_rec.object_version_number,
1430 p_gl_interface_status_code => p_transaction_rec.gl_interface_status_code);
1431 --
1432 -- end of api body.
1433 --
1434
1435 -- standard check for p_commit
1436 IF fnd_api.to_boolean( p_commit )
1437 THEN
1438 COMMIT WORK;
1439 END IF;
1440
1441
1442
1443
1444 -- standard call to get message count and if count is 1, get message info.
1445 fnd_msg_pub.count_and_get
1446 ( p_count => x_msg_count,
1447 p_data => x_msg_data
1448 );
1449
1450 EXCEPTION
1451 WHEN fnd_api.g_exc_error THEN
1452 IF fnd_api.to_boolean(p_commit)
1453 THEN
1454 ROLLBACK TO update_transactions_pvt;
1455 END IF;
1456 x_return_status := fnd_api.g_ret_sts_error ;
1457 fnd_msg_pub.count_and_get
1458 (p_count => x_msg_count ,
1459 p_data => x_msg_data
1460 );
1461
1462 WHEN fnd_api.g_exc_unexpected_error THEN
1463 IF fnd_api.to_boolean(p_commit)
1464 THEN
1465 ROLLBACK TO update_transactions_pvt;
1466 END IF;
1467 x_return_status := fnd_api.g_ret_sts_unexp_error ;
1468 fnd_msg_pub.count_and_get
1469 (p_count => x_msg_count ,
1470 p_data => x_msg_data
1471 );
1472
1473 WHEN OTHERS THEN
1474 IF fnd_api.to_boolean(p_commit)
1475 THEN
1476 ROLLBACK TO update_transactions_pvt;
1477 END IF;
1478 x_return_status := fnd_api.g_ret_sts_unexp_error ;
1479 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1480 fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
1481 END IF;
1482 fnd_msg_pub.count_and_get
1483 (p_count => x_msg_count ,
1484 p_data => x_msg_data
1485 );
1486
1487 END update_transactions;
1488
1489 /* ---------------------------------------------------------------------------------- */
1490 /* --- This procedure is used to insert records into csi_txn_errors --- */
1491 /* ---------------------------------------------------------------------------------- */
1492
1493 PROCEDURE create_txn_error
1494 (
1495 p_api_version IN NUMBER,
1496 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
1497 p_commit IN VARCHAR2 := fnd_api.g_false,
1498 p_validation_level IN NUMBER := fnd_api.g_valid_level_full,
1499 p_txn_error_rec IN csi_datastructures_pub.transaction_error_rec,
1500 x_return_status OUT NOCOPY VARCHAR2,
1501 x_msg_count OUT NOCOPY NUMBER,
1502 x_msg_data OUT NOCOPY VARCHAR2,
1503 x_transaction_error_id OUT NOCOPY NUMBER
1504 ) IS
1505 l_api_name CONSTANT VARCHAR2(30) := 'create_txn_error';
1506 l_api_version CONSTANT NUMBER := 1.0;
1507 l_return_status_full VARCHAR2(1);
1508 l_access_flag VARCHAR2(1);
1509 l_debug_level NUMBER;
1510
1511 BEGIN
1512 -- standard start of api savepoint
1513 IF fnd_api.to_boolean(p_commit)
1514 THEN
1515 SAVEPOINT create_txn_error_pvt;
1516 END IF;
1517 -- standard call to check for call compatibility.
1518 IF NOT fnd_api.compatible_api_call ( l_api_version,
1519 p_api_version,
1520 l_api_name,
1521 g_pkg_name)
1522 THEN
1523 RAISE fnd_api.g_exc_unexpected_error;
1524 END IF;
1525
1526
1527 -- initialize message list if p_init_msg_list is set to true.
1528 IF fnd_api.to_boolean( p_init_msg_list )
1529 THEN
1530 fnd_msg_pub.initialize;
1531 END IF;
1532
1533 -- initialize api return status TO success
1534 x_return_status := fnd_api.g_ret_sts_success;
1535
1536 /***** COMMENTED l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
1537 IF (l_debug_level > 0) THEN
1538 CSI_gen_utility_pvt.put_line( 'create_txn_error');
1539 END IF;
1540 IF (l_debug_level > 1) THEN
1541 CSI_gen_utility_pvt.put_line(
1542 p_api_version ||'-'||
1543 p_init_msg_list ||'-'||
1544 p_commit ||'-'||
1545 p_validation_level );
1546
1547 -- dump the txn error records
1548 csi_gen_utility_pvt.dump_txn_error_rec(p_txn_error_rec);
1549
1550
1551 END IF; **** END OF COMMENT *****/
1552
1553 IF x_return_status <> fnd_api.g_ret_sts_success THEN
1554 RAISE fnd_api.g_exc_error;
1555 END IF;
1556
1557 /* End of addition for 11.5.10 */
1558
1559 -- invoke table handler(csi_txn_errors_pkg.insert_row)
1560 csi_txn_errors_pkg.insert_row(
1561 px_transaction_error_id => x_transaction_error_id,
1562 p_transaction_id => p_txn_error_rec.transaction_id,
1563 p_message_id => p_txn_error_rec.message_id,
1564 p_error_text => p_txn_error_rec.error_text,
1565 p_source_type => p_txn_error_rec.source_type,
1566 p_source_id => p_txn_error_rec.source_id,
1567 p_processed_flag => p_txn_error_rec.processed_flag,
1568 p_created_by => fnd_global.user_id,
1569 p_creation_date => SYSDATE,
1570 p_last_updated_by => fnd_global.user_id,
1571 p_last_update_date => SYSDATE,
1572 p_last_update_login => fnd_global.conc_login_id,
1573 p_object_version_number => 1,
1574 p_transaction_type_id => p_txn_error_rec.transaction_type_id ,
1575 p_source_group_ref => p_txn_error_rec.source_group_ref,
1576 p_source_group_ref_id => p_txn_error_rec.source_group_ref_id,
1577 p_source_header_ref => p_txn_error_rec.source_header_ref,
1578 p_source_header_ref_id => p_txn_error_rec.source_header_ref_id,
1579 p_source_line_ref => p_txn_error_rec.source_line_ref,
1580 p_source_line_ref_id => p_txn_error_rec.source_line_ref_id,
1581 p_source_dist_ref_id1 => p_txn_error_rec.source_dist_ref_id1,
1582 p_source_dist_ref_id2 => p_txn_error_rec.source_dist_ref_id2,
1583 p_inv_material_transaction_id => p_txn_error_rec.inv_material_transaction_id,
1584 p_error_stage => p_txn_error_rec.error_stage,
1585 p_message_string => p_txn_error_rec.message_string,
1586 p_instance_id => p_txn_error_rec.instance_id,
1587 p_inventory_item_id => p_txn_error_rec.inventory_item_id,
1588 p_serial_number => p_txn_error_rec.serial_number,
1589 p_lot_number => p_txn_error_rec.lot_number,
1590 p_transaction_error_date => p_txn_error_rec.transaction_error_date,
1591 p_src_serial_num_ctrl_code => p_txn_error_rec.src_serial_num_ctrl_code,
1592 p_src_location_ctrl_code => p_txn_error_rec.src_location_ctrl_code,
1593 p_src_lot_ctrl_code => p_txn_error_rec.src_lot_ctrl_code,
1594 p_src_rev_qty_ctrl_code => p_txn_error_rec.src_rev_qty_ctrl_code,
1595 p_dst_serial_num_ctrl_code => p_txn_error_rec.dst_serial_num_ctrl_code,
1596 p_dst_location_ctrl_code => p_txn_error_rec.dst_location_ctrl_code,
1597 p_dst_lot_ctrl_code => p_txn_error_rec.dst_lot_ctrl_code,
1598 p_dst_rev_qty_ctrl_code => p_txn_error_rec.dst_rev_qty_ctrl_code,
1599 p_comms_nl_trackable_flag => p_txn_error_rec.comms_nl_trackable_flag);
1600 -- hint: primary key should be returned.
1601 -- x_transaction_error_id := px_transaction_error_id;
1602
1603 IF x_return_status <> fnd_api.g_ret_sts_success THEN
1604 RAISE fnd_api.g_exc_error;
1605 END IF;
1606
1607 --
1608 -- end of api body
1609 --
1610
1611 -- standard check for p_commit
1612 IF fnd_api.to_boolean( p_commit )
1613 THEN
1614 COMMIT WORK;
1615 END IF;
1616
1617 -- standard call to get message count and if count is 1, get message info.
1618 fnd_msg_pub.count_and_get
1619 ( p_count => x_msg_count,
1620 p_data => x_msg_data
1621 );
1622
1623 EXCEPTION
1624 WHEN fnd_api.g_exc_error THEN
1625 IF fnd_api.to_boolean(p_commit)
1626 THEN
1627 ROLLBACK TO create_txn_error_pvt;
1628 END IF;
1629 x_return_status := fnd_api.g_ret_sts_error ;
1630 fnd_msg_pub.count_and_get
1631 (p_count => x_msg_count ,
1632 p_data => x_msg_data
1633 );
1634
1635 WHEN fnd_api.g_exc_unexpected_error THEN
1636 IF fnd_api.to_boolean(p_commit)
1637 THEN
1638 ROLLBACK TO create_txn_error_pvt;
1639 END IF;
1640 x_return_status := fnd_api.g_ret_sts_unexp_error ;
1641 fnd_msg_pub.count_and_get
1642 (p_count => x_msg_count ,
1643 p_data => x_msg_data
1644 );
1645
1646 WHEN OTHERS THEN
1647 IF fnd_api.to_boolean(p_commit)
1648 THEN
1649 ROLLBACK TO create_txn_error_pvt;
1650 END IF;
1651 x_return_status := fnd_api.g_ret_sts_unexp_error ;
1652 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1653 fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
1654 END IF;
1655 fnd_msg_pub.count_and_get
1656 (p_count => x_msg_count ,
1657 p_data => x_msg_data
1658 );
1659
1660
1661 END create_txn_error;
1662
1663 /* ---------------------------------------------------------------------------------- */
1664 /* --- This procedure is used to validate transaction_id --- */
1665 /* --- 1. for validation_mode='CREATE' return success or no validation --- */
1666 /* --- 2. for validation_mode='UPDATE' check for not null and validate against --- */
1667 /* --- csi_transactions table --- */
1668 /* ---------------------------------------------------------------------------------- */
1669
1670
1671 PROCEDURE validate_transaction_id (
1672 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
1673 p_validation_mode IN VARCHAR2,
1674 p_transaction_id IN NUMBER,
1675 x_return_status OUT NOCOPY VARCHAR2,
1676 x_msg_count OUT NOCOPY NUMBER,
1677 x_msg_data OUT NOCOPY VARCHAR2
1678 )
1679 IS
1680 l_dummy VARCHAR2(1);
1681 BEGIN
1682 -- initialize message list if p_init_msg_list is set to true.
1683 IF fnd_api.to_boolean( p_init_msg_list )
1684 THEN
1685 fnd_msg_pub.initialize;
1686 END IF;
1687
1688
1689 -- initialize api return status TO success
1690 x_return_status := fnd_api.g_ret_sts_success;
1691
1692 -- validate not null column
1693
1694 IF(p_validation_mode ='CREATE') THEN
1695 x_return_status := fnd_api.g_ret_sts_success;
1696 ELSIF(p_validation_mode = 'UPDATE') THEN
1697 IF ( (p_transaction_id IS NULL) OR (p_transaction_id = fnd_api.g_miss_num) ) THEN
1698 fnd_message.set_name('CSI', 'CSI_TXN_ID_NOT_PASSED');
1699 fnd_msg_pub.add;
1700 x_return_status := fnd_api.g_ret_sts_error;
1701 ELSE
1702 BEGIN
1703 SELECT 'x'
1704 INTO l_dummy
1705 FROM csi_transactions
1706 WHERE transaction_id=p_transaction_id;
1707 EXCEPTION
1708 WHEN no_data_found THEN
1709 fnd_message.set_name('CSI', 'CSI_INVALID_TXN_ID');
1710 fnd_message.set_token('transaction_id',p_transaction_id);
1711 fnd_msg_pub.add;
1712 x_return_status := fnd_api.g_ret_sts_error;
1713 END;
1714 END IF;
1715 END IF;
1716
1717 -- standard call to get message count and if count is 1, get message info.
1718 fnd_msg_pub.count_and_get
1719 ( p_count => x_msg_count,
1720 p_data => x_msg_data
1721 );
1722
1723 END validate_transaction_id;
1724
1725 /* ---------------------------------------------------------------------------------- */
1726 /* --- This procedure is used to validate source_transaction_date --- */
1727 /* --- 1. check for not null and return an error message --- */
1728 /* ---------------------------------------------------------------------------------- */
1729
1730
1731 PROCEDURE validate_s_transaction_date (
1732 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
1733 p_source_transaction_date IN DATE,
1734 x_return_status OUT NOCOPY VARCHAR2,
1735 x_msg_count OUT NOCOPY NUMBER,
1736 x_msg_data OUT NOCOPY VARCHAR2
1737 )
1738 IS
1739 BEGIN
1740 -- initialize message list if p_init_msg_list is set to true.
1741 IF fnd_api.to_boolean( p_init_msg_list )
1742 THEN
1743 fnd_msg_pub.initialize;
1744 END IF;
1745
1746
1747 -- initialize api return status to success
1748 x_return_status := fnd_api.g_ret_sts_success;
1749
1750 -- validate not null column
1751 IF ( (p_source_transaction_date IS NULL) OR (p_source_transaction_date = fnd_api.g_miss_date) ) THEN
1752 fnd_message.set_name('CSI', 'CSI_NO_TXN_DATE');
1753 fnd_msg_pub.add;
1754 x_return_status := fnd_api.g_ret_sts_error;
1755 END IF;
1756
1757 -- standard call to get message count and if count is 1, get message info.
1758 fnd_msg_pub.count_and_get
1759 ( p_count => x_msg_count,
1760 p_data => x_msg_data
1761 );
1762
1763 END validate_s_transaction_date;
1764
1765
1766 /* ---------------------------------------------------------------------------------- */
1767 /* --- This procedure is used to validate transaction_type_id --- */
1768 /* --- 1. for null return error status --- */
1769 /* --- 2. for not null check for the exsistence in the csi_txn_types table --- */
1770 /* ---------------------------------------------------------------------------------- */
1771
1772 PROCEDURE validate_transaction_type_id (
1773 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
1774 p_transaction_type_id IN NUMBER,
1775 x_return_status OUT NOCOPY VARCHAR2,
1776 x_msg_count OUT NOCOPY NUMBER,
1777 x_msg_data OUT NOCOPY VARCHAR2
1778 )
1779 IS
1780 l_dummy VARCHAR2(1);
1781 BEGIN
1782 -- initialize message list if p_init_msg_list is set to true.
1783 IF fnd_api.to_boolean( p_init_msg_list )
1784 THEN
1785 fnd_msg_pub.initialize;
1786 END IF;
1787
1788
1789 -- initialize api return status to success
1790 x_return_status := fnd_api.g_ret_sts_success;
1791
1792 -- validate not null column
1793
1794 IF ( (p_transaction_type_id IS NULL) OR (p_transaction_type_id = fnd_api.g_miss_num) ) THEN
1795 fnd_message.set_name('CSI', 'CSI_NO_TXN_TYPE_ID');
1796 fnd_msg_pub.add;
1797 x_return_status := fnd_api.g_ret_sts_error;
1798 ELSE
1799 BEGIN
1800 SELECT 'x'
1801 INTO l_dummy
1802 FROM csi_txn_types
1803 WHERE transaction_type_id=p_transaction_type_id;
1804
1805 EXCEPTION
1806 WHEN no_data_found THEN
1807 fnd_message.set_name('CSI', 'CSI_INVALID_TXN_TYPE_ID');
1808 fnd_msg_pub.add;
1809 x_return_status := fnd_api.g_ret_sts_error;
1810 END;
1811 END IF;
1812 -- standard call to get message count and if count is 1, get message info.
1813 fnd_msg_pub.count_and_get
1814 ( p_count => x_msg_count,
1815 p_data => x_msg_data
1816 );
1817 END validate_transaction_type_id;
1818
1819
1820 /* ---------------------------------------------------------------------------------- */
1821 /* --- This procedure is used to validate source_object_code --- */
1822 /* --- 1. validation will only be performed if source_line_ref_id is passed --- */
1823 /* --- 2. check for existence of a record if not exsist then return error --- */
1824 /* ---------------------------------------------------------------------------------- */
1825
1826 PROCEDURE validate_source_object (
1827 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
1828 p_transaction_type_id IN NUMBER,
1829 p_source_line_ref_id IN NUMBER,
1830 x_return_status OUT NOCOPY VARCHAR2,
1831 x_msg_count OUT NOCOPY NUMBER,
1832 x_msg_data OUT NOCOPY VARCHAR2
1833 )
1834 IS
1835 CURSOR c_ref_csr (p_object_code IN VARCHAR2) IS
1836 SELECT select_id
1837 ,select_name
1838 ,from_table
1839 ,where_clause
1840 FROM jtf_objects_vl jov,jtf_object_usages jou
1841 WHERE jov.object_code = p_object_code
1842 AND jov.object_code = jou.object_code
1843 AND jou.object_user_code = 'CSI_TXN';
1844
1845 l_source_ln_ref_id NUMBER;
1846 l_source_code VARCHAR2(30);
1847 l_id_column VARCHAR2(200);
1848 l_name_column VARCHAR2(200);
1849 l_FROM_clause VARCHAR2(200);
1850 l_where_clause VARCHAR2(2000);
1851 l_flag VARCHAR2(1):='f';
1852 sql_stmt VARCHAR2(2000):='';
1853 l_object_name VARCHAR2(80);
1854 l_object_id NUMBER;
1855 BEGIN
1856 -- initialize message list if p_init_msg_list is set to true.
1857 IF fnd_api.to_boolean( p_init_msg_list )
1858 THEN
1859 fnd_msg_pub.initialize;
1860 END IF;
1861
1862
1863 -- initialize api return status to success
1864 x_return_status := fnd_api.g_ret_sts_success;
1865 BEGIN
1866 BEGIN
1867 IF ( (p_source_line_ref_id IS NOT NULL) AND (p_source_line_ref_id <> fnd_api.g_miss_num) ) THEN
1868 l_flag:='t';
1869 END IF;
1870 SELECT source_object_code
1871 INTO l_source_code
1872 FROM csi_txn_types
1873 WHERE transaction_type_id=p_transaction_type_id;
1874 EXCEPTION
1875 WHEN no_data_found THEN
1876 l_flag:='f';
1877 END;
1878
1879 BEGIN
1880 IF ( (l_flag='t') AND (l_source_code IS NOT NULL) ) THEN
1881 OPEN c_ref_csr(l_source_code);
1882 FETCH c_ref_csr INTO l_id_column,
1883 l_name_column,
1884 l_from_clause,
1885 l_where_clause;
1886
1887 IF c_ref_csr%notfound
1888 THEN
1889 fnd_message.set_name ('CSI', 'CSI_INVALID_OBJECT_CODE');
1890 fnd_msg_pub.add;
1891 x_return_status := fnd_api.g_ret_sts_error;
1892 END IF;
1893
1894 IF x_return_status <> fnd_api.g_ret_sts_error THEN
1895 IF(l_where_clause IS NULL) THEN
1896 l_where_clause := ' WHERE ';
1897 ELSE
1898 l_where_clause := l_where_clause || ' AND ';
1899 END IF;
1900
1901 sql_stmt := ' SELECT ' ||
1902 l_name_column ||
1903 ' , ' ||
1904 l_id_column ||
1905 ' FROM ' ||
1906 l_FROM_clause ||
1907 l_where_clause ||
1908 l_id_column ||
1909 ' = :source_line_ref_id ';
1910
1911 EXECUTE IMMEDIATE sql_stmt
1912 INTO l_object_name, l_object_id
1913 USING p_source_line_ref_id;
1914 END IF;
1915
1916 CLOSE c_ref_csr;
1917
1918 END IF;
1919 EXCEPTION
1920 WHEN no_data_found THEN
1921 fnd_message.set_name('CSI', 'CSI_REF_NOT_FOUND');
1922 fnd_msg_pub.add;
1923 x_return_status := fnd_api.g_ret_sts_error;
1924
1925 END;
1926 END;
1927
1928 -- standard call to get message count and if count is 1, get message info.
1929 fnd_msg_pub.count_and_get
1930 ( p_count => x_msg_count,
1931 p_data => x_msg_data
1932 );
1933 END validate_source_object;
1934
1935
1936 /* ---------------------------------------------------------------------------------- */
1937 /* --- this procedure is used to validate transaction_id --- */
1938 /* --- 1. for validation_mode='CREATE' return success or no validation --- */
1939 /* --- 2. for validation_mode='UPDATE' check for not null and validate against --- */
1940 /* --- csi_transactions table --- */
1941 /* ---------------------------------------------------------------------------------- */
1942
1943
1944 PROCEDURE validate_object_version_num (
1945 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
1946 p_validation_mode IN VARCHAR2,
1947 p_object_version_number IN NUMBER,
1948 x_return_status OUT NOCOPY VARCHAR2,
1949 x_msg_count OUT NOCOPY NUMBER,
1950 x_msg_data OUT NOCOPY VARCHAR2
1951 )
1952 IS
1953 l_dummy VARCHAR2(1);
1954 BEGIN
1955 -- initialize message list if p_init_msg_list is set to true.
1956 IF fnd_api.to_boolean( p_init_msg_list )
1957 THEN
1958 fnd_msg_pub.initialize;
1959 END IF;
1960
1961
1962 -- initialize api return status to success
1963 x_return_status := fnd_api.g_ret_sts_success;
1964
1965 IF(p_validation_mode = 'UPDATE') THEN
1966 IF ( (p_object_version_number IS NULL) OR (p_object_version_number = fnd_api.g_miss_num) ) THEN
1967 fnd_message.set_name('CSI', 'CSI_MISSING_OBJ_VER_NUM');
1968 fnd_msg_pub.add;
1969 x_return_status := fnd_api.g_ret_sts_error;
1970 END IF;
1971 END IF;
1972
1973 -- standard call to get message count and if count is 1, get message info.
1974 fnd_msg_pub.count_and_get
1975 ( p_count => x_msg_count,
1976 p_data => x_msg_data
1977 );
1978
1979 END validate_object_version_num;
1980
1981 /* ---------------------------------------------------------------------------------- */
1982 /* --- This local procedure is used to validate --- */
1983 /* --- the split_reason_code passed --- */
1984 /* ---------------------------------------------------------------------------------- */
1985
1986 PROCEDURE validate_split_code (
1987 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
1988 p_split_reason_code IN VARCHAR2,
1989 x_return_status OUT NOCOPY VARCHAR2,
1990 x_msg_count OUT NOCOPY NUMBER ,
1991 x_msg_data OUT NOCOPY VARCHAR2
1992 )
1993 IS
1994 l_dummy VARCHAR2(1);
1995 BEGIN
1996 -- initialize message list if p_init_msg_list is set to true.
1997 IF fnd_api.to_boolean( p_init_msg_list )
1998 THEN
1999 fnd_msg_pub.initialize;
2000 END IF;
2001
2002
2003 -- initialize api return status to success
2004 x_return_status := fnd_api.g_ret_sts_success;
2005
2006 -- validate not null column
2007
2008 IF ( (p_split_reason_code IS NOT NULL) AND (p_split_reason_code <> fnd_api.g_miss_char) ) THEN
2009 BEGIN
2010 SELECT 'x'
2011 INTO l_dummy
2012 FROM csi_lookups
2013 WHERE lookup_type='CSI_SPLIT_REASON_CODE'
2014 AND lookup_code=p_split_reason_code;
2015 EXCEPTION
2016 WHEN no_data_found THEN
2017 fnd_message.set_name('CSI', 'CSI_INVALID_REASON_CODE');
2018 fnd_msg_pub.add;
2019 x_return_status := fnd_api.g_ret_sts_error;
2020 END;
2021 END IF;
2022 -- standard call to get message count and if count is 1, get message info.
2023 fnd_msg_pub.count_and_get
2024 ( p_count => x_msg_count,
2025 p_data => x_msg_data
2026 );
2027 END validate_split_code;
2028
2029
2030 /* ---------------------------------------------------------------------------------- */
2031 /* --- This procedure is used to call all validation transactions like --- */
2032 /* --- 1. transaction_id --- */
2033 /* --- 2. source_transaction_id --- */
2034 /* --- 3. transaction_type_id --- */
2035 /* ---------------------------------------------------------------------------------- */
2036
2037
2038
2039 PROCEDURE validate_transactions(
2040 p_init_msg_list IN VARCHAR2 := fnd_api.g_false,
2041 p_validation_level IN NUMBER := fnd_api.g_valid_level_full,
2042 p_validation_mode IN VARCHAR2,
2043 p_transaction_rec IN csi_datastructures_pub.transaction_rec,
2044 x_return_status OUT NOCOPY VARCHAR2,
2045 x_msg_count OUT NOCOPY NUMBER,
2046 x_msg_data OUT NOCOPY VARCHAR2
2047 )
2048 IS
2049 l_api_name CONSTANT VARCHAR2(30) := 'validate_transactions';
2050 BEGIN
2051 -- initialize api return status to success
2052 x_return_status := fnd_api.g_ret_sts_success;
2053 IF (p_validation_level >= fnd_api.g_valid_level_full) THEN
2054 validate_transaction_id(
2055 p_init_msg_list => fnd_api.g_false,
2056 p_validation_mode => p_validation_mode,
2057 p_transaction_id => p_transaction_rec.transaction_id,
2058 x_return_status => x_return_status,
2059 x_msg_count => x_msg_count,
2060 x_msg_data => x_msg_data);
2061 IF x_return_status <> fnd_api.g_ret_sts_success THEN
2062 RAISE fnd_api.g_exc_error;
2063 END IF;
2064
2065
2066 validate_s_transaction_date(
2067 p_init_msg_list => fnd_api.g_false,
2068 p_source_transaction_date => p_transaction_rec.source_transaction_date,
2069 x_return_status => x_return_status,
2070 x_msg_count => x_msg_count,
2071 x_msg_data => x_msg_data);
2072 IF x_return_status <> fnd_api.g_ret_sts_success THEN
2073 RAISE fnd_api.g_exc_error;
2074 END IF;
2075
2076 validate_transaction_type_id(
2077 p_init_msg_list => fnd_api.g_false,
2078 p_transaction_type_id => p_transaction_rec.transaction_type_id,
2079 x_return_status => x_return_status,
2080 x_msg_count => x_msg_count,
2081 x_msg_data => x_msg_data);
2082 IF x_return_status <> fnd_api.g_ret_sts_success THEN
2083 RAISE fnd_api.g_exc_error;
2084 END IF;
2085
2086 validate_source_object(
2087 p_init_msg_list => fnd_api.g_false,
2088 p_transaction_type_id => p_transaction_rec.transaction_type_id,
2089 p_source_line_ref_id => p_transaction_rec.source_line_ref_id,
2090 x_return_status => x_return_status,
2091 x_msg_count => x_msg_count,
2092 x_msg_data => x_msg_data);
2093 IF x_return_status <> fnd_api.g_ret_sts_success THEN
2094 RAISE fnd_api.g_exc_error;
2095 END IF;
2096
2097
2098 validate_split_code(
2099 p_init_msg_list => fnd_api.g_false,
2100 p_split_reason_code => p_transaction_rec.split_reason_code,
2101 x_return_status => x_return_status,
2102 x_msg_count => x_msg_count,
2103 x_msg_data => x_msg_data);
2104 IF x_return_status <> fnd_api.g_ret_sts_success THEN
2105 RAISE fnd_api.g_exc_error;
2106 END IF;
2107
2108
2109 END IF;
2110
2111 END validate_transactions;
2112
2113 END csi_transactions_pvt;