[Home] [Help]
PACKAGE BODY: APPS.WMS_CAROUSEL_INTEGRATION_PKG
Source
1 PACKAGE BODY WMS_CAROUSEL_INTEGRATION_PKG AS
2 /* $Header: WMSCSPBB.pls 120.4 2005/10/17 03:58:36 simran noship $ */
3
4 PROCEDURE sync_device_request (
5 p_request_id IN NUMBER,
6 p_device_id IN NUMBER,
7 p_resubmit_flag IN VARCHAR2,
8 x_status_code OUT NOCOPY VARCHAR2,
9 x_status_msg OUT NOCOPY VARCHAR2,
10 x_device_status OUT NOCOPY VARCHAR2
11 )
12 IS
13 BEGIN
14 -- Verify access
15 x_status_code := 'S';
16
17 /* we can not really verify access here because we do not know employee_id
18 wms_carousel_integration_pvt.verify_access
19 (
20 p_device_id,
21 p_employee_id,
22 x_status_code,
23 x_device_status
24 );
25 */
26 -- Allowed ?
27 IF x_status_code = 'S'
28 THEN
29 -- Process the request
30 wms_carousel_integration_pvt.process_request (p_request_id,
31 x_status_code,
32 x_status_msg,
33 x_device_status
34 );
35 END IF;
36
37 -- Update the WMS with the status
38 wms_device_integration_pub.update_request
39 (p_request_id => p_request_id,
40 p_device_id => p_device_id,
41 p_status_code => x_status_code,
42 p_status_msg => x_device_status
43 );
44 END;
45
46 --
47 --
48 PROCEDURE sync_device (
49 p_organization_id IN NUMBER,
50 p_device_id IN NUMBER,
51 p_employee_id IN NUMBER,
52 p_sign_on_flag IN VARCHAR2,
53 x_status_code OUT NOCOPY VARCHAR2,
54 x_device_status OUT NOCOPY VARCHAR2
55 )
56 IS
57 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
58 BEGIN
59 -- Singing on or off ?
60 x_status_code := FND_API.G_RET_STS_SUCCESS;
61 IF p_sign_on_flag = 'Y'
62 THEN
63 IF (l_debug > 0) THEN
64 wms_carousel_integration_pvt.LOG (p_device_id, 'Employee (' || p_employee_id || ') logged on');
65 END IF;
66 ELSIF p_sign_on_flag = 'N'
67 THEN
68 IF (l_debug > 0) THEN
69 wms_carousel_integration_pvt.LOG (p_device_id, 'Employee (' || p_employee_id || ') logged off');
70 END IF;
71 ELSE
72 x_status_code := 'E';
73 x_device_status := 'Invalid p_sing_on_flag';
74 END IF;
75 END;
76
77 --
78 --
79 PROCEDURE pipe_listener_loop (p_job IN NUMBER, p_zone IN VARCHAR2, p_device_id in NUMBER, p_pipe_name IN VARCHAR2)
80 IS
81 v_switch VARCHAR2 (16);
82 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
83 PRAGMA AUTONOMOUS_TRANSACTION;
84 BEGIN
85 LOOP
86 -- Get pipe listener switch value
87 v_switch :=
88 NVL
89 (wms_carousel_integration_pvt.get_config_parameter
90 (p_name => 'PIPE_LISTENER_SWITCH',
91 p_sequence_id => p_device_id
92 ),
93 'OFF'
94 );
95 EXIT WHEN v_switch = 'OFF';
96 IF (l_debug > 0) THEN
97 wms_carousel_integration_pvt.LOG
98 ( p_device_id, 'Calling receive_pipe_listener. p_zone='
99 || p_zone
100 || ', p_pipe_name='
101 || p_pipe_name
102 || ', p_job='
103 || p_job
104 );
105 END IF;
106 -- Call the listener
107 -- Bug# 4666748
108 -- wms_carousel_integration_pvt.receive_pipe_listener (p_zone, p_device_id, p_pipe_name);
109 END LOOP;
110 COMMIT;
111 END;
112
113 --
114 --
115 PROCEDURE submit_pipe_listeners(p_device_id IN NUMBER)
116 IS
117 -- Cursor for receive pipes
118 CURSOR c_receive_pipes(p_primary_device IN NUMBER)
119 IS
120 SELECT d.device_id, d.subinventory_code
121 FROM wms_devices_b d
122 WHERE d.device_id = p_primary_device;
123
124 v_job INTEGER;
125 job_str VARCHAR2 (1024);
126 v_pipename VARCHAR2(50);
127 l_primary_device NUMBER;
128 l_dummy NUMBER;
129 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
130 PRAGMA AUTONOMOUS_TRANSACTION;
131 BEGIN
132 v_pipename := wms_carousel_integration_pvt.get_config_parameter
133 (p_name => 'PIPE_NAME',
134 p_sequence_id => p_device_id
135 );
136
137 IF (v_pipename IS NULL) THEN
138 -- No PIPE_NAME config parameter created for the device. Hence create a default one
139 -- 4311016
140 v_pipename := p_device_id;
141 l_primary_device := p_device_id;
142 INSERT INTO WMS_CAROUSEL_CONFIGURATION
143 (
144 CAROUSEL_CONFIGURATION_ID
145 ,CONFIG_NAME
146 ,CONFIG_VALUE
147 ,SEQUENCE_ID
148 ,ACTIVE_IND
149 ,LAST_UPDATE_DATE
150 ,LAST_UPDATED_BY
151 ,CREATION_DATE
152 ,CREATED_BY
153 ,LAST_UPDATE_LOGIN
154 )
155 VALUES
156 (WMS_CAROUSEL_CONFIGURATION_S.NEXTVAL
157 ,'PIPE_NAME'
158 ,v_pipename
159 ,p_device_id
160 ,'Y'
161 ,SYSDATE
162 ,fnd_global.user_id
163 ,SYSDATE
164 ,fnd_global.user_id
165 ,fnd_global.login_id
166 );
167 IF (l_debug > 0) THEN
168 wms_carousel_integration_pvt.LOG (p_device_id, 'No PIPE_NAME parameter defined for device ('
169 || p_device_id || ')! Hence created one with value='
170 || v_pipename
171 );
172 END IF;
173 ELSE
174 -- Get the first device in the group
175 SELECT MIN(SEQUENCE_ID) into l_primary_device FROM WMS_CAROUSEL_CONFIGURATION
176 WHERE CONFIG_NAME = 'PIPE_NAME'
177 AND CONFIG_VALUE = v_pipename;
178 END IF;
179
180 --4311016
181 v_pipename := 'IN_'||v_pipename;
182
183 -- Start up listeners
184 FOR v_cfg IN c_receive_pipes(l_primary_device)
185 LOOP
186 BEGIN
187 select 1 INTO l_dummy from (
188 SELECT job,what, (substr(what, instr(what,'''',-1,2)+1, (instr(what,'''',-1,1) - instr(what,'''',-1,2) - 1))) pipe_name
189 FROM user_jobs
190 WHERE UPPER (what) LIKE '%WMS_CAROUSEL_INTEGRATION_PKG.PIPE_LISTENER_LOOP%')
191 where pipe_name = v_pipename;
192 IF (l_debug > 0) THEN
193 WMS_CAROUSEL_INTEGRATION_PVT.LOG (v_cfg.device_id, 'Job already exists:'
194 || ' ID='
195 || v_job
196 || ', Pipe='
197 || v_pipename
198 || ', Subinventory='
199 || v_cfg.subinventory_code
200 );
201 END IF;
202 EXCEPTION
203 WHEN NO_DATA_FOUND THEN
204 -- Submit a job
205 DBMS_JOB.submit (job => v_job,
206 what => 'begin null; end;',
207 next_date => SYSDATE,
208 INTERVAL => 'sysdate + (10/(24*3600))'
209 );
210 job_str :=
211 'WMS_CAROUSEL_INTEGRATION_PKG.PIPE_LISTENER_LOOP('
212 || v_job
213 || ',''' || v_cfg.subinventory_code || ''''
214 || ',' || v_cfg.device_id
215 || ',''' || v_pipename || ''');';
216
217 DBMS_JOB.what (v_job, job_str);
218
219 IF (l_debug > 0) THEN
220 WMS_CAROUSEL_INTEGRATION_PVT.LOG (v_cfg.device_id, 'New Job Created:'
221 || ' ID='
222 || v_job
223 || ', Pipe='
224 || v_pipename
225 || ', Subinventory='
226 || v_cfg.subinventory_code
227 );
228 END IF;
229 END;
230 END LOOP;
231 COMMIT;
232 END;
233
234 PROCEDURE start_job(p_device_id IN NUMBER)
235 IS
236 -- Cursor for receive pipes
237 CURSOR c_pipe_listeners (p_pipe_name IN VARCHAR2)
238 IS
239 select distinct * from (
240 SELECT job,what, (substr(what, instr(what,'''',-1,2)+1, (instr(what,'''',-1,1) - instr(what,'''',-1,2) - 1))) pipe_name
241 FROM user_jobs
242 WHERE UPPER (what) LIKE '%WMS_CAROUSEL_INTEGRATION_PKG.PIPE_LISTENER_LOOP%')
243 where pipe_name = nvl(p_pipe_name, pipe_name);
244
245 v_pipename VARCHAR2(50);
246 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
247 PRAGMA AUTONOMOUS_TRANSACTION;
248 BEGIN
249 IF (p_device_id IS NOT NULL) THEN
250 v_pipename :=
251 NVL
252 (wms_carousel_integration_pvt.get_config_parameter
253 (p_name => 'PIPE_NAME',
254 p_sequence_id => p_device_id
255 ),
256 'PIPE_NAME_' || p_device_id
257 );
258 END IF;
259 -- Start jobs
260 FOR v_job IN c_pipe_listeners(v_pipename)
261 LOOP
262 -- Start the job
263 DBMS_JOB.broken(v_job.job,false,null);
264 IF (l_debug > 0) THEN
265 wms_carousel_integration_pvt.LOG ( p_device_id, 'Job Started:'
266 || ' ID='
267 || v_job.job
268 || ', Pipe='
269 || v_job.pipe_name
270 );
271 END IF;
272 END LOOP;
273
274 COMMIT;
275 END;
276
277 PROCEDURE stop_job(p_device_id IN NUMBER)
278 IS
279 -- Cursor for receive pipes
280 CURSOR c_pipe_listeners (p_pipe_name IN VARCHAR2)
281 IS
282 select * from (
283 SELECT job,what, (substr(what, instr(what,'''',-1,2)+1, (instr(what,'''',-1,1) - instr(what,'''',-1,2) - 1))) pipe_name
284 FROM user_jobs
285 WHERE UPPER (what) LIKE '%WMS_CAROUSEL_INTEGRATION_PKG.PIPE_LISTENER_LOOP%')
286 where pipe_name = nvl(p_pipe_name, pipe_name);
287
288 v_pipename VARCHAR2(50) := NULL;
289 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
290 PRAGMA AUTONOMOUS_TRANSACTION;
291 BEGIN
292 IF (p_device_id IS NOT NULL) THEN
293 v_pipename :=
294 NVL
295 (wms_carousel_integration_pvt.get_config_parameter
296 (p_name => 'PIPE_NAME',
297 p_sequence_id => p_device_id
298 ),
299 'PIPE_NAME_' || p_device_id
300 );
301 END IF;
302 -- Stop jobs
303 FOR v_job IN c_pipe_listeners(v_pipename)
304 LOOP
305 -- Stop the job
306 DBMS_JOB.broken(v_job.job,true,null);
307 IF (l_debug > 0) THEN
308 wms_carousel_integration_pvt.LOG ( p_device_id, 'Job Stopped:'
309 || ' ID='
310 || v_job.job
311 || ', Pipe='
312 || v_job.pipe_name
313 );
314 END IF;
315 END LOOP;
316
317 COMMIT;
318 END;
319 --
320 --
321 PROCEDURE remove_pipe_listeners
322 IS
323 -- Cursor for receive pipes
324 CURSOR c_pipe_listeners
325 IS
326 SELECT job, what
327 FROM user_jobs
328 WHERE UPPER (what) LIKE '%WMS_CAROUSEL_INTEGRATION_PKG.PIPE_LISTENER_LOOP%';
329
330 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
331 PRAGMA AUTONOMOUS_TRANSACTION;
332 BEGIN
333 -- Remove jobs
334 FOR v_job IN c_pipe_listeners
335 LOOP
336 -- Remove the job
337 DBMS_JOB.remove (v_job.job);
338 IF (l_debug > 0) THEN
339 wms_carousel_integration_pvt.LOG ( NULL, 'Job Removed:'
340 || ' ID='
341 || v_job.job
342 || ', what='
343 || v_job.what
344 );
345 END IF;
346 END LOOP;
347 COMMIT;
348 END;
349
350 PROCEDURE recreate_pipe_listeners
351 IS
352 CURSOR C_PIPE_DEVICES IS SELECT SEQUENCE_ID FROM WMS_CAROUSEL_CONFIGURATION
353 WHERE CONFIG_NAME = 'PIPE_NAME';
354 BEGIN
355 remove_pipe_listeners;
356 FOR v_job IN C_PIPE_DEVICES
357 LOOP
358 submit_pipe_listeners(v_job.SEQUENCE_ID);
359 END LOOP;
360 END;
361
362 --
363 --
364 PROCEDURE START_PIPE_LISTENERS(p_device_id IN NUMBER DEFAULT NULL)
365 IS
366 v_pipename VARCHAR2(50);
367 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
368 PRAGMA AUTONOMOUS_TRANSACTION;
369 BEGIN
370 IF (p_device_id IS NULL) THEN
371 -- Switch on all listeners
372 UPDATE WMS_CAROUSEL_CONFIGURATION c
373 SET c.CONFIG_VALUE = 'ON'
374 WHERE c.CONFIG_NAME = 'PIPE_LISTENER_SWITCH';
375 IF (l_debug > 0) THEN
376 wms_carousel_integration_pvt.LOG (null,'All Pipe Listeners Switched ON');
377 END IF;
378 ELSE
379 v_pipename :=
380 NVL
381 (wms_carousel_integration_pvt.get_config_parameter
382 (p_name => 'PIPE_NAME',
383 p_sequence_id => p_device_id
384 ),
385 'PIPE_NAME_' || p_device_id
386 );
387 -- Switch on
388 UPDATE WMS_CAROUSEL_CONFIGURATION c
389 SET c.CONFIG_VALUE = 'ON'
390 WHERE c.CONFIG_NAME = 'PIPE_LISTENER_SWITCH'
391 AND SEQUENCE_ID IN (SELECT SEQUENCE_ID FROM wms_carousel_configuration WHERE CONFIG_VALUE = v_pipename);
392 IF (l_debug > 0) THEN
393 wms_carousel_integration_pvt.LOG (p_device_id,'Pipe Listener Switched ON: Pipe=IN_' || v_pipename);
394 END IF;
395 END IF;
396 start_job(p_device_id);
397 COMMIT;
398 END;
399
400 --
401 --
402 PROCEDURE STOP_PIPE_LISTENERS(p_device_id IN NUMBER DEFAULT NULL)
403 IS
404 v_pipename VARCHAR2(50);
405 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
406 PRAGMA AUTONOMOUS_TRANSACTION;
407 BEGIN
408 IF (p_device_id IS NULL) THEN
409 -- Switch off all listeners
410 UPDATE WMS_CAROUSEL_CONFIGURATION c
411 SET c.CONFIG_VALUE = 'OFF'
412 WHERE c.CONFIG_NAME = 'PIPE_LISTENER_SWITCH';
413 IF (l_debug > 0) THEN
414 WMS_CAROUSEL_INTEGRATION_PVT.LOG (null,'All Pipe Listeners Switched OFF');
415 END IF;
416 ELSE
417 v_pipename :=
418 NVL
419 (wms_carousel_integration_pvt.get_config_parameter
420 (p_name => 'PIPE_NAME',
421 p_sequence_id => p_device_id
422 ),
423 'PIPE_NAME_' || p_device_id
424 );
425 -- Switch off
426 UPDATE WMS_CAROUSEL_CONFIGURATION c
427 SET c.CONFIG_VALUE = 'OFF'
428 WHERE c.CONFIG_NAME = 'PIPE_LISTENER_SWITCH'
429 AND SEQUENCE_ID IN (SELECT SEQUENCE_ID FROM WMS_CAROUSEL_CONFIGURATION WHERE CONFIG_VALUE = v_pipename);
430 IF (l_debug > 0) THEN
431 WMS_CAROUSEL_INTEGRATION_PVT.LOG (p_device_id,'Pipe Listener Switched OFF: Pipe=IN_' || v_pipename);
432 END IF;
433 END IF;
434 stop_job(p_device_id);
435 COMMIT;
436 END;
437 --
438 PROCEDURE SIGN_OFF_USER(p_organization_id IN NUMBER,
439 p_device_id IN NUMBER,
440 p_emp_id IN NUMBER,
441 x_return_status OUT NOCOPY VARCHAR2
442 )
443 IS
444 CURSOR c_tasks IS
445 SELECT 1 FROM WMS_DISPATCHED_TASKS wdt
446 WHERE organization_id = p_organization_id
447 AND device_id = p_device_id
448 AND PERSON_ID = p_emp_id
449 AND status = 9;
450 l_dummy NUMBER;
451 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
452 PRAGMA AUTONOMOUS_TRANSACTION;
453 BEGIN
454 --wms_carousel_integration_pvt.LOG ( p_device_id, 'In SIGN_OFF_USER Org=' || p_organization_id || ',employee (' || p_emp_id || ') from device_id (' || p_device_id || ')');
455 x_return_status := 'S';
456 Open c_tasks;
457 Fetch c_tasks into l_dummy;
458 IF (c_tasks%NOTFOUND) THEN
459 IF (l_debug > 0) THEN
460 wms_carousel_integration_pvt.LOG ( p_device_id, 'Signing off employee (' || p_emp_id || ') from device_id (' || p_device_id || ')');
461 END IF;
462
463 DELETE FROM wms_device_assignment_temp WHERE device_id = p_device_id and EMPLOYEE_ID = p_emp_id;
464 COMMIT;
465 ELSE
466 IF (l_debug > 0) THEN
467 wms_carousel_integration_pvt.LOG ( p_device_id, 'Failed signing off employee (' || p_emp_id || ') from device_id (' || p_device_id || ')');
468 END IF;
469 x_return_status := 'A';
470 END IF;
471 CLOSE c_tasks;
472 END;
473 --
474 END WMS_CAROUSEL_INTEGRATION_PKG;