DBA Data[Home] [Help]

PACKAGE BODY: APPS.EAM_WORKBENCH_TREE

Source


1 PACKAGE BODY eam_workbench_tree AS
2 /* $Header: EAMWBTRB.pls 120.5 2006/03/29 05:46:33 kmurthy noship $ */
3 
4   /**
5    * Given the search criteria, this function finds out all the asset numbers
6    * and insert those into the temp table under a group id which is returned.
7    * It returns -1 if nothing found.
8    */
9 
10   function find_all_asset_numbers(p_org_id number,
11                                   p_instance_id number,
12                                   p_location_id number,
13                                   p_category_id number,
14                                   p_owning_dept_id number,
15                                   p_asset_group_id number,
16                                   p_asset_number varchar2,
17 				  p_transferred_asset varchar2,
18 				  p_set_name_id  number) return number is
19     l_group_id number;
20     l_count_first number;
21     l_count_second number;
22     l_return_status number;
23   begin
24     l_return_status := 0;
25     l_count_first := 0;
26     l_count_second := 0;
27 
28     select eam_asset_explosion_temp_s.nextval
29       into l_group_id from dual;
30 
31 
32     INSERT INTO eam_asset_explosion_temp(
33         group_id,
34         asset_group_id,
35         asset_number,
36         low_level_code)
37         SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
38           FROM csi_item_instances cii, mtl_system_items msi, mtl_parameters mp,eam_org_maint_defaults  eomd
39          WHERE msi.eam_item_type = 1 AND msi.inventory_item_id = cii.inventory_item_id
40 	   AND msi.organization_id = cii.last_vld_organization_id AND msi.serial_number_control_code <> 1
41 	   AND nvl(cii.active_start_date, sysdate-1) <= sysdate AND nvl(cii.active_end_date, sysdate+1) >= sysdate
42 	   AND msi.organization_id = mp.organization_id AND mp.maint_organization_id = p_org_id
43 	   AND cii.instance_id = eomd.object_id (+) AND eomd.object_type (+) = 50
44            AND (p_location_id IS NULL OR eomd.area_id = p_location_id)
45            AND (p_category_id IS NULL OR cii.category_id = p_category_id)
46            AND (p_owning_dept_id IS NULL OR eomd.owning_department_id = p_owning_dept_id)
47 	   AND (p_asset_group_id IS NULL OR cii.inventory_item_id = p_asset_group_id)
48 	   AND (p_asset_number IS NULL OR cii.serial_number = p_asset_number)
49 	   AND (p_instance_id IS NULL OR cii.instance_id = p_instance_id)
50 	   AND eomd.organization_id(+) = p_org_id
51 	   AND (p_set_name_id is null OR
52 			(
53 		           (cii.instance_id,3) in
54 			    (select maintenance_object_id,maintenance_object_type
55 			     from eam_pm_schedulings where set_name_id = p_set_name_id )
56 			 ) );
57 
58     IF SQL%ROWCOUNT = 0 THEN
59        l_count_first := 1;
60     END IF;
61 
62     -- Transferred Assets
63     IF (p_transferred_asset = 'Y') THEN
64 	    INSERT INTO eam_asset_explosion_temp(
65 		group_id,
66 		asset_group_id,
67 		asset_number,
68 		low_level_code)
69 		SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
70 		  FROM csi_item_instances cii, mtl_system_items msi, mtl_parameters mp,
71 		       (select * from eam_org_maint_defaults where organization_id = p_org_id) eomd
72 		 WHERE msi.eam_item_type = 1
73 		 AND msi.inventory_item_id = cii.inventory_item_id
74 		   AND msi.organization_id = cii.last_vld_organization_id
75 		   AND msi.serial_number_control_code <> 1
76 		   AND nvl(cii.active_start_date, sysdate-1) <= sysdate
77 		   AND nvl(cii.active_end_date, sysdate+1) >= sysdate
78 		   AND msi.organization_id = mp.organization_id
79 		   AND mp.maint_organization_id <> p_org_id
80 		   AND cii.instance_id = eomd.object_id (+)
81 		   AND eomd.object_type (+) = 50
82 		   AND (p_location_id IS NULL OR eomd.area_id = p_location_id)
83 		   AND (p_category_id IS NULL OR cii.category_id = p_category_id)
84 		   AND (p_owning_dept_id IS NULL OR eomd.owning_department_id = p_owning_dept_id)
85 		   AND (p_asset_group_id IS NULL OR cii.inventory_item_id = p_asset_group_id)
86 		   AND (p_asset_number IS NULL OR cii.serial_number = p_asset_number)
87 		   AND (p_instance_id IS NULL OR cii.instance_id = p_instance_id)
88 		   AND (p_set_name_id is null OR
89 			(
90 		           (cii.instance_id,3) in
91 			    (select maintenance_object_id,maintenance_object_type
92 			     from eam_pm_schedulings where set_name_id = p_set_name_id )
93 			 ) )
94 		   AND EXISTS (SELECT 1
95 				FROM wip_discrete_jobs
96 				WHERE organization_id = p_org_id
97 				  AND maintenance_object_id = cii.instance_id) ;
98 	    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
99 	       l_count_first := 1;
100 	    ELSE
101 	       l_count_first := 0;
102 	    END IF;
103     END IF;
104 
105     IF (p_instance_id is not null) then
106       	INSERT INTO eam_asset_explosion_temp(
107         		group_id,
108         		asset_group_id,
109         		asset_number,
110         		low_level_code)
111                  SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
112 		   FROM mtl_eam_network_assets mena, csi_item_instances cii, mtl_parameters mp
113 		  WHERE p_instance_id = mena.network_object_id AND mena.maintenance_object_id = cii.instance_id
114 		    AND cii.last_vld_organization_id = mp.organization_id AND mp.maint_organization_id = p_org_id;
115 
116 	    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
117 	       l_count_first := 1;
118 	    ELSE
119 	       l_count_first := 0;
120 	    END IF;
121 
122 	-- Transferred Assets
123 	IF (p_transferred_asset = 'Y') THEN
124 		INSERT INTO eam_asset_explosion_temp(
125 				group_id,
126 				asset_group_id,
127 				asset_number,
128 				low_level_code)
129 			 SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
130 			   FROM mtl_eam_network_assets mena, csi_item_instances cii, mtl_parameters mp
131 			  WHERE p_instance_id = mena.network_object_id
132 			    AND mena.maintenance_object_id = cii.instance_id
133 			    AND cii.last_vld_organization_id = mp.organization_id
134 			    AND mp.maint_organization_id <> p_org_id
135 			    AND EXISTS (SELECT 1
136 				FROM wip_discrete_jobs
137 				WHERE organization_id = p_org_id
138 				  AND maintenance_object_id = cii.instance_id) ;
139 	END IF;
140 	    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
141 	       l_count_first := 1;
142 	    ELSE
143 	       l_count_first := 0;
144 	    END IF;
145 
146     ELSIF (p_asset_number IS NOT NULL AND p_asset_group_id IS NOT NULL) THEN
147       	INSERT INTO eam_asset_explosion_temp(
148         		group_id,
149         		asset_group_id,
150         		asset_number,
151         		low_level_code)
152                  SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
153 		   FROM mtl_eam_network_assets mena, csi_item_instances ciin, csi_item_instances cii, mtl_parameters mp
154 		  WHERE ciin.serial_number = p_asset_number AND ciin.inventory_item_id = p_asset_group_id
155 		    AND ciin.instance_id = mena.network_object_id AND mena.maintenance_object_id = cii.instance_id
156 		    AND cii.last_vld_organization_id = mp.organization_id AND mp.maint_organization_id = p_org_id;
157 
158 	    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
159 	       l_count_first := 1;
160 	    ELSE
161 	       l_count_first := 0;
162 	    END IF;
163 	-- Transferred Assets
164 	IF (p_transferred_asset = 'Y') THEN
165 		INSERT INTO eam_asset_explosion_temp(
166 				group_id,
167 				asset_group_id,
168 				asset_number,
169 				low_level_code)
170 			 SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
171 			   FROM mtl_eam_network_assets mena, csi_item_instances ciin, csi_item_instances cii, mtl_parameters mp
172 			  WHERE ciin.serial_number = p_asset_number
173 			    AND ciin.inventory_item_id = p_asset_group_id
174 			    AND ciin.instance_id = mena.network_object_id
175 			    AND mena.maintenance_object_id = cii.instance_id
176 			    AND cii.last_vld_organization_id = mp.organization_id
177 			    AND mp.maint_organization_id <> p_org_id
178 			    AND EXISTS (SELECT 1
179 				FROM wip_discrete_jobs
180 				WHERE organization_id = p_org_id
181 				  AND maintenance_object_id = cii.instance_id) ;
182 	    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
183 	       l_count_first := 1;
184 	    ELSE
185 	       l_count_first := 0;
186 	    END IF;
187 	END IF;
188     END IF;
189 
190     IF  l_count_first = 1 THEN
191        l_return_status := 1;
192     END IF;
193 
194     if  l_return_status = 1 then
195       return -1;
196     else
197       return l_group_id;
198     end if;
199 
200   EXCEPTION
201       WHEN NO_DATA_FOUND THEN
202         return -1;
203 
204   end find_all_asset_numbers;
205 
206 
207   /**
208    * Given the search criteria, this procedure finds out all the applicable
209    * asset numbers and builds the hierarchy trees.
210    */
211   function construct_hierarchy_forest(p_org_id number,
212                                       p_instance_id number,
213                                       p_location_id number,
214                                       p_category_id number,
215                                       p_owning_dept_id number,
216                                       p_asset_group_id number,
217                                       p_asset_number varchar2,
218 				      p_set_name_id  number) return number as
219     language java name 'oracle.apps.eam.workbench.WorkBenchTree.constructTree(
220                                        java.lang.Long,
221 				       java.lang.Long,
222                                        java.lang.Long,
223                                        java.lang.Long,
224                                        java.lang.Long,
225                                        java.lang.Long,
226                                        java.lang.String,
227 				       java.lang.Long) return long';
228 
229 
230   /**
231    * Procedure construct_hierarchy_forest must be called before this function can
232    * be called. Otherwise, it will cause unexpected behavior.
233    * Given the asset number and asset group id, this function will copy the
234    * subtree of the given asset number to the temp table. It returns the group_id
235    * back so the user can reference it. It returns NULL if the given asset number
236    * is not found.
237    */
238   function copy_subtree_to_temp_table(p_asset_group_id number,
239                                       p_asset_number varchar2) return number as
240     language java name 'oracle.apps.eam.workbench.WorkBenchTree.getSubtree(
241                                       long,
242                                       java.lang.String) return long';
243 
244   /**
245    * This procedure releases the resource taken explicity.
246    */
247   procedure clear_forest as
248     language java name 'oracle.apps.eam.workbench.WorkBenchTree.clear()';
249 
250   /** added by sraval to include rebuildables in activity workbench
251     */
252      --p_include_rebuildable param will have a value of null from activity workbench and 'Y' from planenrs workbench
253     function find_all_asset_numbers(p_org_id number,
254                                     p_instance_id number,
255                                     p_location_id number,
256                                     p_category_id number,
257                                     p_owning_dept_id number,
258                                     p_asset_group_id number,
259                                     p_asset_number varchar2,
260                                     p_include_rebuildable varchar2,
261 				    p_transferred_asset varchar2,
262 				    p_set_name_id  number
263 	) return number is
264         l_group_id number;
265         l_count_first number;
266         l_return_status number;
267 
268       begin
269         l_return_status := 0;
270         l_count_first := 0;
271         select eam_asset_explosion_temp_s.nextval
272           into l_group_id from dual;
273 
274         INSERT INTO eam_asset_explosion_temp(
275             group_id,
276             asset_group_id,
277             asset_number,
278             low_level_code)
279         SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
280           FROM csi_item_instances cii, mtl_system_items msi, mtl_parameters mp,eam_org_maint_defaults eomd
281          WHERE msi.eam_item_type in (1,3) AND msi.inventory_item_id = cii.inventory_item_id
282 	   AND msi.organization_id = cii.last_vld_organization_id AND msi.serial_number_control_code <> 1
283 	   AND nvl(cii.active_start_date, sysdate-1) <= sysdate AND nvl(cii.active_end_date, sysdate+1) >= sysdate
284 	   AND msi.organization_id = mp.organization_id AND mp.maint_organization_id = p_org_id
285 	   AND cii.instance_id = eomd.object_id (+) AND eomd.object_type (+) = 50
286            AND (p_location_id IS NULL OR eomd.area_id = p_location_id)
287            AND (p_category_id IS NULL OR cii.category_id = p_category_id)
288            AND (p_owning_dept_id IS NULL OR eomd.owning_department_id = p_owning_dept_id)
289 	   AND (p_asset_group_id IS NULL OR cii.inventory_item_id = p_asset_group_id)
290 	   AND (p_asset_number IS NULL OR cii.serial_number = p_asset_number)
291 	   AND (p_instance_id IS NULL OR cii.instance_id = p_instance_id)
292 	   AND (p_set_name_id is null OR
293 			(
294 		           (cii.instance_id,3) in
295 			    (select maintenance_object_id,maintenance_object_type
296 			     from eam_pm_schedulings where set_name_id = p_set_name_id )
297 			 ) )
298 	   AND eomd.organization_id(+) = p_org_id;
299            -- Is this stii required, WE team please check ????
300 	   -- (p_include_rebuildable='Y' and msn.current_status in (1,3,4))))) --planners workbench will pass p_include_rebuildable as 'Y'
301 
302         IF SQL%ROWCOUNT = 0 THEN
303            l_count_first := 1;
304         END IF;
305 
306 	-- Transferred Assets
307 	IF (p_transferred_asset = 'Y') THEN
308 		INSERT INTO eam_asset_explosion_temp(
309 		    group_id,
310 		    asset_group_id,
311 		    asset_number,
312 		    low_level_code)
313 		SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
314 		  FROM csi_item_instances cii, mtl_system_items msi, mtl_parameters mp,
315 		       (select * from eam_org_maint_defaults where organization_id = p_org_id) eomd
316 		 WHERE msi.eam_item_type in (1,3) AND msi.inventory_item_id = cii.inventory_item_id
317 		   AND msi.organization_id = cii.last_vld_organization_id AND msi.serial_number_control_code <> 1
318 		   AND nvl(cii.active_start_date, sysdate-1) <= sysdate AND nvl(cii.active_end_date, sysdate+1) >= sysdate
319 		   AND msi.organization_id = mp.organization_id AND mp.maint_organization_id <> p_org_id
323 		   AND (p_owning_dept_id IS NULL OR eomd.owning_department_id = p_owning_dept_id)
320 		   AND cii.instance_id = eomd.object_id (+) AND eomd.object_type (+) = 50
321 		   AND (p_location_id IS NULL OR eomd.area_id = p_location_id)
322 		   AND (p_category_id IS NULL OR cii.category_id = p_category_id)
324 		   AND (p_asset_group_id IS NULL OR cii.inventory_item_id = p_asset_group_id)
325 		   AND (p_asset_number IS NULL OR cii.serial_number = p_asset_number)
326 		   AND (p_instance_id IS NULL OR cii.instance_id = p_instance_id)
327 		   AND (p_set_name_id is null OR
328 			(
329 		           (cii.instance_id,3) in
330 			    (select maintenance_object_id,maintenance_object_type
331 			     from eam_pm_schedulings where set_name_id = p_set_name_id )
332 			 ) )
333 		   AND EXISTS (SELECT 1
334 				FROM wip_discrete_jobs
335 				WHERE organization_id = p_org_id
336 				  AND maintenance_object_id = cii.instance_id) ;
337 		    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
338 		       l_count_first := 1;
339 		    ELSE
340 		       l_count_first := 0;
341 		    END IF;
342 	END IF;
343 
344 	IF (p_instance_id is not null) then
345         	INSERT INTO eam_asset_explosion_temp(
346         		group_id,
347         		asset_group_id,
348         		asset_number,
349         		low_level_code)
350                  SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
351 		   FROM mtl_eam_network_assets mena, csi_item_instances cii, mtl_parameters mp
352 		  WHERE p_instance_id = mena.network_object_id AND mena.maintenance_object_id = cii.instance_id
353 		    AND cii.last_vld_organization_id = mp.organization_id AND mp.maint_organization_id = p_org_id;
354 
355 		    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
356 		       l_count_first := 1;
357 		    ELSE
358 		       l_count_first := 0;
359 		    END IF;
360 		-- Transferred Assets
361 		IF (p_transferred_asset = 'Y') THEN
362 			INSERT INTO eam_asset_explosion_temp(
363 				group_id,
364 				asset_group_id,
365 				asset_number,
366 				low_level_code)
367 			 SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
368 			   FROM mtl_eam_network_assets mena, csi_item_instances cii, mtl_parameters mp
369 			  WHERE p_instance_id = mena.network_object_id AND mena.maintenance_object_id = cii.instance_id
370 			    AND cii.last_vld_organization_id = mp.organization_id AND mp.maint_organization_id <> p_org_id
371 			   AND EXISTS (SELECT 1
372 					FROM wip_discrete_jobs
373 				WHERE organization_id = p_org_id
374 				  AND maintenance_object_id = cii.instance_id) ;
375 		    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
376 		       l_count_first := 1;
377 		    ELSE
378 		       l_count_first := 0;
379 		    END IF;
380 		END IF;
381         ELSIF (p_asset_number is not null AND p_asset_group_id IS NOT NULL) THEN
382       	         INSERT INTO eam_asset_explosion_temp(
383         		group_id,
384         		asset_group_id,
385         		asset_number,
386         		low_level_code)
387                  SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
388 		   FROM mtl_eam_network_assets mena, csi_item_instances ciin, csi_item_instances cii, mtl_parameters mp
389 		  WHERE ciin.serial_number = p_asset_number AND ciin.inventory_item_id = p_asset_group_id
390 		    AND ciin.instance_id = mena.network_object_id AND mena.maintenance_object_id = cii.instance_id
391 		    AND cii.last_vld_organization_id = mp.organization_id AND mp.maint_organization_id = p_org_id;
392 
393 		    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
394 		       l_count_first := 1;
395 		    ELSE
396 		       l_count_first := 0;
397 		    END IF;
398 		-- Transferred Assets
399 		IF (p_transferred_asset = 'Y') THEN
400 			 INSERT INTO eam_asset_explosion_temp(
401 				group_id,
402 				asset_group_id,
403 				asset_number,
404 				low_level_code)
405 			 SELECT eam_asset_explosion_temp_s.currval, cii.inventory_item_id, cii.serial_number, 1
406 			   FROM mtl_eam_network_assets mena, csi_item_instances ciin, csi_item_instances cii, mtl_parameters mp
407 			  WHERE ciin.serial_number = p_asset_number AND ciin.inventory_item_id = p_asset_group_id
408 			    AND ciin.instance_id = mena.network_object_id AND mena.maintenance_object_id = cii.instance_id
409 			    AND cii.last_vld_organization_id = mp.organization_id AND mp.maint_organization_id <> p_org_id
410 			   AND EXISTS (SELECT 1
411 				FROM wip_discrete_jobs
412 				WHERE organization_id = p_org_id
413 				  AND maintenance_object_id = cii.instance_id) ;
414 		    IF (SQL%ROWCOUNT = 0) AND (l_count_first = 1) THEN
415 		       l_count_first := 1;
416 		    ELSE
417 		       l_count_first := 0;
418 		    END IF;
419 		END IF;
420         END IF;
421 
422         IF SQL%ROWCOUNT = 0 AND l_count_first = 1 THEN
423            l_return_status := 1;
424         END IF;
425 
426         if l_return_status = 1 then
427           return -1;
428         else
429           return l_group_id ;
430         end if;
431 
432       EXCEPTION
433           WHEN NO_DATA_FOUND THEN
434             return -1;
435 
436     end find_all_asset_numbers;
437 
438     /** added by sraval to include rebuildables in activity workbench
439     */
440     function construct_hierarchy_forest(p_org_id number,
441                                           p_instance_id number,
442                                           p_location_id number,
443                                           p_category_id number,
444                                           p_owning_dept_id number,
445                                           p_asset_group_id number,
446                                           p_asset_number varchar2,
447                                           p_include_rebuildable varchar2,
448 					  p_set_name_id  number) return number as
449         language java name 'oracle.apps.eam.workbench.WorkBenchTree.constructTree(
450                                            java.lang.Long,
451 					   java.lang.Long,
452                                            java.lang.Long,
453                                            java.lang.Long,
454                                            java.lang.Long,
455                                            java.lang.Long,
456                                            java.lang.String,
457                                            java.lang.String,
458 					   java.lang.Long) return long';
459 
460 
461    /* This procedure is used to delete the session data from eam_asset_explosion_temp
462       table. This is added for the bug #2688078
463    */
464       procedure clear_eam_asset(p_group_id IN NUMBER) is
465        PRAGMA AUTONOMOUS_TRANSACTION;
466 
467       begin
468 	   -- removed redundant IF condition for deleting the rows . Bug 3616034
469            delete from eam_asset_explosion_temp where  group_id = p_group_id;
470            commit;
471       end;
472 
473          /* Code Added for bug 3982343 Start */
474          procedure clear_eam_asset
475          (
476            p_global_group_ids IN global_group_ids
477          )
478          IS
479          PRAGMA AUTONOMOUS_TRANSACTION;
480          BEGIN -- Bug 4175235 replaced FOR LOOP with FORALL
481            FORALL i in p_global_group_ids.FIRST..p_global_group_ids.LAST
482               DELETE
483               FROM eam_asset_explosion_temp
484               WHERE  group_id = p_global_group_ids(i);
485           COMMIT;
486          END;
487          /* Code Added for bug 3982343 End */
488 
489 END eam_workbench_tree;