DBA Data[Home] [Help]

PACKAGE BODY: APPS.INV_MWB_TREE

Source


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;