1 PACKAGE BODY AHL_UMP_SMRINSTANCE_PVT AS
2 /* $Header: AHLVSMRB.pls 120.15.12020000.2 2012/12/07 14:40:58 sareepar ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'AHL_UMP_SMRINSTANCE_PVT';
5
6 -- FND Logging Constants
7 G_DEBUG_LEVEL CONSTANT NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
8 G_DEBUG_PROC CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
9 G_DEBUG_STMT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
10 G_DEBUG_UEXP CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
11
12 -------------------------------
13 -- Declare Local Procedures --
14 -------------------------------
15 PROCEDURE populate_instances(
16 p_module_type IN VARCHAR2,
17 P_SEARCH_MR_INSTANCE_REC IN AHL_UMP_SMRINSTANCE_PVT.SEARCH_MRINSTANCE_REC_TYPE);
18
19 PROCEDURE populate_unit_instances(
20 P_MODULE_TYPE IN VARCHAR2,
21 p_search_ump_rec IN AHL_UMP_SMRINSTANCE_PVT.Search_Ump_Rec_Type);
22
23
24 PROCEDURE populate_dependent_instances(
25 p_module_type IN VARCHAR2);
26
27 TYPE NBR_TBL_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
28
29
30
31 -------------------------------------
32 -- End Local Procedures Declaration--
33 -------------------------------------
34
35 ------------------------
36 -- Define Procedures --
37 ------------------------
38 --------------------------------------------------------------------------------------------
39 -- Start of Comments --
40 -- Procedure name : Search_MR_Instances
41 -- Type : Private
42 -- Function : This procedure fetches all the MR Instances based both at the instance level
43 -- and the item level for the given search criteria.
44 -- Pre-reqs :
45 -- Parameters :
46 --
47 -- Standard IN Parameters :
48 -- p_api_version IN NUMBER Required
49 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
50 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
51 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
52 -- p_default IN VARCHAR2 Default FND_API.G_TRUE
53 -- Based on this flag, the API will set the default attributes.
54 -- p_module_type IN VARCHAR2 Default NULL
55 -- This will be null.
56 -- Standard OUT Parameters :
57 -- x_return_status OUT NOCOPY VARCHAR2 Required
58 -- x_msg_count OUT NOCOPY NUMBER Required
59 -- x_msg_data OUT NOCOPY VARCHAR2 Required
60 --
61 -- Search_MR_Instances Parameters :
62 -- p_start_row IN NUMBER Required
63 -- The row from which the search results table should be displayed.
64 -- p_rows_per_page IN NUMBER Required
65 -- The number of rows to be displayed per page.
66 -- p_search_mr_instance_rec IN Search_MRInstance_Rec_Type Required
67 -- The search criteria based on which the query needs to be run to
68 -- return the MR Instances.
69 -- x_results_mr_instance_tbl OUT NOCOPY Results_MRInstance_Tbl_Type Required
70 -- List of all the MR Instances which match the search criteria entered.
71 -- x_results_count OUT NOCOPY NUMBER Required
72 -- The total count of the results returned from the entered search criteria.
73 --
74 -- Version :
75 -- Initial Version 1.0
76 -- Sunil Kumar redesigned and recoded. Performance optimized.
77 --
78 -- End of Comments.
79 --------------------------------------------------------------------------------------------
80
81 PROCEDURE Search_MR_Instances
82 (
83 p_api_version IN NUMBER,
84 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
85 p_commit IN VARCHAR2 := FND_API.G_FALSE,
86 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
87 p_default IN VARCHAR2 := FND_API.G_TRUE,
88 p_module_type IN VARCHAR2 := NULL,
89 p_start_row IN NUMBER,
90 p_rows_per_page IN NUMBER,
91 p_search_mr_instance_rec IN AHL_UMP_SMRINSTANCE_PVT.Search_MRInstance_Rec_Type,
92 x_results_mr_instance_tbl OUT NOCOPY AHL_UMP_SMRINSTANCE_PVT.Results_MRInstance_Tbl_Type,
93 x_results_count OUT NOCOPY NUMBER,
94 x_return_status OUT NOCOPY VARCHAR2,
95 x_msg_count OUT NOCOPY NUMBER,
96 x_msg_data OUT NOCOPY VARCHAR2 ) IS
97
98 l_api_version CONSTANT NUMBER := 1.0;
99 l_api_name CONSTANT VARCHAR2(30) := 'Search_MR_Instances';
100
101 -- Local Variable for the sql string.
102 l_sql_string VARCHAR2(30000);
103 l_get_items_sql VARCHAR2(4000);
104 -- Local Variables for Instance Level Search queries
105 l_all_csi_items_sql VARCHAR2(4000);
106 l_get_csi_ii_id_sql VARCHAR2(4000);
107 l_unit_effectivity_id number;
108 --Local Variable for iterating through the result set.
109 l_counter NUMBER;
110 --Local Variable for triggering the record to be picked.
111 l_pick_record_flag boolean;
112 --Local Variable for getting the row count.
113 row_count NUMBER;
114 --Fix for Bug 2745891
115 l_early_exit_status boolean;
116 -- Bind variable index and table
117 l_bind_index NUMBER;
118 l_bindvar_tbl AHL_OSP_UTIL_PKG.ahl_conditions_tbl;
119 -- dynamic cursor
120 l_cur AHL_OSP_UTIL_PKG.ahl_search_csr;
121 -- Logging purposes
122 l_sql_segment_count NUMBER;
123 -- Added for deferral details.
124 CURSOR ahl_defer_to_ue_csr(p_unit_effectivity_id IN NUMBER) IS
125 SELECT unit_effectivity_id
126 FROM ahl_unit_effectivities_b
127 WHERE defer_from_ue_id = p_unit_effectivity_id
128 AND rownum < 2;
129 -- cursor to actually fecth details
130 -- anraj: added UMP.cs_incident_id, UMP.cs_incident_number for bug#4133332
131 CURSOR ump_details_csr(p_unit_effectivity_id IN NUMBER) IS
132 SELECT UMP.program_type, UMP.Title, UMP.part_number, UMP.serial_number,
133 -- R12: Fix for bug# 5231770.
134 -- Due to CSI counter schema changes, the latest net_reading is
135 -- no longer available in csi_cp_counters_v. Net_reading will be
136 -- queried seperately to calculate uom_remain.
137 -- In this cursor, UMP.due_counter_value will be retrieved instead.
138 --(UMP.due_counter_value - nvl(UMP.net_reading,0)) uom_remain,
139 UMP.due_counter_value uom_remain,
140 UMP.counter_name, UMP.earliest_due_date, UMP.due_date, UMP.latest_due_date,
141 UMP.tolerance, UMP.status_code, UMP.status, UMP.originator_title, UMP.dependant_title,
142 UMP.unit_effectivity_id, UMP.mr_header_id, UMP.csi_item_instance_id, UMP.instance_number,
143 UMP.mr_interval_id, UMP.unit_name, UMP.program_title, UMP.contract_number,
144 UMP.defer_from_ue_id, UMP.object_type, UMP.counter_id, UMP.MANUALLY_PLANNED_FLAG,
145 UMP.MANUALLY_PLANNED_DESC,
146 UMP.cs_incident_id, UMP.cs_incident_number,
147 -- added for bug# 6530920.
148 UMP.orig_ue_instance_id
149 FROM ahl_unit_effectivities_v UMP
150 WHERE UMP.unit_effectivity_id = p_unit_effectivity_id;
151
152 --Changes for SBE - Dependent MR Details Begins
153 l_prec_ue_id NUMBER;
154 l_term_ue_id NUMBER;
155 l_acc_trig_reln_type VARCHAR2(30);
156 l_term_title VARCHAR2(80);
157 --Changes for SBE - Dependent MR Details Ends
158 -- Added to fix bug# 2780716.
159 l_counter_id NUMBER;
160
161 -- to get uom remain from a counter_id.
162 -- Changed for R12 CSI Counter changes.
163 CURSOR ump_ctr_name_csr (p_counter_id IN NUMBER) IS
164 /* modified for uptake of IB changes 7374316.
165 SELECT cc.counter_template_name counter_name,
166 nvl(cv.net_reading,0) net_reading
167 FROM csi_counter_values_v cv, csi_counters_vl cc
168 WHERE cv.counter_id = cc.counter_id
169 AND cv.counter_id = p_counter_id
170 AND rownum < 2;
171 */
172
173 SELECT cc.counter_template_name counter_name,
174 (select ccr.net_reading from csi_counter_readings ccr
175 where ccr.counter_value_id = cc.CTR_VAL_MAX_SEQ_NO
176 and nvl(ccr.disabled_flag,'N') = 'N')
177 FROM csi_counters_vl cc
178 WHERE cc.counter_id = p_counter_id;
179
180 -- Added to fix bug number 3693957
181 l_service_req_id NUMBER;
182 l_service_req_num VARCHAR2(64);
183 l_service_req_date DATE;
184
185 l_scheduled_date DATE;
186 l_visit_number VARCHAR2(80);
187
188 --PDOKI Added for ER# 6333770
189 l_visit_id NUMBER;
190
191 /*
192 -- 11.5.10CU2: Ignore Simulated visits.
193 CURSOR ahl_visit_csr(p_ue_id IN NUMBER) IS
194 SELECT vst.start_date_time, vst.visit_number
195 FROM ahl_visit_tasks_b tsk,
196 (select vst1.* from
197 ahl_visits_b vst1, ahl_simulation_plans_b sim
198 where vst1.simulation_plan_id = sim.simulation_plan_id
199 and sim.primary_plan_flag = 'Y'
200 UNION ALL
201 select vst1.* from
202 ahl_visits_b vst1
203 where simulation_plan_id IS NULL)vst
204 WHERE vst.visit_id = tsk.visit_id
205 AND NVL(vst.status_code,'x') NOT IN ('DELETED','CANCELLED')
206 AND NVL(tsk.status_code,'x') NOT IN ('DELETED','CANCELLED')
207 AND tsk.unit_effectivity_id = p_ue_id;
208 */
209 --amsriniv ER 6116245 Begin
210 CURSOR ahl_visit_csr(p_ue_id IN NUMBER, p_visit_num IN VARCHAR2, p_visit_org_name IN VARCHAR2, p_visit_dept_name IN VARCHAR2) IS
211 SELECT vst.start_date_time, vst.visit_number, vst.visit_id
212 FROM ahl_visit_tasks_b tsk,
213 (select vst1.* from
214 ahl_visits_b vst1, ahl_simulation_plans_b sim
215 where vst1.simulation_plan_id = sim.simulation_plan_id
216 and sim.primary_plan_flag = 'Y'
217 UNION ALL
218 select vst1.* from
219 ahl_visits_b vst1
220 where simulation_plan_id IS NULL)vst,
221 hr_all_organization_units hrou,
222 bom_departments bdpt
223 WHERE vst.visit_id = tsk.visit_id
224 AND NVL(vst.status_code,'x') NOT IN ('DELETED','CANCELLED')
225 AND NVL(tsk.status_code,'x') NOT IN ('DELETED','CANCELLED')
226 AND tsk.unit_effectivity_id = p_ue_id
227 AND vst.organization_id = hrou.organization_id(+)
228 AND ((vst.organization_id IS NULL AND p_visit_org_name IS NULL) OR upper(hrou.name) LIKE NVL(upper(p_visit_org_name),upper(hrou.name)))
229 AND vst.department_id = bdpt.department_id(+)
230 AND ((vst.department_id IS NULL AND p_visit_dept_name IS NULL) OR upper(bdpt.description) LIKE NVL(upper(p_visit_dept_name),upper(bdpt.description)))
231 AND vst.visit_number like nvl(p_visit_num,vst.visit_number);
232 --amsriniv ER 6116245 End
233
234 -- R12: MEL/CDL changes.
235 -- get deferral status for deferred UMP rows.
236 cursor get_deferral_sts (p_ue_id in number) IS
237 select decode(unit_deferral_type, 'MEL', 'MEL ' || fk.meaning,
238 'CDL', 'CDL ' || fk.meaning,
239 fk.meaning) deferral_meaning
240 from ahl_unit_deferrals_b, fnd_lookup_values_vl fk
241 where unit_effectivity_id = p_ue_id
242 and fk.lookup_type = 'AHL_PRD_DF_APPR_STATUS_TYPES'
243 and fk.lookup_code = approval_status_code;
244
245 -- get deferral status for open UMP rows.
246 cursor get_open_deferral_sts (p_ue_id in number) IS
247 select fk.meaning defer_meaning
248 from ahl_unit_deferrals_b udf, fnd_lookup_values_vl fk
249 where udf.unit_effectivity_id = p_ue_id
250 and fk.lookup_code = decode(udf.approval_status_code,
251 'DEFERRAL_PENDING', DECODE(NVL(udf.cancel_flag,'N'),'Y','CANCEL_PENDING','DEFERRAL_PENDING'),
252 'DEFERRAL_REJECTED', DECODE(NVL(udf.cancel_flag,'N'),'Y','CANCEL_REJECTED','DEFERRAL_REJECTED'),
253 udf.approval_status_code)
254 --and fk.lookup_type = 'AHL_PRD_DF_APPR_STATUS_TYPES'
255 and fk.lookup_type = 'AHL_UNIT_EFFECTIVITY_STATUS'
256 and udf.unit_deferral_type = 'DEFERRAL';
257
258 -- get mel/cdl status for open UMP rows.
259 cursor get_open_mel_cdl_sts (p_ue_id in number) IS
260 select unit_deferral_type || ' ' || fk.meaning defer_meaning
261 from ahl_unit_deferrals_b udf, fnd_lookup_values_vl fk
262 where udf.unit_effectivity_id = p_ue_id
263 and fk.lookup_code = decode(udf.approval_status_code, 'DEFERRED',
264 'APPROVED',udf.approval_status_code)
265 and fk.lookup_type = 'AHL_PRD_DF_APPR_STATUS_TYPES'
266 and udf.unit_deferral_type IN ('MEL','CDL') ;
267
268 --l_defer_code VARCHAR2(30);
269 l_defer_mean VARCHAR2(80);
270
271 -- R12: Fix for bug# 5231770.
272 l_due_counter_value NUMBER;
273 l_net_reading NUMBER;
274 l_approval_status_code VARCHAR2(30);
275 l_unit_deferral_type VARCHAR2(30);
276
277 -- to get the net counter reading for a counter name and item instance.
278 -- modified for uptake of IB fix. Refer bug 7374316.
279 CURSOR get_net_reading_csr (p_csi_item_instance_id IN NUMBER,
280 p_ctr_template_name IN VARCHAR2)
281 IS
282 SELECT (select ccr.net_reading from csi_counter_readings ccr
283 where ccr.counter_value_id = cc.CTR_VAL_MAX_SEQ_NO
284 and nvl(ccr.disabled_flag,'N') = 'N') net_reading
285 FROM CSI_COUNTER_ASSOCIATIONS CCA, CSI_COUNTERS_VL CC
286 WHERE CCA.COUNTER_ID = CC.COUNTER_ID
287 AND CCA.SOURCE_OBJECT_ID = p_csi_item_instance_id
288 AND CCA.SOURCE_OBJECT_CODE = 'CP'
289 AND CC.COUNTER_TEMPLATE_NAME = p_ctr_template_name;
290 /*
291 SELECT nvl(CV.NET_READING, 0)
292 FROM CSI_COUNTER_READINGS CV, CSI_COUNTER_ASSOCIATIONS CCA, CSI_COUNTERS_VL CC
293 WHERE CCA.SOURCE_OBJECT_CODE = 'CP'
294 AND CCA.COUNTER_ID = CV.COUNTER_ID
295 --AND CC.COUNTER_ID = CV.COUNTER_ID
296 AND CC.CTR_VAL_MAX_SEQ_NO = CV.counter_value_id
297 AND CCA.SOURCE_OBJECT_ID = p_csi_item_instance_id
298 AND CC.COUNTER_TEMPLATE_NAME = p_ctr_template_name;
299 --ORDER BY CV.VALUE_TIMESTAMP DESC;
300 */
301
302 -- Bug 9410754 added for adding version number to results table Start
303
304 CURSOR ump_version_csr(mr_id IN NUMBER) IS
305 select mr_status_code, effective_to, version_number from ahl_mr_headers_b
306 where mr_header_id = mr_id;
307
308 l_version_number NUMBER;
309 l_status_code VARCHAR2(40);
310 l_end_date DATE;
311
312 --Bug 9410754 added for adding version number to results table End
313
314 -- added for bug# 6530920.
315 l_orig_ue_instance_id NUMBER;
316 l_buffer_limit number := 500;
317 l_ue_id_tbl nbr_tbl_type;
318
319 l_is_pm_installed VARCHAR2(3) := AHL_UTIL_PKG.is_pm_installed();
320 l_mr_select_sql_string VARCHAR2(4000);
321 l_select_sql_string VARCHAR2(4000);
322 l_mr_select_flag BOOLEAN;
323 l_nr_select_sql_string VARCHAR2(4000);
324
325 l_due_to DATE;
326
327 BEGIN
328 IF (G_DEBUG_PROC >= G_DEBUG_LEVEL)THEN
329 fnd_log.string
330 (
331 G_DEBUG_PROC,
332 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances.begin',
333 'At the start of PLSQL procedure'
334 );
335 END IF;
336 -- Standard start of API savepoint
337 SAVEPOINT Search_MR_Instances_Pvt;
338
339 -- Standard call to check for call compatibility
340 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
341 G_PKG_NAME) THEN
342 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
343 END IF;
344
345 -- Initialize message list if p_init_msg_list is set to TRUE
346 IF FND_API.To_Boolean(p_init_msg_list) THEN
347 FND_MSG_PUB.Initialize;
348 END IF;
349
350 -- Initialize API return status to success
351 x_return_status := FND_API.G_RET_STS_SUCCESS;
352
353
354 -- other initilizations needed for API
355 l_early_exit_status := TRUE;
356 l_bind_index := 1;
357 -- Logging input
358 IF (G_DEBUG_STMT >= G_DEBUG_LEVEL)THEN
359 fnd_log.string
360 (
361 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
362 'p_search_mr_instance_rec.unit_name :' || p_search_mr_instance_rec.unit_name
363 );
364 fnd_log.string
365 (
366 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
367 'p_search_mr_instance_rec.part_number :' || p_search_mr_instance_rec.part_number
368 );
369 fnd_log.string
370 (
371 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
372 'p_search_mr_instance_rec.serial_number :' || p_search_mr_instance_rec.serial_number
373 );
374 fnd_log.string
375 (
376 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
377 'p_search_mr_instance_rec.sort_by :' || p_search_mr_instance_rec.sort_by
378 );
379 fnd_log.string
380 (
381 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
382 'p_search_mr_instance_rec.mr_status :' || p_search_mr_instance_rec.mr_status
383 );
384 fnd_log.string
385 (
386 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
387 'p_search_mr_instance_rec.program_type :' || p_search_mr_instance_rec.program_type
388 );
389 fnd_log.string
390 (
391 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
392 'p_search_mr_instance_rec.due_from :' || p_search_mr_instance_rec.due_from
393 );
394 fnd_log.string
395 (
396 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
397 'p_search_mr_instance_rec.due_to :' || p_search_mr_instance_rec.due_to
398 );
399 fnd_log.string
400 (
401 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
402 'p_search_mr_instance_rec.show_tolerance :' || p_search_mr_instance_rec.show_tolerance
403 );
404 fnd_log.string
405 (
406 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
407 'p_search_mr_instance_rec.components_flag :' || p_search_mr_instance_rec.components_flag
408 );
409 fnd_log.string
410 (
411 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
412 'p_search_mr_instance_rec.repetitive_flag :' || p_search_mr_instance_rec.repetitive_flag
413 );
414 fnd_log.string
415 (
416 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
417 'p_search_mr_instance_rec.contract_number :' || p_search_mr_instance_rec.contract_number
418 );
419 fnd_log.string
420 (
421 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
422 'p_search_mr_instance_rec.contract_modifier :' || p_search_mr_instance_rec.contract_modifier
423 );
424 fnd_log.string
425 (
426 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
427 'p_search_mr_instance_rec.contract_number :' || p_search_mr_instance_rec.contract_number
428 );
429 fnd_log.string
430 (
431 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
432 'p_search_mr_instance_rec.service_line_id :' || p_search_mr_instance_rec.service_line_id
433 );
434 fnd_log.string
435 (
436 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
437 'p_search_mr_instance_rec.service_line_num :' || p_search_mr_instance_rec.service_line_num
438 );
439 fnd_log.string
440 (
441 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
442 'p_search_mr_instance_rec.program_id :' || p_search_mr_instance_rec.program_id
443 );
444 fnd_log.string
445 (
446 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
447 'p_search_mr_instance_rec.program_title :' || p_search_mr_instance_rec.program_title
448 );
449 fnd_log.string
450 (
451 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
452 'p_search_mr_instance_rec.show_groupmr :' || p_search_mr_instance_rec.show_groupmr
453 );
454 fnd_log.string
455 (
456 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
457 'p_search_mr_instance_rec.object_type :' || p_search_mr_instance_rec.object_type
458 );
459
460 fnd_log.string
461 (
462 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
463 'p_search_mr_instance_rec.search_for_type :' || p_search_mr_instance_rec.search_for_type
464 );
465
466 fnd_log.string
467 (
468 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
469 'p_search_mr_instance_rec.INCIDENT_TYPE_ID :' || p_search_mr_instance_rec.INCIDENT_TYPE_ID
470 );
471
472 fnd_log.string
473 (
474 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
475 'p_search_mr_instance_rec.SERVICE_REQ_NUM :' || p_search_mr_instance_rec.SERVICE_REQ_NUM
476 );
477
478 --apattark added for VWPE
479 fnd_log.string
480 (
481 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
482 'p_search_mr_instance_rec.item_grp_name :' || p_search_mr_instance_rec.ITEM_GRP_NAME
483 );
484 fnd_log.string
485 (
486 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
487 'p_search_mr_instance_rec.on_wing :' || p_search_mr_instance_rec.ON_WING
488 );
489
490 -- Sthilak CAM changes
491 fnd_log.string
492 (
493 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
494 'p_search_mr_instance_rec.service_category :' || p_search_mr_instance_rec.SERVICE_CATEGORY
495 );
496
497 fnd_log.string
498 (
499 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
500 'p_search_mr_instance_rec.mr_implement_status :' || p_search_mr_instance_rec.MR_IMPLEMENT_STATUS
501 );
502
503 END IF;
504
505 l_mr_select_flag := FALSE;
506
507 IF p_search_mr_instance_rec.due_to is NOT NULL THEN
508 --l_due_to := TRUNC(p_search_mr_instance_rec.due_to) + 86399/86400;
509 l_due_to := TRUNC(p_search_mr_instance_rec.due_to) + 1;
510 IF (G_DEBUG_STMT >= G_DEBUG_LEVEL)THEN
511 fnd_log.string
512 (
513 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
514 'l_due_to :' || to_char(l_due_to,'DD-MON-YYYY HH24:MI:SS')
515 );
516 END IF;
517 END IF;
518
519 -- validate input
520 -- if both MR title and (INCIDENT_TYPE_ID and/or SERVICE_REQ_NUM) entered, raise error.
521 IF (p_search_mr_instance_rec.mr_title is NOT NULL) AND
522 (p_search_mr_instance_rec.INCIDENT_TYPE_ID IS NOT NULL OR p_search_mr_instance_rec.SERVICE_REQ_NUM IS NOT NULL)
523 THEN
524 FND_MESSAGE.Set_Name('AHL','AHL_UMP_MR_SERQ_INPUT');
525 FND_MSG_PUB.ADD;
526 RAISE FND_API.G_EXC_ERROR;
527 END IF;
528
529 --start fix for bug#7327283
530 --SELECT Clause
531 --l_sql_string := 'SELECT UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_V UMP WHERE 0=0 ';
532
533 --fix for bug# 7562008. Added hint /*+ dynamic_sampling(AAI1 4) */ to queries based on AHL_APPLICABLE_INSTANCES table
534 --as per feedback from Application Performance team.
535 IF (l_is_pm_installed = 'Y') THEN
536 l_sql_string := 'SELECT UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_V UMP WHERE 0=0 ';
537 ELSE
538 IF (p_search_mr_instance_rec.unit_name is NOT NULL OR nvl(p_search_mr_instance_rec.part_number,'%')
539 <> '%' OR p_search_mr_instance_rec.serial_number IS NOT NULL) THEN
540 --l_sql_string := 'SELECT UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP WHERE UMP.application_usg_code= ''AHL'' ';
541 l_select_sql_string := 'SELECT /*+ dynamic_sampling(AAI1 4) */ UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP, AHL_APPLICABLE_INSTANCES AAI1 ';
542 l_select_sql_string := l_select_sql_string || 'WHERE UMP.application_usg_code= :APPL_USG_CODE AND AAI1.csi_item_instance_id = UMP.csi_item_instance_id ';
543 l_mr_select_sql_string := 'SELECT /*+ dynamic_sampling(AAI1 4) */ UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP, AHL_APPLICABLE_INSTANCES AAI1, AHL_MR_HEADERS_B MR';
544 l_mr_select_sql_string := l_mr_select_sql_string || ' WHERE UMP.application_usg_code= :APPL_USG_CODE AND AAI1.csi_item_instance_id = UMP.csi_item_instance_id AND UMP.mr_header_id = MR.mr_header_id ';
545
546 l_bindvar_tbl(l_bind_index) := ltrim(rtrim(fnd_profile.value('AHL_APPLN_USAGE')));
547 l_bind_index := l_bind_index + 1;
548
549 IF p_search_mr_instance_rec.INCIDENT_TYPE_ID IS NOT NULL THEN
550 IF nvl(p_search_mr_instance_rec.SERVICE_REQ_NUM, '%') <> '%' THEN
551 l_nr_select_sql_string := 'SELECT /*+ dynamic_sampling(AAI1 4) */ UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP , AHL_APPLICABLE_INSTANCES AAI1, CS_INCIDENTS_ALL_B CI, CS_INCIDENT_TYPES_VL CIT ';
552 l_nr_select_sql_string := l_nr_select_sql_string || 'WHERE UMP.application_usg_code= :APPL_USG_CODE AND AAI1.csi_item_instance_id = UMP.csi_item_instance_id AND ';
553 l_nr_select_sql_string := l_nr_select_sql_string || 'UMP.cs_incident_id = CI.incident_id AND CI.incident_number like :CS_SERVC_NUM AND CI.incident_type_id = CIT.incident_type_id AND CIT.incident_type_id = :INC_TYPE_ID ';
554
555 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.SERVICE_REQ_NUM;
556 l_bind_index := l_bind_index + 1;
557
558 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.INCIDENT_TYPE_ID;
559 l_bind_index := l_bind_index + 1;
560
561 ELSE -- servc req num is null.
562 l_nr_select_sql_string := 'SELECT /*+ dynamic_sampling(AAI1 4) */ UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP, AHL_APPLICABLE_INSTANCES AAI1, CS_INCIDENTS_ALL_B CI,CS_INCIDENT_TYPES_VL CIT ';
563 l_nr_select_sql_string := l_nr_select_sql_string || 'WHERE UMP.application_usg_code= :APPL_USG_CODE AND AAI1.csi_item_instance_id = UMP.csi_item_instance_id AND UMP.cs_incident_id = CI.incident_id';
564 l_nr_select_sql_string := l_nr_select_sql_string || ' AND CI.incident_type_id = CIT.incident_type_id AND CIT.incident_type_id = :INC_TYPE_ID ';
565 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.INCIDENT_TYPE_ID;
566 l_bind_index := l_bind_index + 1;
567 END IF; -- p_search_mr_instance_rec.SERVICE_REQ_NUM
568 ELSE -- INCIDENT_TYPE_ID is null
569 IF (nvl(p_search_mr_instance_rec.SERVICE_REQ_NUM, '%') <> '%') THEN
570 -- servc req is not null
571 l_nr_select_sql_string := 'SELECT /*+ dynamic_sampling(AAI1 4) */ UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP,AHL_APPLICABLE_INSTANCES AAI1, CS_INCIDENTS_ALL_B CI ';
572 l_nr_select_sql_string := l_nr_select_sql_string || 'WHERE UMP.application_usg_code= :APPL_USG_CODE AND AAI1.csi_item_instance_id = UMP.csi_item_instance_id ';
573 l_nr_select_sql_string := l_nr_select_sql_string || 'AND UMP.cs_incident_id = CI.incident_id AND CI.incident_number like :CS_SERVC_NUM ';
574 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.SERVICE_REQ_NUM;
575 l_bind_index := l_bind_index + 1;
576 ELSE
577 -- both are null
578 null;
579 END IF;
580 END IF; -- p_search_mr_instance_rec.INCIDENT_TYPE_ID
581 ELSE -- p_search_mr_instance_rec.unit_name
582 l_select_sql_string := 'SELECT UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP WHERE UMP.application_usg_code= :APPL_USG_CODE ';
583
584 l_mr_select_sql_string := 'SELECT UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP, AHL_MR_HEADERS_B MR WHERE UMP.application_usg_code= :APPL_USG_CODE AND UMP.mr_header_id = MR.mr_header_id ';
585 l_bindvar_tbl(l_bind_index) := ltrim(rtrim(fnd_profile.value('AHL_APPLN_USAGE')));
586 l_bind_index := l_bind_index + 1;
587 IF p_search_mr_instance_rec.INCIDENT_TYPE_ID IS NOT NULL THEN
588 IF nvl(p_search_mr_instance_rec.SERVICE_REQ_NUM, '%') <> '%' THEN
589 l_nr_select_sql_string := 'SELECT UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP, CS_INCIDENTS_ALL_B CI, CS_INCIDENT_TYPES_VL CIT WHERE UMP.application_usg_code= :APPL_USG_CODE ';
590 l_nr_select_sql_string := l_nr_select_sql_string || ' AND UMP.cs_incident_id = CI.incident_id AND CI.incident_number like :CS_SERVC_NUM AND CI.incident_type_id = CIT.incident_type_id AND CIT.incident_type_id = :INC_TYPE_ID ';
591
592 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.SERVICE_REQ_NUM;
593 l_bind_index := l_bind_index + 1;
594
595 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.INCIDENT_TYPE_ID;
596 l_bind_index := l_bind_index + 1;
597
598 ELSE -- servc req num is null.
599 l_nr_select_sql_string := 'SELECT UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP,CS_INCIDENTS_ALL_B CI,CS_INCIDENT_TYPES_VL CIT ';
600 l_nr_select_sql_string := l_nr_select_sql_string || 'WHERE UMP.application_usg_code= :APPL_USG_CODE AND UMP.cs_incident_id = CI.incident_id ';
601 l_nr_select_sql_string := l_nr_select_sql_string || 'AND CI.incident_type_id = CIT.incident_type_id AND CIT.incident_type_id = :INC_TYPE_ID ';
602
603 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.INCIDENT_TYPE_ID;
604 l_bind_index := l_bind_index + 1;
605 END IF; -- p_search_mr_instance_rec.SERVICE_REQ_NUM
606 ELSE -- INCIDENT_TYPE_ID is null
607 IF (nvl(p_search_mr_instance_rec.SERVICE_REQ_NUM, '%') <> '%') THEN
608 -- servc req is not null
609 l_nr_select_sql_string := 'SELECT UMP.unit_effectivity_id FROM AHL_UNIT_EFFECTIVITIES_B UMP,CS_INCIDENTS_ALL_B CI ';
610 l_nr_select_sql_string := l_nr_select_sql_string || 'WHERE UMP.application_usg_code= :APPL_USG_CODE AND UMP.cs_incident_id = CI.incident_id AND CI.incident_number like :CS_SERVC_NUM ';
611
612 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.SERVICE_REQ_NUM;
613 l_bind_index := l_bind_index + 1;
614 ELSE
615 -- both are null
616 null;
617 END IF;
618 END IF; -- p_search_mr_instance_rec.INCIDENT_TYPE_ID
619 END IF; --p_search_mr_instance_rec.unit_name
620 END IF;
621
622 --end fix for bug#7327283
623
624 --MR Title Check
625 IF p_search_mr_instance_rec.mr_title is NOT NULL THEN
626 IF (l_is_pm_installed = 'Y') THEN
627 l_sql_string := l_sql_string || ' AND UPPER(UMP.TITLE) like :MR_TITLE ';
628 ELSE
629 l_sql_string := l_sql_string || ' AND UPPER(MR.TITLE) like :MR_TITLE ';
630 l_mr_select_flag := TRUE;
631 END IF;
632 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.mr_title);
633 l_bind_index := l_bind_index + 1;
634 END IF;
635
636 --Program Type
637 IF p_search_mr_instance_rec.program_type is NOT NULL THEN
638 /*
639 IF p_module_type = 'VWP' THEN
640 --If the caller is 'VWP'
641 l_sql_string := l_sql_string || ' AND UMP.OBJECT_TYPE = ''MR'' ';
642 ELSIF p_search_mr_instance_rec.program_type = 'NON-ROUTINE' THEN
643 --If the Prgram_type_code is NON_ROUTINE
644 l_sql_string := l_sql_string || ' AND UMP.OBJECT_TYPE IN (''SR'',''MR'') ';
645 END IF;
646 */
647 IF (l_is_pm_installed = 'Y') THEN
648 l_sql_string := l_sql_string || ' AND UMP.PROGRAM_TYPE_CODE like :FMP_PROGRAM_TYPE ';
649 ELSE
650 IF (p_search_mr_instance_rec.program_type = 'NON-ROUTINE' AND l_mr_select_flag = FALSE AND
651 l_nr_select_sql_string IS NULL) THEN
652 --If the Prgram_type_code is NON_ROUTINE
653 l_sql_string := l_sql_string || ' AND UMP.OBJECT_TYPE IN (''SR'',''MR'') ';
654 -- fix for bug#7327283
655 l_sql_string := l_sql_string || ' AND DECODE(UMP.OBJECT_TYPE,''SR'',''NON-ROUTINE'',
656 (select MR.program_type_code from AHL_MR_HEADERS_B MR where MR.mr_header_id = UMP.mr_header_id)) like :FMP_PROGRAM_TYPE ';
657
658 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.program_type;
659 l_bind_index := l_bind_index + 1;
660
661 ELSIF (p_search_mr_instance_rec.program_type = 'NON-ROUTINE' AND l_nr_select_sql_string IS NOT NULL) THEN
662 null; -- filter not required.
663 ELSIF (l_nr_select_sql_string IS NULL) THEN
664 -- only MRs to be selected
665 l_sql_string := l_sql_string || ' AND MR.PROGRAM_TYPE_CODE like :FMP_PROGRAM_TYPE ';
666 l_mr_select_flag := TRUE;
667
668 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.program_type;
669 l_bind_index := l_bind_index + 1;
670 END IF;
671 END IF;
672 END IF;
673
674 --MR Status Check
675 IF (p_search_mr_instance_rec.mr_status is NOT NULL AND UPPER(p_search_mr_instance_rec.mr_status) <> 'ALL') THEN
676 IF UPPER(p_search_mr_instance_rec.mr_status) IN ('OPEN','SCHEDULED','UNSCHEDULED') THEN
677 --l_sql_string := l_sql_string || ' AND nvl(UMP.status_code,''x'') NOT IN (''ACCOMPLISHED'', ''EXCEPTION'', ''INIT-ACCOMPLISHED'', ''TERMINATED'',''MR-TERMINATE'',''DEFERRED'', ''SR-CLOSED'')';
678 l_sql_string := l_sql_string || ' AND (UMP.status_code IS NULL OR UMP.status_code = ''INIT-DUE'') ';
679 IF UPPER(p_search_mr_instance_rec.mr_status) = 'UNSCHEDULED' THEN
680 l_sql_string := l_sql_string || ' AND UMP.preceding_ue_id IS NULL ';
681 END IF;
682 ELSIF p_search_mr_instance_rec.mr_status IN ('DEFERRAL_PENDING','CANCEL_PENDING','CANCEL_REJECTED',
683 'DEFERRAL_REJECTED',
684 'DRAFT')
685 THEN
686 l_sql_string := l_sql_string || ' AND (UMP.status_code IS NULL OR UMP.status_code = ''INIT-DUE'') ';
687 l_sql_string := l_sql_string || ' AND EXISTS (Select ''x'' FROM ahl_unit_deferrals_b WHERE unit_effectivity_id = UMP.unit_effectivity_id AND approval_status_code = :DEFERRAL_STATUS) ';
688 IF(p_search_mr_instance_rec.mr_status = 'CANCEL_REJECTED')THEN
689 l_bindvar_tbl(l_bind_index) := 'DEFERRAL_REJECTED';
690 ELSIF (p_search_mr_instance_rec.mr_status = 'CANCEL_PENDING')THEN
691 l_bindvar_tbl(l_bind_index) := 'DEFERRAL_PENDING';
692 ELSE
693 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.mr_status;
694 END IF;
695 l_bind_index := l_bind_index + 1;
696 /*
697 ELSIF p_search_mr_instance_rec.mr_status like 'CDL%' THEN
698 l_sql_string := l_sql_string || ' AND EXISTS (Select ''x'' FROM ahl_unit_deferrals_b WHERE unit_effectivity_id = UMP.unit_effectivity_id AND unit_deferral_type = ''CDL'' AND approval_status_code = :CDL_STATUS) ';
699 l_bindvar_tbl(l_bind_index) := 'CDL:' || p_search_mr_instance_rec.mr_status;
700 l_bind_index := l_bind_index + 1;
701 ELSIF p_search_mr_instance_rec.mr_status like 'MEL%' THEN
702 l_sql_string := l_sql_string || ' AND EXISTS (Select ''x'' FROM ahl_unit_deferrals_b WHERE unit_effectivity_id = UMP.unit_effectivity_id AND unit_deferral_type = ''MEL'' AND approval_status_code = :MEL_STATUS) ';
703 l_bindvar_tbl(l_bind_index) := 'MEL:' || p_search_mr_instance_rec.mr_status;
704 l_bind_index := l_bind_index + 1;
705 */
706 ELSE
707 l_sql_string := l_sql_string || ' AND UMP.STATUS_CODE = :MR_STATUS ';
708 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.mr_status;
709 l_bind_index := l_bind_index + 1;
710 END IF;
711 END IF;
712
713 --Manually Planned Flag Check
714 IF (p_search_mr_instance_rec.search_for_type is NOT NULL AND p_search_mr_instance_rec.search_for_type <> 'ALL')
715 THEN
716 IF (p_search_mr_instance_rec.search_for_type = 'FORECASTED')
717 THEN
718 l_sql_string := l_sql_string || ' AND NVL(UMP.MANUALLY_PLANNED_FLAG, ''N'') = ''N'' ';
719 ELSIF (p_search_mr_instance_rec.search_for_type = 'MANUALLY_PLANNED')
720 THEN
721 l_sql_string := l_sql_string || ' AND UMP.MANUALLY_PLANNED_FLAG = ''Y'' ';
722 END IF;
723 END IF;
724
725
726 /* *********************************** BEGIN: SHOW TOLERANCE ****************************************** */
727 -- Show Tolerance is N
728 IF p_search_mr_instance_rec.show_tolerance ='N' THEN
729 --Due-From Date Check
730 IF p_search_mr_instance_rec.due_from is NOT NULL THEN
731 l_sql_string := l_sql_string || ' AND UMP.DUE_DATE >= :DUE_FROM1 ';
732 l_bindvar_tbl(l_bind_index) := TRUNC(p_search_mr_instance_rec.due_from);
733 l_bind_index := l_bind_index + 1;
734 END IF;
735 --Due-To Date Check
736 IF p_search_mr_instance_rec.due_to is NOT NULL THEN
737 --l_sql_string := l_sql_string || ' AND UMP.DUE_DATE <= :DUE_TO1 ';
738 l_sql_string := l_sql_string || ' AND UMP.DUE_DATE < :DUE_TO1 ';--bug8265049
739 l_bindvar_tbl(l_bind_index) := l_due_to;--TRUNC(p_search_mr_instance_rec.due_to);//bug8265049
740 l_bind_index := l_bind_index + 1;
741 END IF;
742 ELSE -- Show Tolerance is Y
743 IF ( p_search_mr_instance_rec.due_from is NOT NULL AND p_search_mr_instance_rec.due_to is NOT NULL ) THEN
744 -- Both Due-From and Due-To Dates are there
745 --adivenka modified the following part of the query for bug# 4315128
746 l_sql_string := l_sql_string || ' AND (
747 (:DUE_FROM2 <= nvl(UMP.earliest_due_date, UMP.due_date) AND nvl(UMP.earliest_due_date, UMP.due_date) < :DUE_TO2)
748 OR (nvl(UMP.earliest_due_date, UMP.due_date) <= :DUE_FROM3 AND :DUE_TO3 < nvl(UMP.latest_due_date, UMP.due_date))
749 OR (:DUE_FROM4 <= nvl(UMP.latest_due_date, UMP.due_date) AND nvl(UMP.latest_due_date, UMP.due_date) < :DUE_TO4)
750 )';
751 --adivenka changes end
752
753 -- due from2 and due to2
754 l_bindvar_tbl(l_bind_index) := TRUNC(p_search_mr_instance_rec.due_from);
755 l_bind_index := l_bind_index + 1;
756 l_bindvar_tbl(l_bind_index) := l_due_to;--TRUNC(p_search_mr_instance_rec.due_to);//bug8265049
757 l_bind_index := l_bind_index + 1;
758 -- due from3 and due to3
759 l_bindvar_tbl(l_bind_index) := TRUNC(p_search_mr_instance_rec.due_from);
760 l_bind_index := l_bind_index + 1;
761 l_bindvar_tbl(l_bind_index) := l_due_to;--TRUNC(p_search_mr_instance_rec.due_to);//bug8265049
762 l_bind_index := l_bind_index + 1;
763 -- due from4 and due to4
764 l_bindvar_tbl(l_bind_index) := TRUNC(p_search_mr_instance_rec.due_from);
765 l_bind_index := l_bind_index + 1;
766 l_bindvar_tbl(l_bind_index) := l_due_to;--TRUNC(p_search_mr_instance_rec.due_to);//bug8265049
767 l_bind_index := l_bind_index + 1;
768 ELSIF ( p_search_mr_instance_rec.due_from is NOT NULL AND p_search_mr_instance_rec.due_to is NULL ) THEN
769 -- Only Due-From Date is there and Due-To Date is NULL
770 --adivenka modified the following part of the query for bug# 4315128
771 l_sql_string := l_sql_string || ' AND ( ( ( :DUE_FROM2 <= nvl(UMP.earliest_due_date, UMP.due_date) )
772 )
773 OR
774 ( ( :DUE_FROM3 <= nvl(UMP.latest_due_date, UMP.due_date) )
775 ) )';
776 l_bindvar_tbl(l_bind_index) := TRUNC(p_search_mr_instance_rec.due_from);
777 l_bind_index := l_bind_index + 1;
778 l_bindvar_tbl(l_bind_index) := TRUNC(p_search_mr_instance_rec.due_from);
779 l_bind_index := l_bind_index + 1;
780 ELSIF ( p_search_mr_instance_rec.due_from is NULL AND p_search_mr_instance_rec.due_to is NOT NULL ) THEN
781 -- Only Due-To Date is there and Due-From Date is NULL
782 --adivenka modified the following part of the query for bug# 4315128
783 l_sql_string := l_sql_string || ' AND ( ( ( nvl(UMP.earliest_due_date, UMP.due_date) < :DUE_TO2 )
784 )
785 OR
786 ( ( nvl(UMP.latest_due_date, UMP.due_date) < :DUE_TO3 )
787 ) )';
788 l_bindvar_tbl(l_bind_index) := l_due_to;--TRUNC(p_search_mr_instance_rec.due_to);//bug8265049
789 l_bind_index := l_bind_index + 1;
790 l_bindvar_tbl(l_bind_index) := l_due_to;--TRUNC(p_search_mr_instance_rec.due_to);//bug8265049
791 l_bind_index := l_bind_index + 1;
792 END IF;--Case is ignored when Both Due-From and Due-To Dates are NOT here
793 END IF;
794 /* ***********************************END: SHOW TOLERANCE ****************************************** */
795
796 --Repetitive MR Flag Check
797 IF p_search_mr_instance_rec.repetitive_flag is NOT NULL THEN
798 -- added show_GroupMR condition to fix bug# 9911303
799 IF UPPER(p_search_mr_instance_rec.repetitive_flag) <> 'Y' THEN
800 IF (UPPER(nvl(p_search_mr_instance_rec.show_GroupMR, 'x')) = 'Y') THEN
801 l_sql_string := l_sql_string || ' AND nvl(UMP.REPETITIVE_MR_FLAG,''x'') <> ''Y'' ';
802 ELSE
803 -- for child MRs, check repetitive_flag set for root UE
804 l_sql_string := l_sql_string || ' AND ((nvl(UMP.REPETITIVE_MR_FLAG,''x'')) <> ''Y'' OR EXISTS ( ';
805 l_sql_string := l_sql_string || ' SELECT ''x'' FROM AHL_UNIT_EFFECTIVITIES_B PARENT_UE, AHL_UE_RELATIONSHIPS CHILD_UER';
806 l_sql_string := l_sql_string || ' WHERE PARENT_UE.UNIT_EFFECTIVITY_ID = CHILD_UER.ORIGINATOR_UE_ID AND CHILD_UER.RELATED_UE_ID = UMP.unit_effectivity_id AND PARENT_UE.REPETITIVE_MR_FLAG = ''N'')) ';
807 END IF;
808 END IF; -- p_search_mr_instance_rec.repetitive_flag
809 END IF;
810
811 -- Show GroupMR check.
812 IF p_search_mr_instance_rec.show_GroupMR is NOT NULL THEN
813 IF UPPER(p_search_mr_instance_rec.show_GroupMR) = 'Y' THEN
814 l_sql_string := l_sql_string || ' AND NOT EXISTS (SELECT /*+ no_unnest */ ''x'' FROM AHL_UE_RELATIONSHIPS WHERE RELATED_UE_ID = UMP.unit_effectivity_id)';
815 ELSE
816 -- Added to fix bug# 6972854.
817 -- Child MRs for parent MR that is Init-Accomplished should not be displayed.
818 l_sql_string := l_sql_string || ' AND NOT EXISTS (SELECT ''x'' FROM AHL_UNIT_EFFECTIVITIES_B PARENT_UE, AHL_UE_RELATIONSHIPS CHILD_UER';
819 l_sql_string := l_sql_string || ' WHERE PARENT_UE.UNIT_EFFECTIVITY_ID = CHILD_UER.ORIGINATOR_UE_ID AND CHILD_UER.RELATED_UE_ID = UMP.unit_effectivity_id AND PARENT_UE.STATUS_CODE = ''INIT-ACCOMPLISHED'') ';
820
821 END IF;
822 END IF;
823
824 /*
825 * Temporary table use is introduced to improve performance to fix bug # 3786626
826 */
827 IF p_search_mr_instance_rec.components_flag is NOT NULL THEN
828 DELETE AHL_APPLICABLE_INSTANCES;
829 IF p_search_mr_instance_rec.components_flag = 'N' THEN
830 IF (p_search_mr_instance_rec.unit_name is NOT NULL OR nvl(p_search_mr_instance_rec.part_number,'%')
831 <> '%' OR p_search_mr_instance_rec.serial_number IS NOT NULL) THEN
832 populate_instances
833 (
834 p_module_type => p_module_type,
835 p_search_mr_instance_rec => p_search_mr_instance_rec
836 );
837 -- not required as included in join in l_select_sql_string
838 -- l_sql_string := l_sql_string || ' AND EXISTS (Select ''x'' from AHL_APPLICABLE_INSTANCES AAI WHERE AAI.csi_item_instance_id = UMP.csi_item_instance_id)' ; */
839 END IF;
840 /*ELSE
841 l_sql_string := l_sql_string || ' AND EXISTS (Select ''x'' From csi_unit_instances_v csiu WHERE csiu.instance_id = UMP.csi_item_instance_id )';
842 END IF;*/
843 ELSIF p_search_mr_instance_rec.components_flag = 'Y' THEN
844 IF (p_search_mr_instance_rec.unit_name is NOT NULL OR nvl(p_search_mr_instance_rec.part_number,'%')
845 <> '%' OR p_search_mr_instance_rec.serial_number IS NOT NULL) THEN
846 populate_instances
847 (
848 p_module_type => p_module_type,
849 p_search_mr_instance_rec => p_search_mr_instance_rec
850 );
851 populate_dependent_instances
852 (
853 p_module_type => p_module_type
854 );
855 -- not required as included in join in l_select_sql_string
856 --l_sql_string := l_sql_string || ' AND EXISTS (Select ''x'' from AHL_APPLICABLE_INSTANCES AAI WHERE AAI.csi_item_instance_id = UMP.csi_item_instance_id)' ;
857 END IF;
858 END IF;
859 END IF;
860
861 --start fix for bug#7327283
862
863 IF (l_is_pm_installed = 'Y') THEN
864 --Contract Number
865 IF p_search_mr_instance_rec.contract_number is NOT NULL THEN
866 l_sql_string := l_sql_string || ' AND UPPER(UMP.contract_number) like :CONTRACT_NUMBER ';
867 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.contract_number);
868 l_bind_index := l_bind_index + 1;
869 END IF;
870
871 --Contract Modifier
872 IF p_search_mr_instance_rec.contract_modifier is NOT NULL THEN
873 l_sql_string := l_sql_string || ' AND UPPER(UMP.contract_number_modifier) like :CONTRACT_MODIFIER ';
874 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.contract_modifier);
875 l_bind_index := l_bind_index + 1;
876 END IF;
877
878 --If Contract Number is NOT NULL but Contract Modifier is NULL.
879 IF ( p_search_mr_instance_rec.contract_number is NOT NULL AND p_search_mr_instance_rec.contract_modifier is NULL ) THEN
880 l_sql_string := l_sql_string || ' AND UMP.contract_number_modifier is NULL';
881 END IF;
882
883 --Service Line ID
884 IF ( p_search_mr_instance_rec.service_line_id is NOT NULL AND p_search_mr_instance_rec.service_line_num is NULL) THEN
885 l_sql_string := l_sql_string || ' AND UMP.service_line_id = :SERVICE_LINE_ID ' ;
886 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.service_line_id;
887 l_bind_index := l_bind_index + 1;
888 END IF;
889
890 --Service Line Number
891 IF p_search_mr_instance_rec.service_line_num is NOT NULL THEN
892 l_sql_string := l_sql_string || ' AND UPPER(UMP.service_line_number) like :SERVICE_LINE_NUM ';
893 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.service_line_num);
894 l_bind_index := l_bind_index + 1;
895 END IF;
896
897 --Program ID
898 IF ( p_search_mr_instance_rec.program_id is NOT NULL AND p_search_mr_instance_rec.program_title is NULL ) THEN
899 l_sql_string := l_sql_string || ' AND UMP.program_mr_header_id = :PROGRAM_ID ';
900 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.program_id;
901 l_bind_index := l_bind_index + 1;
902 END IF;
903
904 --Program Title
905 IF p_search_mr_instance_rec.program_title is NOT NULL THEN
906 l_sql_string := l_sql_string || ' AND UPPER(UMP.program_title) like :PROGRAM_TITLE ';
907 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.program_title);
908 l_bind_index := l_bind_index + 1;
909 END IF;
910 END IF;
911
912 --Object Type
913 -- Set when calling for VWP search.
914 IF p_search_mr_instance_rec.object_type is NOT NULL THEN
915 l_sql_string := l_sql_string || ' AND UMP.OBJECT_TYPE = :UMP_OBJECT_TYPE ';
916 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.object_type;
917 l_bind_index := l_bind_index + 1;
918 END IF;
919
920 --amsriniv Begin
921 --Visit Number
922 --Set when calling for UMP Search when not in PM Mode.
923 IF p_search_mr_instance_rec.visit_number is NOT NULL THEN
924 l_sql_string := l_sql_string || ' and exists (select ''x'' from ahl_visits_b vst1,ahl_simulation_plans_b sim, ahl_visit_tasks_b tsk where vst1.simulation_plan_id = sim.simulation_plan_id(+) ';
925 l_sql_string := l_sql_string || 'and sim.primary_plan_flag(+) = ''Y'' and vst1.visit_number like :VISIT_NUMBER and vst1.visit_id = tsk.visit_id AND NVL(vst1.status_code,''x'') NOT ';
926 l_sql_string := l_sql_string || 'IN (''DELETED'',''CANCELLED'') AND NVL(tsk.status_code,''x'') NOT IN (''DELETED'',''CANCELLED'') AND tsk.unit_effectivity_id = UMP.unit_effectivity_id) ' ;
927 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.visit_number;
928 l_bind_index := l_bind_index + 1;
929 END IF;
930 --amsriniv End
931
932 -- pdoki added for VWP Enhancement, Start.
933 IF P_SEARCH_MR_INSTANCE_REC.ITEM_GRP_NAME IS NOT NULL THEN
934 L_SQL_STRING := L_SQL_STRING || ' and exists (select ''x'' from AHL_ITEM_GROUPS_V IG, AHL_ITEM_ASSOCIATIONS_B IA , CSI_ITEM_INSTANCES CSIB where UMP.CSI_ITEM_INSTANCE_ID = CSIB.INSTANCE_ID ';
935 l_sql_string := l_sql_string || ' AND CSIB.inventory_item_id = IA.inventory_item_id ';
936 l_sql_string := l_sql_string || ' AND IA.ITEM_GROUP_ID = IG.ITEM_GROUP_ID AND IG.NAME like :item_grp_name) ';
937 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.item_grp_name;
938 l_bind_index := l_bind_index + 1;
939 END IF;
940
941 IF p_search_mr_instance_rec.on_wing is NOT NULL THEN
942 l_sql_string := l_sql_string || ' and exists (select ''x'' from AHL_MR_HEADERS_B MRB ';
943 l_sql_string := l_sql_string || ' WHERE UMP.mr_header_id = MRB.mr_header_id AND MRB.service_type_code = :on_wing) ';
944 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.on_wing;
945 l_bind_index := l_bind_index + 1;
946 END IF;
947 -- pdoki added for VWP Enhancement, End.
948
949 --Sthilak CAM changes - begin
950 -- check the page loaded from VWP
951 IF (p_search_mr_instance_rec.IS_VWP_NAVG ='Y') THEN
952
953 -- MR implement status check
954 IF p_search_mr_instance_rec.MR_IMPLEMENT_STATUS is NOT NULL THEN
955 l_sql_string := l_sql_string || ' and exists (select ''x'' from AHL_MR_HEADERS_B MRB ';
956 l_sql_string := l_sql_string || ' WHERE UMP.mr_header_id = MRB.mr_header_id AND UPPER(MRB.IMPLEMENT_STATUS_CODE) = :MR_IMPLEMENT_STATUS )';
957
958 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.MR_IMPLEMENT_STATUS);
959 l_bind_index := l_bind_index + 1;
960 END IF;
961
962 -- MR service category check
963 IF p_search_mr_instance_rec.SERVICE_CATEGORY is NOT NULL THEN
964 BEGIN
965 IF(TO_NUMBER(p_search_mr_instance_rec.SERVICE_CATEGORY) >= 0)THEN
966 NULL;
967 END IF;
968 EXCEPTION
969 WHEN OTHERS THEN
970 FND_MESSAGE.SET_NAME('AHL','AHL_UMP_MR_SCAT_NON_NUM');
971 FND_MSG_PUB.ADD;
972 RAISE FND_API.G_EXC_ERROR;
973 END;
974 l_sql_string := l_sql_string || ' and exists (select ''x'' from AHL_MR_HEADERS_B MRB ';
975 l_sql_string := l_sql_string || ' WHERE UMP.mr_header_id = MRB.mr_header_id AND MRB.SERVICE_CATEGORY_RANK >= :SERVICE_CATEGORY_RANK )';
976
977 l_bindvar_tbl(l_bind_index) := TO_NUMBER(p_search_mr_instance_rec.SERVICE_CATEGORY);
978 l_bind_index := l_bind_index + 1;
979 END IF;
980
981 END IF;
982 --Sthilak CAM changes - end
983 -- order by clause.. based on the sortBy criteria
984 IF p_search_mr_instance_rec.sort_by is NOT NULL THEN
985 IF p_search_mr_instance_rec.sort_by = 'AHL_COM_DUE_DATE' THEN
986 l_sql_string := l_sql_string || ' ORDER BY UMP.DUE_DATE ASC NULLS FIRST';
987 ELSIF p_search_mr_instance_rec.sort_by = 'AHL_UMP_MR_PROGRAM' THEN
988 IF (l_is_pm_installed = 'Y') THEN
989 l_sql_string := l_sql_string || ' ORDER BY UMP.PROGRAM_TYPE_CODE';
990 ELSIF (l_mr_select_flag = TRUE) THEN
991 l_sql_string := l_sql_string || ' ORDER BY MR.PROGRAM_TYPE_CODE';
992 ELSIF (l_nr_select_sql_string IS NOT NULL) THEN
993 l_sql_string := l_sql_string || ' ORDER BY ''NONROUTINE'' ';
994 ELSE
995 l_sql_string := l_sql_string || ' ORDER BY DECODE(UMP.OBJECT_TYPE,''SR'',''NON-ROUTINE'',
996 (select MR.program_type_code from AHL_MR_HEADERS_B MR where MR.mr_header_id = UMP.mr_header_id))';
997 END IF;
998 ELSIF p_search_mr_instance_rec.sort_by = 'AHL_UMP_MR_CATEGORY' THEN
999 IF (l_is_pm_installed = 'Y') THEN
1000 l_sql_string := l_sql_string || ' ORDER BY UMP.CATEGORY_CODE';
1001 ELSIF (l_mr_select_flag = TRUE) THEN
1002 l_sql_string := l_sql_string || ' ORDER BY MR.CATEGORY_CODE';
1003 ELSE
1004 l_sql_string := l_sql_string || ' ORDER BY DECODE(UMP.OBJECT_TYPE,''SR'',NULL,
1005 (select MR.category_code from AHL_MR_HEADERS_B MR where MR.mr_header_id = UMP.mr_header_id))';
1006 END IF;
1007 ELSIF p_search_mr_instance_rec.sort_by = 'AHL_UMP_IMPL_STATUS' THEN
1008 l_sql_string := l_sql_string || ' ORDER BY UMP.STATUS_CODE';
1009 END IF;
1010 END IF;
1011
1012 -- form complete SQL
1013 IF (l_mr_select_flag = TRUE) THEN
1014 l_sql_string := l_mr_select_sql_string || l_sql_string;
1015 ELSIF (l_nr_select_sql_string IS NOT NULL) THEN
1016 l_sql_string := l_nr_select_sql_string || l_sql_string;
1017 ELSE
1018 l_sql_string := l_select_sql_string || l_sql_string;
1019 END IF;
1020
1021 -- Logging the sql string .
1022 IF (G_DEBUG_STMT >= G_DEBUG_LEVEL)THEN
1023 fnd_log.string
1024 (
1025 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
1026 'Prepared SQL string IS '
1027 );
1028 l_sql_segment_count := CEIL(LENGTH(l_sql_string)/4000);
1029 FOR i in 1..l_sql_segment_count LOOP
1030 IF(i < l_sql_segment_count - 1) THEN
1031 fnd_log.string
1032 (
1033 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
1034 SUBSTR(l_sql_string,(i-1)*4000,4000)
1035 );
1036 ELSE
1037 fnd_log.string
1038 (
1039 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
1040 SUBSTR(l_sql_string,(i-1)*4000, LENGTH(l_sql_string) - (l_sql_segment_count -1 ) * 4000)
1041 );
1042 END IF;
1043 END LOOP;
1044 END IF;
1045
1046 --Fix for Bug 2745891
1047 IF ( p_search_mr_instance_rec.mr_status = 'SCHEDULED' OR p_search_mr_instance_rec.mr_status = 'UNSCHEDULED') THEN
1048 l_early_exit_status := false;
1049 END IF;
1050
1051 --open l_cur FOR l_sql_string;
1052 AHL_OSP_UTIL_PKG.OPEN_SEARCH_CURSOR
1053 (
1054 p_conditions_tbl => l_bindvar_tbl,
1055 p_sql_str => l_sql_string,
1056 p_x_csr => l_cur
1057 );
1058
1059 -- initialize loop counters
1060 row_count := 0;
1061 l_counter:= 0;
1062 LOOP
1063 -- l_unit_effectivity_id
1064 FETCH l_cur BULK COLLECT INTO l_ue_id_tbl LIMIT l_buffer_limit;
1065 EXIT WHEN (l_ue_id_tbl.count = 0);
1066
1067 FOR j IN l_ue_id_tbl.FIRST..l_ue_id_tbl.LAST LOOP
1068 l_unit_effectivity_id := l_ue_id_tbl(j);
1069 l_pick_record_flag := TRUE;--record picked
1070
1071 -- Fix for Bug 2745891
1072 -- Get details only if required
1073 IF ( l_early_exit_status = FALSE OR ( row_count >= p_start_row AND row_count < p_start_row + p_rows_per_page)) THEN
1074 -- Check if PM is installed
1075 IF (l_is_pm_installed = 'Y') THEN
1076 -- IF PM is installed, Service Request Details are displayed.
1077 l_service_req_id := NULL;
1078 l_service_req_num := NULL;
1079 l_service_req_date := NULL;
1080
1081 AHL_UMP_UTIL_PKG.get_ServiceRequest_Details
1082 (
1083 l_unit_effectivity_id,
1084 l_service_req_id,
1085 l_service_req_num,
1086 l_service_req_date
1087 );
1088
1089 -- Handling Scheduled and Unscheduled status.
1090 IF ( p_search_mr_instance_rec.mr_status = 'SCHEDULED' AND
1091 l_service_req_num IS NULL ) OR
1092 ( p_search_mr_instance_rec.mr_status = 'UNSCHEDULED' AND
1093 l_service_req_num IS NOT NULL )
1094 THEN
1095 l_pick_record_flag := FALSE;
1096 END IF;
1097 ELSE
1098 -- IF PM is NOT installed, Visit Details are displayed.
1099 l_scheduled_date := NULL;
1100 l_visit_number := NULL;
1101 l_visit_id := NULL; --PDOKI Added for ER# 6333770
1102 --amsriniv ER 6116245
1103 OPEN ahl_visit_csr (l_unit_effectivity_id, p_search_mr_instance_rec.visit_number, p_search_mr_instance_rec.visit_org_name, p_search_mr_instance_rec.visit_dept_name);
1104 FETCH ahl_visit_csr INTO l_scheduled_date, l_visit_number, l_visit_id;
1105 CLOSE ahl_visit_csr;
1106 IF ((p_search_mr_instance_rec.visit_number IS NOT NULL OR
1107 p_search_mr_instance_rec.visit_org_name IS NOT NULL OR
1108 p_search_mr_instance_rec.visit_dept_name IS NOT NULL) AND
1109 l_visit_number IS NULL) THEN
1110 l_pick_record_flag := FALSE;
1111 END IF;
1112 --amsriniv ER 6116245
1113 --Error check
1114 IF FND_MSG_PUB.count_msg > 0 THEN
1115 RAISE FND_API.G_EXC_ERROR;
1116 END IF;
1117 -- Handling Scheduled and Unscheduled status.
1118 IF ( p_search_mr_instance_rec.mr_status = 'SCHEDULED' AND
1119 l_visit_number IS NULL ) OR
1120 ( p_search_mr_instance_rec.mr_status = 'UNSCHEDULED' AND
1121 l_visit_number IS NOT NULL ) THEN
1122 l_pick_record_flag := FALSE;
1123 END IF;
1124 END IF; -- End ifPMinstalled check
1125 END IF; -- End if Get Details Only if required
1126
1127 -- Picking the records for which the l_pick_record_flag is true.
1128 IF(l_pick_record_flag) THEN
1129 IF ( row_count >= p_start_row AND row_count < p_start_row + p_rows_per_page) THEN
1130 --Changes for SBE - Dependent MR Details Begins
1131 SELECT preceding_ue_id, terminating_ue_id, accomplish_trigger_type,
1132 (SELECT mr.title FROM ahl_mr_headers_b mr,ahl_unit_effectivities_b dep
1133 WHERE dep.mr_header_id = mr.mr_header_id
1134 AND dep.unit_effectivity_id = eff.terminating_ue_id) termtitle
1135 INTO l_prec_ue_id, l_term_ue_id,l_acc_trig_reln_type,l_term_title
1136 FROM ahl_unit_effectivities_b eff
1137 WHERE unit_effectivity_id = l_unit_effectivity_id;
1138 --Changes for SBE - Dependent MR Details Ends
1139 OPEN ump_details_csr(l_unit_effectivity_id);
1140 FETCH ump_details_csr INTO x_results_mr_instance_tbl(l_counter).PROGRAM_TYPE_MEANING,
1141 x_results_mr_instance_tbl(l_counter).MR_TITLE,
1142 x_results_mr_instance_tbl(l_counter).PART_NUMBER,
1143 x_results_mr_instance_tbl(l_counter).SERIAL_NUMBER,
1144 -- R12: Fix for bug# 5231770.
1145 -- commented uom_remain and added l_due_counter_value
1146 -- x_results_mr_instance_tbl(l_counter).UOM_REMAIN,
1147 l_due_counter_value,
1148 x_results_mr_instance_tbl(l_counter).COUNTER_NAME,
1149 x_results_mr_instance_tbl(l_counter).EARLIEST_DUE_DATE,
1150 x_results_mr_instance_tbl(l_counter).DUE_DATE,
1151 x_results_mr_instance_tbl(l_counter).LATEST_DUE_DATE,
1152 x_results_mr_instance_tbl(l_counter).TOLERANCE_FLAG,
1153 x_results_mr_instance_tbl(l_counter).UMR_STATUS_CODE,
1154 x_results_mr_instance_tbl(l_counter).UMR_STATUS_MEANING,
1155 x_results_mr_instance_tbl(l_counter).ORIGINATOR_TITLE,
1156 x_results_mr_instance_tbl(l_counter).DEPENDANT_TITLE,
1157 x_results_mr_instance_tbl(l_counter).UNIT_EFFECTIVITY_ID,
1158 x_results_mr_instance_tbl(l_counter).MR_ID,
1159 x_results_mr_instance_tbl(l_counter).CSI_ITEM_INSTANCE_ID,
1160 x_results_mr_instance_tbl(l_counter).INSTANCE_NUMBER,
1161 x_results_mr_instance_tbl(l_counter).MR_INTERVAL_ID,
1162 x_results_mr_instance_tbl(l_counter).UNIT_NAME,
1163 x_results_mr_instance_tbl(l_counter).PROGRAM_TITLE,
1164 x_results_mr_instance_tbl(l_counter).CONTRACT_NUMBER,
1165 x_results_mr_instance_tbl(l_counter).DEFER_FROM_UE_ID,
1166 x_results_mr_instance_tbl(l_counter).OBJECT_TYPE,
1167 l_counter_id,
1168 x_results_mr_instance_tbl(l_counter).MANUALLY_PLANNED_FLAG,
1169 x_results_mr_instance_tbl(l_counter).MANUALLY_PLANNED_DESC,
1170 -- anraj: added UMP.cs_incident_id, UMP.cs_incident_number
1171 -- for bug#4133332
1172 x_results_mr_instance_tbl(l_counter).service_req_id,
1173 x_results_mr_instance_tbl(l_counter).service_req_num,
1174 l_orig_ue_instance_id;
1175
1176 CLOSE ump_details_csr;-- no record found case is not possible
1177
1178 -- Bug 9410754 added for adding version number to results table Start
1179 OPEN ump_version_csr(x_results_mr_instance_tbl(l_counter).MR_ID);
1180 FETCH ump_version_csr INTO l_status_code, l_end_date, l_version_number;
1181 CLOSE ump_version_csr;
1182
1183 --Changes for SBE - Dependent MR Details Begins
1184 -- For initiating UE, the dependent title is initiation MR title
1185 -- and for terminating UE, the dependent title should be populated with terminating MR title.
1186 IF l_prec_ue_id IS NULL AND l_term_ue_id IS NOT NULL THEN
1187 x_results_mr_instance_tbl(l_counter).DEPENDANT_TITLE := l_term_title;
1188 x_results_mr_instance_tbl(l_counter).acc_trig_reln_type := 'TERMINATED_BY';
1189 ELSIF l_acc_trig_reln_type IS NOT NULL THEN
1190 x_results_mr_instance_tbl(l_counter).acc_trig_reln_type := l_acc_trig_reln_type;
1191 ELSIF l_prec_ue_id IS NOT NULL THEN
1192 x_results_mr_instance_tbl(l_counter).acc_trig_reln_type := 'INITIATED_BY';
1193 END IF;
1194 --Changes for SBE - Dependent MR Details Ends
1195
1196 IF(l_status_code = 'TERMINATED' OR l_end_date <= sysdate) THEN
1197 x_results_mr_instance_tbl(l_counter).version_number := l_version_number || '+';
1198 IF (G_DEBUG_STMT >= G_DEBUG_LEVEL)THEN
1199 fnd_log.string
1200 (
1201 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
1202 'entered +' || l_end_date || l_status_code || sysdate
1203 );
1204 END IF;
1205 ELSE
1206 x_results_mr_instance_tbl(l_counter).version_number := l_version_number;
1207 IF (G_DEBUG_STMT >= G_DEBUG_LEVEL)THEN
1208 fnd_log.string
1209 (
1210 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
1211 'entered normal' || l_end_date || l_status_code || sysdate
1212 );
1213 END IF;
1214 END IF;
1215 -- Bug 9410754 for adding version number to results table End
1216
1217 -- Added to fix bug number 3693957
1218 IF (l_is_pm_installed = 'Y') THEN
1219 x_results_mr_instance_tbl(l_counter).service_req_id := l_service_req_id;
1220 x_results_mr_instance_tbl(l_counter).service_req_num := l_service_req_num;
1221 x_results_mr_instance_tbl(l_counter).service_req_date := l_service_req_date;
1222 ELSE
1223 x_results_mr_instance_tbl(l_counter).scheduled_date := l_scheduled_date;
1224 x_results_mr_instance_tbl(l_counter).visit_number := l_visit_number;
1225 x_results_mr_instance_tbl(l_counter).visit_id := l_visit_id; --PDOKI Added for ER# 6333770
1226
1227 END IF;
1228 -- end of fix for bug number 3693957
1229
1230 -- Sthilak CAM changes begin
1231 IF (p_search_mr_instance_rec.IS_VWP_NAVG ='Y') THEN
1232 x_results_mr_instance_tbl(l_counter).BUILD_GOAL_PERCENT := AHL_COMPLEX_MX_PVT.CALC_BUILD_GOAL(
1233 x_results_mr_instance_tbl(l_counter).CSI_ITEM_INSTANCE_ID,
1234 p_search_mr_instance_rec.VWP_VISIT_ID,
1235 x_results_mr_instance_tbl(l_counter).UNIT_EFFECTIVITY_ID);
1236 ELSE
1237 x_results_mr_instance_tbl(l_counter).BUILD_GOAL_PERCENT := 0;
1238 END IF;
1239 -- Sthilak CAM chnages end
1240
1241 --Type of record
1242 IF(x_results_mr_instance_tbl(l_counter).MR_ID IS NULL) THEN
1243 x_results_mr_instance_tbl(l_counter).unit_effectivity_type := 'SR';
1244 ELSE
1245 x_results_mr_instance_tbl(l_counter).unit_effectivity_type := 'MR';
1246 END IF;
1247
1248 -- For 'Deferred' UE, get the defer to ue id.
1249 IF (x_results_mr_instance_tbl(l_counter).UMR_STATUS_CODE = 'DEFERRED') THEN
1250 OPEN ahl_defer_to_ue_csr(l_unit_effectivity_id);
1251 FETCH ahl_defer_to_ue_csr INTO x_results_mr_instance_tbl(l_counter).DEFER_TO_UE_ID;
1252 CLOSE ahl_defer_to_ue_csr;
1253
1254 -- indicate if MEL or CDL deferred.
1255 OPEN get_deferral_sts(l_unit_effectivity_id);
1256 FETCH get_deferral_sts INTO l_defer_mean;
1257 IF (get_deferral_sts%FOUND) THEN
1258 --x_results_mr_instance_tbl(l_counter).UMR_STATUS_CODE := l_defer_code;
1259 x_results_mr_instance_tbl(l_counter).UMR_STATUS_MEANING := l_defer_mean;
1260 END IF;
1261 CLOSE get_deferral_sts;
1262 END IF;
1263
1264 -- set status code based on deferrals. Note this changes the
1265 -- UMR_STATUS_CODE.
1266 --IF (x_results_mr_instance_tbl(l_counter).UMR_STATUS_CODE IS NULL OR
1267 -- x_results_mr_instance_tbl(l_counter).UMR_STATUS_CODE = 'INIT-DUE') THEN
1268 --END IF;
1269
1270 -- Set UOM remain as Null for closed UMPs.
1271 -- R12: Fix for bug# 5231770 - calculate uom_remain.
1272 IF (x_results_mr_instance_tbl(l_counter).UMR_STATUS_CODE IS NULL OR
1273 x_results_mr_instance_tbl(l_counter).UMR_STATUS_CODE = 'INIT-DUE')
1274 THEN
1275 IF (x_results_mr_instance_tbl(l_counter).COUNTER_NAME IS NOT NULL) THEN
1276 -- uom_remain based on interval threshold.
1277 IF (x_results_mr_instance_tbl(l_counter).ORIGINATOR_TITLE IS NULL) THEN
1278 OPEN get_net_reading_csr (
1279 x_results_mr_instance_tbl(l_counter).CSI_ITEM_INSTANCE_ID,
1280 x_results_mr_instance_tbl(l_counter).COUNTER_NAME);
1281 ELSE
1282 OPEN get_net_reading_csr (
1283 l_orig_ue_instance_id,
1284 x_results_mr_instance_tbl(l_counter).COUNTER_NAME);
1285 END IF;
1286 FETCH get_net_reading_csr INTO l_net_reading;
1287 IF (get_net_reading_csr%NOTFOUND) OR (l_net_reading IS NULL) THEN
1288 l_net_reading := 0;
1289 END IF;
1290 CLOSE get_net_reading_csr;
1291 x_results_mr_instance_tbl(l_counter).UOM_REMAIN := l_due_counter_value - l_net_reading;
1292
1293 -- UOM remain based on init due threshold counter_id.
1294 ELSIF (l_counter_id IS NOT NULL) THEN
1295 OPEN ump_ctr_name_csr(l_counter_id);
1296 FETCH ump_ctr_name_csr INTO x_results_mr_instance_tbl(l_counter).COUNTER_NAME,
1297 l_net_reading;
1298 IF (ump_ctr_name_csr%NOTFOUND) THEN
1299 l_net_reading := 0;
1300 ELSIF (l_net_reading IS NULL) THEN
1301 l_net_reading := 0;
1302 END IF;
1303 CLOSE ump_ctr_name_csr;
1304
1305 x_results_mr_instance_tbl(l_counter).UOM_REMAIN := l_due_counter_value - l_net_reading;
1306
1307 END IF; -- x_results_mr_instance_tbl(l_counter).COUNTER_NAME
1308
1309 -- get MEL/CDL deferral status
1310 -- first check for deferral record.
1311 OPEN get_open_deferral_sts(l_unit_effectivity_id);
1312 FETCH get_open_deferral_sts INTO l_defer_mean;
1313 IF (get_open_deferral_sts%FOUND) THEN
1314 x_results_mr_instance_tbl(l_counter).UMR_STATUS_MEANING := l_defer_mean;
1315 ELSE -- no deferral record found. Chk for MEL/CDL deferral.
1316 OPEN get_open_mel_cdl_sts(l_unit_effectivity_id);
1317 FETCH get_open_mel_cdl_sts INTO l_defer_mean;
1318 IF (get_open_mel_cdl_sts%FOUND) THEN
1319 x_results_mr_instance_tbl(l_counter).UMR_STATUS_MEANING := l_defer_mean;
1320 END IF;
1321 CLOSE get_open_mel_cdl_sts;
1322 END IF;
1323 CLOSE get_open_deferral_sts;
1324
1325 ELSE
1326 x_results_mr_instance_tbl(l_counter).UOM_REMAIN := NULL;
1327 END IF; -- x_results_mr_instance_tbl(l_counter).UMR_STATUS_CODE
1328
1329 -- increment counter
1330 l_counter := l_counter +1;
1331 END IF;
1332 row_count := row_count + 1;
1333 END IF; -- End l_picked_flag
1334 END LOOP; -- l_ue_id_tbl loop
1335 l_ue_id_tbl.DELETE;
1336 END LOOP; -- End LOOP
1337 -- The total number of rows returned
1338 x_results_count := row_count;
1339 --Close the dynamic cursor and free up resources
1340 CLOSE l_cur;
1341
1342 -- Standard call to get message count and if count is 1, get message info
1343 FND_MSG_PUB.Count_And_Get
1344 (
1345 p_count => x_msg_count,
1346 p_data => x_msg_data,
1347 p_encoded => fnd_api.g_false
1348 );
1349
1350 -- Logging input
1351 IF (G_DEBUG_STMT >= G_DEBUG_LEVEL)THEN
1352 fnd_log.string
1353 (
1354 G_DEBUG_STMT, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances',
1355 'number of records returned :' || x_results_count
1356 );
1357 END IF;
1358
1359 IF (G_DEBUG_PROC >= G_DEBUG_LEVEL)THEN
1360 fnd_log.string
1361 (
1362 G_DEBUG_PROC,
1363 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Search_MR_Instances.end',
1364 'At the end of PLSQL procedure'
1365 );
1366 END IF;
1367
1368 EXCEPTION
1369 WHEN FND_API.G_EXC_ERROR THEN
1370 x_return_status := FND_API.G_RET_STS_ERROR;
1371 ROLLBACK TO Search_MR_Instances_Pvt;
1372 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1373 p_data => x_msg_data,
1374 p_encoded => fnd_api.g_false);
1375
1376
1377 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1378 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1379 ROLLBACK TO Search_MR_Instances_Pvt;
1380 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1381 p_data => x_msg_data,
1382 p_encoded => fnd_api.g_false);
1383
1384 WHEN OTHERS THEN
1385 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1386 ROLLBACK TO Search_MR_Instances_Pvt;
1387 FND_MSG_PUB.add_exc_msg( p_pkg_name => G_PKG_NAME,
1388 p_procedure_name => 'Search_MR_Instances',
1389 p_error_text => SQLERRM);
1390
1391 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1392 p_data => x_msg_data,
1393 p_encoded => fnd_api.g_false);
1394
1395 END Search_MR_Instances;
1396
1397
1398 PROCEDURE populate_instances(
1399 p_module_type IN VARCHAR2,
1400 p_search_mr_instance_rec IN AHL_UMP_SMRINSTANCE_PVT.Search_MRInstance_Rec_Type) IS
1401
1402
1403 CURSOR only_units_csr(p_unit_name in VARCHAR2) IS
1404 Select ahlu.csi_item_instance_id from ahl_unit_config_headers ahlu
1405 where UPPER(ahlu.name) like upper(p_unit_name);
1406
1407
1408 l_unit_related_ii_sql VARCHAR2(4000);
1409
1410 l_bind_index NUMBER;
1411 l_bindvar_tbl AHL_OSP_UTIL_PKG.ahl_conditions_tbl;
1412
1413 -- dynamic cursor
1414 l_cur AHL_OSP_UTIL_PKG.ahl_search_csr;
1415 --l_instance_id NUMBER;
1416
1417 l_inst_tbl nbr_tbl_type;
1418 l_buffer_limit number := 500;
1419
1420 BEGIN
1421 --l_all_csi_ii_id sql_string [ Blind search at unit level]
1422 IF (p_search_mr_instance_rec.unit_name is NOT NULL AND nvl(p_search_mr_instance_rec.part_number,'%')
1423 = '%' AND p_search_mr_instance_rec.serial_number is NULL) THEN
1424 FOR only_units_rec IN only_units_csr(p_search_mr_instance_rec.unit_name) LOOP
1425 INSERT INTO AHL_APPLICABLE_INSTANCES (CSI_ITEM_INSTANCE_ID, POSITION_ID) VALUES (only_units_rec.csi_item_instance_id,0);
1426 END LOOP;
1427
1428 ELSE
1429 l_bind_index := 1;
1430 l_unit_related_ii_sql := 'select csii.instance_id from csi_item_instances csii ';
1431
1432 IF nvl(p_search_mr_instance_rec.part_number,'%')
1433 <> '%' THEN
1434 l_unit_related_ii_sql := l_unit_related_ii_sql || ', mtl_system_items_kfv mtl ';
1435 END IF;
1436
1437 IF p_search_mr_instance_rec.unit_name is NOT NULL THEN
1438 l_unit_related_ii_sql := l_unit_related_ii_sql || ', ahl_unit_config_headers uc ';
1439 END IF;
1440
1441 l_unit_related_ii_sql := l_unit_related_ii_sql || 'where 0=0 ';
1442
1443 IF nvl(p_search_mr_instance_rec.part_number,'%')
1444 <> '%' THEN
1445 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and mtl.inventory_item_id = csii.inventory_item_id and mtl.organization_id = csii.inv_master_organization_id ';
1446
1447 /*
1448 IF p_module_type = 'VWP' THEN
1449 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and csidv.concatenated_segments like :PART_NUMBER ';
1450 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.part_number;
1451 ELSE
1452 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and UPPER(csidv.concatenated_segments) like :PART_NUMBER ';
1453 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.part_number);
1454 END IF;
1455 */
1456
1457 /* Using UPPER() on concatenated_segments does not pick up any index and cost is very high ~ 45K in gsihrms
1458 * Also Ahmed Alomari's mail to appsperf_us (dt: 17-Feb-2006) says the following...
1459 * Part numbers are rarely case insensitive, so you can remove the upper.
1460 */
1461
1462 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and mtl.concatenated_segments like :PART_NUMBER ';
1463 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.part_number;
1464 l_bind_index := l_bind_index + 1;
1465 END IF;
1466
1467 IF p_search_mr_instance_rec.serial_number is NOT NULL THEN
1468 IF p_module_type = 'VWP' THEN
1469 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and csii.serial_number like :SERIAL_NUMBER ';
1470 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.serial_number;
1471 ELSE
1472 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and UPPER(csii.serial_number) like :SERIAL_NUMBER ';
1473 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.serial_number);
1474 END IF;
1475 l_bind_index := l_bind_index + 1;
1476 END IF;
1477
1478 IF p_search_mr_instance_rec.unit_name is NOT NULL THEN
1479 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and csii.instance_id = uc.csi_item_instance_id ';
1480 IF p_module_type = 'VWP' THEN
1481 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and uc.name like :UNIT_NAME ';
1482 l_bindvar_tbl(l_bind_index) := p_search_mr_instance_rec.unit_name;
1483 ELSE
1484 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and UPPER(uc.name) like :UNIT_NAME ';
1485 l_bindvar_tbl(l_bind_index) := UPPER(p_search_mr_instance_rec.unit_name);
1486 END IF;
1487 l_bind_index := l_bind_index + 1;
1488 END IF;
1489
1490 IF p_search_mr_instance_rec.components_flag = 'N' THEN
1491 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and EXISTS (select ''x'' from ahl_unit_effectivities_b UE where UE.csi_item_instance_id = csii.instance_id)';
1492 END IF;
1493
1494 AHL_OSP_UTIL_PKG.OPEN_SEARCH_CURSOR
1495 (
1496 p_conditions_tbl => l_bindvar_tbl,
1497 p_sql_str => l_unit_related_ii_sql,
1498 p_x_csr => l_cur
1499 );
1500 -- use dynamic cursor to execute query
1501 LOOP
1502 FETCH l_cur BULK COLLECT INTO l_inst_tbl LIMIT l_buffer_limit;
1503 EXIT WHEN (l_inst_tbl.count = 0);
1504 FOR j IN l_inst_tbl.FIRST..l_inst_tbl.LAST LOOP
1505 --FETCH l_cur INTO l_instance_id;
1506 --EXIT WHEN l_cur%NOTFOUND;
1507 INSERT INTO AHL_APPLICABLE_INSTANCES (CSI_ITEM_INSTANCE_ID, POSITION_ID) VALUES(l_inst_tbl(j),0);
1508 END LOOP; -- l_ue_id_tbl loop
1509 l_inst_tbl.DELETE;
1510 END LOOP;
1511
1512 CLOSE l_cur;
1513 END IF;
1514
1515
1516 END populate_instances;
1517
1518 PROCEDURE populate_unit_instances(
1519 p_module_type IN VARCHAR2,
1520 p_search_ump_rec IN AHL_UMP_SMRINSTANCE_PVT.Search_Ump_Rec_Type) IS
1521
1522
1523 CURSOR only_units_csr(p_unit_name in VARCHAR2) IS
1524 Select ahlu.csi_item_instance_id from ahl_unit_config_headers ahlu
1525 where UPPER(ahlu.name) like upper(p_unit_name);
1526
1527 l_unit_related_ii_sql VARCHAR2(4000);
1528
1529 l_bind_index NUMBER;
1530 l_bindvar_tbl AHL_OSP_UTIL_PKG.ahl_conditions_tbl;
1531
1532 -- dynamic cursor
1533 l_cur AHL_OSP_UTIL_PKG.ahl_search_csr;
1534 --l_instance_id NUMBER;
1535
1536 l_inst_tbl nbr_tbl_type;
1537 L_BUFFER_LIMIT NUMBER := 500;
1538 L_DUE_FROM DATE;
1539 L_DUE_TO DATE;
1540
1541 BEGIN
1542 IF(P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
1543 IF (P_SEARCH_UMP_REC.DUE_WITHIN IS NOT NULL AND P_SEARCH_UMP_REC.DUE_WITHIN_UOM IS NOT NULL)THEN
1544 L_DUE_FROM := SYSDATE;
1545 IF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'HOUR')THEN
1546 L_DUE_TO := L_DUE_FROM + P_SEARCH_UMP_REC.DUE_WITHIN/24;
1547 ELSIF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'DAY')THEN
1548 L_DUE_TO := L_DUE_FROM + P_SEARCH_UMP_REC.DUE_WITHIN;
1549 END IF;
1550 END IF;
1551
1552 IF P_SEARCH_UMP_REC.DUE_FROM IS NOT NULL THEN
1553 L_DUE_FROM := TRUNC(P_SEARCH_UMP_REC.DUE_FROM);
1554 END IF;
1555 IF P_SEARCH_UMP_REC.DUE_TO IS NOT NULL THEN
1556 L_DUE_TO := TRUNC(P_SEARCH_UMP_REC.DUE_TO) + 1;
1557 END IF;
1558 END IF;
1559 --l_all_csi_ii_id sql_string [ Blind search at unit level]
1560 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL AND NVL(P_SEARCH_UMP_REC.ITEM,'%')
1561 = '%' AND P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NULL) THEN
1562 IF (P_SEARCH_UMP_REC.ARRIVAL_ORG IS NULL) THEN
1563 FOR ONLY_UNITS_REC IN ONLY_UNITS_CSR(P_SEARCH_UMP_REC.UNIT_NAME) LOOP
1564 INSERT INTO AHL_APPLICABLE_INSTANCES (CSI_ITEM_INSTANCE_ID, POSITION_ID) VALUES (ONLY_UNITS_REC.CSI_ITEM_INSTANCE_ID,0);
1565 END LOOP;
1566 ELSE
1567 L_BIND_INDEX := 1;
1568 l_unit_related_ii_sql := ' Select DISTINCT ahlu.csi_item_instance_id from ahl_unit_config_headers ahlu,ahl_unit_schedules aus
1569 where AUS.UNIT_CONFIG_HEADER_ID = AHLU.UNIT_CONFIG_HEADER_ID and UPPER(ahlu.name) like (:UNIT_NAME) ';
1570 L_BINDVAR_TBL(L_BIND_INDEX) := UPPER(P_SEARCH_UMP_REC.UNIT_NAME);
1571 L_BIND_INDEX := L_BIND_INDEX + 1;
1572 l_unit_related_ii_sql := l_unit_related_ii_sql || ' AND AUS.ARRIVAL_ORG_ID IN (SELECT ORGANIZATION_ID FROM HR_ALL_ORGANIZATION_UNITS HROU
1573 WHERE HROU.NAME LIKE :ORG_NAME) ';
1574 L_BINDVAR_TBL(L_BIND_INDEX) := P_SEARCH_UMP_REC.ARRIVAL_ORG;
1575 L_BIND_INDEX := L_BIND_INDEX + 1;
1576 IF(L_DUE_FROM IS NOT NULL)THEN
1577 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'AND AUS.EST_ARRIVAL_TIME >= NVL(:FROM_DATE , AUS.EST_ARRIVAL_TIME) ';
1578 L_BINDVAR_TBL(L_BIND_INDEX) := L_DUE_FROM;
1579 L_BIND_INDEX := L_BIND_INDEX + 1;
1580 END IF;
1581 IF(L_DUE_TO IS NOT NULL)THEN
1582 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'AND AUS.EST_ARRIVAL_TIME <= NVL(:TO_DATE , AUS.EST_ARRIVAL_TIME) ';
1583 L_BINDVAR_TBL(L_BIND_INDEX) := L_DUE_TO; -- a second before midnight
1584 L_BIND_INDEX := L_BIND_INDEX + 1;
1585 END IF;
1586 AHL_OSP_UTIL_PKG.OPEN_SEARCH_CURSOR
1587 (
1588 p_conditions_tbl => l_bindvar_tbl,
1589 p_sql_str => l_unit_related_ii_sql,
1590 P_X_CSR => L_CUR
1591 );
1592 -- use dynamic cursor to execute query
1593 LOOP
1594 FETCH L_CUR BULK COLLECT INTO L_INST_TBL LIMIT L_BUFFER_LIMIT;
1595 EXIT WHEN (L_INST_TBL.COUNT = 0);
1596 FOR j IN l_inst_tbl.FIRST..l_inst_tbl.LAST LOOP
1597 --FETCH l_cur INTO l_instance_id;
1598 --EXIT WHEN l_cur%NOTFOUND;
1599 INSERT INTO AHL_APPLICABLE_INSTANCES (CSI_ITEM_INSTANCE_ID, POSITION_ID) VALUES(L_INST_TBL(J),0);
1600 END LOOP; -- l_ue_id_tbl loop
1601 L_INST_TBL.DELETE;
1602 END LOOP;
1603 CLOSE L_CUR;
1604 END IF;--end arrival org condition
1605 ELSE
1606 L_BIND_INDEX := 1;
1607 l_unit_related_ii_sql := 'select distinct csii.instance_id from csi_item_instances csii ';
1608
1609 IF nvl(p_search_ump_rec.item,'%')
1610 <> '%' THEN
1611 l_unit_related_ii_sql := l_unit_related_ii_sql || ', mtl_system_items_kfv mtl ';
1612 END IF;
1613
1614 IF p_search_ump_rec.unit_name is NOT NULL THEN
1615 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || ', ahl_unit_config_headers uc ';
1616 IF (P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
1617 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || ', ahl_unit_schedules aus ';
1618 END IF;
1619 END IF;
1620
1621 l_unit_related_ii_sql := l_unit_related_ii_sql || 'where 0=0 ';
1622
1623 IF nvl(p_search_ump_rec.item,'%')
1624 <> '%' THEN
1625 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and mtl.inventory_item_id = csii.inventory_item_id and mtl.organization_id = csii.inv_master_organization_id ';
1626
1627 /* Using UPPER() on concatenated_segments does not pick up any index and cost is very high ~ 45K in gsihrms
1628 * Also Ahmed Alomari's mail to appsperf_us (dt: 17-Feb-2006) says the following...
1629 * Part numbers are rarely case insensitive, so you can remove the upper.
1630 */
1631
1632 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and mtl.concatenated_segments like :PART_NUMBER ';
1633 l_bindvar_tbl(l_bind_index) := p_search_ump_rec.item;
1634 l_bind_index := l_bind_index + 1;
1635 END IF;
1636
1637 IF p_search_ump_rec.item_serial_number is NOT NULL THEN
1638 IF p_module_type = 'VWP' THEN
1639 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and csii.serial_number like :SERIAL_NUMBER ';
1640 l_bindvar_tbl(l_bind_index) := p_search_ump_rec.item_serial_number;
1641 ELSE
1642 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and UPPER(csii.serial_number) like :SERIAL_NUMBER ';
1643 l_bindvar_tbl(l_bind_index) := UPPER(p_search_ump_rec.item_serial_number);
1644 END IF;
1645 l_bind_index := l_bind_index + 1;
1646 END IF;
1647
1648 IF P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL THEN
1649 IF (P_SEARCH_UMP_REC.ARRIVAL_ORG IS NULL) THEN
1650 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'and csii.instance_id = uc.csi_item_instance_id ';
1651 ELSE
1652 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'and csii.instance_id = uc.csi_item_instance_id and AUS.UNIT_CONFIG_HEADER_ID = uc.UNIT_CONFIG_HEADER_ID ';
1653 END IF;
1654 IF p_module_type = 'VWP' THEN
1655 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and uc.name like :UNIT_NAME ';
1656 l_bindvar_tbl(l_bind_index) := p_search_ump_rec.unit_name;
1657 ELSE
1658 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and UPPER(uc.name) like :UNIT_NAME ';
1659 l_bindvar_tbl(l_bind_index) := UPPER(p_search_ump_rec.unit_name);
1660 END IF;
1661 L_BIND_INDEX := L_BIND_INDEX + 1;
1662 IF (P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
1663 l_unit_related_ii_sql := l_unit_related_ii_sql || ' AND AUS.ARRIVAL_ORG_ID IN (SELECT ORGANIZATION_ID FROM HR_ALL_ORGANIZATION_UNITS HROU
1664 WHERE HROU.NAME LIKE :ORG_NAME) ';
1665 L_BINDVAR_TBL(L_BIND_INDEX) := P_SEARCH_UMP_REC.ARRIVAL_ORG;
1666 L_BIND_INDEX := L_BIND_INDEX + 1;
1667 IF(L_DUE_FROM IS NOT NULL)THEN
1668 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'AND AUS.EST_ARRIVAL_TIME >= NVL(:FROM_DATE , AUS.EST_ARRIVAL_TIME) ';
1669 L_BINDVAR_TBL(L_BIND_INDEX) := L_DUE_FROM;
1670 L_BIND_INDEX := L_BIND_INDEX + 1;
1671 END IF;
1672 IF(L_DUE_TO IS NOT NULL)THEN
1673 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'AND AUS.EST_ARRIVAL_TIME <= NVL(:TO_DATE , AUS.EST_ARRIVAL_TIME) ';
1674 L_BINDVAR_TBL(L_BIND_INDEX) := L_DUE_TO; -- a second before midnight
1675 L_BIND_INDEX := L_BIND_INDEX + 1;
1676 END IF;
1677 END IF;
1678 ELSE
1679 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'and exists (select ''x'' from ahl_unit_config_headers uc where uc.CSI_ITEM_INSTANCE_ID = csii.instance_id ) ';
1680 IF (P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
1681 l_unit_related_ii_sql := l_unit_related_ii_sql || ' and csii.instance_id IN (select uc.CSI_ITEM_INSTANCE_ID from ahl_unit_schedules aus,
1682 ahl_unit_config_headers uc where AUS.UNIT_CONFIG_HEADER_ID = UC.UNIT_CONFIG_HEADER_ID AND AUS.ARRIVAL_ORG_ID IN
1683 (SELECT ORGANIZATION_ID FROM HR_ALL_ORGANIZATION_UNITS HROU WHERE HROU.NAME LIKE :ORG_NAME) ';
1684 L_BINDVAR_TBL(L_BIND_INDEX) := P_SEARCH_UMP_REC.ARRIVAL_ORG;
1685 L_BIND_INDEX := L_BIND_INDEX + 1;
1686 IF(L_DUE_FROM IS NOT NULL)THEN
1687 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'AND AUS.EST_ARRIVAL_TIME >= NVL(:FROM_DATE , AUS.EST_ARRIVAL_TIME) ';
1688 L_BINDVAR_TBL(L_BIND_INDEX) := L_DUE_FROM;
1689 L_BIND_INDEX := L_BIND_INDEX + 1;
1690 END IF;
1691 IF(L_DUE_TO IS NOT NULL)THEN
1692 L_UNIT_RELATED_II_SQL := L_UNIT_RELATED_II_SQL || 'AND AUS.EST_ARRIVAL_TIME <= NVL(:TO_DATE , AUS.EST_ARRIVAL_TIME) ';
1693 L_BINDVAR_TBL(L_BIND_INDEX) := L_DUE_TO; -- a second before midnight
1694 L_BIND_INDEX := L_BIND_INDEX + 1;
1695 END IF;
1696 l_unit_related_ii_sql := l_unit_related_ii_sql || ' ) ';
1697 END IF;
1698 END IF;
1699
1700 IF NVL(p_search_ump_rec.SHOW_DEPENDENT_REQUIREMENTS,'N') = 'N' THEN
1701 l_unit_related_ii_sql := l_unit_related_ii_sql || 'and EXISTS (select ''x'' from ahl_unit_effectivities_b UE where UE.csi_item_instance_id = csii.instance_id)';
1702 END IF;
1703 AHL_OSP_UTIL_PKG.OPEN_SEARCH_CURSOR
1704 (
1705 p_conditions_tbl => l_bindvar_tbl,
1706 p_sql_str => l_unit_related_ii_sql,
1707 p_x_csr => l_cur
1708 );
1709 -- use dynamic cursor to execute query
1710 LOOP
1711 FETCH l_cur BULK COLLECT INTO l_inst_tbl LIMIT l_buffer_limit;
1712 EXIT WHEN (l_inst_tbl.count = 0);
1713 FOR j IN l_inst_tbl.FIRST..l_inst_tbl.LAST LOOP
1714 --FETCH l_cur INTO l_instance_id;
1715 --EXIT WHEN l_cur%NOTFOUND;
1716 INSERT INTO AHL_APPLICABLE_INSTANCES (CSI_ITEM_INSTANCE_ID, POSITION_ID) VALUES(l_inst_tbl(j),0);
1717 END LOOP; -- l_ue_id_tbl loop
1718 l_inst_tbl.DELETE;
1719 END LOOP;
1720
1721 CLOSE l_cur;
1722 END IF;
1723
1724
1725 END populate_unit_instances;
1726
1727 PROCEDURE populate_dependent_instances(
1728 p_module_type IN VARCHAR2)IS
1729
1730 CURSOR dependent_components_csr IS
1731 SELECT subject_id from csi_ii_relationships csii WHERE
1732 EXISTS (select 'x' from ahl_unit_effectivities_b UE where UE.csi_item_instance_id = csii.subject_id)
1733 AND NOT EXISTS (select 'x' from AHL_APPLICABLE_INSTANCES where csi_item_instance_id = csii.subject_id)
1734 START WITH object_id IN (SELECT csi_item_instance_id FROM AHL_APPLICABLE_INSTANCES WHERE POSITION_ID = 0)
1735 AND trunc(nvl(csii.active_start_date, sysdate)) <= Trunc(sysdate)
1736 AND trunc(nvl(csii.active_end_date, sysdate+1)) > Trunc(sysdate)
1737 AND relationship_type_code = 'COMPONENT-OF'
1738 CONNECT BY PRIOR subject_id = object_id
1739 AND trunc(nvl(csii.active_start_date, sysdate)) <= Trunc(sysdate)
1740 AND trunc(nvl(csii.active_end_date, sysdate+1)) > Trunc(sysdate)
1741 AND relationship_type_code = 'COMPONENT-OF';
1742
1743 l_inst_tbl nbr_tbl_type;
1744 l_buffer_limit number := 500;
1745
1746
1747 BEGIN
1748 /*FOR dependent_component_rec IN dependent_components_csr
1749 LOOP
1750 INSERT INTO AHL_APPLICABLE_INSTANCES (CSI_ITEM_INSTANCE_ID, POSITION_ID)
1751 VALUES(dependent_component_rec.subject_id,1);
1752 END LOOP;*/
1753
1754 OPEN dependent_components_csr;
1755 LOOP
1756 FETCH dependent_components_csr BULK COLLECT INTO l_inst_tbl LIMIT l_buffer_limit;
1757 EXIT WHEN (l_inst_tbl.count = 0);
1758 FOR j IN l_inst_tbl.FIRST..l_inst_tbl.LAST LOOP
1759 INSERT INTO AHL_APPLICABLE_INSTANCES (CSI_ITEM_INSTANCE_ID, POSITION_ID) VALUES(l_inst_tbl(j),1);
1760 END LOOP;
1761 l_inst_tbl.DELETE;
1762 END LOOP;
1763
1764 CLOSE dependent_components_csr;
1765
1766
1767 END populate_dependent_instances;
1768
1769
1770 --------------------------------------------------------------------------------------------
1771 -- Procedure name : Build_Ump_Search_query
1772 -- Type : Private
1773 -- Function : This procedure builds search query for planning workbench for the given search criterion.
1774 -- Pre-reqs :
1775 -- Parameters :
1776 --
1777 -- Standard IN Parameters :
1778 -- p_api_version IN NUMBER Required
1779 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
1780 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
1781 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
1782 -- p_default IN VARCHAR2 Default FND_API.G_TRUE
1783 -- Based on this flag, the API will set the default attributes.
1784 -- p_module_type IN VARCHAR2 Default NULL
1785 -- This will be null.
1786 -- Standard OUT Parameters :
1787 -- x_return_status OUT VARCHAR2 Required
1788 -- x_msg_count OUT NUMBER Required
1789 -- x_msg_data OUT VARCHAR2 Required
1790 --
1791 -- Build_Ump_Search_query Parameters :
1792 -- p_search_ump_rec IN AHL_UMP_SMRINSTANCE_PVT.Search_Ump_Rec_Type Required
1793 -- The search criteria based on which the query needs to be built.
1794 -- x_ump_search_query OUT VARCHAR2 Required
1795 -- The query built based upon the search criterion passed.
1796 -- x_ump_bind_params OUT AHL_UMP_SMRINSTANCE_PVT.Ump_Bind_Param_Type Required
1797 -- Bind parameters for the UMP search query
1798 -- Version :
1799 -- Initial Version 1.0
1800 --
1801 -- End of Comments.
1802 --------------------------------------------------------------------------------------------
1803
1804 PROCEDURE BUILD_UMP_SEARCH_QUERY
1805 (
1806 P_API_VERSION IN NUMBER,
1807 P_INIT_MSG_LIST IN VARCHAR2 := FND_API.G_FALSE,
1808 P_COMMIT IN VARCHAR2 := FND_API.G_FALSE,
1809 P_VALIDATION_LEVEL IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
1810 P_DEFAULT IN VARCHAR2 := FND_API.G_TRUE,
1811 P_MODULE_TYPE IN VARCHAR2 := NULL,
1812 P_SEARCH_UMP_REC IN AHL_UMP_SMRINSTANCE_PVT.SEARCH_UMP_REC_TYPE,
1813 X_UMP_SEARCH_QUERY OUT NOCOPY AHL_UMP_SMRINSTANCE_PVT.UMP_SEARCH_QUERY_TYPE,
1814 X_UMP_BIND_PARAMS OUT NOCOPY AHL_UMP_SMRINSTANCE_PVT.UMP_BIND_PARAM_TBL_TYPE,
1815 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
1816 X_MSG_COUNT OUT NOCOPY NUMBER,
1817 X_MSG_DATA OUT NOCOPY VARCHAR2 ) IS
1818
1819 L_API_VERSION CONSTANT NUMBER := 1.0;
1820 L_API_NAME CONSTANT VARCHAR2(30) := 'Build_Ump_Search_query';
1821 L_UMP_SEARCH_QUERY VARCHAR2(31000);
1822 L_MR_SEARCH_QUERY VARCHAR2(31000);
1823 L_NR_SEARCH_QUERY VARCHAR2(31000);
1824 L_DUMMY_SEARCH_QUERY VARCHAR2(31000);
1825 L_BIND_INDEX NUMBER;
1826 L_DUE_FROM DATE;
1827 L_DUE_TO DATE;
1828 L_DURATION NUMBER;
1829 L_MR_SEARCHED BOOLEAN;
1830 L_NR_SEARCHED BOOLEAN;
1831
1832
1833 BEGIN
1834
1835 IF (G_DEBUG_PROC >= G_DEBUG_LEVEL)THEN
1836 FND_LOG.STRING
1837 (
1838 G_DEBUG_PROC,
1839 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Build_Ump_Search_query.start',
1840 'At the start of PLSQL procedure'
1841 );
1842 END IF;
1843 -- Standard call to check for call compatibility
1844 IF NOT FND_API.COMPATIBLE_API_CALL(L_API_VERSION, P_API_VERSION, L_API_NAME,
1845 G_PKG_NAME) THEN
1846 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1847 END IF;
1848
1849 -- Initialize message list if p_init_msg_list is set to TRUE
1850 IF FND_API.TO_BOOLEAN(P_INIT_MSG_LIST) THEN
1851 FND_MSG_PUB.INITIALIZE;
1852 END IF;
1853
1854 -- Initialize API return status to success
1855 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
1856 --Build query here
1857 L_DUMMY_SEARCH_QUERY := 'select ''N'' select_flag,
1858 ''Show'' details, null unit_name,null prog_type,null mr_header_id, null title,
1859 null concatenated_segments,null serial_number,null name,null uom_code,
1860 null due_counter_value,''View all UOMs'' view_all_uoms,null earliest_due_date,null due_date,null latest_due_date,
1861 null date_run,SYSDATE scheduledDate,null visit_name,null sr_incident_id,null sr_number,null unit_effectivity_id,null unit_config_header_id,
1862 null visit_id,null fleet , null operatingOrg, null mc , null ucPosition , null Eng_Org,
1863 null implementstatus ,null progsubtype ,null servicecat , null mrServiceType ,null mrduration , null MrDurationUOM , null PrimaryVisitType ,
1864 null scheduledvisittype , null scheduledVisitOrg from dual where 1=2';
1865
1866 L_MR_SEARCHED := TRUE;
1867 L_NR_SEARCHED := TRUE;
1868 IF((P_SEARCH_UMP_REC.PROGRAM_SUB_TYPE IS NOT NULL OR P_SEARCH_UMP_REC.MR_IMPLEMENT_STATUS IS NOT NULL
1869 OR P_SEARCH_UMP_REC.ENGINEERING_ORG IS NOT NULL OR P_SEARCH_UMP_REC.PRIMARY_VISIT_TYPE IS NOT NULL
1870 OR P_SEARCH_UMP_REC.SERVICE_CATEGORY IS NOT NULL OR P_SEARCH_UMP_REC.MAX_DURATION IS NOT NULL
1871 OR P_SEARCH_UMP_REC.MR_SERVICE_TYPE IS NOT NULL) -- Sthilak - CAM change - added mr_service_type
1872
1873 AND (P_SEARCH_UMP_REC.NR_TYPE IS NULL
1874 AND ( P_SEARCH_UMP_REC.SHOW_ONLY_NR_REQ_FLAG IS NULL OR P_SEARCH_UMP_REC.SHOW_ONLY_NR_REQ_FLAG = 'N')))THEN
1875 L_MR_SEARCHED := TRUE;
1876 L_NR_SEARCHED := FALSE;
1877 ELSIF ((P_SEARCH_UMP_REC.PROGRAM_SUB_TYPE IS NULL
1878 AND P_SEARCH_UMP_REC.MR_IMPLEMENT_STATUS IS NULL AND P_SEARCH_UMP_REC.ENGINEERING_ORG IS NULL
1879 AND P_SEARCH_UMP_REC.PRIMARY_VISIT_TYPE IS NULL OR P_SEARCH_UMP_REC.SERVICE_CATEGORY IS NULL
1880 AND P_SEARCH_UMP_REC.MAX_DURATION IS NULL AND P_SEARCH_UMP_REC.MR_SERVICE_TYPE IS NULL) -- Sthilak - CAM change - added mr_service_type
1881 AND (P_SEARCH_UMP_REC.NR_TYPE IS NOT NULL OR
1882 ( P_SEARCH_UMP_REC.SHOW_ONLY_NR_REQ_FLAG IS NOT NULL AND P_SEARCH_UMP_REC.SHOW_ONLY_NR_REQ_FLAG = 'Y')))THEN
1883 L_MR_SEARCHED := FALSE;
1884 L_NR_SEARCHED := TRUE;
1885 ELSIF((P_SEARCH_UMP_REC.PROGRAM_SUB_TYPE IS NOT NULL
1886 OR P_SEARCH_UMP_REC.MR_IMPLEMENT_STATUS IS NOT NULL OR P_SEARCH_UMP_REC.ENGINEERING_ORG IS NOT NULL
1887 OR P_SEARCH_UMP_REC.PRIMARY_VISIT_TYPE IS NOT NULL OR P_SEARCH_UMP_REC.SERVICE_CATEGORY IS NOT NULL
1888 OR P_SEARCH_UMP_REC.MAX_DURATION IS NOT NULL OR P_SEARCH_UMP_REC.MR_SERVICE_TYPE IS NOT NULL)
1889 AND (P_SEARCH_UMP_REC.NR_TYPE IS NOT NULL OR
1890 ( P_SEARCH_UMP_REC.SHOW_ONLY_NR_REQ_FLAG IS NOT NULL AND P_SEARCH_UMP_REC.SHOW_ONLY_NR_REQ_FLAG = 'Y')))THEN
1891 L_MR_SEARCHED := FALSE;
1892 L_NR_SEARCHED := FALSE;
1893 END IF;
1894
1895
1896 L_BIND_INDEX :=1;
1897
1898 IF(L_MR_SEARCHED)THEN
1899 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL OR NVL(P_SEARCH_UMP_REC.ITEM,'%')
1900 <> '%' OR P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL) THEN
1901 L_MR_SEARCH_QUERY := 'select /*+ dynamic_sampling(AAI1 4) */ ';
1902 ELSE
1903 L_MR_SEARCH_QUERY := 'select ';
1904 END IF;
1905 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' ''N'' select_flag, ''Show'' details,ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id) unit_name,
1906 (select meaning from fnd_lookup_values where lookup_code = mrb.PROGRAM_TYPE_CODE and lookup_type = ''AHL_FMP_MR_PROGRAM_TYPE'' and language = userenv(''LANG'')) prog_type ,
1907 B.MR_HEADER_ID,MRB.TITLE,MTL.CONCATENATED_SEGMENTS concatenated_segments,csib.serial_number,
1908 (select c.name from ahl_mr_intervals i,csi_counter_template_vl c where b.mr_interval_id = i.mr_interval_id and i.counter_id = c.counter_id) name ,
1909 (select c.uom_code from ahl_mr_intervals i,csi_counter_template_vl c where b.mr_interval_id = i.mr_interval_id AND I.COUNTER_ID = C.COUNTER_ID) uom_code,
1910 AHL_UMP_SMRINSTANCE_PVT.GET_UOM_REMAIN(b.unit_effectivity_id) DUE_COUNTER_VALUE, ''View all UOMs'' view_all_uoms, B.EARLIEST_DUE_DATE,B.DUE_DATE,B.LATEST_DUE_DATE,b.date_run,
1911 (select vst.START_DATE_TIME from ahl_visits_b vst,ahl_visit_tasks_b task where vst.visit_id = task.visit_id
1912 and task.unit_effectivity_id = b.unit_effectivity_id and task.status_code <> ''DELETED''and rownum < 2) scheduledDate,
1913 (select visit_number from ahl_visits_b vst,ahl_visit_tasks_b task where vst.visit_id = task.visit_id and task.unit_effectivity_id = B.unit_effectivity_id
1914 and task.status_code <> ''DELETED'' and rownum < 2) visit_name,
1915 null sr_incident_id,null sr_number,b.unit_effectivity_id,
1916 (Select unit_config_header_id from AHL_UNIT_CONFIG_HEADERS where name = ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id)) unit_config_header_id,
1917 (select vst.visit_id from ahl_visits_b vst,ahl_visit_tasks_b task where vst.visit_id = task.visit_id
1918 and task.unit_effectivity_id = B.unit_effectivity_id and task.status_code <> ''DELETED''and rownum < 2) visit_id,
1919 (select name from ahl_fleet_headers_b flt where flt.fleet_header_id = b.fleet_header_id) fleet ,
1920 (SELECT HROU.NAME FROM ahl_fleet_headers_b flt, HR_ALL_ORGANIZATION_UNITS HROU where flt.OPERATING_ORG_ID = hrou.organization_id
1921 and flt.fleet_header_id = b.fleet_header_id and rownum < 2) operatingorg ,
1922 (select master_config_name from ahl_unit_header_details_v ucd where ucd.name = ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id)) mc,
1923 (Select position_ref_meaning from ahl_unit_details_v ucd where ucd.csi_item_instance_id = b.csi_item_instance_id and rownum< 2) ucposition,
1924 MAINTTORG.MR_MAINTENANCE_ORG_NAME eng_org,
1925 (select meaning from fnd_lookup_values where lookup_code = MRB.IMPLEMENT_STATUS_CODE and lookup_type = ''AHL_FMP_MR_IMPLEMENT_STATUS'' and language = userenv(''LANG'')) implementstatus ,
1926 (select meaning from fnd_lookup_values where lookup_code = mrb.PROGRAM_SUBTYPE_CODE and lookup_type = ''AHL_FMP_MR_PROGRAM_SUBTYPE'' and language = userenv(''LANG'')) progsubtype ,
1927 (select meaning from fnd_lookup_values where lookup_code = mrb.SPACE_CATEGORY_CODE and lookup_type = ''AHL_LTP_SPACE_CATEGORY'' and language = userenv(''LANG'')) servicecat ,
1928 (select meaning from fnd_lookup_values where lookup_code = mrb.SERVICE_TYPE_CODE and lookup_type = ''AHL_FMP_MR_SERVICE_TYPE'' and language = userenv(''LANG'')) mrServiceType ,
1929 mrb.down_time mrduration , mrb.uom_code MrDurationUOM , to_char(null) primaryvisittype ,
1930 (select flvt.meaning from ahl_visits_b vst,ahl_visit_tasks_b task,fnd_lookup_values flvt where vst.visit_id = task.visit_id
1931 and task.unit_effectivity_id = B.unit_effectivity_id and task.status_code <> ''DELETED'' and flvt.lookup_type = ''AHL_PLANNING_VISIT_TYPE''
1932 and flvt.lookup_code = vst.visit_type_code and flvt.language = userenv(''LANG'') and rownum < 2) scheduledvisittype ,
1933 (Select hrou.name from ahl_visits_b vst,ahl_visit_tasks_b task,hr_all_organization_units hrou
1934 where vst.visit_id = task.visit_id and task.unit_effectivity_id = B.unit_effectivity_id and task.status_code <> ''DELETED''
1935 and vst.organization_id = hrou.organization_id and rownum < 2) scheduledVisitOrg
1936 FROM AHL_UNIT_EFFECTIVITIES_B B, ahl_mr_headers_b mrb, CSI_ITEM_INSTANCES CSIB, mtl_system_items_kfv mtl,
1937 (SELECT AUE.unit_effectivity_id, ( CASE WHEN AUE.FLEET_HEADER_ID IS NULL AND AMO.OPERATING_ORG_ID IS NOT NULL
1938 THEN NULL
1939 WHEN AUE.FLEET_HEADER_ID IS NOT NULL AND AMO.OPERATING_ORG_ID IS NOT NULL AND AFH.OPERATING_ORG_ID != AMO.OPERATING_ORG_ID
1940 THEN (SELECT NAME FROM HR_ORGANIZATION_UNITS WHERE ORGANIZATION_ID= AFH.OPERATING_ORG_ID)
1941 WHEN AUE.FLEET_HEADER_ID IS NOT NULL AND AMO.MR_TITLE IS NULL
1942 THEN(SELECT NAME FROM HR_ORGANIZATION_UNITS WHERE ORGANIZATION_ID= AFH.OPERATING_ORG_ID)
1943 ELSE (SELECT NAME FROM HR_ORGANIZATION_UNITS WHERE ORGANIZATION_ID= AMO.MAINTENANCE_ORG_ID) END) MR_MAINTENANCE_ORG_NAME FROM AHL_UNIT_EFFECTIVITIES_B AUE, AHL_MR_HEADERS_B AMH, AHL_MR_ORGANIZATIONS AMO, AHL_FLEET_HEADERS_B AFH
1944 WHERE AUE.MR_HEADER_ID = AMH.MR_HEADER_ID (+) AND AMH.TITLE = AMO.MR_TITLE (+) AND AUE.FLEET_HEADER_ID = AFH.FLEET_HEADER_ID (+)
1945 AND ( (AUE.FLEET_HEADER_ID IS NULL AND AMO.OPERATING_ORG_ID IS NULL) OR (AFH.OPERATING_ORG_ID IS NULL
1946 AND AMO.OPERATING_ORG_ID IS NOT NULL AND (0 = (SELECT COUNT(MR_ORGANIZATION_ID) FROM AHL_MR_ORGANIZATIONS
1947 WHERE MR_TITLE = AMO.MR_TITLE AND OPERATING_ORG_ID IS NULL ))) OR (AUE.FLEET_HEADER_ID IS NOT NULL
1948 AND ((AFH.OPERATING_ORG_ID = AMO.OPERATING_ORG_ID) OR ( (0 = (SELECT COUNT(MR_ORGANIZATION_ID) FROM AHL_MR_ORGANIZATIONS
1949 WHERE MR_TITLE = AMO.MR_TITLE AND OPERATING_ORG_ID = AFH.OPERATING_ORG_ID ))AND AFH.OPERATING_ORG_ID != NVL(AMO.OPERATING_ORG_ID,-1)
1950 AND AMO.OPERATING_ORG_ID IS NULL))) OR (AUE.FLEET_HEADER_ID IS NOT NULL AND AMO.OPERATING_ORG_ID IS NOT NULL
1951 AND ( (0 = (SELECT COUNT(MR_ORGANIZATION_ID) FROM AHL_MR_ORGANIZATIONS WHERE MR_TITLE = AMO.MR_TITLE
1952 AND (OPERATING_ORG_ID IS NULL OR OPERATING_ORG_ID = AFH.OPERATING_ORG_ID))))) ) ) MAINTTORG ';
1953 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL OR NVL(P_SEARCH_UMP_REC.ITEM,'%')
1954 <> '%' OR P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL OR P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
1955 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' ,AHL_APPLICABLE_INSTANCES AAI1 ';
1956 END IF;
1957 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY ||
1958 'where b.mr_header_id = mrb.mr_header_id
1959 AND B.CSI_ITEM_INSTANCE_ID = csib.INSTANCE_ID
1960 AND csib.INVENTORY_ITEM_ID = MTL.INVENTORY_ITEM_ID
1961 and csib.inv_master_organization_id = mtl.organization_id
1962 AND B.APPLICATION_USG_CODE = FND_PROFILE.VALUE(''AHL_APPLN_USAGE'')
1963 and b.object_type = ''MR''
1964 and b.preceding_ue_id IS NULL
1965 and NVL(B.status_code,''INIT-DUE'' ) = ''INIT-DUE'' and MAINTTORG.unit_effectivity_id = b.unit_effectivity_id ';
1966 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL OR NVL(P_SEARCH_UMP_REC.ITEM,'%')
1967 <> '%' OR P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL OR P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
1968 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' AND B.CSI_ITEM_INSTANCE_ID = AAI1.CSI_ITEM_INSTANCE_ID ';
1969 ELSE
1970 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' AND ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id) IS NOT NULL ';
1971 END IF;
1972
1973 /*IF(P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL) THEN
1974 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.UNIT_NAME;
1975 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id) like (:' ||L_BIND_INDEX ||')';
1976 L_BIND_INDEX := L_BIND_INDEX+1;
1977 END IF;*/
1978 IF(P_SEARCH_UMP_REC.MR_TITLE IS NOT NULL) THEN
1979 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.MR_TITLE;
1980 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and MRB.TITLE like (:' ||L_BIND_INDEX ||')';
1981 L_BIND_INDEX := L_BIND_INDEX+1;
1982 END IF;
1983 /*IF(P_SEARCH_UMP_REC.ITEM IS NOT NULL) THEN
1984 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.ITEM;
1985 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and MTL.CONCATENATED_SEGMENTS like (:' ||L_BIND_INDEX ||')';
1986 L_BIND_INDEX := L_BIND_INDEX+1;
1987 END IF;*/
1988 /*IF(P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL) THEN
1989 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER;
1990 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and csib.SERIAL_NUMBER like (:' ||L_BIND_INDEX ||')';
1991 L_BIND_INDEX := L_BIND_INDEX+1;
1992 END IF;*/
1993 IF(P_SEARCH_UMP_REC.PROGRAM_TYPE IS NOT NULL) THEN
1994 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.PROGRAM_TYPE;
1995 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and mrb.PROGRAM_TYPE_CODE like (:' ||L_BIND_INDEX ||')';
1996 L_BIND_INDEX := L_BIND_INDEX+1;
1997 END IF;
1998 IF(P_SEARCH_UMP_REC.PROGRAM_SUB_TYPE IS NOT NULL) THEN
1999 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.PROGRAM_SUB_TYPE;
2000 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and mrb.PROGRAM_SUBTYPE_CODE like (:' ||L_BIND_INDEX ||')';
2001 L_BIND_INDEX := L_BIND_INDEX+1;
2002 END IF;
2003
2004 /* Sthilak CAM change begin */
2005 IF(P_SEARCH_UMP_REC.MR_SERVICE_TYPE IS NOT NULL) THEN
2006 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.MR_SERVICE_TYPE;
2007 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and mrb.SERVICE_TYPE_CODE = (:' ||L_BIND_INDEX ||')';
2008 L_BIND_INDEX := L_BIND_INDEX+1;
2009 END IF;
2010 /* Sthilak CAM change end */
2011
2012 IF(P_SEARCH_UMP_REC.FLEET IS NOT NULL) THEN
2013 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.FLEET;
2014 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and exists (select ''x'' from ahl_fleet_headers_b flt
2015 where flt.fleet_header_id = b.fleet_header_id and flt.name like (:' ||L_BIND_INDEX ||'))';
2016 L_BIND_INDEX := L_BIND_INDEX+1;
2017 END IF;
2018 IF(P_SEARCH_UMP_REC.MR_IMPLEMENT_STATUS IS NOT NULL) THEN
2019 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.MR_IMPLEMENT_STATUS;
2020 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and MRB.IMPLEMENT_STATUS_CODE like (:' ||L_BIND_INDEX ||')';
2021 L_BIND_INDEX := L_BIND_INDEX+1;
2022 END IF;
2023 IF(P_SEARCH_UMP_REC.MR_SCHEDULED_STATUS IS NOT NULL AND P_SEARCH_UMP_REC.MR_SCHEDULED_STATUS IN ('SCHEDULED','UNSCHEDULED') ) THEN
2024 IF(P_SEARCH_UMP_REC.MR_SCHEDULED_STATUS = 'SCHEDULED')THEN
2025 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and EXISTS (Select ''x'' from ahl_visit_tasks_b vts where vts.unit_effectivity_id =
2026 B.unit_effectivity_id AND vts.status_code <> ''DELETED''and rownum < 2) ';
2027 ELSE
2028 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and NOT EXISTS (Select ''x'' from ahl_visit_tasks_b vts
2029 where vts.unit_effectivity_id = B.unit_effectivity_id AND vts.status_code <> ''DELETED''and rownum < 2) ';
2030 END IF;
2031 END IF;
2032 IF(P_SEARCH_UMP_REC.VISIT_NUMBER IS NOT NULL) THEN
2033 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.VISIT_NUMBER;
2034 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and EXISTS (select ''x'' from ahl_visits_b vst,ahl_visit_tasks_b vts
2035 where vst.visit_id = vts.visit_id and vts.unit_effectivity_id = B.unit_effectivity_id
2036 and vst.visit_number like (:' || L_BIND_INDEX || ') and vts.status_code <> ''DELETED''and rownum < 2) ';
2037 L_BIND_INDEX := L_BIND_INDEX+1;
2038 END IF;
2039 IF(P_SEARCH_UMP_REC.SCHEDULED_VISIT_TYPE IS NOT NULL) THEN
2040 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.SCHEDULED_VISIT_TYPE;
2041 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and EXISTS (select ''x'' from ahl_visits_b vst,ahl_visit_tasks_b task,fnd_lookup_values flvt where vst.visit_id = task.visit_id
2042 and task.unit_effectivity_id = B.unit_effectivity_id and flvt.lookup_type = ''AHL_PLANNING_VISIT_TYPE''
2043 and flvt.lookup_code = vst.visit_type_code and flvt.language = userenv(''LANG'') and flvt.meaning like (:' || L_BIND_INDEX || ') and task.status_code <> ''DELETED''and rownum < 2) ';
2044 L_BIND_INDEX := L_BIND_INDEX+1;
2045 END IF;
2046 IF(P_SEARCH_UMP_REC.VISIT_ORG_NAME IS NOT NULL) THEN
2047 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.VISIT_ORG_NAME;
2048 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and EXISTS (select ''x'' from ahl_visits_b vst,ahl_visit_tasks_b task ,hr_all_organization_units hrou
2049 where vst.visit_id = task.visit_id and task.unit_effectivity_id = B.unit_effectivity_id and
2050 vst.organization_id = hrou.organization_id
2051 and hrou.name like (:' || L_BIND_INDEX || ') and task.status_code <> ''DELETED''and rownum < 2) ';
2052 L_BIND_INDEX := L_BIND_INDEX+1;
2053 END IF;
2054 /* *********************************** BEGIN: SHOW TOLERANCE ****************************************** */
2055 IF P_SEARCH_UMP_REC.DUE_FROM IS NOT NULL THEN
2056 L_DUE_FROM := P_SEARCH_UMP_REC.DUE_FROM;
2057 END IF;
2058 IF P_SEARCH_UMP_REC.DUE_TO IS NOT NULL THEN
2059 L_DUE_TO := TRUNC(P_SEARCH_UMP_REC.DUE_TO) + 1;
2060 END IF;
2061 /* *********************************** BEGIN: SHOW TOLERANCE ****************************************** */
2062 IF ((P_SEARCH_UMP_REC.DUE_FROM IS NOT NULL AND P_SEARCH_UMP_REC.DUE_TO IS NOT NULL) AND (P_SEARCH_UMP_REC.DUE_WITHIN IS NOT NULL))THEN
2063 FND_MESSAGE.SET_NAME('AHL','AHL_UMP_MR_DFROM_DWITHIN_CFLT');
2064 FND_MSG_PUB.ADD;
2065 RAISE FND_API.G_EXC_ERROR;
2066 ELSIF ((P_SEARCH_UMP_REC.DUE_FROM IS NULL OR P_SEARCH_UMP_REC.DUE_TO IS NULL) AND (P_SEARCH_UMP_REC.DUE_WITHIN IS NOT NULL AND (P_SEARCH_UMP_REC.DUE_WITHIN_UOM IS NULL
2067 OR P_SEARCH_UMP_REC.DUE_WITHIN_UOM NOT IN ('HOUR','DAY')) ))THEN
2068 FND_MESSAGE.SET_NAME('AHL','AHL_UMP_MR_DWITHIN_UOM_NLL');
2069 FND_MSG_PUB.ADD;
2070 RAISE FND_API.G_EXC_ERROR;
2071 ELSIF (P_SEARCH_UMP_REC.DUE_WITHIN IS NOT NULL AND P_SEARCH_UMP_REC.DUE_WITHIN_UOM IS NOT NULL)THEN
2072 IF(L_DUE_FROM IS NULL AND L_DUE_TO IS NULL)THEN
2073 L_DUE_FROM := SYSDATE;
2074 END IF;
2075 IF(L_DUE_FROM IS NOT NULL)THEN
2076 IF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'HOUR')THEN
2077 L_DUE_TO := (L_DUE_FROM + P_SEARCH_UMP_REC.DUE_WITHIN/24) + 1;
2078 ELSIF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'DAY')THEN
2079 L_DUE_TO := (L_DUE_FROM + P_SEARCH_UMP_REC.DUE_WITHIN) + 1;
2080 END IF;
2081 ELSIF(L_DUE_TO IS NOT NULL)THEN
2082 IF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'HOUR')THEN
2083 L_DUE_FROM := (L_DUE_TO - P_SEARCH_UMP_REC.DUE_WITHIN/24) -1;
2084 ELSIF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'DAY')THEN
2085 L_DUE_FROM := (L_DUE_TO - P_SEARCH_UMP_REC.DUE_WITHIN) - 1;
2086 END IF;
2087 END IF;
2088 END IF;
2089 -- Show Tolerance is N
2090 IF P_SEARCH_UMP_REC.SHOW_TOLERANCE ='N' THEN
2091 --Due-From Date Check
2092 IF L_DUE_FROM IS NOT NULL THEN
2093 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' AND B.DUE_DATE >= (:' ||L_BIND_INDEX||')';
2094 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2095 L_BIND_INDEX := L_BIND_INDEX + 1;
2096 END IF;
2097 --Due-To Date Check
2098 IF L_DUE_TO IS NOT NULL THEN
2099 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' AND B.DUE_DATE < (:' ||L_BIND_INDEX||')';
2100 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;--TRUNC(p_search_mr_instance_rec.due_to);//bug8265049
2101 L_BIND_INDEX := L_BIND_INDEX + 1;
2102 END IF;
2103 ELSE -- Show Tolerance is Y
2104 IF ( L_DUE_FROM IS NOT NULL AND L_DUE_TO IS NOT NULL ) THEN
2105 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' AND (
2106 ((:' ||L_BIND_INDEX||') <= nvl(B.earliest_due_date, B.due_date)
2107 AND nvl(B.earliest_due_date, B.due_date) < (:' ||(L_BIND_INDEX + 1) ||'))
2108 OR (nvl(B.earliest_due_date, B.due_date) <= (:' ||(L_BIND_INDEX + 2) ||')
2109 AND (:' ||(L_BIND_INDEX + 3) ||') < nvl(B.latest_due_date, B.due_date))
2110 OR ((:' ||(L_BIND_INDEX + 4) ||') <= nvl(B.latest_due_date, B.due_date)
2111 AND nvl(B.latest_due_date, B.due_date) < (:' ||(L_BIND_INDEX + 5) ||'))
2112 )';
2113
2114 -- due from2 and due to2
2115 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2116 L_BIND_INDEX := L_BIND_INDEX + 1;
2117 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2118 L_BIND_INDEX := L_BIND_INDEX + 1;
2119 -- due from3 and due to3
2120 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2121 L_BIND_INDEX := L_BIND_INDEX + 1;
2122 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2123 L_BIND_INDEX := L_BIND_INDEX + 1;
2124 -- due from4 and due to4
2125 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2126 L_BIND_INDEX := L_BIND_INDEX + 1;
2127 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2128 L_BIND_INDEX := L_BIND_INDEX + 1;
2129 ELSIF ( L_DUE_FROM IS NOT NULL AND L_DUE_TO IS NULL ) THEN
2130 -- Only Due-From Date is there and Due-To Date is NULL
2131 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' AND
2132 ( ( ( (:' ||L_BIND_INDEX ||') <= nvl(B.earliest_due_date, B.due_date) ) )
2133 OR ( ( (:' ||(L_BIND_INDEX + 1) ||') <= nvl(B.latest_due_date, B.due_date) ) ) )';
2134 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2135 L_BIND_INDEX := L_BIND_INDEX + 1;
2136 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2137 L_BIND_INDEX := L_BIND_INDEX + 1;
2138 ELSIF ( L_DUE_FROM IS NULL AND L_DUE_TO IS NOT NULL ) THEN
2139 -- Only Due-To Date is there and Due-From Date is NULL
2140 --adivenka modified the following part of the query for bug# 4315128
2141 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' AND ( ( ( nvl(B.earliest_due_date, B.due_date) < (:' ||L_BIND_INDEX ||') )
2142 ) OR ( ( nvl(B.latest_due_date, B.due_date) < (:' ||(L_BIND_INDEX + 1) ||') )) )';
2143 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2144 L_BIND_INDEX := L_BIND_INDEX + 1;
2145 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2146 L_BIND_INDEX := L_BIND_INDEX + 1;
2147 END IF;--Case is ignored when Both Due-From and Due-To Dates are NOT here
2148 END IF;
2149 /* ***********************************END: SHOW TOLERANCE ****************************************** */
2150 -- Max Duration
2151 IF (P_SEARCH_UMP_REC.MAX_DURATION IS NOT NULL AND (P_SEARCH_UMP_REC.MAX_DURATION_UOM IS NULL
2152 OR P_SEARCH_UMP_REC.MAX_DURATION_UOM NOT IN ('HOUR','DAY')) )THEN
2153 FND_MESSAGE.SET_NAME('AHL','AHL_UMP_MR_MXDUR_UOM_NLL');
2154 FND_MSG_PUB.ADD;
2155 RAISE FND_API.G_EXC_ERROR;
2156 ELSIF (P_SEARCH_UMP_REC.MAX_DURATION IS NOT NULL AND P_SEARCH_UMP_REC.MAX_DURATION_UOM IS NOT NULL)THEN
2157 L_DURATION := 0;
2158 IF(P_SEARCH_UMP_REC.MAX_DURATION_UOM = 'HOUR')THEN
2159 L_DURATION := P_SEARCH_UMP_REC.MAX_DURATION/24;
2160 ELSIF(P_SEARCH_UMP_REC.MAX_DURATION_UOM = 'DAY')THEN
2161 L_DURATION := P_SEARCH_UMP_REC.MAX_DURATION;
2162 END IF;
2163 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DURATION;
2164 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY ||
2165 ' and DECODE(mrb.uom_code,''HOURS'',NVL(mrb.down_time,0)/24,
2166 ''DAYS'',NVL(mrb.down_time,0),
2167 ''MINUTES'',NVL(mrb.down_time,0)/1440,
2168 ''MONTHS'',NVL(mrb.down_time,0)*30,
2169 ''WEEKS'',NVL(mrb.down_time,0)*7,0) <= (:' ||L_BIND_INDEX ||') ';
2170 L_BIND_INDEX := L_BIND_INDEX+1;
2171 END IF;
2172 IF(P_SEARCH_UMP_REC.SERVICE_CATEGORY IS NOT NULL) THEN
2173 BEGIN
2174 IF(TO_NUMBER(P_SEARCH_UMP_REC.SERVICE_CATEGORY) >= 0)THEN
2175 NULL;
2176 END IF;
2177 EXCEPTION
2178 WHEN OTHERS THEN
2179 FND_MESSAGE.SET_NAME('AHL','AHL_UMP_MR_SCAT_NON_NUM');
2180 FND_MSG_PUB.ADD;
2181 RAISE FND_API.G_EXC_ERROR;
2182 END;
2183 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.SERVICE_CATEGORY;
2184 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and MRB.SERVICE_CATEGORY_RANK >= (:' ||L_BIND_INDEX ||')';
2185 L_BIND_INDEX := L_BIND_INDEX+1;
2186 END IF;
2187 -- operating org
2188 if(p_search_ump_rec.OPERATING_ORG is not null) then
2189 x_ump_bind_params(l_bind_index).bind_param := p_search_ump_rec.operating_org;
2190 l_mr_search_query := l_mr_search_query || ' and EXISTS (select ''x'' FROM AHL_FLEET_HEADERS_B FLT, HR_ALL_ORGANIZATION_UNITS HROU where
2191 FLT.OPERATING_ORG_ID = HROU.ORGANIZATION_ID and flt.fleet_header_id = b.fleet_header_id and HROU.NAME like (:' || l_bind_index || '))';
2192 l_bind_index := l_bind_index+1;
2193 end if;
2194 -- engineering org
2195 if(p_search_ump_rec.ENGINEERING_ORG is not null) then
2196 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.ENGINEERING_ORG;
2197 l_mr_search_query := l_mr_search_query || ' and MAINTTORG.MR_MAINTENANCE_ORG_NAME like (:' || l_bind_index || ')';
2198 l_bind_index := l_bind_index+1;
2199 end if;
2200 IF(NVL(P_SEARCH_UMP_REC.SHOW_VISIT_DATE_VIOLATIONS,'N') = 'Y') THEN
2201 L_MR_SEARCH_QUERY := L_MR_SEARCH_QUERY || ' and EXISTS (select ''x'' from ahl_visits_b vst,ahl_visit_tasks_b task where vst.visit_id = task.visit_id
2202 and task.unit_effectivity_id = B.unit_effectivity_id
2203 and task.status_code <> ''DELETED'' and B.due_date IS NOT NULL AND TRUNC(B.DUE_DATE) < TRUNC(vst.START_DATE_TIME) ) ';
2204 END IF;
2205 END IF; -- MR searched
2206 IF(L_NR_SEARCHED)THEN
2207 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL OR NVL(P_SEARCH_UMP_REC.ITEM,'%')
2208 <> '%' OR P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL) THEN
2209 L_NR_SEARCH_QUERY := 'select /*+ dynamic_sampling(AAI1 4) */ ';
2210 ELSE
2211 L_NR_SEARCH_QUERY := 'select ';
2212 END IF;
2213 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' ''N'' select_flag, ''Show'' details,ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id) unit_name,
2214 (select meaning from fnd_lookup_values where lookup_type = ''AHL_FMP_MR_PROGRAM_TYPE'' and lookup_code = ''NON-ROUTINE''
2215 AND LANGUAGE = USERENV(''LANG'')) prog_type,
2216 null mr_header_id,(CITT.NAME || ''-'' || CSB.INCIDENT_NUMBER) TITLE,MTL.CONCATENATED_SEGMENTS concatenated_segments,
2217 csib.serial_number,null name ,null uom_code,AHL_UMP_SMRINSTANCE_PVT.GET_UOM_REMAIN(b.unit_effectivity_id) due_counter_value,''View all UOMs'' view_all_uoms,
2218 B.EARLIEST_DUE_DATE,B.DUE_DATE,B.LATEST_DUE_DATE,b.date_run,
2219 (select vst.START_DATE_TIME from ahl_visits_b vst,ahl_visit_tasks_b task where vst.visit_id = task.visit_id
2220 and task.unit_effectivity_id = b.unit_effectivity_id and task.status_code <> ''DELETED''and rownum < 2) scheduledDate,
2221 (select visit_number from ahl_visits_b vst,ahl_visit_tasks_b task where vst.visit_id = task.visit_id
2222 and task.unit_effectivity_id = b.unit_effectivity_id and task.status_code <> ''DELETED''and rownum < 2) visit_name,
2223 B.CS_INCIDENT_ID sr_incident_id,CSB.INCIDENT_NUMBER sr_number,b.unit_effectivity_id,
2224 (Select unit_config_header_id from AHL_UNIT_CONFIG_HEADERS where name = ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id)) unit_config_header_id,
2225 (select vst.visit_id from ahl_visits_b vst,ahl_visit_tasks_b task where vst.visit_id = task.visit_id
2226 and task.unit_effectivity_id = b.unit_effectivity_id and task.status_code <> ''DELETED''and rownum < 2) visit_id,
2227 (select name from ahl_fleet_headers_b flt where flt.fleet_header_id = b.fleet_header_id) fleet ,
2228 (SELECT HROU.NAME FROM ahl_fleet_headers_b flt, HR_ALL_ORGANIZATION_UNITS HROU where flt.OPERATING_ORG_ID = hrou.organization_id
2229 and flt.fleet_header_id = b.fleet_header_id and rownum < 2) operatingorg,
2230 (select master_config_name from ahl_unit_header_details_v ucd where ucd.name = ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id)) mc,
2231 (Select position_ref_meaning from ahl_unit_details_v ucd where ucd.csi_item_instance_id = b.csi_item_instance_id and rownum < 2) ucposition,
2232 null eng_org,
2233 null implementstatus ,null progsubtype , null servicecat, null mrServiceType, null mrduration,
2234 null MrDurationUOM , to_char(null) primaryvisittype ,
2235 (select flvt.meaning from ahl_visits_b vst,ahl_visit_tasks_b task,fnd_lookup_values flvt
2236 where vst.visit_id = task.visit_id and task.unit_effectivity_id = b.unit_effectivity_id and task.status_code <> ''DELETED''
2237 and flvt.lookup_type = ''AHL_PLANNING_VISIT_TYPE'' and flvt.lookup_code = vst.visit_type_code and flvt.language = userenv(''LANG'')
2238 and rownum < 2) scheduledvisittype ,
2239 (Select hrou.name from ahl_visits_b vst,ahl_visit_tasks_b task,hr_all_organization_units hrou
2240 where vst.visit_id = task.visit_id and task.unit_effectivity_id = b.unit_effectivity_id and task.status_code <> ''DELETED''
2241 and vst.organization_id = hrou.organization_id and rownum < 2) scheduledVisitOrg
2242 FROM AHL_UNIT_EFFECTIVITIES_B B,
2243 CS_INCIDENT_TYPES_B CITB,
2244 cs_incident_types_tl citt,
2245 CS_INCIDENTS_ALL_B CSB,
2246 CSI_ITEM_INSTANCES CSIB,
2247 mtl_system_items_kfv mtl ';
2248 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL OR NVL(P_SEARCH_UMP_REC.ITEM,'%')
2249 <> '%' OR P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL OR P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
2250 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' ,AHL_APPLICABLE_INSTANCES AAI1 ';
2251 END IF;
2252 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY ||
2253 'where B.CSI_ITEM_INSTANCE_ID = csib.INSTANCE_ID
2254 AND csib.INVENTORY_ITEM_ID = MTL.INVENTORY_ITEM_ID
2255 AND csib.INV_MASTER_ORGANIZATION_ID = MTL.ORGANIZATION_ID
2256 AND B.CS_INCIDENT_ID = CSB.INCIDENT_ID
2257 and citb.incident_type_id = csb.incident_type_id
2258 and citb.incident_type_id = citt.incident_type_id
2259 and citt.language = userenv(''lang'')
2260 and b.application_usg_code = fnd_profile.value(''AHL_APPLN_USAGE'')
2261 and b.object_type = ''SR''
2262 and b.preceding_ue_id IS NULL
2263 and NVL(B.status_code,''INIT-DUE'' ) = ''INIT-DUE'' ';
2264
2265 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL OR NVL(P_SEARCH_UMP_REC.ITEM,'%')
2266 <> '%' OR P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL OR P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
2267 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' AND B.CSI_ITEM_INSTANCE_ID = AAI1.CSI_ITEM_INSTANCE_ID ';
2268 ELSE
2269 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' AND ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id) IS NOT NULL ';
2270 END IF;
2271 /*IF(P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL) THEN
2272 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.UNIT_NAME;
2273 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and ahl_ump_util_pkg.get_unitname(b.csi_item_instance_id) like (:' ||L_BIND_INDEX ||')';
2274 L_BIND_INDEX := L_BIND_INDEX+1;
2275 END IF;*/
2276 IF(P_SEARCH_UMP_REC.MR_TITLE IS NOT NULL) THEN
2277 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.MR_TITLE;
2278 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and (CITT.NAME || ''-'' || CSB.INCIDENT_NUMBER) like (:' ||L_BIND_INDEX ||')';
2279 L_BIND_INDEX := L_BIND_INDEX+1;
2280 END IF;
2281 /*IF(P_SEARCH_UMP_REC.ITEM IS NOT NULL) THEN
2282 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.ITEM;
2283 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and MTL.CONCATENATED_SEGMENTS like (:' ||L_BIND_INDEX ||')';
2284 L_BIND_INDEX := L_BIND_INDEX+1;
2285 END IF;
2286 IF(P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL) THEN
2287 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER;
2288 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and csib.SERIAL_NUMBER like (:' ||L_BIND_INDEX ||')';
2289 L_BIND_INDEX := L_BIND_INDEX+1;
2290 END IF;*/
2291 IF(P_SEARCH_UMP_REC.FLEET IS NOT NULL) THEN
2292 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.FLEET;
2293 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and exists (select ''x'' from ahl_fleet_headers_b flt where flt.fleet_header_id = b.fleet_header_id and flt.name like (:' ||L_BIND_INDEX ||'))';
2294 L_BIND_INDEX := L_BIND_INDEX+1;
2295 END IF;
2296 IF(P_SEARCH_UMP_REC.MR_SCHEDULED_STATUS IS NOT NULL AND P_SEARCH_UMP_REC.MR_SCHEDULED_STATUS IN ('SCHEDULED','UNSCHEDULED') ) THEN
2297 IF(P_SEARCH_UMP_REC.MR_SCHEDULED_STATUS = 'SCHEDULED')THEN
2298 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and EXISTS (Select ''x'' from ahl_visit_tasks_b vts
2299 where vts.unit_effectivity_id = B.unit_effectivity_id AND vts.status_code <> ''DELETED''and rownum < 2) ';
2300 ELSE
2301 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and NOT EXISTS (Select ''x'' from ahl_visit_tasks_b vts
2302 where vts.unit_effectivity_id = B.unit_effectivity_id and vts.status_code <> ''DELETED''and rownum < 2) ';
2303 END IF;
2304 END IF;
2305 IF(P_SEARCH_UMP_REC.VISIT_NUMBER IS NOT NULL) THEN
2306 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.VISIT_NUMBER;
2307 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and EXISTS (select ''x'' from ahl_visits_b vst,ahl_visit_tasks_b task
2308 where vst.visit_id = task.visit_id and task.unit_effectivity_id = B.unit_effectivity_id and vst.visit_number like (:' || L_BIND_INDEX || ') and task.status_code <> ''DELETED''and rownum < 2) ';
2309 L_BIND_INDEX := L_BIND_INDEX+1;
2310 END IF;
2311 IF(P_SEARCH_UMP_REC.SCHEDULED_VISIT_TYPE IS NOT NULL) THEN
2312 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.SCHEDULED_VISIT_TYPE;
2313 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and EXISTS (select ''x'' from ahl_visits_b vst,ahl_visit_tasks_b task,fnd_lookup_values flvt
2314 where vst.visit_id = task.visit_id and task.unit_effectivity_id = B.unit_effectivity_id and flvt.lookup_type = ''AHL_PLANNING_VISIT_TYPE''
2315 and flvt.lookup_code = vst.visit_type_code and flvt.language = userenv(''LANG'')
2316 and flvt.meaning like (:' || L_BIND_INDEX || ') and task.status_code <> ''DELETED''and rownum < 2) ';
2317 L_BIND_INDEX := L_BIND_INDEX+1;
2318 END IF;
2319 IF(P_SEARCH_UMP_REC.VISIT_ORG_NAME IS NOT NULL) THEN
2320 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.VISIT_ORG_NAME;
2321 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and EXISTS (select ''x'' from ahl_visits_b vst,ahl_visit_tasks_b task ,hr_all_organization_units hrou
2322 where vst.visit_id = task.visit_id and task.unit_effectivity_id = B.unit_effectivity_id and vst.organization_id = hrou.organization_id
2323 and hrou.name like (:' || L_BIND_INDEX || ') and task.status_code <> ''DELETED''and rownum < 2) ';
2324 L_BIND_INDEX := L_BIND_INDEX+1;
2325 END IF;
2326 /* *********************************** BEGIN: SHOW TOLERANCE ****************************************** */
2327 IF P_SEARCH_UMP_REC.DUE_FROM IS NOT NULL THEN
2328 L_DUE_FROM := P_SEARCH_UMP_REC.DUE_FROM;
2329 END IF;
2330 IF P_SEARCH_UMP_REC.DUE_TO IS NOT NULL THEN
2331 L_DUE_TO := TRUNC(P_SEARCH_UMP_REC.DUE_TO) + 1;
2332 END IF;
2333 /* *********************************** BEGIN: SHOW TOLERANCE ****************************************** */
2334 IF ((P_SEARCH_UMP_REC.DUE_FROM IS NOT NULL AND P_SEARCH_UMP_REC.DUE_TO IS NOT NULL) AND (P_SEARCH_UMP_REC.DUE_WITHIN IS NOT NULL))THEN
2335 FND_MESSAGE.SET_NAME('AHL','AHL_UMP_MR_DFROM_DWITHIN_CFLT');
2336 FND_MSG_PUB.ADD;
2337 RAISE FND_API.G_EXC_ERROR;
2338 ELSIF ((P_SEARCH_UMP_REC.DUE_FROM IS NULL OR P_SEARCH_UMP_REC.DUE_TO IS NULL) AND (P_SEARCH_UMP_REC.DUE_WITHIN IS NOT NULL AND (P_SEARCH_UMP_REC.DUE_WITHIN_UOM IS NULL
2339 OR P_SEARCH_UMP_REC.DUE_WITHIN_UOM NOT IN ('HOUR','DAY')) ))THEN
2340 FND_MESSAGE.SET_NAME('AHL','AHL_UMP_MR_DWITHIN_UOM_NLL');
2341 FND_MSG_PUB.ADD;
2342 RAISE FND_API.G_EXC_ERROR;
2343 ELSIF (P_SEARCH_UMP_REC.DUE_WITHIN IS NOT NULL AND P_SEARCH_UMP_REC.DUE_WITHIN_UOM IS NOT NULL)THEN
2344 IF(L_DUE_FROM IS NULL AND L_DUE_TO IS NULL)THEN
2345 L_DUE_FROM := SYSDATE;
2346 END IF;
2347 IF(L_DUE_FROM IS NOT NULL)THEN
2348 IF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'HOUR')THEN
2349 L_DUE_TO := (L_DUE_FROM + P_SEARCH_UMP_REC.DUE_WITHIN/24) + 1;
2350 ELSIF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'DAY')THEN
2351 L_DUE_TO := (L_DUE_FROM + P_SEARCH_UMP_REC.DUE_WITHIN) + 1;
2352 END IF;
2353 ELSIF(L_DUE_TO IS NOT NULL)THEN
2354 IF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'HOUR')THEN
2355 L_DUE_FROM := (L_DUE_TO - P_SEARCH_UMP_REC.DUE_WITHIN/24) -1;
2356 ELSIF(P_SEARCH_UMP_REC.DUE_WITHIN_UOM = 'DAY')THEN
2357 L_DUE_FROM := (L_DUE_TO - P_SEARCH_UMP_REC.DUE_WITHIN) - 1;
2358 END IF;
2359 END IF;
2360 END IF;
2361 -- Show Tolerance is N
2362 IF P_SEARCH_UMP_REC.SHOW_TOLERANCE ='N' THEN
2363 --Due-From Date Check
2364 IF L_DUE_FROM IS NOT NULL THEN
2365 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' AND B.DUE_DATE >= (:' ||L_BIND_INDEX||')';
2366 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2367 L_BIND_INDEX := L_BIND_INDEX + 1;
2368 END IF;
2369 --Due-To Date Check
2370 IF L_DUE_TO IS NOT NULL THEN
2371 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' AND B.DUE_DATE < (:' ||L_BIND_INDEX||')';
2372 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;--TRUNC(p_search_mr_instance_rec.due_to);//bug8265049
2373 L_BIND_INDEX := L_BIND_INDEX + 1;
2374 END IF;
2375 ELSE -- Show Tolerance is Y
2376 IF ( L_DUE_FROM IS NOT NULL AND L_DUE_TO IS NOT NULL ) THEN
2377 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY ||
2378 ' AND ( ((:' ||L_BIND_INDEX||') <= nvl(B.earliest_due_date, B.due_date)
2379 AND nvl(B.earliest_due_date, B.due_date) < (:' ||(L_BIND_INDEX + 1) ||'))
2380 OR (nvl(B.earliest_due_date, B.due_date) <= (:' ||(L_BIND_INDEX + 2) ||')
2381 AND (:' ||(L_BIND_INDEX + 3) ||') < nvl(B.latest_due_date, B.due_date))
2382 OR ((:' ||(L_BIND_INDEX + 4) ||') <= nvl(B.latest_due_date, B.due_date)
2383 AND nvl(B.latest_due_date, B.due_date) < (:' ||(L_BIND_INDEX + 5) ||')) )';
2384 --adivenka changes end
2385 -- due from2 and due to2
2386 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2387 L_BIND_INDEX := L_BIND_INDEX + 1;
2388 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2389 L_BIND_INDEX := L_BIND_INDEX + 1;
2390 -- due from3 and due to3
2391 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2392 L_BIND_INDEX := L_BIND_INDEX + 1;
2393 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2394 L_BIND_INDEX := L_BIND_INDEX + 1;
2395 -- due from4 and due to4
2396 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2397 L_BIND_INDEX := L_BIND_INDEX + 1;
2398 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2399 L_BIND_INDEX := L_BIND_INDEX + 1;
2400 ELSIF ( L_DUE_FROM IS NOT NULL AND L_DUE_TO IS NULL ) THEN
2401 -- Only Due-From Date is there and Due-To Date is NULL
2402 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' AND ( ( ( (:' ||L_BIND_INDEX ||') <= nvl(B.earliest_due_date, B.due_date) )
2403 ) OR ( ( (:' ||(L_BIND_INDEX + 1) ||') <= nvl(B.latest_due_date, B.due_date) ) ) )';
2404 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2405 L_BIND_INDEX := L_BIND_INDEX + 1;
2406 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := TRUNC(L_DUE_FROM);
2407 L_BIND_INDEX := L_BIND_INDEX + 1;
2408 ELSIF ( L_DUE_FROM IS NULL AND L_DUE_TO IS NOT NULL ) THEN
2409 -- Only Due-To Date is there and Due-From Date is NULL
2410 --adivenka modified the following part of the query for bug# 4315128
2411 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' AND ( ( ( nvl(B.earliest_due_date, B.due_date) < (:' ||L_BIND_INDEX ||') )
2412 ) OR( ( nvl(B.latest_due_date, B.due_date) < (:' ||(L_BIND_INDEX + 1) ||') ) ) )';
2413 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2414 L_BIND_INDEX := L_BIND_INDEX + 1;
2415 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := L_DUE_TO;
2416 L_BIND_INDEX := L_BIND_INDEX + 1;
2417 END IF;--Case is ignored when Both Due-From and Due-To Dates are NOT here
2418 END IF;
2419 -- operating org
2420 if(p_search_ump_rec.OPERATING_ORG is not null) then
2421 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.OPERATING_ORG;
2422 l_nr_search_query := l_nr_search_query || ' and EXISTS (select ''x'' FROM AHL_FLEET_HEADERS_B FLT, HR_ALL_ORGANIZATION_UNITS HROU where FLT.OPERATING_ORG_ID = HROU.ORGANIZATION_ID
2423 and flt.fleet_header_id = b.fleet_header_id and HROU.NAME like (:' || l_bind_index || '))';
2424 l_bind_index := l_bind_index+1;
2425 end if;
2426 IF(NVL(P_SEARCH_UMP_REC.SHOW_VISIT_DATE_VIOLATIONS,'N') = 'Y') THEN
2427 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and EXISTS (select ''x'' from ahl_visits_b vst,ahl_visit_tasks_b task where vst.visit_id = task.visit_id
2428 and task.unit_effectivity_id = B.unit_effectivity_id
2429 and task.status_code <> ''DELETED'' and B.due_date IS NOT NULL AND TRUNC(B.DUE_DATE) < TRUNC(vst.START_DATE_TIME) ) ';
2430 END IF;
2431 IF(P_SEARCH_UMP_REC.NR_TYPE IS NOT NULL) THEN
2432 X_UMP_BIND_PARAMS(L_BIND_INDEX).BIND_PARAM := P_SEARCH_UMP_REC.NR_TYPE;
2433 L_NR_SEARCH_QUERY := L_NR_SEARCH_QUERY || ' and citb.incident_type_id like (:' || L_BIND_INDEX || ')';
2434 L_BIND_INDEX := L_BIND_INDEX+1;
2435 END IF;
2436 END IF; -- NR searched
2437 IF(L_MR_SEARCHED AND L_NR_SEARCHED) THEN
2438 X_UMP_SEARCH_QUERY.UMP_SEARCH_QUERY_STR := L_MR_SEARCH_QUERY || ' UNION ALL ' || L_NR_SEARCH_QUERY;
2439 ELSIF (L_MR_SEARCHED) THEN
2440 X_UMP_SEARCH_QUERY.UMP_SEARCH_QUERY_STR := L_MR_SEARCH_QUERY ;
2441 ELSIF(L_NR_SEARCHED)THEN
2442 X_UMP_SEARCH_QUERY.UMP_SEARCH_QUERY_STR := L_NR_SEARCH_QUERY ;
2443 ELSE
2444 X_UMP_SEARCH_QUERY.UMP_SEARCH_QUERY_STR := L_DUMMY_SEARCH_QUERY ;
2445 END IF;
2446
2447 -- populate dependent instances
2448 DELETE AHL_APPLICABLE_INSTANCES;
2449 IF NVL(P_SEARCH_UMP_REC.SHOW_DEPENDENT_REQUIREMENTS,'N') = 'N' THEN
2450 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL OR NVL(P_SEARCH_UMP_REC.ITEM,'%')
2451 <> '%' OR P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL OR P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
2452 populate_unit_instances
2453 (
2454 P_MODULE_TYPE => P_MODULE_TYPE,
2455 p_search_ump_rec => P_SEARCH_UMP_REC
2456 );
2457
2458 END IF;
2459
2460 ELSIF P_SEARCH_UMP_REC.SHOW_DEPENDENT_REQUIREMENTS = 'Y' THEN
2461 IF (P_SEARCH_UMP_REC.UNIT_NAME IS NOT NULL OR NVL(P_SEARCH_UMP_REC.ITEM,'%')
2462 <> '%' OR P_SEARCH_UMP_REC.ITEM_SERIAL_NUMBER IS NOT NULL OR P_SEARCH_UMP_REC.ARRIVAL_ORG IS NOT NULL) THEN
2463 populate_unit_instances
2464 (
2465 P_MODULE_TYPE => P_MODULE_TYPE,
2466 p_search_ump_rec => P_SEARCH_UMP_REC
2467 );
2468 populate_dependent_instances
2469 (
2470 P_MODULE_TYPE => P_MODULE_TYPE
2471 );
2472 END IF;
2473 END IF;
2474 -- Standard call to get message count and if count is 1, get message info
2475 FND_MSG_PUB.COUNT_AND_GET (
2476 P_COUNT => X_MSG_COUNT,
2477 P_DATA => X_MSG_DATA,
2478 P_ENCODED => FND_API.G_FALSE );
2479
2480 IF (G_DEBUG_PROC >= G_DEBUG_LEVEL)THEN
2481 FND_LOG.STRING ( G_DEBUG_PROC, 'ahl.plsql.AHL_UMP_SMRINSTANCE_PVT.Build_Ump_Search_query.end', 'At the end of PLSQL procedure' );
2482 END IF;
2483
2484 EXCEPTION
2485 WHEN FND_API.G_EXC_ERROR THEN
2486 X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
2487 FND_MSG_PUB.COUNT_AND_GET( P_COUNT => X_MSG_COUNT,
2488 P_DATA => X_MSG_DATA,
2489 P_ENCODED => FND_API.G_FALSE);
2490
2491
2492 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2493 X_RETURN_STATUS := FND_API.G_RET_STS_UNEXP_ERROR;
2494 FND_MSG_PUB.COUNT_AND_GET( P_COUNT => X_MSG_COUNT,
2495 P_DATA => X_MSG_DATA,
2496 P_ENCODED => FND_API.G_FALSE);
2497
2498 WHEN OTHERS THEN
2499 X_RETURN_STATUS := FND_API.G_RET_STS_UNEXP_ERROR;
2500 FND_MSG_PUB.ADD_EXC_MSG( P_PKG_NAME => G_PKG_NAME,
2501 P_PROCEDURE_NAME => 'Build_Ump_Search_query',
2502 P_ERROR_TEXT => SQLERRM);
2503
2504 FND_MSG_PUB.COUNT_AND_GET( P_COUNT => X_MSG_COUNT,
2505 P_DATA => X_MSG_DATA,
2506 P_ENCODED => FND_API.G_FALSE);
2507
2508
2509 END BUILD_UMP_SEARCH_QUERY;
2510
2511 FUNCTION GET_UOM_REMAIN(
2512 P_UNIT_EFFECTIVITY_ID IN NUMBER)
2513 RETURN NUMBER
2514 IS
2515 CURSOR ump_ctr_name_csr (p_counter_id IN NUMBER) IS
2516 SELECT cc.counter_template_name counter_name,
2517 (select ccr.net_reading from csi_counter_readings ccr
2518 where ccr.counter_value_id = cc.CTR_VAL_MAX_SEQ_NO
2519 and nvl(ccr.disabled_flag,'N') = 'N')
2520 FROM CSI_COUNTERS_VL CC
2521 WHERE CC.COUNTER_ID = P_COUNTER_ID;
2522
2523 CURSOR get_net_reading_csr (p_csi_item_instance_id IN NUMBER,
2524 P_CTR_TEMPLATE_NAME IN VARCHAR2) IS
2525 SELECT (select ccr.net_reading from csi_counter_readings ccr
2526 where ccr.counter_value_id = cc.CTR_VAL_MAX_SEQ_NO
2527 and nvl(ccr.disabled_flag,'N') = 'N') net_reading
2528 FROM CSI_COUNTER_ASSOCIATIONS CCA, CSI_COUNTERS_VL CC
2529 WHERE CCA.COUNTER_ID = CC.COUNTER_ID
2530 AND CCA.SOURCE_OBJECT_ID = p_csi_item_instance_id
2531 AND CCA.SOURCE_OBJECT_CODE = 'CP'
2532 AND CC.COUNTER_TEMPLATE_NAME = p_ctr_template_name;
2533
2534 CURSOR ump_details_csr(p_unit_effectivity_id IN NUMBER) IS
2535 SELECT UMP.due_counter_value,
2536 UMP.counter_name,
2537 UMP.status_code, UMP.originator_title, UMP.csi_item_instance_id,
2538 UMP.COUNTER_ID,
2539 UMP.orig_ue_instance_id
2540 FROM AHL_UNIT_EFFECTIVITIES_V UMP
2541 WHERE UMP.UNIT_EFFECTIVITY_ID = P_UNIT_EFFECTIVITY_ID;
2542 l_net_reading NUMBER;
2543 l_uom_remain NUMBER;
2544 BEGIN
2545 L_UOM_REMAIN := NULL;
2546 FOR ue_details_rec IN ump_details_csr(p_unit_effectivity_id) LOOP
2547 IF (ue_details_rec.status_code IS NULL OR ue_details_rec.status_code = 'INIT-DUE') THEN
2548 IF (ue_details_rec.COUNTER_NAME IS NOT NULL) THEN
2549 -- uom_remain based on interval threshold.
2550 IF (ue_details_rec.ORIGINATOR_TITLE IS NULL) THEN
2551 OPEN get_net_reading_csr ( ue_details_rec.CSI_ITEM_INSTANCE_ID, ue_details_rec.COUNTER_NAME);
2552 ELSE
2553 OPEN get_net_reading_csr ( ue_details_rec.orig_ue_instance_id, ue_details_rec.COUNTER_NAME);
2554 END IF;
2555 FETCH get_net_reading_csr INTO l_net_reading;
2556 IF (get_net_reading_csr%NOTFOUND) OR (l_net_reading IS NULL) THEN
2557 l_net_reading := 0;
2558 END IF;
2559 CLOSE get_net_reading_csr;
2560 l_uom_remain := ue_details_rec.due_counter_value - l_net_reading;
2561 -- UOM remain based on init due threshold counter_id.
2562 ELSIF (ue_details_rec.counter_id IS NOT NULL) THEN
2563 OPEN ump_ctr_name_csr(ue_details_rec.counter_id);
2564 FETCH ump_ctr_name_csr INTO ue_details_rec.COUNTER_NAME, l_net_reading;
2565 IF (ump_ctr_name_csr%NOTFOUND) THEN
2566 l_net_reading := 0;
2567 ELSIF (l_net_reading IS NULL) THEN
2568 l_net_reading := 0;
2569 END IF;
2570 CLOSE ump_ctr_name_csr;
2571 l_uom_remain := ue_details_rec.due_counter_value - l_net_reading;
2572 END IF; -- ue_details_rec.COUNTER_NAME
2573 ELSE
2574 L_UOM_REMAIN := NULL;
2575 END IF; -- ue_details_rec.UMR_STATUS_CODE
2576 END LOOP;
2577 RETURN l_uom_remain;
2578 END;
2579
2580 END AHL_UMP_SMRINSTANCE_PVT;