1 PACKAGE BODY AHL_UMP_SR_PVT AS
2 /* $Header: AHLVUSRB.pls 120.18.12020000.2 2012/12/11 03:23:54 prakkum ship $ */
3
4 -----------------------
5 -- Declare Constants --
6 -----------------------
7 G_PKG_NAME CONSTANT VARCHAR2(30) := 'AHL_UMP_SR_PVT';
8
9 G_LOG_PREFIX CONSTANT VARCHAR2(100) := 'ahl.plsql.AHL_UMP_SR_PVT';
10
11 G_NO_FLAG CONSTANT VARCHAR2(1) := 'N';
12 G_YES_FLAG CONSTANT VARCHAR2(1) := 'Y';
13 G_SR_CLOSED_FLAG CONSTANT VARCHAR2(1) := 'C';
14 G_SR_OPEN_FLAG CONSTANT VARCHAR2(1) := 'O';
15
16 G_APP_MODULE CONSTANT VARCHAR2(30) := 'AHL';
17
18 -- UMP Statuses
19 G_UMP_TERMINATED_STATUS CONSTANT VARCHAR2(30) := 'TERMINATED';
20 G_UMP_SR_CLOSED_STATUS CONSTANT VARCHAR2(30) := 'SR-CLOSED';
21 G_UMP_ACCOMPLISHED_STATUS CONSTANT VARCHAR2(30) := 'ACCOMPLISHED';
22 G_UMP_DEFERRED_STATUS CONSTANT VARCHAR2(30) := 'DEFERRED';
23 G_UMP_EXCEPTION_STATUS CONSTANT VARCHAR2(30) := 'EXCEPTION';
24 G_UMP_MR_TERMINATE_STATUS CONSTANT VARCHAR2(30) := 'MR-TERMINATE';
25
26 -- SR Statuses
27 --JR: Modified on 10/29/2003: Using Status Id instead of Code since STATUS_CODE
28 -- column of CS_INCIDENT_STATUSES_B is obsoleted per SR Team (Thomas Alex)
29 G_SR_PLANNED_STATUS_ID CONSTANT NUMBER := 52;
30
31 -- Operation Codes
32 G_OPR_CREATE CONSTANT VARCHAR2(1) := 'C';
33 G_OPR_DELETE CONSTANT VARCHAR2(1) := 'D';
34
35 -- UE Relationship Code
36 G_UE_PARENT_REL_CODE CONSTANT VARCHAR2(30) := 'PARENT';
37
38 -- UE Object Types
39 G_UE_MR_OBJECT_TYPE CONSTANT VARCHAR2(2) := 'MR';
40 G_UE_SR_OBJECT_TYPE CONSTANT VARCHAR2(2) := 'SR';
41
42 -------------------------------------------------
43 -- Declare Locally used Record and Table Types --
44 -------------------------------------------------
45
46 ------------------------------
47 -- Declare Local Procedures --
48 ------------------------------
49 -- This Procedure validates the request for the SR-MR Association API
50 PROCEDURE Validate_Associated_Request(
51 p_x_request_id IN OUT NOCOPY NUMBER,
52 p_request_number IN VARCHAR2,
53 p_object_version_number IN NUMBER,
54 x_sr_ue_id OUT NOCOPY NUMBER,
55 x_sr_instance_id OUT NOCOPY NUMBER,
56 x_sr_exp_resol_date OUT NOCOPY DATE);
57
58 -- This Procedure validates SR-MR Association Records
59 PROCEDURE Validate_Association_Records(
60 p_request_id IN NUMBER,
61 p_sr_ue_id IN NUMBER,
62 p_sr_instance_id IN NUMBER,
63 p_x_sr_mr_association_tbl IN OUT NOCOPY SR_MR_Association_Tbl_Type);
64
65 -- This Procedure deletes SR-MR associations
66 PROCEDURE Process_Disassociations(
67 p_sr_ue_id IN NUMBER,
68 p_sr_mr_association_tbl IN SR_MR_Association_Tbl_Type);
69
70 -- This Procedure Creates New SR-MR associations
71 PROCEDURE Process_New_Associations(
72 p_sr_ue_id IN NUMBER,
73 p_sr_instance_id IN NUMBER,
74 p_sr_exp_resol_date IN DATE,
75 p_user_id IN NUMBER,
76 p_login_id IN NUMBER,
77 p_x_sr_mr_association_tbl IN OUT NOCOPY SR_MR_Association_Tbl_Type);
78
79 -- This Procedure Gets the Unit Effectivity Id
80 PROCEDURE Get_MR_UnitEffectivity(
81 p_sr_ue_id IN NUMBER,
82 p_x_sr_mr_association_rec IN OUT NOCOPY SR_MR_Association_Rec_Type);
83
84 -- This Procedure does Value to Id Conversion for New Associations
85 PROCEDURE Get_New_Asso_Val_To_Id(
86 p_x_sr_mr_association_rec IN OUT NOCOPY SR_MR_Association_Rec_Type);
87
88 -- This Procedure creates a new unit effectivity
89 PROCEDURE Create_MR_Unit_Effectivity(
90 p_instance_id IN NUMBER,
91 p_due_date IN DATE,
92 p_mr_header_id IN NUMBER,
93 p_user_id IN NUMBER,
94 p_login_id IN NUMBER,
95 p_fleet_header_id IN NUMBER, -- Bug # 13916897
96 x_ue_id OUT NOCOPY NUMBER);
97
98 -- This Procedure creates a new UE Relationship
99 PROCEDURE Create_UE_Relationship(
100 p_ue_id IN NUMBER,
101 p_related_ue_id IN NUMBER,
102 p_relationship_code IN VARCHAR2,
103 p_originator_id IN NUMBER,
104 p_user_id IN NUMBER,
105 p_login_id IN NUMBER,
106 x_ue_rel_id OUT NOCOPY NUMBER);
107
108 -- This Procedure processes group MRs
109 PROCEDURE Process_Group_MR(
110 p_mr_header_id IN NUMBER,
111 p_csi_instance_id IN NUMBER,
112 p_mr_ue_id IN NUMBER,
113 p_sr_ue_id IN NUMBER,
114 p_due_date IN DATE,
115 p_user_id IN NUMBER,
116 p_login_id IN NUMBER,
117 p_fleet_header_id IN NUMBER, -- Bug # 13916897
118 p_x_valid_flag IN OUT NOCOPY BOOLEAN);
119
120 -- This Function gets the MR Title from the MR Header Id
121 FUNCTION Get_MR_Title_From_MR_Id(
122 p_mr_header_id IN NUMBER) RETURN VARCHAR2;
123
124 -- This Function gets the MR Title from the Unit Effectivity Id
125 FUNCTION Get_MR_Title_From_UE_Id(
126 p_unit_effectivity_id IN NUMBER) RETURN VARCHAR2;
127
128 -- This Procedure updates the due date and tolerance exceeded flag of UEs
129 -- of the MRs associated to the SR in response to change in Exp. Resolution Date of the SR
130 PROCEDURE Handle_MR_UE_Date_Change(
131 p_sr_ue_id IN NUMBER,
132 p_assigned_to_visit_flag IN BOOLEAN,
133 p_new_tolerance_flag IN VARCHAR2,
134 p_new_due_date IN DATE);
135
136 -- This Procedure updates the Unit Effectivity associated with the Service Request.
137 -- It updates the Status, Instance, Due Date and Tolerance Flag in response to updates in a SR
138 PROCEDURE Update_SR_Unit_Effectivity(
139 p_sr_ue_id IN NUMBER,
140 p_due_date_flag IN BOOLEAN,
141 p_new_due_date IN DATE,
142 p_instance_flag IN BOOLEAN,
143 p_new_instance_id IN NUMBER,
144 p_status_flag IN BOOLEAN,
145 p_new_status_code IN VARCHAR2,
146 x_assigned_to_visit_flag OUT NOCOPY BOOLEAN,
147 x_new_tolerance_flag OUT NOCOPY VARCHAR2);
148
149 -- This Procedure validates the Service Request during the Post Update process.
150 -- It retrieves some information as part of the validation process to be used by subsequent processes
151 -- added x_defer_from_ue_id to fix bug# 9166304
152 PROCEDURE Validate_Request_For_Update(
153 x_sr_ue_id OUT NOCOPY NUMBER,
154 x_sr_ue_ovn OUT NOCOPY NUMBER,
155 x_defer_from_ue_id OUT NOCOPY NUMBER);
156
157 -- This Procedure handles type (CMRO to Non-CMRO and vice-versa) changes to a SR
158 -- added p_defer_from_ue_id to fix bug# 9166304
159 PROCEDURE Handle_Type_Change(
160 p_sr_ue_id IN NUMBER,
161 p_defer_from_ue_id IN NUMBER);
162
163 -- This Procedure handles other attribute (Instance, Resolution Date and Status) changes to a SR
164 PROCEDURE Handle_Attribute_Changes(
165 p_sr_ue_id IN NUMBER);
166
167 -- This Procedure handles the change in the item instance (customer product) of the SR
168 -- added p_defer_from_ue_id to fix bug# 9166304
169 PROCEDURE Handle_Instance_Change(
170 p_sr_ue_id IN NUMBER,
171 p_old_instance_id IN NUMBER,
172 p_x_valid_flag IN OUT NOCOPY BOOLEAN, -- This flag will never be set to true in this procedure
173 x_instance_changed OUT NOCOPY BOOLEAN,
174 p_defer_from_ue_id IN NUMBER);
175
176 -- This Procedure handles the change in the status of the Service Request
177 PROCEDURE Handle_Status_Change(
178 p_sr_ue_id IN NUMBER,
179 p_old_ue_status IN AHL_UNIT_EFFECTIVITIES_B.STATUS_CODE%TYPE,
180 p_x_valid_flag IN OUT NOCOPY BOOLEAN, -- This flag will never be set to true in this procedure
181 x_status_changed OUT NOCOPY BOOLEAN,
182 x_new_ue_status OUT NOCOPY AHL_UNIT_EFFECTIVITIES_B.STATUS_CODE%TYPE);
183
184 -- This procedures handles updating the Description of the Workorders to SR Summary
185 -- for following cases
186 -- 1. Non-Routines(NR) created on the shop floor.
187 -- 2. Non-Routines with no MRs associated and planned from UMP into a Visit.
188 -- Balaji added this procedure for BAE ER # 4462462.
189 PROCEDURE Handle_Summary_Update(
190 p_sr_ue_id IN NUMBER
191 );
192
193 -------------------------------------
194 -- End Local Procedures Declaration--
195 -------------------------------------
196
197 -----------------------------------------
198 -- Public Procedure Definitions follow --
199 -----------------------------------------
200 -- Start of Comments --
201 -- Procedure name : Create_SR_Unit_Effectivity
202 -- Type : Private
203 -- Function : Private API to create a SR type unit effectivity. Called by corresponding Public procedure.
204 -- Uses CS_SERVICEREQUEST_PVT.USER_HOOKS_REC to get SR Details.
205 -- Pre-reqs :
206 -- Parameters :
207 -- x_return_status OUT VARCHAR2 Required
208 --
209 -- Version :
210 -- Initial Version 1.0
211 --
212 -- End of Comments.
213
214 PROCEDURE Create_SR_Unit_Effectivity
215 (
216 x_return_status OUT NOCOPY VARCHAR2) IS
217 l_api_name CONSTANT VARCHAR2(30) := 'Create_SR_Unit_Effectivity';
218 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Create_SR_Unit_Effectivity';
219
220 -- Validate Incident ID
221 CURSOR validate_incident_id ( c_request_id in NUMBER )
222 IS
223 SELECT incident_id
224 FROM cs_incidents_all_b
225 WHERE incident_id = c_request_id;
226
227 -- Validate Item Instance
228 CURSOR validate_instance ( c_instance_id in NUMBER)
229 IS
230 SELECT instance_id, instance_number, active_end_date
231 FROM csi_item_instances
232 WHERE instance_id = c_instance_id;
233
234 -- bachandr Bug # 13916897
235 CURSOR c_get_incident_occ_date(c_incident_id IN NUMBER) IS
236 SELECT incident_occurred_date FROM cs_incidents
237 WHERE incident_id = c_incident_id;
238
239 l_occurred_date DATE;
240
241 -- bachandr Bug # 13916897
242
243 --Cursor Variables
244 l_incident_id NUMBER;
245 l_instance_id NUMBER;
246 l_instance_number VARCHAR2(30);
247 l_active_end_date DATE;
248 l_name VARCHAR2(30);
249 --Procedure Returned Variables
250 l_appln_code VARCHAR2(20);
251 l_return_status VARCHAR2(1);
252 -- User Hook Variables
253 l_request_id NUMBER;
254 l_status_flag VARCHAR2(3);
255 l_old_type_cmro_flag VARCHAR2(3);
256 l_new_type_cmro_flag VARCHAR2(3);
257 l_customer_product_id NUMBER;
258 l_status_id NUMBER;
259 l_exp_resolution_date DATE;
260 -- Local Variables
261 l_ump_status fnd_lookups.lookup_code%TYPE;
262 l_unit_effectivity_id NUMBER;
263 l_rowid VARCHAR2(30);
264 l_accomplished_date DATE := null;
265
266 l_uc_hdr_id NUMBER;
267 l_uc_status_code VARCHAR2(30);
268
269 BEGIN
270
271 SAVEPOINT Create_SR_Unit_Effectivity_Pvt;
272
273 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
274 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Create_SR_Unit_Effectivity Procedure');
275 END IF;
276
277 -- Initialize message list
278 --AMSRINIV. Bug 5470730. Removing message initialization.
279 -- FND_MSG_PUB.Initialize;
280
281 -- Initialize API return status to success
282 x_return_status := FND_API.G_RET_STS_SUCCESS;
283
284 -- Begin Processing
285
286 --Getting all the required values from the user hook record
287 l_request_id := cs_servicerequest_pvt.user_hooks_rec.request_id;
288 l_status_flag := cs_servicerequest_pvt.user_hooks_rec.status_flag;
289 l_old_type_cmro_flag := cs_servicerequest_pvt.user_hooks_rec.old_type_cmro_flag;
290 l_new_type_cmro_flag := cs_servicerequest_pvt.user_hooks_rec.new_type_cmro_flag;
291 l_customer_product_id := cs_servicerequest_pvt.user_hooks_rec.customer_product_id;
292 l_status_id := cs_servicerequest_pvt.user_hooks_rec.status_id;
293 l_exp_resolution_date := cs_servicerequest_pvt.user_hooks_rec.exp_resolution_date;
294
295 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
296 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' input values:' );
297 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' Request id::' || cs_servicerequest_pvt.user_hooks_rec.request_id);
298 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'Status flag:' || cs_servicerequest_pvt.user_hooks_rec.status_flag);
299 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'old_type_cmro_flag:' || cs_servicerequest_pvt.user_hooks_rec.old_type_cmro_flag);
300 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'new_type_cmro_flag:' || cs_servicerequest_pvt.user_hooks_rec.new_type_cmro_flag);
301 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'customer_product_id:' || cs_servicerequest_pvt.user_hooks_rec.customer_product_id);
302 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'status id:' || cs_servicerequest_pvt.user_hooks_rec.status_id);
303 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'exp_resolution_date:' || cs_servicerequest_pvt.user_hooks_rec.exp_resolution_date);
304 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'incident_occurred_date:' || cs_servicerequest_pvt.user_hooks_rec.incident_occurred_date);
305 END IF;
306
307
308 --******************************
309 --Validating the Request
310 --******************************
311
312 --Raising an error if the request id null
313 IF (l_request_id IS NULL OR l_request_id = FND_API.G_MISS_NUM) THEN
314 x_return_status := FND_API.G_RET_STS_ERROR;
315 FND_MESSAGE.set_name('AHL', 'AHL_UMP_MISSING_REQUEST_ID');
316 FND_MSG_PUB.add;
317 RAISE FND_API.G_EXC_ERROR;
318 END IF;
319
320 --Opening cursor to validate incident id
321 OPEN validate_incident_id ( l_request_id );
322 FETCH validate_incident_id into l_incident_id;
323
324 --Raise an error if the incident id is not valid.
325 IF (validate_incident_id%NOTFOUND) THEN
326 fnd_message.set_name('AHL', 'AHL_UMP_INVALID_INCIDENT_ID');
327 fnd_message.set_token('INCIDENT_ID', l_request_id, false);
328 FND_MSG_PUB.add;
329 CLOSE validate_instance;
330 RAISE FND_API.G_EXC_ERROR;
331 END IF;
332
333 CLOSE validate_incident_id;
334
335 --Validating CMRO Type. If not CMRO type, return without processing.
336 IF (nvl(l_new_type_cmro_flag, 'N') <> 'Y') THEN
337 x_return_status := FND_API.G_RET_STS_SUCCESS;
338 RETURN;
339 END IF;
340
341 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
342 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' Processing for CMRO type of SR');
343 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' BEFORE Calling AHL_UTIL_PKG.Get_Appln_Usage' );
344 END IF;
345
346 --Call the procedure AHL_UTIL_PKG.Get_Appln_Usage
347 AHL_UTIL_PKG.Get_Appln_Usage
348 (
349 x_appln_code => l_appln_code,
350 x_return_status => l_return_status
351 );
352
353 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
354 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' After Calling AHL_UTIL_PKG.Get_Appln_Usage successfully' );
355 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' l_appln_code: ' || l_appln_code);
356 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' l_return_status: ' || l_return_status);
357 END IF;
358
359
360 --Set the return status to an error and raise an error message if the return status is an error.
361 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
362 x_return_status := FND_API.G_RET_STS_ERROR;
363 FND_MESSAGE.set_name('AHL', 'AHL_COM_APPL_USG_PROF_NOT_SET');
364 FND_MSG_PUB.add;
365 RAISE FND_API.G_EXC_ERROR;
366 END IF;
367
368 --Set the return status to an error and raise an error message if the application code returned is not AHL
369 IF (l_appln_code <> 'AHL') THEN
370 x_return_status := FND_API.G_RET_STS_ERROR;
371 FND_MESSAGE.set_name('AHL', 'AHL_COM_APPL_USG_MODE_INVALID');
372 FND_MESSAGE.set_token('TASK', l_name, false);
373 FND_MSG_PUB.add;
374 RAISE FND_API.G_EXC_ERROR;
375 END IF;
376
377 --******************************
378 --Validating the status
379 --******************************
380 -- JR: Modified on 10/29/2003 (Using Status Id instead of Status Code)
381 -- Raise an error if the status is PLANNED.
382 IF (l_status_id = G_SR_PLANNED_STATUS_ID) THEN
383 FND_MESSAGE.set_name('AHL', 'AHL_UMP_INVALID_STATUS_CODE');
384 FND_MSG_PUB.add;
385 RAISE FND_API.G_EXC_ERROR;
386 END IF;
387
388 --******************************
389 --Validating the item instance
390 --******************************
391 --Raise an error if the item instance id null
392 IF (l_customer_product_id IS NULL OR l_customer_product_id = FND_API.G_MISS_NUM) THEN
393 x_return_status := FND_API.G_RET_STS_ERROR;
394 FND_MESSAGE.set_name('AHL', 'AHL_UMP_INSTANCE_MANDATORY');
395 FND_MSG_PUB.add;
396 RAISE FND_API.G_EXC_ERROR;
397 END IF;
398
399 --Ensuring that the instance exists in csi_item_instances.
400 OPEN validate_instance(l_customer_product_id);
401 FETCH validate_instance into l_instance_id, l_instance_number, l_active_end_date;
402 --Raise an error if the instance is not a valid CSI Instance
403 IF (validate_instance%NOTFOUND) THEN
404 fnd_message.set_name('AHL', 'AHL_UMP_INVALID_CSI_INSTANCE');
405 fnd_message.set_token('CSI_INSTANCE_ID', l_customer_product_id, false);
406 FND_MSG_PUB.add;
407 CLOSE validate_instance;
408 RAISE FND_API.G_EXC_ERROR;
409 END IF;
410
411 --Raise an error if the instance is inactive.
412 IF ( l_active_end_date IS NOT NULL AND l_active_end_date <= SYSDATE ) THEN
413 fnd_message.set_name('AHL', 'AHL_UMP_INACTIVE_INSTANCE');
414 fnd_message.set_token('INSTANCE_NUMBER', l_instance_number, false);
415 FND_MSG_PUB.add;
416 CLOSE validate_instance;
417 RAISE FND_API.G_EXC_ERROR;
418 END IF;
419
420 CLOSE validate_instance;
421
422 IF (l_status_flag = 'O') THEN
423 l_ump_status := NULL;
424 ELSE
425 l_ump_status := 'SR-CLOSED';
426 /* JR: Modified on 10/21/2003 */
427 l_accomplished_date := SYSDATE;
428 END IF;
429
430 /* retrieve active unit on which SR instance is installed */
431 SELECT ahl_util_uc_pkg.get_uc_header_id(l_customer_product_id) into l_uc_hdr_id from dual;
432 IF (l_uc_hdr_id is not null)
433 THEN
434 -- if the instance's unit is in QUARANTINE/DEACTIVATE_QUARANTINE throw error
435 -- if the instance's unit is COMPLETE/INCOMPLETE, it is active hence use the unit
436 -- for all other cases treat the NR as being created for IB component only, i.e. no unit info
437 l_uc_status_code := ahl_util_uc_pkg.get_uc_status_code(l_uc_hdr_id);
438 IF (l_uc_status_code IN ('QUARANTINE', 'DEACTIVATE_QUARANTINE'))
439 THEN
440 FND_MESSAGE.SET_NAME('AHL', 'AHL_UMP_NR_UNIT_QUAR_INV');
441 FND_MSG_PUB.ADD;
442 RAISE FND_API.G_EXC_ERROR;
443 ELSIF (l_uc_status_code NOT IN ('COMPLETE', 'INCOMPLETE'))
444 THEN
445 l_uc_hdr_id := null;
446 END IF;
447 END IF;
448
449 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
450 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' BEFORE Calling TABLE HANDLER AHL_UNIT_EFFECTIVITIES_PKG.Insert_Row' );
451 END IF;
452
453
454 -- bachandr Bug # 13916897
455 IF l_exp_resolution_date IS NULL
456 THEN
457 OPEN c_get_incident_occ_date(l_request_id);
458 FETCH c_get_incident_occ_date INTO l_occurred_date;
459 CLOSE c_get_incident_occ_date;
460 END IF;
461 -- bachandr Bug # 13916897
462
463 --******************************
464 -- Call Table Handler.
465 --******************************
466 AHL_UNIT_EFFECTIVITIES_PKG.Insert_Row (
467 X_ROWID => l_rowid,
468 X_UNIT_EFFECTIVITY_ID => l_unit_effectivity_id,
469 X_MANUALLY_PLANNED_FLAG => 'Y',
470 X_LOG_SERIES_CODE => null,
471 X_LOG_SERIES_NUMBER => null,
472 X_FLIGHT_NUMBER => null,
473 X_MEL_CDL_TYPE_CODE => null,
474 X_POSITION_PATH_ID => null,
475 X_ATA_CODE => null,
476 --X_CLEAR_STATION_ORG_ID => null,
477 --X_CLEAR_STATION_DEPT_ID => null,
478 X_UNIT_CONFIG_HEADER_ID => l_uc_hdr_id,
479 X_QA_COLLECTION_ID => null,
480 X_CS_INCIDENT_ID => l_request_id,
481 X_OBJECT_TYPE => 'SR',
482 X_APPLICATION_USG_CODE => l_appln_code,
483 X_COUNTER_ID => null,
484 X_EARLIEST_DUE_DATE => null,
485 X_LATEST_DUE_DATE => null,
486 X_FORECAST_SEQUENCE => null,
487 X_REPETITIVE_MR_FLAG => null,
488 X_TOLERANCE_FLAG => null,
489 X_MESSAGE_CODE => null,
490 X_DATE_RUN => null,
491 X_PRECEDING_UE_ID => null,
492 X_SET_DUE_DATE => null,
493 X_ACCOMPLISHED_DATE => l_accomplished_date,
494 X_SERVICE_LINE_ID => null,
495 X_PROGRAM_MR_HEADER_ID => null,
496 X_CANCEL_REASON_CODE => null,
497 X_ATTRIBUTE_CATEGORY => null,
498 X_ATTRIBUTE1 => null,
499 X_ATTRIBUTE2 => null,
500 X_ATTRIBUTE3 => null,
501 X_ATTRIBUTE4 => null,
502 X_ATTRIBUTE5 => null,
503 X_ATTRIBUTE6 => null,
504 X_ATTRIBUTE7 => null,
505 X_ATTRIBUTE8 => null,
506 X_ATTRIBUTE9 => null,
507 X_ATTRIBUTE10 => null,
508 X_ATTRIBUTE11 => null,
509 X_ATTRIBUTE12 => null,
510 X_ATTRIBUTE13 => null,
511 X_ATTRIBUTE14 => null,
512 X_ATTRIBUTE15 => null,
513 X_OBJECT_VERSION_NUMBER => 1,
514 X_CSI_ITEM_INSTANCE_ID => l_customer_product_id,
515 X_MR_HEADER_ID => null,
516 X_MR_EFFECTIVITY_ID => null,
517 X_MR_INTERVAL_ID => null,
518 X_STATUS_CODE => l_ump_status,
519 X_DUE_DATE => l_exp_resolution_date,
520 X_DUE_COUNTER_VALUE => null,
521 X_DEFER_FROM_UE_ID => null,
522 X_ORIG_DEFERRAL_UE_ID => null,
523 X_REMARKS => null,
524 X_CREATION_DATE => sysdate,
525 X_CREATED_BY => fnd_global.user_id,
526 X_LAST_UPDATE_DATE => sysdate,
527 X_LAST_UPDATED_BY => fnd_global.user_id,
528 X_LAST_UPDATE_LOGIN => fnd_global.login_id,
529 -- BACHANDR - NR project start
530 X_FLEET_HEADER_ID => AHL_UMP_UTIL_PKG.Get_Associated_Fleet(l_uc_hdr_id,nvl(l_exp_resolution_date,l_occurred_date),null)
531 -- BACHANDR - NR project end
532 );
533
534 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
535 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' AFTER Calling TABLE HANDLER AHL_UNIT_EFFECTIVITIES_PKG.Insert_Row' );
536 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' Unit Effectivity ID:' || l_unit_effectivity_id);
537 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' Return Status:' || x_return_status);
538 END IF;
539
540 -- End Processing
541
542 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
543 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Create_SR_Unit_Effectivity Procedure');
544 END IF;
545
546 EXCEPTION
547 WHEN FND_API.G_EXC_ERROR THEN
548 ROLLBACK TO Create_SR_Unit_Effectivity_Pvt;
549 x_return_status := FND_API.G_RET_STS_ERROR;
550 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
551 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' Error: Return Status:' || x_return_status);
552 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' Error: Msg Count:' || fnd_msg_pub.count_msg);
553 END IF;
554
555 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
556 ROLLBACK TO Create_SR_Unit_Effectivity_Pvt;
557 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
558 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
559 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' UnExpError: Return Status:' || x_return_status);
560 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , ' UnExpError: Msg Count:' || fnd_msg_pub.count_msg);
561 END IF;
562
563 WHEN OTHERS THEN
564 ROLLBACK TO Create_SR_Unit_Effectivity_Pvt;
565 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
566 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
567 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
568 p_procedure_name => 'Create_SR_Unit_Effectivity',
569 p_error_text => SUBSTRB(SQLERRM,1,240));
570 END IF;
571
572 END Create_SR_Unit_Effectivity;
573
574 ----------------------------------------
575 -- Start of Comments --
576 -- Procedure name : Process_SR_Updates
577 -- Type : Private
578 -- Function : Private API to process changes to a (current or former) CMRO type SR
579 -- by adding, removing or updating SR type unit effectivities.
580 -- Called by the corresponding public procedure.
581 -- Uses CS_SERVICEREQUEST_PVT.USER_HOOKS_REC to get SR Details.
582 -- Pre-reqs :
583 -- Parameters :
584 -- x_return_status OUT VARCHAR2 Required
585 --
586 -- Version :
587 -- Initial Version 1.0
588 --
589 -- End of Comments.
590
591 PROCEDURE Process_SR_Updates
592 (
593 x_return_status OUT NOCOPY VARCHAR2) IS
594
595 l_api_name CONSTANT VARCHAR2(30) := 'Process_SR_Updates';
596 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Process_SR_Updates';
597
598 l_appln_code VARCHAR2(30);
599 l_skip_processing BOOLEAN := false;
600 l_sr_ue_id NUMBER;
601 l_sr_ue_ovn NUMBER;
602 -- added l_defer_from_ue_id to fix bug# 9166304
603 l_defer_from_ue_id NUMBER;
604 BEGIN
605
606 SAVEPOINT Process_SR_Updates_Pvt;
607
608 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
609 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
610 END IF;
611
612 -- JR: Added the following log on 10/21/2003 to help in debugging
613 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
614 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'Relevant User Hook Record (input) Values: ' );
615 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY , 'old_type_cmro_flag = ' || CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.old_type_cmro_flag ||
616 ', new_type_cmro_flag = ' || CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.new_type_cmro_flag ||
617 ', request_id = ' || CS_SERVICEREQUEST_PVT.user_hooks_rec.request_id ||
618 ', status_id = ' || CS_SERVICEREQUEST_PVT.user_hooks_rec.status_id ||
619 ', status_flag = ' || CS_SERVICEREQUEST_PVT.user_hooks_rec.status_flag ||
620 ', customer_product_id = ' || CS_SERVICEREQUEST_PVT.user_hooks_rec.customer_product_id ||
621 ', exp_resolution_date = ' || CS_SERVICEREQUEST_PVT.user_hooks_rec.exp_resolution_date);
622 END IF;
623
624 -- Initialize API return status to success
625 x_return_status := FND_API.G_RET_STS_SUCCESS;
626
627 -- Initialize message list
628 --AMSRINIV. Bug 5470730. Removing message initialization.
629 --FND_MSG_PUB.Initialize;
630
631 -- Begin Processing
632 IF NOT (NVL(CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.old_type_cmro_flag, G_NO_FLAG) = G_YES_FLAG OR
633 NVL(CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.new_type_cmro_flag, G_NO_FLAG)= G_YES_FLAG) THEN
634 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
635 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Not a CMRO Type Service Request.');
636 END IF;
637 -- Not a CMRO Type Service Request
638 -- Just return 'SUCCESS' without doing any processing.
639 l_skip_processing := true;
640 ELSE
641 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
642 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'From USER_HOOKS_REC: old_type_cmro_flag = ' || CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.old_type_cmro_flag ||
643 ', new_type_cmro_flag = ' || CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.new_type_cmro_flag);
644 END IF;
645 END IF;
646
647 IF (l_skip_processing = false) THEN
648 IF (NVL(CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.new_type_cmro_flag, G_NO_FLAG) = G_YES_FLAG) THEN
649 -- Since this is a CMRO type SR, ensure that the Application Usage profile option has been set to AHL
650 AHL_UTIL_PKG.Get_Appln_Usage(x_appln_code => l_appln_code,
651 x_return_status => x_return_status);
652
653 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
654 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_APP_USAGE_NOT_SET');
655 FND_MSG_PUB.ADD;
656 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
657 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
658 END IF;
659 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
660 ELSIF(l_appln_code IS NULL OR (l_appln_code <> G_APP_MODULE)) THEN
661 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_APP_USAGE_INVALID');
662 FND_MSG_PUB.ADD;
663 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
664 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
665 END IF;
666 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
667 ELSE
668 IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
669 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'Application Usage Profile Option Validated');
670 END IF;
671 END IF; -- Appln_Usage Valid
672 END IF; -- new_type_cmro_flag = 'Y'
673
674 -- First Validate the request
675 Validate_Request_For_Update(x_sr_ue_id => l_sr_ue_id,
676 x_sr_ue_ovn => l_sr_ue_ovn,
677 x_defer_from_ue_id => l_defer_from_ue_id);
678
679 IF (NVL(CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.old_type_cmro_flag, G_NO_FLAG) <> NVL(CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.new_type_cmro_flag, G_NO_FLAG)) THEN
680 -- Handle Type Change
681 Handle_Type_Change(p_sr_ue_id => l_sr_ue_id,
682 p_defer_from_ue_id => l_defer_from_ue_id);
683
684 ELSE
685 -- Handle other attribute (instance, status and resolution date) changes
686 Handle_Attribute_Changes(p_sr_ue_id => l_sr_ue_id);
687 END IF; -- Type change or other change
688 END IF; -- If l_skip_processing = false
689
690 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
691 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
692 END IF;
693
694 EXCEPTION
695
696 WHEN FND_API.G_EXC_ERROR THEN
697 ROLLBACK TO Process_SR_Updates_Pvt;
698 x_return_status := FND_API.G_RET_STS_ERROR;
699
700 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
701 ROLLBACK TO Process_SR_Updates_Pvt;
702 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
703
704 WHEN OTHERS THEN
705 ROLLBACK TO Process_SR_Updates_Pvt;
706 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
707 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
708 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
709 p_procedure_name => 'Process_SR_Updates',
710 p_error_text => SUBSTRB(SQLERRM,1,240));
711 END IF;
712
713 END Process_SR_Updates;
714
715 ----------------------------------------
716
717 -- Start of Comments --
718 -- Procedure name : Process_SR_MR_Associations
719 -- Type : Private
720 -- Function : Processes new and removed MR associations with a CMRO type SR by
721 -- creating or removing unit effectivities and corresponding relationships.
722 -- Called by the corresponding public procedure.
723 -- Pre-reqs :
724 -- Parameters :
725 --
726 -- Standard IN Parameters :
727 -- p_api_version IN NUMBER Required
728 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
729 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
730 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
731 --
732 -- Standard OUT Parameters :
733 -- x_return_status OUT VARCHAR2 Required
734 -- x_msg_count OUT NUMBER Required
735 -- x_msg_data OUT VARCHAR2 Required
736 --
737 -- Process_SR_MR_Associations Parameters:
738 -- p_user_id IN NUMBER Required
739 -- The Id of the user calling this API
740 -- p_login_id IN NUMBER Required
741 -- The Login Id of the user calling this API
742 -- p_request_id IN NUMBER Required if p_request_number is not given
743 -- The Id of the Service Request
744 -- p_object_version_number IN NUMBER Required
745 -- The object version number of the Service Request
746 -- p_request_number IN VARCHAR2 Required if p_request_id is not given
747 -- The request number of the Service Request
748 -- p_x_sr_mr_association_tbl IN OUT AHL_UMP_SR_PVT.SR_MR_Association_Tbl_Type Required
749 -- The Table of records containing the details about the associations and disassociations
750 --
751 -- Version :
752 -- Initial Version 1.0
753 --
754 -- End of Comments.
755
756 PROCEDURE Process_SR_MR_Associations
757 (
758 p_api_version IN NUMBER,
759 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
760 p_commit IN VARCHAR2 := FND_API.G_FALSE,
761 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
762 x_return_status OUT NOCOPY VARCHAR2,
763 x_msg_count OUT NOCOPY NUMBER,
764 x_msg_data OUT NOCOPY VARCHAR2,
765 p_user_id IN NUMBER,
766 p_login_id IN NUMBER,
767 p_request_id IN NUMBER,
768 p_object_version_number IN NUMBER,
769 p_request_number IN VARCHAR2,
770 p_x_sr_mr_association_tbl IN OUT NOCOPY AHL_UMP_SR_PVT.SR_MR_Association_Tbl_Type) IS
771
772 l_api_version CONSTANT NUMBER := 1.0;
773 l_api_name CONSTANT VARCHAR2(30) := 'Process_SR_MR_Associations';
774 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Process_SR_MR_Associations';
775
776 l_appln_code VARCHAR2(30);
777 l_request_id NUMBER := p_request_id;
778 l_sr_ue_id NUMBER := NULL;
779 l_sr_instance_id NUMBER := NULL;
780 l_sr_exp_resol_date DATE := NULL;
781
782 BEGIN
783 -- Standard start of API savepoint
784 SAVEPOINT Process_SR_MR_Associations_pvt;
785
786 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
787 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
788 END IF;
789
790 -- Standard call to check for call compatibility
791 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
792 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
793 END IF;
794
795 -- Initialize message list if p_init_msg_list is set to TRUE
796 IF FND_API.To_Boolean(p_init_msg_list) THEN
797 FND_MSG_PUB.Initialize;
798 END IF;
799
800 -- Initialize API return status to success
801 x_return_status := FND_API.G_RET_STS_SUCCESS;
802
803 -- Begin Processing
804 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
805 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Beginning Processing with p_request_id = ' || p_request_id ||
806 ', p_object_version_number = ' || p_object_version_number ||
807 ' and p_x_sr_mr_association_tbl.COUNT = ' || p_x_sr_mr_association_tbl.COUNT);
808 END IF;
809 -- Check if the Application Usage profile option has been set
810 AHL_UTIL_PKG.Get_Appln_Usage(x_appln_code => l_appln_code,
811 x_return_status => x_return_status);
812
813 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
814 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_APP_USAGE_NOT_SET');
815 FND_MSG_PUB.ADD;
816 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
817 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
818 END IF;
819 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
820 ELSIF(l_appln_code IS NULL OR (l_appln_code <> G_APP_MODULE)) THEN
821 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_APP_USAGE_INVALID');
822 FND_MSG_PUB.ADD;
823 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
824 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
825 END IF;
826 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
827 END IF;
828 IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
829 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'Application Usage Profile Option Validated');
830 END IF;
831
832 -- Validate the Request
833 Validate_Associated_Request(p_x_request_id => l_request_id,
834 p_request_number => p_request_number,
835 p_object_version_number => p_object_version_number,
836 x_sr_ue_id => l_sr_ue_id,
837 x_sr_instance_id => l_sr_instance_id,
838 x_sr_exp_resol_date => l_sr_exp_resol_date);
839
840 IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
841 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'Completed Validating the Request');
842 END IF;
843
844 IF (p_x_sr_mr_association_tbl.COUNT = 0) THEN
845 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_MR_SR_TBL_EMPTY');
846 FND_MSG_PUB.ADD;
847 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
848 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
849 END IF;
850 RAISE FND_API.G_EXC_ERROR;
851 END IF;
852
853 -- Validate the SR-MR Association records
854 Validate_Association_Records(p_request_id => l_request_id,
855 p_sr_ue_id => l_sr_ue_id,
856 p_sr_instance_id => l_sr_instance_id,
857 p_x_sr_mr_association_tbl => p_x_sr_mr_association_tbl);
858
859 IF (FND_MSG_PUB.Count_Msg > 0) THEN
860 -- There are validation errors: No need to process further
861 RAISE FND_API.G_EXC_ERROR;
862 END IF;
863
864
865 -- Process all Disassociations First
866 Process_Disassociations(p_sr_ue_id => l_sr_ue_id,
867 p_sr_mr_association_tbl => p_x_sr_mr_association_tbl);
868
869 -- Process all New Associations Next
870 Process_New_Associations(p_sr_ue_id => l_sr_ue_id,
871 p_sr_instance_id => l_sr_instance_id,
872 p_sr_exp_resol_date => l_sr_exp_resol_date,
873 p_user_id => p_user_id,
874 p_login_id => p_login_id,
875 p_x_sr_mr_association_tbl => p_x_sr_mr_association_tbl);
876
877 IF (FND_MSG_PUB.Count_Msg > 0) THEN
878 -- There are validation errors from Process_New_Associations: Raise error
879 RAISE FND_API.G_EXC_ERROR;
880 END IF;
881
882 -- Standard check of p_commit
883 IF FND_API.TO_BOOLEAN(p_commit) THEN
884 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
885 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'About to Commit.');
886 END IF;
887 COMMIT WORK;
888 END IF;
889
890 -- Standard call to get message count and if count is 1, get message info
891 FND_MSG_PUB.Count_And_Get
892 ( p_count => x_msg_count,
893 p_data => x_msg_data,
894 p_encoded => fnd_api.g_false
895 );
896
897 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
898 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
899 END IF;
900
901 EXCEPTION
902 WHEN FND_API.G_EXC_ERROR THEN
903 ROLLBACK TO Process_SR_MR_Associations_pvt;
904 x_return_status := FND_API.G_RET_STS_ERROR;
905 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
906 p_data => x_msg_data,
907 p_encoded => fnd_api.g_false);
908 --AHL_UTIL_PKG.Err_Mesg_To_Table(x_err_mesg_tbl);
909
910 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
911 ROLLBACK TO Process_SR_MR_Associations_pvt;
912 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
913 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
914 p_data => x_msg_data,
915 p_encoded => fnd_api.g_false);
916 --AHL_UTIL_PKG.Err_Mesg_To_Table(x_err_mesg_tbl);
917
918 WHEN OTHERS THEN
919 ROLLBACK TO Process_SR_MR_Associations_pvt;
920 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
921 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
922 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
923 p_procedure_name => 'Process_SR_MR_Associations',
924 p_error_text => SUBSTRB(SQLERRM,1,240));
925 END IF;
926 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
927 p_data => x_msg_data,
928 p_encoded => fnd_api.g_false);
929 --AHL_UTIL_PKG.Err_Mesg_To_Table(x_err_mesg_tbl);
930
931 END Process_SR_MR_Associations;
932
933 ----------------------------------------
934
935 --------------------------------------
936 -- End Public Procedure Definitions --
937 --------------------------------------
938
939 ----------------------------------------
940 -- Local Procedure Definitions follow --
941 ----------------------------------------
942 ----------------------------------------
943 -- This Procedure validates the request for the SR-MR Association API
944 ----------------------------------------
945 PROCEDURE Validate_Associated_Request(
946 p_x_request_id IN OUT NOCOPY NUMBER,
947 p_request_number IN VARCHAR2,
948 p_object_version_number IN NUMBER,
949 x_sr_ue_id OUT NOCOPY NUMBER,
950 x_sr_instance_id OUT NOCOPY NUMBER,
951 x_sr_exp_resol_date OUT NOCOPY DATE) IS
952
953 CURSOR get_request_dtls_csr(p_request_id IN NUMBER,
954 p_request_number IN VARCHAR2,
955 p_object_version_number IN NUMBER) IS
956 /*SELECT incident_id, incident_status_id, closed_flag, customer_product_id, expected_resolution_date
957 FROM CS_INCIDENTS_V
958 WHERE INCIDENT_ID like DECODE(p_request_id, null, '%', p_request_id)
959 AND INCIDENT_NUMBER like NVL(p_request_number, '%')
960 AND OBJECT_VERSION_NUMBER = p_object_version_number;*/
961
962 SELECT INC.incident_id, INC.incident_status_id, NVL(STATUS.CLOSE_FLAG, 'N') closed_flag, INC.customer_product_id, INC.expected_resolution_date
963 FROM CS_INCIDENT_STATUSES_B STATUS,CS_INCIDENTS_ALL_B INC
964 WHERE INC.INCIDENT_STATUS_ID = STATUS.INCIDENT_STATUS_ID
965 AND INC.INCIDENT_ID like DECODE(p_request_id, null, '%', p_request_id)
966 AND INC.INCIDENT_NUMBER like NVL(p_request_number, '%')
967 AND INC.OBJECT_VERSION_NUMBER = p_object_version_number;
968
969 CURSOR get_ue_dtls_csr(p_request_id IN NUMBER) IS
970 SELECT UNIT_EFFECTIVITY_ID
971 FROM AHL_UNIT_EFFECTIVITIES_APP_V
972 WHERE CS_INCIDENT_ID = p_request_id
973 AND (STATUS_CODE IS NULL OR STATUS_CODE NOT IN (G_UMP_DEFERRED_STATUS, G_UMP_EXCEPTION_STATUS));
974
975 CURSOR get_tasks_for_ue_csr(p_ue_id IN NUMBER) IS
976 SELECT 'x' from AHL_VISIT_TASKS_B
977 where UNIT_EFFECTIVITY_ID = p_ue_id;
978
979 l_sr_status_id NUMBER := NULL;
980 l_closed_flag CS_INCIDENTS_V.CLOSED_FLAG%TYPE := NULL;
981 l_dummy VARCHAR2(1);
982
983 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Validate_Associated_Request';
984
985 BEGIN
986 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
987 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
988 END IF;
989
990 IF(p_x_request_id IS NULL AND p_request_number IS NULL) THEN
991 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_ID_NUM_NULL');
992 FND_MSG_PUB.ADD;
993 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
994 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
995 END IF;
996 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
997 ELSIF (p_object_version_number IS NULL) THEN
998 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_OVN_NULL');
999 FND_MSG_PUB.ADD;
1000 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1001 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1002 END IF;
1003 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1004 ELSE
1005 OPEN get_request_dtls_csr(p_request_id => p_x_request_id,
1006 p_request_number => p_request_number,
1007 p_object_version_number => p_object_version_number);
1008 FETCH get_request_dtls_csr INTO p_x_request_id,
1009 l_sr_status_id,
1010 l_closed_flag,
1011 x_sr_instance_id, -- OUT Parameter
1012 x_sr_exp_resol_date; -- OUT Parameter
1013 IF get_request_dtls_csr%NOTFOUND THEN
1014 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_OVN_INVALID');
1015 FND_MESSAGE.Set_Token('ID', p_x_request_id);
1016 FND_MESSAGE.Set_Token('OVN', p_object_version_number);
1017 FND_MSG_PUB.ADD;
1018 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1019 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1020 END IF;
1021 CLOSE get_request_dtls_csr;
1022 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1023 END IF;
1024 CLOSE get_request_dtls_csr;
1025 END IF;
1026
1027 IF(l_closed_flag = G_YES_FLAG) THEN
1028 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_CLOSED');
1029 FND_MSG_PUB.ADD;
1030 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1031 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1032 END IF;
1033 RAISE FND_API.G_EXC_ERROR;
1034 END IF;
1035 /*
1036 Balaji commented out this cursor validation for OGMA ER : Adding MRs to Non-Routines
1037 Since as per this ER requirements, we are going to allow SR UEs to be modified and plan
1038 new UEs in the hierarchy in a visit.
1039 Please refer the design document for more information.
1040
1041 -- JR: Modified on 10/29/2003 (Using Status Id instead of Status Code)
1042 IF (l_sr_status_id = G_SR_PLANNED_STATUS_ID) THEN
1043 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_PLANNED');
1044 FND_MSG_PUB.ADD;
1045 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1046 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1047 END IF;
1048 RAISE FND_API.G_EXC_ERROR;
1049 END IF;
1050 */
1051 OPEN get_ue_dtls_csr(p_request_id => p_x_request_id);
1052 FETCH get_ue_dtls_csr INTO x_sr_ue_id; -- OUT Parameter
1053 IF (get_ue_dtls_csr%NOTFOUND) THEN
1054 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_NO_UE_FOR_REQ');
1055 FND_MESSAGE.Set_Token('ID', p_x_request_id);
1056 FND_MSG_PUB.ADD;
1057 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1058 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1059 END IF;
1060 CLOSE get_ue_dtls_csr;
1061 RAISE FND_API.G_EXC_ERROR;
1062 END IF;
1063 CLOSE get_ue_dtls_csr;
1064
1065 /*
1066 Balaji commented out this cursor validation for OGMA ER : Adding MRs to Non-Routines
1067 Since as per this ER requirements, we are going to allow SR UEs to be modified and plan
1068 new UEs in the hierarchy in a visit.
1069 Please refer the design document for more information.
1070 OPEN get_tasks_for_ue_csr(p_ue_id => x_sr_ue_id);
1071 FETCH get_tasks_for_ue_csr INTO l_dummy;
1072 IF (get_tasks_for_ue_csr%FOUND) THEN
1073 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_ASGND_TO_VISIT');
1074 FND_MSG_PUB.ADD;
1075 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1076 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1077 END IF;
1078 CLOSE get_tasks_for_ue_csr;
1079 RAISE FND_API.G_EXC_ERROR;
1080 END IF;
1081 CLOSE get_tasks_for_ue_csr;
1082 */
1083 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1084 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
1085 END IF;
1086 END Validate_Associated_Request;
1087
1088 ----------------------------------------
1089 -- This Procedure validates SR-MR Association Records
1090 ----------------------------------------
1091 PROCEDURE Validate_Association_Records(
1092 p_request_id IN NUMBER,
1093 p_sr_ue_id IN NUMBER,
1094 p_sr_instance_id IN NUMBER,
1095 p_x_sr_mr_association_tbl IN OUT NOCOPY SR_MR_Association_Tbl_Type) IS
1096
1097 CURSOR validate_mr_ue_csr(p_mr_ue_id IN NUMBER,
1098 p_mr_ue_ovn IN NUMBER,
1099 p_sr_ue_id IN NUMBER) IS
1100 SELECT 'x'
1101 FROM AHL_UNIT_EFFECTIVITIES_APP_V UE
1102 WHERE UE.UNIT_EFFECTIVITY_ID = p_mr_ue_id AND
1103 UE.OBJECT_VERSION_NUMBER = p_mr_ue_ovn AND
1104 EXISTS (SELECT 'x' from AHL_UE_RELATIONSHIPS UR
1105 WHERE UR.UE_ID = p_sr_ue_id AND
1106 UR.RELATED_UE_ID = p_mr_ue_id AND
1107 UR.relationship_code = G_UE_PARENT_REL_CODE);
1108
1109 CURSOR validate_mr_id_csr(p_mr_header_id IN NUMBER) IS
1110 SELECT TITLE, PROGRAM_TYPE_CODE
1111 FROM AHL_MR_HEADERS_APP_V
1112 WHERE MR_HEADER_ID = p_mr_header_id;
1113
1114 CURSOR validate_instance_id_csr(p_csi_instance_id IN NUMBER) IS
1115 SELECT INSTANCE_NUMBER
1116 FROM CSI_ITEM_INSTANCES
1117 WHERE INSTANCE_ID = p_csi_instance_id;
1118
1119 --amsriniv. adding cursor to check if the instances on which the MRs are applicable are part of the SR Instance tree. ER 5883257
1120 CURSOR validate_sr_mr_intance_rel(c_mr_instance_id IN NUMBER,c_sr_instance_id IN NUMBER) IS
1121 select 'X'
1122 from csi_ii_relationships
1123 where subject_id = c_mr_instance_id
1124 start with object_id = c_sr_instance_id
1125 and RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1126 and trunc(nvl(ACTIVE_START_DATE, sysdate)) <= trunc(sysdate)
1127 and trunc(nvl(ACTIVE_END_DATE, sysdate + 1)) > trunc(sysdate)
1128 connect by prior subject_id = object_id
1129 and RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1130 and trunc(nvl(ACTIVE_START_DATE, sysdate)) <= trunc(sysdate)
1131 and trunc(nvl(ACTIVE_END_DATE, sysdate + 1)) > trunc(sysdate)
1132 UNION ALL
1133 select 'X'
1134 from csi_item_instances
1135 where instance_id = c_sr_instance_id
1136 and instance_id = c_mr_instance_id;
1137
1138 l_dummy VARCHAR2(1);
1139 l_mr_header_id NUMBER := NULL;
1140 l_mr_title AHL_MR_HEADERS_B.TITLE%TYPE := NULL;
1141 l_mr_version_number NUMBER := NULL;
1142 l_valid BOOLEAN;
1143 l_flag_sr_mr_inst VARCHAR2(1); --amsriniv ER 5883257
1144 l_temp_return_status VARCHAR2(1);
1145 l_temp_msg_count NUMBER;
1146 l_temp_msg_data VARCHAR2(2000);
1147 l_applicable_mr_tbl AHL_FMP_PVT.APPLICABLE_MR_TBL_TYPE;
1148 l_mr_applicable BOOLEAN;
1149
1150 l_program_type_code AHL_MR_HEADERS_B.PROGRAM_TYPE_CODE%TYPE;
1151
1152 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Validate_Association_Records';
1153
1154 BEGIN
1155 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1156 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
1157 END IF;
1158 FOR i in p_x_sr_mr_association_tbl.FIRST .. p_x_sr_mr_association_tbl.LAST LOOP
1159 l_valid := true;
1160 IF (p_x_sr_mr_association_tbl(i).OPERATION_FLAG NOT IN (G_OPR_CREATE, G_OPR_DELETE)) THEN
1161 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_OPR_INVALID');
1162 FND_MESSAGE.Set_Token('OPR_FLAG', p_x_sr_mr_association_tbl(i).OPERATION_FLAG);
1163 FND_MESSAGE.Set_Token('INDEX', i);
1164 FND_MSG_PUB.ADD;
1165 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1166 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1167 END IF;
1168 l_valid := false;
1169 ELSIF (p_x_sr_mr_association_tbl(i).OPERATION_FLAG = G_OPR_DELETE) THEN
1170 -- Delete Operation
1171 Get_MR_UnitEffectivity(p_sr_ue_id => p_sr_ue_id,
1172 p_x_sr_mr_association_rec => p_x_sr_mr_association_tbl(i));
1173 IF (p_x_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID IS NULL) THEN
1174 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_UE_ID_NULL');
1175 FND_MESSAGE.Set_Token('INDEX', i);
1176 FND_MSG_PUB.ADD;
1177 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1178 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1179 END IF;
1180 l_valid := false;
1181 ELSIF (p_x_sr_mr_association_tbl(i).OBJECT_VERSION_NUMBER IS NULL) THEN
1182 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_UE_OVN_NULL');
1183 FND_MESSAGE.Set_Token('INDEX', i);
1184 FND_MSG_PUB.ADD;
1185 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1186 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1187 END IF;
1188 l_valid := false;
1189 ELSE
1190 OPEN validate_mr_ue_csr(p_mr_ue_id => p_x_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID,
1191 p_mr_ue_ovn => p_x_sr_mr_association_tbl(i).OBJECT_VERSION_NUMBER,
1192 p_sr_ue_id => p_sr_ue_id);
1193 FETCH validate_mr_ue_csr INTO l_dummy;
1194 IF (validate_mr_ue_csr%NOTFOUND) THEN
1195 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_UE_OVN_INVALID');
1196 FND_MESSAGE.Set_Token('UE_ID', p_x_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID);
1197 FND_MESSAGE.Set_Token('OVN', p_x_sr_mr_association_tbl(i).OBJECT_VERSION_NUMBER);
1198 FND_MESSAGE.Set_Token('INDEX', i);
1199 FND_MSG_PUB.ADD;
1200 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1201 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1202 END IF;
1203 l_valid := false;
1204 END IF; -- UE Id, OVN Not valid
1205 CLOSE validate_mr_ue_csr;
1206 END IF; -- UE Id, OVN Not null
1207 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1208 IF (l_valid) THEN
1209 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record ' || i || ' for Delete operation is Valid');
1210 ELSE
1211 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record ' || i || ' for Delete operation is Not valid');
1212 END IF;
1213 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record Details: UE ID: ' || p_x_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID ||
1214 ', UE OVN: ' || p_x_sr_mr_association_tbl(i).OBJECT_VERSION_NUMBER);
1215 END IF; -- Log Statement
1216 ELSE
1217 -- Create Operation
1218 Get_New_Asso_Val_To_Id(p_x_sr_mr_association_rec => p_x_sr_mr_association_tbl(i));
1219 IF (p_x_sr_mr_association_tbl(i).MR_HEADER_ID IS NULL) THEN
1220 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_MR_DTLS_INVALID');
1221 FND_MESSAGE.Set_Token('TITLE', p_x_sr_mr_association_tbl(i).MR_TITLE);
1222 FND_MESSAGE.Set_Token('VERSION', p_x_sr_mr_association_tbl(i).MR_VERSION);
1223 FND_MESSAGE.Set_Token('INDEX', i);
1224 FND_MSG_PUB.ADD;
1225 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1226 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1227 END IF;
1228 l_valid := false;
1229 ELSIF (p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID IS NULL) THEN
1230 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_INST_NUM_INVALID');
1231 FND_MESSAGE.Set_Token('INST_NUM', p_x_sr_mr_association_tbl(i).CSI_INSTANCE_NUMBER);
1232 FND_MESSAGE.Set_Token('INDEX', i);
1233 FND_MSG_PUB.ADD;
1234 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1235 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1236 END IF;
1237 l_valid := false;
1238 ELSE
1239 -- Validate the MR Header Id
1240 OPEN validate_mr_id_csr(p_mr_header_id => p_x_sr_mr_association_tbl(i).MR_HEADER_ID);
1241 FETCH validate_mr_id_csr INTO p_x_sr_mr_association_tbl(i).MR_TITLE, l_program_type_code;
1242 IF (validate_mr_id_csr%NOTFOUND) THEN
1243 CLOSE validate_mr_id_csr;
1244 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_MR_ID_INVALID');
1245 FND_MESSAGE.Set_Token('MR_ID', p_x_sr_mr_association_tbl(i).MR_HEADER_ID);
1246 FND_MESSAGE.Set_Token('INDEX', i);
1247 FND_MSG_PUB.ADD;
1248 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1249 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1250 END IF;
1251 l_valid := false;
1252 ELSE
1253 CLOSE validate_mr_id_csr;
1254 -- Validate the Instance Id
1255 OPEN validate_instance_id_csr(p_csi_instance_id => p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID);
1256 FETCH validate_instance_id_csr INTO p_x_sr_mr_association_tbl(i).CSI_INSTANCE_NUMBER;
1257 IF (validate_instance_id_csr%NOTFOUND) THEN
1258 CLOSE validate_instance_id_csr;
1259 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_INST_ID_INVALID');
1260 FND_MESSAGE.Set_Token('INST_ID', p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID);
1261 FND_MESSAGE.Set_Token('INDEX', i);
1262 FND_MSG_PUB.ADD;
1263 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1264 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1265 END IF;
1266 l_valid := false;
1267 ELSE
1268 CLOSE validate_instance_id_csr;
1269 --amsriniv. adding cursor to check if the instances on which the MRs are applicable are part of the SR Instance tree. ER 5883257
1270 --Validate SR-MR instance associations
1271 OPEN validate_sr_mr_intance_rel(c_mr_instance_id => p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID,c_sr_instance_id => p_sr_instance_id);
1272 FETCH validate_sr_mr_intance_rel INTO l_flag_sr_mr_inst;
1273 IF (validate_sr_mr_intance_rel%NOTFOUND) THEN
1274 CLOSE validate_sr_mr_intance_rel;
1275 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_MR_DTLS_INVALID');
1276 FND_MESSAGE.Set_Token('TITLE', p_x_sr_mr_association_tbl(i).MR_TITLE);
1277 FND_MESSAGE.Set_Token('VERSION', p_x_sr_mr_association_tbl(i).MR_VERSION);
1278 FND_MESSAGE.Set_Token('INDEX', i);
1279 FND_MSG_PUB.ADD;
1280 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1281 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1282 END IF;
1283 l_valid := false;
1284 ELSE
1285 CLOSE validate_sr_mr_intance_rel;
1286 --amsriniv
1287 IF (l_program_type_code <> 'MO_PROC') THEN
1288 -- Check MR - Instance Applicability by calling FMP API
1289 AHL_FMP_PVT.GET_APPLICABLE_MRS(p_api_version => 1.0,
1290 x_return_status => l_temp_return_status,
1291 x_msg_count => l_temp_msg_count,
1292 x_msg_data => l_temp_msg_data,
1293 p_item_instance_id => p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID,
1294 p_mr_header_id => p_x_sr_mr_association_tbl(i).MR_HEADER_ID,
1295 x_applicable_mr_tbl => l_applicable_mr_tbl);
1296 IF (l_temp_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1297 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_MR_DTLS_FAILED');
1298 FND_MESSAGE.Set_Token('INDEX', i);
1299 FND_MSG_PUB.ADD;
1300 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1301 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1302 END IF;
1303 l_valid := false;
1304 ELSE
1305 l_mr_applicable := false;
1306 IF (l_applicable_mr_tbl.COUNT > 0) THEN
1307 FOR j IN l_applicable_mr_tbl.FIRST .. l_applicable_mr_tbl.LAST LOOP
1308 IF ((l_applicable_mr_tbl(j).MR_HEADER_ID = p_x_sr_mr_association_tbl(i).MR_HEADER_ID) AND
1309 (l_applicable_mr_tbl(j).ITEM_INSTANCE_ID = p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID))THEN
1310 l_mr_applicable := true;
1311 EXIT;
1312 END IF; -- Applicable
1313 END LOOP; -- All Applicable MRs
1314 END IF; -- Table Count > 0
1315 IF (l_mr_applicable = false) THEN
1316 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_MR_NOT_APPLCBL');
1317 FND_MESSAGE.Set_Token('MR_TITLE', Get_MR_Title_From_MR_Id(p_x_sr_mr_association_tbl(i).MR_HEADER_ID));
1318 FND_MSG_PUB.ADD;
1319 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1320 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1321 END IF;
1322 l_valid := false;
1323 END IF; -- MR applicable
1324 END IF; -- GET_APPLICABLE_MRS successful
1325 END IF; --amsriniv
1326 end if; -- program_type_code
1327 END IF; -- Instance Id Valid
1328 END IF; -- MR Header Id Valid
1329 END IF; -- MR Id and Instance Id Not null
1330 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1331 IF (l_valid) THEN
1332 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record ' || i || ' for Create operation is Valid');
1333 ELSE
1334 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record ' || i || ' for Create operation is Not valid');
1335 END IF;
1336 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record Details: MR Header ID: ' || p_x_sr_mr_association_tbl(i).MR_HEADER_ID ||
1337 ', CSI Instance ID: ' || p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID);
1338 END IF; -- Log Statement
1339 END IF; -- Valid Operation flag
1340 END LOOP; -- All Association/Disassociation Records
1341
1342 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1343 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
1344 END IF;
1345 END Validate_Association_Records;
1346
1347 ----------------------------------------
1348 -- This Procedure deletes SR-MR associations
1349 ----------------------------------------
1350 PROCEDURE Process_Disassociations(
1351 p_sr_ue_id IN NUMBER,
1352 p_sr_mr_association_tbl IN SR_MR_Association_Tbl_Type) IS
1353
1354 CURSOR get_relationship_id_csr(p_sr_ue_id IN NUMBER,
1355 p_mr_ue_id IN NUMBER) IS
1356 SELECT UE_RELATIONSHIP_ID
1357 FROM AHL_UE_RELATIONSHIPS
1358 WHERE UE_ID = p_sr_ue_id AND
1359 RELATED_UE_ID = p_mr_ue_id AND
1360 RELATIONSHIP_CODE = G_UE_PARENT_REL_CODE;
1361
1362 CURSOR get_rel_dtls_csr(p_mr_ue_id IN NUMBER) IS
1363 SELECT UE_RELATIONSHIP_ID, RELATED_UE_ID, level
1364 FROM AHL_UE_RELATIONSHIPS
1365 START WITH UE_ID = p_mr_ue_id
1366 CONNECT BY PRIOR RELATED_UE_ID = UE_ID
1367 ORDER BY LEVEL DESC; /* Bottom Up */
1368
1369 l_relationship_id NUMBER;
1370 l_temp_rel_id NUMBER;
1371 l_temp_ue_id NUMBER;
1372 l_temp_level NUMBER;
1373
1374 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Process_Disassociations';
1375
1376 BEGIN
1377 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1378 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
1379 END IF;
1380
1381 FOR i in p_sr_mr_association_tbl.FIRST .. p_sr_mr_association_tbl.LAST LOOP
1382 IF (p_sr_mr_association_tbl(i).OPERATION_FLAG = G_OPR_DELETE) THEN
1383 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1384 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'About to Disassociate Record with index ' || i);
1385 END IF;
1386 OPEN get_relationship_id_csr(p_sr_ue_id => p_sr_ue_id,
1387 p_mr_ue_id => p_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID);
1388 FETCH get_relationship_id_csr INTO l_relationship_id;
1389 CLOSE get_relationship_id_csr;
1390
1391 -- Delete the Dependents (If Group MR)
1392 FOR l_rel_dtls_rec IN get_rel_dtls_csr(p_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID) LOOP
1393 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1394 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'About to Delete Relationship with RELATIONSHIP_ID = ' || l_rel_dtls_rec.UE_RELATIONSHIP_ID || ' for a Group MR');
1395 END IF;
1396 AHL_UE_RELATIONSHIPS_PKG.DELETE_ROW(X_UE_RELATIONSHIP_ID => l_rel_dtls_rec.UE_RELATIONSHIP_ID);
1397
1398 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1399 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'About to Delete Unit Effectivity with UNIT_EFFECTIVITY_ID = ' || l_rel_dtls_rec.RELATED_UE_ID || ' for a Group MR');
1400 END IF;
1401 AHL_UNIT_EFFECTIVITIES_PKG.DELETE_ROW(X_UNIT_EFFECTIVITY_ID => l_rel_dtls_rec.RELATED_UE_ID);
1402 END LOOP;
1403 -- Delete the MR Relationship and UE
1404 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1405 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'About to Delete Relationship with RELATIONSHIP_ID = ' || l_relationship_id);
1406 END IF;
1407 AHL_UE_RELATIONSHIPS_PKG.DELETE_ROW(X_UE_RELATIONSHIP_ID => l_relationship_id);
1408
1409 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1410 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'About to Delete Unit Effectivity with UNIT_EFFECTIVITY_ID = ' || p_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID);
1411 END IF;
1412 AHL_UNIT_EFFECTIVITIES_PKG.DELETE_ROW(X_UNIT_EFFECTIVITY_ID => p_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID);
1413
1414 END IF; -- Disassociation Record
1415 END LOOP; -- All Association/Disassociation Records
1416
1417 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1418 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
1419 END IF;
1420 END Process_Disassociations;
1421
1422 ----------------------------------------
1423 -- This Procedure Creates New SR-MR associations
1424 ----------------------------------------
1425 PROCEDURE Process_New_Associations(
1426 p_sr_ue_id IN NUMBER,
1427 p_sr_instance_id IN NUMBER,
1428 p_sr_exp_resol_date IN DATE,
1429 p_user_id IN NUMBER,
1430 p_login_id IN NUMBER,
1431 p_x_sr_mr_association_tbl IN OUT NOCOPY SR_MR_Association_Tbl_Type) IS
1432
1433 CURSOR get_dup_mrs_csr(p_mr_id IN NUMBER,
1434 p_instance_id IN NUMBER,
1435 p_sr_ue_id IN NUMBER) IS
1436 SELECT 'x' from AHL_UNIT_EFFECTIVITIES_B ue
1437 WHERE ue.mr_header_id = p_mr_id AND
1438 ue.csi_item_instance_id = p_instance_id AND
1439 EXISTS (SELECT 'x' FROM ahl_ue_relationships ur
1440 WHERE ur.related_ue_id = ue.unit_effectivity_id
1441 START WITH ur.ue_id = p_sr_ue_id
1442 CONNECT BY PRIOR ur.related_ue_id = ur.ue_id);
1443
1444 --pdoki added for ER 9583373
1445 Cursor Chk_UE_Init_Due (p_mr_header_id NUMBER, p_instance_id NUMBER)
1446 IS
1447 SELECT 'x'
1448 FROM AHL_UNIT_EFFECTIVITIES_B UE,
1449 AHL_MR_HEADERS_B MRH
1450 WHERE UE.mr_header_id = p_mr_header_id
1451 AND MRH.mr_header_id = UE.mr_header_id
1452 AND MRH.IMPLEMENT_STATUS_CODE IN ('MANDATORY','OPTIONAL_IMPLEMENT')
1453 AND UE.csi_item_instance_id = p_instance_id
1454 AND UE.status_code = 'INIT-DUE';
1455
1456 l_mr_title VARCHAR2(80);
1457
1458 -- Cursor added for ER # 6123671.
1459 -- Start changes for ER -- 6123671
1460 CURSOR c_get_origin_wo_id(p_sr_ue_id IN NUMBER)
1461 IS
1462 SELECT
1463 ORIGINATING_WO_ID
1464 FROM
1465 AHL_UNIT_EFFECTIVITIES_B
1466 WHERE
1467 UNIT_EFFECTIVITY_ID = p_sr_ue_id
1468 AND OBJECT_TYPE = 'SR';
1469
1470 l_origin_wo_id NUMBER;
1471 -- End changes for ER -- 6123671
1472
1473 CURSOR get_num_descendents_csr(p_mr_id IN NUMBER) IS
1474 SELECT COUNT(*) from AHL_MR_RELATIONSHIPS
1475 WHERE MR_HEADER_ID = p_mr_id;
1476
1477 -- bachandr Bug # 13916897 - start
1478 CURSOR c_get_sr_fleet(p_sr_ue_id IN NUMBER) IS
1479 SELECT fleet_header_id FROM AHL_UNIT_EFFECTIVITIES_B
1480 WHERE unit_effectivity_id = p_sr_ue_id;
1481
1482 l_fleet_header_id NUMBER;
1483 -- bachandr Bug # 13916897 - end
1484
1485 l_temp_level NUMBER;
1486 l_dummy VARCHAR2(1);
1487 l_valid_flag BOOLEAN := true;
1488 l_mr_ue_id NUMBER;
1489 l_mr_rel_id NUMBER;
1490 l_temp_count NUMBER;
1491
1492 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Process_New_Associations';
1493
1494 BEGIN
1495 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1496 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
1497 END IF;
1498
1499 FOR i in p_x_sr_mr_association_tbl.FIRST .. p_x_sr_mr_association_tbl.LAST LOOP
1500 IF (p_x_sr_mr_association_tbl(i).OPERATION_FLAG = G_OPR_CREATE) THEN
1501 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1502 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record ' || i || ' is a Create Record. Checking for Duplicates first.');
1503 END IF;
1504 -- Check for duplicates
1505 OPEN get_dup_mrs_csr(p_mr_id => p_x_sr_mr_association_tbl(i).MR_HEADER_ID,
1506 p_instance_id => p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID,
1507 p_sr_ue_id => p_sr_ue_id);
1508 FETCH get_dup_mrs_csr INTO l_dummy;
1509 IF (get_dup_mrs_csr%FOUND) THEN
1510 l_valid_flag := false;
1511 CLOSE get_dup_mrs_csr;
1512 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1513 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record ' || i || ' with MR Id ' ||
1514 p_x_sr_mr_association_tbl(i).MR_HEADER_ID || ' and Instance Id ' ||
1515 p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID || ' is a Duplicate.');
1516 END IF;
1517 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_DUPLICATE_MR');
1518 FND_MESSAGE.Set_Token('MR_TITLE', Get_MR_Title_From_MR_Id(p_x_sr_mr_association_tbl(i).MR_HEADER_ID));
1519 FND_MSG_PUB.ADD;
1520 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1521 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
1522 END IF;
1523 ELSE
1524 CLOSE get_dup_mrs_csr;
1525 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1526 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record ' || i || ' is not a Duplicate. About to create MR UE and UE Relationship.');
1527 END IF;
1528
1529 --pdoki added for ER 9583373
1530 OPEN Chk_UE_Init_Due (p_x_sr_mr_association_tbl(i).MR_HEADER_ID, p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID);
1531 FETCH Chk_UE_Init_Due INTO l_dummy;
1532 IF (Chk_UE_Init_Due%FOUND) THEN
1533 FND_MESSAGE.SET_NAME('AHL', 'AHL_UMP_CANNOT_ADD_MRS');
1534 FND_MESSAGE.SET_TOKEN('MR_TITLE',p_x_sr_mr_association_tbl(i).MR_TITLE);
1535 FND_MSG_PUB.ADD;
1536 END IF;
1537 CLOSE Chk_UE_Init_Due;
1538
1539 -- bachandr Bug # 13916897 - start
1540 OPEN c_get_sr_fleet(p_sr_ue_id);
1541 FETCH c_get_sr_fleet INTO l_fleet_header_id;
1542 CLOSE c_get_sr_fleet;
1543 -- bachandr Bug # 13916897 - end
1544
1545 Create_MR_Unit_Effectivity(p_instance_id => p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID,
1546 p_due_date => p_sr_exp_resol_date,
1547 p_mr_header_id => p_x_sr_mr_association_tbl(i).MR_HEADER_ID,
1548 p_user_id => p_user_id,
1549 p_login_id => p_login_id,
1550 p_fleet_header_id => l_fleet_header_id, -- Bug # 13916897
1551 x_ue_id => l_mr_ue_id);
1552
1553 Create_UE_Relationship(p_ue_id => p_sr_ue_id,
1554 p_related_ue_id => l_mr_ue_id,
1555 p_relationship_code => G_UE_PARENT_REL_CODE,
1556 p_originator_id => p_sr_ue_id,
1557 p_user_id => p_user_id,
1558 p_login_id => p_login_id,
1559 x_ue_rel_id => l_mr_rel_id);
1560
1561 p_x_sr_mr_association_tbl(i).UNIT_EFFECTIVITY_ID := l_mr_ue_id;
1562 p_x_sr_mr_association_tbl(i).OBJECT_VERSION_NUMBER := 1;
1563 p_x_sr_mr_association_tbl(i).UE_RELATIONSHIP_ID := l_mr_rel_id;
1564
1565 OPEN get_num_descendents_csr(p_x_sr_mr_association_tbl(i).MR_HEADER_ID);
1566 FETCH get_num_descendents_csr INTO l_temp_count;
1567 CLOSE get_num_descendents_csr;
1568
1569 IF(l_valid_flag = true AND l_temp_count > 0) THEN
1570 -- Process Group MR
1571 Process_Group_MR(p_mr_header_id => p_x_sr_mr_association_tbl(i).MR_HEADER_ID,
1572 p_csi_instance_id => p_x_sr_mr_association_tbl(i).CSI_INSTANCE_ID,
1573 p_mr_ue_id => l_mr_ue_id,
1574 p_sr_ue_id => p_sr_ue_id,
1575 p_due_date => p_sr_exp_resol_date,
1576 p_user_id => p_user_id,
1577 p_login_id => p_login_id,
1578 p_fleet_header_id => l_fleet_header_id, -- Bug # 13916897
1579 p_x_valid_flag => l_valid_flag);
1580
1581 END IF;
1582 END IF; -- Duplicate MR Check
1583 ELSE
1584 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1585 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Record ' || i || ' is not a Create Record. Skipping.');
1586 END IF;
1587 END IF; -- New Association Record
1588 END LOOP; -- All Association/Disassociation Records
1589
1590 -- Balaji added the code for ER # 6123671
1591 -- UEs corresponding to new MRs added to the SR need to inherit the
1592 -- Originating Work Order Id of the SR UE. This code need to be here because
1593 -- MRs can be added independent of Production Non Routine API.
1594 -- Start Changes ER # 6123671
1595 OPEN c_get_origin_wo_id(p_sr_ue_id);
1596 FETCH c_get_origin_wo_id INTO l_origin_wo_id;
1597 CLOSE c_get_origin_wo_id;
1598
1599 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1600 FND_LOG.STRING(
1601 FND_LOG.LEVEL_STATEMENT,
1602 L_DEBUG_KEY,
1603 'Before updating Originating Work Order Id');
1604 FND_LOG.STRING(
1605 FND_LOG.LEVEL_STATEMENT,
1606 L_DEBUG_KEY,
1607 'p_sr_ue_id->'||p_sr_ue_id||' , '||'SR origin_wo_id->'||l_origin_wo_id);
1608 END IF;
1609
1610 IF p_sr_ue_id IS NOT NULL AND l_origin_wo_id IS NOT NULL
1611 THEN
1612 BEGIN
1613 UPDATE
1614 AHL_UNIT_EFFECTIVITIES_B
1615 SET
1616 ORIGINATING_WO_ID = l_origin_wo_id
1617 WHERE
1618 UNIT_EFFECTIVITY_ID IN (
1619 SELECT
1620 RELATED_UE_ID
1621 FROM
1622 AHL_UE_RELATIONSHIPS
1623 WHERE
1624 ORIGINATOR_UE_ID = p_sr_ue_id
1625 )
1626 AND ORIGINATING_WO_ID IS NULL;
1627
1628 EXCEPTION
1629
1630 WHEN OTHERS THEN
1631 FND_MESSAGE.SET_NAME ('AHL','AHL_PRD_ORIGINWO_UPD_FAILED');
1632 Fnd_Msg_Pub.ADD;
1633 END;
1634 END IF;
1635 -- End Changes ER # 6123671
1636
1637 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1638 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
1639 END IF;
1640 END Process_New_Associations;
1641
1642 ----------------------------------------
1643 -- This Procedure Gets the Unit Effectivity Id
1644 ----------------------------------------
1645 PROCEDURE Get_MR_UnitEffectivity(
1646 p_sr_ue_id IN NUMBER,
1647 p_x_sr_mr_association_rec IN OUT NOCOPY SR_MR_Association_Rec_Type) IS
1648
1649 CURSOR get_ue_id_csr(p_mr_title IN VARCHAR2,
1650 p_mr_version IN NUMBER,
1651 p_mr_header_id IN NUMBER,
1652 p_csi_instance_number IN VARCHAR2,
1653 p_csi_instance_id IN NUMBER,
1654 p_sr_ue_id IN NUMBER) IS
1655 /* AMSRINIV : Bug 5208411 : Below Query Tuned */
1656
1657 /* SELECT UE.UNIT_EFFECTIVITY_ID
1658 FROM AHL_UNIT_EFFECTIVITIES_APP_V UE
1659 WHERE UE.MR_HEADER_ID = (SELECT MR_HEADER_ID FROM AHL_MR_HEADERS_APP_V
1660 WHERE MR_HEADER_ID like DECODE(p_mr_header_id, null, '%', p_mr_header_id) AND
1661 TITLE like DECODE(p_mr_header_id, null, p_mr_title, '%') AND
1662 VERSION_NUMBER like DECODE(p_mr_header_id, null, p_mr_version, '%')) AND
1663 VERSION_NUMBER like DECODE(p_mr_header_id, null, '' || p_mr_version || '', '%')) AND
1664 UE.CSI_ITEM_INSTANCE_ID = (SELECT INSTANCE_ID FROM CSI_ITEM_INSTANCES
1665 WHERE INSTANCE_ID like DECODE(p_csi_instance_id, null, '%', p_csi_instance_id) AND
1666 INSTANCE_NUMBER like DECODE(p_csi_instance_id, null, p_csi_instance_number, '%')) AND
1667 EXISTS (SELECT 'x' FROM AHL_UE_RELATIONSHIPS
1668 WHERE UE_ID = p_sr_ue_id AND
1669 RELATED_UE_ID = UE.UNIT_EFFECTIVITY_ID AND
1670 RELATIONSHIP_CODE = G_UE_PARENT_REL_CODE);*/
1671
1672 /* AMSRINIV : Bug 5208411 : Tuned query */
1673 SELECT UE.UNIT_EFFECTIVITY_ID
1674 FROM AHL_UNIT_EFFECTIVITIES_APP_V UE
1675 WHERE UE.MR_HEADER_ID =
1676 (SELECT MR_HEADER_ID
1677 FROM AHL_MR_HEADERS_APP_V
1678 WHERE MR_HEADER_ID = NVL(p_mr_header_id,MR_HEADER_ID)
1679 AND TITLE like DECODE(p_mr_header_id, null, p_mr_title, '%')
1680 AND VERSION_NUMBER like DECODE(p_mr_header_id, null, '' || p_mr_version || '', '%')
1681 )
1682 AND UE.CSI_ITEM_INSTANCE_ID =
1683 (SELECT INSTANCE_ID
1684 FROM CSI_ITEM_INSTANCES
1685 WHERE INSTANCE_ID = NVL(p_csi_instance_id,INSTANCE_ID)
1686 AND INSTANCE_NUMBER like DECODE(p_csi_instance_id, null, p_csi_instance_number, '%')
1687 )
1688 AND EXISTS
1689 (SELECT 'x'
1690 FROM AHL_UE_RELATIONSHIPS
1691 WHERE UE_ID = p_sr_ue_id
1692 AND RELATED_UE_ID = UE.UNIT_EFFECTIVITY_ID
1693 AND RELATIONSHIP_CODE = G_UE_PARENT_REL_CODE
1694 );
1695
1696 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Get_MR_UnitEffectivity';
1697 l_get_ue_flag BOOLEAN := true;
1698
1699 BEGIN
1700 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1701 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
1702 END IF;
1703
1704 IF(p_x_sr_mr_association_rec.UNIT_EFFECTIVITY_ID IS NOT NULL) THEN
1705 l_get_ue_flag := false; -- No need to get the UE Id: It is already available
1706 END IF;
1707
1708 IF((p_x_sr_mr_association_rec.MR_HEADER_ID IS NULL AND p_x_sr_mr_association_rec.MR_TITLE IS NULL) OR
1709 (p_x_sr_mr_association_rec.MR_HEADER_ID IS NULL AND p_x_sr_mr_association_rec.MR_VERSION IS NULL) OR
1710 (p_x_sr_mr_association_rec.CSI_INSTANCE_ID IS NULL AND p_x_sr_mr_association_rec.CSI_INSTANCE_NUMBER IS NULL)) THEN
1711 l_get_ue_flag := false; -- No need to get the UE Id: There is insufficient info to derive it
1712 END IF;
1713
1714 IF(l_get_ue_flag = true) THEN
1715 OPEN get_ue_id_csr(p_mr_title => p_x_sr_mr_association_rec.MR_TITLE,
1716 p_mr_version => p_x_sr_mr_association_rec.MR_VERSION,
1717 p_mr_header_id => p_x_sr_mr_association_rec.MR_HEADER_ID,
1718 p_csi_instance_number => p_x_sr_mr_association_rec.CSI_INSTANCE_NUMBER,
1719 p_csi_instance_id => p_x_sr_mr_association_rec.CSI_INSTANCE_ID,
1720 p_sr_ue_id => p_sr_ue_id);
1721 FETCH get_ue_id_csr INTO p_x_sr_mr_association_rec.UNIT_EFFECTIVITY_ID;
1722 CLOSE get_ue_id_csr;
1723 END IF;
1724
1725 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1726 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
1727 END IF;
1728 END Get_MR_UnitEffectivity;
1729
1730 ----------------------------------------
1731 -- This Procedure does Value to Id Conversion for New Associations
1732 -- It derives the MR Header Id and the CSI Instance Id
1733 ----------------------------------------
1734 PROCEDURE Get_New_Asso_Val_To_Id(
1735 p_x_sr_mr_association_rec IN OUT NOCOPY SR_MR_Association_Rec_Type) IS
1736
1737 CURSOR get_mr_id_csr(p_mr_title IN VARCHAR2,
1738 p_mr_version IN NUMBER) IS
1739 SELECT MR_HEADER_ID
1740 FROM AHL_MR_HEADERS_APP_V
1741 WHERE UPPER(TITLE) = UPPER(p_mr_title) AND
1742 VERSION_NUMBER = p_mr_version;
1743
1744 CURSOR get_csi_instance_id_csr(p_csi_instance_number IN VARCHAR2) IS
1745 SELECT INSTANCE_ID
1746 FROM CSI_ITEM_INSTANCES
1747 WHERE INSTANCE_NUMBER = p_csi_instance_number;
1748
1749 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Get_New_Asso_Val_To_Id';
1750 l_get_mr_flag BOOLEAN := true;
1751 l_get_inst_flag BOOLEAN := true;
1752
1753 BEGIN
1754 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1755 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
1756 END IF;
1757
1758 IF (p_x_sr_mr_association_rec.MR_HEADER_ID IS NOT NULL) THEN
1759 l_get_mr_flag := false; -- No need to get the MR Id: It is already available
1760 END IF;
1761
1762 IF ((p_x_sr_mr_association_rec.MR_HEADER_ID IS NULL AND p_x_sr_mr_association_rec.MR_TITLE IS NULL) OR
1763 (p_x_sr_mr_association_rec.MR_HEADER_ID IS NULL AND p_x_sr_mr_association_rec.MR_VERSION IS NULL)) THEN
1764 l_get_mr_flag := false; -- No need to get the MR Id: There is insufficient info to derive it
1765 END IF;
1766
1767 IF (l_get_mr_flag = true) THEN
1768 OPEN get_mr_id_csr(p_mr_title => p_x_sr_mr_association_rec.MR_TITLE,
1769 p_mr_version => p_x_sr_mr_association_rec.MR_VERSION);
1770 FETCH get_mr_id_csr INTO p_x_sr_mr_association_rec.MR_HEADER_ID;
1771 CLOSE get_mr_id_csr;
1772 END IF;
1773
1774 IF (p_x_sr_mr_association_rec.CSI_INSTANCE_ID IS NOT NULL) THEN
1775 l_get_inst_flag := false; -- No need to get the Instance Id: It is already available
1776 END IF;
1777
1778 IF (p_x_sr_mr_association_rec.CSI_INSTANCE_ID IS NULL AND p_x_sr_mr_association_rec.CSI_INSTANCE_NUMBER IS NULL) THEN
1779 l_get_inst_flag := false; -- No need to get the Instance Id: There is insufficient info to derive it
1780 END IF;
1781
1782 IF (l_get_inst_flag = true) THEN
1783 OPEN get_csi_instance_id_csr(p_csi_instance_number => p_x_sr_mr_association_rec.CSI_INSTANCE_NUMBER);
1784 FETCH get_csi_instance_id_csr INTO p_x_sr_mr_association_rec.CSI_INSTANCE_ID;
1785 CLOSE get_csi_instance_id_csr;
1786 END IF;
1787
1788 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1789 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
1790 END IF;
1791 END Get_New_Asso_Val_To_Id;
1792
1793 ----------------------------------------
1794 -- This Procedure creates a new unit effectivity
1795 -- It returns the id of the newly created UE
1796 ----------------------------------------
1797 PROCEDURE Create_MR_Unit_Effectivity(
1798 p_instance_id IN NUMBER,
1799 p_due_date IN DATE,
1800 p_mr_header_id IN NUMBER,
1801 p_user_id IN NUMBER,
1802 p_login_id IN NUMBER,
1803 p_fleet_header_id IN NUMBER,
1804 x_ue_id OUT NOCOPY NUMBER) IS
1805
1806 l_temp_row_id VARCHAR2(30);
1807 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Create_MR_Unit_Effectivity';
1808
1809 BEGIN
1810 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1811 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
1812 END IF;
1813
1814
1815 AHL_UNIT_EFFECTIVITIES_PKG.Insert_Row (
1816 X_ROWID => l_temp_row_id,
1817 X_UNIT_EFFECTIVITY_ID => x_ue_id,
1818 X_MANUALLY_PLANNED_FLAG => 'Y',
1819 X_LOG_SERIES_CODE => null,
1820 X_LOG_SERIES_NUMBER => null,
1821 X_FLIGHT_NUMBER => null,
1822 X_MEL_CDL_TYPE_CODE => null,
1823 X_POSITION_PATH_ID => null,
1824 X_ATA_CODE => null,
1825 --X_CLEAR_STATION_ORG_ID => null,
1826 --X_CLEAR_STATION_DEPT_ID => null,
1827 X_UNIT_CONFIG_HEADER_ID => null,
1828 X_QA_COLLECTION_ID => null,
1829 X_CS_INCIDENT_ID => null,
1830 X_OBJECT_TYPE => G_UE_MR_OBJECT_TYPE,
1831 X_APPLICATION_USG_CODE => G_APP_MODULE,
1832 X_COUNTER_ID => null,
1833 X_EARLIEST_DUE_DATE => null,
1834 X_LATEST_DUE_DATE => null,
1835 X_FORECAST_SEQUENCE => null,
1836 X_REPETITIVE_MR_FLAG => null,
1837 X_TOLERANCE_FLAG => null,
1838 X_MESSAGE_CODE => null,
1839 X_DATE_RUN => null,
1840 X_PRECEDING_UE_ID => null,
1841 X_SET_DUE_DATE => null,
1842 X_ACCOMPLISHED_DATE => null,
1843 X_SERVICE_LINE_ID => null,
1844 X_PROGRAM_MR_HEADER_ID => null,
1845 X_CANCEL_REASON_CODE => null,
1846 X_ATTRIBUTE_CATEGORY => null,
1847 X_ATTRIBUTE1 => null,
1848 X_ATTRIBUTE2 => null,
1849 X_ATTRIBUTE3 => null,
1850 X_ATTRIBUTE4 => null,
1851 X_ATTRIBUTE5 => null,
1852 X_ATTRIBUTE6 => null,
1853 X_ATTRIBUTE7 => null,
1854 X_ATTRIBUTE8 => null,
1855 X_ATTRIBUTE9 => null,
1856 X_ATTRIBUTE10 => null,
1857 X_ATTRIBUTE11 => null,
1858 X_ATTRIBUTE12 => null,
1859 X_ATTRIBUTE13 => null,
1860 X_ATTRIBUTE14 => null,
1861 X_ATTRIBUTE15 => null,
1862 X_OBJECT_VERSION_NUMBER => 1,
1863 X_CSI_ITEM_INSTANCE_ID => p_instance_id,
1864 X_MR_HEADER_ID => p_mr_header_id,
1865 X_MR_EFFECTIVITY_ID => null,
1866 X_MR_INTERVAL_ID => null,
1867 X_STATUS_CODE => null,
1868 X_DUE_DATE => p_due_date,
1869 X_DUE_COUNTER_VALUE => null,
1870 X_DEFER_FROM_UE_ID => null,
1871 X_ORIG_DEFERRAL_UE_ID => null,
1872 X_REMARKS => null,
1873 X_CREATION_DATE => sysdate,
1874 X_CREATED_BY => fnd_global.user_id,
1875 X_LAST_UPDATE_DATE => sysdate,
1876 X_LAST_UPDATED_BY => fnd_global.user_id,
1877 X_LAST_UPDATE_LOGIN => fnd_global.login_id,
1878 -- BACHANDR - NR project start
1879 X_FLEET_HEADER_ID => p_fleet_header_id
1880 -- BACHANDR - NR project end
1881 );
1882
1883 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1884 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Created New UE with Id ' || x_ue_id);
1885 END IF;
1886
1887 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1888 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
1889 END IF;
1890 END Create_MR_Unit_Effectivity;
1891
1892 ----------------------------------------
1893 -- This Procedure creates a new UE Relationship
1894 -- It returns the id of the newly created Relationship
1895 ----------------------------------------
1896 PROCEDURE Create_UE_Relationship(
1897 p_ue_id IN NUMBER,
1898 p_related_ue_id IN NUMBER,
1899 p_relationship_code IN VARCHAR2,
1900 p_originator_id IN NUMBER,
1901 p_user_id IN NUMBER,
1902 p_login_id IN NUMBER,
1903 x_ue_rel_id OUT NOCOPY NUMBER) IS
1904
1905 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Create_UE_Relationship';
1906
1907 BEGIN
1908 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1909 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
1910 END IF;
1911
1912 AHL_UE_RELATIONSHIPS_PKG.INSERT_ROW(
1913 X_UE_RELATIONSHIP_ID => x_ue_rel_id,
1914 X_UE_ID => p_ue_id,
1915 X_RELATED_UE_ID => p_related_ue_id,
1916 X_RELATIONSHIP_CODE => p_relationship_code,
1917 X_ORIGINATOR_UE_ID => p_originator_id,
1918 X_ATTRIBUTE_CATEGORY => null,
1919 X_ATTRIBUTE1 => null,
1920 X_ATTRIBUTE2 => null,
1921 X_ATTRIBUTE3 => null,
1922 X_ATTRIBUTE4 => null,
1923 X_ATTRIBUTE5 => null,
1924 X_ATTRIBUTE6 => null,
1925 X_ATTRIBUTE7 => null,
1926 X_ATTRIBUTE8 => null,
1927 X_ATTRIBUTE9 => null,
1928 X_ATTRIBUTE10 => null,
1929 X_ATTRIBUTE11 => null,
1930 X_ATTRIBUTE12 => null,
1931 X_ATTRIBUTE13 => null,
1932 X_ATTRIBUTE14 => null,
1933 X_ATTRIBUTE15 => null,
1934 X_OBJECT_VERSION_NUMBER => 1,
1935 X_LAST_UPDATE_DATE => SYSDATE,
1936 X_LAST_UPDATED_BY => p_user_id,
1937 X_CREATION_DATE => SYSDATE,
1938 X_CREATED_BY => p_user_id,
1939 X_LAST_UPDATE_LOGIN => p_login_id);
1940
1941 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1942 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Created New UE Relationship with Id ' || x_ue_rel_id);
1943 END IF;
1944
1945 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1946 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
1947 END IF;
1948 END Create_UE_Relationship;
1949
1950 ----------------------------------------
1951 -- This Procedure processes group MRs
1952 -- It creates a hierarchy of unit effectivities and UE relationships
1953 -- If any descendent MR is already present for the SR, the p_x_valid_flag
1954 -- is set to false and the error message is added to the stack.
1955 ----------------------------------------
1956 PROCEDURE Process_Group_MR(
1957 p_mr_header_id IN NUMBER,
1958 p_csi_instance_id IN NUMBER,
1959 p_mr_ue_id IN NUMBER,
1960 p_sr_ue_id IN NUMBER,
1961 p_due_date IN DATE,
1962 p_user_id IN NUMBER,
1963 p_login_id IN NUMBER,
1964 p_fleet_header_id IN NUMBER,
1965 p_x_valid_flag IN OUT NOCOPY BOOLEAN) IS
1966
1967 CURSOR get_duplicate_mrs_csr(p_sr_ue_id IN NUMBER) IS
1968 SELECT UE.MR_HEADER_ID, UE.CSI_ITEM_INSTANCE_ID
1969 FROM AHL_UNIT_EFFECTIVITIES_B UE, AHL_UE_RELATIONSHIPS UR
1970 WHERE UR.ORIGINATOR_UE_ID = p_sr_ue_id AND
1971 UR.RELATIONSHIP_CODE = G_UE_PARENT_REL_CODE AND
1972 UE.UNIT_EFFECTIVITY_ID = UR.RELATED_UE_ID
1973 INTERSECT
1974 SELECT RELATED_MR_HEADER_ID, RELATED_CSI_ITEM_INSTANCE_ID
1975 FROM AHL_APPLICABLE_MR_RELNS;
1976
1977 CURSOR mr_relns_upd_csr IS
1978 SELECT * FROM AHL_APPLICABLE_MR_RELNS
1979 FOR UPDATE OF UE_ID;
1980
1981 CURSOR get_mr_reln_dtls_csr(p_mr_ue_id IN NUMBER,
1982 p_mr_header_id IN NUMBER,
1983 p_csi_instance_id IN NUMBER) IS
1984 SELECT child.ue_id child_ue_id, NVL(parent.ue_id, p_mr_ue_id) parent_ue_id, child.relationship_code
1985 FROM AHL_APPLICABLE_MR_RELNS child, AHL_APPLICABLE_MR_RELNS parent
1986 WHERE child.ORIG_MR_HEADER_ID = p_mr_header_id AND -- Filter condition
1987 child.ORIG_CSI_ITEM_INSTANCE_ID = p_csi_instance_id AND -- Filter condition
1988 parent.RELATED_MR_HEADER_ID (+) = child.MR_HEADER_ID AND -- Join condition
1989 parent.RELATED_CSI_ITEM_INSTANCE_ID (+) = child.CSI_ITEM_INSTANCE_ID; -- Join condition
1990
1991 CURSOR get_app_mr_table_count_csr IS
1992 SELECT count(*) from AHL_APPLICABLE_MRS;
1993
1994 /*CURSOR get_relns_table_count_csr IS
1995 SELECT count(*) from AHL_APPLICABLE_MR_RELNS;*/
1996
1997 --pdoki added for ER 9583373
1998 Cursor Chk_UE_Init_Due (p_mr_header_id NUMBER, p_instance_id NUMBER)
1999 IS
2000 SELECT 'x'
2001 FROM AHL_UNIT_EFFECTIVITIES_B UE,
2002 AHL_MR_HEADERS_B MRH
2003 WHERE UE.mr_header_id = p_mr_header_id
2004 AND MRH.mr_header_id = UE.mr_header_id
2005 AND MRH.IMPLEMENT_STATUS_CODE IN ('MANDATORY','OPTIONAL_IMPLEMENT')
2006 AND UE.csi_item_instance_id = p_instance_id
2007 AND UE.status_code = 'INIT-DUE';
2008
2009 l_duplicate_mr_id NUMBER;
2010 l_dup_mr_title AHL_MR_HEADERS_B.TITLE%TYPE;
2011 l_curr_mr_title AHL_MR_HEADERS_B.TITLE%TYPE;
2012 l_duplicate_inst_id NUMBER;
2013 l_new_ue_id NUMBER;
2014 l_new_rel_id NUMBER;
2015 l_temp_count NUMBER := 0;
2016 l_temp_return_status VARCHAR2(1);
2017 l_temp_msg_count NUMBER;
2018 l_temp_msg_data VARCHAR2(2000);
2019
2020 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Process_Group_MR';
2021
2022 --pdoki added for ER 9583373
2023 l_dummy VARCHAR2(1);
2024 l_mr_title AHL_MR_HEADERS_B.TITLE%TYPE := NULL;
2025
2026 BEGIN
2027 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2028 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
2029 END IF;
2030 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2031 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Processing Group MR with Id: ' || p_mr_header_id);
2032 END IF;
2033
2034 -- Evaluate Group MRs
2035 -- Populate AHL_APPLICABLE_MRS if required
2036 OPEN get_app_mr_table_count_csr;
2037 FETCH get_app_mr_table_count_csr INTO l_temp_count;
2038 CLOSE get_app_mr_table_count_csr;
2039 IF (l_temp_count > 0) THEN
2040 -- AHL_APPLICABLE_MRS is already populated. No need to Call Populate_Appl_MRs
2041 IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2042 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'Number of records in AHL_APPLICABLE_MRS: ' || l_temp_count || '. Not calling AHL_UMP_UTIL_PKG.Populate_Appl_MRs.');
2043 END IF;
2044 ELSE
2045 IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2046 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'Number of records in AHL_APPLICABLE_MRS is zero. Calling AHL_UMP_UTIL_PKG.Populate_Appl_MRs with p_csi_ii_id = ' || p_csi_instance_id);
2047 END IF;
2048 AHL_UMP_UTIL_PKG.Populate_Appl_MRs(p_csi_ii_id => p_csi_instance_id,
2049 x_return_status => l_temp_return_status,
2050 x_msg_count => l_temp_msg_count,
2051 x_msg_data => l_temp_msg_data);
2052 IF NOT (l_temp_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2053 p_x_valid_flag := false;
2054 l_curr_mr_title := Get_MR_Title_From_MR_Id(p_mr_header_id);
2055 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_GRP_MR_FAILED');
2056 FND_MESSAGE.Set_Token('MR_TITLE', l_curr_mr_title);
2057 FND_MSG_PUB.ADD;
2058 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2059 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2060 END IF;
2061 RETURN; -- No need to process this Group MR further
2062 END IF; -- Populate_Appl_MRs Failed
2063 OPEN get_app_mr_table_count_csr;
2064 FETCH get_app_mr_table_count_csr INTO l_temp_count;
2065 CLOSE get_app_mr_table_count_csr;
2066 IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2067 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'After calling AHL_UMP_UTIL_PKG.Populate_Appl_MRs, Number of records in AHL_APPLICABLE_MRS: ' || l_temp_count);
2068 END IF;
2069 END IF; -- AHL_APPLICABLE_MRS temp table is empty
2070
2071 -- Call process_Group_MR_Instance
2072 /*OPEN get_relns_table_count_csr;
2073 FETCH get_relns_table_count_csr INTO l_temp_count;
2074 CLOSE get_relns_table_count_csr;
2075 IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2076 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'Number of records in AHL_APPLICABLE_MR_RELNS before processing: ' || l_temp_count);
2077 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'About to call AHL_UMP_UTIL_PKG.process_Group_MR_Instance with p_top_mr_id = ' ||
2078 p_mr_header_id || ' and p_top_item_instance_id = ' || p_csi_instance_id);
2079 END IF;*/
2080 AHL_UMP_UTIL_PKG.process_Group_MR_Instance(p_top_mr_id => p_mr_header_id,
2081 p_top_item_instance_id => p_csi_instance_id,
2082 p_init_temp_table => G_YES_FLAG); -- To clean up temp table first
2083 /*OPEN get_relns_table_count_csr;
2084 FETCH get_relns_table_count_csr INTO l_temp_count;
2085 CLOSE get_relns_table_count_csr;
2086 IF (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2087 FND_LOG.STRING(FND_LOG.LEVEL_EVENT, L_DEBUG_KEY, 'Number of records in AHL_APPLICABLE_MR_RELNS after calling AHL_UMP_UTIL_PKG.process_Group_MR_Instance: ' || l_temp_count);
2088 END IF;*/
2089
2090 -- Check for duplicates
2091 OPEN get_duplicate_mrs_csr(p_sr_ue_id => p_sr_ue_id);
2092 FETCH get_duplicate_mrs_csr INTO l_duplicate_mr_id, l_duplicate_inst_id;
2093 IF(get_duplicate_mrs_csr%FOUND) THEN
2094 -- At least one duplicate found
2095 CLOSE get_duplicate_mrs_csr;
2096 l_dup_mr_title := Get_MR_Title_From_MR_Id(l_duplicate_mr_id);
2097 l_curr_mr_title := Get_MR_Title_From_MR_Id(p_mr_header_id);
2098 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_GROUP_DUP_MR');
2099 FND_MESSAGE.Set_Token('NEW_MR', l_curr_mr_title);
2100 FND_MESSAGE.Set_Token('DUP_MR', l_dup_mr_title);
2101 FND_MSG_PUB.ADD;
2102 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2103 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2104 END IF;
2105 p_x_valid_flag := false;
2106 RETURN; -- No need to process this Group MR further
2107 END IF;
2108 CLOSE get_duplicate_mrs_csr;
2109
2110 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2111 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Adding this Group MR will not cause any duplicates.');
2112 END IF;
2113
2114 -- First create all the Unit Effectivities
2115 l_temp_count := 0;
2116 FOR mr_rel_rec IN mr_relns_upd_csr LOOP
2117
2118 --pdoki added for ER 9583373
2119 OPEN Chk_UE_Init_Due (mr_rel_rec.RELATED_MR_HEADER_ID, mr_rel_rec.RELATED_CSI_ITEM_INSTANCE_ID);
2120 FETCH Chk_UE_Init_Due INTO l_dummy;
2121 IF (Chk_UE_Init_Due%FOUND) THEN
2122 --pick the MR Title
2123 SELECT title
2124 INTO l_mr_title
2125 FROM AHL_MR_HEADERS_B
2126 WHERE mr_header_id = mr_rel_rec.RELATED_MR_HEADER_ID;
2127
2128 FND_MESSAGE.SET_NAME('AHL', 'AHL_UMP_CANNOT_ADD_MRS');
2129 FND_MESSAGE.SET_TOKEN('MR_TITLE',l_mr_title);
2130 FND_MSG_PUB.ADD;
2131 p_x_valid_flag := false;
2132 CLOSE Chk_UE_Init_Due;
2133 RETURN; -- No need to process this Group MR further
2134 END IF;
2135 CLOSE Chk_UE_Init_Due;
2136
2137 -- Create the new Unit Effectivity Record
2138 Create_MR_Unit_Effectivity(p_instance_id => mr_rel_rec.RELATED_CSI_ITEM_INSTANCE_ID,
2139 p_due_date => p_due_date,
2140 p_mr_header_id => mr_rel_rec.RELATED_MR_HEADER_ID,
2141 p_user_id => p_user_id,
2142 p_login_id => p_login_id,
2143 p_fleet_header_id => p_fleet_header_id, -- Bug # 13916897
2144 x_ue_id => l_new_ue_id);
2145
2146 l_temp_count := l_temp_count + 1;
2147 -- Update AHL_APPLICABLE_MR_RELNS with the new UE Id
2148 UPDATE AHL_APPLICABLE_MR_RELNS
2149 SET UE_ID = l_new_ue_id
2150 WHERE CURRENT OF mr_relns_upd_csr;
2151 END LOOP;
2152 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2153 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Created ' || l_temp_count || ' Unit Effectivities for the Group MR.');
2154 END IF;
2155
2156 -- Next, Create the UE Relationships
2157 l_temp_count := 0;
2158 FOR rel_dtls_rec IN get_mr_reln_dtls_csr(p_mr_ue_id => p_mr_ue_id,
2159 p_mr_header_id => p_mr_header_id,
2160 p_csi_instance_id => p_csi_instance_id) LOOP
2161
2162 Create_UE_Relationship(p_ue_id => rel_dtls_rec.parent_ue_id,
2163 p_related_ue_id => rel_dtls_rec.child_ue_id,
2164 p_relationship_code => rel_dtls_rec.relationship_code,
2165 p_originator_id => p_sr_ue_id,
2166 p_user_id => p_user_id,
2167 p_login_id => p_login_id,
2168 x_ue_rel_id => l_new_rel_id);
2169
2170 l_temp_count := l_temp_count + 1;
2171
2172 END LOOP;
2173 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2174 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Created ' || l_temp_count || ' UE Relationships for the Group MR.');
2175 END IF;
2176
2177 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2178 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
2179 END IF;
2180 END Process_Group_MR;
2181
2182 ----------------------------------------
2183 -- This Function gets the MR Title from the MR Header Id
2184 ----------------------------------------
2185 FUNCTION Get_MR_Title_From_MR_Id(p_mr_header_id IN NUMBER)
2186 RETURN VARCHAR2 IS
2187
2188 CURSOR get_mr_title_csr IS
2189 SELECT TITLE
2190 FROM AHL_MR_HEADERS_B
2191 WHERE MR_HEADER_ID = p_mr_header_id;
2192
2193 l_mr_title AHL_MR_HEADERS_B.TITLE%TYPE := null;
2194
2195 BEGIN
2196 OPEN get_mr_title_csr;
2197 FETCH get_mr_title_csr INTO l_mr_title;
2198 CLOSE get_mr_title_csr;
2199 RETURN l_mr_title;
2200 END Get_MR_Title_From_MR_Id;
2201
2202 ----------------------------------------
2203 -- This Function gets the MR Title from the Unit Effectivity Id
2204 ----------------------------------------
2205 FUNCTION Get_MR_Title_From_UE_Id(p_unit_effectivity_id IN NUMBER)
2206 RETURN VARCHAR2 IS
2207
2208 CURSOR get_mr_title_csr IS
2209 SELECT MR.TITLE
2210 FROM AHL_MR_HEADERS_B MR, AHL_UNIT_EFFECTIVITIES_APP_V UE
2211 WHERE UE.UNIT_EFFECTIVITY_ID = p_unit_effectivity_id AND
2212 UE.MR_HEADER_ID = MR.MR_HEADER_ID;
2213
2214 l_mr_title AHL_MR_HEADERS_B.TITLE%TYPE := null;
2215
2216 BEGIN
2217 OPEN get_mr_title_csr;
2218 FETCH get_mr_title_csr INTO l_mr_title;
2219 CLOSE get_mr_title_csr;
2220 RETURN l_mr_title;
2221 END Get_MR_Title_From_UE_Id;
2222
2223 ----------------------------------------
2224 -- This Procedure updates the due date and tolerance exceeded flag of UEs
2225 -- of the MRs associated to the SR in response to change in Exp. Resolution Date of the SR
2226 ----------------------------------------
2227 PROCEDURE Handle_MR_UE_Date_Change(
2228 p_sr_ue_id IN NUMBER,
2229 p_assigned_to_visit_flag IN BOOLEAN,
2230 p_new_tolerance_flag IN VARCHAR2,
2231 p_new_due_date IN DATE) IS
2232
2233 CURSOR get_MR_UEs_csr IS
2234 SELECT * FROM AHL_UNIT_EFFECTIVITIES_APP_V
2235 WHERE UNIT_EFFECTIVITY_ID IN (SELECT RELATED_UE_ID from AHL_UE_RELATIONSHIPS
2236 WHERE ORIGINATOR_UE_ID = p_sr_ue_id
2237 AND RELATIONSHIP_CODE = G_UE_PARENT_REL_CODE);
2238
2239 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Handle_MR_UE_Date_Change';
2240
2241 l_temp_tolerance_flag AHL_UNIT_EFFECTIVITIES_B.TOLERANCE_FLAG%TYPE;
2242 l_temp_count NUMBER := 0;
2243
2244
2245 BEGIN
2246 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2247 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
2248 END IF;
2249
2250 FOR l_curr_ue_rec in get_MR_UEs_csr LOOP
2251 IF (p_assigned_to_visit_flag = TRUE) THEN
2252 l_temp_tolerance_flag := p_new_tolerance_flag;
2253 ELSE
2254 l_temp_tolerance_flag := l_curr_ue_rec.TOLERANCE_FLAG;
2255 END IF;
2256 -- Update the unit effectivity
2257 AHL_UNIT_EFFECTIVITIES_PKG.UPDATE_ROW(
2258 X_UNIT_EFFECTIVITY_ID => l_curr_ue_rec.UNIT_EFFECTIVITY_ID,
2259 X_MANUALLY_PLANNED_FLAG => l_curr_ue_rec.MANUALLY_PLANNED_FLAG,
2260 X_LOG_SERIES_CODE => l_curr_ue_rec.LOG_SERIES_CODE,
2261 X_LOG_SERIES_NUMBER => l_curr_ue_rec.LOG_SERIES_NUMBER,
2262 X_FLIGHT_NUMBER => l_curr_ue_rec.FLIGHT_NUMBER,
2263 X_MEL_CDL_TYPE_CODE => l_curr_ue_rec.MEL_CDL_TYPE_CODE,
2264 X_POSITION_PATH_ID => l_curr_ue_rec.POSITION_PATH_ID,
2265 X_ATA_CODE => l_curr_ue_rec.ATA_CODE,
2266 --X_CLEAR_STATION_ORG_ID => l_curr_ue_rec.CLEAR_STATION_ORG_ID,
2267 --X_CLEAR_STATION_DEPT_ID => l_curr_ue_rec.CLEAR_STATION_DEPT_ID,
2268 X_UNIT_CONFIG_HEADER_ID => l_curr_ue_rec.UNIT_CONFIG_HEADER_ID,
2269 X_QA_COLLECTION_ID => l_curr_ue_rec.QA_COLLECTION_ID,
2270 X_CS_INCIDENT_ID => l_curr_ue_rec.CS_INCIDENT_ID,
2271 X_OBJECT_TYPE => l_curr_ue_rec.OBJECT_TYPE,
2272 X_APPLICATION_USG_CODE => l_curr_ue_rec.APPLICATION_USG_CODE,
2273 X_COUNTER_ID => l_curr_ue_rec.COUNTER_ID,
2274 X_EARLIEST_DUE_DATE => l_curr_ue_rec.EARLIEST_DUE_DATE,
2275 X_LATEST_DUE_DATE => l_curr_ue_rec.LATEST_DUE_DATE,
2276 X_FORECAST_SEQUENCE => l_curr_ue_rec.FORECAST_SEQUENCE,
2277 X_REPETITIVE_MR_FLAG => l_curr_ue_rec.REPETITIVE_MR_FLAG,
2278 X_TOLERANCE_FLAG => l_temp_tolerance_flag, -- Updated
2279 X_MESSAGE_CODE => l_curr_ue_rec.MESSAGE_CODE,
2280 X_DATE_RUN => l_curr_ue_rec.DATE_RUN,
2281 X_PRECEDING_UE_ID => l_curr_ue_rec.PRECEDING_UE_ID,
2282 X_SET_DUE_DATE => l_curr_ue_rec.SET_DUE_DATE,
2283 X_ACCOMPLISHED_DATE => l_curr_ue_rec.ACCOMPLISHED_DATE,
2284 X_SERVICE_LINE_ID => l_curr_ue_rec.SERVICE_LINE_ID,
2285 X_PROGRAM_MR_HEADER_ID => l_curr_ue_rec.PROGRAM_MR_HEADER_ID,
2286 X_CANCEL_REASON_CODE => l_curr_ue_rec.CANCEL_REASON_CODE,
2287 X_ATTRIBUTE_CATEGORY => l_curr_ue_rec.ATTRIBUTE_CATEGORY,
2288 X_ATTRIBUTE1 => l_curr_ue_rec.ATTRIBUTE1,
2289 X_ATTRIBUTE2 => l_curr_ue_rec.ATTRIBUTE2,
2290 X_ATTRIBUTE3 => l_curr_ue_rec.ATTRIBUTE3,
2291 X_ATTRIBUTE4 => l_curr_ue_rec.ATTRIBUTE4,
2292 X_ATTRIBUTE5 => l_curr_ue_rec.ATTRIBUTE5,
2293 X_ATTRIBUTE6 => l_curr_ue_rec.ATTRIBUTE6,
2294 X_ATTRIBUTE7 => l_curr_ue_rec.ATTRIBUTE7,
2295 X_ATTRIBUTE8 => l_curr_ue_rec.ATTRIBUTE8,
2296 X_ATTRIBUTE9 => l_curr_ue_rec.ATTRIBUTE9,
2297 X_ATTRIBUTE10 => l_curr_ue_rec.ATTRIBUTE10,
2298 X_ATTRIBUTE11 => l_curr_ue_rec.ATTRIBUTE11,
2299 X_ATTRIBUTE12 => l_curr_ue_rec.ATTRIBUTE12,
2300 X_ATTRIBUTE13 => l_curr_ue_rec.ATTRIBUTE13,
2301 X_ATTRIBUTE14 => l_curr_ue_rec.ATTRIBUTE14,
2302 X_ATTRIBUTE15 => l_curr_ue_rec.ATTRIBUTE15,
2303 X_OBJECT_VERSION_NUMBER => l_curr_ue_rec.OBJECT_VERSION_NUMBER + 1, -- Updated
2304 X_CSI_ITEM_INSTANCE_ID => l_curr_ue_rec.CSI_ITEM_INSTANCE_ID,
2305 X_MR_HEADER_ID => l_curr_ue_rec.MR_HEADER_ID,
2306 X_MR_EFFECTIVITY_ID => l_curr_ue_rec.MR_EFFECTIVITY_ID,
2307 X_MR_INTERVAL_ID => l_curr_ue_rec.MR_INTERVAL_ID,
2308 X_STATUS_CODE => l_curr_ue_rec.STATUS_CODE,
2309 X_DUE_DATE => p_new_due_date, -- Updated
2310 X_DUE_COUNTER_VALUE => l_curr_ue_rec.DUE_COUNTER_VALUE,
2311 X_DEFER_FROM_UE_ID => l_curr_ue_rec.DEFER_FROM_UE_ID,
2312 X_ORIG_DEFERRAL_UE_ID => l_curr_ue_rec.ORIG_DEFERRAL_UE_ID,
2313 X_REMARKS => l_curr_ue_rec.REMARKS,
2314 X_LAST_UPDATE_DATE => SYSDATE, -- Updated
2315 X_LAST_UPDATED_BY => fnd_global.user_id, -- Updated
2316 X_LAST_UPDATE_LOGIN => fnd_global.login_id, -- Updated
2317 -- BACHANDR - NR project start
2318 X_FLEET_HEADER_ID => AHL_UMP_UTIL_PKG.Get_Associated_Fleet(l_curr_ue_rec.UNIT_CONFIG_HEADER_ID,p_new_due_date,null)
2319 -- BACHANDR - NR project end
2320 );
2321 l_temp_count := l_temp_count + 1;
2322 END LOOP;
2323 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2324 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Updated Due Date and Tolerance Flag in ' || l_temp_count|| ' dependent unit effectivities.');
2325 END IF;
2326
2327 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2328 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
2329 END IF;
2330 END Handle_MR_UE_Date_Change;
2331
2332 ----------------------------------------
2333 -- This Procedure updates the Unit Effectivity associated with the Service Request.
2334 -- It updates the Status, Instance, Due Date and Tolerance Flag in response to updates in a SR
2335 -- It returns two flags: The first flag indicated if the UE is assigned to a visit.
2336 -- The second flag (which applies only if date has changed and only if assigned to a visit)
2337 -- indicates if date tolerance has been exceeded (Visit Start Date vs. New UE Due Date)
2338 ----------------------------------------
2339 PROCEDURE Update_SR_Unit_Effectivity(
2340 p_sr_ue_id IN NUMBER,
2341 p_due_date_flag IN BOOLEAN,
2342 p_new_due_date IN DATE,
2343 p_instance_flag IN BOOLEAN,
2344 p_new_instance_id IN NUMBER,
2345 p_status_flag IN BOOLEAN,
2346 p_new_status_code IN VARCHAR2,
2347 x_assigned_to_visit_flag OUT NOCOPY BOOLEAN,
2348 x_new_tolerance_flag OUT NOCOPY VARCHAR2) IS
2349
2350 CURSOR get_UE_dtls_csr IS
2351 SELECT * FROM AHL_UNIT_EFFECTIVITIES_APP_V
2352 WHERE UNIT_EFFECTIVITY_ID = p_sr_ue_id;
2353
2354 -- bachandr Bug # 13916897
2355 CURSOR c_get_incident_occ_date(c_incident_id IN NUMBER) IS
2356 SELECT incident_occurred_date FROM cs_incidents
2357 WHERE incident_id = c_incident_id;
2358
2359 l_occurred_date DATE;
2360 -- bachandr Bug # 13916897
2361
2362 CURSOR is_ue_assigned_to_visit_csr IS
2363 SELECT 'x' FROM AHL_VISIT_TASKS_B
2364 WHERE UNIT_EFFECTIVITY_ID = p_sr_ue_id;
2365
2366 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Update_SR_Unit_Effectivity';
2367
2368 l_temp_tolerance_flag AHL_UNIT_EFFECTIVITIES_B.TOLERANCE_FLAG%TYPE;
2369 l_temp_instance_id NUMBER;
2370 l_temp_status_code AHL_UNIT_EFFECTIVITIES_B.STATUS_CODE%TYPE;
2371 l_temp_due_date DATE;
2372 l_curr_ue_rec get_UE_dtls_csr%ROWTYPE;
2373 l_dummy VARCHAR2(1);
2374 l_visit_start_date DATE;
2375 l_visit_end_date DATE;
2376 l_visit_assign_code VARCHAR2(30);
2377 l_accomplished_date DATE;
2378
2379 BEGIN
2380 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2381 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
2382 END IF;
2383
2384 OPEN get_UE_dtls_csr;
2385 FETCH get_UE_dtls_csr INTO l_curr_ue_rec;
2386 CLOSE get_UE_dtls_csr;
2387
2388 IF (p_instance_flag = TRUE) THEN
2389 l_temp_instance_id := p_new_instance_id;
2390 ELSE
2391 l_temp_instance_id := l_curr_ue_rec.CSI_ITEM_INSTANCE_ID;
2392 END IF;
2393
2394 l_accomplished_date := l_curr_ue_rec.ACCOMPLISHED_DATE;
2395 IF (p_status_flag = TRUE) THEN
2396 l_temp_status_code := p_new_status_code;
2397 -- JR: Added the following on 10/21/2003 to set the accomplished date for SR-CLOSED UEs
2398 IF (p_new_status_code = G_UMP_SR_CLOSED_STATUS) THEN
2399 l_accomplished_date := SYSDATE;
2400 END IF;
2401 ELSE
2402 l_temp_status_code := l_curr_ue_rec.STATUS_CODE;
2403 END IF;
2404
2405 x_assigned_to_visit_flag := FALSE;
2406 x_new_tolerance_flag := null;
2407 IF (p_due_date_flag = TRUE) THEN
2408 l_temp_tolerance_flag := l_curr_ue_rec.TOLERANCE_FLAG;
2409 l_temp_due_date := p_new_due_date;
2410 OPEN is_ue_assigned_to_visit_csr;
2411 FETCH is_ue_assigned_to_visit_csr INTO l_dummy;
2412 IF (is_ue_assigned_to_visit_csr%FOUND) THEN
2413 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2414 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Unit Effectivity ' || p_sr_ue_id || ' has been assigned to a visit.');
2415 END IF;
2416 x_assigned_to_visit_flag := TRUE;
2417 -- Get the Visit Start Date
2418 AHL_UMP_UTIL_PKG.Get_Visit_Details(p_unit_effectivity_id => p_sr_ue_id,
2419 x_visit_Start_date => l_visit_start_date,
2420 x_visit_End_date => l_visit_end_date,
2421 x_visit_Assign_code => l_visit_assign_code);
2422 IF (p_new_due_date is not null and l_visit_start_date is not null and (l_visit_start_date > p_new_due_date)) THEN
2423 l_temp_tolerance_flag := G_YES_FLAG;
2424 x_new_tolerance_flag := G_YES_FLAG;
2425 ELSE
2426 l_temp_tolerance_flag := null;
2427 END IF;
2428 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2429 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Visit Start Date: ' || l_visit_start_date ||
2430 ', New Expected Resolution date of SR: ' || p_new_due_date ||
2431 ', Tolerance Flag Set to ' || l_temp_tolerance_flag);
2432 END IF;
2433 ELSE
2434 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2435 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Unit Effectivity ' || p_sr_ue_id || ' has not been assigned to a visit.');
2436 END IF;
2437 END IF; -- Assigned to a visit or not
2438 CLOSE is_ue_assigned_to_visit_csr;
2439 ELSE
2440 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2441 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'No Due Date change for Unit Effectivity ' || p_sr_ue_id);
2442 END IF;
2443 l_temp_due_date := l_curr_ue_rec.DUE_DATE;
2444 l_temp_tolerance_flag := l_curr_ue_rec.TOLERANCE_FLAG;
2445 END IF;
2446
2447 -- bachandr Bug # 13916897
2448 IF l_temp_due_date IS NULL
2449 THEN
2450 OPEN c_get_incident_occ_date(l_curr_ue_rec.CS_INCIDENT_ID);
2451 FETCH c_get_incident_occ_date INTO l_occurred_date;
2452 CLOSE c_get_incident_occ_date;
2453 END IF;
2454 -- bachandr Bug # 13916897
2455
2456 -- Update the unit effectivity
2457 AHL_UNIT_EFFECTIVITIES_PKG.UPDATE_ROW(
2458 X_UNIT_EFFECTIVITY_ID => l_curr_ue_rec.UNIT_EFFECTIVITY_ID,
2459 X_MANUALLY_PLANNED_FLAG => l_curr_ue_rec.MANUALLY_PLANNED_FLAG,
2460 X_LOG_SERIES_CODE => l_curr_ue_rec.LOG_SERIES_CODE,
2461 X_LOG_SERIES_NUMBER => l_curr_ue_rec.LOG_SERIES_NUMBER,
2462 X_FLIGHT_NUMBER => l_curr_ue_rec.FLIGHT_NUMBER,
2463 X_MEL_CDL_TYPE_CODE => l_curr_ue_rec.MEL_CDL_TYPE_CODE,
2464 X_POSITION_PATH_ID => l_curr_ue_rec.POSITION_PATH_ID,
2465 X_ATA_CODE => l_curr_ue_rec.ATA_CODE,
2466 --X_CLEAR_STATION_ORG_ID => l_curr_ue_rec.CLEAR_STATION_ORG_ID,
2467 --X_CLEAR_STATION_DEPT_ID => l_curr_ue_rec.CLEAR_STATION_DEPT_ID,
2468 X_UNIT_CONFIG_HEADER_ID => l_curr_ue_rec.UNIT_CONFIG_HEADER_ID,
2469 X_QA_COLLECTION_ID => l_curr_ue_rec.QA_COLLECTION_ID,
2470 X_CS_INCIDENT_ID => l_curr_ue_rec.CS_INCIDENT_ID,
2471 X_OBJECT_TYPE => l_curr_ue_rec.OBJECT_TYPE,
2472 X_APPLICATION_USG_CODE => l_curr_ue_rec.APPLICATION_USG_CODE,
2473 X_COUNTER_ID => l_curr_ue_rec.COUNTER_ID,
2474 X_EARLIEST_DUE_DATE => l_curr_ue_rec.EARLIEST_DUE_DATE,
2475 X_LATEST_DUE_DATE => l_curr_ue_rec.LATEST_DUE_DATE,
2476 X_FORECAST_SEQUENCE => l_curr_ue_rec.FORECAST_SEQUENCE,
2477 X_REPETITIVE_MR_FLAG => l_curr_ue_rec.REPETITIVE_MR_FLAG,
2478 X_TOLERANCE_FLAG => l_temp_tolerance_flag, -- Updated
2479 X_MESSAGE_CODE => l_curr_ue_rec.MESSAGE_CODE,
2480 X_DATE_RUN => l_curr_ue_rec.DATE_RUN,
2481 X_PRECEDING_UE_ID => l_curr_ue_rec.PRECEDING_UE_ID,
2482 X_SET_DUE_DATE => l_curr_ue_rec.SET_DUE_DATE,
2483 X_ACCOMPLISHED_DATE => l_accomplished_date, -- Updated
2484 X_SERVICE_LINE_ID => l_curr_ue_rec.SERVICE_LINE_ID,
2485 X_PROGRAM_MR_HEADER_ID => l_curr_ue_rec.PROGRAM_MR_HEADER_ID,
2486 X_CANCEL_REASON_CODE => l_curr_ue_rec.CANCEL_REASON_CODE,
2487 X_ATTRIBUTE_CATEGORY => l_curr_ue_rec.ATTRIBUTE_CATEGORY,
2488 X_ATTRIBUTE1 => l_curr_ue_rec.ATTRIBUTE1,
2489 X_ATTRIBUTE2 => l_curr_ue_rec.ATTRIBUTE2,
2490 X_ATTRIBUTE3 => l_curr_ue_rec.ATTRIBUTE3,
2491 X_ATTRIBUTE4 => l_curr_ue_rec.ATTRIBUTE4,
2492 X_ATTRIBUTE5 => l_curr_ue_rec.ATTRIBUTE5,
2493 X_ATTRIBUTE6 => l_curr_ue_rec.ATTRIBUTE6,
2494 X_ATTRIBUTE7 => l_curr_ue_rec.ATTRIBUTE7,
2495 X_ATTRIBUTE8 => l_curr_ue_rec.ATTRIBUTE8,
2496 X_ATTRIBUTE9 => l_curr_ue_rec.ATTRIBUTE9,
2497 X_ATTRIBUTE10 => l_curr_ue_rec.ATTRIBUTE10,
2498 X_ATTRIBUTE11 => l_curr_ue_rec.ATTRIBUTE11,
2499 X_ATTRIBUTE12 => l_curr_ue_rec.ATTRIBUTE12,
2500 X_ATTRIBUTE13 => l_curr_ue_rec.ATTRIBUTE13,
2501 X_ATTRIBUTE14 => l_curr_ue_rec.ATTRIBUTE14,
2502 X_ATTRIBUTE15 => l_curr_ue_rec.ATTRIBUTE15,
2503 X_OBJECT_VERSION_NUMBER => l_curr_ue_rec.OBJECT_VERSION_NUMBER + 1, -- Updated
2504 X_CSI_ITEM_INSTANCE_ID => l_temp_instance_id,
2505 X_MR_HEADER_ID => l_curr_ue_rec.MR_HEADER_ID,
2506 X_MR_EFFECTIVITY_ID => l_curr_ue_rec.MR_EFFECTIVITY_ID,
2507 X_MR_INTERVAL_ID => l_curr_ue_rec.MR_INTERVAL_ID,
2508 X_STATUS_CODE => l_temp_status_code, -- Updated
2509 X_DUE_DATE => l_temp_due_date, -- Updated
2510 X_DUE_COUNTER_VALUE => l_curr_ue_rec.DUE_COUNTER_VALUE,
2511 X_DEFER_FROM_UE_ID => l_curr_ue_rec.DEFER_FROM_UE_ID,
2512 X_ORIG_DEFERRAL_UE_ID => l_curr_ue_rec.ORIG_DEFERRAL_UE_ID,
2513 X_REMARKS => l_curr_ue_rec.REMARKS,
2514 X_LAST_UPDATE_DATE => SYSDATE, -- Updated
2515 X_LAST_UPDATED_BY => fnd_global.user_id, -- Updated
2516 X_LAST_UPDATE_LOGIN => fnd_global.login_id, -- Updated
2517 -- BACHANDR - NR project start
2518 X_FLEET_HEADER_ID => AHL_UMP_UTIL_PKG.Get_Associated_Fleet(l_curr_ue_rec.UNIT_CONFIG_HEADER_ID,nvl(l_temp_due_date,l_occurred_date),null)
2519 -- BACHANDR - NR project end
2520 );
2521 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2522 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Unit Effectivity ' || p_sr_ue_id || ' has been updated.');
2523 END IF;
2524
2525 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2526 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
2527 END IF;
2528 END Update_SR_Unit_Effectivity;
2529
2530 ----------------------------------------
2531 -- This Procedure validates the Service Request during the Post Update process.
2532 -- It retrieves some information as part of the validation process to be used by subsequent routines
2533 ----------------------------------------
2534 PROCEDURE Validate_Request_For_Update(
2535 x_sr_ue_id OUT NOCOPY NUMBER,
2536 x_sr_ue_ovn OUT NOCOPY NUMBER,
2537 x_defer_from_ue_id OUT NOCOPY NUMBER) IS
2538
2539 CURSOR check_request_exists_csr IS
2540 SELECT 'x' FROM CS_INCIDENTS
2541 WHERE INCIDENT_ID = CS_SERVICEREQUEST_PVT.user_hooks_rec.request_id;
2542
2543 CURSOR get_ue_dtls_csr IS
2544 SELECT UNIT_EFFECTIVITY_ID, OBJECT_VERSION_NUMBER, DEFER_FROM_UE_ID
2545 FROM AHL_UNIT_EFFECTIVITIES_APP_V
2546 WHERE CS_INCIDENT_ID = CS_SERVICEREQUEST_PVT.user_hooks_rec.request_id
2547 AND (STATUS_CODE IS NULL OR STATUS_CODE NOT IN (G_UMP_DEFERRED_STATUS, G_UMP_EXCEPTION_STATUS));
2548
2549 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Validate_Request_For_Update';
2550
2551 l_dummy VARCHAR2(1);
2552
2553 BEGIN
2554 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2555 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
2556 END IF;
2557
2558 -- Ensure that request id is not null
2559 IF(CS_SERVICEREQUEST_PVT.user_hooks_rec.request_id IS NULL) THEN
2560 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_ID_NULL');
2561 FND_MSG_PUB.ADD;
2562 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2563 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2564 END IF;
2565 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2566 END IF;
2567
2568 -- Ensure that the request id is valid
2569 OPEN check_request_exists_csr;
2570 FETCH check_request_exists_csr INTO l_dummy;
2571 IF(check_request_exists_csr%NOTFOUND) THEN
2572 CLOSE check_request_exists_csr;
2573 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_ID_INVALID');
2574 FND_MESSAGE.Set_Token('REQ_ID', CS_SERVICEREQUEST_PVT.user_hooks_rec.request_id);
2575 FND_MSG_PUB.ADD;
2576 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2577 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2578 END IF;
2579 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2580 END IF;
2581 CLOSE check_request_exists_csr;
2582
2583 -- If already a CMRO SR, ensure that an unit effectivity exists for the SR
2584 IF (NVL(CS_SERVICEREQUEST_PVT.user_hooks_rec.old_type_cmro_flag, G_NO_FLAG) = G_YES_FLAG) THEN
2585 -- apattark added x_defer_from_ue_id for bug #9166304
2586 OPEN get_ue_dtls_csr;
2587 FETCH get_ue_dtls_csr INTO x_sr_ue_id, x_sr_ue_ovn, x_defer_from_ue_id;
2588 IF (get_ue_dtls_csr%NOTFOUND) THEN
2589 CLOSE get_ue_dtls_csr;
2590 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_ID_INVALID');
2591 FND_MESSAGE.Set_Token('REQ_ID', CS_SERVICEREQUEST_PVT.user_hooks_rec.request_id);
2592 FND_MSG_PUB.ADD;
2593 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2594 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2595 END IF;
2596 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2597 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Could not find any valid Unit Effectivity for this CS_INCIDENT_ID: ' || CS_SERVICEREQUEST_PVT.user_hooks_rec.request_id);
2598 END IF;
2599 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2600 END IF; -- UE Not Found
2601 CLOSE get_ue_dtls_csr;
2602 END IF; -- CMRO Type SR
2603
2604 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2605 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
2606 END IF;
2607
2608 END Validate_Request_For_Update;
2609
2610 ----------------------------------------
2611 -- This Procedure handles type (CMRO to Non-CMRO and vice-versa) changes to a SR
2612 ----------------------------------------
2613 PROCEDURE Handle_Type_Change(
2614 p_sr_ue_id IN NUMBER,
2615 p_defer_from_ue_id IN NUMBER) IS
2616
2617 CURSOR get_tasks_for_ue_csr IS
2618 SELECT 'x' from AHL_VISIT_TASKS_B
2619 WHERE UNIT_EFFECTIVITY_ID = p_sr_ue_id;
2620
2621 CURSOR get_all_ue_and_rel_ids_csr IS
2622 SELECT UE_RELATIONSHIP_ID, RELATED_UE_ID, LEVEL
2623 FROM AHL_UE_RELATIONSHIPS
2624 WHERE originator_ue_id = p_sr_ue_id
2625 START WITH UE_ID = p_sr_ue_id
2626 CONNECT BY PRIOR RELATED_UE_ID = UE_ID
2627 ORDER BY LEVEL DESC; /* Bottom Up ordering*/
2628
2629 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Handle_Type_Change';
2630
2631 l_dummy VARCHAR2(1);
2632 l_temp_return_status VARCHAR2(1);
2633
2634 BEGIN
2635 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2636 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
2637 END IF;
2638
2639 -- Ensure that the SR is not closed
2640 IF (CS_SERVICEREQUEST_PVT.user_hooks_rec.status_flag = G_SR_CLOSED_FLAG) THEN
2641 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_CLOSED');
2642 FND_MSG_PUB.ADD;
2643 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2644 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2645 END IF;
2646 RAISE FND_API.G_EXC_ERROR;
2647 END IF;
2648
2649 IF (NVL(CS_SERVICEREQUEST_PVT.user_hooks_rec.new_type_cmro_flag, G_NO_FLAG) = G_NO_FLAG) THEN
2650 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2651 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'CMRO to Non-CMRO type conversion');
2652 END IF;
2653 -- CMRO to Non-CMRO type
2654 -- apattark start changes for bug #9166304
2655 IF (p_defer_from_ue_id IS NOT NULL) THEN
2656 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2657 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'UE was deferred.');
2658 END IF;
2659 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_DEFERRED');
2660 FND_MSG_PUB.ADD;
2661 RAISE FND_API.G_EXC_ERROR;
2662 END IF;
2663 -- apattark end changes for bug #9166304
2664 -- JR: Modified on 10/29/2003 (Using Status Id instead of Status Code)
2665 IF (CS_SERVICEREQUEST_PVT.user_hooks_rec.status_id = G_SR_PLANNED_STATUS_ID) THEN
2666 OPEN get_tasks_for_ue_csr;
2667 FETCH get_tasks_for_ue_csr INTO l_dummy;
2668 IF (get_tasks_for_ue_csr%FOUND) THEN
2669 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_ASGND_TO_VISIT');
2670 FND_MSG_PUB.ADD;
2671 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2672 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2673 END IF;
2674 ELSE
2675 -- This condition of a (originally) CMRO SR in Planned Status but not associated
2676 -- to a visit is not possible
2677 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2678 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Odd case of originally CMRO type SR in Planned status but not assigned to a visit');
2679 END IF;
2680 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_PLANNED');
2681 FND_MSG_PUB.ADD;
2682 END IF; -- tasks found
2683 CLOSE get_tasks_for_ue_csr;
2684 RAISE FND_API.G_EXC_ERROR;
2685 ELSE
2686 -- Not yet Planned, but open
2687 -- Delete all the dependent UEs and UE relationships
2688 FOR rel_and_ue_id_rec in get_all_ue_and_rel_ids_csr LOOP
2689 -- First delete the relationship
2690 AHL_UE_RELATIONSHIPS_PKG.DELETE_ROW(X_UE_RELATIONSHIP_ID => rel_and_ue_id_rec.UE_RELATIONSHIP_ID);
2691 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2692 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Deleted Relationship with UE_RELATIONSHIP_ID = ' || rel_and_ue_id_rec.UE_RELATIONSHIP_ID);
2693 END IF;
2694 -- Next delete the unit effectivity
2695 AHL_UNIT_EFFECTIVITIES_PKG.DELETE_ROW(X_UNIT_EFFECTIVITY_ID => rel_and_ue_id_rec.RELATED_UE_ID);
2696 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2697 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Deleted Unit Effectivity with UNIT_EFFECTIVITY_ID = ' || rel_and_ue_id_rec.RELATED_UE_ID);
2698 END IF;
2699 END LOOP;
2700
2701 -- Delete the SR's Unit Effectivity
2702 AHL_UNIT_EFFECTIVITIES_PKG.DELETE_ROW(X_UNIT_EFFECTIVITY_ID => p_sr_ue_id);
2703 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2704 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Deleted Unit Effectivity with UNIT_EFFECTIVITY_ID = ' || p_sr_ue_id);
2705 END IF;
2706 END IF; -- Planned or Not
2707 ELSE
2708 -- Non-CMRO to CMRO type
2709 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2710 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Non-CMRO to CMRO type conversion');
2711 END IF;
2712 IF (CS_SERVICEREQUEST_PVT.user_hooks_rec.status_id = G_SR_PLANNED_STATUS_ID) THEN
2713 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_REQ_PLANNED');
2714 FND_MSG_PUB.ADD;
2715 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2716 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2717 END IF;
2718 RAISE FND_API.G_EXC_ERROR;
2719 ELSE
2720 -- Not yet Planned, but open: Call Create_SR_Init_Effectivity
2721 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2722 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'About to call Create_SR_Unit_Effectivity.');
2723 END IF;
2724 Create_SR_Unit_Effectivity(x_return_status => l_temp_return_status);
2725 /* For Testing
2726 UMP_SR_TEST.Create_SR_Unit_Effectivity(x_return_status => l_temp_return_status);
2727 */
2728 IF (l_temp_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2729 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2730 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Create_SR_Unit_Effectivity Returned Success.');
2731 END IF;
2732 ELSIF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
2733 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2734 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Create_SR_Unit_Effectivity Returned User Error.');
2735 END IF;
2736 RAISE FND_API.G_EXC_ERROR;
2737 ELSE
2738 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2739 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Create_SR_Unit_Effectivity Returned Unexpected Error.');
2740 END IF;
2741 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2742 END IF;
2743 END IF; -- Planned or not
2744 END IF; -- CMRO to Non-CMRO or vice-versa
2745
2746 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2747 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
2748 END IF;
2749
2750 END Handle_Type_Change;
2751
2752 ----------------------------------------
2753 -- This Procedure handles other attribute (Instance, Resolution Date and Status) changes to a SR
2754 ----------------------------------------
2755 PROCEDURE Handle_Attribute_Changes(
2756 p_sr_ue_id IN NUMBER) IS
2757 --apattark added DEFER_FROM_UE_ID to check if it is null
2758 CURSOR get_and_lock_ue_dtls_csr IS
2759 SELECT CSI_ITEM_INSTANCE_ID, DUE_DATE, STATUS_CODE, DEFER_FROM_UE_ID from AHL_UNIT_EFFECTIVITIES_B
2760 WHERE UNIT_EFFECTIVITY_ID = p_sr_ue_id
2761 FOR UPDATE NOWAIT;
2762
2763 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Handle_Attribute_Changes';
2764
2765 l_instance_changed BOOLEAN := false;
2766 l_due_date_changed BOOLEAN := false;
2767 l_status_changed BOOLEAN := false;
2768 l_old_instance NUMBER;
2769 l_old_due_date DATE;
2770 l_old_status AHL_UNIT_EFFECTIVITIES_B.STATUS_CODE%TYPE;
2771 l_valid_flag BOOLEAN := true;
2772 l_new_instance NUMBER := CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.customer_product_id;
2773 l_new_ue_status AHL_UNIT_EFFECTIVITIES_B.STATUS_CODE%TYPE;
2774 l_new_due_date DATE := CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.exp_resolution_date;
2775 l_assigned BOOLEAN;
2776 l_new_tolerance_flag VARCHAR2(1);
2777 --apattark added for bug #9166304
2778 l_defer_from_ue_id NUMBER;
2779 l_return_status VARCHAR2(1);
2780 l_msg_data VARCHAR2(400);
2781 l_msg_count NUMBER;
2782 l_calc_due_date DATE;
2783
2784 BEGIN
2785 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2786 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
2787 END IF;
2788
2789 -- Get the original (old) values and lock the row
2790 OPEN get_and_lock_ue_dtls_csr; -- Will throw exception (ORA-00054) if cannot acquire lock
2791 FETCH get_and_lock_ue_dtls_csr into l_old_instance, l_old_due_date, l_old_status, l_defer_from_ue_id;
2792 CLOSE get_and_lock_ue_dtls_csr;
2793
2794 -- Handle Instance Changes
2795 Handle_Instance_Change(p_sr_ue_id => p_sr_ue_id,
2796 p_old_instance_id => l_old_instance,
2797 p_x_valid_flag => l_valid_flag,
2798 x_instance_changed => l_instance_changed,
2799 p_defer_from_ue_id => l_defer_from_ue_id);
2800
2801 -- Handle Status Change
2802 Handle_Status_Change(p_sr_ue_id => p_sr_ue_id,
2803 p_old_ue_status => l_old_status,
2804 p_x_valid_flag => l_valid_flag,
2805 x_status_changed => l_status_changed,
2806 x_new_ue_status => l_new_ue_status);
2807
2808 -- Handle Expected Resolution Date (Due Date) Change
2809 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2810 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'l_old_due_date = ' || l_old_due_date || ', l_new_due_date = ' || l_new_due_date);
2811 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'l_old_status = ' || l_old_status || ', l_new_ue_status = ' || l_new_ue_status);
2812 END IF;
2813
2814 -- added for Complex Assembly Enh: Initialize a SR.
2815 IF (l_old_status = 'INIT-DUE' AND (l_new_ue_status IS NULL OR l_new_ue_status <> G_UMP_SR_CLOSED_STATUS)) THEN
2816 AHL_UMP_PROCESSUNIT_PVT.Calculate_Init_DueDate(
2817 x_return_status => l_return_status,
2818 x_msg_data => l_msg_data,
2819 x_msg_count => l_msg_count,
2820 p_init_msg_list => FND_API.G_FALSE,
2821 p_unit_effectivity_id => p_sr_ue_id,
2822 x_due_date => l_calc_due_date);
2823 IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2824 l_new_due_date := l_calc_due_date;
2825 END IF;
2826 END IF;
2827
2828 --apattark added condition to check defer from ue id
2829 IF(l_defer_from_ue_id IS NULL) THEN
2830 IF((l_old_due_date IS NOT NULL AND l_new_due_date IS NULL) OR
2831 (l_old_due_date IS NULL AND l_new_due_date IS NOT NULL) OR
2832 (l_old_due_date IS NOT NULL AND l_new_due_date IS NOT NULL AND l_old_due_date <> l_new_due_date)) THEN
2833 -- Date has changed
2834 IF (l_old_status IS NULL OR l_old_status <> G_UMP_DEFERRED_STATUS) THEN
2835 -- Unit Effectivity has not been deferred: uptake
2836 l_due_date_changed := true;
2837
2838 END IF;
2839 END IF;
2840 END IF;
2841
2842 IF (l_valid_flag = false) THEN
2843 -- At least one Validation has failed: No need to do any further processing
2844 RAISE FND_API.G_EXC_ERROR;
2845 END IF;
2846
2847 IF (l_instance_changed = true OR l_status_changed = true OR l_due_date_changed = true) THEN
2848 -- Apply changes to the SR Unit Effectivity
2849 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2850 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'Changes have happened.');
2851 IF (l_instance_changed = true) THEN
2852 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'l_instance_changed = Y');
2853 ELSE
2854 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'l_instance_changed = N');
2855 END IF;
2856 IF (l_status_changed = true) THEN
2857 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'l_status_changed = Y');
2858 ELSE
2859 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'l_status_changed = N');
2860 END IF;
2861 IF (l_due_date_changed = true) THEN
2862 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'l_due_date_changed = Y');
2863 ELSE
2864 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'l_due_date_changed = N');
2865 END IF;
2866 END IF;
2867 Update_SR_Unit_Effectivity(p_sr_ue_id => p_sr_ue_id,
2868 p_due_date_flag => l_due_date_changed,
2869 p_new_due_date => l_new_due_date,
2870 p_instance_flag => l_instance_changed,
2871 p_new_instance_id => l_new_instance,
2872 p_status_flag => l_status_changed,
2873 p_new_status_code => l_new_ue_status,
2874 x_assigned_to_visit_flag => l_assigned,
2875 x_new_tolerance_flag => l_new_tolerance_flag);
2876
2877 IF (l_due_date_changed = true) THEN
2878 -- Propagate Due Date changes to the UEs of all associated MRs
2879 Handle_MR_UE_Date_Change(p_sr_ue_id => p_sr_ue_id,
2880 p_assigned_to_visit_flag => l_assigned,
2881 p_new_tolerance_flag => l_new_tolerance_flag,
2882 p_new_due_date => l_new_due_date);
2883 END IF;
2884 ELSE
2885 -- No Changes to Update
2886 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2887 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'No change to instance, due date or status');
2888 END IF;
2889 END IF;
2890
2891 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2892 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
2893 END IF;
2894
2895 -- Call this API to Sync up SR summary updates with Workorder Description
2896 Handle_Summary_Update(
2897 p_sr_ue_id => p_sr_ue_id
2898 );
2899
2900 END Handle_Attribute_Changes;
2901
2902 ----------------------------------------
2903 -- This Procedure handles the change in the item instance (customer product) of the Service Request
2904 ----------------------------------------
2905 PROCEDURE Handle_Instance_Change(
2906 p_sr_ue_id IN NUMBER,
2907 p_old_instance_id IN NUMBER,
2908 p_x_valid_flag IN OUT NOCOPY BOOLEAN, -- This flag will never be set to true in this procedure
2909 x_instance_changed OUT NOCOPY BOOLEAN,
2910 p_defer_from_ue_id IN NUMBER) IS
2911
2912 CURSOR get_rel_count_csr IS
2913 SELECT COUNT(*) FROM AHL_UE_RELATIONSHIPS
2914 WHERE UE_ID = p_sr_ue_id;
2915
2916 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Handle_Instance_Change';
2917
2918 l_temp_count NUMBER := 0;
2919 l_new_instance_id NUMBER := CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.customer_product_id;
2920
2921 BEGIN
2922 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2923 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
2924 END IF;
2925 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2926 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, L_DEBUG_KEY, 'p_old_instance_id = ' || p_old_instance_id || ', l_new_instance_id = ' || l_new_instance_id);
2927 END IF;
2928 -- Initialize the Instance Changed Flag to false
2929 x_instance_changed := false;
2930
2931 IF (l_new_instance_id IS NULL) THEN
2932 p_x_valid_flag := false;
2933 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_INST_NULL');
2934 FND_MSG_PUB.ADD;
2935 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2936 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2937 END IF;
2938 ELSIF (l_new_instance_id <> p_old_instance_id) THEN
2939 -- Instance has changed: Validate
2940 --apattark begin changes for bug #9166304
2941 IF (p_defer_from_ue_id IS NOT NULL) THEN
2942 p_x_valid_flag := false;
2943 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_INST_CHG_DEFERRED');
2944 FND_MSG_PUB.ADD;
2945 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2946 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2947 END IF;
2948 END IF;
2949 --apattark end changes for bug #9166304
2950 IF (CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.status_flag = G_SR_CLOSED_FLAG) THEN
2951 p_x_valid_flag := false;
2952 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_INST_CHG_CLOSED');
2953 FND_MSG_PUB.ADD;
2954 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2955 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2956 END IF;
2957
2958 ELSIF (CS_SERVICEREQUEST_PVT.user_hooks_rec.status_id = G_SR_PLANNED_STATUS_ID) THEN
2959 p_x_valid_flag := false;
2960 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_INST_CHG_PLANNED');
2961 FND_MSG_PUB.ADD;
2962 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2963 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2964 END IF;
2965 ELSE
2966 OPEN get_rel_count_csr;
2967 FETCH get_rel_count_csr INTO l_temp_count;
2968 CLOSE get_rel_count_csr;
2969 IF (l_temp_count > 0) THEN
2970 p_x_valid_flag := false;
2971 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_INST_CHG_HAS_MRS');
2972 FND_MSG_PUB.ADD;
2973 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2974 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
2975 END IF;
2976 ELSE
2977 -- All validations passed
2978 x_instance_changed := true;
2979 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2980 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY, 'Instance has changed from ' || p_old_instance_id || ' to ' || l_new_instance_id || '. All instance validations have succeeded.');
2981 END IF;
2982 END IF; -- Status Check
2983 END IF; -- Old <> New Check
2984 END IF; -- New Instance Null Check
2985
2986 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2987 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
2988 END IF;
2989
2990 END Handle_Instance_Change;
2991
2992 ----------------------------------------
2993 -- This Procedure handles the change in the status of the Service Request
2994 ----------------------------------------
2995 PROCEDURE Handle_Status_Change(
2996 p_sr_ue_id IN NUMBER,
2997 p_old_ue_status IN AHL_UNIT_EFFECTIVITIES_B.STATUS_CODE%TYPE,
2998 p_x_valid_flag IN OUT NOCOPY BOOLEAN, -- This flag will never be set to true in this procedure
2999 x_status_changed OUT NOCOPY BOOLEAN,
3000 x_new_ue_status OUT NOCOPY AHL_UNIT_EFFECTIVITIES_B.STATUS_CODE%TYPE) IS
3001
3002 CURSOR get_tasks_for_ue_csr IS
3003 SELECT 'x' from AHL_VISIT_TASKS_B
3004 where UNIT_EFFECTIVITY_ID = p_sr_ue_id;
3005
3006 CURSOR get_rel_count_csr IS
3007 SELECT COUNT(*) FROM AHL_UE_RELATIONSHIPS
3008 WHERE UE_ID = p_sr_ue_id;
3009
3010 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Handle_Status_Change';
3011
3012 l_temp_count NUMBER := 0;
3013 l_dummy VARCHAR2(1);
3014 l_assigned BOOLEAN;
3015
3016 BEGIN
3017 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3018 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.begin', 'Entering Procedure');
3019 END IF;
3020 -- Initialize the Status Changed Flag to false
3021 x_status_changed := false;
3022
3023 IF (CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.status_flag = G_SR_CLOSED_FLAG) THEN
3024 -- SR is or is being Closed
3025 OPEN get_tasks_for_ue_csr;
3026 FETCH get_tasks_for_ue_csr INTO l_dummy;
3027 IF(get_tasks_for_ue_csr%FOUND) THEN
3028 -- SR UE Assigned to a visit
3029 IF (p_old_ue_status IS NULL OR (p_old_ue_status NOT IN (G_UMP_ACCOMPLISHED_STATUS, G_UMP_TERMINATED_STATUS, G_UMP_MR_TERMINATE_STATUS))) THEN
3030 -- UE Neither accomplished nor terminated
3031 p_x_valid_flag := false;
3032 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_TASK_NOT_ACC');
3033 FND_MSG_PUB.ADD;
3034 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3035 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
3036 END IF;
3037 ELSE
3038 -- Unit Effectivities already accomplished: No impact on UMP, Allow the SR to be closed.
3039 null;
3040 END IF; -- UE accomplished or terminated Status check
3041 ELSE
3042 -- Not assigned to any Visit: Check if MRs are associated
3043 OPEN get_rel_count_csr;
3044 FETCH get_rel_count_csr INTO l_temp_count;
3045 CLOSE get_rel_count_csr;
3046 IF (l_temp_count > 0) THEN
3047 -- SR has associated MRs, but the SR UE has not been assigned to any visit.
3048 p_x_valid_flag := false;
3049 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_MRS_NOT_ACC');
3050 FND_MSG_PUB.ADD;
3051 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3052 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
3053 END IF;
3054 ELSE
3055 -- No associated MRs
3056 IF ((p_old_ue_status IS NULL) OR (p_old_ue_status <> G_UMP_SR_CLOSED_STATUS)) THEN
3057 x_status_changed := true;
3058 x_new_ue_status := G_UMP_SR_CLOSED_STATUS;
3059 ELSE
3060 -- Already Closed: No need to update UE.
3061 null;
3062 END IF; -- Old UE Status is SR-CLOSED or not
3063 END IF; -- Has associated MRs or not
3064 END IF; -- SR UE assigned to a visit or not
3065 CLOSE get_tasks_for_ue_csr;
3066 ELSE
3067 -- SR is Open
3068 -- JR: Added the following check on 10/21/2003 to prevent
3069 -- reopening an SR whose UE is already SR_CLOSED
3070 IF (p_old_ue_status = G_UMP_SR_CLOSED_STATUS) THEN
3071 -- Attempting to open an SR whose UE is already SR_CLOSED.
3072 p_x_valid_flag := false;
3073 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_UE_SR_CLSD');
3074 FND_MSG_PUB.ADD;
3075 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3076 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
3077 END IF;
3078 ELSE
3079 OPEN get_tasks_for_ue_csr;
3080 FETCH get_tasks_for_ue_csr INTO l_dummy;
3081 IF(get_tasks_for_ue_csr%FOUND) THEN
3082 l_assigned := true;
3083 ELSE
3084 l_assigned := false;
3085 END IF;
3086 CLOSE get_tasks_for_ue_csr;
3087 IF (CS_SERVICEREQUEST_PVT.user_hooks_rec.status_id = G_SR_PLANNED_STATUS_ID) THEN
3088 IF (l_assigned = false) THEN
3089 -- SR is being moved to Planned status without assigning SR UE to any visit
3090 p_x_valid_flag := false;
3091 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_NOT_ASSND');
3092 FND_MSG_PUB.ADD;
3093 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3094 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
3095 END IF;
3096 END IF; -- Not assigned
3097 ELSE
3098 IF (l_assigned = true) THEN
3099 -- SR is being moved to a not-planned status while SR UE has already been assigned to a visit
3100 p_x_valid_flag := false;
3101 FND_MESSAGE.Set_Name('AHL', 'AHL_UMP_SR_ALREADY_ASSND');
3102 FND_MSG_PUB.ADD;
3103 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3104 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
3105 END IF;
3106 END IF; -- Already Assigned
3107 END IF; -- SR is in Planned Status or Not
3108 END IF; -- Old UE Status SR-CLOSED or not
3109 END IF; -- If SR is Closed or not
3110
3111 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3112 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, L_DEBUG_KEY || '.end', 'Exiting Procedure');
3113 END IF;
3114
3115 END Handle_Status_Change;
3116
3117 --------------------------------------------------------------------------------
3118 -- This Procedure Updates WO Description if corresponding SR Summary changes.
3119 -- Happens only for following cases
3120 -- 1. Non-Routines(NR) created on the shop floor.
3121 -- 2. Non-Routines with no MRs associated and planned from UMP into a Visit.
3122 --------------------------------------------------------------------------------
3123 PROCEDURE Handle_Summary_Update(
3124 p_sr_ue_id IN NUMBER
3125 )IS
3126
3127 --Check if the SR fits in any of below conditions
3128 -- 1. Non-Routines(NR) created on the shop floor.
3129 -- 2. Non-Routines with no MRs associated and planned from UMP into a Visit.
3130
3131 --Get Corresponding NR Workorders for the given SR Ue id.
3132 CURSOR c_get_ue_wo(p_sr_ue_id IN NUMBER)
3133 IS
3134 SELECT
3135 WO.workorder_id,
3136 WIPJ.description,
3137 VTSK.visit_task_number,
3138 VST.visit_number
3139 FROM
3140 AHL_WORKORDERS WO,
3141 WIP_DISCRETE_JOBS WIPJ,
3142 AHL_VISIT_TASKS_B VTSK,
3143 AHL_VISITS_B VST,
3144 AHL_UNIT_EFFECTIVITIES_B UE
3145 WHERE
3146 WO.status_code not in (4,12,7,5) AND -- Completed/Closed/Cancelled/Completed_No_Charge
3147 WO.wip_entity_id = WIPJ.wip_entity_id AND
3148 WO.visit_task_id = VTSK.visit_task_id AND
3149 WO.visit_id = VST.visit_id AND
3150 VTSK.unit_effectivity_id = UE.Unit_effectivity_id AND
3151 UE.Unit_effectivity_id = p_sr_ue_id AND
3152 UE.manually_planned_flag = 'Y' AND
3153 UE.cs_incident_id IS NOT NULL AND
3154 NOT EXISTS (SELECT
3155 'X'
3156 FROM
3157 AHL_UE_RELATIONSHIPS UER
3158 WHERE
3159 UER.related_ue_id = UE.Unit_effectivity_id OR
3160 UER.ue_id = UE.Unit_effectivity_id);
3161
3162
3163 --Get Summary corresponding to SR UE.
3164 CURSOR c_get_SR_details(p_sr_ue_id IN NUMBER)
3165 IS
3166 SELECT
3167 CSIA.summary,
3168 CSIT.name -- incident type name.
3169 FROM
3170 CS_INCIDENTS_ALL CSIA,
3171 CS_INCIDENT_TYPES_VL CSIT,
3172 AHL_UNIT_EFFECTIVITIES_B UE
3173 WHERE
3174 UE.unit_effectivity_id = p_sr_ue_id AND
3175 CSIA.incident_id = ue.cs_incident_id AND
3176 CSIT.incident_type_id = CSIA.incident_type_id;
3177
3178
3179 -- declare all local variables for the procedure.
3180 l_return_status VARCHAR2(1);
3181 l_msg_count NUMBER;
3182 l_msg_data VARCHAR2(40);
3183 l_sr_summary VARCHAR2(240);
3184 l_sr_type VARCHAR2(30);
3185 l_wo_description VARCHAR2(240);
3186 l_count NUMBER;
3187 --l_exists VARCHAR2(1);
3188 l_prd_workorder_tbl AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_TBL;
3189 l_prd_workorder_rel_tbl AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REL_TBL;
3190
3191 L_DEBUG_KEY CONSTANT VARCHAR2(150) := G_LOG_PREFIX || '.Handle_Summary_Update';
3192
3193 BEGIN
3194
3195 l_count := 1;
3196
3197 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3198 FND_LOG.STRING(
3199 FND_LOG.LEVEL_STATEMENT,
3200 L_DEBUG_KEY,
3201 'Entering the procedure Handle_Summary_Update ..'
3202 );
3203 END IF;
3204
3205 -- Check if the SR is one of the following
3206 -- 1. Non-Routines(NR) created on the shop floor.
3207 -- 2. Non-Routines with no MRs associated and planned from UMP into a Visit.
3208 --OPEN c_check_SR_rel(p_sr_ue_id);
3209 --FETCH c_check_SR_rel INTO l_exists;
3210 --CLOSE c_check_SR_rel;
3211
3212 -- Manually fetching the SR Summary from UE table because SR doesnt
3213 OPEN c_get_SR_details(p_sr_ue_id);
3214 FETCH c_get_SR_details INTO l_sr_summary, l_sr_type;
3215 CLOSE c_get_SR_details;
3216 --l_sr_summary := CS_SERVICEREQUEST_PVT.USER_HOOKS_REC.summary;
3217 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3218
3219 FND_LOG.STRING(
3220 FND_LOG.LEVEL_STATEMENT,
3221 L_DEBUG_KEY,
3222 'l_sr_summary -->'||l_sr_summary
3223 );
3224 FND_LOG.STRING(
3225 FND_LOG.LEVEL_STATEMENT,
3226 L_DEBUG_KEY,
3227 'l_sr_type -->'||l_sr_type
3228 );
3229
3230 END IF;
3231
3232 --Concatenate SR summary and SR type to be of size <= 240 chars
3233 --since workorder description is of size 240 chars.
3234 l_wo_description := SUBSTRB(l_sr_type || ' - ' ||l_sr_summary, 1, 240);
3235
3236 -- Get the workorders for SR if it exists.
3237 FOR ue_wo_rec IN c_get_ue_wo(p_sr_ue_id)
3238 LOOP
3239 IF ue_wo_rec.description <> l_wo_description THEN
3240 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3241 FND_LOG.STRING(
3242 FND_LOG.LEVEL_STATEMENT,
3243 L_DEBUG_KEY,
3244 'ue_wo_rec.workorder_id -->'||ue_wo_rec.workorder_id
3245 );
3246 END IF;
3247 l_prd_workorder_tbl(l_count).batch_id := ue_wo_rec.visit_number;
3248 l_prd_workorder_tbl(l_count).header_id := ue_wo_rec.visit_task_number;
3249 l_prd_workorder_tbl(l_count).workorder_id := ue_wo_rec.workorder_id;
3250 l_prd_workorder_tbl(l_count).job_description := l_wo_description;
3251 l_prd_workorder_tbl(l_count).dml_operation := 'U';
3252 l_count := l_count + 1;
3253 END IF;
3254 END LOOP;
3255
3256 IF l_prd_workorder_tbl.COUNT > 0
3257 THEN
3258 -- Update the workorders
3259 AHL_PRD_WORKORDER_PVT.Process_Jobs
3260 (
3261 p_api_version => 1.0,
3262 p_init_msg_list => FND_API.G_FALSE,
3263 p_commit => FND_API.G_FALSE,
3264 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
3265 p_default => FND_API.G_TRUE,
3266 p_module_type => 'API',
3267 x_return_status => l_return_status,
3268 x_msg_count => l_msg_count,
3269 x_msg_data => l_msg_data,
3270 p_x_prd_workorder_tbl => l_prd_workorder_tbl,
3271 p_prd_workorder_rel_tbl=> l_prd_workorder_rel_tbl
3272 );
3273
3274 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
3275 THEN
3276 RAISE FND_API.G_EXC_ERROR;
3277 IF (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3278 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR, L_DEBUG_KEY, FALSE);
3279 END IF;
3280 END IF;
3281 END IF;
3282
3283 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
3284 FND_LOG.STRING(
3285 FND_LOG.LEVEL_STATEMENT,
3286 L_DEBUG_KEY,
3287 'Exiting the procedure Handle_Summary_Update ..'
3288 );
3289 END IF;
3290 END Handle_Summary_Update;
3291
3292 -------------------------------------
3293 -- End Local Procedure Definitions --
3294 -------------------------------------
3295
3296 END AHL_UMP_SR_PVT;