DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_MEL_CDL_ATA_SEQS_PVT

Source


1 PACKAGE BODY AHL_MEL_CDL_ATA_SEQS_PVT AS
2 /* $Header: AHLVATAB.pls 120.11.12020000.2 2012/12/11 03:19:59 prakkum ship $ */
3 
4 ------------------------------------
5 -- Common constants and variables --
6 ------------------------------------
7 l_dummy_varchar             VARCHAR2(1);
8 l_dummy_number      NUMBER;
9 -----------------------------------
10 -- Non-spec Procedure Signatures --
11 -----------------------------------
12 PROCEDURE Check_Ata_Seq_Exists
13 (
14     p_ata_sequence_id           IN  NUMBER,
15     p_ata_object_version        IN  NUMBER
16 );
17 
18 PROCEDURE Convert_Value_To_Id
19 (
20     p_x_ata_sequences_rec       IN OUT NOCOPY   Ata_Sequence_Rec_Type
21 );
22 
23 PROCEDURE Check_Mel_Cdl_Status
24 (
25     p_mel_cdl_header_id         IN  NUMBER,
26     p_ata_sequence_id           IN  NUMBER
27 );
28 
29 PROCEDURE Check_MO_Proc_Exists
30 (
31     p_mo_procedure_id           IN  NUMBER,
32     p_mo_proc_object_version        IN  NUMBER
33 );
34 
35 PROCEDURE Check_Inter_Reln_Exists
36 (
37     p_mel_cdl_relationship_id           IN  NUMBER,
38     p_rel_object_version        IN  NUMBER
39 );
40 
41 --These are the common checks used for both Process_Mo_Procedure and Process_Ata_Relations
42 --This cursor checks if Ata Sequence Exists in mel_cdl_ata_sequences table
43 CURSOR validate_ata_seq
44 (
45     ata_seq_id number
46 )
47 IS
48     SELECT 'X'
49     FROM
50         ahl_mel_cdl_ata_sequences
51     WHERE
52         mel_cdl_ata_sequence_id = ata_seq_id;
53 
54 -- This cursor is used to check if the MEL/CDL status is not in Draft and Approve Rejected
55 CURSOR val_mel_cdl_status
56 (
57     ata_seq_id number
58 )
59 IS
60     SELECT
61         hdr.status_code
62     FROM
63         ahl_mel_cdl_ata_sequences ata,
64         ahl_mel_cdl_headers hdr
65     WHERE
66         mel_cdl_ata_sequence_id = ata_seq_id
67         AND ata.mel_cdl_header_id = hdr. mel_cdl_header_id;
68 
69 ------------------------------------------
70 -- Spec Procedure Process_Ata_Sequences --
71 ------------------------------------------
72 PROCEDURE Process_Ata_Sequences
73 (
74     -- Standard IN params
75     p_api_version               IN          NUMBER,
76     p_init_msg_list             IN          VARCHAR2    := FND_API.G_FALSE,
77     p_commit                    IN          VARCHAR2    := FND_API.G_FALSE,
78     p_validation_level          IN          NUMBER      := FND_API.G_VALID_LEVEL_FULL,
79     p_default                   IN          VARCHAR2    := FND_API.G_FALSE,
80     p_module_type               IN          VARCHAR2    := NULL,
81     -- Standard OUT params
82     x_return_status             OUT NOCOPY  VARCHAR2,
83     x_msg_count                 OUT NOCOPY  NUMBER,
84     x_msg_data                  OUT NOCOPY  VARCHAR2,
85     -- Procedure IN, OUT, IN/OUT params
86     p_x_ata_sequences_tbl       IN OUT NOCOPY   Ata_Sequence_Tbl_Type
87 )
88 IS
89     -- Declare local variables
90     l_api_name      CONSTANT    VARCHAR2(30)    := 'Process_Ata_Sequences';
91     l_api_version   CONSTANT    NUMBER          := 1.0;
92     l_debug_module  CONSTANT    VARCHAR2(100)   := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
93 
94     l_return_status             VARCHAR2(1);
95     l_msg_count                 NUMBER;
96     l_msg_data                  VARCHAR2(2000);
97 
98     -- Define cursors
99     CURSOR get_ata_details
100     (
101         p_ata_sequence_id number
102     )
103     IS
104     SELECT  ata_code
105     FROM    ahl_mel_cdl_ata_sequences
106     WHERE   mel_cdl_ata_sequence_id = p_ata_sequence_id;
107 
108     l_ata_code                  VARCHAR2(30);
109 
110     CURSOR check_ata_unique
111     (
112         p_mel_cdl_header_id number,
113         p_ata_code varchar2
114     )
115     IS
116     SELECT  'x'
117     FROM    ahl_mel_cdl_ata_sequences
118     WHERE   mel_cdl_header_id = p_mel_cdl_header_id AND
119             ata_code = p_ata_code;
120 
121     CURSOR get_ata_notes
122     (
123         p_ata_sequence_id number
124     )
125     IS
126     SELECT  jtf_note_id, note_status
127     FROM    jtf_notes_vl
128     WHERE   source_object_id = p_ata_sequence_id AND
129             source_object_code = 'AHL_MEL_CDL';
130 
131     l_rec_idx                   NUMBER;
132 
133     l_note_rec                  get_ata_notes%rowtype;
134     l_jtf_note_id               NUMBER;
135     l_note_contexts_tbl         JTF_NOTES_PUB.jtf_note_contexts_tbl_type;
136 
137 BEGIN
138     -- Standard start of API savepoint
139     SAVEPOINT Process_Ata_Sequences_SP;
140 
141     -- Initialize return status to success before any code logic/validation
142     x_return_status := FND_API.G_RET_STS_SUCCESS;
143 
144     -- Standard call to check for call compatibility
145     IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
146     THEN
147         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
148     END IF;
149 
150     -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
151     IF FND_API.TO_BOOLEAN(p_init_msg_list)
152     THEN
153         FND_MSG_PUB.INITIALIZE;
154     END IF;
155 
156     -- Log API entry point
157     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
158     THEN
159         fnd_log.string
160         (
161             fnd_log.level_procedure,
162             l_debug_module,
163             'At the start of PLSQL procedure'
164         );
165     END IF;
166 
167     -- API body starts here
168     IF (p_x_ata_sequences_tbl.COUNT > 0)
169     THEN
170         -- Iterate all delete records
171         FOR l_rec_idx IN p_x_ata_sequences_tbl.FIRST..p_x_ata_sequences_tbl.LAST
172         LOOP
173             -- All common validations can be pushed into the initial 1st loop, since anyway the entire loop will be iterated
174 
175             -- Verify DML operation flag is right...
176             IF (p_x_ata_sequences_tbl(l_rec_idx).dml_operation NOT IN ('C', 'U', 'D'))
177             THEN
178                 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_COM_INVALID_DML_REC');
179                 -- Invalid DML operation FIELD specified
180                 FND_MESSAGE.SET_TOKEN('FIELD', p_x_ata_sequences_tbl(l_rec_idx).dml_operation);
181                 FND_MSG_PUB.ADD;
182                 RAISE FND_API.G_EXC_ERROR;
183             END IF;
184 
185         -- Verify MEL/CDL is in DRAFT status and  change to DRAFT if APPROVAL_REJECTED; Also verify whether MEL/CDL information is provided
186             Check_Mel_Cdl_Status(p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_header_id, p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id);
187 
188             -- Delete specific validations and processing
189             IF (p_x_ata_sequences_tbl(l_rec_idx).dml_operation = 'D')
190             THEN
191                 -- For U/D, verify ATA sequence id + ovn is correct
192                 Check_Ata_Seq_Exists(p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id, p_x_ata_sequences_tbl(l_rec_idx).object_version_number);
193 
194                 -- Delete JTF Note(s) associated with the ATA sequence
195                 /* Cannot use the PVT API directly, following up with CAC Notes team on this...
196                 FOR l_note_rec IN get_ata_notes(p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id)
197                 LOOP
198                     CAC_NOTES_PVT.delete_note
199                     (
200                         l_note_rec.jtf_note_id,
201                         l_return_status,
202                         l_msg_count,
203                         l_msg_data
204                     );
205 
206                     -- Check Error Message stack.
207                     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
208                     THEN
209                         IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)
210                         THEN
211                             fnd_log.string
212                             (
213                                 fnd_log.level_error,
214                                 l_debug_module,
215                                 x_msg_data
216                             );
217                         END IF;
218 
219                         -- Throwing unexpected error since this delete should have happened without any hiccup
220                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
221                     END IF;
222                 END LOOP;
223                 */
224 
225                 -- Delete inter-relationships with other ATA sequences
226                 DELETE FROM ahl_mel_cdl_relationships
227                 WHERE ata_sequence_id = p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id
228                 OR related_ata_sequence_id = p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id;
229 
230                 -- Delete Inter-relationships associated with the ATA sequence
231                 DELETE FROM ahl_mel_cdl_mo_procedures
232                 WHERE ata_sequence_id = p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id;
233 
234                 -- Delete the ATA sequence itself
235                 DELETE FROM ahl_mel_cdl_ata_sequences
236                 WHERE mel_cdl_ata_sequence_id = p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id;
237 
238                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
239                 THEN
240                     fnd_log.string
241                     (
242                         fnd_log.level_statement,
243                         l_debug_module,
244                         'Deleted ATA sequence [ata_sequence_id='||p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id||'] and all its associations'
245                     );
246                 END IF;
247             END IF;
248         END LOOP;
249 
250         -- Iterate all update records
251         FOR l_rec_idx IN p_x_ata_sequences_tbl.FIRST..p_x_ata_sequences_tbl.LAST
252         LOOP
253             IF (p_x_ata_sequences_tbl(l_rec_idx).dml_operation = 'U')
254             THEN
255                 -- For U/D, verify ATA sequence id + ovn is correct
256                 Check_Ata_Seq_Exists(p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id, p_x_ata_sequences_tbl(l_rec_idx).object_version_number);
257 
258                 -- For update, ata_code should not change
259                 IF (p_x_ata_sequences_tbl(l_rec_idx).dml_operation = 'U')
260                 THEN
261                     OPEN get_ata_details(p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id);
262                     FETCH get_ata_details INTO l_ata_code;
263                     CLOSE get_ata_details;
264 
265                     IF (l_ata_code <> p_x_ata_sequences_tbl(l_rec_idx).ata_code)
266                     THEN
267                         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_ATA_CHG_UPD');
268                         -- Cannot modify System Sequence from "OLDATA" to "ATA" for existing record
269                         FND_MESSAGE.SET_TOKEN('OLDATA', l_ata_code);
270                         FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
271                         FND_MSG_PUB.ADD;
272                         RAISE FND_API.G_EXC_ERROR;
273                     END IF;
274                 END IF;
275 
276                 -- For C/U, verify ATA code is not null and correct, Repair Category is not null and correct, Installed Number and  Dispatch Number are okay
277                 Convert_Value_To_Id(p_x_ata_sequences_tbl(l_rec_idx));
278 --amsriniv. Begin
279 --amsriniv. Bug 6659422
280 /*
281                 IF (p_x_ata_sequences_tbl(l_rec_idx).installed_number IS NULL OR p_x_ata_sequences_tbl(l_rec_idx).installed_number = FND_API.G_MISS_NUM)
282                 THEN
283                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_INST_NUM_MAND');
284                     -- Installed Number for System Sequence "ATA" is invalid
285                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
286                     FND_MSG_PUB.ADD;
287                 END IF;
288 
289                 IF (p_x_ata_sequences_tbl(l_rec_idx).dispatch_number IS NULL OR p_x_ata_sequences_tbl(l_rec_idx).dispatch_number = FND_API.G_MISS_NUM)
290                 THEN
291                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_DISP_NUM_MAND');
292                     -- Dispatch Number for System Sequence "ATA" is invalid
293                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
294                     FND_MSG_PUB.ADD;
295                 END IF;
296 */
297                 IF ((p_x_ata_sequences_tbl(l_rec_idx).dispatch_number IS NOT NULL
298                 AND p_x_ata_sequences_tbl(l_rec_idx).dispatch_number < 0)
299                 OR (p_x_ata_sequences_tbl(l_rec_idx).installed_number IS NOT NULL
300                 AND p_x_ata_sequences_tbl(l_rec_idx).installed_number < 0))
301                 THEN
302                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_DISP_INST_LESS_0');
303                     -- Both Dispatch Number "DISP" and Installed Number "INST" for System Sequence "ATA" should be positive integers
304                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
305                     FND_MESSAGE.SET_TOKEN('DISP', p_x_ata_sequences_tbl(l_rec_idx).dispatch_number);
306                     FND_MESSAGE.SET_TOKEN('INST', p_x_ata_sequences_tbl(l_rec_idx).installed_number);
307                     FND_MSG_PUB.ADD;
308                 END IF;
309 
310                 IF (p_x_ata_sequences_tbl(l_rec_idx).dispatch_number IS NOT NULL AND
311                  p_x_ata_sequences_tbl(l_rec_idx).installed_number IS NOT NULL AND
312                  p_x_ata_sequences_tbl(l_rec_idx).dispatch_number > p_x_ata_sequences_tbl(l_rec_idx).installed_number)
313                 THEN
314                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_DISP_MORE_INST');
315                     -- Dispatch Number "DISP" for System Sequence "ATA" should be less than Installed Number "INST"
316                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
317                     FND_MESSAGE.SET_TOKEN('DISP', p_x_ata_sequences_tbl(l_rec_idx).dispatch_number);
318                     FND_MESSAGE.SET_TOKEN('INST', p_x_ata_sequences_tbl(l_rec_idx).installed_number);
319                     FND_MSG_PUB.ADD;
320                 END IF;
321 -- Fix for Bug# 8591484 Start
322 /*
323                 IF (p_x_ata_sequences_tbl(l_rec_idx).dispatch_number IS NOT NULL AND
324                  p_x_ata_sequences_tbl(l_rec_idx).installed_number IS NULL)
325                 THEN
326                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_INST_MISSING');
327                     -- Installed Number should be entered when Required(Dispatch) Number is entered.
328                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
329                     FND_MESSAGE.SET_TOKEN('DISP', p_x_ata_sequences_tbl(l_rec_idx).dispatch_number);
330                     FND_MESSAGE.SET_TOKEN('INST', p_x_ata_sequences_tbl(l_rec_idx).installed_number);
331                     FND_MSG_PUB.ADD;
332                 END IF;
333 */
334 -- Fix for Bug# 8591484 End
335 --amsriniv. End
336                 -- Check Error Message stack.
337                 x_msg_count := FND_MSG_PUB.count_msg;
338                 IF (x_msg_count > 0)
339                 THEN
340                     RAISE FND_API.G_EXC_ERROR;
341                 END IF;
342 
343                 -- Default attributes for update
344                 p_x_ata_sequences_tbl(l_rec_idx).object_version_number  := p_x_ata_sequences_tbl(l_rec_idx).object_version_number + 1;
345 
346                 -- Update record in backend
347                 UPDATE  ahl_mel_cdl_ata_sequences
348                 SET     OBJECT_VERSION_NUMBER   = p_x_ata_sequences_tbl(l_rec_idx).object_version_number,
349                         LAST_UPDATE_DATE        = sysdate,
350                         LAST_UPDATED_BY         = fnd_global.user_id,
351                         LAST_UPDATE_LOGIN       = fnd_global.login_id,
352                         REPAIR_CATEGORY_ID      = p_x_ata_sequences_tbl(l_rec_idx).repair_category_id,
353                         INSTALLED_NUMBER        = p_x_ata_sequences_tbl(l_rec_idx).installed_number,
354                         DISPATCH_NUMBER         = p_x_ata_sequences_tbl(l_rec_idx).dispatch_number,
355                         ATTRIBUTE_CATEGORY      = p_x_ata_sequences_tbl(l_rec_idx).attribute_category,
356                         ATTRIBUTE1              = p_x_ata_sequences_tbl(l_rec_idx).attribute1,
357                         ATTRIBUTE2              = p_x_ata_sequences_tbl(l_rec_idx).attribute2,
358                         ATTRIBUTE3              = p_x_ata_sequences_tbl(l_rec_idx).attribute3,
359                         ATTRIBUTE4              = p_x_ata_sequences_tbl(l_rec_idx).attribute4,
360                         ATTRIBUTE5              = p_x_ata_sequences_tbl(l_rec_idx).attribute5,
361                         ATTRIBUTE6              = p_x_ata_sequences_tbl(l_rec_idx).attribute6,
362                         ATTRIBUTE7              = p_x_ata_sequences_tbl(l_rec_idx).attribute7,
363                         ATTRIBUTE8              = p_x_ata_sequences_tbl(l_rec_idx).attribute8,
364                         ATTRIBUTE9              = p_x_ata_sequences_tbl(l_rec_idx).attribute9,
365                         ATTRIBUTE10             = p_x_ata_sequences_tbl(l_rec_idx).attribute10,
366                         ATTRIBUTE11             = p_x_ata_sequences_tbl(l_rec_idx).attribute11,
367                         ATTRIBUTE12             = p_x_ata_sequences_tbl(l_rec_idx).attribute12,
368                         ATTRIBUTE13             = p_x_ata_sequences_tbl(l_rec_idx).attribute13,
369                         ATTRIBUTE14             = p_x_ata_sequences_tbl(l_rec_idx).attribute14,
370                         ATTRIBUTE15             = p_x_ata_sequences_tbl(l_rec_idx).attribute15
371                 WHERE   MEL_CDL_ATA_SEQUENCE_ID = p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id;
372 
373                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
374                 THEN
375                     fnd_log.string
376                     (
377                         fnd_log.level_statement,
378                         l_debug_module,
379                         'Updated ATA sequence [ata_sequence_id='||p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id||']'
380                     );
381                 END IF;
382 
383                 -- Update the JTF note for Remarks...
384                 IF (p_x_ata_sequences_tbl(l_rec_idx).remarks_note IS NOT NULL AND p_x_ata_sequences_tbl(l_rec_idx).remarks_note <> FND_API.G_MISS_CHAR)
385                 THEN
386                     OPEN get_ata_notes(p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id);
387                     FETCH get_ata_notes INTO l_note_rec;
388                     -- If the JTF note for Remarks already exists, update the same or create a new one...
389                     IF (get_ata_notes%FOUND)
390                     THEN
391                         CLOSE get_ata_notes;
392 
393                         JTF_NOTES_PUB.Update_Note
394                         (
395                             p_api_version               => 1.0,
396                             p_init_msg_list             => FND_API.G_FALSE,
397                             p_commit                    => FND_API.G_FALSE,
398                             p_validation_level          => FND_API.G_VALID_LEVEL_FULL,
399                             x_return_status             => l_return_status,
400                             x_msg_count                 => l_msg_count,
401                             x_msg_data                  => l_msg_data,
402                             p_jtf_note_id               => l_note_rec.jtf_note_id,
403                             p_entered_by                => fnd_global.user_id,
404                             p_last_updated_by           => fnd_global.user_id,
405                             p_last_update_date          => sysdate,
406                             p_last_update_login         => fnd_global.login_id,
407                             p_notes                     => substr(p_x_ata_sequences_tbl(l_rec_idx).remarks_note, 1, 2000),
408                             p_notes_detail              => p_x_ata_sequences_tbl(l_rec_idx).remarks_note,
409                             p_append_flag               => 'N',
410                             p_note_status               => l_note_rec.note_status,
411                             p_note_type                 => 'AHL_MEL_CDL',
412                             p_jtf_note_contexts_tab     => l_note_contexts_tbl
413                         );
414 
415                         -- Check Error Message stack.
416                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
417                         THEN
418                             IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)
419                             THEN
420                                 fnd_log.string
421                                 (
422                                     fnd_log.level_error,
423                                     l_debug_module,
424                                     l_msg_data
425                                 );
426                             END IF;
427 
428                             -- Throwing unexpected error since this delete should have happened without any hiccup
429                             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
430                         END IF;
431 
432                         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
433                         THEN
434                             fnd_log.string
435                             (
436                                 fnd_log.level_statement,
437                                 l_debug_module,
438                                 'Updated Remarks Note [jtf_note_id='||l_note_rec.jtf_note_id||']'
439                             );
440                         END IF;
441                     ELSE
442                         CLOSE get_ata_notes;
443 
444                         JTF_NOTES_PUB.Create_Note
445                         (
446                             p_parent_note_id            => null,
447                             p_jtf_note_id               => null,
448                             p_api_version               => 1.0,
449                             p_init_msg_list             => FND_API.G_FALSE,
450                             p_commit                    => FND_API.G_FALSE,
451                             p_validation_level          => FND_API.G_VALID_LEVEL_FULL,
452                             x_return_status             => l_return_status,
453                             x_msg_count                 => l_msg_count,
454                             x_msg_data                  => l_msg_data,
455                             p_org_id                    => null,
456                             p_source_object_id          => p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id,
457                             p_source_object_code        => 'AHL_MEL_CDL',
458                             p_notes                     => substr(p_x_ata_sequences_tbl(l_rec_idx).remarks_note, 1, 2000),
459                             p_notes_detail              => p_x_ata_sequences_tbl(l_rec_idx).remarks_note,
460                             p_note_status               => 'E',
461                             p_entered_by                => fnd_global.user_id,
462                             p_entered_date              => sysdate,
463                             x_jtf_note_id               => l_jtf_note_id,
464                             p_last_updated_by           => fnd_global.user_id,
465                             p_last_update_date          => sysdate,
466                             p_created_by                => fnd_global.user_id,
467                             p_creation_date             => sysdate,
468                             p_last_update_login         => fnd_global.login_id,
469                             p_attribute1                => null,
470                             p_attribute2                => null,
471                             p_attribute3                => null,
472                             p_attribute4                => null,
473                             p_attribute5                => null,
474                             p_attribute6                => null,
475                             p_attribute7                => null,
476                             p_attribute8                => null,
477                             p_attribute9                => null,
478                             p_attribute10               => null,
479                             p_attribute11               => null,
480                             p_attribute12               => null,
481                             p_attribute13               => null,
482                             p_attribute14               => null,
483                             p_attribute15               => null,
484                             p_context                   => null,
485                             p_note_type                 => 'AHL_MEL_CDL',
486                             p_jtf_note_contexts_tab     => l_note_contexts_tbl
487                         );
488 
489                         -- Check Error Message stack.
490                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
491                         THEN
492                             IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)
493                             THEN
494                                 fnd_log.string
495                                 (
496                                     fnd_log.level_error,
497                                     l_debug_module,
498                                     l_msg_data
499                                 );
500                             END IF;
501 
502                             -- Throwing unexpected error since this delete should have happened without any hiccup
503                             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
504                         END IF;
505 
506                         IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
507                         THEN
508                             fnd_log.string
509                             (
510                                 fnd_log.level_statement,
511                                 l_debug_module,
512                                 'Create new Remarks Note with [jtf_note_id='||l_jtf_note_id||']'
513                             );
514                         END IF;
515                     END IF;
516                 END IF;
517             END IF;
518         END LOOP;
519 
520         -- Iterate all create records
521         FOR l_rec_idx IN p_x_ata_sequences_tbl.FIRST..p_x_ata_sequences_tbl.LAST
522         LOOP
523             IF (p_x_ata_sequences_tbl(l_rec_idx).dml_operation = 'C')
524             THEN
525                 -- For C/U, verify ATA code is not null and  correct, Repair Category is not null and correct, Installed Number and Dispatch Number are okay
526                 Convert_Value_To_Id(p_x_ata_sequences_tbl(l_rec_idx));
527 
528 --amsriniv. Begin
529 --amsriniv. Bug 6659422
530 /*
531                 IF (p_x_ata_sequences_tbl(l_rec_idx).installed_number IS NULL OR p_x_ata_sequences_tbl(l_rec_idx).installed_number = FND_API.G_MISS_NUM)
532                 THEN
533                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_INST_NUM_MAND');
534                     -- Installed Number for System Sequence "ATA" is invalid
535                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
536                     FND_MSG_PUB.ADD;
537                 END IF;
538 
539                 IF (p_x_ata_sequences_tbl(l_rec_idx).dispatch_number IS NULL OR p_x_ata_sequences_tbl(l_rec_idx).dispatch_number = FND_API.G_MISS_NUM)
540                 THEN
541                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_DISP_NUM_MAND');
542                     -- Dispatch Number for System Sequence "ATA" is invalid
543                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
544                     FND_MSG_PUB.ADD;
545                 END IF;
546 */
547                 IF ((p_x_ata_sequences_tbl(l_rec_idx).dispatch_number IS NOT NULL AND
548                 p_x_ata_sequences_tbl(l_rec_idx).dispatch_number < 0) OR
549                 (p_x_ata_sequences_tbl(l_rec_idx).installed_number IS NOT NULL
550                 AND p_x_ata_sequences_tbl(l_rec_idx).installed_number < 0))
551                 THEN
552                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_DISP_INST_LESS_0');
553                     -- Both Dispatch Number "DISP" and Installed Number "INST" for System Sequence "ATA" should be positive integers
554                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
555                     FND_MESSAGE.SET_TOKEN('DISP', p_x_ata_sequences_tbl(l_rec_idx).dispatch_number);
556                     FND_MESSAGE.SET_TOKEN('INST', p_x_ata_sequences_tbl(l_rec_idx).installed_number);
557                     FND_MSG_PUB.ADD;
558                 END IF;
559 
560                 IF (p_x_ata_sequences_tbl(l_rec_idx).dispatch_number IS NOT NULL AND
561                  p_x_ata_sequences_tbl(l_rec_idx).installed_number IS NOT NULL AND
562                  p_x_ata_sequences_tbl(l_rec_idx).dispatch_number > p_x_ata_sequences_tbl(l_rec_idx).installed_number)
563                 THEN
564                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_DISP_MORE_INST');
565                     -- Dispatch Number "DISP" for System Sequence "ATA" should be less than Installed Number "INST"
566                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
567                     FND_MESSAGE.SET_TOKEN('DISP', p_x_ata_sequences_tbl(l_rec_idx).dispatch_number);
568                     FND_MESSAGE.SET_TOKEN('INST', p_x_ata_sequences_tbl(l_rec_idx).installed_number);
569                     FND_MSG_PUB.ADD;
570                 END IF;
571 -- Fix for Bug# 8591484 Start
572 /*
573                 IF (p_x_ata_sequences_tbl(l_rec_idx).dispatch_number IS NOT NULL AND
574                  p_x_ata_sequences_tbl(l_rec_idx).installed_number IS NULL)
575                 THEN
576                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_INST_MISSING');
577                     -- Installed Number should be entered when Required(Dispatch) Number is entered.
578                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
579                     FND_MESSAGE.SET_TOKEN('DISP', p_x_ata_sequences_tbl(l_rec_idx).dispatch_number);
580                     FND_MESSAGE.SET_TOKEN('INST', p_x_ata_sequences_tbl(l_rec_idx).installed_number);
581                     FND_MSG_PUB.ADD;
582                 END IF;
583 */
584 -- Fix for Bug# 8591484 End
585 --amsriniv. End
586 
587 
588                 -- For create, validate whether ata_code is unique
589                 OPEN check_ata_unique(p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_header_id, p_x_ata_sequences_tbl(l_rec_idx).ata_code);
590                 FETCH check_ata_unique INTO l_dummy_varchar;
591                 IF (check_ata_unique%FOUND)
592                 THEN
593                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_ATA_EXISTS');
594                     -- System Sequence "ATA" is already associated with the MEL/CDL
595                     FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_tbl(l_rec_idx).ata_code);
596                     FND_MSG_PUB.ADD;
597                 END IF;
598                 CLOSE check_ata_unique;
599 
600                 -- Check Error Message stack.
601                 x_msg_count := FND_MSG_PUB.count_msg;
602                 IF (x_msg_count > 0)
603                 THEN
604                     RAISE FND_API.G_EXC_ERROR;
605                 END IF;
606 
607                 -- Default attributes for create
608                 p_x_ata_sequences_tbl(l_rec_idx).object_version_number  := 1;
609                 IF (p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id IS NULL)
610                 THEN
611                     SELECT ahl_mel_cdl_ata_sequences_s.NEXTVAL INTO p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id FROM DUAL;
612                 END IF;
613 
614                 -- Insert record into backend
615                 INSERT INTO ahl_mel_cdl_ata_sequences
616                 (
617                     MEL_CDL_ATA_SEQUENCE_ID,
618                     OBJECT_VERSION_NUMBER,
619                     LAST_UPDATE_DATE,
620                     LAST_UPDATED_BY,
621                     CREATION_DATE,
622                     CREATED_BY,
623                     LAST_UPDATE_LOGIN,
624                     MEL_CDL_HEADER_ID,
625                     REPAIR_CATEGORY_ID,
626                     ATA_CODE,
627                     INSTALLED_NUMBER,
628                     DISPATCH_NUMBER,
629                     ATTRIBUTE_CATEGORY,
630                     ATTRIBUTE1,
631                     ATTRIBUTE2,
632                     ATTRIBUTE3,
633                     ATTRIBUTE4,
634                     ATTRIBUTE5,
635                     ATTRIBUTE6,
636                     ATTRIBUTE7,
637                     ATTRIBUTE8,
638                     ATTRIBUTE9,
639                     ATTRIBUTE10,
640                     ATTRIBUTE11,
641                     ATTRIBUTE12,
642                     ATTRIBUTE13,
643                     ATTRIBUTE14,
644                     ATTRIBUTE15
645                 )
646                 VALUES
647                 (
648                     p_x_ata_sequences_tbl(l_rec_idx).MEL_CDL_ATA_SEQUENCE_ID,
649                     p_x_ata_sequences_tbl(l_rec_idx).OBJECT_VERSION_NUMBER,
650                     sysdate,
651                     fnd_global.user_id,
652                     sysdate,
653                     fnd_global.user_id,
654                     fnd_global.login_id,
655                     p_x_ata_sequences_tbl(l_rec_idx).MEL_CDL_HEADER_ID,
656                     p_x_ata_sequences_tbl(l_rec_idx).REPAIR_CATEGORY_ID,
657                     p_x_ata_sequences_tbl(l_rec_idx).ATA_CODE,
658                     p_x_ata_sequences_tbl(l_rec_idx).INSTALLED_NUMBER,
659                     p_x_ata_sequences_tbl(l_rec_idx).DISPATCH_NUMBER,
660                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE_CATEGORY,
661                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE1,
662                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE2,
663                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE3,
664                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE4,
665                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE5,
666                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE6,
667                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE7,
668                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE8,
669                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE9,
670                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE10,
671                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE11,
672                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE12,
673                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE13,
674                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE14,
675                     p_x_ata_sequences_tbl(l_rec_idx).ATTRIBUTE15
676                 )
677                 RETURNING MEL_CDL_ATA_SEQUENCE_ID INTO p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id;
678 
679                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
680                 THEN
681                     fnd_log.string
682                     (
683                         fnd_log.level_statement,
684                         l_debug_module,
685                         'Created new ATA sequence [ata_sequence_id='||p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id||']'
686                     );
687                 END IF;
688 
689                 -- Enter the JTF note for Remarks...
690                 IF (p_x_ata_sequences_tbl(l_rec_idx).remarks_note IS NOT NULL AND p_x_ata_sequences_tbl(l_rec_idx).remarks_note <> FND_API.G_MISS_CHAR)
691                 THEN
692                     -- Create a new JTF note for Remarks, ofcourse it cannot exist before the ATA sequence is created...
693                     JTF_NOTES_PUB.Create_Note
694                     (
695                         p_parent_note_id            => null,
696                         p_jtf_note_id               => null,
697                         p_api_version               => 1.0,
698                         p_init_msg_list             => FND_API.G_FALSE,
699                         p_commit                    => FND_API.G_FALSE,
700                         p_validation_level          => FND_API.G_VALID_LEVEL_FULL,
701                         x_return_status             => l_return_status,
702                         x_msg_count                 => l_msg_count,
703                         x_msg_data                  => l_msg_data,
704                         p_org_id                    => null,
705                         p_source_object_id          => p_x_ata_sequences_tbl(l_rec_idx).mel_cdl_ata_sequence_id,
706                         p_source_object_code        => 'AHL_MEL_CDL',
707                         p_notes                     => substr(p_x_ata_sequences_tbl(l_rec_idx).remarks_note, 1, 2000),
708                         p_notes_detail              => p_x_ata_sequences_tbl(l_rec_idx).remarks_note,
709                         p_note_status               => 'E',
710                         p_entered_by                => fnd_global.user_id,
711                         p_entered_date              => sysdate,
712                         x_jtf_note_id               => l_jtf_note_id,
713                         p_last_updated_by           => fnd_global.user_id,
714                         p_last_update_date          => sysdate,
715                         p_created_by                => fnd_global.user_id,
716                         p_creation_date             => sysdate,
717                         p_last_update_login         => fnd_global.login_id,
718                         p_attribute1                => null,
719                         p_attribute2                => null,
720                         p_attribute3                => null,
721                         p_attribute4                => null,
722                         p_attribute5                => null,
723                         p_attribute6                => null,
724                         p_attribute7                => null,
725                         p_attribute8                => null,
726                         p_attribute9                => null,
727                         p_attribute10               => null,
728                         p_attribute11               => null,
729                         p_attribute12               => null,
730                         p_attribute13               => null,
731                         p_attribute14               => null,
732                         p_attribute15               => null,
733                         p_context                   => null,
734                         p_note_type                 => 'AHL_MEL_CDL',
735                         p_jtf_note_contexts_tab     => l_note_contexts_tbl
736                     );
737 
738                     -- Check Error Message stack.
739                     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
740                     THEN
741                         IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)
742                         THEN
743                             fnd_log.string
744                             (
745                                 fnd_log.level_error,
746                                 l_debug_module,
747                                 l_msg_data
748                             );
749                         END IF;
750 
751                         -- Throwing unexpected error since this delete should have happened without any hiccup
752                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
753                     END IF;
754 
755                     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
756                     THEN
757                         fnd_log.string
758                         (
759                             fnd_log.level_statement,
760                             l_debug_module,
761                             'Create new Remarks Note with [jtf_note_id='||l_jtf_note_id||']'
762                         );
763                     END IF;
764                 END IF;
765             END IF;
766         END LOOP;
767     END IF;
768     -- API body ends here
769 
770     -- Log API exit point
771     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
772     THEN
773         fnd_log.string
774         (
775             fnd_log.level_procedure,
776             l_debug_module,
777             'At the end of PLSQL procedure'
778         );
779     END IF;
780 
781     -- Check Error Message stack.
782     x_msg_count := FND_MSG_PUB.count_msg;
783     IF (x_msg_count > 0)
784     THEN
785         RAISE FND_API.G_EXC_ERROR;
786     END IF;
787 
788     -- Commit if p_commit = FND_API.G_TRUE
789     IF FND_API.TO_BOOLEAN(p_commit)
790     THEN
791         COMMIT WORK;
792     END IF;
793 
794     -- Standard call to get message count and if count is 1, get message info
795     FND_MSG_PUB.count_and_get
796     (
797         p_count     => x_msg_count,
798         p_data      => x_msg_data,
799         p_encoded   => FND_API.G_FALSE
800     );
801 
802 EXCEPTION
803     WHEN FND_API.G_EXC_ERROR THEN
804         x_return_status := FND_API.G_RET_STS_ERROR;
805         Rollback to Process_Ata_Sequences_SP;
806         FND_MSG_PUB.count_and_get
807         (
808             p_count     => x_msg_count,
809             p_data      => x_msg_data,
810             p_encoded   => FND_API.G_FALSE
811         );
812 
813     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
814         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
815         Rollback to Process_Ata_Sequences_SP;
816         FND_MSG_PUB.count_and_get
817         (
818             p_count     => x_msg_count,
819             p_data      => x_msg_data,
820             p_encoded   => FND_API.G_FALSE
821         );
822 
823     WHEN OTHERS THEN
824         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
825         Rollback to Process_Ata_Sequences_SP;
826         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
827         THEN
828             FND_MSG_PUB.add_exc_msg
829             (
830                 p_pkg_name      => G_PKG_NAME,
831                 p_procedure_name    => 'Process_Ata_Sequences',
832                 p_error_text        => SUBSTR(SQLERRM,1,240)
833             );
834         END IF;
835         FND_MSG_PUB.count_and_get
836         (
837             p_count     => x_msg_count,
838             p_data      => x_msg_data,
839             p_encoded   => FND_API.G_FALSE
840         );
841 END Process_Ata_Sequences;
842 
843 ------------------------------------------
844 -- Spec Procedure Process_Mo_Procedures --
845 ------------------------------------------
846 PROCEDURE Process_Mo_Procedures
847 (
848     -- Standard IN params
849     p_api_version               IN          NUMBER,
850     p_init_msg_list             IN          VARCHAR2    := FND_API.G_TRUE,
851     p_commit                    IN          VARCHAR2    := FND_API.G_TRUE,
852     p_validation_level          IN          NUMBER      := FND_API.G_VALID_LEVEL_FULL,
853     p_default                   IN          VARCHAR2    := FND_API.G_FALSE,
854     p_module_type               IN          VARCHAR2    := NULL,
855     -- Standard OUT params
856     x_return_status             OUT NOCOPY  VARCHAR2,
857     x_msg_count                 OUT NOCOPY  NUMBER,
858     x_msg_data                  OUT NOCOPY  VARCHAR2,
859     -- Procedure IN, OUT, IN/OUT params
860     p_x_mo_procedures_tbl       IN OUT NOCOPY   Mo_Procedure_Tbl_Type
861 )
862 IS
863 
864     -- Define cursors
865     -- This cursor is used to validate the mr_header_id .is of type MO_Proc
866     CURSOR validate_mr_header_id
867     (
868         mr_header_id in number
869     )
870     IS
871         SELECT 'x'
872         FROM
873             ahl_mr_headers_b
874         WHERE
875             mr_header_id  = mr_header_id
876             and upper(program_type_code) = upper('MO_PROC');
877             --and upper(mr_status_code) = upper('COMPLETE')
878             --and TRUNC(SYSDATE) between TRUNC(NVL(EFFECTIVE_FROM, SYSDATE)) and TRUNC(NVL(EFFECTIVE_TO, SYSDATE));
879 
880 	 -- Define cursors
881     -- This cursor is used to validate the mr_header_id is complete and is not enddated
882     CURSOR validate_mr_header_status
883     (
884         mr_header_id in number
885     )
886     IS
887         SELECT mr_status_code
888         FROM
889             ahl_mr_headers_b
890         WHERE
891             mr_header_id  = mr_header_id
892             --and upper(program_type_code) = upper('MO_PROC')
893             and upper(mr_status_code) = upper('COMPLETE')
894 			and TRUNC(SYSDATE) between TRUNC(NVL(EFFECTIVE_FROM, SYSDATE)) and TRUNC(NVL(EFFECTIVE_TO, SYSDATE));
895 
896 
897     -- This cursor is used to cross check if mr_header_exists when given the title and version number
898     CURSOR get_mr_header_id
899     (
900         mr_title in varchar2,
901         mr_version number
902     )
903     IS
904         SELECT mr_header_id
905         FROM
906             ahl_mr_headers_b
907         WHERE
908             upper(TITLE) = upper(mr_title)
909             and version_number = mr_version
910             and TRUNC(SYSDATE) between TRUNC(NVL(EFFECTIVE_FROM, SYSDATE)) and TRUNC(NVL(EFFECTIVE_TO, SYSDATE));
911 
912     -- Declare local variables
913     l_api_name      CONSTANT    VARCHAR2(30)    := 'Process_Mo_Procedures';
914     l_api_version   CONSTANT    NUMBER          := 1.0;
915     l_debug_module  CONSTANT    VARCHAR2(100)   := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
916 
917     l_return_status             VARCHAR2(1);
918     l_msg_count                 NUMBER;
919     l_msg_data                  VARCHAR2(2000);
920     l_status                    VARCHAR2(30);
921 
922 BEGIN
923     -- Standard start of API savepoint
924     SAVEPOINT Process_Mo_Procedures_SP;
925 
926     -- Initialize return status to success before any code logic/validation
927     x_return_status := FND_API.G_RET_STS_SUCCESS;
928 
929     -- Standard call to check for call compatibility
930     IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
931     THEN
932         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
933     END IF;
934 
935     -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
936     IF FND_API.TO_BOOLEAN(p_init_msg_list)
937     THEN
938         FND_MSG_PUB.INITIALIZE;
939     END IF;
940 
941     -- Log API entry point
942     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
943     THEN
944         fnd_log.string
945         (
946             fnd_log.level_procedure,
947             l_debug_module,
948             'At the start of PLSQL procedure'
949         );
950     END IF;
951 
952     -- API body starts here
953     IF (p_x_mo_procedures_tbl.COUNT > 0)
954     THEN
955         -- Iterate all delete records
956         FOR l_rec_idx IN p_x_mo_procedures_tbl.FIRST..p_x_mo_procedures_tbl.LAST
957         LOOP
958 
959            -- Verify DML operation flag is right...
960             IF (p_x_mo_procedures_tbl(l_rec_idx).dml_operation NOT IN ( 'C', 'D'))
961             THEN
962                 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_COM_INVALID_DML_REC');
963                 -- Invalid DML operation FIELD specified
964                 FND_MESSAGE.SET_TOKEN('FIELD', p_x_mo_procedures_tbl(l_rec_idx).dml_operation);
965                 FND_MSG_PUB.ADD;
966                 RAISE FND_API.G_EXC_ERROR;
967             END IF;
968 
969             --Perform Deletion
970             IF (p_x_mo_procedures_tbl(l_rec_idx).dml_operation = 'D')
971             THEN
972 
973                 -- For U/D, verify mel_cdl_mo_procedures_id + ovn is correct
974                 Check_MO_Proc_Exists(p_x_mo_procedures_tbl(l_rec_idx).mel_cdl_mo_procedure_id, p_x_mo_procedures_tbl(l_rec_idx).object_version_number);
975 
976                 -- Delete MandO procedures from the MO Procedure Table
977                 DELETE FROM ahl_mel_cdl_mo_procedures
978                 WHERE mel_cdl_mo_procedure_id = p_x_mo_procedures_tbl(l_rec_idx).mel_cdl_mo_procedure_id;
979 
980             END IF;
981         END LOOP;
982 
983         --Perform Create
984         FOR l_rec_idx IN p_x_mo_procedures_tbl.FIRST..p_x_mo_procedures_tbl.LAST
985         LOOP
986             IF (p_x_mo_procedures_tbl(l_rec_idx).dml_operation = 'C')
987             THEN
988                 --Check if mr_header_id is of program type MO Procedure
989                 IF (p_x_mo_procedures_tbl(l_rec_idx).mr_header_id IS NOT NULL or p_x_mo_procedures_tbl(l_rec_idx).mr_header_id <> FND_API.G_MISS_NUM)
990                 THEN
991                     OPEN validate_mr_header_id( p_x_mo_procedures_tbl(l_rec_idx).mr_header_id);
992                     FETCH validate_mr_header_id  INTO l_dummy_varchar;
993 
994                     IF (validate_mr_header_id%NOTFOUND)
995                     THEN
996                         FND_MESSAGE.Set_Name('AHL','AHL_MEL_CDL_MO_MR_NOTMO_INV');
997                         FND_MESSAGE.SET_TOKEN('MRTITLE',p_x_mo_procedures_tbl(l_rec_idx).mr_title);
998                         FND_MSG_PUB.ADD;
999                     END IF;
1000                     CLOSE validate_mr_header_id;
1001 
1002 					-- Check if mr_header_id is in complete status
1003 					OPEN validate_mr_header_status( p_x_mo_procedures_tbl(l_rec_idx).mr_header_id);
1004                     FETCH validate_mr_header_status  INTO l_status;
1005 
1006                     IF (validate_mr_header_status%NOTFOUND)
1007                     THEN
1008                         FND_MESSAGE.Set_Name('AHL','AHL_MEL_CDL_MO_STATUS_INV');
1009                         FND_MESSAGE.SET_TOKEN('MRTITLE',p_x_mo_procedures_tbl(l_rec_idx).mr_title);
1010                         FND_MSG_PUB.ADD;
1011                     END IF;
1012                     CLOSE validate_mr_header_status;
1013 
1014                 ELSIF (p_x_mo_procedures_tbl(l_rec_idx).mr_header_id IS  NULL or p_x_mo_procedures_tbl(l_rec_idx).mr_header_id =  FND_API.G_MISS_NUM)
1015                 THEN
1016                     IF (p_x_mo_procedures_tbl(l_rec_idx).mr_title IS  NULL OR p_x_mo_procedures_tbl(l_rec_idx).mr_version_number IS NULL )
1017                     THEN
1018                         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_MO_MR_MAND');
1019                         FND_MSG_PUB.ADD;
1020                     ELSE
1021                         --Get Mr Header Id using the Title and Version Number
1022                         OPEN get_mr_header_id ( p_x_mo_procedures_tbl(l_rec_idx).mr_title, p_x_mo_procedures_tbl(l_rec_idx).mr_version_number );
1023                         FETCH get_mr_header_id INTO p_x_mo_procedures_tbl(l_rec_idx).mr_header_id;
1024 
1025                         IF (get_mr_header_id%NOTFOUND)
1026                         THEN
1027                             FND_MESSAGE.Set_Name('AHL','AHL_MEL_CDL_MO_INV');
1028                             FND_MESSAGE.SET_TOKEN('MRTITLE',p_x_mo_procedures_tbl(l_rec_idx).mr_title);
1029                             FND_MSG_PUB.ADD;
1030                         END IF;
1031                         CLOSE get_mr_header_id;
1032                     END IF;
1033                 END IF;
1034 
1035                 --Check if the Ata Sequence Id is Valid
1036                 IF (p_x_mo_procedures_tbl(l_rec_idx).ata_sequence_id IS NOT NULL )
1037                 THEN
1038 
1039                     OPEN validate_ata_seq(p_x_mo_procedures_tbl(l_rec_idx).ata_sequence_id);
1040                     FETCH validate_ata_seq INTO l_dummy_varchar;
1041 
1042                     IF(validate_ata_seq%NOTFOUND)
1043                     THEN
1044                         FND_MESSAGE.Set_Name('AHL','AHL_MEL_CDL_ATA_INV');
1045                         FND_MSG_PUB.ADD;
1046                     END IF;
1047                     CLOSE validate_ata_seq;
1048 
1049                     --Retrieve Mel Cdl Header Id for the Ata Sequence Id and validate id the MEL/CDL is  in Draft /Approval Rejected
1050                     OPEN val_mel_cdl_status (p_x_mo_procedures_tbl(l_rec_idx).ata_sequence_id);
1051                     FETCH val_mel_cdl_status INTO l_status;
1052                     CLOSE val_mel_cdl_status;
1053 
1054                     IF (l_status NOT IN ('DRAFT', 'APPROVAL_REJECTED'))
1055                     THEN
1056                         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_UPDATA_STS_INV');
1057                         -- Cannot process if MEL/CDL is not in draft or approval rejected status
1058                         FND_MSG_PUB.ADD;
1059                         RAISE FND_API.G_EXC_ERROR;
1060                     END IF;
1061                 END IF;
1062 
1063                 -- Check if the MO Procedure is already associated to the Ata Sequence
1064                 BEGIN
1065                     SELECT 'X'  INTO l_dummy_varchar FROM DUAL WHERE NOT EXISTS
1066                     (SELECT 'x'
1067                     FROM
1068                         ahl_mel_cdl_mo_procedures
1069                     WHERE
1070                         ata_sequence_id = p_x_mo_procedures_tbl(l_rec_idx).ata_sequence_id
1071                         AND mr_header_id = p_x_mo_procedures_tbl(l_rec_idx).mr_header_id);
1072 
1073                 EXCEPTION
1074                     WHEN NO_DATA_FOUND THEN
1075                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_MO_EXISTS');
1076                     -- MO Proc Assocaition Already Exists for the ATA Seq
1077                     FND_MESSAGE.SET_TOKEN('MRTitle', p_x_mo_procedures_tbl(l_rec_idx).mr_title);
1078                     FND_MSG_PUB.ADD;
1079                 END;
1080 
1081                 -- Check Error Message stack.
1082                 x_msg_count := FND_MSG_PUB.count_msg;
1083                 IF (x_msg_count > 0)
1084                 THEN
1085                     RAISE FND_API.G_EXC_ERROR;
1086                 END IF;
1087 
1088                 -- Default attributes for create
1089                 p_x_mo_procedures_tbl(l_rec_idx).object_version_number  := 1;
1090                 IF (p_x_mo_procedures_tbl(l_rec_idx).mel_cdl_mo_procedure_id IS NULL)
1091                 THEN
1092                     SELECT ahl_mel_cdl_mo_procedures_s.NEXTVAL INTO p_x_mo_procedures_tbl(l_rec_idx).mel_cdl_mo_procedure_id FROM DUAL;
1093                 END IF;
1094 
1095 
1096                 -- Insert record into backend
1097                 INSERT INTO ahl_mel_cdl_mo_procedures
1098                 (
1099                     MEL_CDL_MO_PROCEDURE_ID,
1100                     OBJECT_VERSION_NUMBER,
1101                     LAST_UPDATE_DATE,
1102                     LAST_UPDATED_BY,
1103                     CREATION_DATE,
1104                     CREATED_BY,
1105                     LAST_UPDATE_LOGIN,
1106                     ATA_SEQUENCE_ID,
1107                     MR_HEADER_ID,
1108                     ATTRIBUTE_CATEGORY,
1109                     ATTRIBUTE1,
1110                     ATTRIBUTE2,
1111                     ATTRIBUTE3,
1112                     ATTRIBUTE4,
1113                     ATTRIBUTE5,
1114                     ATTRIBUTE6,
1115                     ATTRIBUTE7,
1116                     ATTRIBUTE8,
1117                     ATTRIBUTE9,
1118                     ATTRIBUTE10,
1119                     ATTRIBUTE11,
1120                     ATTRIBUTE12,
1121                     ATTRIBUTE13,
1122                     ATTRIBUTE14,
1123                     ATTRIBUTE15
1124                 )
1125                 VALUES
1126                 (
1127                     p_x_mo_procedures_tbl(l_rec_idx).MEL_CDL_MO_PROCEDURE_ID,
1128                     p_x_mo_procedures_tbl(l_rec_idx).OBJECT_VERSION_NUMBER,
1129                     sysdate,
1130                     fnd_global.user_id,
1131                     sysdate,
1132                     fnd_global.user_id,
1133                     fnd_global.login_id,
1134                     p_x_mo_procedures_tbl(l_rec_idx).ATA_SEQUENCE_ID,
1135                     p_x_mo_procedures_tbl(l_rec_idx).MR_HEADER_ID,
1136                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE_CATEGORY,
1137                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE1,
1138                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE2,
1139                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE3,
1140                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE4,
1141                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE5,
1142                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE6,
1143                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE7,
1144                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE8,
1145                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE9,
1146                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE10,
1147                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE11,
1148                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE12,
1149                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE13,
1150                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE14,
1151                     p_x_mo_procedures_tbl(l_rec_idx).ATTRIBUTE15
1152                 )
1153                 RETURNING MEL_CDL_MO_PROCEDURE_ID INTO p_x_mo_procedures_tbl(l_rec_idx).mel_cdl_mo_procedure_id;
1154 
1155                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
1156                 THEN
1157                     fnd_log.string
1158                     (
1159                     fnd_log.level_statement,
1160                     l_debug_module,
1161                     'Created new MO Procedure Association [mel_cdl_mo_procedure_id='||p_x_mo_procedures_tbl(l_rec_idx).mel_cdl_mo_procedure_id||']'
1162                     );
1163                 END IF;
1164             END IF;
1165         END LOOP;
1166     END IF;
1167 
1168     -- API body ends here
1169 
1170     -- Log API exit point
1171     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
1172     THEN
1173         fnd_log.string
1174         (
1175             fnd_log.level_procedure,
1176             l_debug_module,
1177             'At the end of PLSQL procedure'
1178         );
1179     END IF;
1180 
1181     -- Check Error Message stack.
1182     x_msg_count := FND_MSG_PUB.count_msg;
1183     IF (x_msg_count > 0)
1184     THEN
1185         RAISE FND_API.G_EXC_ERROR;
1186     END IF;
1187 
1188     -- Commit if p_commit = FND_API.G_TRUE
1189     IF FND_API.TO_BOOLEAN(p_commit)
1190     THEN
1191         COMMIT WORK;
1192     END IF;
1193 
1194     -- Standard call to get message count and if count is 1, get message info
1195     FND_MSG_PUB.count_and_get
1196     (
1197         p_count     => x_msg_count,
1198         p_data      => x_msg_data,
1199         p_encoded   => FND_API.G_FALSE
1200     );
1201 
1202 EXCEPTION
1203     WHEN FND_API.G_EXC_ERROR THEN
1204         x_return_status := FND_API.G_RET_STS_ERROR;
1205         Rollback to Process_Mo_Procedures_SP;
1206         FND_MSG_PUB.count_and_get
1207         (
1208             p_count     => x_msg_count,
1209             p_data      => x_msg_data,
1210             p_encoded   => FND_API.G_FALSE
1211         );
1212 
1213     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1214         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1215         Rollback to Process_Mo_Procedures_SP;
1216         FND_MSG_PUB.count_and_get
1217         (
1218             p_count     => x_msg_count,
1219             p_data      => x_msg_data,
1220             p_encoded   => FND_API.G_FALSE
1221         );
1222 
1223     WHEN OTHERS THEN
1224         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1225         Rollback to Process_Mo_Procedures_SP;
1226         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1227         THEN
1228             FND_MSG_PUB.add_exc_msg
1229             (
1230                 p_pkg_name      => G_PKG_NAME,
1231                 p_procedure_name    => 'Process_Mo_Procedures',
1232                 p_error_text        => SUBSTR(SQLERRM,1,240)
1233             );
1234         END IF;
1235         FND_MSG_PUB.count_and_get
1236         (
1237             p_count     => x_msg_count,
1238             p_data      => x_msg_data,
1239             p_encoded   => FND_API.G_FALSE
1240         );
1241 END Process_Mo_Procedures;
1242 
1243 ------------------------------------------
1244 -- Spec Procedure Process_Ata_Relations --
1245 ------------------------------------------
1246 PROCEDURE Process_Ata_Relations
1247 (
1248     -- Standard IN params
1249     p_api_version               IN          NUMBER,
1250     p_init_msg_list             IN          VARCHAR2    := FND_API.G_TRUE,
1251     p_commit                    IN          VARCHAR2    := FND_API.G_TRUE,
1252     p_validation_level          IN          NUMBER      := FND_API.G_VALID_LEVEL_FULL,
1253     p_default                   IN          VARCHAR2    := FND_API.G_FALSE,
1254     p_module_type               IN          VARCHAR2    := NULL,
1255     x_return_status             OUT NOCOPY  VARCHAR2,
1256     x_msg_count                 OUT NOCOPY  NUMBER,
1257     x_msg_data                  OUT NOCOPY  VARCHAR2,
1258     -- Procedure IN, OUT, IN/OUT params
1259     p_x_ata_relations_tbl       IN OUT NOCOPY   Relationship_Tbl_Type
1260 )
1261 IS
1262 
1263     --This cursor is used to check if the Ata Sequence is already assocaited to the Context ATA Sequence
1264     CURSOR Check_Reln_Exists
1265     (
1266         p_ata_seq_id number,
1267         p_rel_ata_seq_id number
1268     )
1269     IS
1270         SELECT 'x'
1271         FROM
1272             ahl_mel_cdl_relationships
1273         WHERE
1274             (ata_sequence_id = p_ata_seq_id
1275             AND related_ata_sequence_id = p_rel_ata_seq_id) OR
1276             (ata_sequence_id = p_rel_ata_seq_id
1277             AND related_ata_sequence_id = p_ata_seq_id);
1278 
1279 
1280     --This cursor is to check if both ATA and related ATA belong to the same MEL/CDL
1281     CURSOR Validate_For_Same_Mel_Cdl
1282     (
1283         p_ata_seq_id number,
1284         p_rel_ata_seq_id number
1285     )
1286     IS
1287         SELECT  'x'
1288         FROM
1289             ahl_mel_cdl_ata_sequences_v a,
1290             ahl_mel_cdl_ata_sequences_v b
1291         WHERE
1292             a.mel_cdl_ata_sequence_id= p_ata_seq_id
1293             AND b.mel_cdl_ata_sequence_id = p_rel_ata_seq_id
1294             AND a.mel_cdl_header_id = b.mel_cdl_header_id;
1295 
1296  -- Declare local variables
1297     l_api_name      CONSTANT    VARCHAR2(30)    := 'Process_Ata_Relations';
1298     l_api_version   CONSTANT    NUMBER          := 1.0;
1299     l_debug_module  CONSTANT    VARCHAR2(100)   := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
1300 
1301     l_return_status             VARCHAR2(1);
1302     l_msg_count                 NUMBER;
1303     l_msg_data                  VARCHAR2(2000);
1304 
1305     l_status                    VARCHAR2(30);
1306     l_ata_mng     VARCHAR2(30);
1307     l_reln_ata_mng     VARCHAR2(30);
1308 
1309     -- Define cursors
1310 
1311 BEGIN
1312 
1313     -- Standard start of API savepoint
1314     SAVEPOINT Process_Ata_Relations_SP;
1315 
1316     -- Initialize return status to success before any code logic/validation
1317     x_return_status := FND_API.G_RET_STS_SUCCESS;
1318 
1319     -- Standard call to check for call compatibility
1320     IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1321     THEN
1322         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1323     END IF;
1324 
1325     -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
1326     IF FND_API.TO_BOOLEAN(p_init_msg_list)
1327     THEN
1328         FND_MSG_PUB.INITIALIZE;
1329     END IF;
1330 
1331     -- Log API entry point
1332     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
1333     THEN
1334         fnd_log.string
1335         (
1336             fnd_log.level_procedure,
1337             l_debug_module,
1338             'At the start of PLSQL procedure'
1339         );
1340     END IF;
1341 
1342 --API body Begins
1343     IF (p_x_ata_relations_tbl.COUNT > 0)
1344     THEN
1345         -- Iterate all delete records
1346         FOR l_rec_idx IN p_x_ata_relations_tbl.FIRST..p_x_ata_relations_tbl.LAST
1347         LOOP
1348 
1349            -- Verify DML operation flag is right...
1350             IF (p_x_ata_relations_tbl(l_rec_idx).dml_operation NOT IN ( 'C', 'D'))
1351             THEN
1352 
1353                 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_COM_INVALID_DML_REC');
1354                 -- Invalid DML operation FIELD specified
1355                 FND_MESSAGE.SET_TOKEN('FIELD', p_x_ata_relations_tbl(l_rec_idx).dml_operation);
1356                 FND_MSG_PUB.ADD;
1357                 RAISE FND_API.G_EXC_ERROR;
1358             END IF;
1359 
1360             --Perform Deletion
1361             IF (p_x_ata_relations_tbl(l_rec_idx).dml_operation = 'D')
1362             THEN
1363 
1364                 -- For U/D, verify mel_cdl_mo_procedures_id + ovn is correct
1365                 Check_Inter_Reln_Exists(p_x_ata_relations_tbl(l_rec_idx).mel_cdl_relationship_id, p_x_ata_relations_tbl(l_rec_idx).object_version_number);
1366 
1367                 -- Delete MandO procedures from the MO Procedure Table
1368                 DELETE FROM ahl_mel_cdl_relationships
1369                 WHERE mel_cdl_relationship_id = p_x_ata_relations_tbl(l_rec_idx).mel_cdl_relationship_id;
1370 
1371                 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
1372                 THEN
1373                     fnd_log.string
1374                     (
1375                     fnd_log.level_procedure,
1376                     l_debug_module,
1377                     'Deleted Relationship'|| p_x_ata_relations_tbl(l_rec_idx).mel_cdl_relationship_id
1378                     );
1379 
1380                 END IF;
1381             END IF;
1382         END LOOP;
1383 
1384         --Perform Create
1385         FOR l_rec_idx IN p_x_ata_relations_tbl.FIRST..p_x_ata_relations_tbl.LAST
1386         LOOP
1387             IF (p_x_ata_relations_tbl(l_rec_idx).dml_operation = 'C')
1388             THEN
1389 
1390                 --Check if Ata Sequence Id  is null , as its a mandatory field
1391                 IF (p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id IS NULL)
1392                 THEN
1393                     FND_MESSAGE.Set_Name('AHL', 'AHL_MEL_CDL_ATA_MAND');
1394                     FND_MSG_PUB.ADD;
1395                 END IF;
1396 
1397                 --Check for the Related Ata Sequence Id, It is also a mandatory Field
1398                 IF (p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id IS NULL)
1399                 THEN
1400                     FND_MESSAGE.Set_Name('AHL', 'AHL_MEL_CDL_RELN_MAND');
1401                     FND_MSG_PUB.ADD;
1402 
1403                     IF (fnd_log.level_exception >= fnd_log.g_current_runtime_level)
1404                     THEN
1405                         fnd_log.message
1406                         (
1407                             fnd_log.level_exception,
1408                             'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name,
1409                             false
1410                         );
1411                     END IF;
1412                 END IF;
1413 
1414                 --Check if the Context Ata Sequence Id is Valid and if so the MEL/CDL to which it is associated is also valid
1415                 IF (p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id IS NOT NULL )
1416                 THEN
1417                     OPEN validate_ata_seq(p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id);
1418                     FETCH validate_ata_seq INTO l_dummy_varchar;
1419 
1420                     IF(validate_ata_seq%NOTFOUND)
1421                     THEN
1422                         FND_MESSAGE.Set_Name('AHL','AHL_MEL_CDL_ATA_INV');
1423                         FND_MSG_PUB.ADD;
1424                     END IF;
1425                     CLOSE validate_ata_seq;
1426 
1427                     --Retrieve Mel Cdl Header Id for the Ata Sequence Id and validate if the MEL/CDL is in Draft /Approval Rejected
1428                     OPEN val_mel_cdl_status (p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id);
1429                     FETCH val_mel_cdl_status INTO l_status;
1430                     CLOSE val_mel_cdl_status;
1431 
1432                     IF (l_status NOT IN ('DRAFT', 'APPROVAL_REJECTED'))
1433                     THEN
1434                         FND_MESSAGE.SET_NAME(G_APP_NAME, ' AHL_MEL_CDL_UPDATA_STS_INV');
1435                         -- Cannot process if MEL/CDL is not in draft or approval rejected status
1436                         FND_MSG_PUB.ADD;
1437                         RAISE FND_API.G_EXC_ERROR;
1438                     END IF;
1439                 END IF;
1440 
1441                 --Validate the Related Ata Sequence Id
1442                 IF (p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id IS NOT NULL )
1443                 THEN
1444                     OPEN validate_ata_seq(p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id);
1445                     FETCH validate_ata_seq INTO l_dummy_varchar;
1446 
1447                     IF(validate_ata_seq%NOTFOUND)
1448                     THEN
1449                         FND_MESSAGE.Set_Name('AHL','AHL_MEL_CDL_ATA_INV');
1450                         FND_MSG_PUB.ADD;
1451                     END IF;
1452                     CLOSE validate_ata_seq;
1453                 END IF;
1454 
1455 
1456                 --Get the ATA Meaning for ATA Sequence Id
1457                 SELECT ata_meaning  INTO l_ata_mng
1458                 FROM
1459                     ahl_mel_cdl_ata_sequences_v
1460                 WHERE
1461                     mel_cdl_ata_sequence_id = p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id;
1462 
1463                 --Get the ATA Meaning for Related ATA Sequence Id
1464                 SELECT ata_meaning  INTO l_reln_ata_mng
1465                 FROM
1466                     ahl_mel_cdl_ata_sequences_v
1467                 WHERE
1468                     mel_cdl_ata_sequence_id = p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id;
1469 
1470                 -- Check if the Relationship already Exists (ie, ata_sequence_id is associated to related_ata_sequence_id)
1471                 OPEN Check_Reln_Exists(p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id, p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id);
1472                 FETCH Check_Reln_Exists INTO l_dummy_varchar;
1473 
1474                 IF (Check_Reln_Exists%FOUND)
1475                 THEN
1476                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_RELN_EXISTS');
1477                     -- Interrelation alredy Exists for ATA Sequence
1478                     FND_MESSAGE.SET_TOKEN('ATA',l_ata_mng);
1479                     FND_MSG_PUB.ADD;
1480                 END IF;
1481                 CLOSE Check_Reln_Exists;
1482 
1483                 --Check if both the ATA's belong to the same MEL/CDL as inter assocaitions is not allowed.
1484                 OPEN Validate_For_Same_Mel_Cdl(p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id, p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id);
1485                 FETCH Validate_For_Same_Mel_Cdl INTO l_dummy_varchar;
1486 
1487                 IF (Validate_For_Same_Mel_Cdl%NOTFOUND)
1488                 THEN
1489                     FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_RELN_DIFF');
1490                     FND_MESSAGE.SET_TOKEN('ATA', l_ata_mng);
1491                     FND_MESSAGE.SET_TOKEN('RELATA', l_reln_ata_mng);
1492                     FND_MSG_PUB.ADD;
1493                 END IF;
1494                 CLOSE Validate_For_Same_Mel_Cdl;
1495 
1496                 -- Check for Cyclic Association (If the Ata Seq chosen for Association is same as the one to which it is getting associated
1497                 -- In the above case, a cyclic relation existance.
1498 
1499                 IF (p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id IS NOT NULL AND p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id IS NOT NULL AND
1500                 p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id <> FND_API.G_MISS_NUM AND p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id <> FND_API.G_MISS_NUM )
1501                 THEN
1502                     IF (p_x_ata_relations_tbl(l_rec_idx).ata_sequence_id = p_x_ata_relations_tbl(l_rec_idx).related_ata_sequence_id )
1503                     THEN
1504                         FND_MESSAGE.Set_Name('AHL','AHL_MEL_CDL_RELN_CYCLIC');
1505                         FND_MSG_PUB.ADD;
1506                     END IF;
1507 
1508                 END IF;
1509 
1510                 -- Check Error Message stack.
1511                 x_msg_count := FND_MSG_PUB.count_msg;
1512                 IF (x_msg_count > 0)
1513                 THEN
1514                     RAISE FND_API.G_EXC_ERROR;
1515                 END IF;
1516 
1517                 -- Default attributes for create
1518                 p_x_ata_relations_tbl(l_rec_idx).object_version_number  := 1;
1519                 IF (p_x_ata_relations_tbl(l_rec_idx).mel_cdl_relationship_id IS NULL)
1520                 THEN
1521                     SELECT ahl_mel_cdl_relationships_s.NEXTVAL INTO p_x_ata_relations_tbl(l_rec_idx).mel_cdl_relationship_id FROM DUAL;
1522                 END IF;
1523 
1524                 -- Insert record into backend
1525                 INSERT INTO ahl_mel_cdl_relationships
1526                 (
1527                     MEL_CDL_RELATIONSHIP_ID,
1528                     OBJECT_VERSION_NUMBER,
1529                     LAST_UPDATE_DATE,
1530                     LAST_UPDATED_BY,
1531                     CREATION_DATE,
1532                     CREATED_BY,
1533                     LAST_UPDATE_LOGIN,
1534                     ATA_SEQUENCE_ID,
1535                     RELATED_ATA_SEQUENCE_ID,
1536                     ATTRIBUTE_CATEGORY,
1537                     ATTRIBUTE1,
1538                     ATTRIBUTE2,
1539                     ATTRIBUTE3,
1540                     ATTRIBUTE4,
1541                     ATTRIBUTE5,
1542                     ATTRIBUTE6,
1543                     ATTRIBUTE7,
1544                     ATTRIBUTE8,
1545                     ATTRIBUTE9,
1546                     ATTRIBUTE10,
1547                     ATTRIBUTE11,
1548                     ATTRIBUTE12,
1549                     ATTRIBUTE13,
1550                     ATTRIBUTE14,
1551                     ATTRIBUTE15
1552                 )
1553                 VALUES
1554                 (
1555                     p_x_ata_relations_tbl(l_rec_idx).MEL_CDL_RELATIONSHIP_ID,
1556                     p_x_ata_relations_tbl(l_rec_idx).OBJECT_VERSION_NUMBER,
1557                     sysdate,
1558                     fnd_global.user_id,
1559                     sysdate,
1560                     fnd_global.user_id,
1561                     fnd_global.login_id,
1562                     p_x_ata_relations_tbl(l_rec_idx).ATA_SEQUENCE_ID,
1563                     p_x_ata_relations_tbl(l_rec_idx).RELATED_ATA_SEQUENCE_ID,
1564                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE_CATEGORY,
1565                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE1,
1566                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE2,
1567                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE3,
1568                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE4,
1569                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE5,
1570                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE6,
1571                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE7,
1572                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE8,
1573                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE9,
1574                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE10,
1575                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE11,
1576                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE12,
1577                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE13,
1578                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE14,
1579                     p_x_ata_relations_tbl(l_rec_idx).ATTRIBUTE15
1580                 )
1581                 RETURNING MEL_CDL_RELATIONSHIP_ID INTO p_x_ata_relations_tbl(l_rec_idx).mel_cdl_relationship_id;
1582 
1583                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)
1584                 THEN
1585                     fnd_log.string
1586                     (
1587                     fnd_log.level_statement,
1588                     l_debug_module,
1589                     'Created new MO Inter-Relationship'
1590                     );
1591                 END IF;
1592             END IF;
1593         END LOOP;
1594     END IF;
1595 
1596     -- Log API exit point
1597     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
1598     THEN
1599         fnd_log.string
1600         (
1601             fnd_log.level_procedure,
1602             l_debug_module,
1603             'At the end of PLSQL procedure'
1604         );
1605     END IF;
1606 
1607     -- Check Error Message stack.
1608     x_msg_count := FND_MSG_PUB.count_msg;
1609     IF (x_msg_count > 0)
1610     THEN
1611         RAISE FND_API.G_EXC_ERROR;
1612     END IF;
1613 
1614     -- Commit if p_commit = FND_API.G_TRUE
1615     IF FND_API.TO_BOOLEAN(p_commit)
1616     THEN
1617         COMMIT WORK;
1618     END IF;
1619 
1620     -- Standard call to get message count and if count is 1, get message info
1621     FND_MSG_PUB.count_and_get
1622     (
1623         p_count     => x_msg_count,
1624         p_data      => x_msg_data,
1625         p_encoded   => FND_API.G_FALSE
1626     );
1627 
1628 EXCEPTION
1629     WHEN FND_API.G_EXC_ERROR THEN
1630         x_return_status := FND_API.G_RET_STS_ERROR;
1631         Rollback to Process_Ata_Relations_SP;
1632         FND_MSG_PUB.count_and_get
1633         (
1634             p_count     => x_msg_count,
1635             p_data      => x_msg_data,
1636             p_encoded   => FND_API.G_FALSE
1637         );
1638 
1639     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1640         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1641         Rollback to Process_Ata_Relations_SP;
1642         FND_MSG_PUB.count_and_get
1643         (
1644             p_count     => x_msg_count,
1645             p_data      => x_msg_data,
1646             p_encoded   => FND_API.G_FALSE
1647         );
1648 
1649     WHEN OTHERS THEN
1650         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1651         Rollback to Process_Ata_Relations_SP;
1652         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1653         THEN
1654             FND_MSG_PUB.add_exc_msg
1655             (
1656                 p_pkg_name      => G_PKG_NAME,
1657                 p_procedure_name    => 'Process_Ata_Relations',
1658                 p_error_text        => SUBSTR(SQLERRM,1,240)
1659             );
1660         END IF;
1661         FND_MSG_PUB.count_and_get
1662         (
1663             p_count     => x_msg_count,
1664             p_data      => x_msg_data,
1665             p_encoded   => FND_API.G_FALSE
1666         );
1667 END Process_Ata_Relations;
1668 
1669 ------------------------------------------
1670 -- Spec Procedure Process_Ata_Relations --
1671 ------------------------------------------
1672 PROCEDURE Copy_MO_Proc_Revision
1673 (
1674     -- Standard IN params
1675     p_api_version               IN          NUMBER,
1676     p_init_msg_list             IN          VARCHAR2    := FND_API.G_TRUE,
1677     p_commit                    IN          VARCHAR2    := FND_API.G_TRUE,
1678     p_validation_level          IN          NUMBER      := FND_API.G_VALID_LEVEL_FULL,
1679     p_default                   IN          VARCHAR2    := FND_API.G_FALSE,
1680     p_module_type               IN          VARCHAR2    := NULL,
1681     -- Standard OUT params
1682     x_return_status             OUT NOCOPY  VARCHAR2,
1683     x_msg_count                 OUT NOCOPY  NUMBER,
1684     x_msg_data                  OUT NOCOPY  VARCHAR2,
1685     -- Procedure IN, OUT, IN/OUT params
1686     p_old_mr_header_id          IN          NUMBER,
1687     p_new_mr_header_id          IN          NUMBER
1688 )
1689 IS
1690 
1691     -- Declare local variables
1692     l_api_name      CONSTANT    VARCHAR2(30)    := 'Copy_MO_Proc_Revision';
1693     l_api_version   CONSTANT    NUMBER          := 1.0;
1694     l_debug_module  CONSTANT    VARCHAR2(100)   := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
1695 
1696     -- Define cursors
1697     CURSOR get_all_ata_for_mo_pro
1698     (
1699         p_mr_header_id  number
1700     )
1701     IS
1702         SELECT  ata_sequence_id
1703         FROM    ahl_mel_cdl_mo_procedures
1704         WHERE   mr_header_id = p_mr_header_id;
1705 
1706     l_ata_seq_id    number;
1707 
1708 BEGIN
1709     -- Standard start of API savepoint
1710     SAVEPOINT Copy_MO_Proc_Revision_SP;
1711 
1712     -- Initialize return status to success before any code logic/validation
1713     x_return_status := FND_API.G_RET_STS_SUCCESS;
1714 
1715     -- Standard call to check for call compatibility
1716     IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1717     THEN
1718         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1719     END IF;
1720 
1721     -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
1722     IF FND_API.TO_BOOLEAN(p_init_msg_list)
1723     THEN
1724         FND_MSG_PUB.INITIALIZE;
1725     END IF;
1726 
1727     -- Log API entry point
1728     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
1729     THEN
1730         fnd_log.string
1731         (
1732             fnd_log.level_procedure,
1733             l_debug_module||'.begin',
1734             'At the start of PLSQL procedure'
1735         );
1736     END IF;
1737 
1738     -- API body Begins
1739     IF (p_old_mr_header_id IS NOT NULL AND p_old_mr_header_id <> FND_API.G_MISS_NUM
1740         AND
1741         p_new_mr_header_id IS NOT NULL AND p_new_mr_header_id <> FND_API.G_MISS_NUM)
1742     THEN
1743         -- Fetch all ATA sequences which are associated to the old revision of the M and O Procedure
1744         OPEN get_all_ata_for_mo_pro(p_old_mr_header_id);
1745         LOOP
1746             FETCH get_all_ata_for_mo_pro INTO l_ata_seq_id;
1747             EXIT WHEN get_all_ata_for_mo_pro%NOTFOUND;
1748 
1749             -- Create association of such ATA sequences with the new revision of the M and O Procedure
1750             INSERT INTO ahl_mel_cdl_mo_procedures
1751             (
1752                 MEL_CDL_MO_PROCEDURE_ID,
1753                 OBJECT_VERSION_NUMBER,
1754                 LAST_UPDATE_DATE,
1755                 LAST_UPDATED_BY,
1756                 CREATION_DATE,
1757                 CREATED_BY,
1758                 LAST_UPDATE_LOGIN,
1759                 ATA_SEQUENCE_ID,
1760                 MR_HEADER_ID,
1761                 ATTRIBUTE_CATEGORY,
1762                 ATTRIBUTE1,
1763                 ATTRIBUTE2,
1764                 ATTRIBUTE3,
1765                 ATTRIBUTE4,
1766                 ATTRIBUTE5,
1767                 ATTRIBUTE6,
1768                 ATTRIBUTE7,
1769                 ATTRIBUTE8,
1770                 ATTRIBUTE9,
1771                 ATTRIBUTE10,
1772                 ATTRIBUTE11,
1773                 ATTRIBUTE12,
1774                 ATTRIBUTE13,
1775                 ATTRIBUTE14,
1776                 ATTRIBUTE15
1777             )
1778             VALUES
1779             (
1780                 ahl_mel_cdl_mo_procedures_s.nextval,
1781                 1,
1782                 sysdate,
1783                 fnd_global.user_id,
1784                 sysdate,
1785                 fnd_global.user_id,
1786                 fnd_global.login_id,
1787                 l_ata_seq_id,
1788                 p_new_mr_header_id,
1789                 null,
1790                 null,
1791                 null,
1792                 null,
1793                 null,
1794                 null,
1795                 null,
1796                 null,
1797                 null,
1798                 null,
1799                 null,
1800                 null,
1801                 null,
1802                 null,
1803                 null,
1804                 null
1805             );
1806         END LOOP;
1807     END IF;
1808     -- API body ends
1809 
1810     -- Log API exit point
1811     IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)
1812     THEN
1813         fnd_log.string
1814         (
1815             fnd_log.level_procedure,
1816             l_debug_module||'.end',
1817             'At the end of PLSQL procedure'
1818         );
1819     END IF;
1820 
1821     -- Check Error Message stack.
1822     x_msg_count := FND_MSG_PUB.count_msg;
1823     IF (x_msg_count > 0)
1824     THEN
1825         RAISE FND_API.G_EXC_ERROR;
1826     END IF;
1827 
1828     -- Commit if p_commit = FND_API.G_TRUE
1829     IF FND_API.TO_BOOLEAN(p_commit)
1830     THEN
1831         COMMIT WORK;
1832     END IF;
1833 
1834     -- Standard call to get message count and if count is 1, get message info
1835     FND_MSG_PUB.count_and_get
1836     (
1837         p_count     => x_msg_count,
1838         p_data      => x_msg_data,
1839         p_encoded   => FND_API.G_FALSE
1840     );
1841 
1842 EXCEPTION
1843     WHEN FND_API.G_EXC_ERROR THEN
1844         x_return_status := FND_API.G_RET_STS_ERROR;
1845         Rollback to Copy_MO_Proc_Revision_SP;
1846         FND_MSG_PUB.count_and_get
1847         (
1848             p_count     => x_msg_count,
1849             p_data      => x_msg_data,
1850             p_encoded   => FND_API.G_FALSE
1851         );
1852 
1853     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1854         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1855         Rollback to Copy_MO_Proc_Revision_SP;
1856         FND_MSG_PUB.count_and_get
1857         (
1858             p_count     => x_msg_count,
1859             p_data      => x_msg_data,
1860             p_encoded   => FND_API.G_FALSE
1861         );
1862 
1863     WHEN OTHERS THEN
1864         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1865         Rollback to Copy_MO_Proc_Revision_SP;
1866         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1867         THEN
1868             FND_MSG_PUB.add_exc_msg
1869             (
1870                 p_pkg_name      => G_PKG_NAME,
1871                 p_procedure_name    => 'Copy_MO_Proc_Revision',
1872                 p_error_text        => SUBSTR(SQLERRM,1,240)
1873             );
1874         END IF;
1875         FND_MSG_PUB.count_and_get
1876         (
1877             p_count     => x_msg_count,
1878             p_data      => x_msg_data,
1879             p_encoded   => FND_API.G_FALSE
1880         );
1881 END Copy_MO_Proc_Revision;
1882 
1883 ---------------------------------------------
1884 -- Non-spec Procedure Check_Ata_Seq_Exists --
1885 ---------------------------------------------
1886 PROCEDURE Check_Ata_Seq_Exists
1887 (
1888     p_ata_sequence_id           IN  NUMBER,
1889     p_ata_object_version        IN  NUMBER
1890 )
1891 IS
1892 
1893     CURSOR check_exists
1894     IS
1895     SELECT  object_version_number
1896     FROM    ahl_mel_cdl_ata_sequences
1897     WHERE   mel_cdl_ata_sequence_id = p_ata_sequence_id;
1898 
1899     l_ovn       NUMBER;
1900 
1901 BEGIN
1902 
1903     OPEN check_exists;
1904     FETCH check_exists INTO l_ovn;
1905     IF (check_exists%NOTFOUND)
1906     THEN
1907         CLOSE check_exists;
1908         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_ATA_NOTFOUND');
1909         -- System Sequence is not found
1910         FND_MSG_PUB.ADD;
1911         RAISE FND_API.G_EXC_ERROR;
1912     ELSE
1913         CLOSE check_exists;
1914         IF (l_ovn <> p_ata_object_version)
1915         THEN
1916             FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_COM_RECORD_CHANGED');
1917             -- Record has been modified by another user
1918             FND_MSG_PUB.ADD;
1919             RAISE FND_API.G_EXC_ERROR;
1920         END IF;
1921     END IF;
1922 
1923 END Check_Ata_Seq_Exists;
1924 
1925 --------------------------------------------
1926 -- Non-spec Procedure Convert_Value_To_Id --
1927 --------------------------------------------
1928 PROCEDURE Convert_Value_To_Id
1929 (
1930     p_x_ata_sequences_rec       IN OUT NOCOPY   Ata_Sequence_Rec_Type
1931 )
1932 IS
1933     CURSOR validate_repcat
1934     (
1935         p_repcat_id number
1936     )
1937     IS
1938     SELECT  'x'
1939     FROM    ahl_repair_categories
1940     WHERE   repair_category_id = p_repcat_id;
1941 
1942     CURSOR convert_repcat
1943     (
1944         p_repcat_name varchar2
1945     )
1946     IS
1947     SELECT  repcat.repair_category_id
1948     FROM    cs_incident_urgencies_vl urg, ahl_repair_categories repcat
1949     WHERE   upper(urg.name) = upper(p_repcat_name) AND
1950             urg.incident_urgency_id = repcat.sr_urgency_id;
1951 
1952 BEGIN
1953 
1954     -- Convert value-to-id for ata_code
1955     IF (p_x_ata_sequences_rec.ata_code IS NULL OR p_x_ata_sequences_rec.ata_code = FND_API.G_MISS_CHAR)
1956     THEN
1957         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_ATA_MAND');
1958         -- System Sequence is mandatory
1959         FND_MSG_PUB.ADD;
1960     ELSIF NOT (AHL_UTIL_MC_PKG.Validate_Lookup_Code('AHL_ATA_CODE', p_x_ata_sequences_rec.ata_code))
1961     THEN
1962         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_ATA_INV');
1963         -- System Sequence is invalid
1964         FND_MSG_PUB.ADD;
1965     END IF;
1966 
1967     -- Convert value-to-id for sr_urgency
1968     IF (p_x_ata_sequences_rec.repair_category_id IS NULL OR p_x_ata_sequences_rec.repair_category_id = FND_API.G_MISS_NUM)
1969     THEN
1970         IF (p_x_ata_sequences_rec.repair_category_name IS NULL OR p_x_ata_sequences_rec.repair_category_name = FND_API.G_MISS_CHAR)
1971         THEN
1972             FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_REPCAT_MAND');
1973             -- Repair Category for System Sequence "ATA" is mandatory
1974             FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_rec.ata_code);
1975             FND_MSG_PUB.ADD;
1976         ELSE
1977             OPEN convert_repcat(p_x_ata_sequences_rec.repair_category_name);
1978             FETCH convert_repcat INTO p_x_ata_sequences_rec.repair_category_id;
1979             IF (convert_repcat%NOTFOUND)
1980             THEN
1981                 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_REPCAT_INV');
1982                 -- Repair Category for System Sequence "ATA" is invalid
1983                 FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_rec.ata_code);
1984                 FND_MSG_PUB.ADD;
1985             END IF;
1986             CLOSE convert_repcat;
1987         END IF;
1988     ELSE
1989         OPEN validate_repcat(p_x_ata_sequences_rec.repair_category_id);
1990         FETCH validate_repcat INTO l_dummy_varchar;
1991         IF (validate_repcat%NOTFOUND)
1992         THEN
1993             FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_REPCAT_INV');
1994             -- Repair Category for System Sequence "ATA" is invalid
1995             FND_MESSAGE.SET_TOKEN('ATA', p_x_ata_sequences_rec.ata_code);
1996             FND_MSG_PUB.ADD;
1997         END IF;
1998         CLOSE validate_repcat;
1999     END IF;
2000 
2001 END Convert_Value_To_Id;
2002 
2003 ---------------------------------------------
2004 -- Non-spec Procedure Check_Mel_Cdl_Status --
2005 ---------------------------------------------
2006 PROCEDURE Check_Mel_Cdl_Status
2007 (
2008     p_mel_cdl_header_id         IN  NUMBER,
2009     p_ata_sequence_id           IN  NUMBER
2010 )
2011 IS
2012 
2013     CURSOR get_ata_mel_cdl_status
2014     IS
2015     SELECT  hdr.status_code, hdr.mel_cdl_header_id
2016     FROM    ahl_mel_cdl_headers hdr, ahl_mel_cdl_ata_sequences ata
2017     WHERE   hdr.mel_cdl_header_id = ata.mel_cdl_header_id AND
2018             ata.mel_cdl_ata_sequence_id = p_ata_sequence_id;
2019 
2020     CURSOR get_mel_cdl_status
2021     IS
2022     SELECT  status_code, mel_cdl_header_id
2023     FROM    ahl_mel_cdl_headers
2024     WHERE   mel_cdl_header_id = p_mel_cdl_header_id;
2025 
2026     l_status                    VARCHAR2(30);
2027     l_mel_cdl_header_id         NUMBER;
2028 
2029 BEGIN
2030     IF (p_mel_cdl_header_id IS NOT NULL)
2031     THEN
2032         OPEN get_mel_cdl_status;
2033         FETCH get_mel_cdl_status INTO l_status, l_mel_cdl_header_id;
2034         CLOSE get_mel_cdl_status;
2035     ELSIF (p_ata_sequence_id IS NOT NULL)
2036     THEN
2037         OPEN get_ata_mel_cdl_status;
2038         FETCH get_ata_mel_cdl_status INTO l_status, l_mel_cdl_header_id;
2039         CLOSE get_ata_mel_cdl_status;
2040     ELSE
2041         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_HDR_MAND');
2042         -- MEL/CDL information is mandatory for processing System Sequence(s)
2043         FND_MSG_PUB.ADD;
2044         RAISE FND_API.G_EXC_ERROR;
2045     END IF;
2046 
2047     IF (l_status NOT IN ('DRAFT', 'APPROVAL_REJECTED'))
2048     THEN
2049         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_NOT_DRAFT_ATA');
2050         -- Cannot process System Sequence(s) for MEL/CDL not in draft or approval rejected status
2051         FND_MSG_PUB.ADD;
2052         RAISE FND_API.G_EXC_ERROR;
2053     ELSIF (l_status = 'APPROVAL_REJECTED')
2054     THEN
2055         UPDATE  ahl_mel_cdl_headers
2056         SET     status_code = 'DRAFT'
2057         WHERE   mel_cdl_header_id = l_mel_cdl_header_id;
2058     END IF;
2059 END Check_Mel_Cdl_Status;
2060 
2061 
2062 ---------------------------------------------
2063 -- Non-spec Procedure Check_MO_Proc_Exists --
2064 ---------------------------------------------
2065 
2066 PROCEDURE Check_MO_Proc_Exists
2067 (
2068     p_mo_procedure_id           IN  NUMBER,
2069     p_mo_proc_object_version        IN  NUMBER
2070 )
2071 IS
2072 
2073     CURSOR check_exists
2074     IS
2075     SELECT  object_version_number
2076     FROM    ahl_mel_cdl_mo_procedures
2077     WHERE   mel_cdl_mo_procedure_id = p_mo_procedure_id;
2078 
2079     l_ovn       NUMBER;
2080 
2081 BEGIN
2082 
2083     OPEN check_exists;
2084     FETCH check_exists INTO l_ovn;
2085     IF (check_exists%NOTFOUND)
2086     THEN
2087         CLOSE check_exists;
2088         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_MO_PROC_NOTFOUND');
2089         -- MO Procedure is not found
2090         FND_MSG_PUB.ADD;
2091         RAISE FND_API.G_EXC_ERROR;
2092     ELSE
2093         CLOSE check_exists;
2094         IF (l_ovn <> p_mo_proc_object_version)
2095         THEN
2096         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_COM_RECORD_CHANGED');
2097             -- Record has been modified by another user
2098             FND_MSG_PUB.ADD;
2099             RAISE FND_API.G_EXC_ERROR;
2100         END IF;
2101     END IF;
2102 
2103 END Check_MO_Proc_Exists;
2104 
2105 ---------------------------------------------
2106 -- Non-spec Procedure Check_Inter_Reln_Exists --
2107 ---------------------------------------------
2108 
2109 PROCEDURE Check_Inter_Reln_Exists
2110 (
2111     p_mel_cdl_relationship_id           IN  NUMBER,
2112     p_rel_object_version        IN  NUMBER
2113 )
2114 IS
2115 
2116     CURSOR check_exists
2117     IS
2118         SELECT  object_version_number
2119         FROM ahl_mel_cdl_relationships
2120         WHERE mel_cdl_relationship_id = p_mel_cdl_relationship_id;
2121 
2122     l_ovn       NUMBER;
2123 
2124 BEGIN
2125     OPEN check_exists;
2126     FETCH check_exists INTO l_ovn;
2127 
2128     IF (check_exists%NOTFOUND)
2129     THEN
2130         CLOSE check_exists;
2131 
2132         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_MEL_CDL_REL_NOTFOUND');
2133         -- MO Procedure is not found
2134         FND_MSG_PUB.ADD;
2135         RAISE FND_API.G_EXC_ERROR;
2136 
2137     ELSE
2138         CLOSE check_exists;
2139 
2140         IF (l_ovn <> p_rel_object_version)
2141         THEN
2142         FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_COM_RECORD_CHANGED');
2143             -- Record has been modified by another user
2144             FND_MSG_PUB.ADD;
2145             RAISE FND_API.G_EXC_ERROR;
2146         END IF;
2147 
2148     END IF;
2149 
2150 END Check_Inter_Reln_Exists;
2151 
2152 End AHL_MEL_CDL_ATA_SEQS_PVT;