DBA Data[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;