DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_UMP_SR_PVT

Source


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