DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_SERIAL_NUMBERS_EVENT_PKG

Source


1 PACKAGE BODY CSM_SERIAL_NUMBERS_EVENT_PKG AS
2 /* $Header: csmeslnb.pls 120.6 2008/02/06 13:50:00 anaraman ship $*/
3 --
4 -- To modify this template, edit file PKGBODY.TXT in TEMPLATE
5 -- directory of SQL Navigator
6 --
7 -- Purpose: Briefly explain the functionality of the package body
8 --
9 -- MODIFICATION HISTORY
10 -- Person      Date    Comments
11 -- ---------   ------  ------------------------------------------
12    -- Enter procedure, function bodies as shown below
13 
14 g_pub_item varchar2(30) := 'CSM_MTL_SERIAL_NUMBERS';
15 
16 PROCEDURE insert_mtl_serial_numbers(p_organization_id IN number, p_last_run_date IN date, p_resource_id IN number, p_user_id IN number)
17 IS
18 TYPE inventory_items_tbl_typ IS TABLE OF mtl_serial_numbers.inventory_item_id%TYPE INDEX BY binary_integer;
19 TYPE serial_numbers_tbl_typ IS TABLE OF mtl_serial_numbers.serial_number%TYPE INDEX BY binary_integer;
20 TYPE organizations_tbl_typ IS TABLE OF mtl_serial_numbers.current_organization_id%TYPE INDEX BY binary_integer;
21 TYPE access_id_tbl_typ IS TABLE OF csm_mtl_serial_numbers_acc.access_id%TYPE INDEX BY binary_integer;
22 
23 l_inventory_items_tbl  inventory_items_tbl_typ;
24 l_serial_numbers_tbl   serial_numbers_tbl_typ;
25 l_organizations_tbl    organizations_tbl_typ;
26 l_access_id_tbl        access_id_tbl_typ;
27 l_run_date             DATE;
28 l_markdirty            boolean;
29 l_sqlerrno             varchar2(20);
30 l_sqlerrmsg            varchar2(2000);
31 
32 -- update counter of records that may already exist in acc table
33 CURSOR l_upd_mtl_serial_numbers_csr(p_organization_id in number, p_resourceid IN number, p_userid in number, p_lastrundate IN date)
34 IS
35 SELECT acc.access_id
36 FROM   csm_mtl_serial_numbers_acc acc
37 WHERE  acc.user_id = p_userid
38 --AND acc.current_organization_id = p_organization_id
39 AND   (acc.inventory_item_id, acc.serial_number, acc.current_organization_id) IN (
40         SELECT inventory_item_id, serial_number, current_organization_id
41     	FROM mtl_serial_numbers
42     	WHERE creation_date >= NVL(p_lastrundate, creation_date)
43     	AND current_status =3
44     	AND (current_subinventory_code, current_organization_id) IN (
45      		SELECT subinventory_code
46      		,organization_id
47      		FROM csp_inv_loc_assignments
48      		WHERE resource_id = p_resourceid
49      		AND SYSDATE BETWEEN nvl( effective_date_start, SYSDATE )
50                      AND nvl( effective_date_end , SYSDATE ))
51     		 );
52 
53 -- get all new serial numbers that do not exist in acc table
54 CURSOR l_ins_mtl_serial_numbers_csr(p_organization_id in number, p_resourceid IN number, p_userid in number, p_lastrundate IN date)
55 IS--select  serial numbers in status 3 for both ib non ib items
56  SELECT  csm_mtl_serial_numbers_acc_s.nextval, inventory_item_id, serial_number, current_organization_id
57  FROM 	 mtl_serial_numbers
58  WHERE   current_status =3 -- resides in stores + issued out of subinv
59  AND   	 ( current_subinventory_code, current_organization_id ) IN (
60        	   SELECT subinventory_code
61        	   ,organization_id
62        		FROM csp_inv_loc_assignments
63        		WHERE resource_id = p_resourceid
64        		AND SYSDATE BETWEEN nvl( effective_date_start, SYSDATE )
65                      AND nvl( effective_date_end , SYSDATE ))
66  AND  	 ( inventory_item_id, serial_number, current_organization_id ) NOT IN (
67            SELECT inventory_item_id, serial_number, current_organization_id
68        	   FROM csm_mtl_serial_numbers_acc
69        	   WHERE user_id = p_userid );
70 
71 CURSOR l_ins_mtl_ser_num_fornonib_csr(p_organization_id in number, p_resourceid IN number, p_userid in number, p_lastrundate IN date)
72 IS--select  serial numbers in status 1,4 for non ib items only
73 SELECT   csm_mtl_serial_numbers_acc_s.nextval,
74  		 ser.inventory_item_id,
75 		 ser.serial_number,
76   		 ser.current_organization_id
77 FROM   	 mtl_serial_numbers ser
78 WHERE 	 ser.current_status IN (1,4)     --Not assigned and out of subinv
79 AND 	 EXISTS (
80 	  		   SELECT  'x'
81 			   FROM	   csm_mtl_onhand_qty_acc ohqacc,
82 			   		   mtl_system_items sys
83 			   WHERE   ohqacc.inventory_item_id 	 = ser.inventory_item_id
84 			   AND 	   ohqacc.organization_id 		 = ser.current_organization_id
85 			   AND	   ohqacc.user_id 				 = p_userid
86 			   AND     ohqacc.inventory_item_id    	 = sys.inventory_item_id
87 			   AND     ohqacc.ORGANIZATION_ID 		 = sys.ORGANIZATION_ID
88 			   AND     NVL(sys.COMMS_NL_TRACKABLE_FLAG,'N') ='N'
89    			  )
90 AND    NOT EXISTS (
91                SELECT 'x'
92                FROM   csm_mtl_serial_numbers_acc sacc
93        		   WHERE  user_id 					   = p_userid
94       		   AND    sacc.inventory_item_id 	   = ser.inventory_item_id
95       		   AND    sacc.serial_number  	 	   = ser.serial_number
96       		   AND    sacc.current_organization_id = ser.current_organization_id);
97 
98 BEGIN
99  CSM_UTIL_PKG.LOG('Entering CSM_SERIAL_NUMBERS_EVENT_PKG.INSERT_MTL_SERIAL_NUMBERS ',
100                          'CSM_SERIAL_NUMBERS_EVENT_PKG.INSERT_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_PROCEDURE);
101 
102  IF l_access_id_tbl.count > 0 THEN
103     l_access_id_tbl.DELETE;
104  END IF;
105 
106  l_run_date := SYSDATE;
107 
108  -- update counter of serial numbers that already exist for user in acc table
109  OPEN l_upd_mtl_serial_numbers_csr(p_organization_id, p_resource_id, p_user_id, p_last_run_date);
110  FETCH l_upd_mtl_serial_numbers_csr BULK COLLECT INTO l_access_id_tbl;
111  CLOSE l_upd_mtl_serial_numbers_csr;
112 
113  IF l_access_id_tbl.count > 0 THEN
114     FORALL i IN 1..l_access_id_tbl.count
115         UPDATE csm_mtl_serial_numbers_acc
116         SET    counter = counter + 1
117               ,last_update_date = SYSDATE
118               ,last_updated_by = fnd_global.user_id
119         WHERE access_id = l_access_id_tbl(i);
120 
121    l_access_id_tbl.delete;
122  END IF;
123 
124  -- BULK collect all new inserted serial numbers with STatus 3
125  OPEN l_ins_mtl_serial_numbers_csr(p_organization_id, p_resource_id, p_user_id, p_last_run_date);
126  FETCH l_ins_mtl_serial_numbers_csr BULK COLLECT INTO l_access_id_tbl, l_inventory_items_tbl, l_serial_numbers_tbl, l_organizations_tbl;
127  CLOSE l_ins_mtl_serial_numbers_csr;
128 
129  -- bulk insert into acc tables
130  IF l_access_id_tbl.count > 0 THEN
131    FORALL i IN 1..l_access_id_tbl.count
132       INSERT INTO csm_mtl_serial_numbers_acc(access_id, user_id, serial_number, inventory_item_id, current_organization_id,
133                                counter, created_by, creation_date, last_updated_by, last_update_date, last_update_login)
134                         VALUES (l_access_id_tbl(i), p_user_id, l_serial_numbers_tbl(i), l_inventory_items_tbl(i), l_organizations_tbl(i),
135                                 1, fnd_global.user_id, l_run_date, fnd_global.user_id, l_run_date, fnd_global.login_id);
136 
137     CSM_UTIL_PKG.LOG('Bulk inserted ' || l_access_id_tbl.count || ' records into csm_mtl_serial_numbers_acc for resource ' || p_resource_id ,
138                          'CSM_SERIAL_NUMBERS_EVENT_PKG.INSERT_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_STATEMENT);
139 
140    -- make dirty calls
141    FOR i IN 1..l_access_id_tbl.count LOOP
142       l_markdirty := csm_util_pkg.MakeDirtyForResource(g_pub_item,
143                                                        l_access_id_tbl(i),
144                                                        p_resource_id,
145                                                        asg_download.ins,
146                                                        l_run_date);
147    END LOOP;
148  END IF;
149 
150  ---Insert for non ib items
151  IF l_access_id_tbl.count > 0 THEN
152  	l_access_id_tbl.delete;
153  	l_inventory_items_tbl.delete;
154  	l_serial_numbers_tbl.delete;
155     l_organizations_tbl.delete;
156  END IF;
157 
158   -- BULK collect all new inserted serial numbers with STatus 1 and 4 for Non ib items
159  OPEN l_ins_mtl_ser_num_fornonib_csr(p_organization_id, p_resource_id, p_user_id, p_last_run_date);
160  FETCH l_ins_mtl_ser_num_fornonib_csr BULK COLLECT INTO l_access_id_tbl, l_inventory_items_tbl, l_serial_numbers_tbl, l_organizations_tbl;
161  CLOSE l_ins_mtl_ser_num_fornonib_csr;
162 
163  -- bulk insert into acc tables
164  IF l_access_id_tbl.count > 0 THEN
165    FORALL i IN 1..l_access_id_tbl.count
166       INSERT INTO csm_mtl_serial_numbers_acc(access_id, user_id, serial_number, inventory_item_id, current_organization_id,
167                                counter, created_by, creation_date, last_updated_by, last_update_date, last_update_login)
168                         VALUES (l_access_id_tbl(i), p_user_id, l_serial_numbers_tbl(i), l_inventory_items_tbl(i), l_organizations_tbl(i),
169                                 1, fnd_global.user_id, l_run_date, fnd_global.user_id, l_run_date, fnd_global.login_id);
170 
171     CSM_UTIL_PKG.LOG('Bulk inserted ' || l_access_id_tbl.count || ' records into csm_mtl_serial_numbers_acc for resource ' || p_resource_id ,
172                          'CSM_SERIAL_NUMBERS_EVENT_PKG.INSERT_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_STATEMENT);
173 
174    -- make dirty calls
175    FOR i IN 1..l_access_id_tbl.count LOOP
176       l_markdirty := csm_util_pkg.MakeDirtyForResource(g_pub_item,
177                                                        l_access_id_tbl(i),
178                                                        p_resource_id,
179                                                        asg_download.ins,
180                                                        l_run_date);
181    END LOOP;
182  END IF;
183 
184  CSM_UTIL_PKG.LOG('Leaving CSM_SERIAL_NUMBERS_EVENT_PKG.INSERT_MTL_SERIAL_NUMBERS ',
185                          'CSM_SERIAL_NUMBERS_EVENT_PKG.INSERT_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_PROCEDURE);
186 
187  EXCEPTION
188   WHEN others THEN
189      l_sqlerrno := to_char(SQLCODE);
190      l_sqlerrmsg := substr(SQLERRM, 1,2000);
191      CSM_UTIL_PKG.LOG('Exception in CSM_SERIAL_NUMBERS_EVENT_PKG.INSERT_MTL_SERIAL_NUMBERS: ' || l_sqlerrno || ':' || l_sqlerrmsg,
192                          'CSM_SERIAL_NUMBERS_EVENT_PKG.INSERT_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_EXCEPTION);
193 
194 END INSERT_MTL_SERIAL_NUMBERS;
195 
196 PROCEDURE update_mtl_serial_numbers(p_organization_id IN number, p_last_run_date IN date, p_resource_id IN number, p_user_id IN number)
197 IS
198 TYPE access_id_tbl_typ IS TABLE OF csm_mtl_serial_numbers_acc.access_id%TYPE INDEX BY binary_integer;
199 l_access_id_tbl        access_id_tbl_typ;
200 l_run_date DATE;
201 l_markdirty            boolean;
202 l_sqlerrno             varchar2(20);
203 l_sqlerrmsg            varchar2(2000);
204 
205 -- upd serial numbers whose locations have changed within the org to locations user has access to
206 CURSOR l_upd_mtl_serial_numbers_csr(p_lastrundate IN date, p_resourceid IN number, p_userid IN number)
207 IS
208 SELECT access_id
209 FROM csm_mtl_serial_numbers_acc acc
210 ,    mtl_serial_numbers msn
211 WHERE msn.inventory_item_id = acc.inventory_item_id
212 AND   msn.serial_number = acc.serial_number
213 AND   msn.current_organization_id = acc.current_organization_id
214 AND   msn.last_update_date  >= p_lastrundate
215 AND   acc.user_id = p_userid;
216 /*AND ( msn.current_subinventory_code, msn.current_organization_id ) IN (
217      SELECT subinventory_code
218      ,      organization_id
219      FROM csp_inv_loc_assignments
220      WHERE resource_id = p_resourceid
221      AND SYSDATE BETWEEN nvl( effective_date_start, SYSDATE )
222                      AND nvl( effective_date_end , SYSDATE ));*/
223 
224 -- decrement counter of serial numbers whose locations have changed within the org or that reside in a diff org
225 CURSOR l_del_mtl_serial_numbers_csr(p_lastrundate IN date, p_resourceid IN number, p_userid IN number)
226 IS
227 SELECT access_id
228 FROM csm_mtl_serial_numbers_acc acc
229 ,    mtl_serial_numbers msn
230 WHERE msn.inventory_item_id = acc.inventory_item_id
231 AND   msn.serial_number = acc.serial_number
232 AND   msn.current_organization_id = acc.current_organization_id
233 AND   acc.user_id = p_userid
234 AND   msn.current_status =3
235 AND ( msn.current_subinventory_code, msn.current_organization_id ) NOT IN (
236      SELECT subinventory_code
237      ,      organization_id
238      FROM csp_inv_loc_assignments
239      WHERE resource_id = p_resourceid
240      AND SYSDATE BETWEEN nvl( effective_date_start, SYSDATE )
241                      AND nvl( effective_date_end , SYSDATE ))
242 UNION
243 SELECT access_id
244 FROM  csm_mtl_serial_numbers_acc acc
245 WHERE acc.user_id = p_user_id
246 AND NOT EXISTS
247  	(SELECT 1
248   	  FROM mtl_serial_numbers msn
249   	  WHERE msn.serial_number = acc.serial_number
250   	  AND  msn.inventory_item_id = acc.inventory_item_id
251   	  AND msn.current_organization_id = acc.current_organization_id
252   	  AND msn.CURRENT_STATUS =3
253  	  )
254 AND NOT EXISTS
255  	( SELECT 1
256  	  FROM   mtl_serial_numbers ser,
257  	    	 csm_mtl_onhand_qty_acc ohqacc,
258 	    	 mtl_system_items sys
259 	  WHERE  ser.current_status in (1,4)
260 	  AND	 ohqacc.user_id = acc.user_id
261 	  AND    ser.serial_number  = acc.serial_number
262   	  AND	 ser.inventory_item_id =acc.inventory_item_id
263 	  AND	 ser.inventory_item_id =sys.inventory_item_id
264 	  AND    ser.CURRENT_ORGANIZATION_ID =  sys.ORGANIZATION_ID
265 	  AND 	 NVL(sys.COMMS_NL_TRACKABLE_FLAG,'N') ='N'
266 	  AND 	 ohqacc.inventory_item_id = ser.inventory_item_id
267 	  AND 	 ohqacc.organization_id = ser.current_organization_id
268 
269  	  );
270 
271 
272 CURSOR l_delete_serial_number_acc(p_userid IN number)
273 IS
274 SELECT access_id
275 FROM csm_mtl_serial_numbers_acc
276 WHERE user_id = p_userid
277 AND counter = 0;
278 
279 BEGIN
280  CSM_UTIL_PKG.LOG('Entering CSM_SERIAL_NUMBERS_EVENT_PKG.UPDATE_MTL_SERIAL_NUMBERS ',
281                          'CSM_SERIAL_NUMBERS_EVENT_PKG.UPDATE_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_PROCEDURE);
282 
283  l_run_date := SYSDATE;
284 
285  IF l_access_id_tbl.count > 0 THEN
286     l_access_id_tbl.DELETE;
287  END IF;
288 
289 -- bulk collect all updated serial_numbers
290  OPEN l_upd_mtl_serial_numbers_csr(p_last_run_date, p_resource_id, p_user_id);
291  FETCH l_upd_mtl_serial_numbers_csr BULK COLLECT INTO l_access_id_tbl;
292  CLOSE l_upd_mtl_serial_numbers_csr;
293 
294  IF l_access_id_tbl.count > 0 THEN
295    CSM_UTIL_PKG.LOG(l_access_id_tbl.count || ' records sent to olite for updating csm_mtl_serial_numbers for resource ' || p_resource_id ,
296                          'CSM_SERIAL_NUMBERS_EVENT_PKG.UPDATE_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_STATEMENT);
297 
298    -- make dirty calls
299    FOR i IN 1..l_access_id_tbl.count LOOP
300       l_markdirty := csm_util_pkg.MakeDirtyForResource(g_pub_item,
301                                                        l_access_id_tbl(i),
302                                                        p_resource_id,
303                                                        asg_download.upd,
304                                                        l_run_date);
305    END LOOP;
306 
307    l_access_id_tbl.DELETE;
308  END IF;
309 
310  -- bulk collect all serial numbers to be deleted
311  OPEN l_del_mtl_serial_numbers_csr(p_last_run_date, p_resource_id, p_user_id);
312  FETCH l_del_mtl_serial_numbers_csr BULK COLLECT INTO l_access_id_tbl;
313  CLOSE l_del_mtl_serial_numbers_csr;
314 
315  -- update counter for records to be deleted
316  IF l_access_id_tbl.count > 0 THEN
317     FORALL i IN 1..l_access_id_tbl.count
318         UPDATE csm_mtl_serial_numbers_acc
319         SET    counter = counter - 1
320               ,last_update_date = SYSDATE
321               ,last_updated_by = fnd_global.user_id
322         WHERE access_id = l_access_id_tbl(i);
323 
324    l_access_id_tbl.delete;
325  END IF;
326 
327  -- delete all access_id's that have counter = 0
328  OPEN l_delete_serial_number_acc(p_user_id);
329  FETCH l_delete_serial_number_acc BULK COLLECT INTO l_access_id_tbl;
330  CLOSE l_delete_serial_number_acc;
331 
332  IF l_access_id_tbl.count > 0 THEN
333    CSM_UTIL_PKG.LOG(l_access_id_tbl.count || ' records sent to olite for deleting csm_mtl_serial_numbers for resource ' || p_resource_id ,
334                          'CSM_SERIAL_NUMBERS_EVENT_PKG.UPDATE_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_STATEMENT);
335 
336    -- make dirty calls
337    FOR i IN 1..l_access_id_tbl.count LOOP
338       l_markdirty := csm_util_pkg.MakeDirtyForResource(g_pub_item,
339                                                        l_access_id_tbl(i),
340                                                        p_resource_id,
341                                                        asg_download.del,
342                                                        l_run_date);
343    END LOOP;
344 
345    FORALL i IN 1..l_access_id_tbl.count
346       DELETE csm_mtl_serial_numbers_acc WHERE ACCESS_ID = l_access_id_tbl(i);
347 
348    l_access_id_tbl.DELETE;
349  END IF;
350 
351  CSM_UTIL_PKG.LOG('Leaving CSM_SERIAL_NUMBERS_EVENT_PKG.UPDATE_MTL_SERIAL_NUMBERS ',
352                          'CSM_SERIAL_NUMBERS_EVENT_PKG.UPDATE_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_PROCEDURE);
353 
354  EXCEPTION
355   WHEN others THEN
356      l_sqlerrno := to_char(SQLCODE);
357      l_sqlerrmsg := substr(SQLERRM, 1,2000);
358      CSM_UTIL_PKG.LOG('Exception in CSM_SERIAL_NUMBERS_EVENT_PKG.UPDATE_MTL_SERIAL_NUMBERS: ' || l_sqlerrno || ':' || l_sqlerrmsg,
359                          'CSM_SERIAL_NUMBERS_EVENT_PKG.UPDATE_MTL_SERIAL_NUMBERS',FND_LOG.LEVEL_EXCEPTION);
360 
361 END UPDATE_MTL_SERIAL_NUMBERS;
362 
363 PROCEDURE refresh_mtl_serial_numbers_acc
364 IS
365 PRAGMA AUTONOMOUS_TRANSACTION;
366 l_prog_update_date 			   jtm_con_request_data.last_run_date%TYPE;
367 l_all_omfs_palm_resource_list  asg_download.user_list;
368 l_valid_omfs_resource_list 	   asg_download.user_list;
369 l_null_palm_omfs_resource_list asg_download.user_list;
370 l_user_palm_organization_id    mtl_system_items.organization_id%TYPE;
371 l_usr_list_for_serial 		   asg_download.user_list;
372 l_rsrc_list_for_serial 		   asg_download.user_list;
373 l_last_run_date 			   jtm_con_request_data.last_run_date%TYPE;
374 l_run_date DATE;
375 l_user_id  fnd_user.user_id%TYPE;
376 l_sqlerrno varchar2(20);
377 l_sqlerrmsg varchar2(2000);
378 
379 CURSOR l_last_run_date_csr
380 IS
381 SELECT nvl(last_run_date, (sysdate - 365*50))
382 FROM jtm_con_request_data
383 WHERE package_name = 'CSM_SERIAL_NUMBERS_EVENT_PKG'
384 AND procedure_name = 'REFRESH_MTL_SERIAL_NUMBERS_ACC';
385 
386 CURSOR l_user_id_csr (p_resourceid IN number)
387 IS
388 SELECT user_id
389 FROM asg_user
390 WHERE resource_id = p_resourceid;
391 
392 CURSOR l_usr_rsrc_list_serial
393 IS
394 SELECT
395 au.resource_id,
396 au.user_id
397 FROM asg_user_pub_resps aupr,
398      asg_user au
399 WHERE aupr.pub_name = 'SERVICEP'
400 AND  au.user_name = aupr.user_name
401 AND  au.owner_id  = au.user_id
402 AND  au.enabled   = 'Y';
403 
404 BEGIN
405  l_run_date := SYSDATE;
406 
407  CSM_UTIL_PKG.LOG('Entering CSM_SERIAL_NUMBERS_EVENT_PKG.refresh_mtl_serial_numbers_acc ',
408                          'CSM_SERIAL_NUMBERS_EVENT_PKG.refresh_mtl_serial_numbers_acc',FND_LOG.LEVEL_PROCEDURE);
409 
410  -- R12 Serial Number implementation
411  IF l_usr_list_for_serial.COUNT > 0 THEN
412  	l_usr_list_for_serial.DELETE;
413  END IF;
414 
415  IF l_rsrc_list_for_serial.COUNT > 0 THEN
416  	l_rsrc_list_for_serial.DELETE;
417  END IF;
418 
419  OPEN l_last_run_date_csr;
420  FETCH l_last_run_date_csr INTO l_last_run_date;
421  CLOSE l_last_run_date_csr;
422 
423  OPEN l_usr_rsrc_list_serial;
424  FETCH l_usr_rsrc_list_serial BULK COLLECT INTO l_rsrc_list_for_serial,l_usr_list_for_serial;
425  CLOSE l_usr_rsrc_list_serial;
426  IF l_usr_list_for_serial.COUNT > 0 THEN
427   FOR l_count in 1..l_usr_list_for_serial.COUNT LOOP
428     l_user_palm_organization_id:=csm_profile_pkg.get_organization_id(l_usr_list_for_serial(l_count));
429     --updating/deleting serial numbers already present in the ACC
430     update_mtl_serial_numbers(l_user_palm_organization_id,l_last_run_date,l_rsrc_list_for_serial(l_count),l_usr_list_for_serial(l_count));
431         --inserting new serial numbers
432     insert_mtl_serial_numbers(l_user_palm_organization_id,l_last_run_date,l_rsrc_list_for_serial(l_count),l_usr_list_for_serial(l_count));
433 
434   END LOOP;
435  END IF;
436 
437 
438  -- update last_run_date
439  UPDATE jtm_con_request_data
440  SET last_run_date = l_run_date
441  WHERE package_name = 'CSM_SERIAL_NUMBERS_EVENT_PKG'
442  AND procedure_name = 'REFRESH_MTL_SERIAL_NUMBERS_ACC';
443 
444  COMMIT;
445 
446  CSM_UTIL_PKG.LOG('Leaving CSM_SERIAL_NUMBERS_EVENT_PKG.refresh_mtl_serial_numbers_acc ',
447                          'CSM_SERIAL_NUMBERS_EVENT_PKG.refresh_mtl_serial_numbers_acc',FND_LOG.LEVEL_PROCEDURE);
448 
449 
450  EXCEPTION
451   WHEN others THEN
452      l_sqlerrno := to_char(SQLCODE);
453      l_sqlerrmsg := substr(SQLERRM, 1,2000);
454      ROLLBACK;
455      CSM_UTIL_PKG.LOG('Exception in CSM_SERIAL_NUMBERS_EVENT_PKG.REFRESH_MTL_SERIAL_NUMBERS_ACC: ' || l_sqlerrno || ':' || l_sqlerrmsg,
456                          'CSM_SERIAL_NUMBERS_EVENT_PKG.REFRESH_MTL_SERIAL_NUMBERS_ACC',FND_LOG.LEVEL_EXCEPTION);
457 
458 END REFRESH_MTL_SERIAL_NUMBERS_ACC;
459 
460 PROCEDURE DELETE_OLD_ORG_SERIAL_NUMBERS(p_organization_id IN number
461                                         , p_user_id     IN number
462                                         , p_resource_id IN number)
463 IS
464 TYPE access_id_tbl_typ  IS TABLE OF csm_mtl_serial_numbers_acc.access_id%TYPE INDEX BY BINARY_INTEGER;
465 l_access_id_tbl  access_id_tbl_typ;
466 l_mark_dirty boolean;
467 l_run_date date;
468 l_sqlerrno  varchar2(20);
469 l_sqlerrmsg varchar2(2000);
470 
471 -- make delete dirty calls for serial numbers with counter=1; do not delete from acc
472 -- since delete will be done based on csp_inv_loc_assignment data
473 CURSOR l_del_mtl_serial_numbers_csr(p_organizationid IN number,
474                                     p_userid IN number)
475 IS
476 SELECT access_id
477 FROM csm_mtl_serial_numbers_acc
478 WHERE user_id = p_userid
479 AND current_organization_id = p_organizationid
480 AND counter = 0;
481 
482 BEGIN
483  CSM_UTIL_PKG.LOG('Entering CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.DELETE_OLD_ORG_SERIAL_NUMBERS ',
484                          'CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.DELETE_OLD_ORG_SERIAL_NUMBERS',FND_LOG.LEVEL_PROCEDURE);
485 
486  l_run_date := SYSDATE;
487 
488 
489  CSM_UTIL_PKG.LOG('Leaving CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.DELETE_OLD_ORG_SERIAL_NUMBERS ',
490                          'CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.DELETE_OLD_ORG_SERIAL_NUMBERS',FND_LOG.LEVEL_PROCEDURE);
491 
492  EXCEPTION
493   WHEN others THEN
494      l_sqlerrno := to_char(SQLCODE);
495      l_sqlerrmsg := substr(SQLERRM, 1,2000);
496 --logm('Exception ' || l_sqlerrmsg);
497      CSM_UTIL_PKG.LOG('Exception in CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.DELETE_OLD_ORG_SERIAL_NUMBERS: ' || l_sqlerrno || ':' || l_sqlerrmsg,
498                          'CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.DELETE_OLD_ORG_SERIAL_NUMBERS',FND_LOG.LEVEL_EXCEPTION);
499 
500 END DELETE_OLD_ORG_SERIAL_NUMBERS;
501 
502 
503 PROCEDURE GET_NEW_ORG_SERIAL_NUMBERS(p_organization_id IN number
504                                         , p_user_id     IN number
505                                         , p_resource_id IN number)
506 IS
507 TYPE access_id_tbl_typ  IS TABLE OF csm_mtl_serial_numbers_acc.access_id%TYPE INDEX BY BINARY_INTEGER;
508 l_access_id_tbl  access_id_tbl_typ;
509 l_mark_dirty boolean;
510 l_run_date date;
511 l_sqlerrno  varchar2(20);
512 l_sqlerrmsg varchar2(2000);
513 
514 -- make insert dirty calls for serial numbers with counter=1;
515 -- since data with counter>1 would already be existing on the palm
516 CURSOR l_del_mtl_serial_numbers_csr(p_organizationid IN number,
517                                     p_userid IN number)
518 IS
519 SELECT access_id
520 FROM csm_mtl_serial_numbers_acc
521 WHERE user_id = p_userid
522 AND current_organization_id = p_organizationid
523 AND counter = 1;
524 
525 BEGIN
526  CSM_UTIL_PKG.LOG('Entering CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.GET_NEW_ORG_SERIAL_NUMBERS ',
527                          'CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.GET_NEW_ORG_SERIAL_NUMBERS',FND_LOG.LEVEL_PROCEDURE);
528 
529  l_run_date := SYSDATE;
530 
531 
532  CSM_UTIL_PKG.LOG('Leaving CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.GET_NEW_ORG_SERIAL_NUMBERS ',
533                          'CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.GET_NEW_ORG_SERIAL_NUMBERS',FND_LOG.LEVEL_PROCEDURE);
534 
535  EXCEPTION
536   WHEN others THEN
537      l_sqlerrno := to_char(SQLCODE);
538      l_sqlerrmsg := substr(SQLERRM, 1,2000);
539      CSM_UTIL_PKG.LOG('Exception in CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.GET_NEW_ORG_SERIAL_NUMBERS: ' || l_sqlerrno || ':' || l_sqlerrmsg,
540                          'CSM_MTL_SERIAL_NUMBERS_EVENT_PKG.GET_NEW_ORG_SERIAL_NUMBERS',FND_LOG.LEVEL_EXCEPTION);
541 
542 
543 END GET_NEW_ORG_SERIAL_NUMBERS;
544 
545 -- currently not being used as serial numbers are not downloaded
546 PROCEDURE INV_LOC_ASS_MSN_MAKE_DIRTY_I(p_csp_inv_loc_assignment_id IN NUMBER, p_user_id IN NUMBER)
547 IS
548 l_sqlerrno VARCHAR2(20);
549 l_sqlerrmsg VARCHAR2(4000);
550 l_error_msg VARCHAR2(4000);
551 l_return_status VARCHAR2(2000);
552 
553 BEGIN
554    CSM_UTIL_PKG.LOG('Entering INV_LOC_ASS_MSN_MAKE_DIRTY_I for csp_inv_loc_assignment_id: ' || p_csp_inv_loc_assignment_id,
555                                    'CSM_SERIAL_NUMBERS_EVENT_PKG.INV_LOC_ASS_MSN_MAKE_DIRTY_I',FND_LOG.LEVEL_PROCEDURE);
556 
557    CSM_UTIL_PKG.LOG('Leaving INV_LOC_ASS_MSN_MAKE_DIRTY_I for csp_inv_loc_assignment_id: ' || p_csp_inv_loc_assignment_id,
558                                    'CSM_SERIAL_NUMBERS_EVENT_PKG.INV_LOC_ASS_MSN_MAKE_DIRTY_I',FND_LOG.LEVEL_PROCEDURE);
559 
560 EXCEPTION
561   	WHEN OTHERS THEN
562         l_sqlerrno := to_char(SQLCODE);
563         l_sqlerrmsg := substr(SQLERRM, 1,2000);
564         l_error_msg := ' Exception in  INV_LOC_ASS_MSN_MAKE_DIRTY_I for csp_inv_loc_assignment_id:'
565                        || to_char(p_csp_inv_loc_assignment_id) || ':' || l_sqlerrno || ':' || l_sqlerrmsg;
566         CSM_UTIL_PKG.LOG(l_error_msg, 'CSM_SERIAL_NUMBERS_EVENT_PKG.INV_LOC_ASS_MSN_MAKE_DIRTY_I',FND_LOG.LEVEL_EXCEPTION);
567         RAISE;
568 END INV_LOC_ASS_MSN_MAKE_DIRTY_I;
569 
570 -- currently not being used as serial numbers are not downloaded
571 PROCEDURE INV_LOC_ASS_MSN_MAKE_DIRTY_D(p_csp_inv_loc_assignment_id IN NUMBER,
572                                        p_user_id IN NUMBER)
573 IS
574 l_sqlerrno VARCHAR2(20);
575 l_sqlerrmsg VARCHAR2(4000);
576 l_error_msg VARCHAR2(4000);
577 l_return_status VARCHAR2(2000);
578 
579 BEGIN
580    CSM_UTIL_PKG.LOG('Entering INV_LOC_ASS_MSN_MAKE_DIRTY_D for csp_inv_loc_assignment_id: ' || p_csp_inv_loc_assignment_id,
581                                    'CSM_SERIAL_NUMBERS_EVENT_PKG.INV_LOC_ASS_MSN_MAKE_DIRTY_D',FND_LOG.LEVEL_PROCEDURE);
582 
583    CSM_UTIL_PKG.LOG('Leaving INV_LOC_ASS_MSN_MAKE_DIRTY_D for csp_inv_loc_assignment_id: ' || p_csp_inv_loc_assignment_id,
584                                    'CSM_SERIAL_NUMBERS_EVENT_PKG.INV_LOC_ASS_MSN_MAKE_DIRTY_D',FND_LOG.LEVEL_PROCEDURE);
585 EXCEPTION
586   	WHEN OTHERS THEN
587         l_sqlerrno := to_char(SQLCODE);
588         l_sqlerrmsg := substr(SQLERRM, 1,2000);
589         l_error_msg := ' Exception in  INV_LOC_ASS_MSN_MAKE_DIRTY_D for csp_inv_loc_assignment_id:'
590                        || to_char(p_csp_inv_loc_assignment_id) || ':' || l_sqlerrno || ':' || l_sqlerrmsg;
591         CSM_UTIL_PKG.LOG(l_error_msg, 'CSM_SERIAL_NUMBERS_EVENT_PKG.INV_LOC_ASS_MSN_MAKE_DIRTY_D',FND_LOG.LEVEL_EXCEPTION);
592         RAISE;
593 END INV_LOC_ASS_MSN_MAKE_DIRTY_D;
594 
595 END CSM_SERIAL_NUMBERS_EVENT_PKG;