1 PACKAGE BODY inv_mwb_tree AS
2 /* $Header: INVMWBTB.pls 120.0.12000000.2 2007/10/11 21:12:28 musinha ship $ */
3
4
5 -- Controlled: 0 Don't Care, 1 No, 2 Yes
6 -- Add organization nodes for the given parameters
7
8
9 /*procedure trace1( a in varchar2 default null, b in varchar2 default null,c number default null) is
10 begin
11 IF (length(b||a) < 4000) THEN
12 insert into amintemp1 VALUES (b || a);
13 END IF;
14 COMMIT;
15 end; */
16
17
18 PROCEDURE add_orgs(
19 p_organization_id IN NUMBER DEFAULT NULL
20 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
21 , p_locator_id IN NUMBER DEFAULT NULL
22 , p_inventory_item_id IN NUMBER DEFAULT NULL
23 , p_revision IN VARCHAR2 DEFAULT NULL
24 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
25 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
26 , p_lot_controlled IN NUMBER DEFAULT 0
27 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
28 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
29 , p_serial_controlled IN NUMBER DEFAULT 0
30 , p_lpn_from IN VARCHAR2 DEFAULT NULL
31 , p_lpn_to IN VARCHAR2 DEFAULT NULL
32 , p_containerized IN NUMBER DEFAULT 0
33 , p_prepacked IN NUMBER DEFAULT NULL --Bug # 3581090
34 , p_cost_group_id IN NUMBER DEFAULT NULL
35 , p_status_id IN NUMBER DEFAULT NULL
36 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
37 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
38 , p_project_id IN NUMBER DEFAULT NULL
39 , p_task_id IN NUMBER DEFAULT NULL
40 , p_unit_number IN VARCHAR2 DEFAULT NULL
41 , -- consinged changes
42 p_owning_qry_mode IN NUMBER DEFAULT NULL
43 , p_planning_query_mode IN NUMBER DEFAULT NULL
44 , p_owning_org IN NUMBER DEFAULT NULL
45 , p_planning_org IN NUMBER DEFAULT NULL
46 , -- consigned changes
47 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
48 , p_node_state IN NUMBER
49 , p_node_high_value IN NUMBER
50 , p_node_low_value IN NUMBER
51 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
52 --ER(3338592) Changes
53 , p_item_description IN VARCHAR2 DEFAULT NULL
54 , p_qty_from IN NUMBER DEFAULT NULL
55 , p_qty_to IN NUMBER DEFAULT NULL
56 , p_detailed IN NUMBER DEFAULT 0 -- Bug #3412002
57 --End of ER Changes
58 , p_view_by IN VARCHAR2 DEFAULT NULL
59 , p_responsibility_id IN NUMBER DEFAULT NULL
60 , p_resp_application_id IN NUMBER DEFAULT NULL
61 , x_node_value IN OUT NOCOPY NUMBER
62 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
63 , x_tbl_index IN OUT NOCOPY NUMBER
64 -- NSRIVAST, INVCONV, Start
65 , p_grade_from IN VARCHAR2 DEFAULT NULL
66
67 , p_grade_code IN VARCHAR2 DEFAULT NULL
68 , p_grade_controlled IN NUMBER DEFAULT 0
69 -- NSRIVAST, INVCONV, End
70 ) IS
71 query_str VARCHAR2(10000);
72 query_hdl NUMBER;
73 rows_processed NUMBER;
74 org_id mtl_onhand_quantities.organization_id%TYPE;
75 org_code mtl_parameters.organization_code%TYPE;
76 i NUMBER := x_tbl_index;
77 j NUMBER := x_node_value;
78 table_required VARCHAR2(300);
79 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
80 --ER(3338592) Changes
81 group_str VARCHAR2(10000) ;
82 having_str VARCHAR2(10000) := ' HAVING 1=1 ';
83 --End of ER Changes
84
85 BEGIN
86 -- If attributes relating to contents of an LPN are not specified then
87 -- display all the LPNs in that location with the appropriate from
88 -- and to LPN criteria
89
90 -- NSRIVAST, INVCONV, Start
91 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
92 is_grade_t := TRUE ;
93 END IF ;
94 -- NSRIVAST, INVCONV, End
95
96 IF p_inventory_item_id IS NULL
97 AND p_revision IS NULL
98 AND p_lot_number_from IS NULL
99 AND p_lot_number_to IS NULL
100 AND p_serial_number_from IS NULL
101 AND p_serial_number_to IS NULL
102 AND p_serial_controlled = 0 -- Bug #3411938
103 AND p_lot_controlled = 0
104 AND p_cost_group_id IS NULL
105 AND p_status_id IS NULL
106 AND p_lot_attr_query IS NULL
107 AND p_serial_attr_query IS NULL
108 AND p_unit_number IS NULL
109 AND p_project_id IS NULL
110 AND p_task_id IS NULL
111 AND p_planning_org IS NULL
112 AND p_owning_org IS NULL
113 AND( nvl(p_prepacked,1) <> 1
114 OR p_lpn_from IS NOT NULL
115 OR p_lpn_to IS NOT NULL)
116 --ER(3338592) Changes
117 AND p_item_description IS NULL
118 AND p_qty_from IS NULL
119 AND p_qty_to IS NULL THEN
120 --End of ER Changes
121 query_str := 'SELECT mp.organization_id, mp.organization_code ';
122 query_str := query_str || 'from mtl_parameters mp where organization_id in ';
123 query_str := query_str || '(select organization_id ';
124 query_str := query_str || 'FROM wms_license_plate_numbers WHERE 1=1 ';
125
126 IF p_sub_type = 2 THEN
127 query_str := query_str || ' AND lpn_context = 3 ';
128 ELSIF p_prepacked IS NULL THEN
129 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11) ';
130 ELSIF p_prepacked = 1 THEN
131 query_str := query_str || ' AND (lpn_context = 1) ';
132 ELSIF p_prepacked <> 1
133 AND p_prepacked <> 999
134 AND p_prepacked IS NOT NULL THEN
135 query_str := query_str || ' AND lpn_context = :prepacked ';
136 END IF;
137
138 IF p_locator_id IS NOT NULL THEN
139 query_str := query_str || ' AND locator_id = :loc_id ';
140 END IF;
141
142 -- NSRIVAST, INVCONV, Start
143 IF p_grade_from IS NOT NULL THEN
144 query_str := query_str || ' AND grade_code = :grade_f ' ;
145 END IF ;
146 IF p_grade_code IS NOT NULL THEN
147 query_str := query_str || ' AND grade_code = :grade_c ' ;
148 END IF ;
149 -- NSRIVAST, INVCONV, End
150
151 IF p_subinventory_code IS NOT NULL THEN
152 query_str := query_str || ' AND subinventory_code = :sub ';
153 END IF;
154
155 IF p_organization_id IS NOT NULL THEN
156 query_str := query_str || ' AND organization_id = :org_id ';
157 END IF;
158
159 --bugfix#3646484
160 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
161 --User is querying for single LPN so converted the range query to equality query
162 query_str := query_str || 'and license_plate_number = :lpn_f ';
163 ELSE
164 IF p_lpn_from IS NOT NULL THEN
165 query_str := query_str || 'and license_plate_number >= :lpn_f ';
166 END IF;
167
168 IF p_lpn_to IS NOT NULL THEN
169 query_str := query_str || 'and license_plate_number <= :lpn_t ';
170 END IF;
171 END IF;
172
173 query_str := query_str || ') ORDER BY organization_code ';
174 ELSE
175 query_str := ' SELECT mp.organization_id, mp.organization_code FROM mtl_parameters mp ';
176 query_str := query_str || ' WHERE exists ( ';
177
178 -- Need to use MTL_ONHAND_TOTAL_V
179 IF (
180 p_serial_number_from IS NULL
181 AND p_serial_number_to IS NULL
182 AND p_unit_number IS NULL
183 AND p_status_id IS NULL
184 AND p_lpn_from IS NULL
185 AND p_lpn_to IS NULL
186 AND nvl(p_prepacked,1) = 1
187 AND p_serial_attr_query IS NULL
188 ) THEN
189 IF p_sub_type = 2 THEN
190 table_required := ' mtl_rcv_mwb_onhand_v ';
191 ELSIF(p_status_id IS NULL) THEN
192 table_required := ' mtl_onhand_total_mwb_v ';
193 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
194 table_required := ' mtl_onhand_total_v '; -- NSRIVAST, INVCONV
195 END IF;
196 ELSE
197 table_required := ' mtl_onhand_total_v ';
198 END IF;
199
200 IF p_lot_attr_query IS NULL THEN
201 query_str := query_str || 'SELECT organization_id from ' || table_required;
202 query_str := query_str || 'WHERE 1=1 ';
203 ELSE
204 query_str :=
205 query_str
206 || ' SELECT organization_id from'
207 || ' (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
208 || p_lot_attr_query
209 || ' ) mln, '
210 || table_required;
211 query_str := query_str || ' WHERE mln.lot_num = lot_number ';
212 END IF;
213
214 --ER(3338592) Changes (If the user gives the value for the Qty then only
215 --Group by clause comes in to effect)
216
217 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
218 group_str := ' GROUP BY organization_id ';
219 END IF;
220
221 IF p_subinventory_code IS NOT NULL THEN
222 query_str := query_str || ' AND subinventory_code = :sub ';
223 --ER(3338592) Changes
224 IF group_str IS NOT NULL THEN
225 group_str := group_str || ' , subinventory_code ' ;
226 END IF;
227 END IF;
228
229 IF p_subinventory_code IS NULL AND p_detailed = 1 THEN --Bug # 3412002
230 --ER(3338592) Changes
231 IF group_str IS NOT NULL THEN
232 group_str := group_str || ' , subinventory_code ' ;
233 END IF;
234 END IF;
235
236 IF p_locator_id IS NOT NULL THEN
237 query_str := query_str || ' AND locator_id = :loc_id ';
238 --ER(3338592) Changes
239 IF group_str IS NOT NULL THEN
240 group_str := group_str || ' , locator_id ' ;
241 END IF;
242 END IF;
243
244 -- NSRIVAST, INVCONV, Start
245 IF p_grade_from IS NOT NULL THEN
246 query_str := query_str || ' AND grade_code = :grade_f ' ;
247 END IF ;
248 IF p_grade_code IS NOT NULL THEN
249 query_str := query_str || ' AND grade_code = :grade_c ' ;
250 END IF ;
251 -- NSRIVAST, INVCONV, End
252
253 IF p_locator_id IS NULL AND p_detailed = 1 THEN --Bug # 3412002
254 --ER(3338592) Changes
255 IF group_str IS NOT NULL THEN
256 group_str := group_str || ' , locator_id ' ;
257 END IF;
258 END IF;
259
260 IF p_project_id IS NOT NULL THEN
261 query_str := query_str || ' AND project_id = :pr_id ';
262 --ER(3338592) Changes
263 IF group_str IS NOT NULL THEN
264 group_str := group_str || ' , project_id ' ;
265 END IF;
266 END IF;
267
268 IF p_task_id IS NOT NULL THEN
269 query_str := query_str || ' AND task_id = :ta_id ';
270 --ER(3338592) Changes
271 IF group_str IS NOT NULL THEN
272 group_str := group_str || ' , p_task_id ' ;
273 END IF;
274 END IF;
275
276 IF p_inventory_item_id IS NOT NULL THEN
277 query_str := query_str || ' AND inventory_item_id = :item_id ';
278 END IF;
279
280 --Bug # 3411938
281 IF (p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL)
282 AND (NVL(p_view_by,' ') NOT IN ('LOT' , 'SERIAL')) THEN
283 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
284 END IF;
285
286 --ER(3338592) Changes
287 IF p_item_description IS NOT NULL THEN
288 query_str := query_str || ' AND item_description LIKE :item_description ';
289 END IF;
290
291 IF p_revision IS NOT NULL THEN
292 query_str := query_str || ' AND revision = :rev ';
293 --ER(3338592) Changes
294 IF group_str IS NOT NULL THEN
295 group_str := group_str || ' , revision ' ;
296 END IF;
297 END IF;
298
299 IF p_cost_group_id IS NOT NULL THEN
300 query_str := query_str || ' AND cost_group_id = :cg_id ';
301 --End of ER Changes
302 IF group_str IS NOT NULL THEN
303 group_str := group_str || ' , cost_group_id ' ;
304 END IF;
305 END IF;
306
307 IF p_lot_number_from IS NOT NULL THEN
308 query_str := query_str || ' AND lot_number >= :lot_f ';
309 END IF;
310
311 IF p_lot_number_to IS NOT NULL THEN
312 query_str := query_str || ' AND lot_number <= :lot_t ';
313 END IF;
314
315 IF p_lot_controlled = 2 THEN
316 query_str := query_str || ' AND lot_number is not null ';
317 ELSIF p_lot_controlled = 1 THEN
318 query_str := query_str || ' AND lot_number is null ';
319 END IF;
320
321 IF p_status_id IS NOT NULL THEN
322 query_str := query_str || ' AND (subinventory_status_id = :st_id ';
323 query_str := query_str || ' OR locator_status_id = :st_id OR lot_status_id = :st_id) ';
324 END IF;
325
326 IF p_containerized = 1 THEN
327 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
328 ELSIF p_containerized = 2 THEN
329 query_str := query_str || ' AND containerized_flag = 1 ';
330 END IF;
331
332 IF p_serial_controlled = 1 THEN
333 --query_str := query_str || 'AND serial_number_control_code not in (2,5) ';
334 query_str := query_str || ' AND item_serial_control not in (2,5) ';
335 ELSIF p_serial_controlled = 2 THEN
336 --query_str := query_str || 'AND serial_number_control_code in (2,5) ';
337 query_str := query_str || ' AND item_serial_control in (2,5) ';
338 END IF;
339
340 IF (p_planning_query_mode = 4) THEN
341 query_str := query_str || ' AND planning_organization_id = :plan_org ';
342 query_str := query_str || ' AND planning_tp_type = 2 ';
343 ELSIF(p_planning_query_mode = 3) THEN
344 query_str := query_str || ' AND planning_organization_id = :plan_org ';
345 query_str := query_str || ' AND planning_tp_type = 1 ';
346 ELSIF(p_planning_query_mode = 2) THEN
347 query_str := query_str || ' AND planning_tp_type = 1 ';
348 END IF;
349
350 IF (p_owning_qry_mode = 4) THEN
351 query_str := query_str || ' AND owning_organization_id = :own_org ';
352 query_str := query_str || ' AND owning_tp_type = 2 ';
353 ELSIF(p_owning_qry_mode = 3) THEN
354 query_str := query_str || ' AND owning_organization_id = :own_org ';
355 query_str := query_str || ' AND owning_tp_type = 1 ';
356 ELSIF(p_owning_qry_mode = 2) THEN
357 query_str := query_str || ' AND owning_tp_type = 1 ';
358 END IF;
359
360 --Bug #3411938
361 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
362 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
363 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
364 group_str := group_str || ' , item_lot_control, item_serial_control ';
365 END IF;
366
367 IF p_qty_from IS NOT NULL THEN
368 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
369 END IF;
370
371 IF p_qty_to IS NOT NULL THEN
372 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
373 END IF;
374
375 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
376 query_str := query_str || ' AND organization_id = mp.organization_id ';
377 query_str := query_str || group_str || having_str || ' ) ' ;
378 ELSE
379 query_str := query_str || ' AND organization_id = mp.organization_id ) ';
380 END IF;
381
382 IF p_organization_id IS NOT NULL THEN
383 query_str := query_str || 'and mp.organization_id = :org_id ';
384 --Bug #3411938
385 ELSE
386 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
387 query_str := query_str || ' FROM org_access_view oav ' ;
388 query_str := query_str || ' WHERE oav.organization_id = mp.organization_id ' ;
389 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
390 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
391 END IF;
392
393 query_str := query_str || ' ORDER BY organization_code ';
394
395 --Need to use MTL_ONHAND_SERIAL_V
396
397 ELSIF(
398 (
399 p_serial_number_from IS NOT NULL
400 OR p_serial_number_from IS NOT NULL
401 OR p_serial_attr_query IS NOT NULL
402 OR p_unit_number IS NOT NULL
403 )
404 AND p_lpn_from IS NULL
405 AND p_lpn_to IS NULL
406 AND nvl(p_prepacked,1) = 1
407 ) THEN
408 IF p_sub_type = 2 THEN
409 table_required := ' mtl_rcv_serial_oh_v ';
410 ELSIF(p_status_id IS NULL) THEN
411 table_required := ' mtl_onhand_serial_mwb_v ';
412 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
413 table_required := ' mtl_onhand_serial_v '; -- NSRIVAST, INVCONV
414 END IF ;
415 ELSE
416 table_required := ' mtl_onhand_serial_v ';
417 END IF;
418
419 IF p_lot_attr_query IS NULL
420 AND p_serial_attr_query IS NULL THEN
421 query_str := query_str || ' SELECT organization_id from ' || table_required;
422 query_str := query_str || ' WHERE 1=1 ';
423 ELSIF p_lot_attr_query IS NULL
424 AND p_serial_attr_query IS NOT NULL THEN
425 query_str :=
426 query_str
427 || ' SELECT organization_id from'
428 || ' (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
429 || p_serial_attr_query
430 || ') msn, '
431 || table_required;
432 query_str := query_str || ' WHERE msn.serial_num = serial_number ';
433 ELSIF p_lot_attr_query IS NOT NULL
434 AND p_serial_attr_query IS NULL THEN
435 query_str :=
436 query_str
437 || ' SELECT organization_id from'
438 || ' (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
439 || p_lot_attr_query
440 || ' ) mln, '
441 || table_required;
442 query_str := query_str || ' WHERE mln.lot_num = lot_number ';
443 ELSIF p_lot_attr_query IS NOT NULL
444 AND p_serial_attr_query IS NOT NULL THEN
445 query_str :=
446 query_str
447 || ' SELECT organization_id from'
448 || ' (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
449 || p_lot_attr_query
450 || ' ) mln, '
451 || ' (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
452 || p_serial_attr_query
453 || ' ) msn, '
454 || table_required;
455 query_str := query_str || ' WHERE mln.lot_num = lot_number ';
456 query_str := query_str || ' AND msn.serial_num = serial_number ';
457 END IF;
458
459 --ER(3338592) Changes (If the user gives the value for the Qty then only
460 --Group by clause comes in to effect)
461
462 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
463 group_str := ' GROUP BY organization_id ';
464 END IF;
465
466 IF p_subinventory_code IS NOT NULL THEN
467 query_str := query_str || ' AND subinventory_code = :sub ';
468 --ER(3338592) Changes
469 IF group_str IS NOT NULL THEN
470 group_str := group_str || ' , subinventory_code ' ;
471 END IF;
472 END IF;
473
474 IF p_subinventory_code IS NULL AND p_detailed = 1 THEN --Bug # 3412002
475 --ER(3338592) Changes
476 IF group_str IS NOT NULL THEN
477 group_str := group_str || ' , subinventory_code ' ;
478 END IF;
479 END IF;
480
481 IF p_locator_id IS NOT NULL THEN
482 query_str := query_str || ' AND locator_id = :loc_id ';
483 --ER(3338592) Changes
484 IF group_str IS NOT NULL THEN
485 group_str := group_str || ' , locator_id ' ;
486 END IF;
487 END IF;
488
489 -- NSRIVAST, INVCONV, Start
490 IF p_grade_from IS NOT NULL THEN
491 query_str := query_str || ' AND grade_code = :grade_f ' ;
492 END IF ;
493 IF p_grade_code IS NOT NULL THEN
494 query_str := query_str || ' AND grade_code = :grade_c ' ;
495 END IF ;
496 -- NSRIVAST, INVCONV, End
497
498 IF p_locator_id IS NULL AND p_detailed = 1 THEN --Bug # 3412002
499 --ER(3338592) Changes
500 IF group_str IS NOT NULL THEN
501 group_str := group_str || ' , locator_id ' ;
502 END IF;
503 END IF;
504
505 IF p_project_id IS NOT NULL THEN
506 query_str := query_str || ' AND project_id = :pr_id ';
507 --ER(3338592) Changes
508 IF group_str IS NOT NULL THEN
509 group_str := group_str || ' , project_id ' ;
510 END IF;
511 END IF;
512
513 IF p_task_id IS NOT NULL THEN
514 query_str := query_str || ' AND task_id = :ta_id ';
515 --ER(3338592) Changes
516 IF group_str IS NOT NULL THEN
517 group_str := group_str || ' , p_task_id ' ;
518 END IF;
519 END IF;
520
521 IF p_inventory_item_id IS NOT NULL THEN
522 query_str := query_str || ' AND inventory_item_id = :item_id ';
523 END IF;
524
525 --Bug # 3411938
526 IF (p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL)
527 AND (NVL(p_view_by,' ') NOT IN ('LOT' , 'SERIAL')) THEN
528 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
529 END IF;
530
531 --ER(3338592) Changes
532 IF p_item_description IS NOT NULL THEN
533 query_str := query_str || ' AND item_description LIKE :item_description ';
534 END IF;
535
536 IF p_revision IS NOT NULL THEN
537 query_str := query_str || ' AND revision = :rev ';
538 --ER(3338592) Changes
539 IF group_str IS NOT NULL THEN
540 group_str := group_str || ' , revision ' ;
541 END IF;
542 END IF;
543
544 IF p_cost_group_id IS NOT NULL THEN
545 query_str := query_str || ' AND cost_group_id = :cg_id ';
546 --ER(3338592) Changes
547 IF group_str IS NOT NULL THEN
548 group_str := group_str || ' , cost_group_id ' ;
549 END IF;
550 END IF;
551
552 IF p_lot_number_from IS NOT NULL THEN
553 query_str := query_str || ' AND lot_number >= :lot_f ';
554 END IF;
555
556 IF p_lot_number_to IS NOT NULL THEN
557 query_str := query_str || ' AND lot_number <= :lot_t ';
558 END IF;
559
560 IF p_serial_number_from IS NOT NULL THEN
561 query_str := query_str || ' AND serial_number >= :serial_f ';
562 END IF;
563
564 IF p_serial_number_to IS NOT NULL THEN
565 query_str := query_str || ' AND serial_number <= :serial_t ';
566 END IF;
567
568 IF p_unit_number IS NOT NULL THEN
569 query_str := query_str || ' AND unit_number=:un_id ';
570 END IF;
571
572 IF p_status_id IS NOT NULL
573 AND p_sub_type <> 2 THEN
574 query_str := query_str || ' AND (subinventory_status_id = :st_id OR locator_status_id = :st_id ';
575 query_str := query_str || ' OR lot_status_id = :st_id OR serial_status_id = :st_id) ';
576 END IF;
577
578 IF p_lot_controlled = 2 THEN
579 query_str := query_str || ' AND lot_number is not null ';
580 ELSIF p_lot_controlled = 1 THEN
581 query_str := query_str || ' AND lot_number is null ';
582 END IF;
583
584 IF p_containerized = 1 THEN
585 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
586 ELSIF p_containerized = 2 THEN
587 query_str := query_str || ' AND containerized_flag = 1 ';
588 END IF;
589
590 /*IF p_site_id IS NOT NULL THEN
591 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
592 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
593 ELSIF p_vendor_id is NOT NULL THEN
594 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
595 query_str := query_str || ' AND planning_organization_id in ';
596 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
597 query_str := query_str || ' where vendor_id = :vendor_id )';
598 END IF;*/
599
600 IF (p_owning_qry_mode = 4) THEN
601 query_str := query_str || ' AND owning_organization_id = :own_org ';
602 query_str := query_str || ' AND owning_tp_type = 2 ';
603 ELSIF(p_owning_qry_mode = 3) THEN
604 query_str := query_str || ' AND owning_organization_id = :own_org ';
605 query_str := query_str || ' AND owning_tp_type = 1 ';
606 ELSIF(p_owning_qry_mode = 2) THEN
607 query_str := query_str || ' AND owning_tp_type = 1 ';
608 END IF;
609
610 IF (p_planning_query_mode = 4) THEN
611 query_str := query_str || ' AND planning_organization_id = :plan_org ';
612 query_str := query_str || ' AND planning_tp_type = 2 ';
613 ELSIF(p_planning_query_mode = 3) THEN
614 query_str := query_str || ' AND planning_organization_id = :plan_org ';
615 query_str := query_str || ' AND planning_tp_type = 1 ';
616 ELSIF(p_planning_query_mode = 2) THEN
617 query_str := query_str || ' AND planning_tp_type = 1 ';
618 END IF;
619
620 --Bug #3411938
621 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
622 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
623 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
624 group_str := group_str || ' , item_lot_control, item_serial_control ';
625 END IF;
626
627 IF p_qty_from IS NOT NULL THEN
628 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
629 END IF;
630
631 IF p_qty_to IS NOT NULL THEN
632 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
633 END IF;
634
635 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
636 query_str := query_str || 'AND organization_id = mp.organization_id ';
637 query_str := query_str || group_str || having_str || ' ) ' ;
638 ELSE
639 query_str := query_str || 'AND organization_id = mp.organization_id ) ';
640 END IF;
641
642 IF p_organization_id IS NOT NULL THEN
643 query_str := query_str || 'and mp.organization_id = :org_id ';
644 -- Bug #3411938
645 ELSE
646 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
647 query_str := query_str || ' FROM org_access_view oav ' ;
648 query_str := query_str || ' WHERE oav.organization_id = mp.organization_id ' ;
649 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
650 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
651 END IF;
652
653 query_str := query_str || ' ORDER BY organization_code ';
654
655 -- Need to use both MTL_ONHAND_TOTAL_V AND MTL_ONHAND_SERIAL_V
656 ELSIF(
657 p_serial_number_from IS NULL
658 AND p_serial_number_to IS NULL
659 AND p_unit_number IS NULL
660 AND p_serial_attr_query IS NULL
661 AND p_status_id IS NOT NULL
662 AND p_lpn_from IS NULL
663 AND p_lpn_to IS NULL
664 AND nvl(p_prepacked,1) = 1
665 ) THEN
666 IF (p_status_id IS NULL) THEN
667 table_required := ' mtl_onhand_total_mwb_v ';
668 -- ELSIF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
669 -- table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
670 ELSE
671 table_required := ' mtl_onhand_total_v ';
672 END IF;
673
674 IF p_lot_attr_query IS NULL THEN
675 query_str := query_str || 'SELECT organization_id from ' || table_required;
676 query_str := query_str || 'WHERE 1=1 ';
677 ELSE
678 query_str :=
679 query_str
680 || 'SELECT organization_id from'
681 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
682 || p_lot_attr_query
683 || ') mln, '
684 || table_required;
685 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
686 END IF;
687
688 --ER(3338592) Changes (If the user gives the value for the Qty then only
689 --Group by clause comes in to effect)
690
691 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
692 group_str := ' GROUP BY organization_id ';
693 END IF;
694
695 IF p_subinventory_code IS NOT NULL THEN
696 query_str := query_str || 'AND subinventory_code = :sub ';
697 --ER(3338592) Changes
698 IF group_str IS NOT NULL THEN
699 group_str := group_str || ' , subinventory_code ' ;
700 END IF;
701 END IF;
702
703 IF p_subinventory_code IS NULL AND p_detailed = 1 THEN --Bug # 3412002
704 --ER(3338592) Changes
705 IF group_str IS NOT NULL THEN
706 group_str := group_str || ' , subinventory_code ' ;
707 END IF;
708 END IF;
709
710 IF p_locator_id IS NOT NULL THEN
711 query_str := query_str || 'AND locator_id = :loc_id ';
712 --ER(3338592) Changes
713 IF group_str IS NOT NULL THEN
714 group_str := group_str || ' , locator_id ' ;
715 END IF;
716 END IF;
717
718 IF p_locator_id IS NULL AND p_detailed = 1 THEN --Bug # 3412002
719 --ER(3338592) Changes
720 IF group_str IS NOT NULL THEN
721 group_str := group_str || ' , locator_id ' ;
722 END IF;
723 END IF;
724
725 -- NSRIVAST, INVCONV, Start
726 IF p_grade_from IS NOT NULL THEN
727 query_str := query_str || ' AND grade_code = :grade_f ' ;
728 END IF ;
729 IF p_grade_code IS NOT NULL THEN
730 query_str := query_str || ' AND grade_code = :grade_c ' ;
731 END IF ;
732 -- NSRIVAST, INVCONV, End
733
734 IF p_project_id IS NOT NULL THEN
735 query_str := query_str || ' AND project_id = :pr_id ';
736 --ER(3338592) Changes
737 IF group_str IS NOT NULL THEN
738 group_str := group_str || ' , project_id ' ;
739 END IF;
740 END IF;
741
742 IF p_task_id IS NOT NULL THEN
743 query_str := query_str || ' AND task_id = :ta_id ';
744 --ER(3338592) Changes
745 IF group_str IS NOT NULL THEN
746 group_str := group_str || ' , p_task_id ' ;
747 END IF;
748 END IF;
749
750 IF p_inventory_item_id IS NOT NULL THEN
751 query_str := query_str || 'AND inventory_item_id = :item_id ';
752 END IF;
753
754 --Bug # 3411938
755 IF (p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL)
756 AND (NVL(p_view_by,' ') NOT IN ('LOT' , 'SERIAL')) THEN
757 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
758 END IF;
759
760 --ER(3338592) Changes
761 IF p_item_description IS NOT NULL THEN
762 query_str := query_str || ' AND item_description LIKE :item_description ';
763 END IF;
764
765 IF p_revision IS NOT NULL THEN
766 query_str := query_str || 'AND revision = :rev ';
767 --ER(3338592) Changes
768 IF group_str IS NOT NULL THEN
769 group_str := group_str || ' , revision ' ;
770 END IF;
771 END IF;
772
773 IF p_cost_group_id IS NOT NULL THEN
774 query_str := query_str || 'AND cost_group_id = :cg_id ';
775 --ER(3338592) Changes
776 IF group_str IS NOT NULL THEN
777 group_str := group_str || ' , cost_group_id ' ;
778 END IF;
779 END IF;
780
781 IF p_lot_number_from IS NOT NULL THEN
782 query_str := query_str || 'AND lot_number >= :lot_f ';
783 END IF;
784
785 IF p_lot_number_to IS NOT NULL THEN
786 query_str := query_str || 'AND lot_number <= :lot_t ';
787 END IF;
788
789 IF p_unit_number IS NOT NULL THEN
790 query_str := query_str || ' AND unit_number=:un_id ';
791 END IF;
792
793 IF p_lot_controlled = 2 THEN
794 query_str := query_str || 'AND lot_number is not null ';
795 ELSIF p_lot_controlled = 1 THEN
796 query_str := query_str || 'AND lot_number is null ';
797 END IF;
798
799 IF p_status_id IS NOT NULL THEN
800 query_str := query_str || 'AND (subinventory_status_id = :st_id ';
801 query_str := query_str || 'OR locator_status_id = :st_id OR lot_status_id = :st_id) ';
802 END IF;
803
804 IF p_containerized = 1 THEN
805 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
806 ELSIF p_containerized = 2 THEN
807 query_str := query_str || 'AND containerized_flag = 1 ';
808 END IF;
809
810 IF p_serial_controlled = 1 THEN
811 --query_str := query_str || 'AND serial_number_control_code not in (2,5) ';
812 query_str := query_str || 'AND item_serial_control not in (2,5) ';
813 ELSIF p_serial_controlled = 2 THEN
814 --query_str := query_str || 'AND serial_number_control_code in (2,5) ';
815 query_str := query_str || 'AND item_serial_control in (2,5) ';
816 END IF;
817
818 /*IF p_site_id IS NOT NULL THEN
819 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
820 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
821 ELSIF p_vendor_id is NOT NULL THEN
822 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
823 query_str := query_str || ' AND planning_organization_idanization_id in ';
824 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
825 query_str := query_str || ' where vendor_id = :vendor_id )';
826 END IF;*/
827
828 IF (p_owning_qry_mode = 4) THEN
829 query_str := query_str || ' AND owning_organization_id = :own_org ';
830 query_str := query_str || ' AND owning_tp_type = 2 ';
831 ELSIF(p_owning_qry_mode = 3) THEN
832 query_str := query_str || ' AND owning_organization_id = :own_org ';
833 query_str := query_str || ' AND owning_tp_type = 1 ';
834 ELSIF(p_owning_qry_mode = 2) THEN
835 query_str := query_str || ' AND owning_tp_type = 1 ';
836 END IF;
837
838 IF (p_planning_query_mode = 4) THEN
839 query_str := query_str || ' AND planning_organization_id = :plan_org ';
840 query_str := query_str || ' AND planning_tp_type = 2 ';
841 ELSIF(p_planning_query_mode = 3) THEN
842 query_str := query_str || ' AND planning_organization_id = :plan_org ';
843 query_str := query_str || ' AND planning_tp_type = 1 ';
844 ELSIF(p_planning_query_mode = 2) THEN
845 query_str := query_str || ' AND planning_tp_type = 1 ';
846 END IF;
847
848 --Bug #3411938
849 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
850 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
851 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
852 group_str := group_str || ' , item_lot_control, item_serial_control ';
853 END IF;
854
855 IF p_qty_from IS NOT NULL THEN
856 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
857 END IF;
858
859 IF p_qty_to IS NOT NULL THEN
860 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
861 END IF;
862
863 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
864 query_str := query_str || 'AND organization_id = mp.organization_id ';
865 query_str := query_str || group_str || having_str || ' ' ;
866 ELSE
867 query_str := query_str || 'AND organization_id = mp.organization_id ';
868 END IF;
869
870 query_str := query_str || 'UNION ALL ';
871
872 --Reinitializing the variable
873 having_str := ' HAVING 1=1 ' ;
874
875 IF (p_status_id IS NULL) THEN
876 table_required := ' mtl_onhand_serial_mwb_v ';
877 ELSE
878 table_required := ' mtl_onhand_serial_v ';
879 END IF;
880
881 IF p_lot_attr_query IS NULL
882 AND p_serial_attr_query IS NULL THEN
883 query_str := query_str || 'SELECT organization_id from ' || table_required;
884 query_str := query_str || 'WHERE 1=1 ';
885 ELSIF p_lot_attr_query IS NOT NULL
886 AND p_serial_attr_query IS NULL THEN
887 query_str :=
888 query_str
889 || 'SELECT organization_id from'
890 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
891 || p_lot_attr_query
892 || ') mln, '
893 || table_required;
894 query_str := query_str || ' WHERE mln.lot_num = lot_number ';
895 END IF;
896
897 --ER(3338592) Changes (If the user gives the value for the Qty then only
898 --Group by clause comes in to effect)
899
900 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
901 group_str := ' GROUP BY organization_id ';
902 END IF;
903
904 IF p_subinventory_code IS NOT NULL THEN
905 query_str := query_str || 'AND subinventory_code = :sub ';
906 --ER(3338592) Changes
907 IF group_str IS NOT NULL THEN
908 group_str := group_str || ' , subinventory_code ' ;
909 END IF;
910 END IF;
911
912 IF p_subinventory_code IS NULL AND p_detailed = 1 THEN --Bug # 3412002
913 --ER(3338592) Changes
914 IF group_str IS NOT NULL THEN
915 group_str := group_str || ' , subinventory_code ' ;
916 END IF;
917 END IF;
918
919 IF p_locator_id IS NOT NULL THEN
920 query_str := query_str || 'AND locator_id = :loc_id ';
921 --ER(3338592) Changes
922 IF group_str IS NOT NULL THEN
923 group_str := group_str || ' , locator_id ' ;
924 END IF;
925 END IF;
926
927 IF p_locator_id IS NULL AND p_detailed = 1 THEN --Bug # 3412002
928 --ER(3338592) Changes
929 IF group_str IS NOT NULL THEN
930 group_str := group_str || ' , locator_id ' ;
931 END IF;
932 END IF;
933
934 IF p_inventory_item_id IS NOT NULL THEN
935 query_str := query_str || 'AND inventory_item_id = :item_id ';
936 END IF;
937
938 --Bug # 3411938
939 IF (p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL)
940 AND (NVL(p_view_by,' ') NOT IN ('LOT' , 'SERIAL')) THEN
941 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
942 END IF;
943
944 --ER(3338592) Changes
945 IF p_item_description IS NOT NULL THEN
946 query_str := query_str || ' AND item_description LIKE :item_description ';
947 END IF;
948
949 IF p_revision IS NOT NULL THEN
950 query_str := query_str || 'AND revision = :rev ';
951 --ER(3338592) Changes
952 IF group_str IS NOT NULL THEN
953 group_str := group_str || ' , revision ' ;
954 END IF;
955 END IF;
956
957 IF p_cost_group_id IS NOT NULL THEN
958 query_str := query_str || ' AND cost_group_id = :cg_id ';
959 --ER(3338592) Changes
960 IF group_str IS NOT NULL THEN
961 group_str := group_str || ' , cost_group_id ' ;
962 END IF;
963 END IF;
964
965 IF p_lot_number_from IS NOT NULL THEN
966 query_str := query_str || ' AND lot_number >= :lot_f ';
967 END IF;
968
969 IF p_lot_number_to IS NOT NULL THEN
970 query_str := query_str || ' AND lot_number <= :lot_t ';
971 END IF;
972
973 IF p_serial_number_from IS NOT NULL THEN
974 query_str := query_str || ' AND serial_number >= :serial_f ';
975 END IF;
976
977 IF p_serial_number_to IS NOT NULL THEN
978 query_str := query_str || ' AND serial_number <= :serial_t ';
979 END IF;
980
981 IF p_status_id IS NOT NULL THEN
982 query_str := query_str || 'AND (subinventory_status_id = :st_id OR locator_status_id = :st_id ';
983 query_str := query_str || 'OR lot_status_id = :st_id OR serial_status_id = :st_id) ';
984 END IF;
985
986 IF p_lot_controlled = 2 THEN
987 query_str := query_str || 'AND lot_number is not null ';
988 ELSIF p_lot_controlled = 1 THEN
989 query_str := query_str || 'AND lot_number is null ';
990 END IF;
991
992 IF p_containerized = 1 THEN
993 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
994 ELSIF p_containerized = 2 THEN
995 query_str := query_str || 'AND containerized_flag = 1 ';
996 END IF;
997
998 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
999 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
1000 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
1001 group_str := group_str || ' , item_lot_control, item_serial_control ';
1002 END IF;
1003
1004 IF p_qty_from IS NOT NULL THEN
1005 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
1006 END IF;
1007
1008 IF p_qty_to IS NOT NULL THEN
1009 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
1010 END IF;
1011
1012 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1013 query_str := query_str || ' AND organization_id = mp.organization_id ';
1014 query_str := query_str || group_str || having_str || ' ) ' ;
1015 ELSE
1016 query_str := query_str || ' AND organization_id = mp.organization_id ) ';
1017 END IF;
1018
1019 IF p_organization_id IS NOT NULL THEN
1020 query_str := query_str || ' and mp.organization_id = :org_id ';
1021 -- Bug # 3411938
1022 ELSE
1023 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
1024 query_str := query_str || ' FROM org_access_view oav ' ;
1025 query_str := query_str || ' WHERE oav.organization_id = mp.organization_id ' ;
1026 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
1027 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
1028 END IF;
1029
1030 query_str := query_str || ' ORDER BY organization_code ';
1031
1032 -- Need to use MTL_ONHAND_LPN_V
1033 ELSIF(p_lpn_from IS NOT NULL
1034 OR p_lpn_to IS NOT NULL
1035 OR nvl(p_prepacked,1) <> 1) THEN
1036 IF p_sub_type = 2 THEN
1037 table_required := ' mtl_onhand_lpn_mwb_v mol ';
1038 ELSIF(p_status_id IS NULL) THEN
1039 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
1040 table_required := ' mtl_onhand_lpn_mwb_v mol ';
1041 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
1042 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
1043 END IF;
1044 ELSE
1045 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
1046 END IF;
1047 ELSE
1048 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
1049 table_required := ' mtl_onhand_lpn_v mol ';
1050 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
1051 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
1052 END IF;
1053 ELSE
1054 table_required := ' mtl_onhand_new_lpn_v mol ';
1055 END IF;
1056 END IF;
1057
1058 query_str := query_str || ' SELECT organization_id from ' || table_required;
1059
1060 IF p_lpn_from IS NOT NULL
1061 OR p_lpn_to IS NOT NULL THEN
1062 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
1063 query_str := query_str || ' WHERE 1=1 ';
1064
1065 IF p_sub_type = 2 THEN
1066 query_str := query_str || ' AND lpn_context = 3 ';
1067 ELSIF p_prepacked IS NULL THEN
1068 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 )';
1069 ELSIF p_prepacked = 1 THEN
1070 query_str := query_str || ' AND lpn_context = 1 ';
1071 ELSIF p_prepacked <> 1
1072 AND p_prepacked <> 999
1073 AND p_prepacked IS NOT NULL THEN
1074 query_str := query_str || ' AND lpn_context = :prepacked ';
1075 END IF;
1076
1077 IF p_locator_id IS NOT NULL THEN
1078 query_str := query_str || ' AND wlpn.locator_id = :loc_id ';
1079 END IF;
1080
1081 IF p_subinventory_code IS NOT NULL THEN
1082 query_str := query_str || ' AND wlpn.subinventory_code = :sub ';
1083 END IF;
1084
1085 IF p_organization_id IS NOT NULL THEN
1086 query_str := query_str || ' AND wlpn.organization_id = :org_id ';
1087 END IF;
1088
1089 IF p_lpn_from IS NOT NULL
1090 OR p_lpn_to IS NOT NULL THEN
1091 IF p_lpn_from IS NOT NULL
1092 AND p_lpn_to IS NULL THEN
1093 query_str := query_str || ' and license_plate_number >= :lpn_f ';
1094 ELSIF p_lpn_from IS NULL
1095 AND p_lpn_to IS NOT NULL THEN
1096 query_str := query_str || ' and license_plate_number <= :lpn_t ';
1097 ELSIF p_lpn_from IS NOT NULL
1098 AND p_lpn_to IS NOT NULL THEN
1099 --bugfix#3646484
1100 IF (p_lpn_from = p_lpn_to) THEN
1101 --User is querying for single LPN so converted the range query to equality query
1102 query_str := query_str || 'and license_plate_number = :lpn_f ';
1103 ELSE
1104 query_str := query_str || ' and license_plate_number >= :lpn_f ';
1105 query_str := query_str || ' and license_plate_number <= :lpn_t ';
1106 END IF;
1107 END IF;
1108 END IF;
1109
1110 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
1111 END IF;
1112
1113 IF p_lot_attr_query IS NULL
1114 AND p_serial_attr_query IS NULL THEN
1115 query_str := query_str || 'WHERE 1=1 ';
1116 ELSIF p_lot_attr_query IS NULL
1117 AND p_serial_attr_query IS NOT NULL THEN
1118 query_str :=
1119 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
1120 || ') msn ';
1121 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
1122 ELSIF p_lot_attr_query IS NOT NULL
1123 AND p_serial_attr_query IS NULL THEN
1124 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
1125 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
1126 ELSIF p_lot_attr_query IS NOT NULL
1127 AND p_serial_attr_query IS NOT NULL THEN
1128 query_str :=
1129 query_str
1130 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
1131 || p_lot_attr_query
1132 || ') mln '
1133 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
1134 || p_serial_attr_query
1135 || ') msn ';
1136 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
1137 query_str := query_str || 'AND msn.serial_num = serial_number ';
1138 END IF;
1139
1140 --ER(3338592) Changes (If the user gives the value for the Qty then only
1141 --Group by clause comes in to effect)
1142
1143 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1144 group_str := ' GROUP BY organization_id ';
1145 END IF;
1146
1147 IF p_subinventory_code IS NOT NULL THEN
1148 query_str := query_str || 'AND subinventory_code = :sub ';
1149 --ER(3338592) Changes
1150 IF group_str IS NOT NULL THEN
1151 group_str := group_str || ' , subinventory_code ' ;
1152 END IF;
1153 END IF;
1154
1155 IF p_subinventory_code IS NULL AND p_detailed = 1 THEN --Bug # 3412002
1156 --ER(3338592) Changes
1157 IF group_str IS NOT NULL THEN
1158 group_str := group_str || ' , subinventory_code ' ;
1159 END IF;
1160 END IF;
1161
1162 -- NSRIVAST, INVCONV, Start
1163 IF p_grade_from IS NOT NULL THEN
1164 query_str := query_str || ' AND grade_code = :grade_f ' ;
1165 END IF ;
1166 IF p_grade_code IS NOT NULL THEN
1167 query_str := query_str || ' AND grade_code = :grade_c ' ;
1168 END IF ;
1169 -- NSRIVAST, INVCONV, End
1170
1171 IF p_locator_id IS NOT NULL THEN
1172 query_str := query_str || 'AND locator_id = :loc_id ';
1173 --ER(3338592) Changes
1174 IF group_str IS NOT NULL THEN
1175 group_str := group_str || ' , locator_id ' ;
1176 END IF;
1177 END IF;
1178
1179 IF p_locator_id IS NULL AND p_detailed = 1 THEN --Bug # 3412002
1180 --ER(3338592) Changes
1181 IF group_str IS NOT NULL THEN
1182 group_str := group_str || ' , locator_id ' ;
1183 END IF;
1184 END IF;
1185
1186 IF p_project_id IS NOT NULL THEN
1187 query_str := query_str || ' AND project_id = :pr_id ';
1188 --ER(3338592) Changes
1189 IF group_str IS NOT NULL THEN
1190 group_str := group_str || ' , project_id ' ;
1191 END IF;
1192 END IF;
1193
1194 IF p_task_id IS NOT NULL THEN
1195 query_str := query_str || ' AND task_id = :ta_id ';
1196 --ER(3338592) Changes
1197 IF group_str IS NOT NULL THEN
1198 group_str := group_str || ' , p_task_id ' ;
1199 END IF;
1200 END IF;
1201
1202 IF p_inventory_item_id IS NOT NULL THEN
1203 query_str := query_str || ' AND inventory_item_id = :item_id ';
1204 END IF;
1205
1206 --Bug # 3411938
1207 IF (p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL)
1208 AND (NVL(p_view_by,' ') NOT IN ('LOT' , 'SERIAL')) THEN
1209 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
1210 END IF;
1211
1212 --ER(3338592) Changes
1213 IF p_item_description IS NOT NULL THEN
1214 query_str := query_str || ' AND item_description LIKE :item_description ';
1215 END IF;
1216
1217 IF p_revision IS NOT NULL THEN
1218 query_str := query_str || ' AND revision = :rev ';
1219 --ER(3338592) Changes
1220 IF group_str IS NOT NULL THEN
1221 group_str := group_str || ' , revision ' ;
1222 END IF;
1223 END IF;
1224
1225 IF p_cost_group_id IS NOT NULL THEN
1226 query_str := query_str || ' AND cost_group_id = :cg_id ';
1227 --ER(3338592) Changes
1228 IF group_str IS NOT NULL THEN
1229 group_str := group_str || ' , cost_group_id ' ;
1230 END IF;
1231 END IF;
1232
1233 IF p_lpn_from IS NOT NULL
1234 OR p_lpn_to IS NOT NULL THEN
1235 query_str := query_str || ' AND MOL.outermost_lpn_id = X.outermost_lpn_id ';
1236 END IF;
1237
1238 --ER(3338592) Changes
1239 IF p_lpn_from IS NOT NULL OR p_lpn_to IS NOT NULL THEN
1240 --ER(3338592) Changes
1241 IF group_str IS NOT NULL THEN
1242 group_str := group_str || ' , lpn ' ;
1243 END IF;
1244 END IF;
1245
1246 IF p_lot_number_from IS NOT NULL THEN
1247 query_str := query_str || ' AND lot_number >= :lot_f ';
1248 END IF;
1249
1250 IF p_lot_number_to IS NOT NULL THEN
1251 query_str := query_str || ' AND lot_number <= :lot_t ';
1252 END IF;
1253
1254 IF p_serial_number_from IS NOT NULL THEN
1255 query_str := query_str || ' AND serial_number >= :serial_f ';
1256 END IF;
1257
1258 IF p_serial_number_to IS NOT NULL THEN
1259 query_str := query_str || ' AND serial_number <= :serial_t ';
1260 END IF;
1261
1262 IF p_unit_number IS NOT NULL THEN
1263 query_str := query_str || ' AND unit_number=:un_id ';
1264 END IF;
1265
1266 IF p_status_id IS NOT NULL THEN
1267 query_str := query_str || ' AND (subinventory_status_id = :st_id OR locator_status_id = :st_id ';
1268 query_str := query_str || ' OR lot_status_id = :st_id OR serial_status_id = :st_id) ';
1269 END IF;
1270
1271 IF p_lot_controlled = 2 THEN
1272 query_str := query_str || ' AND lot_number is not null ';
1273 ELSIF p_lot_controlled = 1 THEN
1274 query_str := query_str || ' AND lot_number is null ';
1275 END IF;
1276
1277 IF p_serial_controlled = 1 THEN
1278 query_str := query_str || ' AND serial_number is null ';
1279 ELSIF p_serial_controlled = 2 THEN
1280 query_str := query_str || ' AND serial_number is not null ';
1281 END IF;
1282
1283 IF p_sub_type = 2 THEN
1284 query_str := query_str || ' AND lpn_context = 3 ';
1285 ELSIF p_prepacked IS NULL THEN
1286 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 ) ';
1287 ELSIF p_prepacked = 1 THEN
1288 query_str := query_str || 'AND lpn_context = 1 ';
1289 ELSIF p_prepacked <> 1
1290 AND p_prepacked <> 999
1291 AND p_prepacked IS NOT NULL THEN
1292 query_str := query_str || 'AND lpn_context = :prepacked ';
1293 END IF;
1294
1295 /*IF p_site_id IS NOT NULL THEN
1296 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
1297 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
1298 ELSIF p_vendor_id is NOT NULL THEN
1299 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
1300 query_str := query_str || ' AND planning_organization_id in ';
1301 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
1302 query_str := query_str || ' where vendor_id = :vendor_id )';
1303 END IF;*/
1304
1305 IF (p_owning_qry_mode = 4) THEN
1306 query_str := query_str || ' AND owning_organization_id = :own_org ';
1307 query_str := query_str || ' AND owning_tp_type = 2 ';
1308 ELSIF(p_owning_qry_mode = 3) THEN
1309 query_str := query_str || ' AND owning_organization_id = :own_org ';
1310 query_str := query_str || ' AND owning_tp_type = 1 ';
1311 ELSIF(p_owning_qry_mode = 2) THEN
1312 query_str := query_str || ' AND owning_tp_type = 1 ';
1313 END IF;
1314
1315 IF (p_planning_query_mode = 4) THEN
1316 query_str := query_str || ' AND planning_organization_id = :plan_org ';
1317 query_str := query_str || ' AND planning_tp_type = 2 ';
1318 ELSIF(p_planning_query_mode = 3) THEN
1319 query_str := query_str || ' AND planning_organization_id = :plan_org ';
1320 query_str := query_str || ' AND planning_tp_type = 1 ';
1321 ELSIF(p_planning_query_mode = 2) THEN
1322 query_str := query_str || ' AND planning_tp_type = 1 ';
1323 END IF;
1324
1325 --Bug #3411938
1326 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1327 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
1328 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
1329 group_str := group_str || ' , item_lot_control, item_serial_control ';
1330 END IF;
1331
1332 IF p_qty_from IS NOT NULL THEN
1333 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
1334 END IF;
1335
1336 IF p_qty_to IS NOT NULL THEN
1337 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
1338 END IF;
1339
1340 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1341 query_str := query_str || 'AND organization_id = mp.organization_id ';
1342 query_str := query_str || group_str || having_str || ' ) ' ;
1343 ELSE
1344 query_str := query_str || 'AND organization_id = mp.organization_id ) ';
1345 END IF;
1346
1347 IF p_organization_id IS NOT NULL THEN
1348 query_str := query_str || 'and mp.organization_id = :org_id ';
1349 --Bug # 3411938
1350 ELSE
1351 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
1352 query_str := query_str || ' FROM org_access_view oav ' ;
1353 query_str := query_str || ' WHERE oav.organization_id = mp.organization_id ' ;
1354 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
1355 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
1356 END IF;
1357
1358 query_str := query_str || ' ORDER BY organization_code ';
1359
1360 END IF;
1361 END IF;
1362
1363 -- Enable this during debugging
1364 inv_trx_util_pub.trace(query_str, 'Add-Orgs - Material Workbench', 9);
1365 --trace1(query_str, 'add_orgs', 9);
1366
1367 query_hdl := DBMS_SQL.open_cursor;
1368 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
1369
1370 IF p_organization_id IS NOT NULL THEN
1371 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
1372 END IF;
1373
1374 IF p_subinventory_code IS NOT NULL THEN
1375 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
1376 END IF;
1377
1378 IF p_locator_id IS NOT NULL THEN
1379 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
1380 END IF;
1381
1382 IF p_inventory_item_id IS NOT NULL THEN
1383 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
1384 END IF;
1385
1386 IF p_revision IS NOT NULL THEN
1387 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
1388 END IF;
1389
1390 IF p_cost_group_id IS NOT NULL THEN
1391 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
1392 END IF;
1393
1394 IF p_lot_number_from IS NOT NULL THEN
1395 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
1396 END IF;
1397
1398 IF p_lot_number_to IS NOT NULL THEN
1399 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
1400 END IF;
1401
1402 -- NSRIVAST, INVCONV, Start
1403 IF p_grade_from IS NOT NULL THEN
1404 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
1405 END IF;
1406 IF p_grade_code IS NOT NULL THEN
1407 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
1408 END IF;
1409 -- NSRIVAST, INVCONV, End
1410 IF p_serial_number_from IS NOT NULL THEN
1411 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
1412 END IF;
1413
1414 IF p_serial_number_to IS NOT NULL THEN
1415 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
1416 END IF;
1417
1418 --bugfix#3646484
1419 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
1420 --User is querying for single LPN so converted the range query to equality query
1421 --So it is enought to bind the from lpn alone
1422 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
1423 ELSE
1424 IF p_lpn_from IS NOT NULL THEN
1425 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
1426 END IF;
1427
1428 IF p_lpn_to IS NOT NULL THEN
1429 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
1430 END IF;
1431 END IF;
1432
1433 IF p_status_id IS NOT NULL THEN
1434 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
1435 END IF;
1436
1437 IF p_prepacked <> 1
1438 AND p_prepacked <> 999
1439 AND p_prepacked IS NOT NULL THEN
1440 DBMS_SQL.bind_variable(query_hdl, 'prepacked', p_prepacked);
1441 END IF;
1442
1443 IF p_mln_context_code IS NOT NULL THEN
1444 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
1445 END IF;
1446
1447 IF p_project_id IS NOT NULL THEN
1448 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
1449 END IF;
1450
1451 IF p_task_id IS NOT NULL THEN
1452 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
1453 END IF;
1454
1455 IF p_unit_number IS NOT NULL THEN
1456 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
1457 END IF;
1458
1459 IF (p_owning_qry_mode = 4)
1460 OR(p_owning_qry_mode = 3) THEN
1461 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
1462 END IF;
1463
1464 IF (p_planning_query_mode = 4)
1465 OR(p_planning_query_mode = 3) THEN
1466 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
1467 END IF;
1468
1469 --ER(3338592) Changes
1470 IF p_item_description IS NOT NULL THEN
1471 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
1472 END IF;
1473
1474 IF p_qty_from IS NOT NULL THEN
1475 dbms_sql.bind_variable(query_hdl, 'qty_from', p_qty_from);
1476 END IF;
1477
1478 IF p_qty_to IS NOT NULL THEN
1479 dbms_sql.bind_variable(query_hdl, 'qty_to', p_qty_to);
1480 END IF;
1481 --End of ER Changes
1482
1483 --Bug #3411938
1484 IF p_organization_id IS NULL THEN
1485 IF p_responsibility_id IS NOT NULL THEN
1486 dbms_sql.bind_variable(query_hdl, 'responsibility_id', p_responsibility_id );
1487 END IF;
1488
1489 IF p_resp_application_id IS NOT NULL THEN
1490 dbms_sql.bind_variable(query_hdl, 'resp_application_id', p_resp_application_id );
1491 END IF;
1492 END IF;
1493
1494 DBMS_SQL.define_column(query_hdl, 1, org_id);
1495 DBMS_SQL.define_column(query_hdl, 2, org_code, 3);
1496 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
1497
1498 LOOP
1499 -- fetch a row
1500 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
1501 -- fetch columns from the row
1502 DBMS_SQL.column_value(query_hdl, 1, org_id);
1503 DBMS_SQL.column_value(query_hdl, 2, org_code);
1504
1505 IF j >= p_node_low_value THEN
1506 x_node_tbl(i).state := p_node_state;
1507 x_node_tbl(i).DEPTH := 1;
1508 x_node_tbl(i).label := org_code;
1509 x_node_tbl(i).icon := 'inv_inor';
1510 x_node_tbl(i).VALUE := TO_CHAR(org_id);
1511 x_node_tbl(i).TYPE := 'ORG';
1512 i := i + 1;
1513 END IF;
1514
1515 EXIT WHEN j >= p_node_high_value;
1516 j := j + 1;
1517 ELSE
1518 EXIT;
1519 END IF;
1520 END LOOP;
1521
1522 DBMS_SQL.close_cursor(query_hdl); -- close cursor
1523 x_node_value := j;
1524 x_tbl_index := i;
1525 EXCEPTION
1526 WHEN NO_DATA_FOUND THEN
1527 NULL;
1528 WHEN OTHERS THEN
1529 RAISE;
1530 END add_orgs;
1531
1532 -- Add status nodes for the given parameters
1533 PROCEDURE add_statuses(
1534 p_organization_id IN NUMBER DEFAULT NULL
1535 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
1536 , p_locator_id IN NUMBER DEFAULT NULL
1537 , p_inventory_item_id IN NUMBER DEFAULT NULL
1538 , p_revision IN VARCHAR2 DEFAULT NULL
1539 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
1540 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
1541 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
1542 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
1543 , p_lpn_from IN VARCHAR2 DEFAULT NULL
1544 , p_lpn_to IN VARCHAR2 DEFAULT NULL
1545 , p_cost_group_id IN NUMBER DEFAULT NULL
1546 , p_status_id IN NUMBER DEFAULT NULL
1547 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
1548 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
1549 , p_project_id IN NUMBER DEFAULT NULL
1550 , p_task_id IN NUMBER DEFAULT NULL
1551 , p_unit_number IN VARCHAR2 DEFAULT NULL
1552 , -- consinged changes
1553 p_owning_qry_mode IN NUMBER DEFAULT NULL
1554 , p_planning_query_mode IN NUMBER DEFAULT NULL
1555 , p_owning_org IN NUMBER DEFAULT NULL
1556 , p_planning_org IN NUMBER DEFAULT NULL
1557 , -- consigned changes
1558 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
1559 , p_node_state IN NUMBER
1560 , p_node_high_value IN NUMBER
1561 , p_node_low_value IN NUMBER
1562 --ER(3338592) Changes
1563 , p_item_description IN VARCHAR2 DEFAULT NULL
1564 , p_qty_from IN NUMBER DEFAULT NULL
1565 , p_qty_to IN NUMBER DEFAULT NULL
1566 --End of ER Changes
1567 , p_responsibility_id IN NUMBER DEFAULT NULL
1568 , p_resp_application_id IN NUMBER DEFAULT NULL
1569 , x_node_value IN OUT NOCOPY NUMBER
1570 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
1571 , x_tbl_index IN OUT NOCOPY NUMBER
1572 -- NSRIVAST, INVCONV, Start
1573 , p_grade_from IN VARCHAR2 DEFAULT NULL
1574
1575 , p_grade_code IN VARCHAR2 DEFAULT NULL
1576 , p_grade_controlled IN NUMBER DEFAULT 0
1577 -- NSRIVAST, INVCONV, End
1578 ) IS
1579 query_str VARCHAR2(10000);
1580 query_hdl NUMBER;
1581 rows_processed NUMBER;
1582 status_id mtl_material_statuses_vl.status_id%TYPE;
1583 status_code mtl_material_statuses_vl.status_code%TYPE;
1584 i NUMBER := x_tbl_index;
1585 j NUMBER := x_node_value;
1586 serial_control NUMBER;
1587 table_required VARCHAR2(300);
1588
1589 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
1590
1591 --ER(3338592) Changes
1592 group_str VARCHAR2(10000) ;
1593 having_str VARCHAR2(10000) := ' HAVING 1=1 ';
1594 --End of ER Changes
1595
1596 BEGIN
1597
1598 -- NSRIVAST, INVCONV, Start
1599 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
1600 is_grade_t := TRUE ;
1601 END IF ;
1602 -- NSRIVAST, INVCONV, End
1603
1604 query_str := 'SELECT mms.status_id, mms.status_code ';
1605 query_str := query_str || 'FROM mtl_material_statuses_vl mms ';
1606 query_str := query_str || ' WHERE exists (';
1607
1608 IF p_organization_id IS NOT NULL
1609 AND p_inventory_item_id IS NOT NULL THEN
1610 SELECT serial_number_control_code
1611 INTO serial_control
1612 FROM mtl_system_items
1613 WHERE organization_id = p_organization_id
1614 AND inventory_item_id = p_inventory_item_id;
1615 END IF;
1616
1617 IF (serial_control IN(2, 5)
1618 OR p_serial_number_from IS NOT NULL
1619 OR p_serial_number_to IS NOT NULL
1620 OR p_serial_attr_query IS NOT NULL)
1621 AND p_lpn_from IS NULL
1622 AND p_lpn_to IS NULL THEN
1623 IF p_lot_attr_query IS NULL
1624 AND p_serial_attr_query IS NULL THEN
1625 query_str := query_str || 'SELECT organization_id from mtl_onhand_serial_v mos ';
1626 query_str := query_str || 'WHERE 1=1 ';
1627 ELSIF p_lot_attr_query IS NULL
1628 AND p_serial_attr_query IS NOT NULL THEN
1629 query_str :=
1630 query_str
1631 || 'SELECT organization_id from'
1632 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
1633 || p_serial_attr_query
1634 || ') msn, mtl_onhand_serial_v mos ';
1635 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
1636 ELSIF p_lot_attr_query IS NOT NULL
1637 AND p_serial_attr_query IS NULL THEN
1638 query_str :=
1639 query_str
1640 || 'SELECT organization_id from'
1641 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
1642 || p_lot_attr_query
1643 || ') mln, mtl_onhand_serial_v mos ';
1644 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
1645 ELSIF p_lot_attr_query IS NOT NULL
1646 AND p_serial_attr_query IS NOT NULL THEN
1647 query_str :=
1648 query_str
1649 || 'SELECT organization_id from'
1650 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
1651 || p_lot_attr_query
1652 || ') mln, '
1653 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
1654 || p_serial_attr_query
1655 || ') msn, mtl_onhand_serial_v mos ';
1656 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
1657 query_str := query_str || 'AND msn.serial_num = serial_number ';
1658 END IF;
1659
1660 --ER(3338592) Changes (If the user gives the value for the Qty then only
1661 --Group by clause comes in to effect)
1662
1663 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1664 group_str := ' GROUP BY organization_id ';
1665 END IF;
1666
1667 IF p_organization_id IS NOT NULL THEN
1668 query_str := query_str || 'AND organization_id = :org_id ';
1669 END IF;
1670
1671 IF p_subinventory_code IS NOT NULL THEN
1672 query_str := query_str || 'AND subinventory_code <= :sub ';
1673 --ER(3338592) Changes
1674 IF group_str IS NOT NULL THEN
1675 group_str := group_str || ' , subinventory_code ' ;
1676 END IF;
1677 END IF;
1678
1679 -- NSRIVAST, INVCONV, Start
1680 IF p_grade_from IS NOT NULL THEN
1681 query_str := query_str || ' AND grade_code = :grade_f ' ;
1682 END IF ;
1683 IF p_grade_code IS NOT NULL THEN
1684 query_str := query_str || ' AND grade_code = :grade_c ' ;
1685 END IF ;
1686 -- NSRIVAST, INVCONV, End
1687
1688 IF p_locator_id IS NOT NULL THEN
1689 query_str := query_str || 'AND locator_id = :loc_id ';
1690 --ER(3338592) Changes
1691 IF group_str IS NOT NULL THEN
1692 group_str := group_str || ' , locator_id ' ;
1693 END IF;
1694 END IF;
1695
1696 IF p_project_id IS NOT NULL THEN
1697 query_str := query_str || ' AND project_id = :pr_id ';
1698 --ER(3338592) Changes
1699 IF group_str IS NOT NULL THEN
1700 group_str := group_str || ' , project_id ' ;
1701 END IF;
1702 END IF;
1703
1704 IF p_task_id IS NOT NULL THEN
1705 query_str := query_str || ' AND task_id = :ta_id ';
1706 --ER(3338592) Changes
1707 IF group_str IS NOT NULL THEN
1708 group_str := group_str || ' , p_task_id ' ;
1709 END IF;
1710 END IF;
1711
1712 IF p_inventory_item_id IS NOT NULL THEN
1713 query_str := query_str || 'AND inventory_item_id = :item_id ';
1714 END IF;
1715
1716 --Bug # 3411938
1717 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1718 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
1719 END IF;
1720
1721 --ER(3338592) Changes
1722 IF p_item_description IS NOT NULL THEN
1723 query_str := query_str || ' AND item_description LIKE :item_description ';
1724 END IF;
1725
1726 IF p_revision IS NOT NULL THEN
1727 query_str := query_str || 'AND revision <= :rev ';
1728 --ER(3338592) Changes
1729 IF group_str IS NOT NULL THEN
1730 group_str := group_str || ' , revision ' ;
1731 END IF;
1732 END IF;
1733
1734 IF p_cost_group_id IS NOT NULL THEN
1735 query_str := query_str || 'AND cost_group_id = :cg_id ';
1736 --ER(3338592) Changes
1737 IF group_str IS NOT NULL THEN
1738 group_str := group_str || ' , cost_group_id ' ;
1739 END IF;
1740 END IF;
1741
1742 IF p_lot_number_from IS NOT NULL THEN
1743 query_str := query_str || 'AND lot_number >= :lot_f ';
1744 END IF;
1745
1746 IF p_lot_number_to IS NOT NULL THEN
1747 query_str := query_str || 'AND lot_number <= :lot_t ';
1748 END IF;
1749
1750 IF p_serial_number_from IS NOT NULL THEN
1751 query_str := query_str || 'AND serial_number >= :serial_f ';
1752 END IF;
1753
1754 IF p_serial_number_to IS NOT NULL THEN
1755 query_str := query_str || 'AND serial_number <= :serial_t ';
1756 END IF;
1757
1758 IF p_unit_number IS NOT NULL THEN
1759 query_str := query_str || ' AND unit_number=:un_id ';
1760 END IF;
1761
1762 /*IF p_site_id IS NOT NULL THEN
1763 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
1764 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
1765 ELSIF p_vendor_id is NOT NULL THEN
1766 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
1767 query_str := query_str || ' AND planning_organization_id in ';
1768 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
1769 query_str := query_str || ' where vendor_id = :vendor_id )';
1770 END IF;*/
1771
1772 IF (p_planning_query_mode = 4) THEN
1773 query_str := query_str || ' AND planning_organization_id = :plan_org ';
1774 query_str := query_str || ' AND planning_tp_type = 2 ';
1775 ELSIF(p_planning_query_mode = 3) THEN
1776 query_str := query_str || ' AND planning_organization_id = :plan_org ';
1777 query_str := query_str || ' AND planning_tp_type = 1 ';
1778 ELSIF(p_planning_query_mode = 2) THEN
1779 query_str := query_str || ' AND planning_tp_type = 1 ';
1780 END IF;
1781
1782 IF (p_owning_qry_mode = 4) THEN
1783 query_str := query_str || ' AND owning_organization_id = :own_org ';
1784 query_str := query_str || ' AND owning_tp_type = 2 ';
1785 ELSIF(p_owning_qry_mode = 3) THEN
1786 query_str := query_str || ' AND owning_organization_id = :own_org ';
1787 query_str := query_str || ' AND owning_tp_type = 1 ';
1788 ELSIF(p_owning_qry_mode = 2) THEN
1789 query_str := query_str || ' AND owning_tp_type = 1 ';
1790 END IF;
1791
1792 --Bug #3411938
1793 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1794 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
1795 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
1796 group_str := group_str || ' , item_lot_control, item_serial_control ';
1797 END IF;
1798
1799 query_str := query_str || ' AND (subinventory_status_id = mms.status_id ';
1800 query_str := query_str || ' or locator_status_id = mms.status_id or ';
1801 query_str := query_str || ' lot_status_id = mms.status_id or serial_status_id = mms.status_id) ';
1802
1803 IF p_qty_from IS NOT NULL THEN
1804 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
1805 END IF;
1806
1807 IF p_qty_to IS NOT NULL THEN
1808 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
1809 END IF;
1810
1811 IF p_organization_id IS NOT NULL THEN
1812 query_str := query_str || 'AND organization_id = :org_id ';
1813 ELSE
1814 query_str := query_str || ' AND EXISTS ( SELECT 1 ' ;
1815 query_str := query_str || ' FROM org_access_view oav ' ;
1816 query_str := query_str || ' WHERE oav.organization_id = mos.organization_id ' ;
1817 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
1818 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
1819 END IF;
1820
1821 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1822 query_str := query_str || group_str || having_str || ' ' ;
1823 END IF;
1824
1825 query_str := query_str || ') ';
1826
1827 IF p_status_id IS NOT NULL THEN
1828 query_str := query_str || 'and mms.status_id = :st_id ';
1829 END IF;
1830
1831 query_str := query_str || ' ORDER BY status_code ';
1832
1833 ELSIF p_lpn_from IS NULL
1834 AND p_lpn_to IS NULL THEN
1835 IF p_lot_attr_query IS NULL THEN
1836 query_str := query_str || 'SELECT organization_id from mtl_onhand_total_v mot ';
1837 query_str := query_str || 'WHERE 1=1 ';
1838 ELSE
1839 query_str :=
1840 query_str
1841 || 'SELECT organization_id from'
1842 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
1843 || p_lot_attr_query
1844 || ') mln, mtl_onhand_total_v mot ';
1845 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
1846 END IF;
1847
1848 --ER(3338592) Changes (If the user gives the value for the Qty then only
1849 --Group by clause comes in to effect)
1850
1851 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1852 group_str := ' GROUP BY organization_id ';
1853 END IF;
1854
1855 IF p_organization_id IS NOT NULL THEN
1856 query_str := query_str || 'AND organization_id = :org_id ';
1857 END IF;
1858
1859 IF p_subinventory_code IS NOT NULL THEN
1860 query_str := query_str || 'AND subinventory_code = :sub ';
1861 --ER(3338592) Changes
1862 IF group_str IS NOT NULL THEN
1863 group_str := group_str || ' , subinventory_code ' ;
1864 END IF;
1865 END IF;
1866
1867 -- NSRIVAST, INVCONV, Start
1868 IF p_grade_from IS NOT NULL THEN
1869 query_str := query_str || ' AND grade_code = :grade_f ' ;
1870 END IF ;
1871 IF p_grade_code IS NOT NULL THEN
1872 query_str := query_str || ' AND grade_code = :grade_c ' ;
1873 END IF ;
1874 -- NSRIVAST, INVCONV, End
1875
1876 IF p_locator_id IS NOT NULL THEN
1877 query_str := query_str || 'AND locator_id = :loc_id ';
1878 --ER(3338592) Changes
1879 IF group_str IS NOT NULL THEN
1880 group_str := group_str || ' , locator_id ' ;
1881 END IF;
1882 END IF;
1883
1884 IF p_project_id IS NOT NULL THEN
1885 query_str := query_str || ' AND project_id = :pr_id ';
1886 --ER(3338592) Changes
1887 IF group_str IS NOT NULL THEN
1888 group_str := group_str || ' , project_id ' ;
1889 END IF;
1890 END IF;
1891
1892 IF p_task_id IS NOT NULL THEN
1893 query_str := query_str || ' AND task_id = :ta_id ';
1894 --ER(3338592) Changes
1895 IF group_str IS NOT NULL THEN
1896 group_str := group_str || ' , p_task_id ' ;
1897 END IF;
1898 END IF;
1899
1900 IF p_inventory_item_id IS NOT NULL THEN
1901 query_str := query_str || 'AND inventory_item_id = :item_id ';
1902 END IF;
1903
1904 --Bug # 3411938
1905 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1906 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
1907 END IF;
1908
1909 --ER(3338592) Changes
1910 IF p_item_description IS NOT NULL THEN
1911 query_str := query_str || ' AND item_description LIKE :item_description ';
1912 END IF;
1913
1914 IF p_revision IS NOT NULL THEN
1915 query_str := query_str || 'AND revision = :rev ';
1916 --ER(3338592) Changes
1917 IF group_str IS NOT NULL THEN
1918 group_str := group_str || ' , revision ' ;
1919 END IF;
1920 END IF;
1921
1922 IF p_cost_group_id IS NOT NULL THEN
1923 query_str := query_str || 'AND cost_group_id = :cg_id ';
1924 --ER(3338592) Changes
1925 IF group_str IS NOT NULL THEN
1926 group_str := group_str || ' , cost_group_id ' ;
1927 END IF;
1928 END IF;
1929
1930 IF p_lot_number_from IS NOT NULL THEN
1931 query_str := query_str || 'AND lot_number >= :lot_f ';
1932 END IF;
1933
1934 IF p_lot_number_to IS NOT NULL THEN
1935 query_str := query_str || 'AND lot_number <= :lot_t ';
1936 END IF;
1937
1938 IF p_unit_number IS NOT NULL THEN
1939 query_str := query_str || ' AND unit_number=:un_id ';
1940 END IF;
1941
1942 /*IF p_site_id IS NOT NULL THEN
1943 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
1944 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
1945 ELSIF p_vendor_id is NOT NULL THEN
1946 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
1947 query_str := query_str || ' AND planning_organization_id in ';
1948 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
1949 query_str := query_str || ' where vendor_id = :vendor_id )';
1950 END IF;*/
1951
1952 IF (p_planning_query_mode = 4) THEN
1953 query_str := query_str || ' AND planning_organization_id = :plan_org ';
1954 query_str := query_str || ' AND planning_tp_type = 2 ';
1955 --ER(3338592) Changes
1956 IF group_str IS NOT NULL THEN
1957 group_str := group_str || ' , planning_organization_id , planning_tp_type ' ;
1958 END IF;
1959 ELSIF(p_planning_query_mode = 3) THEN
1960 query_str := query_str || ' AND planning_organization_id = :plan_org ';
1961 query_str := query_str || ' AND planning_tp_type = 1 ';
1962 --ER(3338592) Changes
1963 IF group_str IS NOT NULL THEN
1964 group_str := group_str || ' , planning_organization_id , planning_tp_type ' ;
1965 END IF;
1966 ELSIF(p_planning_query_mode = 2) THEN
1967 query_str := query_str || ' AND planning_tp_type = 1 ';
1968 --ER(3338592) Changes
1969 IF group_str IS NOT NULL THEN
1970 group_str := group_str || ' , planning_tp_type ' ;
1971 END IF;
1972 END IF;
1973
1974 IF (p_owning_qry_mode = 4) THEN
1975 query_str := query_str || ' AND owning_organization_id = :own_org ';
1976 query_str := query_str || ' AND owning_tp_type = 2 ';
1977 --ER(3338592) Changes
1978 IF group_str IS NOT NULL THEN
1979 group_str := group_str || ' , owning_organization_id , owning_tp_type ' ;
1980 END IF;
1981 ELSIF(p_owning_qry_mode = 3) THEN
1982 query_str := query_str || ' AND owning_organization_id = :own_org ';
1983 query_str := query_str || ' AND owning_tp_type = 1 ';
1984 --ER(3338592) Changes
1985 IF group_str IS NOT NULL THEN
1986 group_str := group_str || ' , owning_organization_id , owning_tp_type ' ;
1987 END IF;
1988 ELSIF(p_owning_qry_mode = 2) THEN
1989 query_str := query_str || ' AND owning_tp_type = 1 ';
1990 --ER(3338592) Changes
1991 IF group_str IS NOT NULL THEN
1992 group_str := group_str || ' , owning_tp_type ' ;
1993 END IF;
1994 END IF;
1995
1996 --Bug #3411938
1997 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
1998 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
1999 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
2000 group_str := group_str || ' , item_lot_control, item_serial_control ';
2001 END IF;
2002
2003 query_str := query_str || 'AND (subinventory_status_id = mms.status_id ';
2004 query_str := query_str || 'or locator_status_id = mms.status_id or ';
2005 query_str := query_str || 'lot_status_id = mms.status_id) ';
2006
2007 IF p_qty_from IS NOT NULL THEN
2008 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
2009 END IF;
2010
2011 IF p_qty_to IS NOT NULL THEN
2012 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
2013 END IF;
2014
2015 IF p_organization_id IS NOT NULL THEN
2016 query_str := query_str || 'AND organization_id = :org_id ';
2017 ELSE
2018 query_str := query_str || ' AND EXISTS ( SELECT 1 ' ;
2019 query_str := query_str || ' FROM org_access_view oav ' ;
2020 query_str := query_str || ' WHERE oav.organization_id = mot.organization_id ' ;
2021 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
2022 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
2023 END IF;
2024
2025 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2026 query_str := query_str || group_str || having_str || ' ' ;
2027 END IF;
2028
2029 --Reinitializing
2030 having_str := ' HAVING 1=1 ' ;
2031
2032 query_str := query_str || 'UNION ';
2033
2034 IF p_lot_attr_query IS NULL
2035 AND p_serial_attr_query IS NULL THEN
2036 query_str := query_str || 'SELECT organization_id from mtl_onhand_serial_v mos ';
2037 query_str := query_str || 'WHERE 1=1 ';
2038 ELSIF p_lot_attr_query IS NOT NULL
2039 AND p_serial_attr_query IS NULL THEN
2040 query_str :=
2041 query_str
2042 || 'SELECT organization_id from'
2043 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
2044 || p_lot_attr_query
2045 || ') mln, mtl_onhand_serial_v mos ';
2046 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
2047 END IF;
2048
2049 --ER(3338592) Changes (If the user gives the value for the Qty then only
2050 --Group by clause comes in to effect)
2051
2052 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2053 group_str := ' GROUP BY organization_id ';
2054 END IF;
2055
2056 IF p_organization_id IS NOT NULL THEN
2057 query_str := query_str || 'AND organization_id = :org_id ';
2058 END IF;
2059
2060 IF p_subinventory_code IS NOT NULL THEN
2061 query_str := query_str || 'AND subinventory_code = :sub ';
2062 --ER(3338592) Changes
2063 IF group_str IS NOT NULL THEN
2064 group_str := group_str || ' , subinventory_code ' ;
2065 END IF;
2066 END IF;
2067
2068 IF p_locator_id IS NOT NULL THEN
2069 query_str := query_str || 'AND locator_id = :loc_id ';
2070 --ER(3338592) Changes
2071 IF group_str IS NOT NULL THEN
2072 group_str := group_str || ' , locator_id ' ;
2073 END IF;
2074 END IF;
2075
2076 IF p_project_id IS NOT NULL THEN
2077 query_str := query_str || ' AND project_id = :pr_id ';
2078 --ER(3338592) Changes
2079 IF group_str IS NOT NULL THEN
2080 group_str := group_str || ' , project_id ' ;
2081 END IF;
2082 END IF;
2083
2084 IF p_task_id IS NOT NULL THEN
2085 query_str := query_str || ' AND task_id = :ta_id ';
2086 --ER(3338592) Changes
2087 IF group_str IS NOT NULL THEN
2088 group_str := group_str || ' , p_task_id ' ;
2089 END IF;
2090 END IF;
2091
2092 IF p_inventory_item_id IS NOT NULL THEN
2093 query_str := query_str || 'AND inventory_item_id = :item_id ';
2094 END IF;
2095
2096 --Bug # 3411938
2097 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2098 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
2099 END IF;
2100
2101 --ER(3338592) Changes
2102 IF p_item_description IS NOT NULL THEN
2103 query_str := query_str || ' AND item_description LIKE :item_description ';
2104 END IF;
2105
2106 IF p_revision IS NOT NULL THEN
2107 query_str := query_str || 'AND revision = :rev ';
2108 --ER(3338592) Changes
2109 IF group_str IS NOT NULL THEN
2110 group_str := group_str || ' , revision ' ;
2111 END IF;
2112 END IF;
2113
2114 IF p_cost_group_id IS NOT NULL THEN
2115 query_str := query_str || 'AND cost_group_id = :cg_id ';
2116 --ER(3338592) Changes
2117 IF group_str IS NOT NULL THEN
2118 group_str := group_str || ' , cost_group_id ' ;
2119 END IF;
2120 END IF;
2121
2122 IF p_lot_number_from IS NOT NULL THEN
2123 query_str := query_str || 'AND lot_number >= :lot_f ';
2124 END IF;
2125
2126 IF p_lot_number_to IS NOT NULL THEN
2127 query_str := query_str || 'AND lot_number <= :lot_t ';
2128 END IF;
2129
2130 IF p_serial_number_from IS NOT NULL THEN
2131 query_str := query_str || 'AND serial_number >= :serial_f ';
2132 END IF;
2133
2134 IF p_serial_number_to IS NOT NULL THEN
2135 query_str := query_str || 'AND serial_number <= :serial_t ';
2136 END IF;
2137
2138 IF p_unit_number IS NOT NULL THEN
2139 query_str := query_str || ' AND unit_number=:un_id ';
2140 END IF;
2141
2142 /*IF p_site_id IS NOT NULL THEN
2143 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
2144 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
2145 ELSIF p_vendor_id is NOT NULL THEN
2146 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
2147 query_str := query_str || ' AND planning_organization_id in ';
2148 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
2149 query_str := query_str || ' where vendor_id = :vendor_id )';
2150 END IF;*/
2151
2152 IF (p_planning_query_mode = 4) THEN
2153 query_str := query_str || ' AND planning_organization_id = :plan_org ';
2154 query_str := query_str || ' AND planning_tp_type = 2 ';
2155 ELSIF(p_planning_query_mode = 3) THEN
2156 query_str := query_str || ' AND planning_organization_id = :plan_org ';
2157 query_str := query_str || ' AND planning_tp_type = 1 ';
2158 ELSIF(p_planning_query_mode = 2) THEN
2159 query_str := query_str || ' AND planning_tp_type = 1 ';
2160 END IF;
2161
2162 IF (p_owning_qry_mode = 4) THEN
2163 query_str := query_str || ' AND owning_organization_id = :own_org ';
2164 query_str := query_str || ' AND owning_tp_type = 2 ';
2165 ELSIF(p_owning_qry_mode = 3) THEN
2166 query_str := query_str || ' AND owning_organization_id = :own_org ';
2167 query_str := query_str || ' AND owning_tp_type = 1 ';
2168 ELSIF(p_owning_qry_mode = 2) THEN
2169 query_str := query_str || ' AND owning_tp_type = 1 ';
2170 END IF;
2171
2172 --Bug #3411938
2173 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2174 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
2175 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
2176 group_str := group_str || ' , item_lot_control, item_serial_control ';
2177 END IF;
2178
2179 query_str := query_str || 'AND (subinventory_status_id = mms.status_id ';
2180 query_str := query_str || 'or locator_status_id = mms.status_id or ';
2181 query_str := query_str || 'lot_status_id = mms.status_id or serial_status_id = mms.status_id) ';
2182
2183 IF p_qty_from IS NOT NULL THEN
2184 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
2185 END IF;
2186
2187 IF p_qty_to IS NOT NULL THEN
2188 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
2189 END IF;
2190
2191 IF p_organization_id IS NOT NULL THEN
2192 query_str := query_str || 'AND organization_id = :org_id ';
2193 ELSE
2194 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
2195 query_str := query_str || ' FROM org_access_view oav ' ;
2196 query_str := query_str || ' WHERE oav.organization_id = mos.organization_id ' ;
2197 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
2198 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
2199 END IF;
2200
2201 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2202 query_str := query_str || group_str || having_str || ' ' ;
2203 END IF;
2204
2205 query_str := query_str || ') ';
2206
2207 IF p_status_id IS NOT NULL THEN
2208 query_str := query_str || 'and mms.status_id = :st_id ';
2209 END IF;
2210
2211 query_str := query_str || ' ORDER BY status_code ';
2212
2213 ELSIF p_lpn_from IS NOT NULL
2214 AND p_lpn_to IS NOT NULL THEN
2215 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
2216 table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
2217 ELSE
2218 table_required := ' MTL_ONHAND_NEW_LPN_V mol ';
2219 END IF;
2220 query_str := query_str || 'SELECT organization_id from ' || table_required;
2221
2222 IF (p_lpn_from IS NOT NULL
2223 OR p_lpn_to IS NOT NULL) THEN
2224 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
2225 query_str := query_str || ' WHERE 1=1 ';
2226
2227 IF p_locator_id IS NOT NULL THEN
2228 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
2229 END IF;
2230
2231 IF p_subinventory_code IS NOT NULL THEN
2232 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
2233 END IF;
2234
2235 IF p_organization_id IS NOT NULL THEN
2236 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
2237 END IF;
2238
2239 IF p_lpn_from IS NOT NULL
2240 OR p_lpn_to IS NOT NULL THEN
2241 IF p_lpn_from IS NOT NULL
2242 AND p_lpn_to IS NULL THEN
2243 query_str := query_str || ' and license_plate_number >= :lpn_f ';
2244 ELSIF p_lpn_from IS NULL
2245 AND p_lpn_to IS NOT NULL THEN
2246 query_str := query_str || ' and license_plate_number <= :lpn_t ';
2247 ELSIF p_lpn_from IS NOT NULL
2248 AND p_lpn_to IS NOT NULL THEN
2249 --bugfix#3646484
2250 IF (p_lpn_from = p_lpn_to) THEN
2251 --User is querying for single LPN so converted the range query to equality query
2252 query_str := query_str || 'and license_plate_number = :lpn_f ';
2253 ELSE
2254 query_str := query_str || ' and license_plate_number >= :lpn_f ';
2255 query_str := query_str || ' and license_plate_number <= :lpn_t ';
2256 END IF;
2257 END IF;
2258 END IF;
2259
2260 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
2261 END IF;
2262
2263 IF p_lot_attr_query IS NULL
2264 AND p_serial_attr_query IS NULL THEN
2265 query_str := query_str || 'WHERE 1=1 ';
2266 ELSIF p_lot_attr_query IS NULL
2267 AND p_serial_attr_query IS NOT NULL THEN
2268 query_str :=
2269 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
2270 || ') msn ';
2271 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
2272 ELSIF p_lot_attr_query IS NOT NULL
2273 AND p_serial_attr_query IS NULL THEN
2274 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
2275 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
2276 ELSIF p_lot_attr_query IS NOT NULL
2277 AND p_serial_attr_query IS NOT NULL THEN
2278 query_str :=
2279 query_str
2280 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
2281 || p_lot_attr_query
2282 || ') mln '
2283 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
2284 || p_serial_attr_query
2285 || ') msn ';
2286 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
2287 query_str := query_str || 'AND msn.serial_num = serial_number ';
2288 END IF;
2289
2290 --ER(3338592) Changes (If the user gives the value for the Qty then only
2291 --Group by clause comes in to effect)
2292
2293 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2294 group_str := ' GROUP BY organization_id ';
2295 END IF;
2296
2297 IF p_subinventory_code IS NOT NULL THEN
2298 query_str := query_str || 'AND subinventory_code = :sub ';
2299 --ER(3338592) Changes
2300 IF group_str IS NOT NULL THEN
2301 group_str := group_str || ' , subinventory_code ' ;
2302 END IF;
2303 END IF;
2304
2305 IF p_locator_id IS NOT NULL THEN
2306 query_str := query_str || 'AND locator_id = :loc_id ';
2307 --ER(3338592) Changes
2308 IF group_str IS NOT NULL THEN
2309 group_str := group_str || ' , locator_id ' ;
2310 END IF;
2311 END IF;
2312
2313 IF p_project_id IS NOT NULL THEN
2314 query_str := query_str || ' AND project_id = :pr_id ';
2315 --ER(3338592) Changes
2316 IF group_str IS NOT NULL THEN
2317 group_str := group_str || ' , project_id ' ;
2318 END IF;
2319 END IF;
2320
2321 IF p_task_id IS NOT NULL THEN
2322 query_str := query_str || ' AND task_id = :ta_id ';
2323 --ER(3338592) Changes
2324 IF group_str IS NOT NULL THEN
2325 group_str := group_str || ' , p_task_id ' ;
2326 END IF;
2327 END IF;
2328
2329 IF p_inventory_item_id IS NOT NULL THEN
2330 query_str := query_str || 'AND inventory_item_id = :item_id ';
2331 END IF;
2332
2333 --Bug # 3411938
2334 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2335 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
2336 END IF;
2337
2338 --ER(3338592) Changes
2339 IF p_item_description IS NOT NULL THEN
2340 query_str := query_str || ' AND item_description LIKE :item_description ';
2341 END IF;
2342
2343 IF p_revision IS NOT NULL THEN
2344 query_str := query_str || 'AND revision = :rev ';
2345 --ER(3338592) Changes
2346 IF group_str IS NOT NULL THEN
2347 group_str := group_str || ' , revision ' ;
2348 END IF;
2349 END IF;
2350
2351 IF p_cost_group_id IS NOT NULL THEN
2352 query_str := query_str || 'AND cost_group_id = :cg_id ';
2353 --ER(3338592) Changes
2354 IF group_str IS NOT NULL THEN
2355 group_str := group_str || ' , cost_group_id ' ;
2356 END IF;
2357 END IF;
2358
2359 IF p_lpn_from IS NOT NULL
2360 OR p_lpn_to IS NOT NULL THEN
2361 query_str := query_str || ' AND mol.outermost_lpn_id = x.outermost_lpn_id ';
2362 --ER(3338592) Changes
2363 IF group_str IS NOT NULL THEN
2364 group_str := group_str || ' , lpn ' ;
2365 END IF;
2366 END IF;
2367
2368 IF p_lot_number_from IS NOT NULL THEN
2369 query_str := query_str || 'AND lot_number >= :lot_f ';
2370 END IF;
2371
2372 IF p_lot_number_to IS NOT NULL THEN
2373 query_str := query_str || 'AND lot_number <= :lot_t ';
2374 END IF;
2375
2376 IF p_serial_number_from IS NOT NULL THEN
2377 query_str := query_str || 'AND serial_number >= :serial_f ';
2378 END IF;
2379
2380 IF p_serial_number_to IS NOT NULL THEN
2381 query_str := query_str || 'AND serial_number <= :serial_t ';
2382 END IF;
2383
2384 IF p_unit_number IS NOT NULL THEN
2385 query_str := query_str || ' AND unit_number=:un_id ';
2386 END IF;
2387
2388 /*IF p_site_id IS NOT NULL THEN
2389 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
2390 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
2391 ELSIF p_vendor_id is NOT NULL THEN
2392 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
2393 query_str := query_str || ' AND planning_organization_id in ';
2394 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
2395 query_str := query_str || ' where vendor_id = :vendor_id )';
2396 END IF;*/
2397
2398 IF (p_planning_query_mode = 4) THEN
2399 query_str := query_str || ' AND planning_organization_id = :plan_org ';
2400 query_str := query_str || ' AND planning_tp_type = 2 ';
2401 ELSIF(p_planning_query_mode = 3) THEN
2402 query_str := query_str || ' AND planning_organization_id = :plan_org ';
2403 query_str := query_str || ' AND planning_tp_type = 1 ';
2404 ELSIF(p_planning_query_mode = 2) THEN
2405 query_str := query_str || ' AND planning_tp_type = 1 ';
2406 END IF;
2407
2408 IF (p_owning_qry_mode = 4) THEN
2409 query_str := query_str || ' AND owning_organization_id = :own_org ';
2410 query_str := query_str || ' AND owning_tp_type = 2 ';
2411 ELSIF(p_owning_qry_mode = 3) THEN
2412 query_str := query_str || ' AND owning_organization_id = :own_org ';
2413 query_str := query_str || ' AND owning_tp_type = 1 ';
2414 ELSIF(p_owning_qry_mode = 2) THEN
2415 query_str := query_str || ' AND owning_tp_type = 1 ';
2416 END IF;
2417
2418 --Bug #3411938
2419 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2420 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
2421 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
2422 group_str := group_str || ' , item_lot_control, item_serial_control ';
2423 END IF;
2424
2425 query_str := query_str || 'AND (subinventory_status_id = mms.status_id ';
2426 query_str := query_str || 'or locator_status_id = mms.status_id or ';
2427 query_str := query_str || 'lot_status_id = mms.status_id or serial_status_id = mms.status_id) ';
2428
2429 IF p_qty_from IS NOT NULL THEN
2430 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
2431 END IF;
2432
2433 IF p_qty_to IS NOT NULL THEN
2434 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
2435 END IF;
2436
2437 IF p_organization_id IS NOT NULL THEN
2438 query_str := query_str || 'AND organization_id = :org_id ';
2439 ELSE
2440 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
2441 query_str := query_str || ' FROM org_access_view oav ' ;
2442 query_str := query_str || ' WHERE oav.organization_id = mol.organization_id ' ;
2443 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
2444 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
2445 END IF;
2446
2447 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
2448 query_str := query_str || group_str || having_str || ' ' ;
2449 END IF;
2450
2451 query_str := query_str || ') ';
2452
2453 IF p_status_id IS NOT NULL THEN
2454 query_str := query_str || 'and mms.status_id = :st_id ';
2455 END IF;
2456
2457 query_str := query_str || ' ORDER BY status_code ';
2458
2459 END IF;
2460
2461 -- Enable this during debugging
2462 inv_trx_util_pub.trace(query_str, 'Add-Status Material Workbench', 9);
2463 --trace1('Add_Statuses - ' || query_str);
2464
2465 query_hdl := DBMS_SQL.open_cursor;
2466 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
2467
2468 IF p_organization_id IS NOT NULL THEN
2469 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
2470 END IF;
2471
2472 IF p_subinventory_code IS NOT NULL THEN
2473 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
2474 END IF;
2475
2476 IF p_locator_id IS NOT NULL THEN
2477 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
2478 END IF;
2479
2480 IF p_inventory_item_id IS NOT NULL THEN
2481 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
2482 END IF;
2483
2484 IF p_revision IS NOT NULL THEN
2485 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
2486 END IF;
2487
2488 IF p_cost_group_id IS NOT NULL THEN
2489 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
2490 END IF;
2491
2492 IF p_lot_number_from IS NOT NULL THEN
2493 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
2494 END IF;
2495
2496 IF p_lot_number_to IS NOT NULL THEN
2497 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
2498 END IF;
2499
2500 -- NSRIVAST, INVCONV, Start
2501 IF p_grade_from IS NOT NULL THEN
2502 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
2503 END IF;
2504 IF p_grade_code IS NOT NULL THEN
2505 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
2506 END IF;
2507 -- NSRIVAST, INVCONV, End
2508
2509 IF p_serial_number_from IS NOT NULL THEN
2510 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
2511 END IF;
2512
2513 IF p_serial_number_to IS NOT NULL THEN
2514 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
2515 END IF;
2516
2517 --bugfix#3646484
2518 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
2519 --User is querying for single LPN so converted the range query to equality query
2520 --So it is enought to bind the from lpn alone
2521 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
2522 ELSE
2523 IF p_lpn_from IS NOT NULL THEN
2524 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
2525 END IF;
2526
2527 IF p_lpn_to IS NOT NULL THEN
2528 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
2529 END IF;
2530 END IF;
2531
2532 IF p_status_id IS NOT NULL THEN
2533 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
2534 END IF;
2535
2536 IF p_mln_context_code IS NOT NULL THEN
2537 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
2538 END IF;
2539
2540 IF p_project_id IS NOT NULL THEN
2541 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
2542 END IF;
2543
2544 IF p_task_id IS NOT NULL THEN
2545 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
2546 END IF;
2547
2548 IF p_unit_number IS NOT NULL THEN
2549 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
2550 END IF;
2551
2552 /*IF p_site_id IS NOT NULL THEN
2553 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
2554 ELSIF p_vendor_id is NOT NULL THEN
2555 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
2556 END IF;*/
2557 IF (p_owning_qry_mode = 4)
2558 OR(p_owning_qry_mode = 3) THEN
2559 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
2560 END IF;
2561
2562 IF (p_planning_query_mode = 4)
2563 OR(p_planning_query_mode = 3) THEN
2564 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
2565 END IF;
2566
2567 --ER(3338592) Changes
2568 IF p_item_description IS NOT NULL THEN
2569 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
2570 END IF;
2571
2572 IF p_qty_from IS NOT NULL THEN
2573 dbms_sql.bind_variable(query_hdl, 'qty_from', p_qty_from);
2574 END IF;
2575
2576 IF p_qty_to IS NOT NULL THEN
2577 dbms_sql.bind_variable(query_hdl, 'qty_to', p_qty_to);
2578 END IF;
2579 --End of ER Changes
2580
2581 -- Bug # 3411938
2582 IF p_organization_id IS NULL THEN
2583 IF p_responsibility_id IS NOT NULL THEN
2584 dbms_sql.bind_variable(query_hdl, 'responsibility_id', p_responsibility_id );
2585 END IF;
2586
2587 IF p_resp_application_id IS NOT NULL THEN
2588 dbms_sql.bind_variable(query_hdl, 'resp_application_id', p_resp_application_id );
2589 END IF;
2590 END IF;
2591
2592 DBMS_SQL.define_column(query_hdl, 1, status_id);
2593 DBMS_SQL.define_column(query_hdl, 2, status_code, 80);
2594 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
2595
2596 LOOP
2597 -- fetch a row
2598 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
2599 -- fetch columns from the row
2600 DBMS_SQL.column_value(query_hdl, 1, status_id);
2601 DBMS_SQL.column_value(query_hdl, 2, status_code);
2602
2603 IF j >= p_node_low_value THEN
2604 x_node_tbl(i).state := p_node_state;
2605 x_node_tbl(i).DEPTH := 1;
2606 x_node_tbl(i).label := status_code;
2607 x_node_tbl(i).icon := 'inv_stat';
2608 x_node_tbl(i).VALUE := TO_CHAR(status_id);
2609 x_node_tbl(i).TYPE := 'STATUS';
2610 i := i + 1;
2611 END IF;
2612
2613 EXIT WHEN j >= p_node_high_value;
2614 j := j + 1;
2615 ELSE
2616 EXIT;
2617 END IF;
2618 END LOOP;
2619
2620 DBMS_SQL.close_cursor(query_hdl); -- close cursor
2621 x_node_value := j;
2622 x_tbl_index := i;
2623 EXCEPTION
2624 WHEN NO_DATA_FOUND THEN
2625 NULL;
2626 WHEN OTHERS THEN
2627 RAISE;
2628 END add_statuses;
2629
2630 PROCEDURE add_subs(
2631 p_organization_id IN NUMBER DEFAULT NULL
2632 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
2633 , p_locator_id IN NUMBER DEFAULT NULL
2634 , p_inventory_item_id IN NUMBER DEFAULT NULL
2635 , p_revision IN VARCHAR2 DEFAULT NULL
2636 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
2637 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
2638 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
2639 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
2640 , p_lpn_from IN VARCHAR2 DEFAULT NULL
2641 , p_lpn_to IN VARCHAR2 DEFAULT NULL
2642 , p_cost_group_id IN NUMBER DEFAULT NULL
2643 , p_status_id IN NUMBER DEFAULT NULL
2644 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
2645 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
2646 , p_project_id IN NUMBER DEFAULT NULL
2647 , p_task_id IN NUMBER DEFAULT NULL
2648 , p_unit_number IN VARCHAR2 DEFAULT NULL
2649 , -- consinged changes
2650 p_owning_qry_mode IN NUMBER DEFAULT NULL
2651 , p_planning_query_mode IN NUMBER DEFAULT NULL
2652 , p_owning_org IN NUMBER DEFAULT NULL
2653 , p_planning_org IN NUMBER DEFAULT NULL
2654 , -- consigned changes
2655 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
2656 , p_only_subinventory_status IN NUMBER DEFAULT 1
2657 , p_node_state IN NUMBER
2658 , p_node_high_value IN NUMBER
2659 , p_node_low_value IN NUMBER
2660 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
2661 --ER(3338592) Changes
2662 , p_item_description IN VARCHAR2 DEFAULT NULL
2663 --End of ER Changes
2664 , x_node_value IN OUT NOCOPY NUMBER
2665 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
2666 , x_tbl_index IN OUT NOCOPY NUMBER
2667 -- NSRIVAST, INVCONV, Start
2668 , p_grade_from IN VARCHAR2 DEFAULT NULL
2669
2670 , p_grade_code IN VARCHAR2 DEFAULT NULL
2671 , p_grade_controlled IN NUMBER DEFAULT 0
2672 -- NSRIVAST, INVCONV, End
2673 ) IS
2674 query_str VARCHAR2(10000);
2675 query_hdl NUMBER;
2676 rows_processed NUMBER;
2677 sub_code mtl_onhand_quantities.subinventory_code%TYPE;
2678 i NUMBER := x_tbl_index;
2679 j NUMBER := x_node_value;
2680 table_required VARCHAR2(300);
2681 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
2682 BEGIN
2683
2684 -- NSRIVAST, INVCONV, Start
2685 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
2686 is_grade_t := TRUE ;
2687 END IF ;
2688 -- NSRIVAST, INVCONV, End
2689 -- display all the LPNs in that location with the appropriate from
2690 -- and to LPN criteria, so include the subs that have them
2691 IF p_inventory_item_id IS NULL
2692 AND p_revision IS NULL
2693 AND p_lot_number_from IS NULL
2694 AND p_lot_number_to IS NULL
2695 AND p_serial_number_from IS NULL
2696 AND p_serial_number_to IS NULL
2697 AND p_cost_group_id IS NULL
2698 AND p_status_id IS NULL
2699 AND p_lot_attr_query IS NULL
2700 AND p_serial_attr_query IS NULL
2701 AND p_unit_number IS NULL
2702 AND p_project_id IS NULL
2703 AND p_task_id IS NULL
2704 AND p_planning_org IS NULL
2705 AND p_owning_org IS NULL
2706 AND(p_lpn_from IS NOT NULL
2707 OR p_lpn_to IS NOT NULL)
2708 --ER(3338592) Changes
2709 AND p_item_description IS NULL THEN
2710 --End of ER Changes
2711 query_str := 'select subinventory_code ';
2712 query_str := query_str || 'FROM wms_license_plate_numbers WHERE 1=1 ';
2713
2714 -- query_str := query_str || 'AND (lpn_context = 1 or lpn_context=11 ');
2715
2716 IF p_sub_type = 2 THEN
2717 query_str := query_str || ' AND lpn_context = 3 ';
2718 ELSE
2719 query_str := query_str || ' AND (lpn_context = 1 or lpn_context=9 or lpn_context=11 ) ';
2720 END IF;
2721
2722 IF p_locator_id IS NOT NULL THEN
2723 query_str := query_str || 'AND locator_id = :loc_id ';
2724 END IF;
2725
2726 -- NSRIVAST, INVCONV, Start
2727 IF p_grade_from IS NOT NULL THEN
2728 query_str := query_str || ' AND grade_code = :grade_f ' ;
2729 END IF ;
2730 IF p_grade_code IS NOT NULL THEN
2731 query_str := query_str || ' AND grade_code = :grade_c ' ;
2732 END IF ;
2733 -- NSRIVAST, INVCONV, End
2734
2735 IF p_subinventory_code IS NOT NULL THEN
2736 query_str := query_str || 'AND subinventory_code = :sub ';
2737 END IF;
2738
2739 IF p_organization_id IS NOT NULL THEN
2740 query_str := query_str || 'AND organization_id = :org_id ';
2741 END IF;
2742
2743 --bugfix#3646484
2744 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
2745 --User is querying for single LPN so converted the range query to equality query
2746 query_str := query_str || 'and license_plate_number = :lpn_f ';
2747 ELSE
2748 IF p_lpn_from IS NOT NULL THEN
2749 query_str := query_str || 'and license_plate_number >= :lpn_f ';
2750 END IF;
2751
2752 IF p_lpn_to IS NOT NULL THEN
2753 query_str := query_str || 'and license_plate_number <= :lpn_t ';
2754 END IF;
2755 END IF;
2756
2757 query_str := query_str || ' GROUP BY subinventory_code ';
2758 query_str := query_str || ' ORDER BY subinventory_code ';
2759 ELSE
2760 query_str := 'SELECT msi.secondary_inventory_name subinventory_code FROM mtl_secondary_inventories msi ';
2761 query_str := query_str || ' WHERE msi.secondary_inventory_name in ( ';
2762
2763 -- Need to use MTL_ONHAND_TOTAL_V
2764 IF (
2765 p_serial_number_from IS NULL
2766 AND p_serial_number_to IS NULL
2767 AND p_unit_number IS NULL
2768 AND p_status_id IS NULL
2769 AND p_lpn_from IS NULL
2770 AND p_lpn_to IS NULL
2771 AND p_serial_attr_query IS NULL
2772 ) THEN
2773 IF p_sub_type = 2 THEN
2774 table_required := ' mtl_rcv_mwb_onhand_v ';
2775 ELSIF(p_status_id IS NULL) THEN
2776 table_required := ' mtl_onhand_total_mwb_v ';
2777 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
2778 table_required := ' mtl_onhand_total_v '; -- NSRIVAST, INVCONV
2779 END IF;
2780 ELSE
2781 table_required := ' mtl_onhand_total_v ';
2782 END IF;
2783
2784 IF p_lot_attr_query IS NULL THEN
2785 query_str := query_str || ' SELECT subinventory_code from ' || table_required;
2786 query_str := query_str || ' WHERE 1=1 ';
2787 ELSE
2788 query_str :=
2789 query_str
2790 || ' SELECT subinventory_code from '
2791 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
2792 || p_lot_attr_query
2793 || ') mln, '
2794 || table_required;
2795 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
2796 END IF;
2797
2798 -- Select Only subinventory status if only subbinventory status is not 1
2799 IF p_status_id IS NOT NULL THEN
2800 IF p_only_subinventory_status = 1 THEN
2801 query_str := query_str || ' AND (subinventory_status_id = :st_id or locator_status_id = :st_id ';
2802 query_str := query_str || ' OR lot_status_id = :st_id or serial_status_id = :st_id) ';
2803 ELSE
2804 query_str := query_str || ' AND subinventory_status_id = :st_id ';
2805 END IF;
2806 END IF;
2807
2808 -- NSRIVAST, INVCONV, Start
2809 IF p_grade_from IS NOT NULL THEN
2810 query_str := query_str || ' AND grade_code = :grade_f ' ;
2811 END IF ;
2812 IF p_grade_code IS NOT NULL THEN
2813 query_str := query_str || ' AND grade_code = :grade_c ' ;
2814 END IF ;
2815 -- NSRIVAST, INVCONV, End
2816
2817 IF p_project_id IS NOT NULL THEN
2818 query_str := query_str || ' AND project_id = :pr_id ';
2819 END IF;
2820
2821 IF p_task_id IS NOT NULL THEN
2822 query_str := query_str || ' AND task_id = :ta_id ';
2823 END IF;
2824
2825 /*IF p_site_id IS NOT NULL THEN
2826 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
2827 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
2828 ELSIF p_vendor_id is NOT NULL THEN
2829 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
2830 query_str := query_str || ' AND planning_organization_id in ';
2831 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
2832 query_str := query_str || ' where vendor_id = :vendor_id )';
2833 END IF;*/
2834 IF (p_owning_qry_mode = 4) THEN
2835 query_str := query_str || ' AND owning_organization_id = :own_org ';
2836 query_str := query_str || ' AND owning_tp_type = 2 ';
2837 ELSIF(p_owning_qry_mode = 3) THEN
2838 query_str := query_str || ' AND owning_organization_id = :own_org ';
2839 query_str := query_str || ' AND owning_tp_type = 1 ';
2840 ELSIF(p_owning_qry_mode = 2) THEN
2841 query_str := query_str || ' AND owning_tp_type = 1 ';
2842 END IF;
2843
2844 IF (p_planning_query_mode = 4) THEN
2845 query_str := query_str || ' AND planning_organization_id = :plan_org ';
2846 query_str := query_str || ' AND planning_tp_type = 2 ';
2847 ELSIF(p_planning_query_mode = 3) THEN
2848 query_str := query_str || ' AND planning_organization_id = :plan_org ';
2849 query_str := query_str || ' AND planning_tp_type = 1 ';
2850 ELSIF(p_planning_query_mode = 2) THEN
2851 query_str := query_str || ' AND planning_tp_type = 1 ';
2852 END IF;
2853
2854 IF p_lot_number_from IS NOT NULL THEN
2855 query_str := query_str || 'AND lot_number >= :lot_f ';
2856 END IF;
2857
2858 IF p_lot_number_to IS NOT NULL THEN
2859 query_str := query_str || 'AND lot_number <= :lot_t ';
2860 END IF;
2861
2862 IF p_cost_group_id IS NOT NULL THEN
2863 query_str := query_str || 'AND cost_group_id = :cg_id ';
2864 END IF;
2865
2866 IF p_revision IS NOT NULL THEN
2867 query_str := query_str || 'AND revision = :rev ';
2868 END IF;
2869
2870 IF p_inventory_item_id IS NOT NULL THEN
2871 query_str := query_str || 'AND inventory_item_id = :item_id ';
2872 END IF;
2873
2874 IF p_locator_id IS NOT NULL THEN
2875 query_str := query_str || 'AND locator_id = :loc_id ';
2876 END IF;
2877
2878 --ER(3338592) Changes
2879 IF p_item_description IS NOT NULL THEN
2880 query_str := query_str || ' AND item_description LIKE :item_description ';
2881 END IF;
2882 --End of ER Changes
2883
2884 query_str := query_str || 'AND subinventory_code = msi.secondary_inventory_name ';
2885
2886 IF p_organization_id IS NOT NULL THEN
2887 query_str := query_str || 'AND organization_id = :org_id ';
2888 END IF;
2889
2890 query_str := query_str || ') ';
2891
2892 IF p_subinventory_code IS NOT NULL THEN
2893 query_str := query_str || 'and msi.secondary_inventory_name = :sub ';
2894 END IF;
2895
2896 IF p_organization_id IS NOT NULL THEN
2897 query_str := query_str || ' and msi.organization_id = :org_id ';
2898 END IF;
2899
2900 IF p_sub_type = 2 THEN
2901 query_str := query_str || ' AND msi.subinventory_type = 2 ';
2902 END IF;
2903
2904 query_str := query_str || ' ORDER BY subinventory_code ';
2905 -- Need to use MTL_ONHAND_SERIAL_V
2906 ELSIF(
2907 (
2908 p_serial_number_from IS NOT NULL
2909 OR p_serial_number_to IS NOT NULL
2910 OR p_serial_attr_query IS NOT NULL
2911 OR p_unit_number IS NOT NULL
2912 )
2913 AND p_lpn_from IS NULL
2914 AND p_lpn_to IS NULL
2915 ) THEN
2916 IF p_sub_type = 2 THEN
2917 table_required := ' mtl_rcv_serial_oh_v ';
2918 ELSIF(p_status_id IS NULL) THEN
2919 table_required := ' mtl_onhand_serial_mwb_v ';
2920 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
2921 table_required := ' mtl_onhand_serial_v '; -- NSRIVAST, INVCONV
2922 END IF;
2923 ELSE
2924 table_required := ' mtl_onhand_serial_v ';
2925 END IF;
2926
2927 IF p_lot_attr_query IS NULL
2928 AND p_serial_attr_query IS NULL THEN
2929 query_str := query_str || 'SELECT subinventory_code from ' || table_required;
2930 query_str := query_str || 'WHERE 1=1 ';
2931 ELSIF p_lot_attr_query IS NULL
2932 AND p_serial_attr_query IS NOT NULL THEN
2933 query_str :=
2934 query_str
2935 || 'SELECT subinventory_code from'
2936 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
2937 || p_serial_attr_query
2938 || ') msn, '
2939 || table_required;
2940 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
2941 ELSIF p_lot_attr_query IS NOT NULL
2942 AND p_serial_attr_query IS NULL THEN
2943 query_str :=
2944 query_str
2945 || 'SELECT subinventory_code from'
2946 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
2947 || p_lot_attr_query
2948 || ') mln, '
2949 || table_required;
2950 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
2951 ELSIF p_lot_attr_query IS NOT NULL
2952 AND p_serial_attr_query IS NOT NULL THEN
2953 query_str :=
2954 query_str
2955 || 'SELECT subinventory_code from'
2956 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
2957 || p_lot_attr_query
2958 || ') mln, '
2959 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
2960 || p_serial_attr_query
2961 || ') msn, '
2962 || table_required;
2963 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
2964 query_str := query_str || 'AND msn.serial_num = serial_number ';
2965 END IF;
2966
2967 IF p_project_id IS NOT NULL THEN
2968 query_str := query_str || ' AND project_id = :pr_id ';
2969 END IF;
2970
2971 IF p_task_id IS NOT NULL THEN
2972 query_str := query_str || ' AND task_id = :ta_id ';
2973 END IF;
2974
2975 IF p_unit_number IS NOT NULL THEN
2976 query_str := query_str || ' AND unit_number=:un_id ';
2977 END IF;
2978
2979 /*IF p_site_id IS NOT NULL THEN
2980 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
2981 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
2982 ELSIF p_vendor_id is NOT NULL THEN
2983 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
2984 query_str := query_str || ' AND planning_organization_id in ';
2985 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
2986 query_str := query_str || ' where vendor_id = :vendor_id )';
2987 END IF;*/
2988 IF (p_owning_qry_mode = 4) THEN
2989 query_str := query_str || ' AND owning_organization_id = :own_org ';
2990 query_str := query_str || ' AND owning_tp_type = 2 ';
2991 ELSIF(p_owning_qry_mode = 3) THEN
2992 query_str := query_str || ' AND owning_organization_id = :own_org ';
2993 query_str := query_str || ' AND owning_tp_type = 1 ';
2994 ELSIF(p_owning_qry_mode = 2) THEN
2995 query_str := query_str || ' AND owning_tp_type = 1 ';
2996 END IF;
2997
2998 IF (p_planning_query_mode = 4) THEN
2999 query_str := query_str || ' AND planning_organization_id = :plan_org ';
3000 query_str := query_str || ' AND planning_tp_type = 2 ';
3001 ELSIF(p_planning_query_mode = 3) THEN
3002 query_str := query_str || ' AND planning_organization_id = :plan_org ';
3003 query_str := query_str || ' AND planning_tp_type = 1 ';
3004 ELSIF(p_planning_query_mode = 2) THEN
3005 query_str := query_str || ' AND planning_tp_type = 1 ';
3006 END IF;
3007
3008 IF p_status_id IS NOT NULL
3009 AND p_sub_type <> 2 THEN
3010 IF p_only_subinventory_status = 1 THEN
3011 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id ';
3012 query_str := query_str || 'OR lot_status_id = :st_id or serial_status_id = :st_id) ';
3013 ELSE
3014 query_str := query_str || ' and subinventory_status_id = :st_id ';
3015 END IF;
3016 END IF;
3017
3018 IF p_lot_number_from IS NOT NULL THEN
3019 query_str := query_str || 'AND lot_number >= :lot_f ';
3020 END IF;
3021
3022 IF p_lot_number_to IS NOT NULL THEN
3023 query_str := query_str || 'AND lot_number <= :lot_t ';
3024 END IF;
3025
3026 IF p_cost_group_id IS NOT NULL THEN
3027 query_str := query_str || 'AND cost_group_id = :cg_id ';
3028 END IF;
3029
3030 IF p_revision IS NOT NULL THEN
3031 query_str := query_str || 'AND revision = :rev ';
3032 END IF;
3033
3034 IF p_serial_number_from IS NOT NULL THEN
3035 query_str := query_str || 'AND serial_number >= :serial_f ';
3036 END IF;
3037
3038 IF p_serial_number_to IS NOT NULL THEN
3039 query_str := query_str || 'AND serial_number <= :serial_t ';
3040 END IF;
3041
3042 IF p_inventory_item_id IS NOT NULL THEN
3043 query_str := query_str || 'AND inventory_item_id = :item_id ';
3044 END IF;
3045
3046 -- NSRIVAST, INVCONV, Start
3047 IF p_grade_from IS NOT NULL THEN
3048 query_str := query_str || ' AND grade_code = :grade_f ' ;
3049 END IF ;
3050 IF p_grade_code IS NOT NULL THEN
3051 query_str := query_str || ' AND grade_code = :grade_c ' ;
3052 END IF ;
3053 -- NSRIVAST, INVCONV, End
3054
3055 IF p_locator_id IS NOT NULL THEN
3056 query_str := query_str || 'AND locator_id = :loc_id ';
3057 END IF;
3058
3059 --ER(3338592) Changes
3060 IF p_item_description IS NOT NULL THEN
3061 query_str := query_str || ' AND item_description LIKE :item_description ';
3062 END IF;
3063 --End of ER Changes
3064
3065 query_str := query_str || 'AND subinventory_code = msi.secondary_inventory_name ';
3066
3067 IF p_organization_id IS NOT NULL THEN
3068 query_str := query_str || 'AND organization_id = :org_id ';
3069 END IF;
3070
3071 query_str := query_str || ') ';
3072
3073 IF p_subinventory_code IS NOT NULL THEN
3074 query_str := query_str || 'and msi.secondary_inventory_name = :sub ';
3075 END IF;
3076
3077 IF p_organization_id IS NOT NULL THEN
3078 query_str := query_str || ' and msi.organization_id = :org_id ';
3079 END IF;
3080
3081 query_str := query_str || ' ORDER BY subinventory_code ';
3082 -- Need to use both MTL_ONHAND_TOTAL_V and MTL_ONHAND_SERIAL_V
3083 ELSIF(
3084 p_serial_number_from IS NULL
3085 AND p_serial_number_to IS NULL
3086 AND p_unit_number IS NULL
3087 AND p_status_id IS NOT NULL
3088 AND p_lpn_from IS NULL
3089 AND p_lpn_to IS NULL
3090 ) THEN
3091 IF (p_status_id IS NULL) THEN
3092 table_required := ' mtl_onhand_total_mwb_v ';
3093 -- IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
3094 -- table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
3095 -- END IF;
3096 ELSE
3097 table_required := ' mtl_onhand_total_v ';
3098 END IF;
3099
3100 IF p_lot_attr_query IS NULL THEN
3101 query_str := query_str || 'SELECT subinventory_code from ' || table_required;
3102 query_str := query_str || 'WHERE 1=1 ';
3103 ELSE
3104 query_str :=
3105 query_str
3106 || 'SELECT subinventory_code from'
3107 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
3108 || p_lot_attr_query
3109 || ') mln, '
3110 || table_required;
3111 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
3112 END IF;
3113
3114 IF p_project_id IS NOT NULL THEN
3115 query_str := query_str || ' AND project_id = :pr_id ';
3116 END IF;
3117
3118 IF p_task_id IS NOT NULL THEN
3119 query_str := query_str || ' AND task_id = :ta_id ';
3120 END IF;
3121
3122 /*IF p_site_id IS NOT NULL THEN
3123 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
3124 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
3125 ELSIF p_vendor_id is NOT NULL THEN
3126 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
3127 query_str := query_str || ' AND planning_organization_id in ';
3128 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
3129 query_str := query_str || ' where vendor_id = :vendor_id )';
3130 END IF;*/
3131 IF (p_owning_qry_mode = 4) THEN
3132 query_str := query_str || ' AND owning_organization_id = :own_org ';
3133 query_str := query_str || ' AND owning_tp_type = 2 ';
3134 ELSIF(p_owning_qry_mode = 3) THEN
3135 query_str := query_str || ' AND owning_organization_id = :own_org ';
3136 query_str := query_str || ' AND owning_tp_type = 1 ';
3137 ELSIF(p_owning_qry_mode = 2) THEN
3138 query_str := query_str || ' AND owning_tp_type = 1 ';
3139 END IF;
3140
3141 IF (p_planning_query_mode = 4) THEN
3142 query_str := query_str || ' AND planning_organization_id = :plan_org ';
3143 query_str := query_str || ' AND planning_tp_type = 2 ';
3144 ELSIF(p_planning_query_mode = 3) THEN
3145 query_str := query_str || ' AND planning_organization_id = :plan_org ';
3146 query_str := query_str || ' AND planning_tp_type = 1 ';
3147 ELSIF(p_planning_query_mode = 2) THEN
3148 query_str := query_str || ' AND planning_tp_type = 1 ';
3149 END IF;
3150
3151 -- Select Only subinventory status if status is not 1
3152 IF p_status_id IS NOT NULL THEN
3153 IF p_only_subinventory_status = 1 THEN
3154 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id ';
3155 query_str := query_str || 'OR lot_status_id = :st_id or serial_status_id = :st_id) ';
3156 ELSE
3157 query_str := query_str || ' and subinventory_status_id = :st_id ';
3158 END IF;
3159 END IF;
3160
3161 IF p_lot_number_from IS NOT NULL THEN
3162 query_str := query_str || 'AND lot_number >= :lot_f ';
3163 END IF;
3164
3165 IF p_lot_number_to IS NOT NULL THEN
3166 query_str := query_str || 'AND lot_number <= :lot_t ';
3167 END IF;
3168
3169 IF p_cost_group_id IS NOT NULL THEN
3170 query_str := query_str || 'AND cost_group_id = :cg_id ';
3171 END IF;
3172
3173 IF p_revision IS NOT NULL THEN
3174 query_str := query_str || 'AND revision = :rev ';
3175 END IF;
3176
3177 IF p_inventory_item_id IS NOT NULL THEN
3178 query_str := query_str || 'AND inventory_item_id = :item_id ';
3179 END IF;
3180
3181 -- NSRIVAST, INVCONV, Start
3182 IF p_grade_from IS NOT NULL THEN
3183 query_str := query_str || ' AND grade_code = :grade_f ' ;
3184 END IF ;
3185 IF p_grade_code IS NOT NULL THEN
3186 query_str := query_str || ' AND grade_code = :grade_c ' ;
3187 END IF ;
3188 -- NSRIVAST, INVCONV, End
3189
3190 IF p_locator_id IS NOT NULL THEN
3191 query_str := query_str || 'AND locator_id = :loc_id ';
3192 END IF;
3193
3194 --ER(3338592) Changes
3195 IF p_item_description IS NOT NULL THEN
3196 query_str := query_str || ' AND item_description LIKE :item_description ';
3197 END IF;
3198 --ER(3338592) Changes
3199
3200 query_str := query_str || 'AND subinventory_code = msi.secondary_inventory_name ';
3201
3202 IF p_organization_id IS NOT NULL THEN
3203 query_str := query_str || 'AND organization_id = :org_id ';
3204 END IF;
3205
3206 query_str := query_str || 'UNION ALL ';
3207
3208 IF (p_status_id IS NULL) THEN
3209 table_required := ' mtl_onhand_serial_mwb_v ';
3210 ELSE
3211 table_required := ' mtl_onhand_serial_v ';
3212 END IF;
3213
3214 IF p_lot_attr_query IS NULL
3215 AND p_serial_attr_query IS NULL THEN
3216 query_str := query_str || 'SELECT subinventory_code from ' || table_required;
3217 query_str := query_str || 'WHERE 1=1 ';
3218 ELSIF p_lot_attr_query IS NOT NULL
3219 AND p_serial_attr_query IS NULL THEN
3220 query_str :=
3221 query_str
3222 || 'SELECT subinventory_code from'
3223 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
3224 || p_lot_attr_query
3225 || ') mln, '
3226 || table_required;
3227 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
3228 END IF;
3229
3230 -- Select Only subinventory status if status is not 1
3231 IF p_status_id IS NOT NULL THEN
3232 IF p_only_subinventory_status = 1 THEN
3233 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id ';
3234 query_str := query_str || 'OR lot_status_id = :st_id or serial_status_id = :st_id) ';
3235 ELSE
3236 query_str := query_str || ' and subinventory_status_id = :st_id ';
3237 END IF;
3238 END IF;
3239
3240 IF p_lot_number_from IS NOT NULL THEN
3241 query_str := query_str || 'AND lot_number >= :lot_f ';
3242 END IF;
3243
3244 IF p_lot_number_to IS NOT NULL THEN
3245 query_str := query_str || 'AND lot_number <= :lot_t ';
3246 END IF;
3247
3248 IF p_cost_group_id IS NOT NULL THEN
3249 query_str := query_str || 'AND cost_group_id = :cg_id ';
3250 END IF;
3251
3252 IF p_revision IS NOT NULL THEN
3253 query_str := query_str || 'AND revision = :rev ';
3254 END IF;
3255
3256 IF p_serial_number_from IS NOT NULL THEN
3257 query_str := query_str || 'AND serial_number >= :serial_f ';
3258 END IF;
3259
3260 IF p_serial_number_to IS NOT NULL THEN
3261 query_str := query_str || 'AND serial_number <= :serial_t ';
3262 END IF;
3263
3264 IF p_inventory_item_id IS NOT NULL THEN
3265 query_str := query_str || 'AND inventory_item_id = :item_id ';
3266 END IF;
3267
3268 IF p_locator_id IS NOT NULL THEN
3269 query_str := query_str || 'AND locator_id = :loc_id ';
3270 END IF;
3271
3272 --ER(3338592) Changes
3273 IF p_item_description IS NOT NULL THEN
3274 query_str := query_str || ' AND item_description LIKE :item_description ';
3275 END IF;
3276 --ER(3338592) Changes
3277
3278 query_str := query_str || 'AND subinventory_code = msi.secondary_inventory_name ';
3279
3280 IF p_organization_id IS NOT NULL THEN
3281 query_str := query_str || 'AND organization_id = :org_id ';
3282 END IF;
3283
3284 query_str := query_str || ') ';
3285
3286 IF p_subinventory_code IS NOT NULL THEN
3287 query_str := query_str || 'and msi.secondary_inventory_name = :sub ';
3288 END IF;
3289
3290 IF p_organization_id IS NOT NULL THEN
3291 query_str := query_str || ' and msi.organization_id = :org_id ';
3292 END IF;
3293
3294 query_str := query_str || ' ORDER BY subinventory_code ';
3295 -- Need to use MTL_ONHAND_LPN_V
3296 ELSIF(p_lpn_from IS NOT NULL
3297 OR p_lpn_to IS NOT NULL) THEN
3298 IF p_sub_type = 2 THEN
3299 table_required := ' mtl_onhand_lpn_mwb_v mol ';
3300 ELSIF(p_status_id IS NULL) THEN
3301 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
3302 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
3303 table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
3304 END IF; -- NSRIVAST, INVCONV
3305 ELSE
3306 table_required := ' mtl_onhand_new_lpn_v mol ';
3307 END IF;
3308
3309 query_str := query_str || 'SELECT subinventory_code from ' || table_required;
3310
3311 IF p_lpn_from IS NOT NULL
3312 OR p_lpn_to IS NOT NULL THEN
3313 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
3314 query_str := query_str || ' WHERE 1=1 ';
3315
3316 IF p_locator_id IS NOT NULL THEN
3317 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
3318 END IF;
3319
3320 -- NSRIVAST, INVCONV, Start
3321 IF p_grade_from IS NOT NULL THEN
3322 query_str := query_str || ' AND grade_code = :grade_f ' ;
3323 END IF ;
3324 IF p_grade_code IS NOT NULL THEN
3325 query_str := query_str || ' AND grade_code = :grade_c ' ;
3326 END IF ;
3327 -- NSRIVAST, INVCONV, End
3328
3329 IF p_subinventory_code IS NOT NULL THEN
3330 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
3331 END IF;
3332
3333 IF p_organization_id IS NOT NULL THEN
3334 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
3335 END IF;
3336
3337 IF p_lpn_from IS NOT NULL
3338 OR p_lpn_to IS NOT NULL THEN
3339 IF p_lpn_from IS NOT NULL
3340 AND p_lpn_to IS NULL THEN
3341 query_str := query_str || ' and license_plate_number >= :lpn_f ';
3342 ELSIF p_lpn_from IS NULL
3343 AND p_lpn_to IS NOT NULL THEN
3344 query_str := query_str || ' and license_plate_number <= :lpn_t ';
3345 ELSIF p_lpn_from IS NOT NULL
3346 AND p_lpn_to IS NOT NULL THEN
3347 --bugfix#3646484
3348 IF (p_lpn_from = p_lpn_to) THEN
3349 --User is querying for single LPN so converted the range query to equality query
3350 query_str := query_str || 'and license_plate_number = :lpn_f ';
3351 ELSE
3352 query_str := query_str || ' and license_plate_number >= :lpn_f ';
3353 query_str := query_str || ' and license_plate_number <= :lpn_t ';
3354 END IF;
3355 END IF;
3356 END IF;
3357
3358 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
3359 END IF;
3360
3361 IF p_lot_attr_query IS NULL
3362 AND p_serial_attr_query IS NULL THEN
3363 query_str := query_str || 'WHERE 1=1 ';
3364 ELSIF p_lot_attr_query IS NULL
3365 AND p_serial_attr_query IS NOT NULL THEN
3366 query_str :=
3367 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
3368 || ') msn ';
3369 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
3370 ELSIF p_lot_attr_query IS NOT NULL
3371 AND p_serial_attr_query IS NULL THEN
3372 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
3373 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
3374 ELSIF p_lot_attr_query IS NOT NULL
3375 AND p_serial_attr_query IS NOT NULL THEN
3376 query_str :=
3377 query_str
3378 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
3379 || p_lot_attr_query
3380 || ') mln '
3381 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
3382 || p_serial_attr_query
3383 || ') msn ';
3384 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
3385 query_str := query_str || 'AND msn.serial_num = serial_number ';
3386 END IF;
3387
3388 IF p_project_id IS NOT NULL THEN
3389 query_str := query_str || ' AND project_id = :pr_id ';
3390 END IF;
3391
3392 IF p_task_id IS NOT NULL THEN
3393 query_str := query_str || ' AND task_id = :ta_id ';
3394 END IF;
3395
3396 IF p_unit_number IS NOT NULL THEN
3397 query_str := query_str || ' AND unit_number=:un_id ';
3398 END IF;
3399
3400 /*IF p_site_id IS NOT NULL THEN
3401 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
3402 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
3403 ELSIF p_vendor_id is NOT NULL THEN
3404 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
3405 query_str := query_str || ' AND planning_organization_id in ';
3406 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
3407 query_str := query_str || ' where vendor_id = :vendor_id )';
3408 END IF;*/
3409 IF (p_owning_qry_mode = 4) THEN
3410 query_str := query_str || ' AND owning_organization_id = :own_org ';
3411 query_str := query_str || ' AND owning_tp_type = 2 ';
3412 ELSIF(p_owning_qry_mode = 3) THEN
3413 query_str := query_str || ' AND owning_organization_id = :own_org ';
3414 query_str := query_str || ' AND owning_tp_type = 1 ';
3415 ELSIF(p_owning_qry_mode = 2) THEN
3416 query_str := query_str || ' AND owning_tp_type = 1 ';
3417 END IF;
3418
3419 IF (p_planning_query_mode = 4) THEN
3420 query_str := query_str || ' AND planning_organization_id = :plan_org ';
3421 query_str := query_str || ' AND planning_tp_type = 2 ';
3422 ELSIF(p_planning_query_mode = 3) THEN
3423 query_str := query_str || ' AND planning_organization_id = :plan_org ';
3424 query_str := query_str || ' AND planning_tp_type = 1 ';
3425 ELSIF(p_planning_query_mode = 2) THEN
3426 query_str := query_str || ' AND planning_tp_type = 1 ';
3427 END IF;
3428
3429 IF p_status_id IS NOT NULL THEN
3430 IF p_only_subinventory_status = 1 THEN
3431 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id ';
3432 query_str := query_str || 'OR lot_status_id = :st_id or serial_status_id = :st_id) ';
3433 ELSE
3434 query_str := query_str || 'AND subinventory_status_id = :st_id ';
3435 END IF;
3436 END IF;
3437
3438 IF p_lot_number_from IS NOT NULL THEN
3439 query_str := query_str || 'AND lot_number >= :lot_f ';
3440 END IF;
3441
3442 IF p_lot_number_to IS NOT NULL THEN
3443 query_str := query_str || 'AND lot_number <= :lot_t ';
3444 END IF;
3445
3446 IF p_cost_group_id IS NOT NULL THEN
3447 query_str := query_str || 'AND cost_group_id = :cg_id ';
3448 END IF;
3449
3450 IF p_revision IS NOT NULL THEN
3451 query_str := query_str || 'AND revision = :rev ';
3452 END IF;
3453
3454 IF p_serial_number_from IS NOT NULL THEN
3455 query_str := query_str || 'AND serial_number >= :serial_f ';
3456 END IF;
3457
3458 IF p_serial_number_to IS NOT NULL THEN
3459 query_str := query_str || 'AND serial_number <= :serial_t ';
3460 END IF;
3461
3462 IF p_lpn_from IS NOT NULL
3463 OR p_lpn_to IS NOT NULL THEN
3464 query_str := query_str || 'AND MOL.outermost_lpn_id = X.outermost_lpn_id ';
3465 END IF;
3466
3467 IF p_inventory_item_id IS NOT NULL THEN
3468 query_str := query_str || 'AND inventory_item_id = :item_id ';
3469 END IF;
3470
3471 IF p_locator_id IS NOT NULL THEN
3472 query_str := query_str || 'AND locator_id = :loc_id ';
3473 END IF;
3474
3475 --ER(3338592) Changes
3476 IF p_item_description IS NOT NULL THEN
3477 query_str := query_str || ' AND item_description LIKE :item_description ';
3478 END IF;
3479 --ER(3338592) Changes
3480
3481 query_str := query_str || 'AND subinventory_code = msi.secondary_inventory_name ';
3482
3483 IF p_organization_id IS NOT NULL THEN
3484 query_str := query_str || 'AND organization_id = :org_id ';
3485 END IF;
3486
3487 query_str := query_str || ') ';
3488
3489 IF p_subinventory_code IS NOT NULL THEN
3490 query_str := query_str || 'and msi.secondary_inventory_name = :sub ';
3491 END IF;
3492
3493 IF p_organization_id IS NOT NULL THEN
3494 query_str := query_str || ' and msi.organization_id = :org_id ';
3495 END IF;
3496
3497 query_str := query_str || ' ORDER BY subinventory_code ';
3498 END IF;
3499 END IF;
3500 inv_trx_util_pub.trace( query_str, 'Add_subs Material Workbench', 9);
3501 --trace1(query_str, 'add_subs', 9);
3502 query_hdl := DBMS_SQL.open_cursor;
3503 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
3504
3505 IF p_organization_id IS NOT NULL THEN
3506 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
3507 END IF;
3508
3509 IF p_subinventory_code IS NOT NULL THEN
3510 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
3511 END IF;
3512
3513 IF p_locator_id IS NOT NULL THEN
3514 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
3515 END IF;
3516
3517 IF p_inventory_item_id IS NOT NULL THEN
3518 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
3519 END IF;
3520
3521 IF p_revision IS NOT NULL THEN
3522 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
3523 END IF;
3524
3525 IF p_cost_group_id IS NOT NULL THEN
3526 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
3527 END IF;
3528
3529 IF p_lot_number_from IS NOT NULL THEN
3530 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
3531 END IF;
3532
3533 IF p_lot_number_to IS NOT NULL THEN
3534 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
3535 END IF;
3536
3537 -- NSRIVAST, INVCONV, Start
3538 IF p_grade_from IS NOT NULL THEN
3539 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
3540 END IF;
3541 IF p_grade_code IS NOT NULL THEN
3542 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
3543 END IF;
3544 -- NSRIVAST, INVCONV, End
3545
3546 IF p_serial_number_from IS NOT NULL THEN
3547 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
3548 END IF;
3549
3550 IF p_serial_number_to IS NOT NULL THEN
3551 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
3552 END IF;
3553
3554 --bugfix#3646484
3555 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
3556 --User is querying for single LPN so converted the range query to equality query
3557 --So it is enought to bind the from lpn alone
3558 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
3559 ELSE
3560 IF p_lpn_from IS NOT NULL THEN
3561 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
3562 END IF;
3563
3564 IF p_lpn_to IS NOT NULL THEN
3565 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
3566 END IF;
3567 END IF;
3568
3569 IF p_status_id IS NOT NULL THEN
3570 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
3571 END IF;
3572
3573 IF p_mln_context_code IS NOT NULL THEN
3574 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
3575 END IF;
3576
3577 IF p_project_id IS NOT NULL THEN
3578 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
3579 END IF;
3580
3581 IF p_task_id IS NOT NULL THEN
3582 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
3583 END IF;
3584
3585 IF p_unit_number IS NOT NULL THEN
3586 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
3587 END IF;
3588
3589 /*IF p_site_id IS NOT NULL THEN
3590 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
3591 ELSIF p_vendor_id is NOT NULL THEN
3592 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
3593 END IF;*/
3594 IF (p_owning_qry_mode = 4)
3595 OR(p_owning_qry_mode = 3) THEN
3596 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
3597 END IF;
3598
3599 IF (p_planning_query_mode = 4)
3600 OR(p_planning_query_mode = 3) THEN
3601 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
3602 END IF;
3603
3604 --ER(3338592) Changes
3605 IF p_item_description IS NOT NULL THEN
3606 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
3607 END IF;
3608
3609 DBMS_SQL.define_column(query_hdl, 1, sub_code, 10);
3610 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
3611
3612 LOOP
3613 -- fetch a row
3614 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
3615 -- fetch columns from the row
3616 DBMS_SQL.column_value(query_hdl, 1, sub_code);
3617
3618 IF j >= p_node_low_value
3619 AND sub_code IS NOT NULL THEN
3620 x_node_tbl(i).state := p_node_state;
3621 x_node_tbl(i).DEPTH := 1;
3622 x_node_tbl(i).label := sub_code;
3623 x_node_tbl(i).icon := 'inv_sbin';
3624 x_node_tbl(i).VALUE := sub_code;
3625 x_node_tbl(i).TYPE := 'SUB';
3626 i := i + 1;
3627 END IF;
3628
3629 EXIT WHEN j >= p_node_high_value;
3630 j := j + 1;
3631 ELSE
3632 EXIT;
3633 END IF;
3634 END LOOP;
3635
3636 DBMS_SQL.close_cursor(query_hdl); -- close cursor
3637 x_node_value := j;
3638 x_tbl_index := i;
3639 EXCEPTION
3640 WHEN NO_DATA_FOUND THEN
3641 NULL;
3642 WHEN OTHERS THEN
3643 RAISE;
3644 END add_subs;
3645
3646 PROCEDURE add_locs(
3647 p_organization_id IN NUMBER DEFAULT NULL
3648 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
3649 , p_locator_id IN NUMBER DEFAULT NULL
3650 , p_inventory_item_id IN NUMBER DEFAULT NULL
3651 , p_revision IN VARCHAR2 DEFAULT NULL
3652 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
3653 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
3654 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
3655 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
3656 , p_lpn_from IN VARCHAR2 DEFAULT NULL
3657 , p_lpn_to IN VARCHAR2 DEFAULT NULL
3658 , p_cost_group_id IN NUMBER DEFAULT NULL
3659 , p_status_id IN NUMBER DEFAULT NULL
3660 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
3661 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
3662 , p_project_id IN NUMBER DEFAULT NULL
3663 , p_task_id IN NUMBER DEFAULT NULL
3664 , p_unit_number IN VARCHAR2 DEFAULT NULL
3665 , -- consinged changes
3666 p_owning_qry_mode IN NUMBER DEFAULT NULL
3667 , p_planning_query_mode IN NUMBER DEFAULT NULL
3668 , p_owning_org IN NUMBER DEFAULT NULL
3669 , p_planning_org IN NUMBER DEFAULT NULL
3670 , -- consigned changes
3671 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
3672 , p_only_locator_status IN NUMBER DEFAULT 1
3673 , p_node_state IN NUMBER
3674 , p_node_high_value IN NUMBER
3675 , p_node_low_value IN NUMBER
3676 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
3677 --ER(3338592) Changes
3678 , p_item_description IN VARCHAR2 DEFAULT NULL
3679 --ER(3338592) Changes
3680 , x_node_value IN OUT NOCOPY NUMBER
3681 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
3682 , x_tbl_index IN OUT NOCOPY NUMBER
3683 -- NSRIVAST, INVCONV, Start
3684 , p_grade_from IN VARCHAR2 DEFAULT NULL
3685
3686 , p_grade_code IN VARCHAR2 DEFAULT NULL
3687 , p_grade_controlled IN NUMBER DEFAULT 0
3688 -- NSRIVAST, INVCONV, End
3689 ) IS
3690 query_str VARCHAR2(10000);
3691 query_hdl NUMBER;
3692 rows_processed NUMBER;
3693 loc_id mtl_item_locations_kfv.inventory_location_id%TYPE;
3694 loc_code mtl_item_locations_kfv.concatenated_segments%TYPE;
3695 stock_loc_code mtl_parameters.stock_locator_control_code%TYPE;
3696 loc_type NUMBER;
3697 i NUMBER := x_tbl_index;
3698 j NUMBER := x_node_value;
3699 table_required VARCHAR2(300);
3700 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
3701 BEGIN
3702
3703 -- NSRIVAST, INVCONV, Start
3704 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
3705 is_grade_t := TRUE ;
3706 END IF ;
3707 -- NSRIVAST, INVCONV, End
3708
3709 /* 1625119 Should check at the Org parameters first for Locator control */
3710 IF (p_organization_id IS NOT NULL) THEN
3711 SELECT stock_locator_control_code
3712 INTO stock_loc_code
3713 FROM mtl_parameters
3714 WHERE organization_id = p_organization_id;
3715
3716 IF stock_loc_code = 1 THEN
3717 RETURN;
3718 ELSIF stock_loc_code = 4 THEN /* check in Subinventory bug 1625119 */
3719 -- Exit out of the procedure if the subinventory is not locator controlled
3720 IF p_organization_id IS NOT NULL
3721 AND p_subinventory_code IS NOT NULL THEN
3722 SELECT locator_type
3723 INTO loc_type
3724 FROM mtl_secondary_inventories
3725 WHERE secondary_inventory_name = p_subinventory_code
3726 AND organization_id = p_organization_id;
3727
3728 IF loc_type = 1 THEN
3729 RETURN;
3730 END IF;
3731 END IF;
3732 END IF;
3733 END IF;
3734
3735 -- display all the LPNs in that location with the appropriate from
3736 -- and to LPN criteria, so include the locs which have them
3737 IF p_inventory_item_id IS NULL
3738 AND p_revision IS NULL
3739 AND p_lot_number_from IS NULL
3740 AND p_lot_number_to IS NULL
3741 AND p_serial_number_from IS NULL
3742 AND p_serial_number_to IS NULL
3743 AND p_cost_group_id IS NULL
3744 AND p_status_id IS NULL
3745 AND p_lot_attr_query IS NULL
3746 AND p_serial_attr_query IS NULL
3747 AND p_unit_number IS NULL
3748 AND p_project_id IS NULL
3749 AND p_task_id IS NULL
3750 AND(p_lpn_from IS NOT NULL
3751 OR p_lpn_to IS NOT NULL)
3752 --ER(3338592) Changes
3753 AND p_item_description IS NULL THEN
3754 --ER(3338592) Changes
3755 query_str := 'SELECT wlpn.locator_id, mil.concatenated_segments ';
3756 query_str := query_str || 'FROM mtl_item_locations_kfv mil, wms_license_plate_numbers wlpn WHERE 1=1 ';
3757 query_str := query_str || 'AND mil.inventory_location_id = wlpn.locator_id ';
3758 query_str := query_str || 'AND mil.organization_id = wlpn.organization_id ';
3759
3760 IF p_sub_type = 2 THEN
3761 query_str := query_str || 'AND lpn_context = 3 ';
3762 ELSE
3763 query_str := query_str || ' AND (lpn_context = 1 or lpn_context=9 or lpn_context=11 ) ';
3764 END IF;
3765
3766 IF p_locator_id IS NOT NULL THEN
3767 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
3768 END IF;
3769
3770 -- NSRIVAST, INVCONV, Start
3771 IF p_grade_from IS NOT NULL THEN
3772 query_str := query_str || ' AND grade_code = :grade_f ' ;
3773 END IF ;
3774 IF p_grade_code IS NOT NULL THEN
3775 query_str := query_str || ' AND grade_code = :grade_c ' ;
3776 END IF ;
3777 -- NSRIVAST, INVCONV, End
3778
3779 IF p_subinventory_code IS NOT NULL THEN
3780 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
3781 END IF;
3782
3783 IF p_organization_id IS NOT NULL THEN
3784 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
3785 END IF;
3786
3787 --bugfix#3646484
3788 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
3789 --User is querying for single LPN so converted the range query to equality query
3790 query_str := query_str || 'and wlpn.license_plate_number = :lpn_f ';
3791 ELSE
3792 IF p_lpn_from IS NOT NULL THEN
3793 query_str := query_str || 'and wlpn.license_plate_number >= :lpn_f ';
3794 END IF;
3795
3796 IF p_lpn_to IS NOT NULL THEN
3797 query_str := query_str || 'and wlpn.license_plate_number <= :lpn_t ';
3798 END IF;
3799 END IF;
3800
3801 query_str := query_str || ' GROUP BY locator_id, concatenated_segments ';
3802 query_str := query_str || ' ORDER BY concatenated_segments ';
3803 ELSE
3804 IF (
3805 p_serial_number_from IS NULL
3806 AND p_serial_number_to IS NULL
3807 AND p_unit_number IS NULL
3808 AND p_status_id IS NULL
3809 AND p_lpn_from IS NULL
3810 AND p_lpn_to IS NULL
3811 AND p_serial_attr_query IS NULL
3812 ) THEN
3813 IF p_sub_type = 2 THEN
3814 table_required := ' mtl_rcv_mwb_onhand_v ';
3815 ELSIF(p_status_id IS NULL) THEN
3816 table_required := ' mtl_onhand_total_mwb_v ';
3817 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
3818 table_required := ' mtl_onhand_total_v '; -- NSRIVAST, INVCONV
3819 END IF;
3820 ELSE
3821 table_required := ' mtl_onhand_total_v ';
3822 END IF;
3823
3824 IF p_lot_attr_query IS NULL THEN
3825 query_str := query_str || 'SELECT locator_id, locator from ' || table_required;
3826 query_str := query_str || 'WHERE 1=1 ';
3827 ELSE
3828 query_str :=
3829 query_str
3830 || 'SELECT locator_id, locator from'
3831 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
3832 || p_lot_attr_query
3833 || ') mln, '
3834 || table_required;
3835 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
3836 END IF;
3837
3838 IF p_project_id IS NOT NULL THEN
3839 query_str := query_str || ' AND project_id = :pr_id ';
3840 END IF;
3841
3842 IF p_task_id IS NOT NULL THEN
3843 query_str := query_str || ' AND task_id = :ta_id ';
3844 END IF;
3845
3846 IF p_unit_number IS NOT NULL THEN
3847 query_str := query_str || ' AND unit_number=:un_id ';
3848 END IF;
3849
3850 /*IF p_site_id IS NOT NULL THEN
3851 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
3852 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
3853 ELSIF p_vendor_id is NOT NULL THEN
3854 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
3855 query_str := query_str || ' AND planning_organization_id in ';
3856 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
3857 query_str := query_str || ' where vendor_id = :vendor_id )';
3858 END IF;*/
3859 IF (p_owning_qry_mode = 4) THEN
3860 query_str := query_str || ' AND owning_organization_id = :own_org ';
3861 query_str := query_str || ' AND owning_tp_type = 2 ';
3862 ELSIF(p_owning_qry_mode = 3) THEN
3863 query_str := query_str || ' AND owning_organization_id = :own_org ';
3864 query_str := query_str || ' AND owning_tp_type = 1 ';
3865 ELSIF(p_owning_qry_mode = 2) THEN
3866 query_str := query_str || ' AND owning_tp_type = 1 ';
3867 END IF;
3868
3869 IF (p_planning_query_mode = 4) THEN
3870 query_str := query_str || ' AND planning_organization_id = :plan_org ';
3871 query_str := query_str || ' AND planning_tp_type = 2 ';
3872 ELSIF(p_planning_query_mode = 3) THEN
3873 query_str := query_str || ' AND planning_organization_id = :plan_org ';
3874 query_str := query_str || ' AND planning_tp_type = 1 ';
3875 ELSIF(p_planning_query_mode = 2) THEN
3876 query_str := query_str || ' AND planning_tp_type = 1 ';
3877 END IF;
3878
3879 IF p_status_id IS NOT NULL THEN
3880 IF p_only_locator_status = 1 THEN
3881 query_str := query_str || 'AND (subinventory_status_id = :st_id or ';
3882 query_str := query_str || 'locator_status_id = :st_id or lot_status_id = :st_id) ';
3883 ELSE
3884 query_str := query_str || 'AND locator_status_id = :st_id ';
3885 END IF;
3886 END IF;
3887
3888 IF p_lot_number_from IS NOT NULL THEN
3889 query_str := query_str || 'AND lot_number >= :lot_f ';
3890 END IF;
3891
3892 IF p_lot_number_to IS NOT NULL THEN
3893 query_str := query_str || 'AND lot_number <= :lot_t ';
3894 END IF;
3895
3896 IF p_cost_group_id IS NOT NULL THEN
3897 query_str := query_str || 'AND cost_group_id = :cg_id ';
3898 END IF;
3899
3900 IF p_revision IS NOT NULL THEN
3901 query_str := query_str || 'AND revision = :rev ';
3902 END IF;
3903
3904 IF p_inventory_item_id IS NOT NULL THEN
3905 query_str := query_str || 'AND inventory_item_id = :item_id ';
3906 END IF;
3907
3908 query_str := query_str || 'AND locator_id is not null ';
3909
3910 IF p_locator_id IS NOT NULL THEN
3911 query_str := query_str || 'AND locator_id = :loc_id ';
3912 END IF;
3913
3914 -- NSRIVAST, INVCONV, Start
3915 IF p_grade_from IS NOT NULL THEN
3916 query_str := query_str || ' AND grade_code = :grade_f ' ;
3917 END IF ;
3918 IF p_grade_code IS NOT NULL THEN
3919 query_str := query_str || ' AND grade_code = :grade_c ' ;
3920 END IF ;
3921 -- NSRIVAST, INVCONV, End
3922
3923 IF p_subinventory_code IS NOT NULL THEN
3924 query_str := query_str || 'AND subinventory_code = :sub ';
3925 END IF;
3926
3927 --ER(3338592) Changes
3928 IF p_item_description IS NOT NULL THEN
3929 query_str := query_str || ' AND item_description LIKE :item_description ';
3930 END IF;
3931 --ER(3338592) Changes
3932
3933 IF p_organization_id IS NOT NULL THEN
3934 query_str := query_str || 'AND organization_id = :org_id ';
3935 END IF;
3936
3937 query_str := query_str || 'GROUP BY locator_id, locator ';
3938 query_str := query_str || 'ORDER BY locator ';
3939 ELSIF(
3940 (
3941 p_serial_number_from IS NOT NULL
3942 OR p_serial_number_to IS NOT NULL
3943 OR p_serial_attr_query IS NOT NULL
3944 OR p_unit_number IS NOT NULL
3945 )
3946 AND p_lpn_from IS NULL
3947 AND p_lpn_to IS NULL
3948 ) THEN
3949 IF p_sub_type = 2 THEN
3950 table_required := ' mtl_rcv_serial_oh_v ';
3951 ELSIF(p_status_id IS NULL) THEN
3952 table_required := ' mtl_onhand_serial_mwb_v ';
3953 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
3954 table_required := ' mtl_onhand_serial_v '; -- NSRIVAST, INVCONV
3955 END IF; -- NSRIVAST, INVCONV
3956 ELSE
3957 table_required := ' mtl_onhand_serial_v ';
3958 END IF;
3959
3960 IF p_lot_attr_query IS NULL
3961 AND p_serial_attr_query IS NULL THEN
3962 query_str := query_str || 'SELECT locator_id, locator from ' || table_required;
3963 query_str := query_str || 'WHERE 1=1 ';
3964 ELSIF p_lot_attr_query IS NULL
3965 AND p_serial_attr_query IS NOT NULL THEN
3966 query_str :=
3967 query_str
3968 || 'SELECT locator_id, locator from'
3969 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
3970 || p_serial_attr_query
3971 || ') msn, '
3972 || table_required;
3973 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
3974 ELSIF p_lot_attr_query IS NOT NULL
3975 AND p_serial_attr_query IS NULL THEN
3976 query_str :=
3977 query_str
3978 || 'SELECT locator_id, locator from'
3979 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
3980 || p_lot_attr_query
3981 || ') mln, '
3982 || table_required;
3983 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
3984 ELSIF p_lot_attr_query IS NOT NULL
3985 AND p_serial_attr_query IS NOT NULL THEN
3986 query_str :=
3987 query_str
3988 || 'SELECT locator_id, locator from'
3989 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
3990 || p_lot_attr_query
3991 || ') mln, '
3992 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
3993 || p_serial_attr_query
3994 || ') msn, '
3995 || table_required;
3996 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
3997 query_str := query_str || 'AND msn.serial_num = serial_number ';
3998 END IF;
3999
4000 IF p_project_id IS NOT NULL THEN
4001 query_str := query_str || ' AND project_id = :pr_id ';
4002 END IF;
4003
4004 -- NSRIVAST, INVCONV, Start
4005 IF p_grade_from IS NOT NULL THEN
4006 query_str := query_str || ' AND grade_code = :grade_f ' ;
4007 END IF ;
4008 IF p_grade_code IS NOT NULL THEN
4009 query_str := query_str || ' AND grade_code = :grade_c ' ;
4010 END IF ;
4011 -- NSRIVAST, INVCONV, End
4012
4013 IF p_task_id IS NOT NULL THEN
4014 query_str := query_str || ' AND task_id = :ta_id ';
4015 END IF;
4016
4017 IF p_unit_number IS NOT NULL THEN
4018 query_str := query_str || ' AND unit_number=:un_id ';
4019 END IF;
4020
4021 IF p_status_id IS NOT NULL THEN
4022 IF p_only_locator_status = 1 THEN
4023 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
4024 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
4025 ELSE
4026 query_str := query_str || 'AND locator_status_id = :st_id ';
4027 END IF;
4028 END IF;
4029
4030 IF p_lot_number_from IS NOT NULL THEN
4031 query_str := query_str || 'AND lot_number >= :lot_f ';
4032 END IF;
4033
4034 IF p_lot_number_to IS NOT NULL THEN
4035 query_str := query_str || 'AND lot_number <= :lot_t ';
4036 END IF;
4037
4038 IF p_cost_group_id IS NOT NULL THEN
4039 query_str := query_str || 'AND cost_group_id = :cg_id ';
4040 END IF;
4041
4042 IF p_revision IS NOT NULL THEN
4043 query_str := query_str || 'AND revision = :rev ';
4044 END IF;
4045
4046 IF p_serial_number_from IS NOT NULL THEN
4047 query_str := query_str || 'AND serial_number >= :serial_f ';
4048 END IF;
4049
4050 IF p_serial_number_to IS NOT NULL THEN
4051 query_str := query_str || 'AND serial_number <= :serial_t ';
4052 END IF;
4053
4054 IF p_inventory_item_id IS NOT NULL THEN
4055 query_str := query_str || 'AND inventory_item_id = :item_id ';
4056 END IF;
4057
4058 query_str := query_str || 'AND locator_id is not null ';
4059
4060 IF p_locator_id IS NOT NULL THEN
4061 query_str := query_str || 'AND locator_id = :loc_id ';
4062 END IF;
4063
4064 IF p_subinventory_code IS NOT NULL THEN
4065 query_str := query_str || 'AND subinventory_code = :sub ';
4066 END IF;
4067
4068 --ER(3338592) Changes
4069 IF p_item_description IS NOT NULL THEN
4070 query_str := query_str || ' AND item_description LIKE :item_description ';
4071 END IF;
4072 --ER(3338592) Changes
4073
4074 IF p_organization_id IS NOT NULL THEN
4075 query_str := query_str || 'AND organization_id = :org_id ';
4076 END IF;
4077
4078 query_str := query_str || 'GROUP BY locator_id, locator ';
4079 query_str := query_str || 'ORDER BY locator ';
4080 -- Need to use both mtl_onhand_total_v and mtl_onhand_serial_v
4081 ELSIF(
4082 p_serial_number_from IS NULL
4083 AND p_serial_number_to IS NULL
4084 AND p_unit_number IS NULL
4085 AND p_status_id IS NOT NULL
4086 AND p_lpn_from IS NULL
4087 AND p_lpn_to IS NULL
4088 ) THEN
4089 IF (p_status_id IS NULL) THEN
4090 table_required := ' mtl_onhand_total_mwb_v ';
4091 -- ELSIF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
4092 -- table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
4093 ELSE
4094 table_required := ' mtl_onhand_total_v ';
4095 END IF;
4096
4097 query_str := 'SELECT locator_id, locator from (';
4098
4099 IF p_lot_attr_query IS NULL THEN
4100 query_str := query_str || 'SELECT locator_id, locator from ' || table_required;
4101 query_str := query_str || 'WHERE 1=1 ';
4102 ELSE
4103 query_str :=
4104 query_str
4105 || 'SELECT locator_id, locator from'
4106 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
4107 || p_lot_attr_query
4108 || ') mln, '
4109 || table_required;
4110 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
4111 END IF;
4112
4113 IF p_project_id IS NOT NULL THEN
4114 query_str := query_str || ' AND project_id = :pr_id ';
4115 END IF;
4116
4117 IF p_task_id IS NOT NULL THEN
4118 query_str := query_str || ' AND task_id = :ta_id ';
4119 END IF;
4120
4121 /*IF p_site_id IS NOT NULL THEN
4122 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
4123 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
4124 ELSIF p_vendor_id is NOT NULL THEN
4125 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
4126 query_str := query_str || ' AND planning_organization_id in ';
4127 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
4128 query_str := query_str || ' where vendor_id = :vendor_id )';
4129 END IF;*/
4130 IF (p_owning_qry_mode = 4) THEN
4131 query_str := query_str || ' AND owning_organization_id = :own_org ';
4132 query_str := query_str || ' AND owning_tp_type = 2 ';
4133 ELSIF(p_owning_qry_mode = 3) THEN
4134 query_str := query_str || ' AND owning_organization_id = :own_org ';
4135 query_str := query_str || ' AND owning_tp_type = 1 ';
4136 ELSIF(p_owning_qry_mode = 2) THEN
4137 query_str := query_str || ' AND owning_tp_type = 1 ';
4138 END IF;
4139
4140 IF (p_planning_query_mode = 4) THEN
4141 query_str := query_str || ' AND planning_organization_id = :plan_org ';
4142 query_str := query_str || ' AND planning_tp_type = 2 ';
4143 ELSIF(p_planning_query_mode = 3) THEN
4144 query_str := query_str || ' AND planning_organization_id = :plan_org ';
4145 query_str := query_str || ' AND planning_tp_type = 1 ';
4146 ELSIF(p_planning_query_mode = 2) THEN
4147 query_str := query_str || ' AND planning_tp_type = 1 ';
4148 END IF;
4149
4150 IF p_status_id IS NOT NULL THEN
4151 IF p_only_locator_status = 1 THEN
4152 query_str := query_str || 'AND (subinventory_status_id = :st_id or ';
4153 query_str := query_str || 'locator_status_id = :st_id or lot_status_id = :st_id) ';
4154 ELSE
4155 query_str := query_str || 'AND locator_status_id = :st_id ';
4156 END IF;
4157 END IF;
4158
4159 IF p_lot_number_from IS NOT NULL THEN
4160 query_str := query_str || 'AND lot_number >= :lot_f ';
4161 END IF;
4162
4163 IF p_lot_number_to IS NOT NULL THEN
4164 query_str := query_str || 'AND lot_number <= :lot_t ';
4165 END IF;
4166
4167 -- NSRIVAST, INVCONV, Start
4168 IF p_grade_from IS NOT NULL THEN
4169 query_str := query_str || ' AND grade_code = :grade_f ' ;
4170 END IF ;
4171 IF p_grade_code IS NOT NULL THEN
4172 query_str := query_str || ' AND grade_code = :grade_c ' ;
4173 END IF ;
4174 -- NSRIVAST, INVCONV, End
4175
4176 IF p_cost_group_id IS NOT NULL THEN
4177 query_str := query_str || 'AND cost_group_id = :cg_id ';
4178 END IF;
4179
4180 IF p_revision IS NOT NULL THEN
4181 query_str := query_str || 'AND revision = :rev ';
4182 END IF;
4183
4184 --query_str := query_str || 'AND serial_number_control_code in (1,6) ';
4185 query_str := query_str || 'AND item_serial_control in (1,6) ';
4186
4187 IF p_inventory_item_id IS NOT NULL THEN
4188 query_str := query_str || 'AND inventory_item_id = :item_id ';
4189 END IF;
4190
4191 query_str := query_str || 'AND locator_id is not null ';
4192
4193 IF p_locator_id IS NOT NULL THEN
4194 query_str := query_str || 'AND locator_id = :loc_id ';
4195 END IF;
4196
4197 --ER(3338592) Changes
4198 IF p_item_description IS NOT NULL THEN
4199 query_str := query_str || ' AND item_description LIKE :item_description ';
4200 END IF;
4201 --ER(3338592) Changes
4202
4203 IF p_subinventory_code IS NOT NULL THEN
4204 query_str := query_str || 'AND subinventory_code = :sub ';
4205 END IF;
4206
4207 IF p_organization_id IS NOT NULL THEN
4208 query_str := query_str || 'AND organization_id = :org_id ';
4209 END IF;
4210
4211 query_str := query_str || 'UNION ';
4212
4213 IF (p_status_id IS NULL) THEN
4214 table_required := ' mtl_onhand_serial_mwb_v ';
4215 ELSE
4216 table_required := ' mtl_onhand_serial_v ';
4217 END IF;
4218
4219 IF p_lot_attr_query IS NULL
4220 AND p_serial_attr_query IS NULL THEN
4221 query_str := query_str || 'SELECT locator_id, locator from ' || table_required;
4222 query_str := query_str || 'WHERE 1=1 ';
4223 ELSIF p_lot_attr_query IS NOT NULL
4224 AND p_serial_attr_query IS NULL THEN
4225 query_str :=
4226 query_str
4227 || 'SELECT locator_id, locator from'
4228 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
4229 || p_lot_attr_query
4230 || ') mln, '
4231 || table_required;
4232 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
4233 END IF;
4234
4235 IF p_status_id IS NOT NULL THEN
4236 IF p_only_locator_status = 1 THEN
4237 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
4238 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
4239 ELSE
4240 query_str := query_str || 'AND locator_status_id = :st_id ';
4241 END IF;
4242 END IF;
4243
4244 IF p_lot_number_from IS NOT NULL THEN
4245 query_str := query_str || 'AND lot_number >= :lot_f ';
4246 END IF;
4247
4248 IF p_lot_number_to IS NOT NULL THEN
4249 query_str := query_str || 'AND lot_number <= :lot_t ';
4250 END IF;
4251
4252 IF p_cost_group_id IS NOT NULL THEN
4253 query_str := query_str || 'AND cost_group_id = :cg_id ';
4254 END IF;
4255
4256 IF p_revision IS NOT NULL THEN
4257 query_str := query_str || 'AND revision = :rev ';
4258 END IF;
4259
4260 IF p_serial_number_from IS NOT NULL THEN
4261 query_str := query_str || 'AND serial_number >= :serial_f ';
4262 END IF;
4263
4264 IF p_serial_number_to IS NOT NULL THEN
4265 query_str := query_str || 'AND serial_number <= :serial_t ';
4266 END IF;
4267
4268 IF p_inventory_item_id IS NOT NULL THEN
4269 query_str := query_str || 'AND inventory_item_id = :item_id ';
4270 END IF;
4271
4272 query_str := query_str || 'AND locator_id is not null ';
4273
4274 IF p_locator_id IS NOT NULL THEN
4275 query_str := query_str || 'AND locator_id = :loc_id ';
4276 END IF;
4277
4278 --ER(3338592) Changes
4279 IF p_item_description IS NOT NULL THEN
4280 query_str := query_str || ' AND item_description LIKE :item_description ';
4281 END IF;
4282 --ER(3338592) Changes
4283
4284 IF p_subinventory_code IS NOT NULL THEN
4285 query_str := query_str || 'AND subinventory_code = :sub ';
4286 END IF;
4287
4288 IF p_organization_id IS NOT NULL THEN
4289 query_str := query_str || 'AND organization_id = :org_id ';
4290 END IF;
4291
4292 query_str := query_str || ') GROUP BY locator_id, locator ';
4293 query_str := query_str || 'ORDER BY locator ';
4294 -- Need to use mtl_onhand_lpn_v
4295 ELSIF(p_lpn_from IS NOT NULL
4296 OR p_lpn_to IS NOT NULL) THEN
4297 IF p_sub_type = 2 THEN
4298 table_required := ' mtl_onhand_lpn_mwb_v mol ';
4299 ELSIF(p_status_id IS NULL) THEN
4300 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
4301 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
4302 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
4303 END IF; -- NSRIVAST, INVCONV
4304 ELSE
4305 table_required := ' mtl_onhand_new_lpn_v mol ';
4306 END IF;
4307
4308 query_str := 'SELECT locator_id, locator from ' || table_required;
4309
4310 IF p_lpn_from IS NOT NULL
4311 OR p_lpn_to IS NOT NULL THEN
4312 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
4313 query_str := query_str || ' WHERE 1=1 ';
4314
4315 IF p_locator_id IS NOT NULL THEN
4316 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
4317 END IF;
4318
4319 -- NSRIVAST, INVCONV, Start
4320 IF p_grade_from IS NOT NULL THEN
4321 query_str := query_str || ' AND grade_code = :grade_f ' ;
4322 END IF ;
4323 IF p_grade_code IS NOT NULL THEN
4324 query_str := query_str || ' AND grade_code = :grade_c ' ;
4325 END IF ;
4326 -- NSRIVAST, INVCONV, End
4327
4328 IF p_subinventory_code IS NOT NULL THEN
4329 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
4330 END IF;
4331
4332 IF p_organization_id IS NOT NULL THEN
4333 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
4334 END IF;
4335
4336 IF p_lpn_from IS NOT NULL
4337 OR p_lpn_to IS NOT NULL THEN
4338 IF p_lpn_from IS NOT NULL
4339 AND p_lpn_to IS NULL THEN
4340 query_str := query_str || ' and license_plate_number >= :lpn_f ';
4341 ELSIF p_lpn_from IS NULL
4342 AND p_lpn_to IS NOT NULL THEN
4343 query_str := query_str || ' and license_plate_number <= :lpn_t ';
4344 ELSIF p_lpn_from IS NOT NULL
4345 AND p_lpn_to IS NOT NULL THEN
4346 --bugfix#3646484
4347 IF (p_lpn_from = p_lpn_to) THEN
4348 --User is querying for single LPN so converted the range query to equality query
4349 query_str := query_str || 'and license_plate_number = :lpn_f ';
4350 ELSE
4351 query_str := query_str || ' and license_plate_number >= :lpn_f ';
4352 query_str := query_str || ' and license_plate_number <= :lpn_t ';
4353 END IF;
4354 END IF;
4355 END IF;
4356
4357 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
4358 END IF;
4359
4360 IF p_lot_attr_query IS NULL
4361 AND p_serial_attr_query IS NULL THEN
4362 query_str := query_str || 'WHERE 1=1 ';
4363 ELSIF p_lot_attr_query IS NULL
4364 AND p_serial_attr_query IS NOT NULL THEN
4365 query_str :=
4366 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
4367 || ') msn ';
4368 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
4369 ELSIF p_lot_attr_query IS NOT NULL
4370 AND p_serial_attr_query IS NULL THEN
4371 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
4372 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
4373 ELSIF p_lot_attr_query IS NOT NULL
4374 AND p_serial_attr_query IS NOT NULL THEN
4375 query_str :=
4376 query_str
4377 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
4378 || p_lot_attr_query
4379 || ') mln '
4380 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
4381 || p_serial_attr_query
4382 || ') msn ';
4383 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
4384 query_str := query_str || 'AND msn.serial_num = serial_number ';
4385 END IF;
4386
4387 IF p_project_id IS NOT NULL THEN
4388 query_str := query_str || ' AND project_id = :pr_id ';
4389 END IF;
4390
4391 IF p_task_id IS NOT NULL THEN
4392 query_str := query_str || ' AND task_id = :ta_id ';
4393 END IF;
4394
4395 IF p_unit_number IS NOT NULL THEN
4396 query_str := query_str || ' AND unit_number=:un_id ';
4397 END IF;
4398
4399 /*IF p_site_id IS NOT NULL THEN
4400 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
4401 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
4402 ELSIF p_vendor_id is NOT NULL THEN
4403 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
4404 query_str := query_str || ' AND planning_organization_id in ';
4405 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
4406 query_str := query_str || ' where vendor_id = :vendor_id )';
4407 END IF;*/
4408 IF (p_owning_qry_mode = 4) THEN
4409 query_str := query_str || ' AND owning_organization_id = :own_org ';
4410 query_str := query_str || ' AND owning_tp_type = 2 ';
4411 ELSIF(p_owning_qry_mode = 3) THEN
4412 query_str := query_str || ' AND owning_organization_id = :own_org ';
4413 query_str := query_str || ' AND owning_tp_type = 1 ';
4414 ELSIF(p_owning_qry_mode = 2) THEN
4415 query_str := query_str || ' AND owning_tp_type = 1 ';
4416 END IF;
4417
4418 IF (p_planning_query_mode = 4) THEN
4419 query_str := query_str || ' AND planning_organization_id = :plan_org ';
4420 query_str := query_str || ' AND planning_tp_type = 2 ';
4421 ELSIF(p_planning_query_mode = 3) THEN
4422 query_str := query_str || ' AND planning_organization_id = :plan_org ';
4423 query_str := query_str || ' AND planning_tp_type = 1 ';
4424 ELSIF(p_planning_query_mode = 2) THEN
4425 query_str := query_str || ' AND planning_tp_type = 1 ';
4426 END IF;
4427
4428 IF p_status_id IS NOT NULL THEN
4429 IF p_only_locator_status = 1 THEN
4430 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
4431 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
4432 ELSE
4433 query_str := query_str || 'AND locator_status_id = :st_id ';
4434 END IF;
4435 END IF;
4436
4437 IF p_lot_number_from IS NOT NULL THEN
4438 query_str := query_str || 'AND lot_number >= :lot_f ';
4439 END IF;
4440
4441 IF p_lot_number_to IS NOT NULL THEN
4442 query_str := query_str || 'AND lot_number <= :lot_t ';
4443 END IF;
4444
4445 IF p_cost_group_id IS NOT NULL THEN
4446 query_str := query_str || 'AND cost_group_id = :cg_id ';
4447 END IF;
4448
4449 IF p_revision IS NOT NULL THEN
4450 query_str := query_str || 'AND revision = :rev ';
4451 END IF;
4452
4453 IF p_serial_number_from IS NOT NULL THEN
4454 query_str := query_str || 'AND serial_number >= :serial_f ';
4455 END IF;
4456
4457 IF p_serial_number_to IS NOT NULL THEN
4458 query_str := query_str || 'AND serial_number <= :serial_t ';
4459 END IF;
4460
4461 IF p_lpn_from IS NOT NULL
4462 OR p_lpn_to IS NOT NULL THEN
4463 query_str := query_str || 'AND mol.outermost_lpn_id = X.outermost_lpn_id ';
4464 END IF;
4465
4466 IF p_inventory_item_id IS NOT NULL THEN
4467 query_str := query_str || 'AND inventory_item_id = :item_id ';
4468 END IF;
4469
4470 query_str := query_str || 'AND locator_id is not null ';
4471
4472 IF p_locator_id IS NOT NULL THEN
4473 query_str := query_str || 'AND locator_id = :loc_id ';
4474 END IF;
4475
4476 --ER(3338592) Changes
4477 IF p_item_description IS NOT NULL THEN
4478 query_str := query_str || ' AND item_description LIKE :item_description ';
4479 END IF;
4480 --ER(3338592) Changes
4481
4482 IF p_subinventory_code IS NOT NULL THEN
4483 query_str := query_str || 'AND subinventory_code = :sub ';
4484 END IF;
4485
4486 IF p_organization_id IS NOT NULL THEN
4487 query_str := query_str || 'AND organization_id = :org_id ';
4488 END IF;
4489
4490 query_str := query_str || 'GROUP BY locator_id, locator ';
4491 query_str := query_str || 'ORDER BY locator ';
4492 END IF;
4493 END IF;
4494
4495 inv_trx_util_pub.trace(query_str, 'Add Loc :- Material Workbench', 9);
4496 --trace1(query_str, 'add_locs', 9);
4497
4498 query_hdl := DBMS_SQL.open_cursor;
4499 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
4500
4501 IF p_organization_id IS NOT NULL THEN
4502 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
4503 END IF;
4504
4505 IF p_subinventory_code IS NOT NULL THEN
4506 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
4507 END IF;
4508
4509 IF p_locator_id IS NOT NULL THEN
4510 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
4511 END IF;
4512
4513 IF p_inventory_item_id IS NOT NULL THEN
4514 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
4515 END IF;
4516
4517 IF p_revision IS NOT NULL THEN
4518 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
4519 END IF;
4520
4521 IF p_cost_group_id IS NOT NULL THEN
4522 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
4523 END IF;
4524
4525 IF p_lot_number_from IS NOT NULL THEN
4526 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
4527 END IF;
4528
4529 IF p_lot_number_to IS NOT NULL THEN
4530 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
4531 END IF;
4532
4533 -- NSRIVAST, INVCONV, Start
4534 IF p_grade_from IS NOT NULL THEN
4535 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
4536 END IF;
4537 IF p_grade_code IS NOT NULL THEN
4538 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
4539 END IF;
4540 -- NSRIVAST, INVCONV, End
4541
4542 IF p_serial_number_from IS NOT NULL THEN
4543 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
4544 END IF;
4545
4546 IF p_serial_number_to IS NOT NULL THEN
4547 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
4548 END IF;
4549
4550 --bugfix#3646484
4551 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
4552 --User is querying for single LPN so converted the range query to equality query
4553 --So it is enought to bind the from lpn alone
4554 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
4555 ELSE
4556 IF p_lpn_from IS NOT NULL THEN
4557 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
4558 END IF;
4559
4560 IF p_lpn_to IS NOT NULL THEN
4561 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
4562 END IF;
4563 END IF;
4564
4565 IF p_status_id IS NOT NULL THEN
4566 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
4567 END IF;
4568
4569 IF p_project_id IS NOT NULL THEN
4570 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
4571 END IF;
4572
4573 IF p_task_id IS NOT NULL THEN
4574 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
4575 END IF;
4576
4577 IF p_unit_number IS NOT NULL THEN
4578 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
4579 END IF;
4580
4581 /*IF p_site_id IS NOT NULL THEN
4582 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
4583 ELSIF p_vendor_id is NOT NULL THEN
4584 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
4585 END IF;*/
4586 IF (p_owning_qry_mode = 4)
4587 OR(p_owning_qry_mode = 3) THEN
4588 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
4589 END IF;
4590
4591 IF (p_planning_query_mode = 4)
4592 OR(p_planning_query_mode = 3) THEN
4593 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
4594 END IF;
4595
4596 IF p_mln_context_code IS NOT NULL THEN
4597 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
4598 END IF;
4599
4600 --ER(3338592) Changes
4601 IF p_item_description IS NOT NULL THEN
4602 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
4603 END IF;
4604
4605 DBMS_SQL.define_column(query_hdl, 1, loc_id);
4606 DBMS_SQL.define_column(query_hdl, 2, loc_code, 204);
4607 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
4608
4609 LOOP
4610 -- fetch a row
4611 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
4612 -- fetch columns from the row
4613 DBMS_SQL.column_value(query_hdl, 1, loc_id);
4614 DBMS_SQL.column_value(query_hdl, 2, loc_code);
4615
4616 IF j >= p_node_low_value
4617 AND loc_code IS NOT NULL THEN
4618 x_node_tbl(i).state := p_node_state;
4619 x_node_tbl(i).DEPTH := 1;
4620 x_node_tbl(i).label := substr(inv_project.get_locator(loc_id,p_organization_id), 1, 80); -- Bug 6342333
4621 x_node_tbl(i).icon := 'inv_stlo';
4622 x_node_tbl(i).VALUE := TO_CHAR(loc_id);
4623 x_node_tbl(i).TYPE := 'LOC';
4624 i := i + 1;
4625 END IF;
4626
4627 EXIT WHEN j >= p_node_high_value;
4628 j := j + 1;
4629 ELSE
4630 EXIT;
4631 END IF;
4632 END LOOP;
4633
4634 DBMS_SQL.close_cursor(query_hdl); -- close cursor
4635 x_node_value := j;
4636 x_tbl_index := i;
4637 EXCEPTION
4638 WHEN NO_DATA_FOUND THEN
4639 NULL;
4640 WHEN OTHERS THEN
4641 RAISE;
4642 END add_locs;
4643
4644 PROCEDURE add_cgs(
4645 p_organization_id IN NUMBER DEFAULT NULL
4646 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
4647 , p_locator_id IN NUMBER DEFAULT NULL
4648 , p_inventory_item_id IN NUMBER DEFAULT NULL
4649 , p_revision IN VARCHAR2 DEFAULT NULL
4650 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
4651 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
4652 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
4653 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
4654 , p_lpn_from IN VARCHAR2 DEFAULT NULL
4655 , p_lpn_to IN VARCHAR2 DEFAULT NULL
4656 , p_cost_group_id IN NUMBER DEFAULT NULL
4657 , p_status_id IN NUMBER DEFAULT NULL
4658 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
4659 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
4660 , p_project_id IN NUMBER DEFAULT NULL
4661 , p_task_id IN NUMBER DEFAULT NULL
4662 , p_unit_number IN VARCHAR2 DEFAULT NULL
4663 , -- consinged changes
4664 p_owning_qry_mode IN NUMBER DEFAULT NULL
4665 , p_planning_query_mode IN NUMBER DEFAULT NULL
4666 , p_owning_org IN NUMBER DEFAULT NULL
4667 , p_planning_org IN NUMBER DEFAULT NULL
4668 , -- consigned changes
4669 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
4670 , p_node_state IN NUMBER
4671 , p_node_high_value IN NUMBER
4672 , p_node_low_value IN NUMBER
4673 --ER(3338592) Changes
4674 , p_item_description IN VARCHAR2 DEFAULT NULL
4675 , p_qty_from IN NUMBER DEFAULT NULL
4676 , p_qty_to IN NUMBER DEFAULT NULL
4677 --ER(3338592) Changes
4678 , p_responsibility_id IN NUMBER DEFAULT NULL -- Bug #3411938
4679 , p_resp_application_id IN NUMBER DEFAULT NULL
4680 , x_node_value IN OUT NOCOPY NUMBER
4681 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
4682 , x_tbl_index IN OUT NOCOPY NUMBER
4683 -- NSRIVAST, INVCONV, Start
4684 , p_grade_from IN VARCHAR2 DEFAULT NULL
4685
4686 , p_grade_code IN VARCHAR2 DEFAULT NULL
4687 , p_grade_controlled IN NUMBER DEFAULT 0
4688 -- NSRIVAST, INVCONV, End
4689 ) IS
4690 query_str VARCHAR2(10000);
4691 query_hdl NUMBER;
4692 rows_processed NUMBER;
4693 cg_id cst_cost_groups.cost_group_id%TYPE;
4694 cg cst_cost_groups.cost_group%TYPE;
4695 i NUMBER := x_tbl_index;
4696 j NUMBER := x_node_value;
4697 table_required VARCHAR2(300);
4698 --ER(3338592) Changes
4699 group_str VARCHAR2(10000) ;
4700 having_str VARCHAR2(10000) := ' HAVING 1=1 ';
4701 --ER(3338592) Changes
4702 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
4703 BEGIN
4704
4705 -- NSRIVAST, INVCONV, Start
4706 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
4707 is_grade_t := TRUE ;
4708 END IF ;
4709 -- NSRIVAST, INVCONV, End
4710
4711 IF (
4712 p_serial_number_from IS NULL
4713 AND p_serial_number_to IS NULL
4714 AND p_serial_attr_query IS NULL
4715 AND p_unit_number IS NULL
4716 AND p_status_id IS NULL
4717 AND p_lpn_from IS NULL
4718 AND p_lpn_to IS NULL
4719 AND p_serial_attr_query IS NULL
4720 ) THEN
4721 IF (p_status_id IS NULL) THEN
4722 table_required := ' mtl_onhand_total_mwb_v mot ';
4723 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
4724 table_required := ' mtl_onhand_total_v mot '; -- NSRIVAST, INVCONV
4725 END IF;
4726 ELSE
4727 table_required := ' mtl_onhand_total_v mot ';
4728 END IF;
4729
4730 IF p_lot_attr_query IS NULL THEN
4731 query_str := 'SELECT DISTINCT mot.cost_group_id, ccg.cost_group ';
4732 query_str := query_str || 'FROM cst_cost_groups ccg, ' || table_required;
4733 query_str := query_str || 'WHERE ccg.cost_group_id = mot.cost_group_id ';
4734 ELSE
4735 query_str :=
4736 query_str
4737 || 'SELECT mot.cost_group_id, ccg.cost_group from'
4738 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
4739 || p_lot_attr_query
4740 || ') mln, cst_cost_groups ccg, '
4741 || table_required;
4742 query_str := query_str || 'WHERE ccg.cost_group_id = mot.cost_group_id ';
4743 query_str := query_str || 'AND mln.lot_num = mot.lot_number ';
4744 END IF;
4745
4746 query_str := query_str || 'AND ccg.cost_group_id = mot.cost_group_id ';
4747
4748 --ER(3338592) Changes (If the user gives the value for the Qty then only
4749 --Group by clause comes in to effect)
4750
4751 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
4752 group_str := ' GROUP BY mot.organization_id ';
4753 END IF;
4754
4755 IF p_subinventory_code IS NOT NULL THEN
4756 query_str := query_str || 'AND subinventory_code = :sub ';
4757 --ER(3338592) Changes
4758 IF group_str IS NOT NULL THEN
4759 group_str := group_str || ' , subinventory_code ' ;
4760 END IF;
4761 END IF;
4762
4763 -- NSRIVAST, INVCONV, Start
4764 IF p_grade_from IS NOT NULL THEN
4765 query_str := query_str || ' AND grade_code = :grade_f ' ;
4766 END IF ;
4767 IF p_grade_code IS NOT NULL THEN
4768 query_str := query_str || ' AND grade_code = :grade_c ' ;
4769 END IF ;
4770 -- NSRIVAST, INVCONV, End
4771
4772 IF p_locator_id IS NOT NULL THEN
4773 query_str := query_str || 'AND locator_id = :loc_id ';
4774 --ER(3338592) Changes
4775 IF group_str IS NOT NULL THEN
4776 group_str := group_str || ' , locator_id ' ;
4777 END IF;
4778 END IF;
4779
4780 IF p_project_id IS NOT NULL THEN
4781 query_str := query_str || ' AND project_id = :pr_id ';
4782 --ER(3338592) Changes
4783 IF group_str IS NOT NULL THEN
4784 group_str := group_str || ' , project_id ' ;
4785 END IF;
4786 END IF;
4787
4788 IF p_task_id IS NOT NULL THEN
4789 query_str := query_str || ' AND task_id = :ta_id ';
4790 --ER(3338592) Changes
4791 IF group_str IS NOT NULL THEN
4792 group_str := group_str || ' , p_task_id ' ;
4793 END IF;
4794 END IF;
4795
4796 IF p_inventory_item_id IS NOT NULL THEN
4797 query_str := query_str || 'AND inventory_item_id = :item_id ';
4798 END IF;
4799
4800 --Bug # 3411938
4801 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
4802 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
4803 END IF;
4804
4805 --ER(3338592) Changes
4806 IF p_item_description IS NOT NULL THEN
4807 query_str := query_str || ' AND item_description LIKE :item_description ';
4808 END IF;
4809
4810 IF p_revision IS NOT NULL THEN
4811 query_str := query_str || 'AND revision = :rev ';
4812 --ER(3338592) Changes
4813 IF group_str IS NOT NULL THEN
4814 group_str := group_str || ' , revision ' ;
4815 END IF;
4816 END IF;
4817
4818 IF p_cost_group_id IS NOT NULL THEN
4819 query_str := query_str || 'AND mot.cost_group_id = :cg_id ';
4820 END IF;
4821
4822 --Bug #3405473
4823 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
4824 group_str := group_str || ' , mot.cost_group_id, ccg.cost_group ' ;
4825 END IF;
4826
4827 IF p_lot_number_from IS NOT NULL THEN
4828 query_str := query_str || 'AND lot_number >= :lot_f ';
4829 END IF;
4830
4831 IF p_lot_number_to IS NOT NULL THEN
4832 query_str := query_str || 'AND lot_number <= :lot_t ';
4833 END IF;
4834
4835 IF p_status_id IS NOT NULL THEN
4836 query_str := query_str || 'AND (mot.subinventory_status_id = :st_id or ';
4837 query_str := query_str || 'mot.locator_status_id = :st_id or mot.lot_status_id = :st_id) ';
4838 END IF;
4839
4840 /*IF p_site_id IS NOT NULL THEN
4841 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
4842 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
4843 ELSIF p_vendor_id is NOT NULL THEN
4844 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
4845 query_str := query_str || ' AND planning_organization_id in ';
4846 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
4847 query_str := query_str || ' where vendor_id = :vendor_id )';
4848 END IF;*/
4849
4850 IF (p_planning_query_mode = 4) THEN
4851 query_str := query_str || ' AND planning_organization_id = :plan_org ';
4852 query_str := query_str || ' AND planning_tp_type = 2 ';
4853 ELSIF(p_planning_query_mode = 3) THEN
4854 query_str := query_str || ' AND planning_organization_id = :plan_org ';
4855 query_str := query_str || ' AND planning_tp_type = 1 ';
4856 ELSIF(p_planning_query_mode = 2) THEN
4857 query_str := query_str || ' AND planning_tp_type = 1 ';
4858 END IF;
4859
4860 IF (p_owning_qry_mode = 4) THEN
4861 query_str := query_str || ' AND owning_organization_id = :own_org ';
4862 query_str := query_str || ' AND owning_tp_type = 2 ';
4863 ELSIF(p_owning_qry_mode = 3) THEN
4864 query_str := query_str || ' AND owning_organization_id = :own_org ';
4865 query_str := query_str || ' AND owning_tp_type = 1 ';
4866 ELSIF(p_owning_qry_mode = 2) THEN
4867 query_str := query_str || ' AND owning_tp_type = 1 ';
4868 END IF;
4869
4870 --Bug #3411938
4871 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
4872 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
4873 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
4874 group_str := group_str || ' , item_lot_control, item_serial_control ';
4875 END IF;
4876
4877 IF p_organization_id IS NOT NULL THEN
4878 query_str := query_str || 'AND mot.organization_id = :org_id ';
4879 ELSE
4880 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
4881 query_str := query_str || ' FROM org_access_view oav ' ;
4882 query_str := query_str || ' WHERE oav.organization_id = mot.organization_id ' ;
4883 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
4884 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
4885 END IF;
4886
4887 IF p_qty_from IS NOT NULL THEN
4888 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
4889 END IF;
4890
4891 IF p_qty_to IS NOT NULL THEN
4892 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
4893 END IF;
4894
4895 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
4896 query_str := query_str || group_str || having_str || ' ' ;
4897 --Bug #3405473
4898 ELSE
4899 query_str := query_str || ' GROUP BY mot.cost_group_id, ccg.cost_group ' ;
4900 END IF;
4901
4902 query_str := query_str || 'ORDER BY ccg.cost_group ';
4903
4904 ELSIF(
4905 (
4906 p_serial_number_from IS NOT NULL
4907 OR p_serial_number_from IS NOT NULL
4908 OR p_unit_number IS NOT NULL
4909 OR p_serial_attr_query IS NOT NULL
4910 )
4911 AND p_lpn_from IS NULL
4912 AND p_lpn_to IS NULL
4913 ) THEN
4914 IF (p_status_id IS NULL) THEN
4915 table_required := ' mtl_onhand_serial_mwb_v mos ';
4916 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
4917 table_required := ' mtl_onhand_serial_v mos '; -- NSRIVAST, INVCONV
4918 END IF ; -- NSRIVAST, INVCONV
4919 ELSE
4920 table_required := ' mtl_onhand_serial_v mos ';
4921 END IF;
4922
4923 IF p_lot_attr_query IS NULL
4924 AND p_serial_attr_query IS NULL THEN
4925 query_str := 'SELECT DISTINCT mos.cost_group_id, ccg.cost_group ';
4926 query_str := query_str || 'FROM cst_cost_groups ccg, ' || table_required;
4927 query_str := query_str || 'WHERE ccg.cost_group_id = mos.cost_group_id ';
4928 ELSIF p_lot_attr_query IS NULL
4929 AND p_serial_attr_query IS NOT NULL THEN
4930 query_str :=
4931 query_str
4932 || 'SELECT DISTINCT mos.cost_group_id, ccg.cost_group from'
4933 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
4934 || p_serial_attr_query
4935 || ') msn, cst_cost_groups ccg, '
4936 || table_required;
4937 query_str := query_str || 'WHERE ccg.cost_group_id = mos.cost_group_id ';
4938 query_str := query_str || 'AND msn.serial_num = serial_number ';
4939 ELSIF p_lot_attr_query IS NOT NULL
4940 AND p_serial_attr_query IS NULL THEN
4941 query_str :=
4942 query_str
4943 || 'SELECT DISTINCT mos.cost_group_id, ccg.cost_group from'
4944 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
4945 || p_lot_attr_query
4946 || ') mln, cst_cost_groups ccg, '
4947 || table_required;
4948 query_str := query_str || 'WHERE ccg.cost_group_id = mos.cost_group_id ';
4949 query_str := query_str || 'AND mln.lot_num = lot_number ';
4950 ELSIF p_lot_attr_query IS NOT NULL
4951 AND p_serial_attr_query IS NOT NULL THEN
4952 query_str :=
4953 query_str
4954 || 'SELECT DISTINCT mos.cost_group_id, ccg.cost_group from'
4955 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
4956 || p_lot_attr_query
4957 || ') mln, '
4958 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
4959 || p_serial_attr_query
4960 || ') msn, cst_cost_groups ccg, '
4961 || table_required;
4962 query_str := query_str || 'WHERE ccg.cost_group_id = mos.cost_group_id ';
4963 query_str := query_str || 'AND mln.lot_num = lot_number ';
4964 query_str := query_str || 'AND msn.serial_num = serial_number ';
4965 END IF;
4966
4967 --ER(3338592) Changes (If the user gives the value for the Qty then only
4968 --Group by clause comes in to effect)
4969
4970 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
4971 group_str := ' GROUP BY mos.organization_id ';
4972 END IF;
4973
4974 IF p_subinventory_code IS NOT NULL THEN
4975 query_str := query_str || 'AND subinventory_code = :sub ';
4976 --ER(3338592) Changes
4977 IF group_str IS NOT NULL THEN
4978 group_str := group_str || ' , subinventory_code ' ;
4979 END IF;
4980 END IF;
4981
4982 -- NSRIVAST, INVCONV, Start
4983 IF p_grade_from IS NOT NULL THEN
4984 query_str := query_str || ' AND grade_code = :grade_f ' ;
4985 END IF ;
4986 IF p_grade_code IS NOT NULL THEN
4987 query_str := query_str || ' AND grade_code = :grade_c ' ;
4988 END IF ;
4989 -- NSRIVAST, INVCONV, End
4990
4991 IF p_locator_id IS NOT NULL THEN
4992 query_str := query_str || 'AND locator_id = :loc_id ';
4993 --ER(3338592) Changes
4994 IF group_str IS NOT NULL THEN
4995 group_str := group_str || ' , locator_id ' ;
4996 END IF;
4997 END IF;
4998
4999 IF p_project_id IS NOT NULL THEN
5000 query_str := query_str || ' AND project_id = :pr_id ';
5001 --ER(3338592) Changes
5002 IF group_str IS NOT NULL THEN
5003 group_str := group_str || ' , project_id ' ;
5004 END IF;
5005 END IF;
5006
5007 IF p_task_id IS NOT NULL THEN
5008 query_str := query_str || ' AND task_id = :ta_id ';
5009 --ER(3338592) Changes
5010 IF group_str IS NOT NULL THEN
5011 group_str := group_str || ' , p_task_id ' ;
5012 END IF;
5013 END IF;
5014
5015 IF p_inventory_item_id IS NOT NULL THEN
5016 query_str := query_str || 'AND inventory_item_id = :item_id ';
5017 END IF;
5018
5019 --Bug # 3411938
5020 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5021 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
5022 END IF;
5023
5024 --ER(3338592) Changes
5025 IF p_item_description IS NOT NULL THEN
5026 query_str := query_str || ' AND item_description LIKE :item_description ';
5027 END IF;
5028
5029 IF p_revision IS NOT NULL THEN
5030 query_str := query_str || 'AND revision = :rev ';
5031 --ER(3338592) Changes
5032 IF group_str IS NOT NULL THEN
5033 group_str := group_str || ' , revision ' ;
5034 END IF;
5035 END IF;
5036
5037 IF p_cost_group_id IS NOT NULL THEN
5038 query_str := query_str || 'AND mos.cost_group_id = :cg_id ';
5039 END IF;
5040
5041 --Bug #3405473
5042 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5043 group_str := group_str || ' , mos.cost_group_id, ccg.cost_group ' ;
5044 END IF;
5045
5046 IF p_lot_number_from IS NOT NULL THEN
5047 query_str := query_str || 'AND lot_number >= :lot_f ';
5048 END IF;
5049
5050 IF p_lot_number_to IS NOT NULL THEN
5051 query_str := query_str || 'AND lot_number <= :lot_t ';
5052 END IF;
5053
5054 IF p_serial_number_from IS NOT NULL THEN
5055 query_str := query_str || 'AND serial_number >= :serial_f ';
5056 END IF;
5057
5058 IF p_serial_number_to IS NOT NULL THEN
5059 query_str := query_str || 'AND serial_number <= :serial_t ';
5060 END IF;
5061
5062 IF p_unit_number IS NOT NULL THEN
5063 query_str := query_str || ' AND unit_number=:un_id ';
5064 END IF;
5065
5066 IF p_status_id IS NOT NULL THEN
5067 query_str := query_str || 'AND (mos.subinventory_status_id = :st_id or mos.locator_status_id = :st_id or ';
5068 query_str := query_str || 'mos.lot_status_id = :st_id or mos.serial_status_id = :st_id) ';
5069 END IF;
5070
5071 /*IF p_site_id IS NOT NULL THEN
5072 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
5073 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
5074 ELSIF p_vendor_id is NOT NULL THEN
5075 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
5076 query_str := query_str || ' AND planning_organization_id in ';
5077 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
5078 query_str := query_str || ' where vendor_id = :vendor_id )';
5079 END IF;*/
5080
5081 IF (p_planning_query_mode = 4) THEN
5082 query_str := query_str || ' AND planning_organization_id = :plan_org ';
5083 query_str := query_str || ' AND planning_tp_type = 2 ';
5084 ELSIF(p_planning_query_mode = 3) THEN
5085 query_str := query_str || ' AND planning_organization_id = :plan_org ';
5086 query_str := query_str || ' AND planning_tp_type = 1 ';
5087 ELSIF(p_planning_query_mode = 2) THEN
5088 query_str := query_str || ' AND planning_tp_type = 1 ';
5089 END IF;
5090
5091 IF (p_owning_qry_mode = 4) THEN
5092 query_str := query_str || ' AND owning_organization_id = :own_org ';
5093 query_str := query_str || ' AND owning_tp_type = 2 ';
5094 ELSIF(p_owning_qry_mode = 3) THEN
5095 query_str := query_str || ' AND owning_organization_id = :own_org ';
5096 query_str := query_str || ' AND owning_tp_type = 1 ';
5097 ELSIF(p_owning_qry_mode = 2) THEN
5098 query_str := query_str || ' AND owning_tp_type = 1 ';
5099 END IF;
5100
5101 --Bug #3411938
5102 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5103 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
5104 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
5105 group_str := group_str || ' , item_lot_control, item_serial_control ';
5106 END IF;
5107
5108 IF p_organization_id IS NOT NULL THEN
5109 query_str := query_str || 'AND mos.organization_id = :org_id ';
5110 ELSE
5111 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
5112 query_str := query_str || ' FROM org_access_view oav ' ;
5113 query_str := query_str || ' WHERE oav.organization_id = mos.organization_id ' ;
5114 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
5115 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
5116 END IF;
5117
5118 IF p_qty_from IS NOT NULL THEN
5119 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
5120 END IF;
5121
5122 IF p_qty_to IS NOT NULL THEN
5123 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
5124 END IF;
5125
5126 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5127 query_str := query_str || group_str || having_str || ' ' ;
5128 --Bug #3405473
5129 ELSE
5130 query_str := query_str || ' GROUP BY mos.cost_group_id, ccg.cost_group ' ;
5131 END IF;
5132
5133 query_str := query_str || 'ORDER BY ccg.cost_group ';
5134
5135 -- Need to use both mtl_onhand_total_v and mtl_onhand_serial_v
5136 ELSIF(
5137 p_serial_number_from IS NULL
5138 AND p_serial_number_to IS NULL
5139 AND p_unit_number IS NULL
5140 AND p_status_id IS NOT NULL
5141 AND p_lpn_from IS NULL
5142 AND p_lpn_to IS NULL
5143 ) THEN
5144 IF (p_status_id IS NULL) THEN
5145 table_required := ' mtl_onhand_total_mwb_v mot ';
5146 -- ELSIF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
5147 -- table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
5148 ELSE
5149 table_required := ' mtl_onhand_total_v mot ';
5150 END IF;
5151
5152 query_str := 'SELECT DISTINCT cost_group_id, cost_group from (';
5153
5154 IF p_lot_attr_query IS NULL THEN
5155 query_str := query_str || 'SELECT mot.cost_group_id, ccg.cost_group ';
5156 query_str := query_str || 'FROM cst_cost_groups ccg, ' || table_required;
5157 query_str := query_str || 'WHERE ccg.cost_group_id = mot.cost_group_id ';
5158 ELSE
5159 query_str :=
5160 query_str
5161 || 'SELECT mot.cost_group_id, ccg.cost_group FROM '
5162 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
5163 || p_lot_attr_query
5164 || ') mln, cst_cost_groups ccg, '
5165 || table_required;
5166 query_str := query_str || 'WHERE ccg.cost_group_id = mot.cost_group_id ';
5167 query_str := query_str || 'AND mln.lot_num = mot.lot_number ';
5168 END IF;
5169
5170
5171 --ER(3338592) Changes (If the user gives the value for the Qty then only
5172 --Group by clause comes in to effect)
5173
5174 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5175 group_str := ' GROUP BY mot.organization_id ';
5176 END IF;
5177
5178 IF p_subinventory_code IS NOT NULL THEN
5179 query_str := query_str || 'AND subinventory_code = :sub ';
5180 --ER(3338592) Changes
5181 IF group_str IS NOT NULL THEN
5182 group_str := group_str || ' , subinventory_code ' ;
5183 END IF;
5184 END IF;
5185
5186 -- NSRIVAST, INVCONV, Start
5187 IF p_grade_from IS NOT NULL THEN
5188 query_str := query_str || ' AND grade_code = :grade_f ' ;
5189 END IF ;
5190 IF p_grade_code IS NOT NULL THEN
5191 query_str := query_str || ' AND grade_code = :grade_c ' ;
5192 END IF ;
5193 -- NSRIVAST, INVCONV, End
5194
5195 IF p_locator_id IS NOT NULL THEN
5196 query_str := query_str || 'AND locator_id = :loc_id ';
5197 --ER(3338592) Changes
5198 IF group_str IS NOT NULL THEN
5199 group_str := group_str || ' , locator_id ' ;
5200 END IF;
5201 END IF;
5202
5203 IF p_project_id IS NOT NULL THEN
5204 query_str := query_str || ' AND project_id = :pr_id ';
5205 --ER(3338592) Changes
5206 IF group_str IS NOT NULL THEN
5207 group_str := group_str || ' , project_id ' ;
5208 END IF;
5209 END IF;
5210
5211 IF p_task_id IS NOT NULL THEN
5212 query_str := query_str || ' AND task_id = :ta_id ';
5213 --ER(3338592) Changes
5214 IF group_str IS NOT NULL THEN
5215 group_str := group_str || ' , p_task_id ' ;
5216 END IF;
5217 END IF;
5218
5219 IF p_inventory_item_id IS NOT NULL THEN
5220 query_str := query_str || 'AND inventory_item_id = :item_id ';
5221 END IF;
5222
5223 --Bug # 3411938
5224 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5225 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
5226 END IF;
5227
5228 --ER(3338592) Changes
5229 IF p_item_description IS NOT NULL THEN
5230 query_str := query_str || ' AND item_description LIKE :item_description ';
5231 END IF;
5232
5233 IF p_revision IS NOT NULL THEN
5234 query_str := query_str || 'AND revision = :rev ';
5235 --ER(3338592) Changes
5236 IF group_str IS NOT NULL THEN
5237 group_str := group_str || ' , revision ' ;
5238 END IF;
5239 END IF;
5240
5241 IF p_cost_group_id IS NOT NULL THEN
5242 query_str := query_str || 'AND mot.cost_group_id = :cg_id ';
5243 END IF;
5244
5245 --Bug #3405473
5246 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5247 group_str := group_str || ' , mot.cost_group_id, ccg.cost_group ' ;
5248 END IF;
5249
5250 IF p_lot_number_from IS NOT NULL THEN
5251 query_str := query_str || 'AND lot_number >= :lot_f ';
5252 END IF;
5253
5254 IF p_lot_number_to IS NOT NULL THEN
5255 query_str := query_str || 'AND lot_number <= :lot_t ';
5256 END IF;
5257
5258 IF p_unit_number IS NOT NULL THEN
5259 query_str := query_str || ' AND unit_number=:un_id ';
5260 END IF;
5261
5262 IF p_status_id IS NOT NULL THEN
5263 query_str := query_str || 'AND (mot.subinventory_status_id = :st_id or ';
5264 query_str := query_str || 'mot.locator_status_id = :st_id or mot.lot_status_id = :st_id) ';
5265 END IF;
5266
5267 /*IF p_site_id IS NOT NULL THEN
5268 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
5269 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
5270 ELSIF p_vendor_id is NOT NULL THEN
5271 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
5272 query_str := query_str || ' AND planning_organization_id in ';
5273 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
5274 query_str := query_str || ' where vendor_id = :vendor_id )';
5275 END IF;*/
5276
5277 IF (p_planning_query_mode = 4) THEN
5278 query_str := query_str || ' AND planning_organization_id = :plan_org ';
5279 query_str := query_str || ' AND planning_tp_type = 2 ';
5280 ELSIF(p_planning_query_mode = 3) THEN
5281 query_str := query_str || ' AND planning_organization_id = :plan_org ';
5282 query_str := query_str || ' AND planning_tp_type = 1 ';
5283 ELSIF(p_planning_query_mode = 2) THEN
5284 query_str := query_str || ' AND planning_tp_type = 1 ';
5285 END IF;
5286
5287 IF (p_owning_qry_mode = 4) THEN
5288 query_str := query_str || ' AND owning_organization_id = :own_org ';
5289 query_str := query_str || ' AND owning_tp_type = 2 ';
5290 ELSIF(p_owning_qry_mode = 3) THEN
5291 query_str := query_str || ' AND owning_organization_id = :own_org ';
5292 query_str := query_str || ' AND owning_tp_type = 1 ';
5293 ELSIF(p_owning_qry_mode = 2) THEN
5294 query_str := query_str || ' AND owning_tp_type = 1 ';
5295 END IF;
5296
5297 --Bug #3411938
5298 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5299 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
5300 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
5301 group_str := group_str || ' , item_lot_control, item_serial_control ';
5302 END IF;
5303
5304 --query_str := query_str || 'AND mot.serial_number_control_code in (1,6) ';
5305 query_str := query_str || 'AND mot.item_serial_control in (1,6) ';
5306
5307 IF p_qty_from IS NOT NULL THEN
5308 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
5309 END IF;
5310
5311 IF p_qty_to IS NOT NULL THEN
5312 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
5313 END IF;
5314
5315 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5316 query_str := query_str || group_str || having_str || ' ' ;
5317 --Bug #3405473
5318 ELSE
5319 query_str := query_str || ' GROUP BY mot.cost_group_id, ccg.cost_group ' ;
5320 END IF;
5321
5322 query_str := query_str || 'UNION ';
5323
5324 --Reinitializing the variable
5325 having_str := ' HAVING 1=1 ' ;
5326
5327 IF p_lot_attr_query IS NULL
5328 AND p_serial_attr_query IS NULL THEN
5329 query_str := query_str || 'SELECT mos.cost_group_id, ccg.cost_group ';
5330 query_str := query_str || 'FROM cst_cost_groups ccg, mtl_onhand_serial_v mos ';
5331 query_str := query_str || 'WHERE ccg.cost_group_id = mos.cost_group_id ';
5332 ELSIF p_lot_attr_query IS NOT NULL
5333 AND p_serial_attr_query IS NULL THEN
5334 query_str :=
5335 query_str
5336 || 'SELECT mos.cost_group_id, ccg.cost_group from'
5337 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
5338 || p_lot_attr_query
5339 || ') mln, cst_cost_groups ccg, mtl_onhand_serial_v mos ';
5340 query_str := query_str || 'WHERE ccg.cost_group_id = mos.cost_group_id ';
5341 query_str := query_str || 'AND mln.lot_num = lot_number ';
5342 END IF;
5343
5344 --ER(3338592) Changes (If the user gives the value for the Qty then only
5345 --Group by clause comes in to effect)
5346
5347 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5348 group_str := ' GROUP BY mos.organization_id ';
5349 END IF;
5350
5351 IF p_subinventory_code IS NOT NULL THEN
5352 query_str := query_str || 'AND subinventory_code = :sub ';
5353 --ER(3338592) Changes
5354 IF group_str IS NOT NULL THEN
5355 group_str := group_str || ' , subinventory_code ' ;
5356 END IF;
5357 END IF;
5358
5359 IF p_locator_id IS NOT NULL THEN
5360 query_str := query_str || 'AND locator_id = :loc_id ';
5361 --ER(3338592) Changes
5362 IF group_str IS NOT NULL THEN
5363 group_str := group_str || ' , locator_id ' ;
5364 END IF;
5365 END IF;
5366
5367 IF p_inventory_item_id IS NOT NULL THEN
5368 query_str := query_str || 'AND inventory_item_id = :item_id ';
5369 END IF;
5370
5371 --Bug # 3411938
5372 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5373 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
5374 END IF;
5375
5376 --ER(3338592) Changes
5377 IF p_item_description IS NOT NULL THEN
5378 query_str := query_str || ' AND item_description LIKE :item_description ';
5379 END IF;
5380
5381 IF p_revision IS NOT NULL THEN
5382 query_str := query_str || 'AND revision = :rev ';
5383 --ER(3338592) Changes
5384 IF group_str IS NOT NULL THEN
5385 group_str := group_str || ' , revision ' ;
5386 END IF;
5387 END IF;
5388
5389 IF p_cost_group_id IS NOT NULL THEN
5390 query_str := query_str || 'AND mos.cost_group_id = :cg_id ';
5391 END IF;
5392
5393 --Bug #3405473
5394 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5395 group_str := group_str || ' , mos.cost_group_id, ccg.cost_group ' ;
5396 END IF;
5397
5398 IF p_lot_number_from IS NOT NULL THEN
5399 query_str := query_str || 'AND lot_number >= :lot_f ';
5400 END IF;
5401
5402 IF p_lot_number_to IS NOT NULL THEN
5403 query_str := query_str || 'AND lot_number <= :lot_t ';
5404 END IF;
5405
5406 IF p_serial_number_from IS NOT NULL THEN
5407 query_str := query_str || 'AND serial_number >= :serial_f ';
5408 END IF;
5409
5410 IF p_serial_number_to IS NOT NULL THEN
5411 query_str := query_str || 'AND serial_number <= :serial_t ';
5412 END IF;
5413
5414 IF p_organization_id IS NOT NULL THEN
5415 query_str := query_str || 'AND mos.organization_id = :org_id ';
5416 ELSE
5417 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
5418 query_str := query_str || ' FROM org_access_view oav ' ;
5419 query_str := query_str || ' WHERE oav.organization_id = mos.organization_id ' ;
5420 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
5421 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
5422 END IF;
5423
5424 IF p_status_id IS NOT NULL THEN
5425 query_str := query_str || 'AND (mos.subinventory_status_id = :st_id or mos.locator_status_id = :st_id or ';
5426 query_str := query_str || 'mos.lot_status_id = :st_id or mos.serial_status_id = :st_id) ';
5427 END IF;
5428
5429 IF p_qty_from IS NOT NULL THEN
5430 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
5431 END IF;
5432
5433 IF p_qty_to IS NOT NULL THEN
5434 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
5435 END IF;
5436
5437 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5438 query_str := query_str || group_str || having_str || ' ' ;
5439 --Bug #3405473
5440 ELSE
5441 query_str := query_str || ' GROUP BY mos.cost_group_id, ccg.cost_group ' ;
5442 END IF;
5443 --End of ER(3338592) Changes
5444
5445 query_str := query_str || ') GROUP BY cost_group_id, cost_group '; -- line was commented earlier, NSRIVAST
5446 query_str := query_str || 'ORDER BY cost_group ';
5447
5448 ELSIF(p_lpn_from IS NOT NULL
5449 OR p_lpn_to IS NOT NULL) THEN
5450 IF (p_status_id IS NULL) THEN
5451 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
5452 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
5453 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
5454 END IF; -- NSRIVAST, INVCONV
5455 ELSE
5456 table_required := ' mtl_onhand_new_lpn_v mol ';
5457 END IF;
5458
5459 query_str := 'SELECT DISTINCT mol.cost_group_id, ccg.cost_group ';
5460 query_str := query_str || 'FROM cst_cost_groups ccg, ' || table_required;
5461
5462 IF (p_lpn_from IS NOT NULL
5463 OR p_lpn_to IS NOT NULL) THEN
5464 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
5465 query_str := query_str || ' WHERE 1=1 ';
5466
5467 IF p_locator_id IS NOT NULL THEN
5468 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
5469 END IF;
5470
5471 -- NSRIVAST, INVCONV, Start
5472 IF p_grade_from IS NOT NULL THEN
5473 query_str := query_str || ' AND grade_code = :grade_f ' ;
5474 END IF ;
5475 IF p_grade_code IS NOT NULL THEN
5476 query_str := query_str || ' AND grade_code = :grade_c ' ;
5477 END IF ;
5478 -- NSRIVAST, INVCONV, End
5479
5480 IF p_subinventory_code IS NOT NULL THEN
5481 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
5482 END IF;
5483
5484 IF p_organization_id IS NOT NULL THEN
5485 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
5486 END IF;
5487
5488 IF p_lpn_from IS NOT NULL
5489 OR p_lpn_to IS NOT NULL THEN
5490 IF p_lpn_from IS NOT NULL
5491 AND p_lpn_to IS NULL THEN
5492 query_str := query_str || ' and license_plate_number >= :lpn_f ';
5493 ELSIF p_lpn_from IS NULL
5494 AND p_lpn_to IS NOT NULL THEN
5495 query_str := query_str || ' and license_plate_number <= :lpn_t ';
5496 ELSIF p_lpn_from IS NOT NULL
5497 AND p_lpn_to IS NOT NULL THEN
5498 --bugfix#3646484
5499 IF (p_lpn_from = p_lpn_to) THEN
5500 --User is querying for single LPN so converted the range query to equality query
5501 query_str := query_str || 'and license_plate_number = :lpn_f ';
5502 ELSE
5503 query_str := query_str || ' and license_plate_number >= :lpn_f ';
5504 query_str := query_str || ' and license_plate_number <= :lpn_t ';
5505 END IF;
5506 END IF;
5507 END IF;
5508
5509 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
5510 END IF;
5511
5512 IF p_lot_attr_query IS NULL
5513 AND p_serial_attr_query IS NULL THEN
5514 query_str := query_str || 'WHERE 1=1 ';
5515 ELSIF p_lot_attr_query IS NULL
5516 AND p_serial_attr_query IS NOT NULL THEN
5517 query_str :=
5518 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
5519 || ') msn ';
5520 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
5521 ELSIF p_lot_attr_query IS NOT NULL
5522 AND p_serial_attr_query IS NULL THEN
5523 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
5524 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
5525 ELSIF p_lot_attr_query IS NOT NULL
5526 AND p_serial_attr_query IS NOT NULL THEN
5527 query_str :=
5528 query_str
5529 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
5530 || p_lot_attr_query
5531 || ') mln '
5532 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
5533 || p_serial_attr_query
5534 || ') msn ';
5535 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
5536 query_str := query_str || 'AND msn.serial_num = serial_number ';
5537 END IF;
5538
5539 query_str := query_str || 'AND ccg.cost_group_id = mol.cost_group_id ';
5540
5541 --ER(3338592) Changes (If the user gives the value for the Qty then only
5542 --Group by clause comes in to effect)
5543
5544 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5545 group_str := ' GROUP BY mol.organization_id ';
5546 END IF;
5547
5548 IF p_subinventory_code IS NOT NULL THEN
5549 query_str := query_str || 'AND subinventory_code = :sub ';
5550 --ER(3338592) Changes
5551 IF group_str IS NOT NULL THEN
5552 group_str := group_str || ' , subinventory_code ' ;
5553 END IF;
5554 END IF;
5555
5556 IF p_locator_id IS NOT NULL THEN
5557 query_str := query_str || 'AND locator_id = :loc_id ';
5558 --ER(3338592) Changes
5559 IF group_str IS NOT NULL THEN
5560 group_str := group_str || ' , locator_id ' ;
5561 END IF;
5562 END IF;
5563
5564 IF p_project_id IS NOT NULL THEN
5565 query_str := query_str || ' AND project_id = :pr_id ';
5566 --ER(3338592) Changes
5567 IF group_str IS NOT NULL THEN
5568 group_str := group_str || ' , project_id ' ;
5569 END IF;
5570 END IF;
5571
5572 IF p_task_id IS NOT NULL THEN
5573 query_str := query_str || ' AND task_id = :ta_id ';
5574 --ER(3338592) Changes
5575 IF group_str IS NOT NULL THEN
5576 group_str := group_str || ' , p_task_id ' ;
5577 END IF;
5578 END IF;
5579
5580 IF p_inventory_item_id IS NOT NULL THEN
5581 query_str := query_str || 'AND inventory_item_id = :item_id ';
5582 END IF;
5583
5584 --Bug # 3411938
5585 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5586 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
5587 END IF;
5588
5589 --ER(3338592) Changes
5590 IF p_item_description IS NOT NULL THEN
5591 query_str := query_str || ' AND item_description LIKE :item_description ';
5592 END IF;
5593
5594 IF p_revision IS NOT NULL THEN
5595 query_str := query_str || 'AND revision = :rev ';
5596 --ER(3338592) Changes
5597 IF group_str IS NOT NULL THEN
5598 group_str := group_str || ' , revision ' ;
5599 END IF;
5600 END IF;
5601
5602 IF p_cost_group_id IS NOT NULL THEN
5603 query_str := query_str || 'AND mol.cost_group_id = :cg_id ';
5604 END IF;
5605
5606 --Bug #3405473
5607 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5608 group_str := group_str ||' , mol.cost_group_id, ccg.cost_group ';
5609 END IF;
5610
5611 IF p_lpn_from IS NOT NULL
5612 OR p_lpn_to IS NOT NULL THEN
5613 query_str := query_str || ' AND mol.outermost_lpn_id = x.outermost_lpn_id ';
5614 END IF;
5615
5616 --ER(3338592) Changes
5617 IF p_lpn_from IS NOT NULL OR p_lpn_to IS NOT NULL THEN
5618 IF group_str IS NOT NULL THEN
5619 group_str := group_str || ' , lpn ' ;
5620 END IF;
5621 END IF;
5622
5623 IF p_lot_number_from IS NOT NULL THEN
5624 query_str := query_str || 'AND lot_number >= :lot_f ';
5625 END IF;
5626
5627 IF p_lot_number_to IS NOT NULL THEN
5628 query_str := query_str || 'AND lot_number <= :lot_t ';
5629 END IF;
5630
5631 IF p_serial_number_from IS NOT NULL THEN
5632 query_str := query_str || 'AND serial_number >= :serial_f ';
5633 END IF;
5634
5635 IF p_serial_number_to IS NOT NULL THEN
5636 query_str := query_str || 'AND serial_number <= :serial_t ';
5637 END IF;
5638
5639 IF p_unit_number IS NOT NULL THEN
5640 query_str := query_str || ' AND unit_number=:un_id ';
5641 END IF;
5642
5643 IF p_status_id IS NOT NULL THEN
5644 query_str := query_str || 'AND (mol.subinventory_status_id = :st_id or mol.locator_status_id = :st_id or ';
5645 query_str := query_str || 'mol.lot_status_id = :st_id or mol.serial_status_id = :st_id) ';
5646 END IF;
5647
5648 /*IF p_site_id IS NOT NULL THEN
5649 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
5650 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
5651 ELSIF p_vendor_id is NOT NULL THEN
5652 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
5653 query_str := query_str || ' AND planning_organization_id in ';
5654 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
5655 query_str := query_str || ' where vendor_id = :vendor_id )';
5656 END IF;*/
5657
5658 IF (p_planning_query_mode = 4) THEN
5659 query_str := query_str || ' AND planning_organization_id = :plan_org ';
5660 query_str := query_str || ' AND planning_tp_type = 2 ';
5661 ELSIF(p_planning_query_mode = 3) THEN
5662 query_str := query_str || ' AND planning_organization_id = :plan_org ';
5663 query_str := query_str || ' AND planning_tp_type = 1 ';
5664 ELSIF(p_planning_query_mode = 2) THEN
5665 query_str := query_str || ' AND planning_tp_type = 1 ';
5666 END IF;
5667
5668 IF (p_owning_qry_mode = 4) THEN
5669 query_str := query_str || ' AND owning_organization_id = :own_org ';
5670 query_str := query_str || ' AND owning_tp_type = 2 ';
5671 ELSIF(p_owning_qry_mode = 3) THEN
5672 query_str := query_str || ' AND owning_organization_id = :own_org ';
5673 query_str := query_str || ' AND owning_tp_type = 1 ';
5674 ELSIF(p_owning_qry_mode = 2) THEN
5675 query_str := query_str || ' AND owning_tp_type = 1 ';
5676 END IF;
5677
5678 --Bug #3411938
5679 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5680 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
5681 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
5682 group_str := group_str || ' , item_lot_control, item_serial_control ';
5683 END IF;
5684
5685 IF p_qty_from IS NOT NULL THEN
5686 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
5687 END IF;
5688
5689 IF p_qty_to IS NOT NULL THEN
5690 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
5691 END IF;
5692
5693 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
5694 query_str := query_str || group_str || having_str || ' ' ;
5695 --Bug #3405473
5696 ELSE
5697 query_str := query_str || ' GROUP BY mol.cost_group_id, ccg.cost_group ' ;
5698 END IF;
5699
5700 --query_str := query_str || 'GROUP BY mol.cost_group_id, ccg.cost_group ';
5701 query_str := query_str || 'ORDER BY ccg.cost_group ';
5702
5703 END IF;
5704
5705 -- Enable this during debugging
5706 inv_trx_util_pub.trace(query_str, 'Add- Cgs Material Workbench', 9);
5707 --trace1(query_str, 'add_cgs', 9);
5708
5709 query_hdl := DBMS_SQL.open_cursor;
5710 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
5711
5712 IF p_organization_id IS NOT NULL THEN
5713 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
5714 END IF;
5715
5716 IF p_subinventory_code IS NOT NULL THEN
5717 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
5718 END IF;
5719
5720 IF p_locator_id IS NOT NULL THEN
5721 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
5722 END IF;
5723
5724 IF p_inventory_item_id IS NOT NULL THEN
5725 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
5726 END IF;
5727
5728 IF p_revision IS NOT NULL THEN
5729 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
5730 END IF;
5731
5732 IF p_cost_group_id IS NOT NULL THEN
5733 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
5734 END IF;
5735
5736 IF p_lot_number_from IS NOT NULL THEN
5737 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
5738 END IF;
5739
5740 IF p_lot_number_to IS NOT NULL THEN
5741 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
5742 END IF;
5743
5744 -- NSRIVAST, INVCONV, Start
5745 IF p_grade_from IS NOT NULL THEN
5746 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
5747 END IF;
5748 IF p_grade_code IS NOT NULL THEN
5749 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
5750 END IF;
5751 -- NSRIVAST, INVCONV, End
5752
5753 IF p_serial_number_from IS NOT NULL THEN
5754 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
5755 END IF;
5756
5757 IF p_serial_number_to IS NOT NULL THEN
5758 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
5759 END IF;
5760
5761 --bugfix#3646484
5762 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
5763 --User is querying for single LPN so converted the range query to equality query
5764 --So it is enought to bind the from lpn alone
5765 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
5766 ELSE
5767 IF p_lpn_from IS NOT NULL THEN
5768 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
5769 END IF;
5770
5771 IF p_lpn_to IS NOT NULL THEN
5772 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
5773 END IF;
5774 END IF;
5775
5776 IF p_status_id IS NOT NULL THEN
5777 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
5778 END IF;
5779
5780 IF p_mln_context_code IS NOT NULL THEN
5781 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
5782 END IF;
5783
5784 IF p_project_id IS NOT NULL THEN
5785 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
5786 END IF;
5787
5788 IF p_task_id IS NOT NULL THEN
5789 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
5790 END IF;
5791
5792 IF p_unit_number IS NOT NULL THEN
5793 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
5794 END IF;
5795
5796 /*IF p_site_id IS NOT NULL THEN
5797 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
5798 ELSIF p_vendor_id is NOT NULL THEN
5799 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
5800 END IF;*/
5801 IF (p_owning_qry_mode = 4)
5802 OR(p_owning_qry_mode = 3) THEN
5803 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
5804 END IF;
5805
5806 IF (p_planning_query_mode = 4)
5807 OR(p_planning_query_mode = 3) THEN
5808 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
5809 END IF;
5810
5811 --ER(3338592) Changes
5812 IF p_item_description IS NOT NULL THEN
5813 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
5814 END IF;
5815
5816 IF p_qty_from IS NOT NULL THEN
5817 dbms_sql.bind_variable(query_hdl, 'qty_from', p_qty_from);
5818 END IF;
5819
5820 IF p_qty_to IS NOT NULL THEN
5821 dbms_sql.bind_variable(query_hdl, 'qty_to', p_qty_to);
5822 END IF;
5823 --End of ER(3338592) Changes
5824
5825 --Bug #3411938
5826 IF p_organization_id IS NULL THEN
5827 IF p_responsibility_id IS NOT NULL THEN
5828 dbms_sql.bind_variable(query_hdl, 'responsibility_id', p_responsibility_id );
5829 END IF;
5830
5831 IF p_resp_application_id IS NOT NULL THEN
5832 dbms_sql.bind_variable(query_hdl, 'resp_application_id', p_resp_application_id );
5833 END IF;
5834 END IF;
5835
5836
5837 DBMS_SQL.define_column(query_hdl, 1, cg_id);
5838 DBMS_SQL.define_column(query_hdl, 2, cg, 10);
5839 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
5840
5841 LOOP
5842 -- fetch a row
5843 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
5844 -- fetch columns from the row
5845 DBMS_SQL.column_value(query_hdl, 1, cg_id);
5846 DBMS_SQL.column_value(query_hdl, 2, cg);
5847
5848 IF j >= p_node_low_value THEN
5849 x_node_tbl(i).state := p_node_state;
5850 x_node_tbl(i).DEPTH := 1;
5851 x_node_tbl(i).label := cg;
5852 x_node_tbl(i).icon := 'inv_cgrp';
5853 x_node_tbl(i).VALUE := TO_CHAR(cg_id);
5854 x_node_tbl(i).TYPE := 'COST_GROUP';
5855 i := i + 1;
5856 END IF;
5857
5858 EXIT WHEN j >= p_node_high_value;
5859 j := j + 1;
5860 ELSE
5861 EXIT;
5862 END IF;
5863 END LOOP;
5864
5865 DBMS_SQL.close_cursor(query_hdl); -- close cursor
5866 x_node_value := j;
5867 x_tbl_index := i;
5868 EXCEPTION
5869 WHEN NO_DATA_FOUND THEN
5870 NULL;
5871 WHEN OTHERS THEN
5872 RAISE;
5873 END add_cgs;
5874
5875 PROCEDURE add_lpns(
5876 p_organization_id IN NUMBER DEFAULT NULL
5877 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
5878 , p_locator_id IN NUMBER DEFAULT NULL
5879 , p_locator_controlled IN NUMBER DEFAULT 0
5880 , p_inventory_item_id IN NUMBER DEFAULT NULL
5881 , p_revision IN VARCHAR2 DEFAULT NULL
5882 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
5883 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
5884 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
5885 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
5886 , p_lpn_from IN VARCHAR2 DEFAULT NULL
5887 , p_lpn_to IN VARCHAR2 DEFAULT NULL
5888 , p_parent_lpn_id IN VARCHAR2 DEFAULT NULL
5889 , p_prepacked IN NUMBER DEFAULT NULL
5890 , p_cost_group_id IN NUMBER DEFAULT NULL
5891 , p_status_id IN NUMBER DEFAULT NULL
5892 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
5893 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
5894 , p_project_id IN NUMBER DEFAULT NULL
5895 , p_task_id IN NUMBER DEFAULT NULL
5896 , p_unit_number IN VARCHAR2 DEFAULT NULL
5897 , -- consinged changes
5898 p_owning_qry_mode IN NUMBER DEFAULT NULL
5899 , p_planning_query_mode IN NUMBER DEFAULT NULL
5900 , p_owning_org IN NUMBER DEFAULT NULL
5901 , p_planning_org IN NUMBER DEFAULT NULL
5902 , -- consigned changes
5903 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
5904 , p_node_state IN NUMBER
5905 , p_node_high_value IN NUMBER
5906 , p_node_low_value IN NUMBER
5907 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
5908 , p_inserted_under_org IN VARCHAR2 DEFAULT 'N'
5909 --ER(3338592) Changes
5910 , p_item_description IN VARCHAR2 DEFAULT NULL
5911 --ER(3338592) Changes
5912 , x_node_value IN OUT NOCOPY NUMBER
5913 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
5914 , x_tbl_index IN OUT NOCOPY NUMBER
5915 -- NSRIVAST, INVCONV, Start
5916 , p_grade_from IN VARCHAR2 DEFAULT NULL
5917
5918 , p_grade_code IN VARCHAR2 DEFAULT NULL
5919 , p_grade_controlled IN NUMBER DEFAULT 0
5920 -- NSRIVAST, INVCONV, End
5921 ) IS
5922 query_str VARCHAR2(10000);
5923 query_hdl NUMBER;
5924 rows_processed NUMBER;
5925 lpn wms_license_plate_numbers.license_plate_number%TYPE;
5926 lpn_id wms_license_plate_numbers.lpn_id%TYPE;
5927 item_id wms_license_plate_numbers.inventory_item_id%TYPE;
5928 item mtl_system_items_kfv.concatenated_segments%TYPE;
5929 i NUMBER := x_tbl_index;
5930 j NUMBER := x_node_value;
5931 is_bind_required BOOLEAN := TRUE;
5932 table_required VARCHAR2(200);
5933 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
5934
5935 BEGIN
5936
5937 -- NSRIVAST, INVCONV, Start
5938 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
5939 is_grade_t := TRUE ;
5940 END IF ;
5941 -- NSRIVAST, INVCONV, End
5942
5943 -- If attributes relating to contents of an LPN are not specified then
5944 -- display all the LPNs in that location with the appropriate from
5945 -- and to LPN criteria
5946 IF p_inventory_item_id IS NULL
5947 AND p_revision IS NULL
5948 AND p_lot_number_from IS NULL
5949 AND p_lot_number_to IS NULL
5950 AND p_serial_number_from IS NULL
5951 AND p_serial_number_to IS NULL
5952 AND p_cost_group_id IS NULL
5953 AND p_status_id IS NULL
5954 AND p_lot_attr_query IS NULL
5955 AND p_serial_attr_query IS NULL
5956 AND p_unit_number IS NULL
5957 AND p_project_id IS NULL
5958 AND p_task_id IS NULL
5959 AND p_planning_org IS NULL
5960 AND p_owning_org IS NULL
5961 AND(p_planning_query_mode IS NULL
5962 OR p_planning_query_mode = 1)
5963 AND(p_owning_qry_mode IS NULL
5964 OR p_owning_qry_mode = 1)
5965 --ER(3338592) Changes
5966 AND p_item_description IS NULL THEN
5967 --ER(3338592) Changes
5968
5969 IF p_parent_lpn_id IS NULL THEN
5970 query_str := 'SELECT license_plate_number lpn, lpn_id, inventory_item_id ';
5971 query_str := query_str || ' from wms_license_plate_numbers wln where lpn_id in ';
5972 query_str := query_str || ' (select outermost_lpn_id ';
5973 query_str := query_str || ' FROM wms_license_plate_numbers mol WHERE 1=1 ';
5974
5975 IF p_sub_type = 2 THEN
5976 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
5977 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
5978 query_str := query_str || ' AND mol.subinventory_code is null AND mol.locator_id is null ';
5979 END IF;
5980 --Bug#3191526
5981 query_str := query_str || ' AND lpn_context = 3 ';
5982 ELSIF p_prepacked IS NULL THEN
5983 query_str := query_str || ' AND (mol.lpn_context=1 OR mol.lpn_context=9 OR mol.lpn_context=11 ) ';
5984 ELSIF p_prepacked = 1 THEN
5985 query_str := query_str || 'AND mol.lpn_context = 1 ';
5986 ELSIF p_prepacked <> 1
5987 AND p_prepacked <> 999 THEN
5988 query_str := query_str || 'AND mol.lpn_context = :prepacked ';
5989 END IF;
5990
5991 IF p_locator_controlled = 2 THEN
5992 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
5993 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
5994 --don't add the below locator id not null check
5995 NULL;
5996 ELSE
5997 query_str := query_str || 'AND mol.locator_id IS NOT NULL ';
5998 END IF;
5999 ELSIF p_locator_controlled = 1 THEN
6000 query_str := query_str || 'AND mol.locator_id IS NULL ';
6001 END IF;
6002
6003
6004 -- NSRIVAST, INVCONV, Start
6005 IF p_grade_from IS NOT NULL THEN
6006 query_str := query_str || ' AND grade_code = :grade_f ' ;
6007 END IF ;
6008 IF p_grade_code IS NOT NULL THEN
6009 query_str := query_str || ' AND grade_code = :grade_c ' ;
6010 END IF ;
6011 -- NSRIVAST, INVCONV, End
6012
6013 IF p_locator_id IS NOT NULL THEN
6014 query_str := query_str || 'AND mol.locator_id = :loc_id ';
6015 END IF;
6016
6017 IF p_subinventory_code IS NOT NULL THEN
6018 query_str := query_str || 'AND mol.subinventory_code = :sub ';
6019 END IF;
6020
6021 IF p_organization_id IS NOT NULL THEN
6022 query_str := query_str || 'AND mol.organization_id = :org_id ';
6023 END IF;
6024
6025 IF p_parent_lpn_id IS NOT NULL THEN
6026 --bugfix#3646484 help CBO to pick the index on parent_lpn_id
6027 query_str := query_str || 'and mol.parent_lpn_id is not null ';
6028 query_str := query_str || 'and mol.parent_lpn_id = :plpn_id ';
6029 END IF;
6030
6031 IF p_lpn_from IS NOT NULL
6032 OR p_lpn_to IS NOT NULL
6033 AND p_parent_lpn_id IS NULL THEN
6034 IF p_lpn_from IS NOT NULL
6035 AND p_lpn_to IS NULL THEN
6036 query_str := query_str || 'and mol.license_plate_number >= :lpn_f ';
6037 ELSIF p_lpn_from IS NULL
6038 AND p_lpn_to IS NOT NULL THEN
6039 query_str := query_str || 'and mol.license_plate_number <= :lpn_t ';
6040 ELSIF p_lpn_from IS NOT NULL
6041 AND p_lpn_to IS NOT NULL THEN
6042 --bugfix#3646484
6043 IF (p_lpn_from = p_lpn_to) THEN
6044 --User is querying for single LPN so converted the range query to equality query
6045 query_str := query_str || 'and mol.license_plate_number = :lpn_f ';
6046 ELSE
6047 query_str := query_str || 'and mol.license_plate_number >= :lpn_f ';
6048 query_str := query_str || 'and mol.license_plate_number <= :lpn_t ';
6049 END IF;
6050 END IF;
6051 END IF;
6052
6053 query_str := query_str || ') GROUP BY wln.license_plate_number, wln.lpn_id, wln.inventory_item_id ';
6054 query_str := query_str || 'ORDER BY wln.license_plate_number ';
6055 ELSE -- PARENT LPN ID IS NOT NULL -- ELSE FOR IF p_parent_lpn_id IS NULL THEN
6056 query_str := 'SELECT license_plate_number lpn, lpn_id, inventory_item_id ';
6057 query_str := query_str || 'from wms_license_plate_numbers mol where 1=1 ';
6058
6059 IF p_sub_type = 2 THEN
6060 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6061 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6062 query_str := query_str || ' AND mol.subinventory_code is null AND mol.locator_id is null ';
6063 END IF;
6064 --Bug#3191526
6065 query_str := query_str || ' AND lpn_context = 3 ';
6066 ELSIF p_prepacked IS NULL THEN
6067 query_str := query_str || ' AND (mol.lpn_context=1 OR mol.lpn_context=9 OR mol.lpn_context=11 ) ';
6068 ELSIF p_prepacked = 1 THEN
6069 query_str := query_str || ' AND mol.lpn_context = 1 ';
6070 ELSIF p_prepacked <> 1
6071 AND p_prepacked <> 999 THEN
6072 query_str := query_str || ' AND mol.lpn_context = :prepacked ';
6073 END IF;
6074
6075 IF p_locator_controlled = 2 THEN
6076 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6077 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6078 --don't add the below locator id not null check
6079 NULL;
6080 ELSE
6081 query_str := query_str || 'AND mol.locator_id IS NOT NULL ';
6082 END IF;
6083 ELSIF p_locator_controlled = 1 THEN
6084 query_str := query_str || 'AND mol.locator_id IS NULL ';
6085 END IF;
6086
6087 IF p_locator_id IS NOT NULL THEN
6088 query_str := query_str || 'AND mol.locator_id = :loc_id ';
6089 END IF;
6090
6091 -- NSRIVAST, INVCONV, Start
6092 IF p_grade_from IS NOT NULL THEN
6093 query_str := query_str || ' AND grade_code = :grade_f ' ;
6094 END IF ;
6095 IF p_grade_code IS NOT NULL THEN
6096 query_str := query_str || ' AND grade_code = :grade_c ' ;
6097 END IF ;
6098 -- NSRIVAST, INVCONV, End
6099
6100 IF p_subinventory_code IS NOT NULL THEN
6101 query_str := query_str || 'AND mol.subinventory_code = :sub ';
6102 END IF;
6103
6104 IF p_organization_id IS NOT NULL THEN
6105 query_str := query_str || 'AND mol.organization_id = :org_id ';
6106 END IF;
6107
6108 IF p_parent_lpn_id IS NOT NULL THEN
6109 --bugfix#3646484 help CBO to pick the index on parent_lpn_id
6110 query_str := query_str || 'and mol.parent_lpn_id is not null ';
6111 query_str := query_str || 'and mol.parent_lpn_id = :plpn_id ';
6112 END IF;
6113
6114 IF p_lpn_from IS NOT NULL
6115 OR p_lpn_to IS NOT NULL
6116 AND p_parent_lpn_id IS NULL THEN
6117 IF p_lpn_from IS NOT NULL
6118 AND p_lpn_to IS NULL THEN
6119 query_str := query_str || ' and mol.license_plate_number >= :lpn_f ';
6120 ELSIF p_lpn_from IS NULL
6121 AND p_lpn_to IS NOT NULL THEN
6122 query_str := query_str || ' and mol.license_plate_number <= :lpn_t ';
6123 ELSIF p_lpn_from IS NOT NULL
6124 AND p_lpn_to IS NOT NULL THEN
6125 --bugfix#3646484
6126 IF (p_lpn_from = p_lpn_to) THEN
6127 --User is querying for single LPN so converted the range query to equality query
6128 query_str := query_str || 'and mol.license_plate_number = :lpn_f ';
6129 ELSE
6130 query_str := query_str || ' and mol.license_plate_number >= :lpn_f ';
6131 query_str := query_str || 'and mol.license_plate_number <= :lpn_t ';
6132 END IF;
6133 END IF;
6134 END IF;
6135
6136 query_str := query_str || ' GROUP BY mol.license_plate_number, mol.lpn_id, mol.inventory_item_id ';
6137 query_str := query_str || ' ORDER BY mol.license_plate_number ';
6138 END IF; -- FOR IF p_parent_lpn_id IS NULL THEN
6139 ELSE -- some of the query criteria like item etc are not null. Else For IF p_inventory_item_id IS NULL AND p_revision IS NULL AND ETC.
6140 IF p_parent_lpn_id IS NULL THEN
6141 IF p_sub_type = 2 THEN
6142 table_required := ' mtl_onhand_lpn_mwb_v mol ';
6143 ELSIF(p_status_id IS NULL) THEN
6144 IF (p_prepacked <> 1) AND
6145 (p_prepacked <> 9) AND
6146 (p_prepacked <> 11) THEN
6147 table_required := ' mtl_onhand_lpn_mwb_v mol ';
6148 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
6149 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
6150 END IF; -- NSRIVAST, INVCONV
6151 ELSE
6152 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
6153 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
6154 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
6155 END IF; -- NSRIVAST, INVCONV
6156 END IF;
6157 ELSE
6158 IF (p_prepacked <> 1) AND
6159 (p_prepacked <> 9) AND
6160 (p_prepacked <> 11) THEN
6161 table_required := ' mtl_onhand_lpn_v mol ';
6162 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
6163 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
6164 END IF; -- NSRIVAST, INVCONV
6165 ELSE
6166 table_required := ' mtl_onhand_new_lpn_v mol ';
6167 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
6168 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
6169 END IF; -- NSRIVAST, INVCONV
6170 END IF;
6171 END IF;
6172
6173 query_str := 'SELECT license_plate_number lpn, lpn_id, inventory_item_id ';
6174 query_str := query_str || ' from wms_license_plate_numbers where lpn_id in ';
6175 query_str := query_str || ' (select MOL.outermost_lpn_id ';
6176 query_str := query_str || ' FROM ' || table_required;
6177
6178 IF p_lpn_from IS NOT NULL
6179 OR p_lpn_to IS NOT NULL THEN
6180 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
6181 query_str := query_str || ' WHERE 1=1 ';
6182
6183 IF p_sub_type = 2 THEN
6184 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6185 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6186 query_str := query_str || ' AND wlpn.subinventory_code is null AND wlpn.locator_id is null ';
6187 END IF;
6188 --Bug#3191526
6189 query_str := query_str || ' AND lpn_context = 3 ';
6190 ELSIF p_prepacked IS NULL THEN
6191 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 )';
6192 ELSIF p_prepacked = 1 THEN
6193 query_str := query_str || 'AND lpn_context = 1 ';
6194 ELSIF p_prepacked <> 1
6195 AND p_prepacked <> 999 THEN
6196 query_str := query_str || 'AND lpn_context = :prepacked ';
6197 END IF;
6198
6199 IF p_locator_controlled = 2 THEN
6200 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6201 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6202 --don't add the below locator id not null check
6203 NULL;
6204 ELSE
6205 query_str := query_str || 'AND wlpn.locator_id IS NOT NULL ';
6206 END IF;
6207 ELSIF p_locator_controlled = 1 THEN
6208 query_str := query_str || 'AND wlpn.locator_id IS NULL ';
6209 END IF;
6210
6211 IF p_locator_id IS NOT NULL THEN
6212 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
6213 END IF;
6214
6215 -- NSRIVAST, INVCONV, Start
6216 IF p_grade_from IS NOT NULL THEN
6217 query_str := query_str || ' AND grade_code = :grade_f ' ;
6218 END IF ;
6219 IF p_grade_code IS NOT NULL THEN
6220 query_str := query_str || ' AND grade_code = :grade_c ' ;
6221 END IF ;
6222 -- NSRIVAST, INVCONV, End
6223
6224 IF p_subinventory_code IS NOT NULL THEN
6225 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
6226 END IF;
6227
6228 IF p_organization_id IS NOT NULL THEN
6229 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
6230 END IF;
6231
6232 IF p_lpn_from IS NOT NULL
6233 OR p_lpn_to IS NOT NULL THEN
6234 IF p_lpn_from IS NOT NULL
6235 AND p_lpn_to IS NULL THEN
6236 query_str := query_str || ' and license_plate_number >= :lpn_f ';
6237 ELSIF p_lpn_from IS NULL
6238 AND p_lpn_to IS NOT NULL THEN
6239 query_str := query_str || ' and license_plate_number <= :lpn_t ';
6240 ELSIF p_lpn_from IS NOT NULL
6241 AND p_lpn_to IS NOT NULL THEN
6242 --bugfix#3646484
6243 IF (p_lpn_from = p_lpn_to) THEN
6244 --User is querying for single LPN so converted the range query to equality query
6245 query_str := query_str || 'and license_plate_number = :lpn_f ';
6246 ELSE
6247 query_str := query_str || ' and license_plate_number >= :lpn_f ';
6248 query_str := query_str || ' and license_plate_number <= :lpn_t ';
6249 END IF;
6250 END IF;
6251 END IF;
6252
6253 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
6254 END IF;
6255
6256 IF p_lot_attr_query IS NULL
6257 AND p_serial_attr_query IS NULL THEN
6258 query_str := query_str || 'WHERE 1=1 ';
6259 ELSIF p_lot_attr_query IS NULL
6260 AND p_serial_attr_query IS NOT NULL THEN
6261 query_str :=
6262 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
6263 || ') msn ';
6264 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
6265 ELSIF p_lot_attr_query IS NOT NULL
6266 AND p_serial_attr_query IS NULL THEN
6267 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
6268 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
6269 ELSIF p_lot_attr_query IS NOT NULL
6270 AND p_serial_attr_query IS NOT NULL THEN
6271 query_str :=
6272 query_str
6273 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
6274 || p_lot_attr_query
6275 || ') mln '
6276 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
6277 || p_serial_attr_query
6278 || ') msn ';
6279 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
6280 query_str := query_str || 'AND msn.serial_num = serial_number ';
6281 END IF;
6282
6283 IF p_project_id IS NOT NULL THEN
6284 query_str := query_str || ' AND project_id = :pr_id ';
6285 END IF;
6286
6287 IF p_task_id IS NOT NULL THEN
6288 query_str := query_str || ' AND task_id = :ta_id ';
6289 END IF;
6290
6291 IF p_unit_number IS NOT NULL THEN
6292 query_str := query_str || ' AND unit_number=:un_id ';
6293 END IF;
6294
6295 /*IF p_site_id IS NOT NULL THEN
6296 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
6297 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
6298 ELSIF p_vendor_id is NOT NULL THEN
6299 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
6300 query_str := query_str || ' AND planning_organization_id in ';
6301 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
6302 query_str := query_str || ' where vendor_id = :vendor_id )';
6303 END IF;*/
6304 IF (p_owning_qry_mode = 4) THEN
6305 query_str := query_str || ' AND owning_organization_id = :own_org ';
6306 query_str := query_str || ' AND owning_tp_type = 2 ';
6307 ELSIF(p_owning_qry_mode = 3) THEN
6308 query_str := query_str || ' AND owning_organization_id = :own_org ';
6309 query_str := query_str || ' AND owning_tp_type = 1 ';
6310 ELSIF(p_owning_qry_mode = 2) THEN
6311 query_str := query_str || ' AND owning_tp_type = 1 ';
6312 END IF;
6313
6314 IF (p_planning_query_mode = 4) THEN
6315 query_str := query_str || ' AND planning_organization_id = :plan_org ';
6316 query_str := query_str || ' AND planning_tp_type = 2 ';
6317 ELSIF(p_planning_query_mode = 3) THEN
6318 query_str := query_str || ' AND planning_organization_id = :plan_org ';
6319 query_str := query_str || ' AND planning_tp_type = 1 ';
6320 ELSIF(p_planning_query_mode = 2) THEN
6321 query_str := query_str || ' AND planning_tp_type = 1 ';
6322 END IF;
6323
6324 IF p_locator_id IS NOT NULL THEN
6325 query_str := query_str || 'AND mol.locator_id = :loc_id ';
6326 END IF;
6327
6328 IF p_subinventory_code IS NOT NULL THEN
6329 query_str := query_str || 'AND mol.subinventory_code = :sub ';
6330 END IF;
6331
6332 IF p_organization_id IS NOT NULL THEN
6333 query_str := query_str || 'AND mol.organization_id = :org_id ';
6334 END IF;
6335
6336 IF p_status_id IS NOT NULL THEN
6337 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
6338 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
6339 END IF;
6340
6341 IF p_lot_number_from IS NOT NULL THEN
6342 query_str := query_str || 'AND lot_number >= :lot_f ';
6343 END IF;
6344
6345 IF p_lot_number_to IS NOT NULL THEN
6346 query_str := query_str || 'AND lot_number <= :lot_t ';
6347 END IF;
6348
6349 -- NSRIVAST, INVCONV, Start
6350 IF p_grade_from IS NOT NULL THEN
6351 query_str := query_str || ' AND grade_code = :grade_f ' ;
6352 END IF ;
6353 IF p_grade_code IS NOT NULL THEN
6354 query_str := query_str || ' AND grade_code = :grade_c ' ;
6355 END IF ;
6356 -- NSRIVAST, INVCONV, End
6357
6358 IF p_cost_group_id IS NOT NULL THEN
6359 query_str := query_str || 'AND cost_group_id = :cg_id ';
6360 END IF;
6361
6362 IF p_revision IS NOT NULL THEN
6363 query_str := query_str || 'AND revision = :rev ';
6364 END IF;
6365
6366 IF p_serial_number_from IS NOT NULL THEN
6367 query_str := query_str || 'AND serial_number >= :serial_f ';
6368 END IF;
6369
6370 IF p_serial_number_to IS NOT NULL THEN
6371 query_str := query_str || 'AND serial_number <= :serial_t ';
6372 END IF;
6373
6374 IF p_sub_type = 2 THEN
6375 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6376 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6377 query_str := query_str || ' AND subinventory_code is null AND locator_id is null ';
6378 END IF;
6379 --Bug#3191526
6380 query_str := query_str || ' AND lpn_context = 3 ';
6381 ELSIF p_prepacked IS NULL THEN
6382 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 ) ';
6383 ELSIF p_prepacked = 1 THEN
6384 query_str := query_str || 'AND lpn_context = 1 ';
6385 ELSIF p_prepacked <> 1
6386 AND p_prepacked <> 999 THEN
6387 query_str := query_str || 'AND lpn_context = :prepacked ';
6388 END IF;
6389
6390 IF p_lpn_from IS NOT NULL
6391 OR p_lpn_to IS NOT NULL THEN
6392 query_str := query_str || 'AND MOL.outermost_lpn_id= X.outermost_lpn_id ';
6393 END IF;
6394
6395 IF p_inventory_item_id IS NOT NULL THEN
6396 query_str := query_str || 'AND mol.inventory_item_id = :item_id ';
6397 END IF;
6398
6399 IF p_locator_controlled = 2 THEN
6400 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6401 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6402 --don't add the below locator id not null check
6403 NULL;
6404 ELSE
6405 query_str := query_str || 'AND locator_id IS NOT NULL ';
6406 END IF;
6407 ELSIF p_locator_controlled = 1 THEN
6408 query_str := query_str || 'AND locator_id IS NULL ';
6409 END IF;
6410
6411 IF p_locator_id IS NOT NULL THEN
6412 query_str := query_str || 'AND locator_id = :loc_id ';
6413 END IF;
6414
6415 --ER(3338592) Changes
6416 IF p_item_description IS NOT NULL THEN
6417 query_str := query_str || ' AND item_description LIKE :item_description ';
6418 END IF;
6419 --ER(3338592) Changes
6420
6421 IF p_subinventory_code IS NOT NULL THEN
6422 query_str := query_str || 'AND subinventory_code = :sub ';
6423 END IF;
6424
6425 IF p_organization_id IS NOT NULL THEN
6426 query_str := query_str || 'AND organization_id = :org_id ';
6427 END IF;
6428
6429 IF p_parent_lpn_id IS NULL THEN
6430 query_str := query_str || ') GROUP BY license_plate_number, lpn_id, inventory_item_id ';
6431 query_str := query_str || 'ORDER BY license_plate_number ';
6432 ELSE
6433 query_str := query_str || 'GROUP BY lpn, MOL.lpn_id, X.inventory_item_id ';
6434 query_str := query_str || 'ORDER BY lpn ';
6435 END IF;
6436 ELSE -- comes here if query criteria contains item serial and parent lpn is there.
6437 -- connect by is delibarately removed from here as it is affecting performance.
6438 -- For details see Material workbech performance hld doc
6439 query_str := query_str || ' select license_plate_number lpn, lpn_id, inventory_item_id from wms_license_plate_numbers ';
6440 query_str := query_str || ' WHERE parent_lpn_id = :plpn_id ';
6441
6442 IF p_sub_type = 2 THEN
6443 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6444 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6445 query_str := query_str || ' AND subinventory_code is null AND locator_id is null ';
6446 END IF;
6447 --Bug#3191526
6448 query_str := query_str || ' AND lpn_context = 3 ';
6449 ELSIF p_prepacked IS NULL THEN
6450 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 ) ';
6451 ELSIF p_prepacked = 1 THEN
6452 query_str := query_str || 'AND lpn_context = 1 ';
6453 ELSIF p_prepacked <> 1
6454 AND p_prepacked <> 999 THEN
6455 query_str := query_str || 'AND lpn_context = :prepacked ';
6456 END IF;
6457
6458 inv_trx_util_pub.trace(query_str, 'Material Workbench :- ADD LPNs', 9);
6459 --trace1('QUERY STR ' || query_str, 'add_lpns', 9);
6460
6461 query_hdl := DBMS_SQL.open_cursor;
6462 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
6463 DBMS_SQL.bind_variable(query_hdl, 'plpn_id', p_parent_lpn_id);
6464
6465 IF p_prepacked <> 1
6466 AND p_prepacked <> 999
6467 AND p_prepacked IS NOT NULL THEN
6468 DBMS_SQL.bind_variable(query_hdl, 'prepacked', p_prepacked);
6469 END IF;
6470
6471 is_bind_required := FALSE;
6472 END IF;
6473 END IF;
6474
6475 IF (is_bind_required = TRUE) THEN
6476 -- Enable this during debugging
6477 inv_trx_util_pub.trace(query_str, 'ADD LPNs Material Workbench :', 9);
6478 --trace1(query_str, 'add_lpns', 9);
6479
6480 query_hdl := DBMS_SQL.open_cursor;
6481 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
6482
6483 IF p_organization_id IS NOT NULL THEN
6484 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
6485 END IF;
6486
6487 IF p_subinventory_code IS NOT NULL THEN
6488 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
6489 END IF;
6490
6491 IF p_locator_id IS NOT NULL THEN
6492 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
6493 END IF;
6494
6495 IF p_inventory_item_id IS NOT NULL THEN
6496 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
6497 END IF;
6498
6499 IF p_revision IS NOT NULL THEN
6500 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
6501 END IF;
6502
6503 IF p_cost_group_id IS NOT NULL THEN
6504 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
6505 END IF;
6506
6507 IF p_lot_number_from IS NOT NULL THEN
6508 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
6509 END IF;
6510
6511 IF p_lot_number_to IS NOT NULL THEN
6512 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
6513 END IF;
6514
6515 -- NSRIVAST, INVCONV, Start
6516 IF p_grade_from IS NOT NULL THEN
6517 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
6518 END IF;
6519 IF p_grade_code IS NOT NULL THEN
6520 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
6521 END IF;
6522 -- NSRIVAST, INVCONV, End
6523
6524 IF p_serial_number_from IS NOT NULL THEN
6525 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
6526 END IF;
6527
6528 IF p_serial_number_to IS NOT NULL THEN
6529 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
6530 END IF;
6531
6532 IF p_parent_lpn_id IS NOT NULL THEN
6533 DBMS_SQL.bind_variable(query_hdl, 'plpn_id', p_parent_lpn_id);
6534 END IF;
6535
6536 --bugfix#3646484
6537 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
6538 --User is querying for single LPN so converted the range query to equality query
6539 --So it is enought to bind the from lpn alone
6540 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
6541 ELSE
6542 IF p_lpn_from IS NOT NULL THEN
6543 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
6544 END IF;
6545
6546 IF p_lpn_to IS NOT NULL THEN
6547 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
6548 END IF;
6549 END IF;
6550
6551 IF p_status_id IS NOT NULL THEN
6552 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
6553 END IF;
6554
6555 IF p_prepacked <> 1
6556 AND p_prepacked <> 999
6557 AND p_prepacked IS NOT NULL THEN
6558 DBMS_SQL.bind_variable(query_hdl, 'prepacked', p_prepacked);
6559 END IF;
6560
6561 IF p_mln_context_code IS NOT NULL THEN
6562 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
6563 END IF;
6564
6565 IF p_project_id IS NOT NULL THEN
6566 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
6567 END IF;
6568
6569 IF p_task_id IS NOT NULL THEN
6570 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
6571 END IF;
6572
6573 IF p_unit_number IS NOT NULL THEN
6574 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
6575 END IF;
6576
6577 /*IF p_site_id IS NOT NULL THEN
6578 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
6579 ELSIF p_vendor_id is NOT NULL THEN
6580 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
6581 END IF;*/
6582 IF (p_owning_qry_mode = 4)
6583 OR(p_owning_qry_mode = 3) THEN
6584 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
6585 END IF;
6586
6587 IF (p_planning_query_mode = 4)
6588 OR(p_planning_query_mode = 3) THEN
6589 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
6590 END IF;
6591
6592 --ER(3338592) Changes
6593 IF p_item_description IS NOT NULL THEN
6594 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
6595 END IF;
6596
6597 END IF;
6598
6599 DBMS_SQL.define_column(query_hdl, 1, lpn, 30);
6600 DBMS_SQL.define_column(query_hdl, 2, lpn_id);
6601 DBMS_SQL.define_column(query_hdl, 3, item_id);
6602 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
6603
6604 LOOP
6605 -- fetch a row
6606 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
6607 -- fetch columns from the row
6608 DBMS_SQL.column_value(query_hdl, 1, lpn);
6609 DBMS_SQL.column_value(query_hdl, 2, lpn_id);
6610 DBMS_SQL.column_value(query_hdl, 3, item_id);
6611
6612 IF item_id IS NOT NULL
6613 AND item_id <> 0 THEN
6614 SELECT concatenated_segments
6615 INTO item
6616 FROM mtl_system_items_kfv
6617 WHERE organization_id = p_organization_id
6618 AND inventory_item_id = item_id;
6619
6620 item := ' (' || item || ')';
6621 ELSE
6622 item := '';
6623 END IF;
6624
6625 IF j >= p_node_low_value THEN
6626 x_node_tbl(i).state := p_node_state;
6627 x_node_tbl(i).DEPTH := 1;
6628 x_node_tbl(i).label := lpn || item;
6629 x_node_tbl(i).icon := 'inv_licn';
6630 x_node_tbl(i).VALUE := TO_CHAR(lpn_id);
6631 x_node_tbl(i).TYPE := 'LPN';
6632 i := i + 1;
6633 END IF;
6634
6635 EXIT WHEN j >= p_node_high_value;
6636 j := j + 1;
6637 ELSE
6638 EXIT;
6639 END IF;
6640 END LOOP;
6641
6642 DBMS_SQL.close_cursor(query_hdl); -- close cursor
6643 x_node_value := j;
6644 x_tbl_index := i;
6645 EXCEPTION
6646 WHEN NO_DATA_FOUND THEN
6647 NULL;
6648 WHEN OTHERS THEN
6649 RAISE;
6650 END add_lpns;
6651
6652 PROCEDURE add_items(
6653 p_organization_id IN NUMBER DEFAULT NULL
6654 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
6655 , p_locator_id IN NUMBER DEFAULT NULL
6656 , p_locator_controlled IN NUMBER DEFAULT 0
6657 , p_inventory_item_id IN NUMBER DEFAULT NULL
6658 , p_revision IN VARCHAR2 DEFAULT NULL
6659 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
6660 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
6661 , p_lot_number IN VARCHAR2 DEFAULT NULL
6662 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
6663 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
6664 , p_serial_number IN VARCHAR2 DEFAULT NULL
6665 , p_lpn_from IN VARCHAR2 DEFAULT NULL
6666 , p_lpn_to IN VARCHAR2 DEFAULT NULL
6667 , p_parent_lpn_id IN VARCHAR2 DEFAULT NULL
6668 , p_containerized IN NUMBER DEFAULT 0
6669 , p_prepacked IN NUMBER DEFAULT NULL
6670 , p_cost_group_id IN NUMBER DEFAULT NULL
6671 , p_status_id IN NUMBER DEFAULT NULL
6672 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
6673 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
6674 , p_project_id IN NUMBER DEFAULT NULL
6675 , p_task_id IN NUMBER DEFAULT NULL
6676 , p_unit_number IN VARCHAR2 DEFAULT NULL
6677 , -- consinged changes
6678 p_owning_qry_mode IN NUMBER DEFAULT NULL
6679 , p_planning_query_mode IN NUMBER DEFAULT NULL
6680 , p_owning_org IN NUMBER DEFAULT NULL
6681 , p_planning_org IN NUMBER DEFAULT NULL
6682 , -- consigned changes
6683 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
6684 , p_node_state IN NUMBER
6685 , p_node_high_value IN NUMBER
6686 , p_node_low_value IN NUMBER
6687 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
6688 , p_inserted_under_org IN VARCHAR2 DEFAULT 'N'
6689 --ER(3338592) Changes
6690 , p_item_description IN VARCHAR2 DEFAULT NULL
6691 --ER(3338592) Changes
6692 , p_responsibility_id IN NUMBER DEFAULT NULL --Bug # 3411938
6693 , p_resp_application_id IN NUMBER DEFAULT NULL
6694 , p_qty_from IN NUMBER DEFAULT NULL --Bug # 3539766
6695 , p_qty_to IN NUMBER DEFAULT NULL
6696 , x_node_value IN OUT NOCOPY NUMBER
6697 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
6698 , x_tbl_index IN OUT NOCOPY NUMBER
6699 -- NSRIVAST, INVCONV, Start
6700 , p_grade_from IN VARCHAR2 DEFAULT NULL
6701
6702 , p_grade_code IN VARCHAR2 DEFAULT NULL
6703 , p_grade_controlled IN NUMBER DEFAULT 0
6704 -- NSRIVAST, INVCONV, End
6705 ) IS
6706 query_str VARCHAR2(10000);
6707 query_hdl NUMBER;
6708 rows_processed NUMBER;
6709 item_id mtl_system_items_kfv.inventory_item_id%TYPE;
6710 item mtl_system_items_kfv.concatenated_segments%TYPE;
6711 i NUMBER := x_tbl_index;
6712 j NUMBER := x_node_value;
6713 table_required VARCHAR2(300);
6714
6715 group_str VARCHAR2(10000) ;
6716 having_str VARCHAR2(10000) := ' HAVING 1=1 ';
6717
6718 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
6719
6720 BEGIN
6721 -- NSRIVAST, INVCONV, Start
6722 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
6723 is_grade_t := TRUE ;
6724 END IF ;
6725 -- NSRIVAST, INVCONV, End
6726 IF (
6727 p_serial_number_from IS NULL
6728 AND p_serial_number_to IS NULL
6729 AND p_serial_number IS NULL
6730 AND p_unit_number IS NULL
6731 AND p_status_id IS NULL
6732 AND p_lpn_from IS NULL
6733 AND p_lpn_to IS NULL
6734 AND p_parent_lpn_id IS NULL
6735 AND(NVL(p_prepacked, 1) = 1)
6736 AND p_serial_attr_query IS NULL
6737 ) THEN
6738 IF p_sub_type = 2 THEN
6739 table_required := ' mtl_rcv_mwb_onhand_v mot ';
6740 ELSIF(p_status_id IS NULL) THEN
6741 table_required := ' mtl_onhand_total_mwb_v mot ';
6742 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
6743 table_required := ' mtl_onhand_total_v mot '; -- NSRIVAST, INVCONV
6744 END IF; -- NSRIVAST, INVCONV
6745 ELSE
6746 table_required := ' mtl_onhand_total_v mot ';
6747 END IF;
6748
6749 IF p_lot_attr_query IS NULL THEN
6750 query_str := query_str || 'SELECT DISTINCT inventory_item_id, item from ' || table_required;
6751 query_str := query_str || 'WHERE 1=1 ';
6752 ELSE
6753 query_str :=
6754 query_str
6755 || 'SELECT DISTINCT inventory_item_id, item from'
6756 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
6757 || p_lot_attr_query
6758 || ') mln, '
6759 || table_required;
6760 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
6761 END IF;
6762
6763 --Bug # 3539766 (Group by and having clause have been added)
6764 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
6765 group_str := ' GROUP BY organization_id ';
6766 END IF;
6767
6768 IF p_subinventory_code IS NOT NULL THEN
6769 query_str := query_str || ' AND subinventory_code = :sub ';
6770 IF group_str IS NOT NULL THEN
6771 group_str := group_str || ' , subinventory_code ' ;
6772 END IF;
6773 END IF;
6774
6775 IF p_locator_id IS NOT NULL THEN
6776 query_str := query_str || ' AND locator_id = :loc_id ';
6777 IF group_str IS NOT NULL THEN
6778 group_str := group_str || ' , locator_id ' ;
6779 END IF;
6780 END IF;
6781
6782 -- NSRIVAST, INVCONV, Start
6783 IF p_grade_from IS NOT NULL THEN
6784 query_str := query_str || ' AND grade_code = :grade_f ' ;
6785 END IF ;
6786 IF p_grade_code IS NOT NULL THEN
6787 query_str := query_str || ' AND grade_code = :grade_c ' ;
6788 END IF ;
6789 -- NSRIVAST, INVCONV, End
6790
6791 IF p_project_id IS NOT NULL THEN
6792 query_str := query_str || ' AND project_id = :pr_id ';
6793 IF group_str IS NOT NULL THEN
6794 group_str := group_str || ' , project_id ' ;
6795 END IF;
6796 END IF;
6797
6798 IF p_task_id IS NOT NULL THEN
6799 query_str := query_str || ' AND task_id = :ta_id ';
6800 IF group_str IS NOT NULL THEN
6801 group_str := group_str || ' , p_task_id ' ;
6802 END IF;
6803 END IF;
6804
6805 IF p_inventory_item_id IS NOT NULL THEN
6806 query_str := query_str || 'AND inventory_item_id = :item_id ';
6807 END IF;
6808
6809 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
6810 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
6811 END IF;
6812
6813 --ER(3338592) Changes
6814 IF p_item_description IS NOT NULL THEN
6815 query_str := query_str || ' AND item_description LIKE :item_description ';
6816 END IF;
6817
6818 IF p_revision IS NOT NULL THEN
6819 query_str := query_str || 'AND revision = :rev ';
6820 IF group_str IS NOT NULL THEN
6821 group_str := group_str || ' , revision ' ;
6822 END IF;
6823 END IF;
6824
6825 IF p_cost_group_id IS NOT NULL THEN
6826 query_str := query_str || 'AND cost_group_id = :cg_id ';
6827 IF group_str IS NOT NULL THEN
6828 group_str := group_str || ' , cost_group_id ' ;
6829 END IF;
6830 END IF;
6831
6832 IF p_lot_number IS NOT NULL THEN
6833 query_str := query_str || 'AND lot_number = :lot_n ';
6834 IF group_str IS NOT NULL THEN
6835 group_str := group_str || ' , lot_number ' ;
6836 END IF;
6837 END IF;
6838
6839 IF p_lot_number_from IS NOT NULL THEN
6840 query_str := query_str || 'AND lot_number >= :lot_f ';
6841 END IF;
6842
6843 IF p_lot_number_to IS NOT NULL THEN
6844 query_str := query_str || 'AND lot_number <= :lot_t ';
6845 END IF;
6846
6847 IF p_status_id IS NOT NULL THEN
6848 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
6849 query_str := query_str || 'locator_status_id = :st_id or lot_status_id = :st_id) ';
6850 END IF;
6851
6852 IF p_containerized = 1 THEN
6853 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
6854 ELSIF p_containerized = 2 THEN
6855 query_str := query_str || 'AND containerized_flag = 1 ';
6856 END IF;
6857
6858 /*IF p_site_id IS NOT NULL THEN
6859 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
6860 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
6861 ELSIF p_vendor_id is NOT NULL THEN
6862 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
6863 query_str := query_str || ' AND planning_organization_id in ';
6864 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
6865 query_str := query_str || ' where vendor_id = :vendor_id )';
6866 END IF;*/
6867
6868 IF (p_planning_query_mode = 4) THEN
6869 query_str := query_str || ' AND planning_organization_id = :plan_org ';
6870 query_str := query_str || ' AND planning_tp_type = 2 ';
6871 ELSIF(p_planning_query_mode = 3) THEN
6872 query_str := query_str || ' AND planning_organization_id = :plan_org ';
6873 query_str := query_str || ' AND planning_tp_type = 1 ';
6874 ELSIF(p_planning_query_mode = 2) THEN
6875 query_str := query_str || ' AND planning_tp_type = 1 ';
6876 END IF;
6877
6878 IF (p_owning_qry_mode = 4) THEN
6879 query_str := query_str || ' AND owning_organization_id = :own_org ';
6880 query_str := query_str || ' AND owning_tp_type = 2 ';
6881 ELSIF(p_owning_qry_mode = 3) THEN
6882 query_str := query_str || ' AND owning_organization_id = :own_org ';
6883 query_str := query_str || ' AND owning_tp_type = 1 ';
6884 ELSIF(p_owning_qry_mode = 2) THEN
6885 query_str := query_str || ' AND owning_tp_type = 1 ';
6886 END IF;
6887
6888 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
6889 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
6890 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
6891 group_str := group_str || ' , item_lot_control, item_serial_control ';
6892 END IF;
6893
6894 IF (p_locator_controlled = 2) THEN
6895 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6896 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6897 --don't add the below locator id not null check
6898 NULL;
6899 ELSE
6900 query_str := query_str || 'AND locator_id IS not NULL ';
6901 END IF;
6902 ELSIF(p_locator_controlled = 1) THEN
6903 query_str := query_str || 'AND locator_id IS NULL ';
6904 END IF;
6905
6906 IF p_sub_type = 2 THEN
6907 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
6908 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
6909 query_str := query_str || ' AND subinventory_code is null AND locator_id is null ';
6910 END IF;
6911 --Bug#3191526
6912 END IF;
6913
6914 IF p_organization_id IS NOT NULL THEN
6915 query_str := query_str || 'AND organization_id = :org_id ';
6916 --Bug # 3411938
6917 ELSE
6918 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
6919 query_str := query_str || ' FROM org_access_view oav ' ;
6920 query_str := query_str || ' WHERE oav.organization_id = mot.organization_id ' ;
6921 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
6922 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
6923 END IF;
6924
6925 IF p_qty_from IS NOT NULL THEN
6926 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
6927 END IF;
6928
6929 IF p_qty_to IS NOT NULL THEN
6930 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
6931 END IF;
6932
6933 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
6934 query_str := query_str || group_str || having_str ;
6935 ELSE
6936 query_str := query_str || 'GROUP BY inventory_item_id, item ';
6937 END IF;
6938
6939 query_str := query_str || 'ORDER BY item ';
6940
6941 ELSIF(
6942 (
6943 p_serial_number_from IS NOT NULL
6944 OR p_serial_number_to IS NOT NULL
6945 OR p_serial_number IS NOT NULL
6946 OR p_unit_number IS NOT NULL
6947 OR p_serial_attr_query IS NOT NULL
6948 )
6949 AND p_lpn_from IS NULL
6950 AND p_lpn_to IS NULL
6951 AND p_parent_lpn_id IS NULL
6952 AND(NVL(p_prepacked, 1) = 1)
6953 ) THEN
6954 IF p_sub_type = 2 THEN
6955 table_required := ' mtl_rcv_serial_oh_v mos ';
6956 ELSIF(p_status_id IS NULL) THEN
6957 table_required := ' mtl_onhand_serial_mwb_v mos ';
6958 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
6959 table_required := ' mtl_onhand_serial_v mos '; -- NSRIVAST, INVCONV
6960 END IF; -- NSRIVAST, INVCONV
6961 ELSE
6962 table_required := ' mtl_onhand_serial_v mos ';
6963 END IF;
6964
6965 IF p_lot_attr_query IS NULL
6966 AND p_serial_attr_query IS NULL THEN
6967 query_str := query_str || 'SELECT DISTINCT inventory_item_id, item from ' || table_required;
6968 query_str := query_str || 'WHERE 1=1 ';
6969 ELSIF p_lot_attr_query IS NULL
6970 AND p_serial_attr_query IS NOT NULL THEN
6971 query_str :=
6972 query_str
6973 || 'SELECT DISTINCT inventory_item_id, item from'
6974 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
6975 || p_serial_attr_query
6976 || ') msn, '
6977 || table_required;
6978 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
6979 ELSIF p_lot_attr_query IS NOT NULL
6980 AND p_serial_attr_query IS NULL THEN
6981 query_str :=
6982 query_str
6983 || 'SELECT DISTINCT inventory_item_id, item from'
6984 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
6985 || p_lot_attr_query
6986 || ') mln, '
6987 || table_required;
6988 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
6989 ELSIF p_lot_attr_query IS NOT NULL
6990 AND p_serial_attr_query IS NOT NULL THEN
6991 query_str :=
6992 query_str
6993 || 'SELECT DISTINCT inventory_item_id, item from'
6994 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
6995 || p_lot_attr_query
6996 || ') mln, '
6997 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
6998 || p_serial_attr_query
6999 || ') msn, '
7000 || table_required;
7001 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
7002 query_str := query_str || 'AND msn.serial_num = serial_number ';
7003 END IF;
7004
7005 --Bug # 3539766 (Group By and Having clause have been added)
7006 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7007 group_str := ' GROUP BY organization_id ';
7008 END IF;
7009
7010 IF p_subinventory_code IS NOT NULL THEN
7011 query_str := query_str || 'AND subinventory_code = :sub ';
7012 IF group_str IS NOT NULL THEN
7013 group_str := group_str || ' , subinventory_code ' ;
7014 END IF;
7015 END IF;
7016
7017 IF p_locator_id IS NOT NULL THEN
7018 query_str := query_str || 'AND locator_id = :loc_id ';
7019 IF group_str IS NOT NULL THEN
7020 group_str := group_str || ' , locator_id ' ;
7021 END IF;
7022 END IF;
7023
7024 -- NSRIVAST, INVCONV, Start
7025 IF p_grade_from IS NOT NULL THEN
7026 query_str := query_str || ' AND grade_code = :grade_f ' ;
7027 END IF ;
7028 IF p_grade_code IS NOT NULL THEN
7029 query_str := query_str || ' AND grade_code = :grade_c ' ;
7030 END IF ;
7031 -- NSRIVAST, INVCONV, End
7032
7033 IF p_project_id IS NOT NULL THEN
7034 query_str := query_str || ' AND project_id = :pr_id ';
7035 IF group_str IS NOT NULL THEN
7036 group_str := group_str || ' , project_id ' ;
7037 END IF;
7038 END IF;
7039
7040 IF p_task_id IS NOT NULL THEN
7041 query_str := query_str || ' AND task_id = :ta_id ';
7042 IF group_str IS NOT NULL THEN
7043 group_str := group_str || ' , p_task_id ' ;
7044 END IF;
7045 END IF;
7046
7047 IF p_inventory_item_id IS NOT NULL THEN
7048 query_str := query_str || 'AND inventory_item_id = :item_id ';
7049 END IF;
7050
7051 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7052 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
7053 END IF;
7054
7055 --ER(3338592) Changes
7056 IF p_item_description IS NOT NULL THEN
7057 query_str := query_str || ' AND item_description LIKE :item_description ';
7058 END IF;
7059
7060 IF p_revision IS NOT NULL THEN
7061 query_str := query_str || ' AND revision = :rev ';
7062 IF group_str IS NOT NULL THEN
7063 group_str := group_str || ' , revision ' ;
7064 END IF;
7065 END IF;
7066
7067 IF p_cost_group_id IS NOT NULL THEN
7068 query_str := query_str || ' AND cost_group_id = :cg_id ';
7069 IF group_str IS NOT NULL THEN
7070 group_str := group_str || ' , cost_group_id ' ;
7071 END IF;
7072 END IF;
7073
7074 IF p_lot_number IS NOT NULL THEN
7075 query_str := query_str || ' AND lot_number = :lot_n ';
7076 IF group_str IS NOT NULL THEN
7077 group_str := group_str || ' , lot_number ' ;
7078 END IF;
7079 END IF;
7080
7081 IF p_lot_number_from IS NOT NULL THEN
7082 query_str := query_str || ' AND lot_number >= :lot_f ';
7083 END IF;
7084
7085 IF p_lot_number_to IS NOT NULL THEN
7086 query_str := query_str || ' AND lot_number <= :lot_t ';
7087 END IF;
7088
7089 IF p_serial_number IS NOT NULL THEN
7090 query_str := query_str || ' AND serial_number = :serial_n ';
7091 IF group_str IS NOT NULL THEN
7092 group_str := group_str || ' , serial_number ' ;
7093 END IF;
7094 END IF;
7095
7096 IF p_serial_number_from IS NOT NULL THEN
7097 query_str := query_str || ' AND serial_number >= :serial_f ';
7098 END IF;
7099
7100 IF p_serial_number_to IS NOT NULL THEN
7101 query_str := query_str || ' AND serial_number <= :serial_t ';
7102 END IF;
7103
7104 IF p_unit_number IS NOT NULL THEN
7105 query_str := query_str || ' AND unit_number = :un_id ';
7106 IF group_str IS NOT NULL THEN
7107 group_str := group_str || ' , unit_number ' ;
7108 END IF;
7109 END IF;
7110
7111 IF p_status_id IS NOT NULL THEN
7112 query_str := query_str || ' AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
7113 query_str := query_str || ' lot_status_id = :st_id or serial_status_id = :st_id) ';
7114 END IF;
7115
7116 IF p_containerized = 1 THEN
7117 query_str := query_str || 'AND lpn_id IS NULL ';
7118 ELSIF p_containerized = 1 THEN
7119 query_str := query_str || 'AND lpn_id IS NOT NULL ';
7120 END IF;
7121
7122 /*IF p_site_id IS NOT NULL THEN
7123 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
7124 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
7125 ELSIF p_vendor_id is NOT NULL THEN
7126 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
7127 query_str := query_str || ' AND planning_organization_id in ';
7128 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
7129 query_str := query_str || ' where vendor_id = :vendor_id )';
7130 END IF;*/
7131
7132 IF (p_planning_query_mode = 4) THEN
7133 query_str := query_str || ' AND planning_organization_id = :plan_org ';
7134 query_str := query_str || ' AND planning_tp_type = 2 ';
7135 ELSIF(p_planning_query_mode = 3) THEN
7136 query_str := query_str || ' AND planning_organization_id = :plan_org ';
7137 query_str := query_str || ' AND planning_tp_type = 1 ';
7138 ELSIF(p_planning_query_mode = 2) THEN
7139 query_str := query_str || ' AND planning_tp_type = 1 ';
7140 END IF;
7141
7142 IF (p_owning_qry_mode = 4) THEN
7143 query_str := query_str || ' AND owning_organization_id = :own_org ';
7144 query_str := query_str || ' AND owning_tp_type = 2 ';
7145 ELSIF(p_owning_qry_mode = 3) THEN
7146 query_str := query_str || ' AND owning_organization_id = :own_org ';
7147 query_str := query_str || ' AND owning_tp_type = 1 ';
7148 ELSIF(p_owning_qry_mode = 2) THEN
7149 query_str := query_str || ' AND owning_tp_type = 1 ';
7150 END IF;
7151
7152 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7153 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
7154 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
7155 group_str := group_str || ' , item_lot_control, item_serial_control ';
7156 END IF;
7157
7158 IF (p_locator_controlled = 2) THEN
7159 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
7160 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
7161 --don't add the below locator id not null check
7162 NULL;
7163 ELSE
7164 query_str := query_str || 'AND locator_id IS not NULL ';
7165 END IF;
7166 ELSIF(p_locator_controlled = 1) THEN
7167 query_str := query_str || 'AND locator_id IS NULL ';
7168 END IF;
7169
7170 IF p_sub_type = 2 THEN
7171 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
7172 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
7173 query_str := query_str || ' AND subinventory_code is null AND locator_id is null ';
7174 END IF;
7175 --Bug#3191526
7176 END IF;
7177
7178 IF p_organization_id IS NOT NULL THEN
7179 query_str := query_str || 'AND organization_id = :org_id ';
7180 --Bug # 3411938
7181 ELSE
7182 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
7183 query_str := query_str || ' FROM org_access_view oav ' ;
7184 query_str := query_str || ' WHERE oav.organization_id = mos.organization_id ' ;
7185 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
7186 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
7187 END IF;
7188
7189 IF p_qty_from IS NOT NULL THEN
7190 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
7191 END IF;
7192
7193 IF p_qty_to IS NOT NULL THEN
7194 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
7195 END IF;
7196
7197 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7198 query_str := query_str || group_str || having_str ;
7199 ELSE
7200 query_str := query_str || 'GROUP BY inventory_item_id, item ';
7201 END IF;
7202
7203 query_str := query_str || 'ORDER BY item ';
7204
7205 -- Need to use both mtl_onhand_total_v and mtl_onhand_serial_v
7206 ELSIF(
7207 p_serial_number_from IS NULL
7208 AND p_serial_number_to IS NULL
7209 AND p_serial_number IS NULL
7210 AND p_status_id IS NOT NULL
7211 AND p_unit_number IS NULL
7212 AND p_lpn_from IS NULL
7213 AND p_lpn_to IS NULL
7214 AND p_parent_lpn_id IS NULL
7215 AND(NVL(p_prepacked, 1) = 1)
7216 ) THEN
7217 query_str := 'SELECT DISTINCT inventory_item_id, item from( ';
7218
7219 IF (p_status_id IS NULL) THEN
7220 table_required := ' mtl_onhand_total_mwb_v mot ';
7221 -- ELSIF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
7222 -- table_required := ' mtl_onhand_new_lpn_v mot '; -- NSRIVAST, INVCONV
7223 ELSE
7224 table_required := ' mtl_onhand_total_v mot ';
7225 END IF;
7226
7227 IF p_lot_attr_query IS NULL THEN
7228 query_str := query_str || 'SELECT inventory_item_id, item from ' || table_required;
7229 query_str := query_str || 'WHERE 1=1 ';
7230 ELSE
7231 query_str :=
7232 query_str
7233 || 'SELECT inventory_item_id, item from'
7234 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
7235 || p_lot_attr_query
7236 || ') mln, mtl_onhand_total_v ';
7237 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
7238 END IF;
7239
7240 -- Bug #3539766 (Group By and Having Clause have been added)
7241 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7242 group_str := ' GROUP BY organization_id ';
7243 END IF;
7244
7245 IF p_subinventory_code IS NOT NULL THEN
7246 query_str := query_str || 'AND subinventory_code = :sub ';
7247 IF group_str IS NOT NULL THEN
7248 group_str := group_str || ' , subinventory_code ' ;
7249 END IF;
7250 END IF;
7251
7252 IF p_locator_id IS NOT NULL THEN
7253 query_str := query_str || 'AND locator_id = :loc_id ';
7254 IF group_str IS NOT NULL THEN
7255 group_str := group_str || ' , locator_id ' ;
7256 END IF;
7257 END IF;
7258
7259 -- NSRIVAST, INVCONV, Start
7260 IF p_grade_from IS NOT NULL THEN
7261 query_str := query_str || ' AND grade_code = :grade_f ' ;
7262 END IF ;
7263 IF p_grade_code IS NOT NULL THEN
7264 query_str := query_str || ' AND grade_code = :grade_c ' ;
7265 END IF ;
7266 -- NSRIVAST, INVCONV, End
7267
7268 IF p_project_id IS NOT NULL THEN
7269 query_str := query_str || ' AND project_id = :pr_id ';
7270 IF group_str IS NOT NULL THEN
7271 group_str := group_str || ' , project_id ' ;
7272 END IF;
7273 END IF;
7274
7275 IF p_task_id IS NOT NULL THEN
7276 query_str := query_str || ' AND task_id = :ta_id ';
7277 IF group_str IS NOT NULL THEN
7278 group_str := group_str || ' , p_task_id ' ;
7279 END IF;
7280 END IF;
7281
7282 IF p_inventory_item_id IS NOT NULL THEN
7283 query_str := query_str || 'AND inventory_item_id = :item_id ';
7284 END IF;
7285
7286 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7287 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
7288 END IF;
7289
7290 --ER(3335892) Changes
7291 IF p_item_description IS NOT NULL THEN
7292 query_str := query_str || ' AND item_description LIKE :item_description ';
7293 END IF;
7294
7295 IF p_revision IS NOT NULL THEN
7296 query_str := query_str || 'AND revision = :rev ';
7297 IF group_str IS NOT NULL THEN
7298 group_str := group_str || ' , revision ' ;
7299 END IF;
7300 END IF;
7301
7302 IF p_cost_group_id IS NOT NULL THEN
7303 query_str := query_str || 'AND cost_group_id = :cg_id ';
7304 IF group_str IS NOT NULL THEN
7305 group_str := group_str || ' , cost_group_id ' ;
7306 END IF;
7307 END IF;
7308
7309 IF p_lot_number IS NOT NULL THEN
7310 query_str := query_str || 'AND lot_number = :lot_n ';
7311 IF group_str IS NOT NULL THEN
7312 group_str := group_str || ' , lot_number ' ;
7313 END IF;
7314 END IF;
7315
7316 IF p_lot_number_from IS NOT NULL THEN
7317 query_str := query_str || 'AND lot_number >= :lot_f ';
7318 END IF;
7319
7320 IF p_lot_number_to IS NOT NULL THEN
7321 query_str := query_str || 'AND lot_number <= :lot_t ';
7322 END IF;
7323
7324 IF p_status_id IS NOT NULL THEN
7325 query_str := query_str || 'AND (subinventory_status_id = :st_id or ';
7326 query_str := query_str || 'locator_status_id = :st_id or lot_status_id = :st_id) ';
7327 END IF;
7328
7329 IF p_containerized = 1 THEN
7330 query_str := query_str || 'AND lpn_id IS NULL ';
7331 ELSIF p_containerized = 1 THEN
7332 query_str := query_str || 'AND lpn_id IS NOT NULL ';
7333 END IF;
7334
7335 /*query_str := query_str || ' AND eixsts ';
7336 || ' ( select null from mtl_system_items msi WHERE ';
7337 || ' moq.organization_id = msi.organization_id and ';
7338 || ' moq.inventory_item_id = msi.inventory_item_id) and ';
7339 || ' serial_number_control_code in (1,6) ) ';*/
7340
7341 --query_str := query_str || 'AND serial_number_control_code in (1,6) ';
7342 query_str := query_str || 'AND item_serial_control in (1,6) ';
7343
7344 /*IF p_site_id IS NOT NULL THEN
7345 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
7346 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
7347 ELSIF p_vendor_id is NOT NULL THEN
7348 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
7349 query_str := query_str || ' AND planning_organization_id in ';
7350 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
7351 query_str := query_str || ' where vendor_id = :vendor_id )';
7352 END IF;*/
7353
7354 IF (p_planning_query_mode = 4) THEN
7355 query_str := query_str || ' AND planning_organization_id = :plan_org ';
7356 query_str := query_str || ' AND planning_tp_type = 2 ';
7357 ELSIF(p_planning_query_mode = 3) THEN
7358 query_str := query_str || ' AND planning_organization_id = :plan_org ';
7359 query_str := query_str || ' AND planning_tp_type = 1 ';
7360 ELSIF(p_planning_query_mode = 2) THEN
7361 query_str := query_str || ' AND planning_tp_type = 1 ';
7362 END IF;
7363
7364 IF (p_owning_qry_mode = 4) THEN
7365 query_str := query_str || ' AND owning_organization_id = :own_org ';
7366 query_str := query_str || ' AND owning_tp_type = 2 ';
7367 ELSIF(p_owning_qry_mode = 3) THEN
7368 query_str := query_str || ' AND owning_organization_id = :own_org ';
7369 query_str := query_str || ' AND owning_tp_type = 1 ';
7370 ELSIF(p_owning_qry_mode = 2) THEN
7371 query_str := query_str || ' AND owning_tp_type = 1 ';
7372 END IF;
7373
7374 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7375 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
7376 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
7377 group_str := group_str || ' , item_lot_control, item_serial_control ';
7378 END IF;
7379
7380 IF (p_locator_controlled = 2) THEN
7381 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
7382 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
7383 --don't add the below locator id not null check
7384 NULL;
7385 ELSE
7386 query_str := query_str || 'AND locator_id IS not NULL ';
7387 END IF;
7388 ELSIF(p_locator_controlled = 1) THEN
7389 query_str := query_str || 'AND locator_id IS NULL ';
7390 END IF;
7391
7392 IF p_organization_id IS NOT NULL THEN
7393 query_str := query_str || 'AND organization_id = :org_id ';
7394 ELSE
7395 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
7396 query_str := query_str || ' FROM org_access_view oav ' ;
7397 query_str := query_str || ' WHERE oav.organization_id = mot.organization_id ' ;
7398 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
7399 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
7400 END IF;
7401
7402 IF p_qty_from IS NOT NULL THEN
7403 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
7404 END IF;
7405
7406 IF p_qty_to IS NOT NULL THEN
7407 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
7408 END IF;
7409
7410 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7411 query_str := query_str || group_str || having_str ;
7412 ELSE
7413 query_str := query_str || 'GROUP BY inventory_item_id, item ';
7414 END IF;
7415
7416 query_str := query_str || 'UNION ';
7417
7418 --Reinitializing the variable
7419 having_str := ' HAVING 1=1 ' ;
7420
7421 IF p_lot_attr_query IS NULL
7422 AND p_serial_attr_query IS NULL THEN
7423 query_str := query_str || 'SELECT inventory_item_id, item from mtl_onhand_serial_v mos ';
7424 query_str := query_str || 'WHERE 1=1 ';
7425 ELSIF p_lot_attr_query IS NOT NULL
7426 AND p_serial_attr_query IS NULL THEN
7427 query_str :=
7428 query_str
7429 || 'SELECT inventory_item_id, item from'
7430 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
7431 || p_lot_attr_query
7432 || ') mln, mtl_onhand_serial_v ';
7433 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
7434 END IF;
7435
7436 --Bug #3539766 (Group By and Having clause have been added)
7437 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7438 group_str := ' GROUP BY organization_id ';
7439 END IF;
7440
7441 IF p_subinventory_code IS NOT NULL THEN
7442 query_str := query_str || 'AND subinventory_code = :sub ';
7443 IF group_str IS NOT NULL THEN
7444 group_str := group_str || ' , subinventory_code ' ;
7445 END IF;
7446 END IF;
7447
7448 IF p_locator_id IS NOT NULL THEN
7449 query_str := query_str || 'AND locator_id = :loc_id ';
7450 IF group_str IS NOT NULL THEN
7451 group_str := group_str || ' , locator_id ' ;
7452 END IF;
7453 END IF;
7454
7455 IF p_project_id IS NOT NULL THEN
7456 query_str := query_str || ' AND project_id = :pr_id ';
7457 IF group_str IS NOT NULL THEN
7458 group_str := group_str || ' , project_id ' ;
7459 END IF;
7460 END IF;
7461
7462 IF p_task_id IS NOT NULL THEN
7463 query_str := query_str || ' AND task_id = :ta_id ';
7464 IF group_str IS NOT NULL THEN
7465 group_str := group_str || ' , p_task_id ' ;
7466 END IF;
7467 END IF;
7468
7469 IF p_inventory_item_id IS NOT NULL THEN
7470 query_str := query_str || 'AND inventory_item_id = :item_id ';
7471 END IF;
7472
7473 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7474 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
7475 END IF;
7476
7477 --ER(3338592) Changes
7478 IF p_item_description IS NOT NULL THEN
7479 query_str := query_str || ' AND item_description LIKE :item_description ';
7480 END IF;
7481
7482 IF p_revision IS NOT NULL THEN
7483 query_str := query_str || 'AND revision = :rev ';
7484 IF group_str IS NOT NULL THEN
7485 group_str := group_str || ' , revision ' ;
7486 END IF;
7487 END IF;
7488
7489 IF p_cost_group_id IS NOT NULL THEN
7490 query_str := query_str || 'AND cost_group_id = :cg_id ';
7491 IF group_str IS NOT NULL THEN
7492 group_str := group_str || ' , cost_group_id ' ;
7493 END IF;
7494 END IF;
7495
7496 IF p_lot_number IS NOT NULL THEN
7497 query_str := query_str || 'AND lot_number = :lot_n ';
7498 IF group_str IS NOT NULL THEN
7499 group_str := group_str || ' , lot_number ' ;
7500 END IF;
7501 END IF;
7502
7503 IF p_lot_number_from IS NOT NULL THEN
7504 query_str := query_str || 'AND lot_number >= :lot_f ';
7505 END IF;
7506
7507 IF p_lot_number_to IS NOT NULL THEN
7508 query_str := query_str || 'AND lot_number <= :lot_t ';
7509 END IF;
7510
7511 IF p_serial_number_from IS NOT NULL THEN
7512 query_str := query_str || 'AND serial_number >= :serial_f ';
7513 END IF;
7514
7515 IF p_serial_number_to IS NOT NULL THEN
7516 query_str := query_str || 'AND serial_number <= :serial_t ';
7517 END IF;
7518
7519 IF p_status_id IS NOT NULL THEN
7520 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
7521 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
7522 END IF;
7523
7524 /*IF(p_vendor_id IS NULL AND p_site_id IS NULL) THEN
7525 IF p_containerized = 1 THEN
7526 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
7527 ELSIF p_containerized = 2 THEN
7528 query_str := query_str || 'AND containerized_flag = 1 ';
7529 END IF;
7530 END IF;*/
7531
7532 IF (p_planning_query_mode = 4) THEN
7533 query_str := query_str || ' AND planning_organization_id = :plan_org ';
7534 query_str := query_str || ' AND planning_tp_type = 2 ';
7535 ELSIF(p_planning_query_mode = 3) THEN
7536 query_str := query_str || ' AND planning_organization_id = :plan_org ';
7537 query_str := query_str || ' AND planning_tp_type = 1 ';
7538 ELSIF(p_planning_query_mode = 2) THEN
7539 query_str := query_str || ' AND planning_tp_type = 1 ';
7540 END IF;
7541
7542 IF (p_owning_qry_mode = 4) THEN
7543 query_str := query_str || ' AND owning_organization_id = :own_org ';
7544 query_str := query_str || ' AND owning_tp_type = 2 ';
7545 ELSIF(p_owning_qry_mode = 3) THEN
7546 query_str := query_str || ' AND owning_organization_id = :own_org ';
7547 query_str := query_str || ' AND owning_tp_type = 1 ';
7548 ELSIF(p_owning_qry_mode = 2) THEN
7549 query_str := query_str || ' AND owning_tp_type = 1 ';
7550 END IF;
7551
7552 IF (p_locator_controlled = 2) THEN
7553 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
7554 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
7555 --don't add the below locator id not null check
7556 NULL;
7557 ELSE
7558 query_str := query_str || 'AND locator_id IS not NULL ';
7559 END IF;
7560 ELSIF(p_locator_controlled = 1) THEN
7561 query_str := query_str || 'AND locator_id IS NULL ';
7562 END IF;
7563
7564 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7565 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
7566 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
7567 group_str := group_str || ' , item_lot_control, item_serial_control ';
7568 END IF;
7569
7570 IF p_organization_id IS NOT NULL THEN
7571 query_str := query_str || 'AND organization_id = :org_id ';
7572 --Bug # 3411938
7573 ELSE
7574 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
7575 query_str := query_str || ' FROM org_access_view oav ' ;
7576 query_str := query_str || ' WHERE oav.organization_id = mos.organization_id ' ;
7577 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
7578 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
7579 END IF;
7580
7581 IF p_qty_from IS NOT NULL THEN
7582 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
7583 END IF;
7584
7585 IF p_qty_to IS NOT NULL THEN
7586 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
7587 END IF;
7588
7589 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7590 query_str := query_str || group_str || having_str ;
7591 ELSE
7592 query_str := query_str || ' GROUP BY inventory_item_id, item ';
7593 END IF;
7594
7595 query_str := query_str || ') GROUP BY inventory_item_id, item ';
7596 query_str := query_str || ' ORDER BY item ';
7597
7598 ELSIF(p_lpn_from IS NOT NULL
7599 OR p_lpn_to IS NOT NULL
7600 OR p_parent_lpn_id IS NOT NULL
7601 OR(NVL(p_prepacked, 1) <> 1)) THEN
7602 IF (p_status_id IS NULL) THEN
7603 IF p_sub_type = 2 THEN
7604 table_required := ' mtl_onhand_lpn_mwb_v mol ';
7605 ELSIF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
7606 table_required := ' mtl_onhand_lpn_mwb_v mol ';
7607 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
7608 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
7609 END IF; -- NSRIVAST, INVCONV
7610 ELSE
7611 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
7612 IF is_grade_t = TRUE THEN -- %NSRIVAST, INVCONV
7613 table_required := ' mtl_onhand_new_lpn_v mol '; -- %NSRIVAST, INVCONV
7614 END IF;
7615 END IF;
7616 ELSE
7617 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
7618 table_required := ' mtl_onhand_lpn_v mol ';
7619 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
7620 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
7621 END IF; -- NSRIVAST, INVCONV
7622 ELSE
7623 table_required := ' mtl_onhand_new_lpn_v mol ';
7624 END IF;
7625 END IF;
7626
7627 query_str := 'SELECT DISTINCT inventory_item_id, item ';
7628 query_str := query_str || 'FROM ' || table_required;
7629
7630 IF (p_lpn_from IS NOT NULL
7631 OR p_lpn_to IS NOT NULL)
7632 AND p_parent_lpn_id IS NULL THEN
7633 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
7634 query_str := query_str || ' WHERE 1=1 ';
7635
7636 IF p_sub_type = 2 THEN
7637 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
7638 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
7639 query_str := query_str || ' AND wlpn.subinventory_code is null AND wlpn.locator_id is null ';
7640 END IF;
7641 --Bug#3191526
7642 query_str := query_str || ' AND lpn_context = 3 ';
7643 ELSIF p_prepacked IS NULL THEN
7644 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 )';
7645 ELSIF p_prepacked = 1 THEN
7646 query_str := query_str || 'AND lpn_context = 1 ';
7647 ELSIF p_prepacked <> 1
7648 AND p_prepacked <> 999 THEN
7649 query_str := query_str || 'AND lpn_context = :prepacked ';
7650 END IF;
7651
7652 IF p_locator_id IS NOT NULL THEN
7653 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
7654 END IF;
7655
7656 -- NSRIVAST, INVCONV, Start
7657 IF p_grade_from IS NOT NULL THEN
7658 query_str := query_str || ' AND grade_code = :grade_f ' ;
7659 END IF ;
7660 IF p_grade_code IS NOT NULL THEN
7661 query_str := query_str || ' AND grade_code = :grade_c ' ;
7662 END IF ;
7663 -- NSRIVAST, INVCONV, End
7664
7665 IF p_subinventory_code IS NOT NULL THEN
7666 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
7667 END IF;
7668
7669 IF p_organization_id IS NOT NULL THEN
7670 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
7671 END IF;
7672
7673 IF p_lpn_from IS NOT NULL
7674 OR p_lpn_to IS NOT NULL THEN
7675 IF p_lpn_from IS NOT NULL
7676 AND p_lpn_to IS NULL THEN
7677 query_str := query_str || ' and license_plate_number >= :lpn_f ';
7678 ELSIF p_lpn_from IS NULL
7679 AND p_lpn_to IS NOT NULL THEN
7680 query_str := query_str || ' and license_plate_number <= :lpn_t ';
7681 ELSIF p_lpn_from IS NOT NULL
7682 AND p_lpn_to IS NOT NULL THEN
7683 --bugfix#3646484
7684 IF (p_lpn_from = p_lpn_to) THEN
7685 --User is querying for single LPN so converted the range query to equality query
7686 query_str := query_str || 'and license_plate_number = :lpn_f ';
7687 ELSE
7688 query_str := query_str || ' and license_plate_number >= :lpn_f ';
7689 query_str := query_str || ' and license_plate_number <= :lpn_t ';
7690 END IF;
7691 END IF;
7692 END IF;
7693
7694 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
7695 END IF;
7696
7697 IF p_lot_attr_query IS NULL
7698 AND p_serial_attr_query IS NULL THEN
7699 query_str := query_str || 'WHERE 1=1 ';
7700 ELSIF p_lot_attr_query IS NULL
7701 AND p_serial_attr_query IS NOT NULL THEN
7702 query_str :=
7703 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
7704 || ') msn ';
7705 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
7706 ELSIF p_lot_attr_query IS NOT NULL
7707 AND p_serial_attr_query IS NULL THEN
7708 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
7709 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
7710 ELSIF p_lot_attr_query IS NOT NULL
7711 AND p_serial_attr_query IS NOT NULL THEN
7712 query_str :=
7713 query_str
7714 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
7715 || p_lot_attr_query
7716 || ') mln '
7717 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
7718 || p_serial_attr_query
7719 || ') msn ';
7720 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
7721 query_str := query_str || 'AND msn.serial_num = serial_number ';
7722 END IF;
7723
7724 --Bug # 3411938 (Group By and Having clause have been added)
7725 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7726 group_str := ' GROUP BY organization_id ';
7727 END IF;
7728
7729 IF p_subinventory_code IS NOT NULL THEN
7730 query_str := query_str || 'AND subinventory_code = :sub ';
7731 IF group_str IS NOT NULL THEN
7732 group_str := group_str || ' , subinventory_code ' ;
7733 END IF;
7734 END IF;
7735
7736 IF p_locator_id IS NOT NULL THEN
7737 query_str := query_str || 'AND locator_id = :loc_id ';
7738 IF group_str IS NOT NULL THEN
7739 group_str := group_str || ' , locator_id ' ;
7740 END IF;
7741 END IF;
7742
7743 IF p_project_id IS NOT NULL THEN
7744 query_str := query_str || ' AND project_id = :pr_id ';
7745 IF group_str IS NOT NULL THEN
7746 group_str := group_str || ' , project_id ' ;
7747 END IF;
7748 END IF;
7749
7750 IF p_task_id IS NOT NULL THEN
7751 query_str := query_str || ' AND task_id = :ta_id ';
7752 IF group_str IS NOT NULL THEN
7753 group_str := group_str || ' , p_task_id ' ;
7754 END IF;
7755 END IF;
7756
7757 IF p_inventory_item_id IS NOT NULL THEN
7758 query_str := query_str || 'AND inventory_item_id = :item_id ';
7759 END IF;
7760
7761 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7762 group_str := group_str || ' , inventory_item_id, item_description, item ,uom ' ;
7763 END IF;
7764
7765 --ER(3338592) Changes
7766 IF p_item_description IS NOT NULL THEN
7767 query_str := query_str || ' AND item_description LIKE :item_description ';
7768 END IF;
7769
7770 -- %NSRIVAST, INVCONV, Start
7771 IF p_grade_from IS NOT NULL THEN
7772 query_str := query_str || ' AND grade_code = :grade_f ' ;
7773 END IF ;
7774 IF p_grade_code IS NOT NULL THEN
7775 query_str := query_str || ' AND grade_code = :grade_c ' ;
7776 END IF ;
7777 -- %NSRIVAST, INVCONV, End
7778
7779 IF p_revision IS NOT NULL THEN
7780 query_str := query_str || 'AND revision = :rev ';
7781 IF group_str IS NOT NULL THEN
7782 group_str := group_str || ' , revision ' ;
7783 END IF;
7784 END IF;
7785
7786 IF p_cost_group_id IS NOT NULL THEN
7787 query_str := query_str || 'AND cost_group_id = :cg_id ';
7788 IF group_str IS NOT NULL THEN
7789 group_str := group_str || ' , cost_group_id ' ;
7790 END IF;
7791 END IF;
7792
7793 IF p_lot_number IS NOT NULL THEN
7794 query_str := query_str || 'AND lot_number = :lot_n ';
7795 IF group_str IS NOT NULL THEN
7796 group_str := group_str || ' , lot_number ' ;
7797 END IF;
7798 END IF;
7799
7800 IF p_lot_number_from IS NOT NULL THEN
7801 query_str := query_str || 'AND lot_number >= :lot_f ';
7802 END IF;
7803
7804 IF p_lot_number_to IS NOT NULL THEN
7805 query_str := query_str || 'AND lot_number <= :lot_t ';
7806 END IF;
7807
7808 IF p_serial_number IS NOT NULL THEN
7809 query_str := query_str || 'AND serial_number = :serial_n ';
7810 IF group_str IS NOT NULL THEN
7811 group_str := group_str || ' , serial_number ' ;
7812 END IF;
7813 END IF;
7814
7815 IF p_serial_number_from IS NOT NULL THEN
7816 query_str := query_str || 'AND serial_number >= :serial_f ';
7817 END IF;
7818
7819 IF p_serial_number_to IS NOT NULL THEN
7820 query_str := query_str || 'AND serial_number <= :serial_t ';
7821 END IF;
7822
7823 IF p_unit_number IS NOT NULL THEN
7824 query_str := query_str || ' AND unit_number = :un_id ';
7825 IF group_str IS NOT NULL THEN
7826 group_str := group_str || ' , unit_number ' ;
7827 END IF;
7828 END IF;
7829
7830 IF p_parent_lpn_id IS NOT NULL THEN
7831 query_str := query_str || 'AND MOL.lpn_id = :plpn_id ';
7832 IF group_str IS NOT NULL THEN
7833 group_str := group_str || ' , MOL.lpn_id ' ;
7834 END IF;
7835 END IF;
7836
7837 IF p_sub_type = 2 THEN
7838 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
7839 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
7840 query_str := query_str || ' AND mol.subinventory_code is null AND mol.locator_id is null ';
7841 END IF;
7842 --Bug#3191526
7843 query_str := query_str || ' AND lpn_context = 3 ';
7844 ELSIF p_prepacked IS NULL THEN
7845 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 ) ';
7846 ELSIF p_prepacked = 1 THEN
7847 query_str := query_str || 'AND lpn_context = 1 ';
7848 ELSIF p_prepacked <> 1
7849 AND p_prepacked <> 999 THEN
7850 query_str := query_str || 'AND lpn_context = :prepacked ';
7851 END IF;
7852
7853 IF p_lpn_from IS NOT NULL
7854 OR p_lpn_to IS NOT NULL THEN
7855 query_str := query_str || 'AND MOL.outermost_lpn_id = X.outermost_lpn_id ';
7856 END IF;
7857
7858 IF p_status_id IS NOT NULL THEN
7859 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
7860 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id OR :st_id IS NULL) ';
7861 END IF;
7862
7863 /*IF p_site_id IS NOT NULL THEN
7864 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
7865 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
7866 ELSIF p_vendor_id is NOT NULL THEN
7867 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
7868 query_str := query_str || ' AND planning_organization_id in ';
7869 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
7870 query_str := query_str || ' where vendor_id = :vendor_id )';
7871 END IF;*/
7872
7873 IF (p_planning_query_mode = 4) THEN
7874 query_str := query_str || ' AND planning_organization_id = :plan_org ';
7875 query_str := query_str || ' AND planning_tp_type = 2 ';
7876 ELSIF(p_planning_query_mode = 3) THEN
7877 query_str := query_str || ' AND planning_organization_id = :plan_org ';
7878 query_str := query_str || ' AND planning_tp_type = 1 ';
7879 ELSIF(p_planning_query_mode = 2) THEN
7880 query_str := query_str || ' AND planning_tp_type = 1 ';
7881 END IF;
7882
7883 IF (p_owning_qry_mode = 4) THEN
7884 query_str := query_str || ' AND owning_organization_id = :own_org ';
7885 query_str := query_str || ' AND owning_tp_type = 2 ';
7886 ELSIF(p_owning_qry_mode = 3) THEN
7887 query_str := query_str || ' AND owning_organization_id = :own_org ';
7888 query_str := query_str || ' AND owning_tp_type = 1 ';
7889 ELSIF(p_owning_qry_mode = 2) THEN
7890 query_str := query_str || ' AND owning_tp_type = 1 ';
7891 END IF;
7892
7893 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7894 group_str := group_str || ' , planning_organization_id, planning_tp_type ';
7895 group_str := group_str || ' , owning_organization_id, owning_tp_type ';
7896 group_str := group_str || ' , item_lot_control, item_serial_control ';
7897 END IF;
7898
7899 IF (p_locator_controlled = 2) THEN
7900 --Bug#3191526 add the LPNs which don't have any sub/loc association directly after org
7901 IF p_inserted_under_org = 'Y' OR p_inserted_under_org = 'y' THEN
7902 --don't add the below locator id not null check
7903 NULL;
7904 ELSE
7905 query_str := query_str || 'AND locator_id IS not NULL ';
7906 END IF;
7907 ELSIF(p_locator_controlled = 1) THEN
7908 query_str := query_str || 'AND locator_id IS NULL ';
7909 END IF;
7910
7911
7912 IF p_organization_id IS NOT NULL THEN
7913 query_str := query_str || 'AND organization_id = :org_id ';
7914 ELSE
7915 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
7916 query_str := query_str || ' FROM org_access_view oav ' ;
7917 query_str := query_str || ' WHERE oav.organization_id = mol.organization_id ' ;
7918 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
7919 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
7920 END IF;
7921
7922 IF p_qty_from IS NOT NULL THEN
7923 having_str := having_str || ' AND sum(on_hand) >= :qty_from ';
7924 END IF;
7925
7926 IF p_qty_to IS NOT NULL THEN
7927 having_str := having_str || ' AND sum(on_hand) <= :qty_to ';
7928 END IF;
7929
7930 IF p_qty_from IS NOT NULL OR p_qty_to IS NOT NULL THEN
7931 query_str := query_str || group_str || having_str ;
7932 ELSE
7933 query_str := query_str || ' GROUP BY inventory_item_id, item ';
7934 END IF;
7935
7936 query_str := query_str || ' ORDER BY item ';
7937
7938 END IF;
7939
7940 -- Enable this during debugging
7941 inv_trx_util_pub.trace(query_str, 'Material Workbench - Add Items : ', 9);
7942 --trace1(query_str, 'add_items', 9);
7943
7944 query_hdl := DBMS_SQL.open_cursor;
7945 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
7946
7947 IF p_organization_id IS NOT NULL THEN
7948 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
7949 END IF;
7950
7951 IF p_subinventory_code IS NOT NULL THEN
7952 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
7953 END IF;
7954
7955 IF p_locator_id IS NOT NULL THEN
7956 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
7957 END IF;
7958
7959 IF p_inventory_item_id IS NOT NULL THEN
7960 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
7961 END IF;
7962
7963 IF p_revision IS NOT NULL THEN
7964 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
7965 END IF;
7966
7967 IF p_cost_group_id IS NOT NULL THEN
7968 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
7969 END IF;
7970
7971 IF p_lot_number_from IS NOT NULL THEN
7972 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
7973 END IF;
7974
7975 IF p_lot_number_to IS NOT NULL THEN
7976 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
7977 END IF;
7978
7979 IF p_lot_number IS NOT NULL THEN
7980 DBMS_SQL.bind_variable(query_hdl, 'lot_n', p_lot_number);
7981 END IF;
7982
7983 -- NSRIVAST, INVCONV, Start
7984 IF p_grade_from IS NOT NULL THEN
7985 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
7986 END IF;
7987 IF p_grade_code IS NOT NULL THEN
7988 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
7989 END IF;
7990 -- NSRIVAST, INVCONV, End
7991
7992 IF p_serial_number_from IS NOT NULL THEN
7993 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
7994 END IF;
7995
7996 IF p_serial_number_to IS NOT NULL THEN
7997 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
7998 END IF;
7999
8000 IF p_serial_number IS NOT NULL THEN
8001 DBMS_SQL.bind_variable(query_hdl, 'serial_n', p_serial_number);
8002 END IF;
8003
8004 --bugfix#3646484
8005 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
8006 --User is querying for single LPN so converted the range query to equality query
8007 --So it is enought to bind the from lpn alone
8008 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
8009 ELSE
8010 IF p_lpn_from IS NOT NULL THEN
8011 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
8012 END IF;
8013
8014 IF p_lpn_to IS NOT NULL THEN
8015 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
8016 END IF;
8017 END IF;
8018
8019 IF p_parent_lpn_id IS NOT NULL THEN
8020 DBMS_SQL.bind_variable(query_hdl, 'plpn_id', p_parent_lpn_id);
8021 END IF;
8022
8023 IF p_status_id IS NOT NULL THEN
8024 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
8025 END IF;
8026
8027 IF p_prepacked <> 1
8028 AND p_prepacked <> 999
8029 AND p_prepacked IS NOT NULL THEN
8030 DBMS_SQL.bind_variable(query_hdl, 'prepacked', p_prepacked);
8031 END IF;
8032
8033 IF p_mln_context_code IS NOT NULL THEN
8034 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
8035 END IF;
8036
8037 IF p_project_id IS NOT NULL THEN
8038 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
8039 END IF;
8040
8041 IF p_task_id IS NOT NULL THEN
8042 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
8043 END IF;
8044
8045 IF p_unit_number IS NOT NULL THEN
8046 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
8047 END IF;
8048
8049 /*IF p_site_id IS NOT NULL THEN
8050 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
8051 ELSIF p_vendor_id is NOT NULL THEN
8052 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
8053 END IF;*/
8054 IF (p_owning_qry_mode = 4)
8055 OR(p_owning_qry_mode = 3) THEN
8056 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
8057 END IF;
8058
8059 IF (p_planning_query_mode = 4)
8060 OR(p_planning_query_mode = 3) THEN
8061 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
8062 END IF;
8063
8064 --ER(3338592) Changes
8065 IF p_item_description IS NOT NULL THEN
8066 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
8067 END IF;
8068
8069 --Bug #3411938
8070 IF p_organization_id IS NULL THEN
8071 IF p_responsibility_id IS NOT NULL THEN
8072 dbms_sql.bind_variable(query_hdl, 'responsibility_id', p_responsibility_id );
8073 END IF;
8074
8075 IF p_resp_application_id IS NOT NULL THEN
8076 dbms_sql.bind_variable(query_hdl, 'resp_application_id', p_resp_application_id );
8077 END IF;
8078 END IF;
8079
8080 --Bug # 3539766
8081 IF p_qty_from IS NOT NULL THEN
8082 dbms_sql.bind_variable(query_hdl, 'qty_from', p_qty_from);
8083 END IF;
8084
8085 IF p_qty_to IS NOT NULL THEN
8086 dbms_sql.bind_variable(query_hdl, 'qty_to', p_qty_to);
8087 END IF;
8088
8089
8090 DBMS_SQL.define_column(query_hdl, 1, item_id);
8091 DBMS_SQL.define_column(query_hdl, 2, item, 40);
8092 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
8093
8094 LOOP
8095 -- fetch a row
8096 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
8097 -- fetch columns from the row
8098 DBMS_SQL.column_value(query_hdl, 1, item_id);
8099 DBMS_SQL.column_value(query_hdl, 2, item);
8100
8101 IF j >= p_node_low_value THEN
8102 x_node_tbl(i).state := p_node_state;
8103 x_node_tbl(i).DEPTH := 1;
8104 x_node_tbl(i).label := item;
8105 x_node_tbl(i).icon := 'inv_item';
8106 x_node_tbl(i).VALUE := TO_CHAR(item_id);
8107 x_node_tbl(i).TYPE := 'ITEM';
8108 i := i + 1;
8109 END IF;
8110
8111 EXIT WHEN j >= p_node_high_value;
8112 j := j + 1;
8113 ELSE
8114 EXIT;
8115 END IF;
8116 END LOOP;
8117
8118 DBMS_SQL.close_cursor(query_hdl); -- close cursor
8119 x_node_value := j;
8120 x_tbl_index := i;
8121 EXCEPTION
8122 WHEN NO_DATA_FOUND THEN
8123 NULL;
8124 WHEN OTHERS THEN
8125 RAISE;
8126 END add_items;
8127
8128 PROCEDURE add_revs(
8129 p_organization_id IN NUMBER DEFAULT NULL
8130 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
8131 , p_locator_id IN NUMBER DEFAULT NULL
8132 , p_locator_controlled IN NUMBER DEFAULT 0
8133 , p_inventory_item_id IN NUMBER DEFAULT NULL
8134 , p_revision IN VARCHAR2 DEFAULT NULL
8135 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
8136 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
8137 , p_lot_number IN VARCHAR2 DEFAULT NULL
8138 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
8139 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
8140 , p_serial_number IN VARCHAR2 DEFAULT NULL
8141 , p_lpn_from IN VARCHAR2 DEFAULT NULL
8142 , p_lpn_to IN VARCHAR2 DEFAULT NULL
8143 , p_parent_lpn_id IN VARCHAR2 DEFAULT NULL
8144 , p_containerized IN NUMBER DEFAULT 0
8145 , p_prepacked IN NUMBER DEFAULT NULL
8146 , p_cost_group_id IN NUMBER DEFAULT NULL
8147 , p_status_id IN NUMBER DEFAULT NULL
8148 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
8149 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
8150 , p_project_id IN NUMBER DEFAULT NULL
8151 , p_task_id IN NUMBER DEFAULT NULL
8152 , p_unit_number IN VARCHAR2 DEFAULT NULL
8153 , -- consinged changes
8154 p_owning_qry_mode IN NUMBER DEFAULT NULL
8155 , p_planning_query_mode IN NUMBER DEFAULT NULL
8156 , p_owning_org IN NUMBER DEFAULT NULL
8157 , p_planning_org IN NUMBER DEFAULT NULL
8158 , -- consigned changes
8159 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
8160 , p_node_state IN NUMBER
8161 , p_node_high_value IN NUMBER
8162 , p_node_low_value IN NUMBER
8163 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
8164 --ER(3338592) Changes
8165 , p_item_description IN VARCHAR2 DEFAULT NULL
8166 --ER(3338592) Changes
8167 , x_node_value IN OUT NOCOPY NUMBER
8168 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
8169 , x_tbl_index IN OUT NOCOPY NUMBER
8170 -- NSRIVAST, INVCONV, Start
8171 , p_grade_from IN VARCHAR2 DEFAULT NULL
8172
8173 , p_grade_code IN VARCHAR2 DEFAULT NULL
8174 , p_grade_controlled IN NUMBER DEFAULT 0
8175 -- NSRIVAST, INVCONV, End
8176 ) IS
8177 query_str VARCHAR2(10000);
8178 query_hdl NUMBER;
8179 rows_processed NUMBER;
8180 item mtl_system_items_kfv.concatenated_segments%TYPE;
8181 rev mtl_onhand_quantities.revision%TYPE;
8182 rev_control NUMBER;
8183 i NUMBER := x_tbl_index;
8184 j NUMBER := x_node_value;
8185 table_required VARCHAR2(300);
8186 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
8187 BEGIN
8188 -- NSRIVAST, INVCONV, Start
8189 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
8190 is_grade_t := TRUE ;
8191 END IF ;
8192 -- NSRIVAST, INVCONV, End
8193
8194 -- Exit out of the procedure if the item is not revision controlled
8195 IF p_organization_id IS NOT NULL
8196 AND p_inventory_item_id IS NOT NULL THEN
8197 SELECT revision_qty_control_code
8198 INTO rev_control
8199 FROM mtl_system_items
8200 WHERE organization_id = p_organization_id
8201 AND inventory_item_id = p_inventory_item_id;
8202
8203 IF rev_control = 1 THEN
8204 RETURN;
8205 END IF;
8206 END IF;
8207
8208 IF (
8209 p_serial_number_from IS NULL
8210 AND p_serial_number_to IS NULL
8211 AND p_serial_number IS NULL
8212 AND p_status_id IS NULL
8213 AND p_lpn_from IS NULL
8214 AND p_lpn_to IS NULL
8215 AND p_parent_lpn_id IS NULL
8216 AND(NVL(p_prepacked, 1) = 1)
8217 AND p_serial_attr_query IS NULL
8218 ) THEN
8219 IF p_sub_type = 2 THEN
8220 table_required := ' mtl_rcv_mwb_onhand_v ';
8221 ELSIF(p_status_id IS NULL) THEN
8222 table_required := ' mtl_onhand_total_mwb_v ';
8223 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
8224 table_required := ' mtl_onhand_total_v '; -- NSRIVAST, INVCONV
8225 END IF;
8226 ELSE
8227 table_required := ' mtl_onhand_total_v ';
8228 END IF;
8229
8230 IF p_lot_attr_query IS NULL THEN
8231 query_str := query_str || 'SELECT item, revision from ' || table_required;
8232 query_str := query_str || 'WHERE 1=1 ';
8233 ELSE
8234 query_str :=
8235 query_str
8236 || 'SELECT item, revision from'
8237 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
8238 || p_lot_attr_query
8239 || ') mln, '
8240 || table_required;
8241 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
8242 END IF;
8243
8244 IF p_status_id IS NOT NULL THEN
8245 query_str := query_str || 'AND (subinventory_status_id = :st_id OR ';
8246 query_str := query_str || 'locator_status_id = :st_id or lot_status_id = :st_id) ';
8247 END IF;
8248
8249 IF p_lot_number IS NOT NULL THEN
8250 query_str := query_str || 'AND lot_number = :lot_n ';
8251 END IF;
8252
8253 IF p_lot_number_from IS NOT NULL THEN
8254 query_str := query_str || 'AND lot_number >= :lot_f ';
8255 END IF;
8256
8257 IF p_lot_number_to IS NOT NULL THEN
8258 query_str := query_str || 'AND lot_number <= :lot_t ';
8259 END IF;
8260
8261 -- NSRIVAST, INVCONV, Start
8262 IF p_grade_from IS NOT NULL THEN
8263 query_str := query_str || ' AND grade_code = :grade_f ' ;
8264 END IF ;
8265 IF p_grade_code IS NOT NULL THEN
8266 query_str := query_str || ' AND grade_code = :grade_c ' ;
8267 END IF ;
8268 -- NSRIVAST, INVCONV, End
8269
8270 IF p_cost_group_id IS NOT NULL THEN
8271 query_str := query_str || 'AND cost_group_id = :cg_id ';
8272 END IF;
8273
8274 IF p_revision IS NOT NULL THEN
8275 query_str := query_str || 'AND revision = :rev ';
8276 END IF;
8277
8278 IF p_containerized = 1 THEN
8279 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
8280 ELSIF p_containerized = 2 THEN
8281 query_str := query_str || 'AND containerized_flag = 1 ';
8282 END IF;
8283
8284 IF p_inventory_item_id IS NOT NULL THEN
8285 query_str := query_str || 'AND inventory_item_id = :item_id ';
8286 END IF;
8287
8288 IF p_locator_controlled = 1 THEN
8289 query_str := query_str || 'AND locator_id IS NULL ';
8290 ELSIF p_locator_controlled = 2 THEN
8291 query_str := query_str || 'AND locator_id IS NOT NULL ';
8292 END IF;
8293
8294 IF p_locator_id IS NOT NULL THEN
8295 query_str := query_str || 'AND locator_id = :loc_id ';
8296 END IF;
8297
8298 --ER(3338592) Changes
8299 IF p_item_description IS NOT NULL THEN
8300 query_str := query_str || ' AND item_description LIKE :item_description ';
8301 END IF;
8302 --ER(3338592) Changes
8303
8304 IF p_subinventory_code IS NOT NULL THEN
8305 query_str := query_str || 'AND subinventory_code = :sub ';
8306 END IF;
8307
8308 IF p_organization_id IS NOT NULL THEN
8309 query_str := query_str || 'AND organization_id = :org_id ';
8310 END IF;
8311
8312 IF p_project_id IS NOT NULL THEN
8313 query_str := query_str || ' AND project_id = :pr_id ';
8314 END IF;
8315
8316 IF p_task_id IS NOT NULL THEN
8317 query_str := query_str || ' AND task_id = :ta_id ';
8318 END IF;
8319
8320 IF p_unit_number IS NOT NULL THEN
8321 query_str := query_str || ' AND unit_number=:un_id ';
8322 END IF;
8323
8324 /*IF p_site_id IS NOT NULL THEN
8325 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8326 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
8327 ELSIF p_vendor_id is NOT NULL THEN
8328 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8329 query_str := query_str || ' AND planning_organization_id in ';
8330 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
8331 query_str := query_str || ' where vendor_id = :vendor_id )';
8332 END IF;*/
8333 IF (p_owning_qry_mode = 4) THEN
8334 query_str := query_str || ' AND owning_organization_id = :own_org ';
8335 query_str := query_str || ' AND owning_tp_type = 2 ';
8336 ELSIF(p_owning_qry_mode = 3) THEN
8337 query_str := query_str || ' AND owning_organization_id = :own_org ';
8338 query_str := query_str || ' AND owning_tp_type = 1 ';
8339 ELSIF(p_owning_qry_mode = 2) THEN
8340 query_str := query_str || ' AND owning_tp_type = 1 ';
8341 END IF;
8342
8343 IF (p_planning_query_mode = 4) THEN
8344 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8345 query_str := query_str || ' AND planning_tp_type = 2 ';
8346 ELSIF(p_planning_query_mode = 3) THEN
8347 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8348 query_str := query_str || ' AND planning_tp_type = 1 ';
8349 ELSIF(p_planning_query_mode = 2) THEN
8350 query_str := query_str || ' AND planning_tp_type = 1 ';
8351 END IF;
8352
8353 query_str := query_str || 'GROUP BY item, revision ';
8354 query_str := query_str || 'ORDER BY revision ';
8355 ELSIF(
8356 (
8357 p_serial_number_from IS NOT NULL
8358 OR p_serial_number_from IS NOT NULL
8359 OR p_serial_number IS NOT NULL
8360 OR p_serial_attr_query IS NOT NULL
8361 )
8362 AND p_lpn_from IS NULL
8363 AND p_lpn_to IS NULL
8364 AND p_parent_lpn_id IS NULL
8365 AND(NVL(p_prepacked, 1) = 1)
8366 ) THEN
8367 IF p_sub_type = 2 THEN
8368 table_required := ' mtl_rcv_serial_oh_v ';
8369 ELSIF(p_status_id IS NULL) THEN
8370 table_required := ' mtl_onhand_serial_mwb_v ';
8371 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
8372 table_required := ' mtl_onhand_serial_v '; -- NSRIVAST, INVCONV
8373 END IF; -- NSRIVAST, INVCONV
8374 ELSE
8375 table_required := ' mtl_onhand_serial_v ';
8376 END IF;
8377
8378 IF p_lot_attr_query IS NULL
8379 AND p_serial_attr_query IS NULL THEN
8380 query_str := query_str || 'SELECT item, revision from mtl_onhand_serial_v ';
8381 query_str := query_str || 'WHERE 1=1 ';
8382 ELSIF p_lot_attr_query IS NULL
8383 AND p_serial_attr_query IS NOT NULL THEN
8384 query_str :=
8385 query_str
8386 || 'SELECT item, revision from'
8387 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
8388 || p_serial_attr_query
8389 || ') msn, mtl_onhand_serial_v ';
8390 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
8391 ELSIF p_lot_attr_query IS NOT NULL
8392 AND p_serial_attr_query IS NULL THEN
8393 query_str :=
8394 query_str
8395 || 'SELECT item, revision from'
8396 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
8397 || p_lot_attr_query
8398 || ') mln, mtl_onhand_serial_v ';
8399 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
8400 ELSIF p_lot_attr_query IS NOT NULL
8401 AND p_serial_attr_query IS NOT NULL THEN
8402 query_str :=
8403 query_str
8404 || 'SELECT item, revision from'
8405 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
8406 || p_lot_attr_query
8407 || ') mln, '
8408 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
8409 || p_serial_attr_query
8410 || ') msn, mtl_onhand_serial_v ';
8411 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
8412 query_str := query_str || 'AND msn.serial_num = serial_number ';
8413 END IF;
8414
8415 IF p_status_id IS NOT NULL THEN
8416 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
8417 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
8418 END IF;
8419
8420 IF p_lot_number IS NOT NULL THEN
8421 query_str := query_str || 'AND lot_number = :lot_n ';
8422 END IF;
8423
8424 IF p_lot_number_from IS NOT NULL THEN
8425 query_str := query_str || 'AND lot_number >= :lot_f ';
8426 END IF;
8427
8428 IF p_lot_number_to IS NOT NULL THEN
8429 query_str := query_str || 'AND lot_number <= :lot_t ';
8430 END IF;
8431
8432 IF p_cost_group_id IS NOT NULL THEN
8433 query_str := query_str || 'AND cost_group_id = :cg_id ';
8434 END IF;
8435
8436 -- NSRIVAST, INVCONV, Start
8437 IF p_grade_from IS NOT NULL THEN
8438 query_str := query_str || ' AND grade_code = :grade_f ' ;
8439 END IF ;
8440 IF p_grade_code IS NOT NULL THEN
8441 query_str := query_str || ' AND grade_code = :grade_c ' ;
8442 END IF ;
8443 -- NSRIVAST, INVCONV, End
8444
8445 IF p_revision IS NOT NULL THEN
8446 query_str := query_str || 'AND revision = :rev ';
8447 END IF;
8448
8449 IF p_serial_number IS NOT NULL THEN
8450 query_str := query_str || 'AND (serial_number = :serial_n) ';
8451 END IF;
8452
8453 IF p_serial_number_from IS NOT NULL THEN
8454 query_str := query_str || 'AND serial_number >= :serial_f ';
8455 END IF;
8456
8457 IF p_serial_number_to IS NOT NULL THEN
8458 query_str := query_str || 'AND serial_number <= :serial_t ';
8459 END IF;
8460
8461 /*IF(p_vendor_id IS NULL AND p_site_id IS NULL) THEN
8462 IF p_containerized = 1 THEN
8463 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
8464 ELSIF p_containerized = 2 THEN
8465 query_str := query_str || 'AND containerized_flag = 1 ';
8466 END IF;
8467 END IF;*/
8468 IF (p_owning_qry_mode = 4) THEN
8469 query_str := query_str || ' AND owning_organization_id = :own_org ';
8470 query_str := query_str || ' AND owning_tp_type = 2 ';
8471 ELSIF(p_owning_qry_mode = 3) THEN
8472 query_str := query_str || ' AND owning_organization_id = :own_org ';
8473 query_str := query_str || ' AND owning_tp_type = 1 ';
8474 ELSIF(p_owning_qry_mode = 2) THEN
8475 query_str := query_str || ' AND owning_tp_type = 1 ';
8476 END IF;
8477
8478 IF (p_planning_query_mode = 4) THEN
8479 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8480 query_str := query_str || ' AND planning_tp_type = 2 ';
8481 ELSIF(p_planning_query_mode = 3) THEN
8482 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8483 query_str := query_str || ' AND planning_tp_type = 1 ';
8484 ELSIF(p_planning_query_mode = 2) THEN
8485 query_str := query_str || ' AND planning_tp_type = 1 ';
8486 END IF;
8487
8488 IF p_inventory_item_id IS NOT NULL THEN
8489 query_str := query_str || 'AND inventory_item_id = :item_id ';
8490 END IF;
8491
8492 IF p_locator_controlled = 1 THEN
8493 query_str := query_str || 'AND locator_id IS NULL ';
8494 ELSIF p_locator_controlled = 2 THEN
8495 query_str := query_str || 'AND locator_id IS NOT NULL ';
8496 END IF;
8497
8498 IF p_locator_id IS NOT NULL THEN
8499 query_str := query_str || 'AND locator_id = :loc_id ';
8500 END IF;
8501
8502 --ER(3338592) Changes
8503 IF p_item_description IS NOT NULL THEN
8504 query_str := query_str || ' AND item_description LIKE :item_description ';
8505 END IF;
8506 --ER(3338592) Changes
8507
8508 IF p_subinventory_code IS NOT NULL THEN
8509 query_str := query_str || 'AND subinventory_code = :sub ';
8510 END IF;
8511
8512 IF p_organization_id IS NOT NULL THEN
8513 query_str := query_str || 'AND organization_id = :org_id ';
8514 END IF;
8515
8516 IF p_project_id IS NOT NULL THEN
8517 query_str := query_str || ' AND project_id = :pr_id ';
8518 END IF;
8519
8520 IF p_task_id IS NOT NULL THEN
8521 query_str := query_str || ' AND task_id = :ta_id ';
8522 END IF;
8523
8524 IF p_unit_number IS NOT NULL THEN
8525 query_str := query_str || ' AND unit_number=:un_id ';
8526 END IF;
8527
8528 /*IF p_site_id IS NOT NULL THEN
8529 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8530 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
8531 ELSIF p_vendor_id is NOT NULL THEN
8532 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8533 query_str := query_str || ' AND planning_organization_id in ';
8534 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
8535 query_str := query_str || ' where vendor_id = :vendor_id )';
8536 END IF;*/
8537 IF (p_owning_qry_mode = 4) THEN
8538 query_str := query_str || ' AND owning_organization_id = :own_org ';
8539 query_str := query_str || ' AND owning_tp_type = 2 ';
8540 ELSIF(p_owning_qry_mode = 3) THEN
8541 query_str := query_str || ' AND owning_organization_id = :own_org ';
8542 query_str := query_str || ' AND owning_tp_type = 1 ';
8543 ELSIF(p_owning_qry_mode = 2) THEN
8544 query_str := query_str || ' AND owning_tp_type = 1 ';
8545 END IF;
8546
8547 IF (p_planning_query_mode = 4) THEN
8548 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8549 query_str := query_str || ' AND planning_tp_type = 2 ';
8550 ELSIF(p_planning_query_mode = 3) THEN
8551 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8552 query_str := query_str || ' AND planning_tp_type = 1 ';
8553 ELSIF(p_planning_query_mode = 2) THEN
8554 query_str := query_str || ' AND planning_tp_type = 1 ';
8555 END IF;
8556
8557 query_str := query_str || 'GROUP BY item, revision ';
8558 query_str := query_str || 'ORDER BY revision ';
8559 -- Need to query both mtl_onhand_total_v and mtl_onhand_serial_v
8560 ELSIF(
8561 p_serial_number_from IS NULL
8562 AND p_serial_number_to IS NULL
8563 AND p_serial_number IS NULL
8564 AND p_status_id IS NOT NULL
8565 AND p_lpn_from IS NULL
8566 AND p_lpn_to IS NULL
8567 AND p_parent_lpn_id IS NULL
8568 AND(NVL(p_prepacked, 1) = 1)
8569 ) THEN
8570 IF (p_status_id IS NULL) THEN
8571 table_required := ' mtl_onhand_total_mwb_v ';
8572 -- ELSIF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
8573 -- table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
8574 ELSE
8575 table_required := ' mtl_onhand_total_v ';
8576 END IF;
8577
8578 query_str := 'SELECT item, revision from( ';
8579
8580 IF p_lot_attr_query IS NULL THEN
8581 query_str := query_str || 'SELECT item, revision from ' || table_required;
8582 query_str := query_str || 'WHERE 1=1 ';
8583 ELSE
8584 query_str :=
8585 query_str
8586 || 'SELECT item, revision from'
8587 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
8588 || p_lot_attr_query
8589 || ') mln, '
8590 || table_required;
8591 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
8592 END IF;
8593
8594 IF p_status_id IS NOT NULL THEN
8595 query_str := query_str || 'AND (subinventory_status_id = :st_id OR ';
8596 query_str := query_str || 'locator_status_id = :st_id or lot_status_id = :st_id) ';
8597 END IF;
8598
8599 IF p_lot_number IS NOT NULL THEN
8600 query_str := query_str || 'AND lot_number = :lot_n ';
8601 END IF;
8602
8603 IF p_lot_number_from IS NOT NULL THEN
8604 query_str := query_str || 'AND lot_number >= :lot_f ';
8605 END IF;
8606
8607 IF p_lot_number_to IS NOT NULL THEN
8608 query_str := query_str || 'AND lot_number <= :lot_t ';
8609 END IF;
8610
8611 IF p_cost_group_id IS NOT NULL THEN
8612 query_str := query_str || 'AND cost_group_id = :cg_id ';
8613 END IF;
8614
8615 -- NSRIVAST, INVCONV, Start
8616 IF p_grade_from IS NOT NULL THEN
8617 query_str := query_str || ' AND grade_code = :grade_f ' ;
8618 END IF ;
8619 IF p_grade_code IS NOT NULL THEN
8620 query_str := query_str || ' AND grade_code = :grade_c ' ;
8621 END IF ;
8622 -- NSRIVAST, INVCONV, End
8623
8624 IF p_revision IS NOT NULL THEN
8625 query_str := query_str || 'AND revision = :rev ';
8626 END IF;
8627
8628 IF p_containerized = 1 THEN
8629 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
8630 ELSIF p_containerized = 2 THEN
8631 query_str := query_str || 'AND containerized_flag = 1 ';
8632 END IF;
8633
8634 --query_str := query_str || 'AND serial_number_control_code in (1,6) ';
8635 query_str := query_str || 'AND item_serial_control in (1,6) ';
8636
8637 IF p_inventory_item_id IS NOT NULL THEN
8638 query_str := query_str || 'AND inventory_item_id = :item_id ';
8639 END IF;
8640
8641 IF p_locator_controlled = 1 THEN
8642 query_str := query_str || 'AND locator_id IS NULL ';
8643 ELSIF p_locator_controlled = 2 THEN
8644 query_str := query_str || 'AND locator_id IS NOT NULL ';
8645 END IF;
8646
8647 IF p_locator_id IS NOT NULL THEN
8648 query_str := query_str || 'AND locator_id = :loc_id ';
8649 END IF;
8650
8651 --ER(3338592) Changes
8652 IF p_item_description IS NOT NULL THEN
8653 query_str := query_str || ' AND item_description LIKE :item_description ';
8654 END IF;
8655 --ER(3338592) Changes
8656
8657 IF p_subinventory_code IS NOT NULL THEN
8658 query_str := query_str || 'AND subinventory_code = :sub ';
8659 END IF;
8660
8661 IF p_organization_id IS NOT NULL THEN
8662 query_str := query_str || 'AND organization_id = :org_id ';
8663 END IF;
8664
8665 IF p_project_id IS NOT NULL THEN
8666 query_str := query_str || ' AND project_id = :pr_id ';
8667 END IF;
8668
8669 IF p_task_id IS NOT NULL THEN
8670 query_str := query_str || ' AND task_id = :ta_id ';
8671 END IF;
8672
8673 IF p_unit_number IS NOT NULL THEN
8674 query_str := query_str || ' AND unit_number=:un_id ';
8675 END IF;
8676
8677 /*IF p_site_id IS NOT NULL THEN
8678 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8679 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
8680 ELSIF p_vendor_id is NOT NULL THEN
8681 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8682 query_str := query_str || ' AND planning_organization_id in ';
8683 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
8684 query_str := query_str || ' where vendor_id = :vendor_id )';
8685 END IF;*/
8686 IF (p_owning_qry_mode = 4) THEN
8687 query_str := query_str || ' AND owning_organization_id = :own_org ';
8688 query_str := query_str || ' AND owning_tp_type = 2 ';
8689 ELSIF(p_owning_qry_mode = 3) THEN
8690 query_str := query_str || ' AND owning_organization_id = :own_org ';
8691 query_str := query_str || ' AND owning_tp_type = 1 ';
8692 ELSIF(p_owning_qry_mode = 2) THEN
8693 query_str := query_str || ' AND owning_tp_type = 1 ';
8694 END IF;
8695
8696 IF (p_planning_query_mode = 4) THEN
8697 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8698 query_str := query_str || ' AND planning_tp_type = 2 ';
8699 ELSIF(p_planning_query_mode = 3) THEN
8700 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8701 query_str := query_str || ' AND planning_tp_type = 1 ';
8702 ELSIF(p_planning_query_mode = 2) THEN
8703 query_str := query_str || ' AND planning_tp_type = 1 ';
8704 END IF;
8705
8706 query_str := query_str || 'UNION ';
8707
8708 IF (p_status_id IS NULL) THEN
8709 table_required := ' mtl_onhand_serial_mwb_v ';
8710 ELSE
8711 table_required := ' mtl_onhand_serial_v ';
8712 END IF;
8713
8714 IF p_lot_attr_query IS NULL
8715 AND p_serial_attr_query IS NULL THEN
8716 query_str := query_str || 'SELECT item, revision from ' || table_required;
8717 query_str := query_str || 'WHERE 1=1 ';
8718 ELSIF p_lot_attr_query IS NOT NULL
8719 AND p_serial_attr_query IS NULL THEN
8720 query_str :=
8721 query_str
8722 || 'SELECT item, revision from'
8723 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
8724 || p_lot_attr_query
8725 || ') mln, mtl_onhand_serial_v ';
8726 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
8727 END IF;
8728
8729 IF p_status_id IS NOT NULL THEN
8730 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
8731 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
8732 END IF;
8733
8734 IF p_lot_number IS NOT NULL THEN
8735 query_str := query_str || 'AND lot_number = :lot_n ';
8736 END IF;
8737
8738 IF p_lot_number_from IS NOT NULL THEN
8739 query_str := query_str || 'AND lot_number >= :lot_f ';
8740 END IF;
8741
8742 IF p_lot_number_to IS NOT NULL THEN
8743 query_str := query_str || 'AND lot_number <= :lot_t ';
8744 END IF;
8745
8746 IF p_cost_group_id IS NOT NULL THEN
8747 query_str := query_str || 'AND cost_group_id = :cg_id ';
8748 END IF;
8749
8750 IF p_revision IS NOT NULL THEN
8751 query_str := query_str || 'AND revision = :rev ';
8752 END IF;
8753
8754 IF p_serial_number IS NOT NULL THEN
8755 query_str := query_str || 'AND (serial_number = :serial_n) ';
8756 END IF;
8757
8758 IF p_serial_number_from IS NOT NULL THEN
8759 query_str := query_str || 'AND serial_number >= :serial_f ';
8760 END IF;
8761
8762 IF p_serial_number_to IS NOT NULL THEN
8763 query_str := query_str || 'AND serial_number <= :serial_t ';
8764 END IF;
8765
8766 IF p_containerized = 1 THEN
8767 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
8768 ELSIF p_containerized = 2 THEN
8769 query_str := query_str || 'AND containerized_flag = 1 ';
8770 END IF;
8771
8772 IF p_inventory_item_id IS NOT NULL THEN
8773 query_str := query_str || 'AND inventory_item_id = :item_id ';
8774 END IF;
8775
8776 IF p_locator_controlled = 1 THEN
8777 query_str := query_str || 'AND locator_id IS NULL ';
8778 ELSIF p_locator_controlled = 2 THEN
8779 query_str := query_str || 'AND locator_id IS NOT NULL ';
8780 END IF;
8781
8782 IF p_locator_id IS NOT NULL THEN
8783 query_str := query_str || 'AND locator_id = :loc_id ';
8784 END IF;
8785
8786 IF p_subinventory_code IS NOT NULL THEN
8787 query_str := query_str || 'AND subinventory_code = :sub ';
8788 END IF;
8789
8790 --ER(3338592) Changes
8791 IF p_item_description IS NOT NULL THEN
8792 query_str := query_str || ' AND item_description LIKE :item_description ';
8793 END IF;
8794 --ER(3338592) Changes
8795
8796 IF p_organization_id IS NOT NULL THEN
8797 query_str := query_str || 'AND organization_id = :org_id ';
8798 END IF;
8799
8800 IF p_project_id IS NOT NULL THEN
8801 query_str := query_str || ' AND project_id = :pr_id ';
8802 END IF;
8803
8804 IF p_task_id IS NOT NULL THEN
8805 query_str := query_str || ' AND task_id = :ta_id ';
8806 END IF;
8807
8808 IF p_unit_number IS NOT NULL THEN
8809 query_str := query_str || ' AND unit_number=:un_id ';
8810 END IF;
8811
8812 /*IF p_site_id IS NOT NULL THEN
8813 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8814 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
8815 ELSIF p_vendor_id is NOT NULL THEN
8816 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8817 query_str := query_str || ' AND planning_organization_id in ';
8818 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
8819 query_str := query_str || ' where vendor_id = :vendor_id )';
8820 END IF;*/
8821 IF (p_owning_qry_mode = 4) THEN
8822 query_str := query_str || ' AND owning_organization_id = :own_org ';
8823 query_str := query_str || ' AND owning_tp_type = 2 ';
8824 ELSIF(p_owning_qry_mode = 3) THEN
8825 query_str := query_str || ' AND owning_organization_id = :own_org ';
8826 query_str := query_str || ' AND owning_tp_type = 1 ';
8827 ELSIF(p_owning_qry_mode = 2) THEN
8828 query_str := query_str || ' AND owning_tp_type = 1 ';
8829 END IF;
8830
8831 IF (p_planning_query_mode = 4) THEN
8832 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8833 query_str := query_str || ' AND planning_tp_type = 2 ';
8834 ELSIF(p_planning_query_mode = 3) THEN
8835 query_str := query_str || ' AND planning_organization_id = :plan_org ';
8836 query_str := query_str || ' AND planning_tp_type = 1 ';
8837 ELSIF(p_planning_query_mode = 2) THEN
8838 query_str := query_str || ' AND planning_tp_type = 1 ';
8839 END IF;
8840
8841 query_str := query_str || ') GROUP BY item, revision ';
8842 query_str := query_str || 'ORDER BY revision ';
8843 ELSIF(p_lpn_from IS NOT NULL
8844 OR p_lpn_to IS NOT NULL
8845 OR p_parent_lpn_id IS NOT NULL
8846 OR(NVL(p_prepacked, 1) <> 1)) THEN
8847 IF p_sub_type = 2 THEN
8848 table_required := ' mtl_onhand_lpn_mwb_v mol ';
8849 ELSIF(p_status_id IS NULL) THEN
8850 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
8851 table_required := ' mtl_onhand_lpn_mwb_v mol ';
8852 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
8853 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
8854 END IF; -- NSRIVAST, INVCONV
8855 ELSE
8856 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
8857 END IF;
8858 ELSE
8859 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
8860 table_required := ' mtl_onhand_lpn_v mol ';
8861 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
8862 table_required := ' mtl_onhand_new_lpn_v mol '; -- NSRIVAST, INVCONV
8863 END IF; -- NSRIVAST, INVCONV
8864 ELSE
8865 table_required := ' mtl_onhand_new_lpn_v mol ';
8866 END IF;
8867 END IF;
8868
8869 query_str := 'SELECT item, revision ';
8870 query_str := query_str || 'FROM ' || table_required;
8871
8872 IF (p_lpn_from IS NOT NULL
8873 OR p_lpn_to IS NOT NULL)
8874 AND p_parent_lpn_id IS NULL THEN
8875 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
8876 query_str := query_str || ' WHERE 1=1 ';
8877
8878 IF p_sub_type = 2 THEN
8879 query_str := query_str || ' AND lpn_context = 3 ';
8880 ELSIF p_prepacked IS NULL THEN
8881 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 )';
8882 ELSIF p_prepacked = 1 THEN
8883 query_str := query_str || 'AND lpn_context = 1 ';
8884 ELSIF p_prepacked <> 1
8885 AND p_prepacked <> 999 THEN
8886 query_str := query_str || 'AND lpn_context = :prepacked ';
8887 END IF;
8888
8889 IF p_locator_id IS NOT NULL THEN
8890 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
8891 END IF;
8892
8893 -- NSRIVAST, INVCONV, Start
8894 IF p_grade_from IS NOT NULL THEN
8895 query_str := query_str || ' AND grade_code = :grade_f ' ;
8896 END IF ;
8897 IF p_grade_code IS NOT NULL THEN
8898 query_str := query_str || ' AND grade_code = :grade_c ' ;
8899 END IF ;
8900 -- NSRIVAST, INVCONV, End
8901
8902 IF p_subinventory_code IS NOT NULL THEN
8903 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
8904 END IF;
8905
8906 IF p_organization_id IS NOT NULL THEN
8907 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
8908 END IF;
8909
8910 IF p_lpn_from IS NOT NULL
8911 OR p_lpn_to IS NOT NULL THEN
8912 IF p_lpn_from IS NOT NULL
8913 AND p_lpn_to IS NULL THEN
8914 query_str := query_str || ' and license_plate_number >= :lpn_f ';
8915 ELSIF p_lpn_from IS NULL
8916 AND p_lpn_to IS NOT NULL THEN
8917 query_str := query_str || ' and license_plate_number <= :lpn_t ';
8918 ELSIF p_lpn_from IS NOT NULL
8919 AND p_lpn_to IS NOT NULL THEN
8920 --bugfix#3646484
8921 IF (p_lpn_from = p_lpn_to) THEN
8922 --User is querying for single LPN so converted the range query to equality query
8923 query_str := query_str || 'and license_plate_number = :lpn_f ';
8924 ELSE
8925 query_str := query_str || ' and license_plate_number >= :lpn_f ';
8926 query_str := query_str || ' and license_plate_number <= :lpn_t ';
8927 END IF;
8928 END IF;
8929 END IF;
8930
8931 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
8932 END IF;
8933
8934 IF p_lot_attr_query IS NULL
8935 AND p_serial_attr_query IS NULL THEN
8936 query_str := query_str || 'WHERE 1=1 ';
8937 ELSIF p_lot_attr_query IS NULL
8938 AND p_serial_attr_query IS NOT NULL THEN
8939 query_str :=
8940 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
8941 || ') msn ';
8942 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
8943 ELSIF p_lot_attr_query IS NOT NULL
8944 AND p_serial_attr_query IS NULL THEN
8945 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
8946 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
8947 ELSIF p_lot_attr_query IS NOT NULL
8948 AND p_serial_attr_query IS NOT NULL THEN
8949 query_str :=
8950 query_str
8951 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
8952 || p_lot_attr_query
8953 || ') mln '
8954 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
8955 || p_serial_attr_query
8956 || ') msn ';
8957 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
8958 query_str := query_str || 'AND msn.serial_num = serial_number ';
8959 END IF;
8960
8961 IF p_project_id IS NOT NULL THEN
8962 query_str := query_str || ' AND project_id = :pr_id ';
8963 END IF;
8964
8965 IF p_task_id IS NOT NULL THEN
8966 query_str := query_str || ' AND task_id = :ta_id ';
8967 END IF;
8968
8969 IF p_unit_number IS NOT NULL THEN
8970 query_str := query_str || ' AND unit_number=:un_id ';
8971 END IF;
8972
8973 -- NSRIVAST, INVCONV, Start
8974 IF p_grade_from IS NOT NULL THEN
8975 query_str := query_str || ' AND grade_code = :grade_f ' ;
8976 END IF ;
8977 IF p_grade_code IS NOT NULL THEN
8978 query_str := query_str || ' AND grade_code = :grade_c ' ;
8979 END IF ;
8980 -- NSRIVAST, INVCONV, End
8981
8982 /*IF p_site_id IS NOT NULL THEN
8983 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8984 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
8985 ELSIF p_vendor_id is NOT NULL THEN
8986 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
8987 query_str := query_str || ' AND planning_organization_id in ';
8988 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
8989 query_str := query_str || ' where vendor_id = :vendor_id )';
8990 END IF;*/
8991 IF (p_owning_qry_mode = 4) THEN
8992 query_str := query_str || ' AND owning_organization_id = :own_org ';
8993 query_str := query_str || ' AND owning_tp_type = 2 ';
8994 ELSIF(p_owning_qry_mode = 3) THEN
8995 query_str := query_str || ' AND owning_organization_id = :own_org ';
8996 query_str := query_str || ' AND owning_tp_type = 1 ';
8997 ELSIF(p_owning_qry_mode = 2) THEN
8998 query_str := query_str || ' AND owning_tp_type = 1 ';
8999 END IF;
9000
9001 IF (p_planning_query_mode = 4) THEN
9002 query_str := query_str || ' AND planning_organization_id = :plan_org ';
9003 query_str := query_str || ' AND planning_tp_type = 2 ';
9004 ELSIF(p_planning_query_mode = 3) THEN
9005 query_str := query_str || ' AND planning_organization_id = :plan_org ';
9006 query_str := query_str || ' AND planning_tp_type = 1 ';
9007 ELSIF(p_planning_query_mode = 2) THEN
9008 query_str := query_str || ' AND planning_tp_type = 1 ';
9009 END IF;
9010
9011 IF p_status_id IS NOT NULL THEN
9012 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
9013 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id OR :st_id IS NULL) ';
9014 END IF;
9015
9016 IF p_lot_number IS NOT NULL THEN
9017 query_str := query_str || 'AND lot_number = :lot_n ';
9018 END IF;
9019
9020 IF p_lot_number_from IS NOT NULL THEN
9021 query_str := query_str || 'AND lot_number >= :lot_f ';
9022 END IF;
9023
9024 IF p_lot_number_to IS NOT NULL THEN
9025 query_str := query_str || 'AND lot_number <= :lot_t ';
9026 END IF;
9027
9028 IF p_cost_group_id IS NOT NULL THEN
9029 query_str := query_str || 'AND cost_group_id = :cg_id ';
9030 END IF;
9031
9032 IF p_revision IS NOT NULL THEN
9033 query_str := query_str || 'AND revision = :rev ';
9034 END IF;
9035
9036 IF p_serial_number IS NOT NULL THEN
9037 query_str := query_str || 'AND serial_number = :serial_n ';
9038 END IF;
9039
9040 IF p_serial_number_from IS NOT NULL THEN
9041 query_str := query_str || 'AND serial_number >= :serial_f ';
9042 END IF;
9043
9044 IF p_serial_number_to IS NOT NULL THEN
9045 query_str := query_str || 'AND serial_number <= :serial_t ';
9046 END IF;
9047
9048 IF p_sub_type = 2 THEN
9049 query_str := query_str || ' AND lpn_context = 3 ';
9050 ELSIF p_prepacked IS NULL THEN
9051 query_str := query_str || ' AND (lpn_context=1 OR lpn_context=9 OR lpn_context=11 ) ';
9052 ELSIF p_prepacked = 1 THEN
9053 query_str := query_str || 'AND lpn_context = 1 ';
9054 ELSIF p_prepacked <> 1
9055 AND p_prepacked <> 999 THEN
9056 query_str := query_str || 'AND lpn_context = :prepacked ';
9057 END IF;
9058
9059 IF p_parent_lpn_id IS NOT NULL THEN
9060 query_str := query_str || 'AND MOL.lpn_id = :plpn_id ';
9061 END IF;
9062
9063 IF p_lpn_from IS NOT NULL
9064 OR p_lpn_to IS NOT NULL THEN
9065 query_str := query_str || 'AND MOL.outermost_lpn_id = X.outermost_lpn_id ';
9066 END IF;
9067
9068 IF p_inventory_item_id IS NOT NULL THEN
9069 query_str := query_str || 'AND inventory_item_id = :item_id ';
9070 END IF;
9071
9072 IF (p_locator_controlled = 2) THEN
9073 query_str := query_str || 'AND locator_id IS not NULL ';
9074 ELSIF(p_locator_controlled = 1) THEN
9075 query_str := query_str || 'AND locator_id IS NULL ';
9076 END IF;
9077
9078 IF p_locator_id IS NOT NULL THEN
9079 query_str := query_str || 'AND locator_id = :loc_id ';
9080 END IF;
9081
9082 --ER(3338592) Changes
9083 IF p_item_description IS NOT NULL THEN
9084 query_str := query_str || ' AND item_description LIKE :item_description ';
9085 END IF;
9086 --ER(3338592) Changes
9087
9088 IF p_subinventory_code IS NOT NULL THEN
9089 query_str := query_str || 'AND subinventory_code = :sub ';
9090 END IF;
9091
9092 IF p_organization_id IS NOT NULL THEN
9093 query_str := query_str || 'AND organization_id = :org_id ';
9094 END IF;
9095
9096 query_str := query_str || 'GROUP BY item, revision ';
9097 query_str := query_str || 'ORDER BY revision ';
9098 END IF;
9099 inv_trx_util_pub.trace(query_str, 'Add_revs :- Material Workbench', 9);
9100 --trace1(query_str, 'add_revs', 9);
9101
9102 query_hdl := DBMS_SQL.open_cursor;
9103 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
9104
9105 IF p_organization_id IS NOT NULL THEN
9106 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
9107 END IF;
9108
9109 IF p_subinventory_code IS NOT NULL THEN
9110 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
9111 END IF;
9112
9113 IF p_locator_id IS NOT NULL THEN
9114 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
9115 END IF;
9116
9117 IF p_inventory_item_id IS NOT NULL THEN
9118 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
9119 END IF;
9120
9121 IF p_revision IS NOT NULL THEN
9122 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
9123 END IF;
9124
9125 IF p_cost_group_id IS NOT NULL THEN
9126 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
9127 END IF;
9128
9129 IF p_lot_number_from IS NOT NULL THEN
9130 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
9131 END IF;
9132
9133 IF p_lot_number_to IS NOT NULL THEN
9134 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
9135 END IF;
9136
9137 -- NSRIVAST, INVCONV, Start
9138 IF p_grade_from IS NOT NULL THEN
9139 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
9140 END IF;
9141 IF p_grade_code IS NOT NULL THEN
9142 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
9143 END IF;
9144 -- NSRIVAST, INVCONV, End
9145
9146 IF p_lot_number IS NOT NULL THEN
9147 DBMS_SQL.bind_variable(query_hdl, 'lot_n', p_lot_number);
9148 END IF;
9149
9150 IF p_serial_number_from IS NOT NULL THEN
9151 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
9152 END IF;
9153
9154 IF p_serial_number_to IS NOT NULL THEN
9155 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
9156 END IF;
9157
9158 IF p_serial_number IS NOT NULL THEN
9159 DBMS_SQL.bind_variable(query_hdl, 'serial_n', p_serial_number);
9160 END IF;
9161
9162 --bugfix#3646484
9163 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
9164 --User is querying for single LPN so converted the range query to equality query
9165 --So it is enought to bind the from lpn alone
9166 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
9167 ELSE
9168 IF p_lpn_from IS NOT NULL THEN
9169 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
9170 END IF;
9171
9172 IF p_lpn_to IS NOT NULL THEN
9173 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
9174 END IF;
9175 END IF;
9176
9177 IF p_parent_lpn_id IS NOT NULL THEN
9178 DBMS_SQL.bind_variable(query_hdl, 'plpn_id', p_parent_lpn_id);
9179 END IF;
9180
9181 IF p_status_id IS NOT NULL THEN
9182 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
9183 END IF;
9184
9185 IF p_prepacked <> 1
9186 AND p_prepacked <> 999
9187 AND p_prepacked IS NOT NULL THEN
9188 DBMS_SQL.bind_variable(query_hdl, 'prepacked', p_prepacked);
9189 END IF;
9190
9191 IF p_mln_context_code IS NOT NULL THEN
9192 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
9193 END IF;
9194
9195 IF p_project_id IS NOT NULL THEN
9196 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
9197 END IF;
9198
9199 IF p_task_id IS NOT NULL THEN
9200 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
9201 END IF;
9202
9203 IF p_unit_number IS NOT NULL THEN
9204 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
9205 END IF;
9206
9207 /*IF p_site_id IS NOT NULL THEN
9208 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
9209 ELSIF p_vendor_id is NOT NULL THEN
9210 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
9211 END IF;*/
9212 IF (p_owning_qry_mode = 4)
9213 OR(p_owning_qry_mode = 3) THEN
9214 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
9215 END IF;
9216
9217 IF (p_planning_query_mode = 4)
9218 OR(p_planning_query_mode = 3) THEN
9219 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
9220 END IF;
9221
9222 --ER(3338592) Changes
9223 IF p_item_description IS NOT NULL THEN
9224 /* Fix for bug #3457285
9225 Following line has been removed.
9226 query_str := query_str || ' AND item_description LIKE :item_description ';
9227 Added the following line to bind the item_description value to WHERE clause the query*/
9228 DBMS_SQL.bind_variable(query_hdl,'item_description',p_item_description);
9229 /*End of fix 3457285 */
9230
9231 END IF;
9232 --ER(3338592) Changes
9233
9234 DBMS_SQL.define_column(query_hdl, 1, item, 40);
9235 DBMS_SQL.define_column(query_hdl, 2, rev, 3);
9236 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
9237
9238 LOOP
9239 -- fetch a row
9240 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
9241 -- fetch columns from the row
9242 DBMS_SQL.column_value(query_hdl, 1, item);
9243 DBMS_SQL.column_value(query_hdl, 2, rev);
9244
9245 IF j >= p_node_low_value AND
9246 rev IS NOT NULL THEN
9247 x_node_tbl(i).state := p_node_state;
9248 x_node_tbl(i).DEPTH := 1;
9249 x_node_tbl(i).label := item || '-' || rev;
9250 x_node_tbl(i).icon := 'inv_revi';
9251 x_node_tbl(i).VALUE := rev;
9252 x_node_tbl(i).TYPE := 'REV';
9253 i := i + 1;
9254 END IF;
9255
9256 EXIT WHEN j >= p_node_high_value;
9257 j := j + 1;
9258 ELSE
9259 EXIT;
9260 END IF;
9261 END LOOP;
9262
9263 DBMS_SQL.close_cursor(query_hdl); -- close cursor
9264 x_node_value := j;
9265 x_tbl_index := i;
9266 EXCEPTION
9267 WHEN NO_DATA_FOUND THEN
9268 NULL;
9269 WHEN OTHERS THEN
9270 RAISE;
9271 END add_revs;
9272
9273 PROCEDURE add_lots(
9274 p_organization_id IN NUMBER DEFAULT NULL
9275 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
9276 , p_locator_id IN NUMBER DEFAULT NULL
9277 , p_locator_controlled IN NUMBER DEFAULT 0
9278 , p_inventory_item_id IN NUMBER DEFAULT NULL
9279 , p_revision IN VARCHAR2 DEFAULT NULL
9280 , p_revision_controlled IN NUMBER DEFAULT 0
9281 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
9282 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
9283 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
9284 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
9285 , p_serial_number IN VARCHAR2 DEFAULT NULL
9286 , p_serial_controlled IN NUMBER DEFAULT 0
9287 , p_lpn_from IN VARCHAR2 DEFAULT NULL
9288 , p_lpn_to IN VARCHAR2 DEFAULT NULL
9289 , p_parent_lpn_id IN VARCHAR2 DEFAULT NULL
9290 , p_containerized IN NUMBER DEFAULT 0
9291 , p_prepacked IN NUMBER DEFAULT NULL --Bug #3581090
9292 , p_cost_group_id IN NUMBER DEFAULT NULL
9293 , p_status_id IN NUMBER DEFAULT NULL
9294 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
9295 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
9296 , p_project_id IN NUMBER DEFAULT NULL
9297 , p_task_id IN NUMBER DEFAULT NULL
9298 , p_unit_number IN VARCHAR2 DEFAULT NULL
9299 , -- consinged changes
9300 p_owning_qry_mode IN NUMBER DEFAULT NULL
9301 , p_planning_query_mode IN NUMBER DEFAULT NULL
9302 , p_owning_org IN NUMBER DEFAULT NULL
9303 , p_planning_org IN NUMBER DEFAULT NULL
9304 , -- consigned changes
9305 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
9306 , p_only_lot_status IN NUMBER DEFAULT 1
9307 , p_node_state IN NUMBER
9308 , p_node_high_value IN NUMBER
9309 , p_node_low_value IN NUMBER
9310 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
9311 --ER(3338592) Changes
9312 , p_item_description IN VARCHAR2 DEFAULT NULL
9313 --ER(3338592) Changes
9314 , x_node_value IN OUT NOCOPY NUMBER
9315 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
9316 , x_tbl_index IN OUT NOCOPY NUMBER
9317 -- NSRIVAST, INVCONV, Start
9318 , p_grade_from IN VARCHAR2 DEFAULT NULL
9319
9320 , p_grade_code IN VARCHAR2 DEFAULT NULL
9321 , p_grade_controlled IN NUMBER DEFAULT 0
9322 -- NSRIVAST, INVCONV, End
9323 ) IS
9324 query_str VARCHAR2(10000);
9325 query_hdl NUMBER;
9326 rows_processed NUMBER;
9327 lot mtl_onhand_quantities.lot_number%TYPE;
9328 lot_control NUMBER;
9329 i NUMBER := x_tbl_index;
9330 j NUMBER := x_node_value;
9331 table_required VARCHAR2(300);
9332 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
9333 BEGIN
9334 -- NSRIVAST, INVCONV, Start
9335 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
9336 is_grade_t := TRUE ;
9337 END IF ;
9338 -- NSRIVAST, INVCONV, End
9339 -- Exit out of the procedure if the item is not lot controlled
9340 IF p_organization_id IS NOT NULL
9341 AND p_inventory_item_id IS NOT NULL THEN
9342 SELECT lot_control_code
9343 INTO lot_control
9344 FROM mtl_system_items
9345 WHERE organization_id = p_organization_id
9346 AND inventory_item_id = p_inventory_item_id;
9347
9348 IF lot_control = 1 THEN
9349 RETURN;
9350 END IF;
9351 END IF;
9352
9353 IF (
9354 p_serial_number_from IS NULL
9355 AND p_serial_number_to IS NULL
9356 AND p_serial_number IS NULL
9357 AND p_unit_number IS NULL
9358 AND p_status_id IS NULL
9359 AND p_lpn_from IS NULL
9360 AND p_lpn_to IS NULL
9361 AND p_parent_lpn_id IS NULL
9362 AND NVL(p_prepacked,1) = 1
9363 AND p_serial_attr_query IS NULL
9364 ) THEN
9365 IF p_sub_type = 2 THEN
9366 table_required := ' mtl_rcv_mwb_onhand_v ';
9367 ELSIF(p_status_id IS NULL) THEN
9368 table_required := ' mtl_onhand_total_mwb_v ';
9369 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
9370 table_required := ' mtl_onhand_total_v '; -- NSRIVAST, INVCONV
9371 END IF; -- NSRIVAST, INVCONV
9372 ELSE
9373 table_required := ' mtl_onhand_total_v ';
9374 END IF;
9375
9376 IF p_lot_attr_query IS NULL THEN
9377 query_str := query_str || 'SELECT lot_number from ' || table_required;
9378 query_str := query_str || 'WHERE 1=1 ';
9379 ELSE
9380 query_str :=
9381 query_str
9382 || 'SELECT lot_number from'
9383 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
9384 || p_lot_attr_query
9385 || ') mln, '
9386 || table_required;
9387 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
9388 END IF;
9389
9390 IF p_project_id IS NOT NULL THEN
9391 query_str := query_str || ' AND project_id = :pr_id ';
9392 END IF;
9393
9394 IF p_task_id IS NOT NULL THEN
9395 query_str := query_str || ' AND task_id = :ta_id ';
9396 END IF;
9397
9398 -- NSRIVAST, INVCONV, Start
9399 IF p_grade_from IS NOT NULL THEN
9400 query_str := query_str || ' AND grade_code = :grade_f ' ;
9401 END IF ;
9402 IF p_grade_code IS NOT NULL THEN
9403 query_str := query_str || ' AND grade_code = :grade_c ' ;
9404 END IF ;
9405 -- NSRIVAST, INVCONV, End
9406
9407 /*IF p_site_id IS NOT NULL THEN
9408 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
9409 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
9410 ELSIF p_vendor_id is NOT NULL THEN
9411 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
9412 query_str := query_str || ' AND planning_organization_id in ';
9413 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
9414 query_str := query_str || ' where vendor_id = :vendor_id )';
9415 END IF;*/
9416 IF (p_owning_qry_mode = 4) THEN
9417 query_str := query_str || ' AND owning_organization_id = :own_org ';
9418 query_str := query_str || ' AND owning_tp_type = 2 ';
9419 ELSIF(p_owning_qry_mode = 3) THEN
9420 query_str := query_str || ' AND owning_organization_id = :own_org ';
9421 query_str := query_str || ' AND owning_tp_type = 1 ';
9422 ELSIF(p_owning_qry_mode = 2) THEN
9423 query_str := query_str || ' AND owning_tp_type = 1 ';
9424 END IF;
9425
9426 IF (p_planning_query_mode = 4) THEN
9427 query_str := query_str || ' AND planning_organization_id = :plan_org ';
9428 query_str := query_str || ' AND planning_tp_type = 2 ';
9429 ELSIF(p_planning_query_mode = 3) THEN
9430 query_str := query_str || ' AND planning_organization_id = :plan_org ';
9431 query_str := query_str || ' AND planning_tp_type = 1 ';
9432 ELSIF(p_planning_query_mode = 2) THEN
9433 query_str := query_str || ' AND planning_tp_type = 1 ';
9434 END IF;
9435
9436 IF p_status_id IS NOT NULL THEN
9437 IF p_only_lot_status = 1 THEN
9438 query_str := query_str || 'AND (subinventory_status_id = :st_id or ';
9439 query_str := query_str || 'locator_status_id = :st_id or lot_status_id = :st_id) ';
9440 ELSE
9441 query_str := query_str || 'AND lot_status_id = :st_id ';
9442 END IF;
9443 END IF;
9444
9445 IF p_lot_number_from IS NOT NULL THEN
9446 query_str := query_str || 'AND lot_number >= :lot_f ';
9447 END IF;
9448
9449 IF p_lot_number_to IS NOT NULL THEN
9450 query_str := query_str || 'AND lot_number <= :lot_t ';
9451 END IF;
9452
9453 IF p_cost_group_id IS NOT NULL THEN
9454 query_str := query_str || 'AND cost_group_id = :cg_id ';
9455 END IF;
9456
9457 IF p_revision_controlled = 1 THEN
9458 query_str := query_str || 'AND revision IS NULL ';
9459 ELSIF p_revision_controlled = 2 THEN
9460 query_str := query_str || 'AND revision IS NOT NULL ';
9461 END IF;
9462
9463 IF p_revision IS NOT NULL THEN
9464 query_str := query_str || 'AND revision = :rev ';
9465 END IF;
9466
9467 IF p_serial_controlled = 1 THEN
9468 --query_str := query_str || 'AND serial_number_control_code in (1,6) ';
9469 query_str := query_str || 'AND item_serial_control in (1,6) ';
9470 ELSIF p_serial_controlled = 2 THEN
9471 --query_str := query_str || 'AND serial_number_control_code in (2,5) ';
9472 query_str := query_str || 'AND item_serial_control in (2,5) ';
9473 END IF;
9474
9475 IF p_containerized = 1 THEN
9476 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
9477 ELSIF p_containerized = 2 THEN
9478 query_str := query_str || 'AND containerized_flag = 1 ';
9479 END IF;
9480
9481 IF p_inventory_item_id IS NOT NULL THEN
9482 query_str := query_str || 'AND inventory_item_id = :item_id ';
9483 END IF;
9484
9485 IF p_locator_controlled = 1 THEN
9486 query_str := query_str || 'AND locator_id IS NULL ';
9487 ELSIF p_locator_controlled = 2 THEN
9488 query_str := query_str || 'AND locator_id IS NOT NULL ';
9489 END IF;
9490
9491 IF p_locator_id IS NOT NULL THEN
9492 query_str := query_str || 'AND locator_id = :loc_id ';
9493 END IF;
9494
9495 --ER(3338592) Changes
9496 IF p_item_description IS NOT NULL THEN
9497 query_str := query_str || ' AND item_description LIKE :item_description ';
9498 END IF;
9499 --ER(3338592) Changes
9500
9501 IF p_subinventory_code IS NOT NULL THEN
9502 query_str := query_str || 'AND subinventory_code = :sub ';
9503 END IF;
9504
9505 IF p_organization_id IS NOT NULL THEN
9506 query_str := query_str || 'AND organization_id = :org_id ';
9507 END IF;
9508
9509 query_str := query_str || ' AND lot_number is not null ';
9510
9511 query_str := query_str || 'GROUP BY lot_number ';
9512 query_str := query_str || 'ORDER BY lot_number ';
9513 ELSIF(
9514 (
9515 p_serial_number_from IS NOT NULL
9516 OR p_serial_number_from IS NOT NULL
9517 OR p_serial_number IS NOT NULL
9518 OR p_serial_controlled = 2
9519 OR p_serial_attr_query IS NOT NULL
9520 OR p_unit_number IS NOT NULL
9521 )
9522 AND p_lpn_from IS NULL
9523 AND p_lpn_to IS NULL
9524 AND p_parent_lpn_id IS NULL
9525 AND nvl(p_prepacked,1) = 1
9526 ) THEN
9527 IF p_sub_type = 2 THEN
9528 table_required := ' mtl_rcv_serial_oh_v ';
9529 ELSIF(p_status_id IS NULL) THEN
9530 table_required := ' mtl_onhand_serial_mwb_v ';
9531 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
9532 table_required := ' mtl_onhand_serial_v '; -- NSRIVAST, INVCONV
9533 END IF; -- NSRIVAST, INVCONV
9534 ELSE
9535 table_required := ' mtl_onhand_serial_v ';
9536 END IF;
9537
9538 IF p_lot_attr_query IS NULL
9539 AND p_serial_attr_query IS NULL THEN
9540 query_str := query_str || 'SELECT lot_number from ' || table_required;
9541 query_str := query_str || 'WHERE 1=1 ';
9542 ELSIF p_lot_attr_query IS NULL
9543 AND p_serial_attr_query IS NOT NULL THEN
9544 query_str :=
9545 query_str
9546 || 'SELECT lot_number from'
9547 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
9548 || p_serial_attr_query
9549 || ') msn, '
9550 || table_required;
9551 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
9552 ELSIF p_lot_attr_query IS NOT NULL
9553 AND p_serial_attr_query IS NULL THEN
9554 query_str :=
9555 query_str
9556 || 'SELECT lot_number from'
9557 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
9558 || p_lot_attr_query
9559 || ') mln, '
9560 || table_required;
9561 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
9562 ELSIF p_lot_attr_query IS NOT NULL
9563 AND p_serial_attr_query IS NOT NULL THEN
9564 query_str :=
9565 query_str
9566 || 'SELECT lot_number from'
9567 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
9568 || p_lot_attr_query
9569 || ') mln, '
9570 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
9571 || p_serial_attr_query
9572 || ') msn, '
9573 || table_required;
9574 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
9575 query_str := query_str || 'AND msn.serial_num = serial_number ';
9576 END IF;
9577
9578 IF p_project_id IS NOT NULL THEN
9579 query_str := query_str || ' AND project_id = :pr_id ';
9580 END IF;
9581
9582 IF p_task_id IS NOT NULL THEN
9583 query_str := query_str || ' AND task_id = :ta_id ';
9584 END IF;
9585
9586 IF p_unit_number IS NOT NULL THEN
9587 query_str := query_str || ' AND unit_number=:un_id ';
9588 END IF;
9589
9590 -- NSRIVAST, INVCONV, Start
9591 IF p_grade_from IS NOT NULL THEN
9592 query_str := query_str || ' AND grade_code = :grade_f ' ;
9593 END IF ;
9594 IF p_grade_code IS NOT NULL THEN
9595 query_str := query_str || ' AND grade_code = :grade_c ' ;
9596 END IF ;
9597 -- NSRIVAST, INVCONV, End
9598
9599 /*IF p_site_id IS NOT NULL THEN
9600 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
9601 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
9602 ELSIF p_vendor_id is NOT NULL THEN
9603 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
9604 query_str := query_str || ' AND planning_organization_id in ';
9605 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
9606 query_str := query_str || ' where vendor_id = :vendor_id )';
9607 END IF;*/
9608 IF (p_owning_qry_mode = 4) THEN
9609 query_str := query_str || ' AND owning_organization_id = :own_org ';
9610 query_str := query_str || ' AND owning_tp_type = 2 ';
9611 ELSIF(p_owning_qry_mode = 3) THEN
9612 query_str := query_str || ' AND owning_organization_id = :own_org ';
9613 query_str := query_str || ' AND owning_tp_type = 1 ';
9614 ELSIF(p_owning_qry_mode = 2) THEN
9615 query_str := query_str || ' AND owning_tp_type = 1 ';
9616 END IF;
9617
9618 IF (p_planning_query_mode = 4) THEN
9619 query_str := query_str || ' AND planning_organization_id = :plan_org ';
9620 query_str := query_str || ' AND planning_tp_type = 2 ';
9621 ELSIF(p_planning_query_mode = 3) THEN
9622 query_str := query_str || ' AND planning_organization_id = :plan_org ';
9623 query_str := query_str || ' AND planning_tp_type = 1 ';
9624 ELSIF(p_planning_query_mode = 2) THEN
9625 query_str := query_str || ' AND planning_tp_type = 1 ';
9626 END IF;
9627
9628 IF p_status_id IS NOT NULL THEN
9629 IF p_only_lot_status = 1 THEN
9630 query_str := query_str || ' AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
9631 query_str := query_str || ' lot_status_id = :st_id or serial_status_id = :st_id) ';
9632 ELSE
9633 query_str := query_str || ' AND (lot_status_id = :st_id or :st_id IS NULL) ';
9634 END IF;
9635 END IF;
9636
9637 IF p_lot_number_from IS NOT NULL THEN
9638 query_str := query_str || 'AND lot_number >= :lot_f ';
9639 END IF;
9640
9641 IF p_lot_number_to IS NOT NULL THEN
9642 query_str := query_str || 'AND lot_number <= :lot_t ';
9643 END IF;
9644
9645 IF p_cost_group_id IS NOT NULL THEN
9646 query_str := query_str || 'AND cost_group_id = :cg_id ';
9647 END IF;
9648
9649 IF p_revision_controlled = 1 THEN
9650 query_str := query_str || 'AND revision IS NULL ';
9651 ELSIF p_revision_controlled = 2 THEN
9652 query_str := query_str || 'AND revision IS NOT NULL ';
9653 END IF;
9654
9655 IF p_revision IS NOT NULL THEN
9656 query_str := query_str || 'AND revision = :rev ';
9657 END IF;
9658
9659 IF p_serial_number IS NOT NULL THEN
9660 query_str := query_str || 'AND (serial_number = :serial_n) ';
9661 END IF;
9662
9663 IF p_serial_number_from IS NOT NULL THEN
9664 query_str := query_str || 'AND serial_number >= :serial_f ';
9665 END IF;
9666
9667 IF p_serial_number_to IS NOT NULL THEN
9668 query_str := query_str || 'AND serial_number <= :serial_t ';
9669 END IF;
9670
9671 IF p_containerized = 1 THEN
9672 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
9673 ELSIF p_containerized = 2 THEN
9674 query_str := query_str || 'AND containerized_flag = 1 ';
9675 END IF;
9676
9677 IF p_inventory_item_id IS NOT NULL THEN
9678 query_str := query_str || 'AND inventory_item_id = :item_id ';
9679 END IF;
9680
9681 IF p_locator_controlled = 1 THEN
9682 query_str := query_str || 'AND locator_id IS NULL ';
9683 ELSIF p_locator_controlled = 2 THEN
9684 query_str := query_str || 'AND locator_id IS NOT NULL ';
9685 END IF;
9686
9687 IF p_locator_id IS NOT NULL THEN
9688 query_str := query_str || 'AND locator_id = :loc_id ';
9689 END IF;
9690
9691 --ER(3338592) Changes
9692 IF p_item_description IS NOT NULL THEN
9693 query_str := query_str || ' AND item_description LIKE :item_description ';
9694 END IF;
9695 --ER(3338592) Changes
9696
9697 IF p_subinventory_code IS NOT NULL THEN
9698 query_str := query_str || 'AND subinventory_code = :sub ';
9699 END IF;
9700
9701 IF p_organization_id IS NOT NULL THEN
9702 query_str := query_str || 'AND organization_id = :org_id ';
9703 END IF;
9704
9705 query_str := query_str || ' AND lot_number is not null ';
9706
9707 query_str := query_str || 'GROUP BY lot_number ';
9708 query_str := query_str || 'ORDER BY lot_number ';
9709 --Need to query both mtl_onhand_total_v and mtl_onhand_serial_v
9710 ELSIF(
9711 p_serial_number_from IS NULL
9712 AND p_serial_number_to IS NULL
9713 AND p_serial_number IS NULL
9714 AND p_serial_attr_query IS NULL
9715 AND p_unit_number IS NULL
9716 AND p_status_id IS NOT NULL
9717 AND p_lpn_from IS NULL
9718 AND p_lpn_to IS NULL
9719 AND p_parent_lpn_id IS NULL
9720 AND nvl(p_prepacked,1) = 1
9721 ) THEN
9722 IF (p_status_id IS NULL) THEN
9723 table_required := ' mtl_onhand_total_mwb_v moq ';
9724 -- ELSIF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
9725 -- table_required := ' mtl_onhand_new_lpn_v moq '; -- NSRIVAST, INVCONV
9726 ELSE
9727 table_required := ' mtl_onhand_total_v moq ';
9728 END IF;
9729
9730 query_str := 'SELECT lot_number from( ';
9731
9732 IF p_lot_attr_query IS NULL THEN
9733 query_str := query_str || 'SELECT lot_number from ' || table_required;
9734 query_str := query_str || 'WHERE 1=1 ';
9735 ELSE
9736 query_str :=
9737 query_str
9738 || 'SELECT lot_number from'
9739 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
9740 || p_lot_attr_query
9741 || ') mln, '
9742 || table_required;
9743 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
9744 END IF;
9745
9746 IF p_project_id IS NOT NULL THEN
9747 query_str := query_str || ' AND project_id = :pr_id ';
9748 END IF;
9749
9750 IF p_task_id IS NOT NULL THEN
9751 query_str := query_str || ' AND task_id = :ta_id ';
9752 END IF;
9753
9754 -- NSRIVAST, INVCONV, Start
9755 IF p_grade_from IS NOT NULL THEN
9756 query_str := query_str || ' AND grade_code = :grade_f ' ;
9757 END IF ;
9758 IF p_grade_code IS NOT NULL THEN
9759 query_str := query_str || ' AND grade_code = :grade_c ' ;
9760 END IF ;
9761 -- NSRIVAST, INVCONV, End
9762
9763 /*IF p_site_id IS NOT NULL THEN
9764 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
9765 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
9766 ELSIF p_vendor_id is NOT NULL THEN
9767 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
9768 query_str := query_str || ' AND planning_organization_id in ';
9769 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
9770 query_str := query_str || ' where vendor_id = :vendor_id )';
9771 END IF;*/
9772 IF (p_owning_qry_mode = 4) THEN
9773 query_str := query_str || ' AND owning_organization_id = :own_org ';
9774 query_str := query_str || ' AND owning_tp_type = 2 ';
9775 ELSIF(p_owning_qry_mode = 3) THEN
9776 query_str := query_str || ' AND owning_organization_id = :own_org ';
9777 query_str := query_str || ' AND owning_tp_type = 1 ';
9778 ELSIF(p_owning_qry_mode = 2) THEN
9779 query_str := query_str || ' AND owning_tp_type = 1 ';
9780 END IF;
9781
9782 IF (p_planning_query_mode = 4) THEN
9783 query_str := query_str || ' AND planning_organization_id = :plan_org ';
9784 query_str := query_str || ' AND planning_tp_type = 2 ';
9785 ELSIF(p_planning_query_mode = 3) THEN
9786 query_str := query_str || ' AND planning_organization_id = :plan_org ';
9787 query_str := query_str || ' AND planning_tp_type = 1 ';
9788 ELSIF(p_planning_query_mode = 2) THEN
9789 query_str := query_str || ' AND planning_tp_type = 1 ';
9790 END IF;
9791
9792 IF p_status_id IS NOT NULL THEN
9793 IF p_only_lot_status = 1 THEN
9794 query_str := query_str || 'AND (subinventory_status_id = :st_id or ';
9795 query_str := query_str || 'locator_status_id = :st_id or lot_status_id = :st_id) ';
9796 ELSE
9797 query_str := query_str || 'AND lot_status_id = :st_id ';
9798 END IF;
9799 END IF;
9800
9801 IF p_lot_number_from IS NOT NULL THEN
9802 query_str := query_str || 'AND lot_number >= :lot_f ';
9803 END IF;
9804
9805 IF p_lot_number_to IS NOT NULL THEN
9806 query_str := query_str || 'AND lot_number <= :lot_t ';
9807 END IF;
9808
9809 IF p_cost_group_id IS NOT NULL THEN
9810 query_str := query_str || 'AND cost_group_id = :cg_id ';
9811 END IF;
9812
9813 IF p_revision_controlled = 1 THEN
9814 query_str := query_str || 'AND revision IS NULL ';
9815 ELSIF p_revision_controlled = 2 THEN
9816 query_str := query_str || 'AND revision IS NOT NULL ';
9817 END IF;
9818
9819 IF p_revision IS NOT NULL THEN
9820 query_str := query_str || 'AND revision = :rev ';
9821 END IF;
9822
9823 IF p_containerized = 1 THEN
9824 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
9825 ELSIF p_containerized = 2 THEN
9826 query_str := query_str || 'AND containerized_flag = 1 ';
9827 END IF;
9828
9829 -- query_str := query_str || 'AND serial_number_control_code in (1,6) ';
9830 query_str :=
9831 query_str
9832 || ' AND exists '
9833 || ' ( select null from mtl_system_items msi WHERE '
9834 || ' moq.organization_id = msi.organization_id and '
9835 || ' moq.inventory_item_id = msi.inventory_item_id and '
9836 || ' item_serial_control in (1,6) ) ';
9837
9838 IF p_inventory_item_id IS NOT NULL THEN
9839 query_str := query_str || 'AND inventory_item_id = :item_id ';
9840 END IF;
9841
9842 IF p_locator_controlled = 1 THEN
9843 query_str := query_str || 'AND locator_id IS NULL ';
9844 ELSIF p_locator_controlled = 2 THEN
9845 query_str := query_str || 'AND locator_id IS NOT NULL ';
9846 END IF;
9847
9848 IF p_locator_id IS NOT NULL THEN
9849 query_str := query_str || 'AND locator_id = :loc_id ';
9850 END IF;
9851
9852 --ER(3338592) Changes
9853 IF p_item_description IS NOT NULL THEN
9854 query_str := query_str || ' AND item_description LIKE :item_description ';
9855 END IF;
9856 --ER(3338592) Changes
9857
9858 IF p_subinventory_code IS NOT NULL THEN
9859 query_str := query_str || 'AND subinventory_code = :sub ';
9860 END IF;
9861
9862 IF p_organization_id IS NOT NULL THEN
9863 query_str := query_str || 'AND organization_id = :org_id ';
9864 END IF;
9865
9866 query_str := query_str || 'UNION ';
9867
9868 IF (p_status_id IS NULL) THEN
9869 table_required := ' mtl_onhand_serial_mwb_v ';
9870 ELSE
9871 table_required := ' mtl_onhand_serial_v ';
9872 END IF;
9873
9874 IF p_lot_attr_query IS NULL
9875 AND p_serial_attr_query IS NULL THEN
9876 query_str := query_str || 'SELECT lot_number from ' || table_required;
9877 query_str := query_str || 'WHERE 1=1 ';
9878 ELSIF p_lot_attr_query IS NOT NULL
9879 AND p_serial_attr_query IS NULL THEN
9880 query_str :=
9881 query_str
9882 || 'SELECT lot_number from'
9883 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
9884 || p_lot_attr_query
9885 || ') mln, '
9886 || table_required;
9887 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
9888 END IF;
9889
9890 IF p_status_id IS NOT NULL THEN
9891 IF p_only_lot_status = 1 THEN
9892 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
9893 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
9894 ELSE
9895 query_str := query_str || 'AND (lot_status_id = :st_id or :st_id IS NULL) ';
9896 END IF;
9897 END IF;
9898
9899 IF p_lot_number_from IS NOT NULL THEN
9900 query_str := query_str || 'AND lot_number >= :lot_f ';
9901 END IF;
9902
9903 IF p_lot_number_to IS NOT NULL THEN
9904 query_str := query_str || 'AND lot_number <= :lot_t ';
9905 END IF;
9906
9907 IF p_cost_group_id IS NOT NULL THEN
9908 query_str := query_str || 'AND cost_group_id = :cg_id ';
9909 END IF;
9910
9911 IF p_revision_controlled = 1 THEN
9912 query_str := query_str || 'AND revision IS NULL ';
9913 ELSIF p_revision_controlled = 2 THEN
9914 query_str := query_str || 'AND revision IS NOT NULL ';
9915 END IF;
9916
9917 IF p_revision IS NOT NULL THEN
9918 query_str := query_str || 'AND revision = :rev ';
9919 END IF;
9920
9921 IF p_containerized = 1 THEN
9922 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
9923 ELSIF p_containerized = 2 THEN
9924 query_str := query_str || 'AND containerized_flag = 1 ';
9925 END IF;
9926
9927 IF p_serial_number_from IS NOT NULL THEN
9928 query_str := query_str || 'AND serial_number >= :serial_f ';
9929 END IF;
9930
9931 IF p_serial_number_to IS NOT NULL THEN
9932 query_str := query_str || 'AND serial_number <= :serial_t ';
9933 END IF;
9934
9935 IF p_inventory_item_id IS NOT NULL THEN
9936 query_str := query_str || 'AND inventory_item_id = :item_id ';
9937 END IF;
9938
9939 IF p_locator_controlled = 1 THEN
9940 query_str := query_str || 'AND locator_id IS NULL ';
9941 ELSIF p_locator_controlled = 2 THEN
9942 query_str := query_str || 'AND locator_id IS NOT NULL ';
9943 END IF;
9944
9945 IF p_locator_id IS NOT NULL THEN
9946 query_str := query_str || 'AND locator_id = :loc_id ';
9947 END IF;
9948
9949 --ER(3338592) Changes
9950 IF p_item_description IS NOT NULL THEN
9951 query_str := query_str || ' AND item_description LIKE :item_description ';
9952 END IF;
9953 --ER(3338592) Changes
9954
9955 IF p_subinventory_code IS NOT NULL THEN
9956 query_str := query_str || 'AND subinventory_code = :sub ';
9957 END IF;
9958
9959 IF p_organization_id IS NOT NULL THEN
9960 query_str := query_str || 'AND organization_id = :org_id ';
9961 END IF;
9962
9963 query_str := query_str || ') GROUP BY lot_number ';
9964 query_str := query_str || 'ORDER BY lot_number ';
9965 ELSIF(p_lpn_from IS NOT NULL
9966 OR p_lpn_to IS NOT NULL
9967 OR p_parent_lpn_id IS NOT NULL
9968 OR p_prepacked <> 1) THEN
9969 IF p_sub_type = 2 THEN
9970 table_required := ' mtl_onhand_lpn_mwb_v mol ';
9971 ELSIF(p_status_id IS NULL) THEN
9972 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
9973 table_required := ' mtl_onhand_lpn_mwb_v mol ';
9974 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
9975 table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
9976 END IF; -- NSRIVAST, INVCONV
9977 ELSE
9978 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
9979 IF is_grade_t = TRUE THEN -- %%NSRIVAST, INVCONV
9980 table_required := ' mtl_onhand_new_lpn_v mol '; -- %%NSRIVAST, INVCONV
9981 END IF;
9982 END IF;
9983 ELSE
9984 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
9985 table_required := ' mtl_onhand_lpn_v mol ';
9986 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
9987 table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
9988 END IF; -- NSRIVAST, INVCONV
9989 ELSE
9990 table_required := ' mtl_onhand_new_lpn_v mol ';
9991 END IF;
9992 END IF;
9993
9994 query_str := 'SELECT lot_number ';
9995 query_str := query_str || 'FROM ' || table_required;
9996
9997 IF (p_lpn_from IS NOT NULL
9998 OR p_lpn_to IS NOT NULL)
9999 AND p_parent_lpn_id IS NULL THEN
10000 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
10001 query_str := query_str || ' WHERE 1=1 ';
10002
10003 IF p_sub_type = 2 THEN
10004 query_str := query_str || ' AND lpn_context = 3 ';
10005 ELSIF p_prepacked IS NULL THEN
10006 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 )';
10007 ELSIF p_prepacked = 1 THEN
10008 query_str := query_str || 'AND lpn_context = 1 ';
10009 ELSIF p_prepacked <> 1
10010 AND p_prepacked <> 999
10011 AND p_prepacked IS NOT NULL THEN
10012 query_str := query_str || 'AND lpn_context = :prepacked ';
10013 END IF;
10014
10015 IF p_locator_id IS NOT NULL THEN
10016 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
10017 END IF;
10018
10019 -- NSRIVAST, INVCONV, Start
10020 IF p_grade_from IS NOT NULL THEN
10021 query_str := query_str || ' AND grade_code = :grade_f ' ;
10022 END IF ;
10023 IF p_grade_code IS NOT NULL THEN
10024 query_str := query_str || ' AND grade_code = :grade_c ' ;
10025 END IF ;
10026 -- NSRIVAST, INVCONV, End
10027
10028 IF p_subinventory_code IS NOT NULL THEN
10029 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
10030 END IF;
10031
10032 IF p_organization_id IS NOT NULL THEN
10033 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
10034 END IF;
10035
10036 IF p_lpn_from IS NOT NULL
10037 OR p_lpn_to IS NOT NULL THEN
10038 IF p_lpn_from IS NOT NULL
10039 AND p_lpn_to IS NULL THEN
10040 query_str := query_str || ' and license_plate_number >= :lpn_f ';
10041 ELSIF p_lpn_from IS NULL
10042 AND p_lpn_to IS NOT NULL THEN
10043 query_str := query_str || ' and license_plate_number <= :lpn_t ';
10044 ELSIF p_lpn_from IS NOT NULL
10045 AND p_lpn_to IS NOT NULL THEN
10046 --bugfix#3646484
10047 IF (p_lpn_from = p_lpn_to) THEN
10048 --User is querying for single LPN so converted the range query to equality query
10049 query_str := query_str || 'and license_plate_number = :lpn_f ';
10050 ELSE
10051 query_str := query_str || ' and license_plate_number >= :lpn_f ';
10052 query_str := query_str || ' and license_plate_number <= :lpn_t ';
10053 END IF;
10054 END IF;
10055 END IF;
10056
10057 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
10058 END IF;
10059
10060 IF p_lot_attr_query IS NULL
10061 AND p_serial_attr_query IS NULL THEN
10062 query_str := query_str || 'WHERE 1=1 ';
10063 ELSIF p_lot_attr_query IS NULL
10064 AND p_serial_attr_query IS NOT NULL THEN
10065 query_str :=
10066 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
10067 || ') msn ';
10068 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
10069 ELSIF p_lot_attr_query IS NOT NULL
10070 AND p_serial_attr_query IS NULL THEN
10071 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
10072 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
10073 ELSIF p_lot_attr_query IS NOT NULL
10074 AND p_serial_attr_query IS NOT NULL THEN
10075 query_str :=
10076 query_str
10077 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
10078 || p_lot_attr_query
10079 || ') mln '
10080 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
10081 || p_serial_attr_query
10082 || ') msn ';
10083 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
10084 query_str := query_str || 'AND msn.serial_num = serial_number ';
10085 END IF;
10086
10087 IF p_status_id IS NOT NULL THEN
10088 IF p_only_lot_status = 1 THEN
10089 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
10090 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
10091 ELSE
10092 query_str := query_str || 'AND lot_status_id = :st_id ';
10093 END IF;
10094 END IF;
10095
10096 IF p_project_id IS NOT NULL THEN
10097 query_str := query_str || ' AND project_id = :pr_id ';
10098 END IF;
10099
10100 -- NSRIVAST, INVCONV, Start
10101 IF p_grade_from IS NOT NULL THEN
10102 query_str := query_str || ' AND grade_code = :grade_f ' ;
10103 END IF ;
10104 IF p_grade_code IS NOT NULL THEN
10105 query_str := query_str || ' AND grade_code = :grade_c ' ;
10106 END IF ;
10107 -- NSRIVAST, INVCONV, End
10108
10109 IF p_task_id IS NOT NULL THEN
10110 query_str := query_str || ' AND task_id = :ta_id ';
10111 END IF;
10112
10113 IF p_unit_number IS NOT NULL THEN
10114 query_str := query_str || ' AND unit_number=:un_id ';
10115 END IF;
10116
10117 /*IF p_site_id IS NOT NULL THEN
10118 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
10119 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
10120 ELSIF p_vendor_id is NOT NULL THEN
10121 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
10122 query_str := query_str || ' AND planning_organization_id in ';
10123 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
10124 query_str := query_str || ' where vendor_id = :vendor_id )';
10125 END IF;*/
10126
10127 IF (p_owning_qry_mode = 4) THEN
10128 query_str := query_str || ' AND owning_organization_id = :own_org ';
10129 query_str := query_str || ' AND owning_tp_type = 2 ';
10130 ELSIF(p_owning_qry_mode = 3) THEN
10131 query_str := query_str || ' AND owning_organization_id = :own_org ';
10132 query_str := query_str || ' AND owning_tp_type = 1 ';
10133 ELSIF(p_owning_qry_mode = 2) THEN
10134 query_str := query_str || ' AND owning_tp_type = 1 ';
10135 END IF;
10136
10137 IF (p_planning_query_mode = 4) THEN
10138 query_str := query_str || ' AND planning_organization_id = :plan_org ';
10139 query_str := query_str || ' AND planning_tp_type = 2 ';
10140 ELSIF(p_planning_query_mode = 3) THEN
10141 query_str := query_str || ' AND planning_organization_id = :plan_org ';
10142 query_str := query_str || ' AND planning_tp_type = 1 ';
10143 ELSIF(p_planning_query_mode = 2) THEN
10144 query_str := query_str || ' AND planning_tp_type = 1 ';
10145 END IF;
10146
10147 IF p_lot_number_from IS NOT NULL THEN
10148 query_str := query_str || 'AND lot_number >= :lot_f ';
10149 END IF;
10150
10151 IF p_lot_number_to IS NOT NULL THEN
10152 query_str := query_str || 'AND lot_number <= :lot_t ';
10153 END IF;
10154
10155 IF p_cost_group_id IS NOT NULL THEN
10156 query_str := query_str || 'AND cost_group_id = :cg_id ';
10157 END IF;
10158
10159 IF p_revision_controlled = 1 THEN
10160 query_str := query_str || 'AND revision IS NULL ';
10161 ELSIF p_revision_controlled = 2 THEN
10162 query_str := query_str || 'AND revision IS NOT NULL ';
10163 END IF;
10164
10165 IF p_revision IS NOT NULL THEN
10166 query_str := query_str || 'AND revision = :rev ';
10167 END IF;
10168
10169 IF p_serial_number IS NOT NULL THEN
10170 query_str := query_str || 'AND (serial_number = :serial_n) ';
10171 END IF;
10172
10173 IF p_serial_number_from IS NOT NULL THEN
10174 query_str := query_str || 'AND serial_number >= :serial_f ';
10175 END IF;
10176
10177 IF p_serial_number_to IS NOT NULL THEN
10178 query_str := query_str || 'AND serial_number <= :serial_t ';
10179 END IF;
10180
10181 IF p_serial_controlled = 1 THEN
10182 query_str :=
10183 query_str
10184 || ' AND exists '
10185 || ' ( select null from mtl_system_items msi WHERE '
10186 || ' mol.organization_id = msi.organization_id and '
10187 || ' mol.inventory_item_id = msi.inventory_item_id and '
10188 || ' item_serial_control in (1,6) ) ';
10189 ELSIF p_serial_controlled = 2 THEN
10190 query_str :=
10191 query_str
10192 || ' AND exists '
10193 || ' ( select null from mtl_system_items msi WHERE '
10194 || ' mol.organization_id = msi.organization_id and '
10195 || ' mol.inventory_item_id = msi.inventory_item_id and '
10196 || ' item_serial_control in (2,5) ) ';
10197 END IF;
10198
10199 IF p_sub_type = 2 THEN
10200 query_str := query_str || ' AND lpn_context = 3 ';
10201 ELSIF p_prepacked = 1 THEN
10202 query_str := query_str || 'AND lpn_context = 1 ';
10203 ELSIF p_prepacked <> 1
10204 AND p_prepacked <> 999
10205 AND p_prepacked IS NOT NULL THEN
10206 query_str := query_str || 'AND lpn_context = :prepacked ';
10207 END IF;
10208
10209 IF p_parent_lpn_id IS NOT NULL THEN
10210 query_str := query_str || 'AND MOL.lpn_id = :plpn_id ';
10211 ELSIF p_lpn_from IS NOT NULL
10212 OR p_lpn_to IS NOT NULL THEN
10213 query_str := query_str || 'AND MOL.outermost_lpn_id = X.outermost_lpn_id ';
10214 END IF;
10215
10216 IF p_inventory_item_id IS NOT NULL THEN
10217 query_str := query_str || 'AND inventory_item_id = :item_id ';
10218 END IF;
10219
10220 IF p_locator_controlled = 1 THEN
10221 query_str := query_str || 'AND locator_id IS NULL ';
10222 ELSIF p_locator_controlled = 2 THEN
10223 query_str := query_str || 'AND locator_id IS NOT NULL ';
10224 END IF;
10225
10226 IF p_locator_id IS NOT NULL THEN
10227 query_str := query_str || 'AND locator_id = :loc_id ';
10228 END IF;
10229
10230 --ER(3338592) Changes
10231 IF p_item_description IS NOT NULL THEN
10232 query_str := query_str || ' AND item_description LIKE :item_description ';
10233 END IF;
10234 --ER(3338592) Changes
10235
10236 IF p_subinventory_code IS NOT NULL THEN
10237 query_str := query_str || 'AND subinventory_code = :sub ';
10238 END IF;
10239
10240 IF p_organization_id IS NOT NULL THEN
10241 query_str := query_str || 'AND organization_id = :org_id ';
10242 END IF;
10243
10244 query_str := query_str || 'GROUP BY lot_number ';
10245 query_str := query_str || 'ORDER BY lot_number ';
10246 END IF;
10247
10248 -- Enable this during debugging
10249 inv_trx_util_pub.trace(query_str, 'Add_lot :- Material Workbench', 9);
10250 --trace1(query_str, 'add_lots', 9);
10251
10252 query_hdl := DBMS_SQL.open_cursor;
10253 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
10254
10255 IF p_organization_id IS NOT NULL THEN
10256 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
10257 END IF;
10258
10259 IF p_subinventory_code IS NOT NULL THEN
10260 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
10261 END IF;
10262
10263 IF p_locator_id IS NOT NULL THEN
10264 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
10265 END IF;
10266
10267 IF p_inventory_item_id IS NOT NULL THEN
10268 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
10269 END IF;
10270
10271 IF p_revision IS NOT NULL THEN
10272 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
10273 END IF;
10274
10275 IF p_cost_group_id IS NOT NULL THEN
10276 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
10277 END IF;
10278
10279 IF p_lot_number_from IS NOT NULL THEN
10280 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
10281 END IF;
10282
10283 IF p_lot_number_to IS NOT NULL THEN
10284 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
10285 END IF;
10286
10287 -- NSRIVAST, INVCONV, Start
10288 IF p_grade_from IS NOT NULL THEN
10289 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
10290 END IF;
10291 IF p_grade_code IS NOT NULL THEN
10292 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
10293 END IF;
10294 -- NSRIVAST, INVCONV, End
10295
10296 IF p_serial_number_from IS NOT NULL THEN
10297 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
10298 END IF;
10299
10300 IF p_serial_number_to IS NOT NULL THEN
10301 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
10302 END IF;
10303
10304 IF p_serial_number IS NOT NULL THEN
10305 DBMS_SQL.bind_variable(query_hdl, 'serial_n', p_serial_number);
10306 END IF;
10307
10308 --bugfix#3646484
10309 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
10310 --User is querying for single LPN so converted the range query to equality query
10311 --So it is enought to bind the from lpn alone
10312 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
10313 ELSE
10314 IF p_lpn_from IS NOT NULL THEN
10315 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
10316 END IF;
10317
10318 IF p_lpn_to IS NOT NULL THEN
10319 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
10320 END IF;
10321 END IF;
10322
10323 IF p_parent_lpn_id IS NOT NULL THEN
10324 DBMS_SQL.bind_variable(query_hdl, 'plpn_id', p_parent_lpn_id);
10325 END IF;
10326
10327 IF p_status_id IS NOT NULL THEN
10328 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
10329 END IF;
10330
10331 IF p_prepacked <> 1
10332 AND p_prepacked <> 999
10333 AND p_prepacked IS NOT NULL THEN
10334 DBMS_SQL.bind_variable(query_hdl, 'prepacked', p_prepacked);
10335 END IF;
10336
10337 IF p_mln_context_code IS NOT NULL THEN
10338 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
10339 END IF;
10340
10341 IF p_project_id IS NOT NULL THEN
10342 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
10343 END IF;
10344
10345 IF p_task_id IS NOT NULL THEN
10346 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
10347 END IF;
10348
10349 IF p_unit_number IS NOT NULL THEN
10350 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
10351 END IF;
10352
10353 /*IF p_site_id IS NOT NULL THEN
10354 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
10355 ELSIF p_vendor_id is NOT NULL THEN
10356 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
10357 END IF;*/
10358 IF (p_owning_qry_mode = 4)
10359 OR(p_owning_qry_mode = 3) THEN
10360 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
10361 END IF;
10362
10363 IF (p_planning_query_mode = 4)
10364 OR(p_planning_query_mode = 3) THEN
10365 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
10366 END IF;
10367
10368 --ER(3338592) Changes
10369 IF p_item_description IS NOT NULL THEN
10370 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
10371 END IF;
10372
10373 DBMS_SQL.define_column(query_hdl, 1, lot, 80);
10374 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
10375
10376 LOOP
10377 -- fetch a row
10378 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
10379 -- fetch columns from the row
10380 DBMS_SQL.column_value(query_hdl, 1, lot);
10381
10382 IF j >= p_node_low_value THEN
10383 x_node_tbl(i).state := p_node_state;
10384 x_node_tbl(i).DEPTH := 1;
10385 x_node_tbl(i).label := lot;
10386 x_node_tbl(i).icon := 'inv_lott';
10387 x_node_tbl(i).VALUE := lot;
10388 x_node_tbl(i).TYPE := 'LOT';
10389 i := i + 1;
10390 END IF;
10391
10392 EXIT WHEN j >= p_node_high_value;
10393 j := j + 1;
10394 ELSE
10395 EXIT;
10396 END IF;
10397 END LOOP;
10398
10399 DBMS_SQL.close_cursor(query_hdl); -- close cursor
10400 x_node_value := j;
10401 x_tbl_index := i;
10402 EXCEPTION
10403 WHEN NO_DATA_FOUND THEN
10404 NULL;
10405 WHEN OTHERS THEN
10406 RAISE;
10407 END add_lots;
10408
10409 PROCEDURE add_serials(
10410 p_organization_id IN NUMBER DEFAULT NULL
10411 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
10412 , p_locator_id IN NUMBER DEFAULT NULL
10413 , p_locator_controlled IN NUMBER DEFAULT 0
10414 , p_inventory_item_id IN NUMBER DEFAULT NULL
10415 , p_revision IN VARCHAR2 DEFAULT NULL
10416 , p_revision_controlled IN NUMBER DEFAULT 0
10417 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
10418 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
10419 , p_lot_number IN VARCHAR2 DEFAULT NULL
10420 , p_lot_controlled IN NUMBER DEFAULT 0
10421 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
10422 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
10423 , p_lpn_from IN VARCHAR2 DEFAULT NULL
10424 , p_lpn_to IN VARCHAR2 DEFAULT NULL
10425 , p_parent_lpn_id IN VARCHAR2 DEFAULT NULL
10426 , p_containerized IN NUMBER DEFAULT 0
10427 , p_prepacked IN NUMBER DEFAULT NULL --Bug #3581090
10428 , p_cost_group_id IN NUMBER DEFAULT NULL
10429 , p_status_id IN NUMBER DEFAULT NULL
10430 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
10431 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
10432 , p_project_id IN NUMBER DEFAULT NULL
10433 , p_task_id IN NUMBER DEFAULT NULL
10434 , p_unit_number IN VARCHAR2 DEFAULT NULL
10435 , -- consinged changes
10436 p_owning_qry_mode IN NUMBER DEFAULT NULL
10437 , p_planning_query_mode IN NUMBER DEFAULT NULL
10438 , p_owning_org IN NUMBER DEFAULT NULL
10439 , p_planning_org IN NUMBER DEFAULT NULL
10440 , -- consigned changes
10441 p_serial_attr_query IN VARCHAR2 DEFAULT NULL
10442 , p_only_serial_status IN NUMBER DEFAULT 1
10443 , p_node_state IN NUMBER
10444 , p_node_high_value IN NUMBER
10445 , p_node_low_value IN NUMBER
10446 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
10447 --ER(3338592) Changes
10448 , p_item_description IN VARCHAR2 DEFAULT NULL
10449 --ER(3338592) Changes
10450 , x_node_value IN OUT NOCOPY NUMBER
10451 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
10452 , x_tbl_index IN OUT NOCOPY NUMBER
10453 -- NSRIVAST, INVCONV, Start
10454 , p_grade_from IN VARCHAR2 DEFAULT NULL
10455
10456 , p_grade_code IN VARCHAR2 DEFAULT NULL
10457 , p_grade_controlled IN NUMBER DEFAULT 0
10458 -- NSRIVAST, INVCONV, End
10459 ) IS
10460 query_str VARCHAR2(10000);
10461 query_hdl NUMBER;
10462 rows_processed NUMBER;
10463 serial mtl_serial_numbers.serial_number%TYPE;
10464 serial_control NUMBER;
10465 i NUMBER := x_tbl_index;
10466 j NUMBER := x_node_value;
10467 table_required VARCHAR2(300);
10468 is_grade_t BOOLEAN DEFAULT FALSE ; -- NSRIVAST, INVCONV
10469 BEGIN
10470
10471 -- NSRIVAST, INVCONV, Start
10472 IF (p_grade_from IS NOT NULL OR p_grade_code IS NOT NULL OR p_grade_controlled <> 0) THEN
10473 is_grade_t := TRUE ;
10474 END IF ;
10475 -- NSRIVAST, INVCONV, End
10476
10477 -- Exit out of the procedure if the item is not serial controlled
10478 IF p_organization_id IS NOT NULL
10479 AND p_inventory_item_id IS NOT NULL THEN
10480 SELECT serial_number_control_code
10481 INTO serial_control
10482 FROM mtl_system_items
10483 WHERE organization_id = p_organization_id
10484 AND inventory_item_id = p_inventory_item_id;
10485
10486 IF serial_control IN(1, 6) THEN
10487 RETURN;
10488 END IF;
10489 END IF;
10490
10491 IF (p_lpn_from IS NULL
10492 AND p_lpn_to IS NULL
10493 AND p_parent_lpn_id IS NULL
10494 AND nvl(p_prepacked,1) = 1) THEN
10495 IF p_sub_type = 2 THEN
10496 table_required := ' mtl_rcv_serial_oh_v ';
10497 ELSIF(p_status_id IS NULL) THEN
10498 table_required := ' mtl_onhand_serial_mwb_v ';
10499 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
10500 table_required := ' mtl_onhand_serial_v '; -- NSRIVAST, INVCONV
10501 END IF; -- NSRIVAST, INVCONV
10502 ELSE
10503 table_required := ' mtl_onhand_serial_v ';
10504 END IF;
10505
10506 IF p_lot_attr_query IS NULL
10507 AND p_serial_attr_query IS NULL THEN
10508 query_str := query_str || 'SELECT serial_number from ' || table_required;
10509 query_str := query_str || ' WHERE 1=1 ';
10510 ELSIF p_lot_attr_query IS NULL
10511 AND p_serial_attr_query IS NOT NULL THEN
10512 query_str :=
10513 query_str
10514 || 'SELECT serial_number from'
10515 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
10516 || p_serial_attr_query
10517 || ') msn, '
10518 || table_required;
10519 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
10520 ELSIF p_lot_attr_query IS NOT NULL
10521 AND p_serial_attr_query IS NULL THEN
10522 query_str :=
10523 query_str
10524 || 'SELECT serial_number from'
10525 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
10526 || p_lot_attr_query
10527 || ') mln, mtl_onhand_serial_v ';
10528 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
10529 ELSIF p_lot_attr_query IS NOT NULL
10530 AND p_serial_attr_query IS NOT NULL THEN
10531 query_str :=
10532 query_str
10533 || 'SELECT serial_number from'
10534 || '(SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
10535 || p_lot_attr_query
10536 || ') mln, '
10537 || '(SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
10538 || p_serial_attr_query
10539 || ') msn, mtl_onhand_serial_v ';
10540 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
10541 query_str := query_str || 'AND msn.serial_num = serial_number ';
10542 END IF;
10543
10544 IF p_status_id IS NOT NULL THEN
10545 IF p_only_serial_status = 1 THEN
10546 query_str := query_str || 'AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
10547 query_str := query_str || 'lot_status_id = :st_id or serial_status_id = :st_id) ';
10548 ELSE
10549 query_str := query_str || 'AND serial_status_id = :st_id ';
10550 END IF;
10551 END IF;
10552
10553 IF p_lot_controlled = 1 THEN
10554 query_str := query_str || 'AND lot_number IS NULL ';
10555 ELSIF p_lot_controlled = 2 THEN
10556 query_str := query_str || 'AND lot_number IS NOT NULL ';
10557 END IF;
10558
10559 IF p_lot_number IS NOT NULL THEN
10560 query_str := query_str || 'AND lot_number = :lot_n ';
10561 END IF;
10562
10563 IF p_lot_number_from IS NOT NULL THEN
10564 query_str := query_str || 'AND lot_number >= :lot_f ';
10565 END IF;
10566
10567 IF p_lot_number_to IS NOT NULL THEN
10568 query_str := query_str || 'AND lot_number <= :lot_t ';
10569 END IF;
10570
10571 IF p_cost_group_id IS NOT NULL THEN
10572 query_str := query_str || 'AND cost_group_id = :cg_id ';
10573 END IF;
10574
10575 -- NSRIVAST, INVCONV, Start
10576 IF p_grade_from IS NOT NULL THEN
10577 query_str := query_str || ' AND grade_code = :grade_f ' ;
10578 END IF ;
10579 IF p_grade_code IS NOT NULL THEN
10580 query_str := query_str || ' AND grade_code = :grade_c ' ;
10581 END IF ;
10582 -- NSRIVAST, INVCONV, End
10583
10584 IF p_revision_controlled = 1 THEN
10585 query_str := query_str || 'AND revision IS NULL ';
10586 ELSIF p_revision_controlled = 2 THEN
10587 query_str := query_str || 'AND revision IS NOT NULL ';
10588 END IF;
10589
10590 IF p_revision IS NOT NULL THEN
10591 query_str := query_str || 'AND revision = :rev ';
10592 END IF;
10593
10594 IF p_containerized = 1 THEN
10595 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
10596 ELSIF p_containerized = 2 THEN
10597 query_str := query_str || 'AND containerized_flag = 1 ';
10598 END IF;
10599
10600 IF p_serial_number_from IS NOT NULL THEN
10601 query_str := query_str || 'AND serial_number >= :serial_f ';
10602 END IF;
10603
10604 IF p_serial_number_to IS NOT NULL THEN
10605 query_str := query_str || 'AND serial_number <= :serial_t ';
10606 END IF;
10607
10608 IF p_inventory_item_id IS NOT NULL THEN
10609 query_str := query_str || 'AND inventory_item_id = :item_id ';
10610 END IF;
10611
10612 IF p_locator_controlled = 1 THEN
10613 query_str := query_str || 'AND locator_id IS NULL ';
10614 /* part of bug fix 2424304 */
10615 -- ELSE
10616 ELSIF p_locator_controlled = 2 THEN
10617 /* end of bug fix 2424304 */
10618 query_str := query_str || 'AND locator_id IS NOT NULL ';
10619 END IF;
10620
10621 IF p_locator_id IS NOT NULL THEN
10622 query_str := query_str || 'AND locator_id = :loc_id ';
10623 END IF;
10624
10625 --ER(3338592) Changes
10626 IF p_item_description IS NOT NULL THEN
10627 query_str := query_str || ' AND item_description LIKE :item_description ';
10628 END IF;
10629 --ER(3338592) Changes
10630
10631 IF p_subinventory_code IS NOT NULL THEN
10632 query_str := query_str || 'AND subinventory_code = :sub ';
10633 END IF;
10634
10635 IF p_organization_id IS NOT NULL THEN
10636 query_str := query_str || 'AND organization_id = :org_id ';
10637 END IF;
10638
10639 IF p_project_id IS NOT NULL THEN
10640 query_str := query_str || ' AND project_id = :pr_id ';
10641 END IF;
10642
10643 IF p_task_id IS NOT NULL THEN
10644 query_str := query_str || ' AND task_id = :ta_id ';
10645 END IF;
10646
10647 IF p_unit_number IS NOT NULL THEN
10648 query_str := query_str || ' AND unit_number=:un_id ';
10649 END IF;
10650
10651 /*IF p_site_id IS NOT NULL THEN
10652 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
10653 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
10654 ELSIF p_vendor_id is NOT NULL THEN
10655 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
10656 query_str := query_str || ' AND planning_organization_id in ';
10657 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
10658 query_str := query_str || ' where vendor_id = :vendor_id )';
10659 END IF;*/
10660 IF (p_owning_qry_mode = 4) THEN
10661 query_str := query_str || ' AND owning_organization_id = :own_org ';
10662 query_str := query_str || ' AND owning_tp_type = 2 ';
10663 ELSIF(p_owning_qry_mode = 3) THEN
10664 query_str := query_str || ' AND owning_organization_id = :own_org ';
10665 query_str := query_str || ' AND owning_tp_type = 1 ';
10666 ELSIF(p_owning_qry_mode = 2) THEN
10667 query_str := query_str || ' AND owning_tp_type = 1 ';
10668 END IF;
10669
10670 IF (p_planning_query_mode = 4) THEN
10671 query_str := query_str || ' AND planning_organization_id = :plan_org ';
10672 query_str := query_str || ' AND planning_tp_type = 2 ';
10673 ELSIF(p_planning_query_mode = 3) THEN
10674 query_str := query_str || ' AND planning_organization_id = :plan_org ';
10675 query_str := query_str || ' AND planning_tp_type = 1 ';
10676 ELSIF(p_planning_query_mode = 2) THEN
10677 query_str := query_str || ' AND planning_tp_type = 1 ';
10678 END IF;
10679
10680 query_str := query_str || ' AND serial_number is NOT NULL ';
10681 query_str := query_str || 'GROUP BY serial_number ';
10682 query_str := query_str || 'ORDER BY serial_number ';
10683 ELSIF(p_lpn_from IS NOT NULL
10684 OR p_lpn_to IS NOT NULL
10685 OR p_parent_lpn_id IS NOT NULL
10686 OR p_prepacked <> 1) THEN
10687 IF p_sub_type = 2 THEN
10688 table_required := ' mtl_onhand_lpn_mwb_v mol ';
10689 ELSIF(p_status_id IS NULL) THEN
10690 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
10691 table_required := ' mtl_onhand_lpn_mwb_v mol ';
10692 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
10693 table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
10694 END IF; -- NSRIVAST, INVCONV
10695 ELSE
10696 table_required := ' mtl_onhand_new_lpn_mwb_v mol ';
10697 END IF;
10698 ELSE
10699 IF (p_prepacked <> 1) AND (p_prepacked <> 9) AND (p_prepacked <> 11) THEN
10700 table_required := ' mtl_onhand_lpn_v mol ';
10701 IF is_grade_t = TRUE THEN -- NSRIVAST, INVCONV
10702 table_required := ' mtl_onhand_new_lpn_v '; -- NSRIVAST, INVCONV
10703 END IF; -- NSRIVAST, INVCONV
10704 ELSE
10705 table_required := ' mtl_onhand_new_lpn_v mol ';
10706 END IF;
10707 END IF;
10708
10709 query_str := 'SELECT serial_number ';
10710 query_str := query_str || 'FROM ' || table_required;
10711
10712 IF (p_lpn_from IS NOT NULL
10713 OR p_lpn_to IS NOT NULL)
10714 AND p_parent_lpn_id IS NULL THEN
10715 query_str := query_str || ', (select outermost_lpn_id from wms_license_plate_numbers wlpn ';
10716 query_str := query_str || ' WHERE 1=1 ';
10717
10718 IF p_sub_type = 2 THEN
10719 query_str := query_str || ' AND lpn_context = 3 ';
10720 ELSIF p_prepacked IS NULL THEN
10721 query_str := query_str || ' AND (lpn_context=1 or lpn_context=9 or lpn_context=11 )';
10722 ELSIF nvl(p_prepacked,1) = 1 THEN
10723 query_str := query_str || 'AND lpn_context = 1 ';
10724 ELSIF p_prepacked <> 1
10725 AND p_prepacked <> 999
10726 AND p_prepacked IS NOT NULL THEN
10727 query_str := query_str || 'AND lpn_context = :prepacked ';
10728 END IF;
10729
10730 IF p_locator_id IS NOT NULL THEN
10731 query_str := query_str || 'AND wlpn.locator_id = :loc_id ';
10732 END IF;
10733
10734 -- NSRIVAST, INVCONV, Start
10735 IF p_grade_from IS NOT NULL THEN
10736 query_str := query_str || ' AND grade_code = :grade_f ' ;
10737 END IF ;
10738 IF p_grade_code IS NOT NULL THEN
10739 query_str := query_str || ' AND grade_code = :grade_c ' ;
10740 END IF ;
10741 -- NSRIVAST, INVCONV, End
10742
10743 IF p_subinventory_code IS NOT NULL THEN
10744 query_str := query_str || 'AND wlpn.subinventory_code = :sub ';
10745 END IF;
10746
10747 IF p_organization_id IS NOT NULL THEN
10748 query_str := query_str || 'AND wlpn.organization_id = :org_id ';
10749 END IF;
10750
10751 IF p_lpn_from IS NOT NULL
10752 OR p_lpn_to IS NOT NULL THEN
10753 IF p_lpn_from IS NOT NULL
10754 AND p_lpn_to IS NULL THEN
10755 query_str := query_str || ' and license_plate_number >= :lpn_f ';
10756 ELSIF p_lpn_from IS NULL
10757 AND p_lpn_to IS NOT NULL THEN
10758 query_str := query_str || ' and license_plate_number <= :lpn_t ';
10759 ELSIF p_lpn_from IS NOT NULL
10760 AND p_lpn_to IS NOT NULL THEN
10761 --bugfix#3646484
10762 IF (p_lpn_from = p_lpn_to) THEN
10763 --User is querying for single LPN so converted the range query to equality query
10764 query_str := query_str || 'and license_plate_number = :lpn_f ';
10765 ELSE
10766 query_str := query_str || ' and license_plate_number >= :lpn_f ';
10767 query_str := query_str || ' and license_plate_number <= :lpn_t ';
10768 END IF;
10769 END IF;
10770 END IF;
10771
10772 query_str := query_str || 'group by wlpn.outermost_lpn_id) X ';
10773 END IF;
10774
10775 IF p_lot_attr_query IS NULL
10776 AND p_serial_attr_query IS NULL THEN
10777 query_str := query_str || 'WHERE 1=1 ';
10778 ELSIF p_lot_attr_query IS NULL
10779 AND p_serial_attr_query IS NOT NULL THEN
10780 query_str :=
10781 query_str || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 ' || p_serial_attr_query
10782 || ') msn ';
10783 query_str := query_str || 'WHERE msn.serial_num = serial_number ';
10784 ELSIF p_lot_attr_query IS NOT NULL
10785 AND p_serial_attr_query IS NULL THEN
10786 query_str := query_str || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 ' || p_lot_attr_query || ') mln ';
10787 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
10788 ELSIF p_lot_attr_query IS NOT NULL
10789 AND p_serial_attr_query IS NOT NULL THEN
10790 query_str :=
10791 query_str
10792 || ', (SELECT lot_number lot_num FROM mtl_lot_numbers WHERE 1=1 '
10793 || p_lot_attr_query
10794 || ') mln '
10795 || ', (SELECT serial_number serial_num FROM mtl_serial_numbers WHERE 1=1 '
10796 || p_serial_attr_query
10797 || ') msn ';
10798 query_str := query_str || 'WHERE mln.lot_num = lot_number ';
10799 query_str := query_str || 'AND msn.serial_num = serial_number ';
10800 END IF;
10801
10802 IF p_status_id IS NOT NULL THEN
10803 IF p_only_serial_status = 1 THEN
10804 query_str := query_str || ' AND (subinventory_status_id = :st_id or locator_status_id = :st_id or ';
10805 query_str := query_str || ' lot_status_id = :st_id or serial_status_id = :st_id) ';
10806 ELSE
10807 query_str := query_str || 'AND serial_status_id = :st_id ';
10808 END IF;
10809 END IF;
10810
10811 IF p_lot_controlled = 1 THEN
10812 query_str := query_str || 'AND lot_number IS NULL ';
10813 ELSIF p_lot_controlled = 2 THEN
10814 query_str := query_str || 'AND lot_number IS NOT NULL ';
10815 END IF;
10816
10817 IF p_lot_number IS NOT NULL THEN
10818 query_str := query_str || 'AND lot_number = :lot_n ';
10819 END IF;
10820
10821 IF p_lot_number_from IS NOT NULL THEN
10822 query_str := query_str || 'AND lot_number >= :lot_f ';
10823 END IF;
10824
10825 IF p_lot_number_to IS NOT NULL THEN
10826 query_str := query_str || 'AND lot_number <= :lot_t ';
10827 END IF;
10828
10829 IF p_cost_group_id IS NOT NULL THEN
10830 query_str := query_str || 'AND cost_group_id = :cg_id ';
10831 END IF;
10832
10833 IF p_revision_controlled = 1 THEN
10834 query_str := query_str || 'AND revision IS NULL ';
10835 ELSIF p_revision_controlled = 2 THEN
10836 query_str := query_str || 'AND revision IS NOT NULL ';
10837 END IF;
10838
10839 IF p_revision IS NOT NULL THEN
10840 query_str := query_str || 'AND revision = :rev ';
10841 END IF;
10842
10843 IF p_serial_number_from IS NOT NULL THEN
10844 query_str := query_str || 'AND serial_number >= :serial_f ';
10845 END IF;
10846
10847 IF p_serial_number_to IS NOT NULL THEN
10848 query_str := query_str || 'AND serial_number <= :serial_t ';
10849 END IF;
10850
10851 IF p_sub_type = 2 THEN
10852 query_str := query_str || ' AND lpn_context = 3 ';
10853 ELSIF p_prepacked IS NULL THEN
10854 query_str := query_str || ' AND (lpn_context = 1 or lpn_context = 9 or lpn_context = 11) ';
10855 ELSIF p_prepacked = 1 THEN
10856 query_str := query_str || 'AND lpn_context = 1 ';
10857 ELSIF p_prepacked <> 1
10858 AND p_prepacked <> 999
10859 AND p_prepacked IS NOT NULL THEN
10860 query_str := query_str || 'AND lpn_context = :prepacked ';
10861 END IF;
10862
10863 IF p_parent_lpn_id IS NOT NULL THEN
10864 query_str := query_str || 'AND MOL.lpn_id = :plpn_id ';
10865 END IF;
10866
10867 IF p_lpn_from IS NOT NULL
10868 OR p_lpn_to IS NOT NULL THEN
10869 query_str := query_str || ' AND mol.outermost_lpn_id = x.outermost_lpn_id ';
10870 END IF;
10871
10872 IF p_inventory_item_id IS NOT NULL THEN
10873 query_str := query_str || 'AND inventory_item_id = :item_id ';
10874 END IF;
10875
10876 IF p_locator_controlled = 1 THEN
10877 query_str := query_str || 'AND locator_id IS NULL ';
10878 ELSIF p_locator_controlled = 2 THEN
10879 query_str := query_str || 'AND locator_id IS NOT NULL ';
10880 END IF;
10881
10882 IF p_locator_id IS NOT NULL THEN
10883 query_str := query_str || 'AND locator_id = :loc_id ';
10884 END IF;
10885
10886 --ER(3338592) Changes
10887 IF p_item_description IS NOT NULL THEN
10888 query_str := query_str || ' AND item_description LIKE :item_description ';
10889 END IF;
10890 --ER(3338592) Changes
10891
10892 IF p_subinventory_code IS NOT NULL THEN
10893 query_str := query_str || 'AND subinventory_code = :sub ';
10894 END IF;
10895
10896 IF p_organization_id IS NOT NULL THEN
10897 query_str := query_str || 'AND organization_id = :org_id ';
10898 END IF;
10899
10900 IF p_project_id IS NOT NULL THEN
10901 query_str := query_str || ' AND project_id = :pr_id ';
10902 END IF;
10903
10904 IF p_task_id IS NOT NULL THEN
10905 query_str := query_str || ' AND task_id = :ta_id ';
10906 END IF;
10907
10908 IF p_unit_number IS NOT NULL THEN
10909 query_str := query_str || ' AND unit_number=:un_id ';
10910 END IF;
10911
10912 /*IF p_site_id IS NOT NULL THEN
10913 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
10914 query_str := query_str || ' AND planning_organization_id = :site_id ' ;
10915 ELSIF p_vendor_id is NOT NULL THEN
10916 query_str := query_str || ' AND PLANNING_TP_TYPE = 1 ';
10917 query_str := query_str || ' AND planning_organization_id in ';
10918 query_str := query_str || ' (select vendor_site_id from po_vendor_sites_all ';
10919 query_str := query_str || ' where vendor_id = :vendor_id )';
10920 END IF;*/
10921 IF (p_owning_qry_mode = 4) THEN
10922 query_str := query_str || ' AND owning_organization_id = :own_org ';
10923 query_str := query_str || ' AND owning_tp_type = 2 ';
10924 ELSIF(p_owning_qry_mode = 3) THEN
10925 query_str := query_str || ' AND owning_organization_id = :own_org ';
10926 query_str := query_str || ' AND owning_tp_type = 1 ';
10927 ELSIF(p_owning_qry_mode = 2) THEN
10928 query_str := query_str || ' AND owning_tp_type = 1 ';
10929 END IF;
10930
10931 IF (p_planning_query_mode = 4) THEN
10932 query_str := query_str || ' AND planning_organization_id = :plan_org ';
10933 query_str := query_str || ' AND planning_tp_type = 2 ';
10934 ELSIF(p_planning_query_mode = 3) THEN
10935 query_str := query_str || ' AND planning_organization_id = :plan_org ';
10936 query_str := query_str || ' AND planning_tp_type = 1 ';
10937 ELSIF(p_planning_query_mode = 2) THEN
10938 query_str := query_str || ' AND planning_tp_type = 1 ';
10939 END IF;
10940
10941 query_str := query_str || 'GROUP BY serial_number ';
10942 query_str := query_str || 'ORDER BY serial_number ';
10943 END IF;
10944
10945 inv_trx_util_pub.trace(query_str, 'Add Serails :- Material Workbench', 9);
10946 --trace1(query_str, 'add_serials', 9);
10947
10948
10949 query_hdl := DBMS_SQL.open_cursor;
10950 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
10951
10952 IF p_organization_id IS NOT NULL THEN
10953 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
10954 END IF;
10955
10956 IF p_subinventory_code IS NOT NULL THEN
10957 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
10958 END IF;
10959
10960 IF p_locator_id IS NOT NULL THEN
10961 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
10962 END IF;
10963
10964 IF p_inventory_item_id IS NOT NULL THEN
10965 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
10966 END IF;
10967
10968 IF p_revision IS NOT NULL THEN
10969 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
10970 END IF;
10971
10972 IF p_cost_group_id IS NOT NULL THEN
10973 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
10974 END IF;
10975
10976 IF p_lot_number_from IS NOT NULL THEN
10977 DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
10978 END IF;
10979
10980 IF p_lot_number_to IS NOT NULL THEN
10981 DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
10982 END IF;
10983
10984 IF p_lot_number IS NOT NULL THEN
10985 DBMS_SQL.bind_variable(query_hdl, 'lot_n', p_lot_number);
10986 END IF;
10987
10988 -- NSRIVAST, INVCONV, Start
10989 IF p_grade_from IS NOT NULL THEN
10990 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
10991 END IF;
10992 IF p_grade_code IS NOT NULL THEN
10993 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
10994 END IF;
10995 -- NSRIVAST, INVCONV, End
10996
10997 IF p_serial_number_from IS NOT NULL THEN
10998 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
10999 END IF;
11000
11001 IF p_serial_number_to IS NOT NULL THEN
11002 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
11003 END IF;
11004
11005 --bugfix#3646484
11006 IF ((p_lpn_from IS NOT NULL) AND (p_lpn_to IS NOT NULL) AND (p_lpn_from = p_lpn_to)) THEN
11007 --User is querying for single LPN so converted the range query to equality query
11008 --So it is enought to bind the from lpn alone
11009 dbms_sql.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
11010 ELSE
11011 IF p_lpn_from IS NOT NULL THEN
11012 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
11013 END IF;
11014
11015 IF p_lpn_to IS NOT NULL THEN
11016 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
11017 END IF;
11018 END IF;
11019
11020 IF p_parent_lpn_id IS NOT NULL THEN
11021 DBMS_SQL.bind_variable(query_hdl, 'plpn_id', p_parent_lpn_id);
11022 END IF;
11023
11024 IF p_status_id IS NOT NULL THEN
11025 DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
11026 END IF;
11027
11028 IF p_prepacked <> 1
11029 AND p_prepacked <> 999
11030 AND p_prepacked IS NOT NULL THEN
11031 DBMS_SQL.bind_variable(query_hdl, 'prepacked', p_prepacked);
11032 END IF;
11033
11034 IF p_mln_context_code IS NOT NULL THEN
11035 DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
11036 END IF;
11037
11038 IF p_project_id IS NOT NULL THEN
11039 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
11040 END IF;
11041
11042 IF p_task_id IS NOT NULL THEN
11043 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
11044 END IF;
11045
11046 IF p_unit_number IS NOT NULL THEN
11047 DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
11048 END IF;
11049
11050 /*IF p_site_id IS NOT NULL THEN
11051 dbms_sql.bind_variable(query_hdl,'site_id', p_site_id);
11052 ELSIF p_vendor_id is NOT NULL THEN
11053 dbms_sql.bind_variable(query_hdl,'vendor_id', p_vendor_id);
11054 END IF;*/
11055 IF (p_owning_qry_mode = 4)
11056 OR(p_owning_qry_mode = 3) THEN
11057 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
11058 END IF;
11059
11060 IF (p_planning_query_mode = 4)
11061 OR(p_planning_query_mode = 3) THEN
11062 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
11063 END IF;
11064
11065 --ER(3338592) Changes
11066 IF p_item_description IS NOT NULL THEN
11067 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
11068 END IF;
11069
11070 DBMS_SQL.define_column(query_hdl, 1, serial, 30);
11071 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
11072
11073 LOOP
11074 -- fetch a row
11075 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
11076 -- fetch columns from the row
11077 DBMS_SQL.column_value(query_hdl, 1, serial);
11078
11079 IF j >= p_node_low_value THEN
11080 x_node_tbl(i).state := p_node_state;
11081 x_node_tbl(i).DEPTH := 1;
11082 x_node_tbl(i).label := serial;
11083 x_node_tbl(i).icon := 'inv_seri';
11084 x_node_tbl(i).VALUE := serial;
11085 x_node_tbl(i).TYPE := 'SERIAL';
11086 i := i + 1;
11087 END IF;
11088
11089 EXIT WHEN j >= p_node_high_value;
11090 j := j + 1;
11091 ELSE
11092 EXIT;
11093 END IF;
11094 END LOOP;
11095
11096 DBMS_SQL.close_cursor(query_hdl); -- close cursor
11097 x_node_value := j;
11098 x_tbl_index := i;
11099 EXCEPTION
11100 WHEN NO_DATA_FOUND THEN
11101 NULL;
11102 WHEN OTHERS THEN
11103 RAISE;
11104 END add_serials;
11105
11106
11107 -- NSRIVAST, INVCONV, Start
11108 -- Procedure to give grade nodes for view by Grade
11109 PROCEDURE add_grades
11110 ( p_organization_id IN NUMBER DEFAULT NULL
11111 , p_subinventory_code IN VARCHAR2 DEFAULT NULL
11112 , p_locator_id IN NUMBER DEFAULT NULL
11113 , p_locator_controlled IN NUMBER DEFAULT 0
11114 , p_inventory_item_id IN NUMBER DEFAULT NULL
11115 , p_revision IN VARCHAR2 DEFAULT NULL
11116 , p_revision_controlled IN NUMBER DEFAULT 0
11117 , p_lot_number_from IN VARCHAR2 DEFAULT NULL
11118 , p_lot_number_to IN VARCHAR2 DEFAULT NULL
11119 , p_serial_number_from IN VARCHAR2 DEFAULT NULL
11120 , p_serial_number_to IN VARCHAR2 DEFAULT NULL
11121 , p_serial_number IN VARCHAR2 DEFAULT NULL
11122 , p_grade_from IN VARCHAR2 DEFAULT NULL
11123
11124 , p_grade_code IN VARCHAR2 DEFAULT NULL
11125 , p_serial_controlled IN NUMBER DEFAULT 0
11126 , p_lpn_from IN VARCHAR2 DEFAULT NULL
11127 , p_lpn_to IN VARCHAR2 DEFAULT NULL
11128 , p_parent_lpn_id IN VARCHAR2 DEFAULT NULL
11129 , p_containerized IN NUMBER DEFAULT 0
11130 , p_prepacked IN NUMBER DEFAULT 1
11131 , p_cost_group_id IN NUMBER DEFAULT NULL
11132 , p_status_id IN NUMBER DEFAULT NULL
11133 , p_lot_attr_query IN VARCHAR2 DEFAULT NULL
11134 , p_mln_context_code IN VARCHAR2 DEFAULT NULL
11135 , p_project_id IN NUMBER DEFAULT NULL
11136 , p_task_id IN NUMBER DEFAULT NULL
11137 , p_unit_number IN VARCHAR2 DEFAULT NULL
11138 -- consinged changes
11139 , p_owning_qry_mode IN NUMBER DEFAULT NULL
11140 , p_planning_query_mode IN NUMBER DEFAULT NULL
11141 , p_owning_org IN NUMBER DEFAULT NULL
11142 , p_planning_org IN NUMBER DEFAULT NULL
11143 , p_only_lot_status IN NUMBER DEFAULT 1
11144 -- consinged changes
11145 , p_serial_attr_query IN VARCHAR2 DEFAULT NULL
11146 , p_node_state IN NUMBER
11147 , p_node_high_value IN NUMBER
11148 , p_node_low_value IN NUMBER
11149 , p_sub_type IN NUMBER DEFAULT NULL --RCVLOCATORSSUPPORT
11150 , p_item_description IN VARCHAR2 DEFAULT NULL --ER(3338592) Changes
11151 , p_qty_from IN NUMBER DEFAULT NULL
11152 , p_qty_to IN NUMBER DEFAULT NULL
11153 , p_responsibility_id IN NUMBER DEFAULT NULL
11154 , p_resp_application_id IN NUMBER DEFAULT NULL
11155 , x_node_value IN OUT NOCOPY NUMBER
11156 , x_node_tbl IN OUT NOCOPY fnd_apptree.node_tbl_type
11157 , x_tbl_index IN OUT NOCOPY NUMBER
11158 ) IS
11159
11160 query_str VARCHAR2(10000);
11161 query_hdl NUMBER;
11162 rows_processed NUMBER;
11163 org_id mtl_onhand_quantities.organization_id%TYPE;
11164 org_code mtl_parameters.organization_code%TYPE;
11165 i NUMBER := x_tbl_index;
11166 j NUMBER := x_node_value;
11167 grade_control mtl_system_items.GRADE_CONTROL_FLAG%TYPE ;
11168 table_required VARCHAR2(300);
11169 --ER(3338592) Changes
11170 group_str VARCHAR2(10000) ;
11171 having_str VARCHAR2(10000) := ' HAVING 1=1 ';
11172 --End of ER Changes
11173
11174 grade mtl_grades.grade_code%TYPE ;
11175
11176 BEGIN
11177
11178 -- Exit out of the procedure if the item is not grade controlled
11179 IF p_organization_id IS NOT NULL
11180 AND p_inventory_item_id IS NOT NULL THEN
11181 SELECT DISTINCT grade_control_flag
11182 INTO grade_control
11183 FROM mtl_system_items
11184 WHERE inventory_item_id = p_inventory_item_id;
11185 IF ( grade_control IN ('N','n') ) THEN
11186 RETURN;
11187 END IF;
11188 END IF;
11189
11190 -- query_str := query_str || ' SELECT grade_code from mtl_grades ';
11191 -- query_str := query_str || ' WHERE 1=1 ';
11192
11193 -- Check the parameters on Find window, and build the query accordingly
11194 IF p_serial_number_from IS NULL
11195 AND p_serial_number_to IS NULL
11196 AND p_serial_number IS NULL
11197 AND p_lpn_from IS NULL
11198 AND p_lpn_to IS NULL AND p_prepacked = 1 THEN
11199
11200 IF p_sub_type = 2 THEN
11201 table_required := ' MTL_RCV_MWB_ONHAND_V mv ' ;
11202 ELSE
11203 table_required := ' MTL_ONHAND_TOTAL_V mv ' ;
11204 END IF ;
11205
11206 query_str := query_str || ' SELECT grade_code from ' || table_required;
11207 query_str := query_str || ' WHERE 1=1 ';
11208
11209 IF p_inventory_item_id IS NOT NULL THEN
11210 query_str := query_str || ' AND inventory_item_id = :item_id ';
11211 END IF;
11212 IF p_project_id IS NOT NULL THEN
11213 query_str := query_str || ' AND project_id = :pr_id ';
11214 END IF;
11215 IF p_task_id IS NOT NULL THEN
11216 query_str := query_str || ' AND task_id = :ta_id ';
11217 END IF;
11218 IF (p_owning_qry_mode = 4) THEN
11219 query_str := query_str || ' AND owning_organization_id = :own_org ';
11220 query_str := query_str || ' AND owning_tp_type = 2 ';
11221 ELSIF(p_owning_qry_mode = 3) THEN
11222 query_str := query_str || ' AND owning_organization_id = :own_org ';
11223 query_str := query_str || ' AND owning_tp_type = 1 ';
11224 ELSIF(p_owning_qry_mode = 2) THEN
11225 query_str := query_str || ' AND owning_tp_type = 1 ';
11226 END IF;
11227 IF (p_planning_query_mode = 4) THEN
11228 query_str := query_str || ' AND planning_organization_id = :plan_org ';
11229 query_str := query_str || ' AND planning_tp_type = 2 ';
11230 ELSIF(p_planning_query_mode = 3) THEN
11231 query_str := query_str || ' AND planning_organization_id = :plan_org ';
11232 query_str := query_str || ' AND planning_tp_type = 1 ';
11233 ELSIF(p_planning_query_mode = 2) THEN
11234 query_str := query_str || ' AND planning_tp_type = 1 ';
11235 END IF;
11236 IF p_cost_group_id IS NOT NULL THEN
11237 query_str := query_str || ' AND cost_group_id = :cg_id ';
11238 END IF;
11239 IF p_revision_controlled = 1 THEN
11240 query_str := query_str || ' AND revision IS NULL ';
11241 ELSIF p_revision_controlled = 2 THEN
11242 query_str := query_str || ' AND revision IS NOT NULL ';
11243 END IF;
11244 IF p_revision IS NOT NULL THEN
11245 query_str := query_str || ' AND revision = :rev ';
11246 END IF;
11247
11248 IF p_containerized = 1 THEN
11249 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
11250 ELSIF p_containerized = 2 THEN
11251 query_str := query_str || ' AND containerized_flag = 1 ';
11252 END IF;
11253 IF p_locator_id IS NOT NULL THEN
11254 query_str := query_str || ' AND locator_id = :loc_id ';
11255 END IF;
11256 --ER(3338592) Changes
11257 IF p_item_description IS NOT NULL THEN
11258 query_str := query_str || ' AND item_description LIKE :item_description ';
11259 END IF;
11260 --ER(3338592) Changes
11261 IF p_subinventory_code IS NOT NULL THEN
11262 query_str := query_str || ' AND subinventory_code = :sub ';
11263 END IF;
11264 IF p_serial_controlled = 1 THEN
11265 query_str := query_str || ' AND item_serial_control in (1,6) ';
11266 ELSIF p_serial_controlled = 2 THEN
11267 query_str := query_str || ' AND item_serial_control in (2,5) ';
11268 END IF;
11269
11270 IF p_grade_from IS NOT NULL THEN
11271 query_str := query_str || ' and grade_code = :grade_f ' ;
11272 END IF ;
11273
11274 IF p_grade_code IS NOT NULL THEN
11275 query_str := query_str || ' and grade_code = :grade_c ' ;
11276 END IF ;
11277
11278 query_str := query_str || ' AND grade_code is not null ';
11279
11280 IF p_organization_id IS NOT NULL THEN
11281 query_str := query_str || ' AND organization_id = :org_id ';
11282 ELSE
11283 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
11284 query_str := query_str || ' FROM org_access_view oav ' ;
11285 query_str := query_str || ' WHERE oav.organization_id = mv.organization_id ' ;
11286 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
11287 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
11288 END IF;
11289
11290 query_str := query_str || ' GROUP BY grade_code ';
11291 -- query_str := query_str || ' ) ' ; -- new
11292
11293 ELSIF ((p_serial_number_from IS NOT NULL OR p_serial_number_to IS NOT NULL
11294 OR p_serial_number IS NOT NULL ) AND ( p_lpn_from IS NULL AND p_lpn_to IS NULL )) THEN
11295 IF p_sub_type = 2 THEN
11296 table_required := ' MTL_RCV_SERIAL_MWB_OH_V ms ' ;
11297 ELSE
11298 table_required := ' MTL_ONHAND_SERIAL_V ms ' ;
11299 END IF ;
11300
11301 query_str := query_str || ' SELECT grade_code from ' || table_required;
11302 query_str := query_str || ' WHERE 1=1 ';
11303
11304 IF p_serial_number IS NOT NULL THEN
11305 query_str := query_str || ' AND (serial_number = :serial_n) ';
11306 END IF;
11307 IF p_serial_number_from IS NOT NULL THEN
11308 query_str := query_str || ' AND serial_number >= :serial_f ';
11309 END IF;
11310 IF p_serial_number_to IS NOT NULL THEN
11311 query_str := query_str || ' AND serial_number <= :serial_t ';
11312 END IF;
11313 IF p_inventory_item_id IS NOT NULL THEN
11314 query_str := query_str || ' AND inventory_item_id = :item_id ';
11315 END IF;
11316 IF p_project_id IS NOT NULL THEN
11317 query_str := query_str || ' AND project_id = :pr_id ';
11318 END IF;
11319 IF p_task_id IS NOT NULL THEN
11320 query_str := query_str || ' AND task_id = :ta_id ';
11321 END IF;
11322 IF (p_owning_qry_mode = 4) THEN
11323 query_str := query_str || ' AND owning_organization_id = :own_org ';
11324 query_str := query_str || ' AND owning_tp_type = 2 ';
11325 ELSIF(p_owning_qry_mode = 3) THEN
11326 query_str := query_str || ' AND owning_organization_id = :own_org ';
11327 query_str := query_str || ' AND owning_tp_type = 1 ';
11328 ELSIF(p_owning_qry_mode = 2) THEN
11329 query_str := query_str || ' AND owning_tp_type = 1 ';
11330 END IF;
11331 IF (p_planning_query_mode = 4) THEN
11332 query_str := query_str || ' AND planning_organization_id = :plan_org ';
11333 query_str := query_str || ' AND planning_tp_type = 2 ';
11334 ELSIF(p_planning_query_mode = 3) THEN
11335 query_str := query_str || ' AND planning_organization_id = :plan_org ';
11336 query_str := query_str || ' AND planning_tp_type = 1 ';
11337 ELSIF(p_planning_query_mode = 2) THEN
11338 query_str := query_str || ' AND planning_tp_type = 1 ';
11339 END IF;
11340 IF p_cost_group_id IS NOT NULL THEN
11341 query_str := query_str || ' AND cost_group_id = :cg_id ';
11342 END IF;
11343 IF p_revision_controlled = 1 THEN
11344 query_str := query_str || ' AND revision IS NULL ';
11345 ELSIF p_revision_controlled = 2 THEN
11346 query_str := query_str || ' AND revision IS NOT NULL ';
11347 END IF;
11348 IF p_revision IS NOT NULL THEN
11349 query_str := query_str || ' AND revision = :rev ';
11350 END IF;
11351 IF p_containerized = 1 THEN
11352 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
11353 ELSIF p_containerized = 2 THEN
11354 query_str := query_str || ' AND containerized_flag = 1 ';
11355 END IF;
11356 IF p_locator_id IS NOT NULL THEN
11357 query_str := query_str || ' AND locator_id = :loc_id ';
11358 END IF;
11359 --ER(3338592) Changes
11360 IF p_item_description IS NOT NULL THEN
11361 query_str := query_str || ' AND item_description LIKE :item_description ';
11362 END IF;
11363 --ER(3338592) Changes
11364 IF p_subinventory_code IS NOT NULL THEN
11365 query_str := query_str || ' AND subinventory_code = :sub ';
11366 END IF;
11367 IF p_serial_controlled = 1 THEN
11368 query_str := query_str || 'AND item_serial_control in (1,6) ';
11369 ELSIF p_serial_controlled = 2 THEN
11370 query_str := query_str || ' AND item_serial_control in (2,5) ';
11371 END IF;
11372
11373 IF p_grade_from IS NOT NULL THEN
11374 query_str := query_str || ' AND grade_code = :grade_f ' ;
11375 END IF ;
11376
11377 IF p_grade_code IS NOT NULL THEN
11378 query_str := query_str || ' AND grade_code = :grade_c ' ;
11379 END IF ;
11380
11381 query_str := query_str || ' AND grade_code is not null ';
11382
11383 IF p_organization_id IS NOT NULL THEN
11384 query_str := query_str || ' AND organization_id = :org_id ';
11385 ELSE
11386 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
11387 query_str := query_str || ' FROM org_access_view oav ' ;
11388 query_str := query_str || ' WHERE oav.organization_id = ms.organization_id ' ;
11389 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
11390 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
11391 END IF;
11392
11393 -- query_str := query_str || ' ) ' ; -- new
11394
11395 query_str := query_str || ' GROUP BY grade_code ';
11396
11397 ELSIF ((p_serial_number_from IS NULL AND p_serial_number_to IS NULL AND p_serial_number IS NULL )
11398 AND ( p_lpn_from IS NOT NULL OR p_lpn_to IS NOT NULL ) ) THEN
11399
11400 IF p_sub_type = 2 THEN
11401 table_required := ' MTL_ONHAND_LPN_MWB_V ml ' ;
11402 ELSE
11403 table_required := ' MTL_ONHAND_NEW_LPN_MWB_V ml ' ;
11404 END IF ;
11405
11406 query_str := query_str || ' SELECT grade_code from ' || table_required;
11407 query_str := query_str || ' WHERE 1=1 ';
11408
11409 IF p_inventory_item_id IS NOT NULL THEN
11410 query_str := query_str || 'AND inventory_item_id = :item_id ';
11411 END IF;
11412 IF p_project_id IS NOT NULL THEN
11413 query_str := query_str || ' AND project_id = :pr_id ';
11414 END IF;
11415 IF p_task_id IS NOT NULL THEN
11416 query_str := query_str || ' AND task_id = :ta_id ';
11417 END IF;
11418 IF (p_owning_qry_mode = 4) THEN
11419 query_str := query_str || ' AND owning_organization_id = :own_org ';
11420 query_str := query_str || ' AND owning_tp_type = 2 ';
11421 ELSIF(p_owning_qry_mode = 3) THEN
11422 query_str := query_str || ' AND owning_organization_id = :own_org ';
11423 query_str := query_str || ' AND owning_tp_type = 1 ';
11424 ELSIF(p_owning_qry_mode = 2) THEN
11425 query_str := query_str || ' AND owning_tp_type = 1 ';
11426 END IF;
11427 IF (p_planning_query_mode = 4) THEN
11428 query_str := query_str || ' AND planning_organization_id = :plan_org ';
11429 query_str := query_str || ' AND planning_tp_type = 2 ';
11430 ELSIF(p_planning_query_mode = 3) THEN
11431 query_str := query_str || ' AND planning_organization_id = :plan_org ';
11432 query_str := query_str || ' AND planning_tp_type = 1 ';
11433 ELSIF(p_planning_query_mode = 2) THEN
11434 query_str := query_str || ' AND planning_tp_type = 1 ';
11435 END IF;
11436 IF p_cost_group_id IS NOT NULL THEN
11437 query_str := query_str || ' AND cost_group_id = :cg_id ';
11438 END IF;
11439 IF p_revision_controlled = 1 THEN
11440 query_str := query_str || ' AND revision IS NULL ';
11441 ELSIF p_revision_controlled = 2 THEN
11442 query_str := query_str || ' AND revision IS NOT NULL ';
11443 END IF;
11444 IF p_revision IS NOT NULL THEN
11445 query_str := query_str || ' AND revision = :rev ';
11446 END IF;
11447 IF p_containerized = 1 THEN
11448 query_str := query_str || ' AND (containerized_flag is null or containerized_flag <> 1) ';
11449 ELSIF p_containerized = 2 THEN
11450 query_str := query_str || 'AND containerized_flag = 1 ';
11451 END IF;
11452 IF p_locator_id IS NOT NULL THEN
11453 query_str := query_str || ' AND locator_id = :loc_id ';
11454 END IF;
11455
11456 --ER(3338592) Changes
11457 IF p_item_description IS NOT NULL THEN
11458 query_str := query_str || ' AND item_description LIKE :item_description ';
11459 END IF;
11460 --ER(3338592) Changes
11461 IF p_subinventory_code IS NOT NULL THEN
11462 query_str := query_str || ' AND subinventory_code = :sub ';
11463 END IF;
11464 IF p_serial_controlled = 1 THEN
11465 query_str := query_str || ' AND item_serial_control in (1,6) ';
11466 ELSIF p_serial_controlled = 2 THEN
11467 query_str := query_str || ' AND item_serial_control in (2,5) ';
11468 END IF;
11469 IF p_lpn_from IS NOT NULL OR p_lpn_to IS NOT NULL THEN
11470 IF p_lpn_from IS NOT NULL AND p_lpn_to IS NULL THEN
11471 query_str := query_str || ' AND license_plate_number >= :lpn_f ';
11472 ELSIF p_lpn_from IS NULL AND p_lpn_to IS NOT NULL THEN
11473 query_str := query_str || ' AND license_plate_number <= :lpn_t ';
11474 ELSIF p_lpn_from IS NOT NULL AND p_lpn_to IS NOT NULL THEN
11475 query_str := query_str || ' AND license_plate_number >= :lpn_f ';
11476 query_str := query_str || ' AND license_plate_number <= :lpn_t ';
11477 END IF;
11478 END IF;
11479
11480 IF p_grade_from IS NOT NULL THEN
11481 query_str := query_str || ' AND grade_code = :grade_f ' ;
11482 END IF ;
11483
11484 IF p_grade_code IS NOT NULL THEN
11485 query_str := query_str || ' AND grade_code = :grade_c ' ;
11486 END IF ;
11487
11488 query_str := query_str || ' AND grade_code is not NULL ';
11489
11490 IF p_organization_id IS NOT NULL THEN
11491 query_str := query_str || ' AND organization_id = :org_id ';
11492 ELSE
11493 query_str := query_str || ' and EXISTS ( SELECT 1 ' ;
11494 query_str := query_str || ' FROM org_access_view oav ' ;
11495 query_str := query_str || ' WHERE oav.organization_id = ml.organization_id ' ;
11496 query_str := query_str || ' AND oav.responsibility_id = :responsibility_id ' ;
11497 query_str := query_str || ' AND oav.resp_application_id = :resp_application_id ) ' ;
11498 END IF;
11499
11500 -- query_str := query_str || ' ) ' ; -- new
11501
11502 query_str := query_str || ' GROUP BY grade_code ';
11503
11504 END IF ;
11505
11506 inv_trx_util_pub.trace( query_str, 'Add-Grades Material Workbench', 9);
11507 -- execute the query and populate the node table
11508 query_hdl := DBMS_SQL.open_cursor;
11509 DBMS_SQL.parse(query_hdl, query_str, DBMS_SQL.native);
11510
11511 IF p_grade_from IS NOT NULL THEN
11512 DBMS_SQL.bind_variable(query_hdl, 'grade_f',p_grade_from );
11513 END IF;
11514
11515 IF p_grade_code IS NOT NULL THEN
11516 DBMS_SQL.bind_variable(query_hdl, 'grade_c', p_grade_code);
11517 END IF;
11518 IF p_organization_id IS NOT NULL THEN
11519 DBMS_SQL.bind_variable(query_hdl, 'org_id', p_organization_id);
11520 END IF;
11521 IF p_organization_id IS NULL THEN
11522 IF p_responsibility_id IS NOT NULL THEN
11523 dbms_sql.bind_variable(query_hdl, 'responsibility_id', p_responsibility_id );
11524 END IF;
11525 IF p_resp_application_id IS NOT NULL THEN
11526 dbms_sql.bind_variable(query_hdl, 'resp_application_id', p_resp_application_id );
11527 END IF;
11528 END IF;
11529 IF p_subinventory_code IS NOT NULL THEN
11530 DBMS_SQL.bind_variable(query_hdl, 'sub', p_subinventory_code);
11531 END IF;
11532 IF p_locator_id IS NOT NULL THEN
11533 DBMS_SQL.bind_variable(query_hdl, 'loc_id', p_locator_id);
11534 END IF;
11535 IF p_inventory_item_id IS NOT NULL THEN
11536 DBMS_SQL.bind_variable(query_hdl, 'item_id', p_inventory_item_id);
11537 END IF;
11538 IF p_revision IS NOT NULL THEN
11539 DBMS_SQL.bind_variable(query_hdl, 'rev', p_revision);
11540 END IF;
11541 IF p_cost_group_id IS NOT NULL THEN
11542 DBMS_SQL.bind_variable(query_hdl, 'cg_id', p_cost_group_id);
11543 END IF;
11544 -- IF p_lot_number_from IS NOT NULL THEN
11545 -- DBMS_SQL.bind_variable(query_hdl, 'lot_f', p_lot_number_from);
11546 -- END IF;
11547 -- IF p_lot_number_to IS NOT NULL THEN
11548 -- DBMS_SQL.bind_variable(query_hdl, 'lot_t', p_lot_number_to);
11549 -- END IF;
11550 IF p_serial_number_from IS NOT NULL THEN
11551 DBMS_SQL.bind_variable(query_hdl, 'serial_f', p_serial_number_from);
11552 END IF;
11553 IF p_serial_number_to IS NOT NULL THEN
11554 DBMS_SQL.bind_variable(query_hdl, 'serial_t', p_serial_number_to);
11555 END IF;
11556 IF p_serial_number IS NOT NULL THEN
11557 DBMS_SQL.bind_variable(query_hdl, 'serial_n', p_serial_number);
11558 END IF;
11559 IF p_lpn_from IS NOT NULL THEN
11560 DBMS_SQL.bind_variable(query_hdl, 'lpn_f', p_lpn_from);
11561 END IF;
11562 IF p_lpn_to IS NOT NULL THEN
11563 DBMS_SQL.bind_variable(query_hdl, 'lpn_t', p_lpn_to);
11564 END IF;
11565 -- IF p_parent_lpn_id IS NOT NULL THEN
11566 -- DBMS_SQL.bind_variable(query_hdl, 'plpn_id', p_parent_lpn_id);
11567 -- END IF;
11568 -- IF p_status_id IS NOT NULL THEN
11569 -- DBMS_SQL.bind_variable(query_hdl, 'st_id', p_status_id);
11570 -- END IF;
11571 -- IF p_prepacked <> 1
11572 -- AND p_prepacked <> 999 THEN
11573 -- DBMS_SQL.bind_variable(query_hdl, 'prepacked', p_prepacked);
11574 -- END IF;
11575 -- IF p_mln_context_code IS NOT NULL THEN
11576 -- DBMS_SQL.bind_variable(query_hdl, 'mln_context', p_mln_context_code);
11577 -- END IF;
11578 IF p_project_id IS NOT NULL THEN
11579 DBMS_SQL.bind_variable(query_hdl, 'pr_id', p_project_id);
11580 END IF;
11581 IF p_task_id IS NOT NULL THEN
11582 DBMS_SQL.bind_variable(query_hdl, 'ta_id', p_task_id);
11583 END IF;
11584 -- IF p_unit_number IS NOT NULL THEN
11585 -- DBMS_SQL.bind_variable(query_hdl, 'un_id', p_unit_number);
11586 -- END IF;
11587 IF (p_owning_qry_mode = 4)
11588 OR(p_owning_qry_mode = 3) THEN
11589 DBMS_SQL.bind_variable(query_hdl, 'own_org', p_owning_org);
11590 END IF;
11591 IF (p_planning_query_mode = 4)
11592 OR(p_planning_query_mode = 3) THEN
11593 DBMS_SQL.bind_variable(query_hdl, 'plan_org', p_planning_org);
11594 END IF;
11595 --ER(3338592) Changes
11596 IF p_item_description IS NOT NULL THEN
11597 dbms_sql.bind_variable(query_hdl, 'item_description', p_item_description);
11598 END IF;
11599 DBMS_SQL.define_column(query_hdl, 1, grade, 150);
11600 rows_processed := DBMS_SQL.EXECUTE(query_hdl);
11601
11602 --inv_trx_util_pub.trace( 'Material Workbench rows processed ' || rows_processed, 'Material Workbench', 9);
11603
11604 LOOP
11605 -- fetch a row
11606 IF DBMS_SQL.fetch_rows(query_hdl) > 0 THEN
11607 -- fetch columns from the row
11608 DBMS_SQL.column_value(query_hdl, 1, grade);
11609 IF j >= p_node_low_value THEN
11610 x_node_tbl(i).state := p_node_state;
11611 x_node_tbl(i).DEPTH := 1;
11612 x_node_tbl(i).label := substr(grade,1,80);
11613 x_node_tbl(i).icon := 'grades_cctitle' ;
11614 x_node_tbl(i).VALUE := grade;
11615 x_node_tbl(i).TYPE := 'GRADE';
11616 i := i + 1;
11617 END IF;
11618 EXIT WHEN j >= p_node_high_value;
11619 j := j + 1;
11620 ELSE
11621 EXIT;
11622 END IF;
11623 END LOOP;
11624 DBMS_SQL.close_cursor(query_hdl); -- close cursor
11625 x_node_value := j;
11626 x_tbl_index := i;
11627 EXCEPTION
11628 WHEN NO_DATA_FOUND THEN
11629 NULL;
11630 WHEN OTHERS THEN
11631 RAISE;
11632 END add_grades ;
11633 -- NSRIVAST, INVCONV, End
11634
11635 -- Procedure to get the flexfield structure of mtl_lot_numbers flexfield.
11636 -- This procedure appends the entries to a table that has
11637 -- already been populated
11638 PROCEDURE get_mln_attributes_structure(
11639 x_attributes IN OUT NOCOPY inv_lot_sel_attr.lot_sel_attributes_tbl_type
11640 , x_attributes_count OUT NOCOPY NUMBER
11641 , x_return_status OUT NOCOPY VARCHAR2
11642 , x_msg_count OUT NOCOPY NUMBER
11643 , x_msg_data OUT NOCOPY NUMBER
11644 , p_mln_context_code IN VARCHAR2
11645 ) IS
11646 -- Cursor to get the segments that are enabled in the given context and
11647 -- IN the global context
11648 CURSOR mln_structure IS
11649 SELECT fdfcu.form_left_prompt
11650 , fdfcu.application_column_name
11651 FROM fnd_descr_flex_col_usage_vl fdfcu, fnd_application_vl fa
11652 WHERE fdfcu.application_id = fa.application_id
11653 AND fa.application_short_name = 'INV'
11654 AND fdfcu.descriptive_flexfield_name = 'MTL_LOT_NUMBERS'
11655 AND(
11656 fdfcu.descriptive_flex_context_code IN(
11657 SELECT fdfc.descriptive_flex_context_code
11658 FROM fnd_descr_flex_contexts_vl fdfc
11659 WHERE fdfc.global_flag = 'Y'
11660 AND fdfc.descriptive_flexfield_name = 'MTL_LOT_NUMBERS'
11661 AND fdfc.application_id = fa.application_id)
11662 OR fdfcu.descriptive_flex_context_code = p_mln_context_code
11663 )
11664 AND fdfcu.enabled_flag = 'Y'
11665 ORDER BY fdfcu.column_seq_num;
11666 BEGIN
11667 x_return_status := fnd_api.g_ret_sts_unexp_error;
11668 x_attributes_count := x_attributes.COUNT;
11669
11670 FOR mln_structure_rec IN mln_structure LOOP
11671 x_attributes_count := x_attributes_count + 1;
11672 x_attributes(x_attributes_count).prompt := mln_structure_rec.form_left_prompt;
11673 x_attributes(x_attributes_count).column_type := 'VARCHAR2';
11674 x_attributes(x_attributes_count).column_name := mln_structure_rec.application_column_name;
11675 END LOOP;
11676
11677 x_return_status := fnd_api.g_ret_sts_success;
11678 END get_mln_attributes_structure;
11679
11680 -- Procedure to get the values populated in MTL_LOT_NUMBERS of the enabled segments
11681 -- This procedure appends the entries to a table that has
11682 -- already been populated
11683 PROCEDURE get_mln_attributes(
11684 x_attribute_values IN OUT NOCOPY inv_lot_sel_attr.lot_sel_attributes_tbl_type
11685 , x_attribute_prompts IN OUT NOCOPY inv_lot_sel_attr.lot_sel_attributes_tbl_type
11686 , x_attributes_count OUT NOCOPY NUMBER
11687 , x_return_status OUT NOCOPY VARCHAR2
11688 , x_msg_count OUT NOCOPY NUMBER
11689 , x_msg_data OUT NOCOPY NUMBER
11690 , p_organization_id IN NUMBER
11691 , p_inventory_item_id IN NUMBER
11692 , p_lot_number IN VARCHAR2
11693 ) IS
11694 -- Cursor to get the segments that are enabled in the given context and
11695 -- IN the global context
11696 CURSOR mln_dff_structure(p_mln_context_code VARCHAR2) IS
11697 SELECT fdfcu.form_left_prompt
11698 , fdfcu.application_column_name
11699 FROM fnd_descr_flex_col_usage_vl fdfcu, fnd_application_vl fa
11700 WHERE fdfcu.application_id = fa.application_id
11701 AND fa.application_short_name = 'INV'
11702 AND fdfcu.descriptive_flexfield_name = 'MTL_LOT_NUMBERS'
11703 AND(
11704 fdfcu.descriptive_flex_context_code IN(
11705 SELECT fdfc.descriptive_flex_context_code
11706 FROM fnd_descr_flex_contexts_vl fdfc
11707 WHERE fdfc.global_flag = 'Y'
11708 AND fdfc.descriptive_flexfield_name = 'MTL_LOT_NUMBERS'
11709 AND fdfc.application_id = fa.application_id)
11710 OR fdfcu.descriptive_flex_context_code = p_mln_context_code
11711 )
11712 AND fdfcu.enabled_flag = 'Y'
11713 ORDER BY fdfcu.column_seq_num;
11714
11715 TYPE l_attribute_type IS TABLE OF mtl_lot_numbers.attribute1%TYPE
11716 INDEX BY BINARY_INTEGER;
11717
11718 l_attribute l_attribute_type;
11719 l_mln_context_code mtl_lot_numbers.attribute_category%TYPE;
11720 BEGIN
11721 x_return_status := fnd_api.g_ret_sts_unexp_error;
11722
11723 SELECT attribute1
11724 , attribute2
11725 , attribute3
11726 , attribute4
11727 , attribute5
11728 , attribute6
11729 , attribute7
11730 , attribute8
11731 , attribute9
11732 , attribute10
11733 , attribute11
11734 , attribute12
11735 , attribute13
11736 , attribute14
11737 , attribute15
11738 , attribute_category
11739 INTO l_attribute(1)
11740 , l_attribute(2)
11741 , l_attribute(3)
11742 , l_attribute(4)
11743 , l_attribute(5)
11744 , l_attribute(6)
11745 , l_attribute(7)
11746 , l_attribute(8)
11747 , l_attribute(9)
11748 , l_attribute(10)
11749 , l_attribute(11)
11750 , l_attribute(12)
11751 , l_attribute(13)
11752 , l_attribute(14)
11753 , l_attribute(15)
11754 , l_mln_context_code
11755 FROM mtl_lot_numbers
11756 WHERE inventory_item_id = p_inventory_item_id
11757 AND organization_id = p_organization_id
11758 AND lot_number = p_lot_number;
11759
11760 x_attributes_count := x_attribute_values.COUNT;
11761
11762 FOR mln_dff_structure_rec IN mln_dff_structure(l_mln_context_code) LOOP
11763 x_attributes_count := x_attributes_count + 1;
11764 x_attribute_prompts(x_attributes_count).prompt := mln_dff_structure_rec.form_left_prompt;
11765 x_attribute_prompts(x_attributes_count).column_name := mln_dff_structure_rec.application_column_name;
11766 x_attribute_values(x_attributes_count).column_name := mln_dff_structure_rec.application_column_name;
11767 x_attribute_values(x_attributes_count).column_value :=
11768 l_attribute(TO_NUMBER(SUBSTR(mln_dff_structure_rec.application_column_name, 10, 2)));
11769 END LOOP;
11770
11771 x_return_status := fnd_api.g_ret_sts_success;
11772 END get_mln_attributes;
11773
11774 -- Procedure to get the flexfield structure of mtl_lot_numbers flexfield.
11775 -- This procedure appends the entries to a table that has
11776 -- already been populated
11777 PROCEDURE get_msn_attributes_structure(
11778 x_attributes IN OUT NOCOPY inv_lot_sel_attr.lot_sel_attributes_tbl_type
11779 , x_attributes_count OUT NOCOPY NUMBER
11780 , x_return_status OUT NOCOPY VARCHAR2
11781 , x_msg_count OUT NOCOPY NUMBER
11782 , x_msg_data OUT NOCOPY NUMBER
11783 , p_msn_context_code IN VARCHAR2
11784 ) IS
11785 -- Cursor to get the segments that are enabled in the given context and
11786 -- IN the global context
11787 CURSOR msn_structure IS
11788 SELECT fdfcu.form_left_prompt
11789 , fdfcu.application_column_name
11790 FROM fnd_descr_flex_col_usage_vl fdfcu, fnd_application_vl fa
11791 WHERE fdfcu.application_id = fa.application_id
11792 AND fa.application_short_name = 'INV'
11793 AND fdfcu.descriptive_flexfield_name = 'MTL_SERIAL_NUMBERS'
11794 AND(
11795 fdfcu.descriptive_flex_context_code IN(
11796 SELECT fdfc.descriptive_flex_context_code
11797 FROM fnd_descr_flex_contexts_vl fdfc
11798 WHERE fdfc.global_flag = 'Y'
11799 AND fdfc.descriptive_flexfield_name = 'MTL_SERIAL_NUMBERS'
11800 AND fdfc.application_id = fa.application_id)
11801 OR fdfcu.descriptive_flex_context_code = p_msn_context_code
11802 )
11803 AND fdfcu.enabled_flag = 'Y'
11804 ORDER BY fdfcu.column_seq_num;
11805 BEGIN
11806 x_return_status := fnd_api.g_ret_sts_unexp_error;
11807 x_attributes_count := x_attributes.COUNT;
11808
11809 FOR msn_structure_rec IN msn_structure LOOP
11810 x_attributes_count := x_attributes_count + 1;
11811 x_attributes(x_attributes_count).prompt := msn_structure_rec.form_left_prompt;
11812 x_attributes(x_attributes_count).column_type := 'VARCHAR2';
11813 x_attributes(x_attributes_count).column_name := msn_structure_rec.application_column_name;
11814 END LOOP;
11815
11816 x_return_status := fnd_api.g_ret_sts_success;
11817 END get_msn_attributes_structure;
11818
11819 -- Procedure to get the values populated in MTL_SERIAL_NUMBERS of the enabled segments
11820 -- This procedure appends the entries to a table that has
11821 -- already been populated
11822 PROCEDURE get_msn_attributes(
11823 x_attribute_values IN OUT NOCOPY inv_lot_sel_attr.lot_sel_attributes_tbl_type
11824 , x_attribute_prompts IN OUT NOCOPY inv_lot_sel_attr.lot_sel_attributes_tbl_type
11825 , x_attributes_count OUT NOCOPY NUMBER
11826 , x_return_status OUT NOCOPY VARCHAR2
11827 , x_msg_count OUT NOCOPY NUMBER
11828 , x_msg_data OUT NOCOPY NUMBER
11829 , p_organization_id IN NUMBER
11830 , p_inventory_item_id IN NUMBER
11831 , p_serial_number IN VARCHAR2
11832 ) IS
11833 -- Cursor to get the segments that are enabled in the given context and
11834 -- IN the global context
11835 CURSOR msn_dff_structure(p_msn_context_code VARCHAR2) IS
11836 SELECT fdfcu.form_left_prompt
11837 , fdfcu.application_column_name
11838 FROM fnd_descr_flex_col_usage_vl fdfcu, fnd_application_vl fa
11839 WHERE fdfcu.application_id = fa.application_id
11840 AND fa.application_short_name = 'INV'
11841 AND fdfcu.descriptive_flexfield_name = 'MTL_SERIAL_NUMBERS'
11842 AND(
11843 fdfcu.descriptive_flex_context_code IN(
11844 SELECT fdfc.descriptive_flex_context_code
11845 FROM fnd_descr_flex_contexts_vl fdfc
11846 WHERE fdfc.global_flag = 'Y'
11847 AND fdfc.descriptive_flexfield_name = 'MTL_SERIAL_NUMBERS'
11848 AND fdfc.application_id = fa.application_id)
11849 OR fdfcu.descriptive_flex_context_code = p_msn_context_code
11850 )
11851 AND fdfcu.enabled_flag = 'Y'
11852 ORDER BY fdfcu.column_seq_num;
11853
11854 TYPE l_attribute_type IS TABLE OF mtl_serial_numbers.attribute1%TYPE
11855 INDEX BY BINARY_INTEGER;
11856
11857 l_attribute l_attribute_type;
11858 l_msn_context_code mtl_serial_numbers.attribute_category%TYPE;
11859 BEGIN
11860 x_return_status := fnd_api.g_ret_sts_unexp_error;
11861
11862 SELECT attribute1
11863 , attribute2
11864 , attribute3
11865 , attribute4
11866 , attribute5
11867 , attribute6
11868 , attribute7
11869 , attribute8
11870 , attribute9
11871 , attribute10
11872 , attribute11
11873 , attribute12
11874 , attribute13
11875 , attribute14
11876 , attribute15
11877 , attribute_category
11878 INTO l_attribute(1)
11879 , l_attribute(2)
11880 , l_attribute(3)
11881 , l_attribute(4)
11882 , l_attribute(5)
11883 , l_attribute(6)
11884 , l_attribute(7)
11885 , l_attribute(8)
11886 , l_attribute(9)
11887 , l_attribute(10)
11888 , l_attribute(11)
11889 , l_attribute(12)
11890 , l_attribute(13)
11891 , l_attribute(14)
11892 , l_attribute(15)
11893 , l_msn_context_code
11894 FROM mtl_serial_numbers
11895 WHERE inventory_item_id = p_inventory_item_id
11896 AND current_organization_id = p_organization_id
11897 AND serial_number = p_serial_number;
11898
11899 x_attributes_count := x_attribute_values.COUNT;
11900
11901 FOR msn_dff_structure_rec IN msn_dff_structure(l_msn_context_code) LOOP
11902 x_attributes_count := x_attributes_count + 1;
11903 x_attribute_prompts(x_attributes_count).prompt := msn_dff_structure_rec.form_left_prompt;
11904 x_attribute_prompts(x_attributes_count).column_name := msn_dff_structure_rec.application_column_name;
11905 x_attribute_values(x_attributes_count).column_name := msn_dff_structure_rec.application_column_name;
11906 x_attribute_values(x_attributes_count).column_value :=
11907 l_attribute(TO_NUMBER(SUBSTR(msn_dff_structure_rec.application_column_name, 10, 2)));
11908 END LOOP;
11909
11910 x_return_status := fnd_api.g_ret_sts_success;
11911 END get_msn_attributes;
11912 END inv_mwb_tree;