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