[Home] [Help]
PACKAGE BODY: APPS.CSM_MTL_MATERIAL_TXN_ACC_PKG
Source
1 PACKAGE BODY CSM_MTL_MATERIAL_TXN_ACC_PKG AS
2 /* $Header: csmmtacb.pls 120.5.12010000.4 2010/03/11 04:08:23 trajasek ship $ */
3
4 /*** Globals ***/
5 g_acc_table_name CONSTANT VARCHAR2(30) := 'CSM_MTL_MATERIAL_TXN_ACC';
6 g_publication_item_name CONSTANT CSM_ACC_PKG.t_publication_item_list :=
7 CSM_ACC_PKG.t_publication_item_list('CSM_MTL_MATERIAL_TXNS');
11
8 g_table_name CONSTANT VARCHAR2(30) := 'MTL_MATERIAL_TRANSACTIONS';
9 g_tasks_seq_name CONSTANT VARCHAR2(30) := 'CSM_MTL_MATERIAL_TXN_ACC_S';
10 g_pk1_name CONSTANT VARCHAR2(30) := 'TRANSACTION_ID';
12 PROCEDURE Insert_MTL_Mat_Transaction(
13 p_user_id NUMBER,
14 p_transaction_id NUMBER
15 )
16 IS
17
18 BEGIN
19 CSM_UTIL_PKG.LOG
20 ( module => g_table_name
21 , message => 'Entering Insert_MTL_Mat_Transaction Procedure to process TRAN ID : ' || p_transaction_id
22 , log_level => FND_LOG.LEVEL_STATEMENT);
23
24 /*** Call common package to insert record into ACC table ***/
25 CSM_ACC_PKG.Insert_Acc
26 ( p_publication_item_names => g_publication_item_name
27 ,p_acc_table_name => g_acc_table_name
28 ,p_seq_name => g_tasks_seq_name
29 ,p_user_id => p_user_id
30 ,p_pk1_name => g_pk1_name
31 ,p_pk1_num_value => p_transaction_id
32 );
33
34 /*** Also insert Lot numebers and serial numbers into their respective acc tables ***/
35 CSM_MTL_TXN_LOT_NUM_ACC_PKG.Insert_MTL_trans_lot_num(
36 p_user_id => p_user_id,
37 p_transaction_id => p_transaction_id
38 );
39 CSM_MTL_UNIT_TXN_ACC_PKG.Insert_MTL_Unit_Trans(
40 p_user_id => p_user_id,
41 p_transaction_id => p_transaction_id
42 );
43 CSM_UTIL_PKG.LOG
44 ( module => g_table_name
45 , message => ' Leaving Insert_MTL_Mat_Transaction procedure for TRAN ID :' || p_transaction_id
46 , log_level => FND_LOG.LEVEL_STATEMENT);
47
48 END Insert_MTL_Mat_Transaction;
49
50
51 PROCEDURE Update_MTL_Mat_Transaction(
52 p_user_id NUMBER,
53 p_transaction_id NUMBER
54 )
55 IS
56 l_acc_id NUMBER;
57 BEGIN
58
59 CSM_UTIL_PKG.LOG
60 ( module => g_table_name
61 , message => ' Entering Update_CSP_Sec_Inventory procedure to process TRAN ID :'|| p_transaction_id
62 , log_level => FND_LOG.LEVEL_STATEMENT);
63
64 /*** Call common package to insert record into ACC table ***/
65 l_acc_id := CSM_ACC_PKG.Get_Acc_Id
66 ( P_ACC_TABLE_NAME => g_acc_table_name
67 ,P_PK1_NAME => g_pk1_name
68 ,P_PK1_NUM_VALUE => p_transaction_id
69 ,p_user_id => p_user_id);
70
71 IF l_acc_id = -1 THEN
72 /*** Record is not yet in ACC tables. Insert has to be done ***/
73 CSM_ACC_PKG.Insert_Acc
74 ( p_publication_item_names => g_publication_item_name
75 ,p_acc_table_name => g_acc_table_name
76 ,p_seq_name => g_tasks_seq_name
77 ,p_user_id => p_user_id
78 ,p_pk1_name => g_pk1_name
79 ,p_pk1_num_value => p_transaction_id
80 );
81 ELSE
82 /*** Record is already in ACC. Only an update is required for re-sending ***/
83 CSM_ACC_PKG.Update_Acc
84 ( p_publication_item_names => g_publication_item_name
85 ,p_acc_table_name => g_acc_table_name
86 ,p_user_id => p_user_id
87 ,p_access_id => l_acc_id
88 );
89 END IF;
90
91 /*** Also Update Lot numebers and serial numbers into their respective acc tables ***/
92 CSM_MTL_TXN_LOT_NUM_ACC_PKG.Update_MTL_trans_lot_num(
93 p_user_id => p_user_id,
94 p_transaction_id => p_transaction_id
95 );
96 CSM_MTL_UNIT_TXN_ACC_PKG.Update_MTL_Unit_Trans(
97 p_user_id => p_user_id,
98 p_transaction_id => p_transaction_id
99 );
100 CSM_UTIL_PKG.LOG
101 ( module => g_table_name
102 , message => ' Leaving Update_MTL_Mat_Transaction Procedure for TRAN ID :' || p_transaction_id
103 , log_level => FND_LOG.LEVEL_STATEMENT);
104
105 END Update_MTL_Mat_Transaction;
106
107
108 PROCEDURE Delete_MTL_Mat_Transaction(
109 p_user_id NUMBER,
110 p_transaction_id NUMBER
111 )
112 IS
113 BEGIN
114
115 CSM_UTIL_PKG.LOG
116 ( module => g_table_name
117 , message =>' Entering Delete_MTL_Mat_Transaction Procedure for TRAN ID :'|| p_transaction_id
118 , log_level => FND_LOG.LEVEL_STATEMENT);
119
120 /*** Call common package to insert record into ACC table ***/
121 CSM_ACC_PKG.Delete_Acc
122 ( p_publication_item_names => g_publication_item_name
123 ,p_acc_table_name => g_acc_table_name
124 ,p_user_id => p_user_id
125 ,p_pk1_name => g_pk1_name
126 ,p_pk1_num_value => p_transaction_id
127 );
128
129 /*** Also insert Lot numebers and serial numbers into their respective acc tables ***/
130 CSM_MTL_TXN_LOT_NUM_ACC_PKG.Delete_MTL_trans_lot_num(
134 CSM_MTL_UNIT_TXN_ACC_PKG.Delete_MTL_Unit_Trans(
131 p_user_id => p_user_id,
132 p_transaction_id => p_transaction_id
133 );
135 p_user_id => p_user_id,
136 p_transaction_id => p_transaction_id
137 );
138 CSM_UTIL_PKG.LOG
139 ( module => g_table_name
140 , message =>' Leaving Delete_MTL_Mat_Transaction Procedure for TRAN ID :'|| p_transaction_id
141 , log_level => FND_LOG.LEVEL_STATEMENT);
142
143 END Delete_MTL_Mat_Transaction;
144
145
146 /*Delete all records for non-existing user ( e.g user was deleted )*/
147 PROCEDURE DELETE_ALL_ACC_RECORDS( p_user_id IN NUMBER
148 , x_return_status OUT NOCOPY VARCHAR2 )
149 IS
150 BEGIN
151 CSM_UTIL_PKG.LOG
152 ( module => g_table_name
153 , message => 'Entering DELETE_ALL_ACC_RECORDS'
154 , log_level => FND_LOG.LEVEL_STATEMENT);
155
156 DELETE CSM_MTL_MATERIAL_TXN_ACC
157 WHERE user_id = p_user_id;
158
159 x_return_status := FND_API.G_RET_STS_SUCCESS;
160
161 CSM_UTIL_PKG.LOG
162 ( module => g_table_name
163 , message => 'Leaving DELETE_ALL_ACC_RECORDS'
164 , log_level => FND_LOG.LEVEL_STATEMENT);
165
166 EXCEPTION WHEN OTHERS THEN
167 /*** hook failed -> log error ***/
168 -- x_return_status := FND_API.G_RET_STS_ERROR;
169 x_return_status := FND_API.G_RET_STS_SUCCESS;
170 CSM_UTIL_PKG.LOG
171 ( module => g_table_name
172 , message => 'Caught exception in DELETE_ALL_ACC_RECORDS hook:' || fnd_global.local_chr(10) || sqlerrm
173 , log_level => FND_LOG.LEVEL_ERROR);
174 fnd_msg_pub.Add_Exc_Msg('CSM_MTL_MATERIAL_TXN_ACC_PKG','PROCESS_ACC',sqlerrm);
175 END DELETE_ALL_ACC_RECORDS;
176
177
178 PROCEDURE Refresh_Mat_Txn_Acc(p_status OUT NOCOPY VARCHAR2,
179 p_message OUT NOCOPY VARCHAR2)
180 IS
181 PRAGMA AUTONOMOUS_TRANSACTION;
182
183 CURSOR l_last_run_date_csr IS
184 SELECT NVL(last_run_date, TO_DATE('1','J'))
185 FROM jtm_con_request_data
186 WHERE package_name = 'CSM_MTL_MATERIAL_TXN_ACC_PKG'
187 AND procedure_name = 'REFRESH_MAT_TXN_ACC';
188
189 --Delete if either from or to subinv is not assigned to the mobile user any longer
190 --OR if the transaction is older than CSM: Purge Interval Setting profile value
191 CURSOR l_mat_delete_csr (c_history_profile NUMBER)
192 IS
193 SELECT ACC.user_id
194 , ACC.TRANSACTION_ID
195 FROM CSM_MTL_MATERIAL_TXN_ACC ACC,
196 MTL_MATERIAL_TRANSACTIONS B
197 WHERE B.TRANSACTION_ID = ACC.TRANSACTION_ID
198 AND B.TRANSACTION_ACTION_ID = 2 --Subinventory transfer
199 And (
200 B.transaction_date < (sysdate - c_history_profile)
201 OR
202 NOT EXISTS
203 (SELECT 1
204 FROM csm_inv_loc_ass_acc cilaa,
205 csp_inv_loc_assignments cila
206 WHERE cilaa.csp_inv_loc_assignment_id = cila.csp_inv_loc_assignment_id
207 AND cilaa.user_id = ACC.user_id
208 AND cila.subinventory_code = B.subinventory_code
209 AND cila.organization_id = B.organization_id
210 UNION ALL
211 SELECT 1
212 FROM csm_inv_loc_ass_acc cilaa,
213 csp_inv_loc_assignments cila
214 WHERE cilaa.csp_inv_loc_assignment_id = cila.csp_inv_loc_assignment_id
215 AND cilaa.user_id = ACC.user_id
216 AND cila.subinventory_code = B.transfer_subinventory
217 AND cila.organization_id = B.transfer_organization_id)
218 );
219
220 -- get the updates to mat trfr
221 CURSOR l_mat_update_csr (b_last_run_date IN DATE) IS
222 SELECT ACC.user_id
223 , ACC.TRANSACTION_ID
224 FROM CSM_MTL_MATERIAL_TXN_ACC ACC,
225 MTL_MATERIAL_TRANSACTIONS B
226 WHERE B.TRANSACTION_ID = ACC.TRANSACTION_ID
227 AND B.last_update_date > b_last_run_date;
228
229 --Insert if either from OR to subinv are assigned to the mobile user
230 CURSOR l_mat_insert_csr (c_history_profile NUMBER)
231 IS
232 SELECT cilaa.user_id
233 , B.TRANSACTION_ID
234 FROM MTL_MATERIAL_TRANSACTIONS B,
235 csm_inv_loc_ass_acc cilaa,
236 csp_inv_loc_assignments cila_from
237 WHERE cilaa.csp_inv_loc_assignment_id = cila_from.csp_inv_loc_assignment_id
238 AND TRANSACTION_ACTION_ID = 2 --Subinventory transfer
239 AND cila_from.subinventory_code = B.subinventory_code
240 AND cila_from.organization_id = B.organization_id
241 AND NVL(cila_from.locator_id,0) = NVL(B.locator_id,0)
242 AND NOT EXISTS (SELECT 1 FROM CSM_MTL_MATERIAL_TXN_ACC ACC
243 WHERE B.TRANSACTION_ID = ACC.TRANSACTION_ID
244 And Acc.User_Id = Cilaa.User_Id)
245 AND B.transaction_date > (sysdate - c_history_profile)
246 UNION ALL
247 SELECT cilaa.user_id
248 , B.TRANSACTION_ID
249 FROM MTL_MATERIAL_TRANSACTIONS B,
250 csm_inv_loc_ass_acc cilaa,
251 csp_inv_loc_assignments cila_to
252 WHERE cilaa.csp_inv_loc_assignment_id = cila_to.csp_inv_loc_assignment_id
253 AND TRANSACTION_ACTION_ID = 2 --Subinventory transfer
254 AND cila_to.subinventory_code = B.transfer_subinventory
255 AND cila_to.organization_id = B.transfer_organization_id
256 And Nvl(Cila_To.Locator_Id,0) = Nvl(B.Transfer_Locator_Id,0)
257 AND B.transaction_date > (sysdate - c_history_profile)
258 AND NOT EXISTS (SELECT 1 FROM CSM_MTL_MATERIAL_TXN_ACC ACC
259 WHERE B.TRANSACTION_ID = ACC.TRANSACTION_ID
263
260 AND ACC.USER_ID = cilaa.USER_ID);
261
262 l_last_run_date jtm_con_request_data.last_run_date%TYPE;
264 TYPE tran_idTab IS TABLE OF MTL_MATERIAL_TRANSACTIONS.TRANSACTION_ID%TYPE INDEX BY BINARY_INTEGER;
265
266 l_user_id_lst ASG_DOWNLOAD.USER_LIST;
267 l_tran_id_lst tran_idTab;
268
269 l_current_date DATE;
270 l_sqlerrno VARCHAR2(20);
271 L_Sqlerrmsg Varchar2(2000);
272 l_profile_value NUMBER;
273 l_dummy boolean;
274
275 BEGIN
276 CSM_UTIL_PKG.LOG('Entering CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc ',
277 g_table_name,FND_LOG.LEVEL_PROCEDURE);
278
279 L_Current_Date := Sysdate;
280 --This profile is supported only at site level.
281 --So it is not required to be called for each user
282 l_profile_value := NVL(CSM_PROFILE_PKG.get_task_history_days(NULL),0);
283 -- get the last run date
284 OPEN l_last_run_date_csr;
285 FETCH l_last_run_date_csr INTO l_last_run_date;
286 CLOSE l_last_run_date_csr;
287
288 IF l_user_id_lst.COUNT > 0 THEN
289 l_user_id_lst.DELETE;
290 END IF;
291 IF l_tran_id_lst.COUNT > 0 THEN
292 l_tran_id_lst.DELETE;
293 END IF;
294
295 CSM_UTIL_PKG.LOG('Processing Material Trasaction Delete',
296 'CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc',FND_LOG.LEVEL_STATEMENT);
297
298 --Processing Deletes
299 OPEN l_mat_delete_csr(l_profile_value);
300 LOOP
301 FETCH l_mat_delete_csr BULK COLLECT INTO l_user_id_lst, l_tran_id_lst LIMIT 500;
302 EXIT WHEN l_user_id_lst.COUNT = 0;
303
304 FOR i IN l_user_id_lst.FIRST..l_user_id_lst.LAST LOOP
305 Delete_MTL_Mat_Transaction (l_user_id_lst(i), l_tran_id_lst(i));
306 END LOOP;
307 COMMIT;
308 IF l_user_id_lst.COUNT > 0 THEN
309 l_user_id_lst.DELETE;
310 END IF;
311 IF l_tran_id_lst.COUNT > 0 THEN
312 l_tran_id_lst.DELETE;
313 END IF;
314
315 END LOOP;
316 CLOSE l_mat_delete_csr;
317
318 --Processing updates
319 IF l_user_id_lst.COUNT > 0 THEN
320 l_user_id_lst.DELETE;
321 END IF;
322 IF l_tran_id_lst.COUNT > 0 THEN
323 l_tran_id_lst.DELETE;
324 END IF;
325
326 CSM_UTIL_PKG.LOG('Processing Material Trasaction Update',
327 'CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc',FND_LOG.LEVEL_STATEMENT);
328 OPEN l_mat_update_csr (l_last_run_date);
329 LOOP
330 FETCH l_mat_update_csr BULK COLLECT INTO l_user_id_lst , l_tran_id_lst LIMIT 500;
331 EXIT WHEN l_user_id_lst.COUNT = 0;
332
333 FOR i IN l_user_id_lst.FIRST..l_user_id_lst.LAST LOOP
334 Update_MTL_Mat_Transaction (l_user_id_lst(i), l_tran_id_lst(i));
335 END LOOP;
336 COMMIT;
337 IF l_user_id_lst.COUNT > 0 THEN
338 l_user_id_lst.DELETE;
339 END IF;
340 IF l_tran_id_lst.COUNT > 0 THEN
341 l_tran_id_lst.DELETE;
342 END IF;
343
344 END LOOP;
345 CLOSE l_mat_update_csr;
346
347
348 --Process Inserts
349 IF l_user_id_lst.COUNT > 0 THEN
350 l_user_id_lst.DELETE;
351 END IF;
352 IF l_tran_id_lst.COUNT > 0 THEN
353 l_tran_id_lst.DELETE;
354 END IF;
355
356 CSM_UTIL_PKG.LOG('Processing Material Trasaction Insert',
357 'CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc',FND_LOG.LEVEL_STATEMENT);
358
359 OPEN l_mat_insert_csr(l_profile_value);
360 LOOP
361 FETCH l_mat_insert_csr BULK COLLECT INTO l_user_id_lst, l_tran_id_lst LIMIT 500;
362 EXIT WHEN l_user_id_lst.COUNT = 0;
363
364 FOR i IN l_user_id_lst.FIRST..l_user_id_lst.LAST LOOP
365 Insert_MTL_Mat_Transaction (l_user_id_lst(i), l_tran_id_lst(i));
366 END LOOP;
367 COMMIT;
368 IF l_user_id_lst.COUNT > 0 THEN
369 l_user_id_lst.DELETE;
370 END IF;
371 IF l_tran_id_lst.COUNT > 0 THEN
372 l_tran_id_lst.DELETE;
373 END IF;
374
375 END LOOP;
376 CLOSE l_mat_insert_csr;
377 COMMIT;
378
379 -- update last_run_date
380 UPDATE jtm_con_request_data
381 SET last_run_date = l_current_date
382 WHERE package_name = 'CSM_MTL_MATERIAL_TXN_ACC_PKG'
383 AND procedure_name = 'REFRESH_MAT_TXN_ACC';
384
385 COMMIT;
386
387 p_status := 'FINE';
388 p_message := 'CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc executed successfully';
389
390 CSM_UTIL_PKG.LOG('Leaving CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc ',
391 'CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc',FND_LOG.LEVEL_PROCEDURE);
392 EXCEPTION
393 WHEN OTHERS THEN
394 l_sqlerrno := TO_CHAR(SQLCODE);
395 l_sqlerrmsg := SUBSTR(SQLERRM, 1,2000);
396 p_status := 'ERROR';
397 p_message := 'Error in CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc: ' || l_sqlerrno || ':' || l_sqlerrmsg;
398 ROLLBACK;
399 csm_util_pkg.LOG('CSM_MTL_MATERIAL_TXN_ACC_PKG.Refresh_Mat_Txn_Acc ERROR : ' || l_sqlerrno || ':' || l_sqlerrmsg);
400 END Refresh_Mat_Txn_Acc;
401
402 --Called when a new user is created
403 PROCEDURE get_new_user_mat_txn(p_user_id IN NUMBER)
404 IS
405
406 --Insert if either from OR to subinv are assigned to the mobile user
407 CURSOR l_mat_insert_csr (b_user_id IN NUMBER, b_profile_value NUMBER) IS
408 SELECT B.TRANSACTION_ID
409 FROM MTL_MATERIAL_TRANSACTIONS B
410 WHERE B.transaction_date > (sysdate - b_profile_value)
411 AND B.TRANSACTION_ACTION_ID = 2 --Subinventory transfer
412 AND EXISTS( SELECT 1
413 FROM csm_inv_loc_ass_acc cilaa1,
414 csp_inv_loc_assignments cila_from
415 WHERE cilaa1.csp_inv_loc_assignment_id = cila_from.csp_inv_loc_assignment_id
416 AND cila_from.subinventory_code = B.subinventory_code
417 AND cila_from.organization_id = B.organization_id
418 AND NVL(cila_from.locator_id,0) = NVL(B.locator_id,0)
419 AND cilaa1.user_id = b_user_id)
420 AND NOT EXISTS (SELECT 1 FROM CSM_MTL_MATERIAL_TXN_ACC ACC
421 WHERE B.TRANSACTION_ID = ACC.TRANSACTION_ID
422 AND ACC.USER_ID = b_user_id)
423 UNION ALL
424 SELECT B.TRANSACTION_ID
425 FROM MTL_MATERIAL_TRANSACTIONS B
426 WHERE B.transaction_date > (sysdate - b_profile_value)
427 AND B.TRANSACTION_ACTION_ID = 2 --Subinventory transfer
428 AND EXISTS (SELECT 1
429 FROM csm_inv_loc_ass_acc cilaa2,
430 csp_inv_loc_assignments cila_to
431 WHERE cilaa2.csp_inv_loc_assignment_id = cila_to.csp_inv_loc_assignment_id
432 AND cila_to.subinventory_code = B.transfer_subinventory
433 AND cila_to.organization_id = B.transfer_organization_id
434 AND NVL(cila_to.locator_id,0) = NVL(B.transfer_locator_id,0)
435 AND cilaa2.user_id = b_user_id)
436 AND NOT EXISTS (SELECT 1 FROM CSM_MTL_MATERIAL_TXN_ACC ACC
437 WHERE B.TRANSACTION_ID = ACC.TRANSACTION_ID
438 AND ACC.USER_ID = b_user_id);
439
440
441
442 TYPE Tran_idTab IS TABLE OF MTL_MATERIAL_TRANSACTIONS.TRANSACTION_ID%TYPE INDEX BY BINARY_INTEGER;
443
444 l_tran_id_lst Tran_idTab;
445
446 l_sqlerrno VARCHAR2(20);
447 l_sqlerrmsg VARCHAR2(2000);
448 l_profile_value NUMBER;
449 l_dummy boolean;
450
451 BEGIN
452 CSM_UTIL_PKG.LOG('Entering CSM_MTL_MATERIAL_TXN_ACC_PKG.get_new_user_mat_txn ',
453 g_table_name,FND_LOG.LEVEL_PROCEDURE);
454 l_profile_value := NVL(CSM_PROFILE_PKG.get_task_history_days(p_user_id),0);
455
456 OPEN l_mat_insert_csr(p_user_id, l_profile_value);
457 LOOP
458 IF l_tran_id_lst.COUNT > 0 THEN
459 l_tran_id_lst.DELETE;
460 END IF;
461 FETCH l_mat_insert_csr BULK COLLECT INTO l_tran_id_lst LIMIT 1000;
462 EXIT WHEN l_tran_id_lst.COUNT = 0;
463
464 FOR i IN l_tran_id_lst.FIRST..l_tran_id_lst.LAST LOOP
465 Insert_MTL_Mat_Transaction (p_user_id, l_tran_id_lst(i));
466 END LOOP;
467
468 END LOOP;
469 CLOSE l_mat_insert_csr;
470
471 CSM_UTIL_PKG.LOG('Leaving CSM_MTL_MATERIAL_TXN_ACC_PKG.get_new_user_mat_txn ',
472 'CSM_MTL_MATERIAL_TXN_ACC_PKG.get_new_user_mat_txn',FND_LOG.LEVEL_PROCEDURE);
473 EXCEPTION
474 WHEN OTHERS THEN
475 l_sqlerrno := TO_CHAR(SQLCODE);
476 l_sqlerrmsg := SUBSTR(SQLERRM, 1,2000);
477 ROLLBACK;
478 csm_util_pkg.LOG('CSM_MTL_MATERIAL_TXN_ACC_PKG.get_new_user_mat_txn ERROR : ' || l_sqlerrno || ':' || l_sqlerrmsg);
479 END get_new_user_mat_txn;
480
481 END CSM_MTL_MATERIAL_TXN_ACC_PKG;