[Home] [Help]
PACKAGE BODY: APPS.AHL_UMP_UNITMAINT_PVT
Source
1 PACKAGE BODY AHL_UMP_UNITMAINT_PVT AS
2 /* $Header: AHLVUMXB.pls 120.20.12010000.3 2008/12/29 02:29:26 sracha ship $ */
3
4
5 G_PKG_NAME CONSTANT VARCHAR2(30) := 'AHL_UMP_UnitMaint_PVT';
6
7 G_DEBUG VARCHAR2(1) := AHL_DEBUG_PUB.is_log_enabled;
8
9 TYPE CounterCurTyp is REF CURSOR;
10
11
12 -------------------------------
13 -- Declare Local Procedures --
14 -------------------------------
15 -- Converts Value to Id for a Threshold
16 PROCEDURE Convert_Threshold_Val_To_ID(
17 p_x_unit_threshold_rec IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_rec_type,
18 x_return_status OUT NOCOPY VARCHAR2);
19
20 -- Converts Value to Id for an Accomplishment
21 PROCEDURE Convert_Accomplish_Val_To_ID(
22 p_x_unit_accomplish_rec IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_rec_type,
23 x_return_status OUT NOCOPY VARCHAR2);
24
25 -- Converts Value to Id for an Unit Effectivity
26 PROCEDURE Convert_Effectivity_Val_To_ID(
27 p_x_unit_Effectivity_rec IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type,
28 x_return_status OUT NOCOPY VARCHAR2);
29
30 -- Validates an Unit Effectivity
31 PROCEDURE Validate_Effectivity(
32 p_unit_Effectivity_rec IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type,
33 p_authorized_user_flag IN VARCHAR2 := 'N',
34 x_return_status IN OUT NOCOPY VARCHAR2);
35
36 -- Validates Thresholds
37 PROCEDURE Validate_Thresholds(
38 p_unit_threshold_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type,
39 x_return_status IN OUT NOCOPY VARCHAR2);
40
41 -- Validates Accomplishments
42 -- Added accomplishment date to fix bug# 6750836.
43 PROCEDURE Validate_Accomplishments(
44 p_unit_accomplish_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type,
45 p_accomplishment_date IN DATE,
46 p_ue_status_code IN VARCHAR2,
47 x_return_status IN OUT NOCOPY VARCHAR2);
48
49 -- Updates a Unit Effectivity
50 PROCEDURE Update_Unit_Effectivity(
51 p_unit_Effectivity_rec IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type);
52
53 -- Terminates a descendent Unit Effectivity
54 PROCEDURE Terminate_Descendent(
55 p_descendent_ue_id IN NUMBER);
56
57 -- Updates Thresholds
58 PROCEDURE Update_Thresholds(
59 p_unit_Effectivity_rec IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type,
60 p_x_unit_threshold_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type);
61
62 -- Updates Accomplishments
63 -- Added p_unit_Effectivity_rec for R12: for counter lock
64 PROCEDURE Update_Accomplishments(
65 p_x_unit_accomplish_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type,
66 p_unit_Effectivity_rec IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type);
67
68 -- Copies updated Thresholds from a sublist back to the original master list
69 PROCEDURE Restore_Thresholds(
70 p_x_unit_threshold_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type,
71 p_unit_threshold_tbl IN AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type);
72
73 -- Copies updated Accomplishments from a sublist back to the original master list
74 PROCEDURE Restore_Accomplishments(
75 p_x_unit_accomplish_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type,
76 p_unit_accomplish_tbl IN AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type);
77
78 -- Calls FMP API to match counters before accomplishments and terminations
79 PROCEDURE Match_Counters_with_FMP(
80 p_unit_effectivity_id IN NUMBER,
81 p_item_instance_id IN NUMBER,
82 p_mr_header_id IN NUMBER,
83 x_counters OUT NOCOPY VARCHAR2,
84 x_return_status OUT NOCOPY VARCHAR2);
85
86 -- Converts value to ID for an MR.
87 Procedure Convert_MRID (p_x_mr_id IN OUT NOCOPY NUMBER,
88 p_mr_title IN VARCHAR2,
89 p_version_number IN NUMBER);
90
91 -- Converts value to ID for a Unit Configuration.
92 Procedure Convert_Unit (p_x_uc_header_id IN OUT NOCOPY NUMBER,
93 p_unit_name IN VARCHAR2);
94
95 -- Converts value to ID for an item instance.
96 Procedure Convert_Instance (p_x_csi_item_instance_id IN OUT NOCOPY NUMBER,
97 p_csi_instance_number IN VARCHAR2);
98
99 -- Validation procedure.
100 Procedure Validate_Input_Parameters (p_mr_header_id IN NUMBER,
101 p_x_csi_item_instance_id IN OUT NOCOPY NUMBER,
102 p_unit_config_header_id IN NUMBER);
103
104 -- AMSRINIV : Bug #4360784.. Removed p_unit_config_header_id as a input for Validate_PM_Input_Parameters
105 -- Tamal: Bug #4207212, #4114368 Begin
106 -- Validation procedure for PM mode.
107 Procedure Validate_PM_Input_Parameters (p_mr_header_id IN NUMBER,
108 p_csi_item_instance_id IN NUMBER,
109 p_contract_number IN VARCHAR2,
110 p_contract_modifier IN VARCHAR2);
111 -- Tamal: Bug #4207212, #4114368 End
112
113 -- Procedure to mark a unit effectivity as MR-Terminated.
114 PROCEDURE MR_Terminate(p_unit_effectivity_id IN NUMBER);
115
116 -- To log error messages into a log file if called from concurrent process.
117 PROCEDURE log_error_messages;
118
119 -------------------------------------
120 -- End Local Procedures Declaration--
121 -------------------------------------
122
123 -- Start of Comments --
124 -- Procedure name : Process_UnitEffectivity
125 -- Type : Private
126 -- Function : Manages Create/Modify/Delete operations for unit maintenance requirements.
127 -- Pre-reqs :
128 -- Parameters :
129 --
130 -- Standard IN Parameters :
131 -- p_api_version IN NUMBER Required
132 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
133 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
134 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
135 -- p_default IN VARCHAR2 Default FND_API.G_TRUE
136 -- Based on this flag, the API will set the default attributes.
137 -- p_module_type In VARCHAR2 Default NULL
138 -- This will be null.
139 -- Standard OUT Parameters :
140 -- x_return_status OUT VARCHAR2 Required
141 -- x_msg_count OUT NUMBER Required
142 -- x_msg_data OUT VARCHAR2 Required
143 --
144 -- Process_UnitEffectivity Parameters :
145 -- If no input parameters are passed, then effectivity will be built for all units.
146 -- If either p_mr_header_id OR p_mr_title and p_mr_version_number are passed, then effectivity
147 -- will be built for all units having this maintenance requirement.
148 -- If either p_csi_item_instance_id OR p_csi_instance_number are passed, then effectivity
149 -- will be built for the specfic unit this item instance belongs to.
150 -- If either p_unit_name OR p_unit_config_header_id are passed, then effectivity will be
151 -- built for this specific unit configuration.
152 -- p_mr_header_id is the unique identifier of a maintenance requirement.
153 --
154
155 PROCEDURE Process_UnitEffectivity (
156 p_api_version IN NUMBER,
157 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
158 p_commit IN VARCHAR2 := FND_API.G_FALSE,
159 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
160 p_default IN VARCHAR2 := FND_API.G_TRUE,
161 p_module_type IN VARCHAR2 := NULL,
162 x_return_status OUT NOCOPY VARCHAR2,
163 x_msg_count OUT NOCOPY NUMBER,
164 x_msg_data OUT NOCOPY VARCHAR2,
165 p_mr_header_id IN NUMBER := NULL,
166 p_mr_title IN VARCHAR2 := NULL,
167 p_mr_version_number IN NUMBER := NULL,
168 p_unit_config_header_id IN NUMBER := NULL,
169 p_unit_name IN VARCHAR2 := NULL,
170 p_csi_item_instance_id IN NUMBER := NULL,
171 p_csi_instance_number IN VARCHAR2 := NULL
172
173 ) IS
174
175 l_api_version CONSTANT NUMBER := 1.0;
176 l_api_name CONSTANT VARCHAR2(30) := 'Process_UnitEffectivity';
177
178 -- Local variables.
179 l_mr_id NUMBER := p_mr_header_id;
180 l_unit_config_header_id NUMBER := p_unit_config_header_id;
181 l_csi_item_instance_id NUMBER := p_csi_item_instance_id;
182 l_msg_count NUMBER;
183
184
185 BEGIN
186 -- Standard start of API savepoint
187 SAVEPOINT Process_UnitEffectivity_PVT;
188
189 -- Standard call to check for call compatibility
190 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
191 G_PKG_NAME) THEN
192 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
193 END IF;
194
195 -- Initialize message list if p_init_msg_list is set to TRUE
196 IF FND_API.To_Boolean(p_init_msg_list) THEN
197 FND_MSG_PUB.Initialize;
198 END IF;
199
200 -- Initialize Procedure return status to success
201 x_return_status := FND_API.G_RET_STS_SUCCESS;
202
203 -- Enable Debug.
204 IF G_DEBUG='Y' THEN
205 AHL_DEBUG_PUB.enable_debug;
206 END IF;
207
208 -- Add debug mesg.
209 IF G_DEBUG='Y' THEN
210 AHL_DEBUG_PUB.debug('Begin private API:' || G_PKG_NAME || '.' || l_api_name);
211 END IF;
212
213 -- Convert Value to IDs and validate.
214 -- For maintenance requirement.
215 IF (l_mr_id IS NULL OR l_mr_id = FND_API.G_MISS_NUM) THEN
216 Convert_MRID (l_mr_id, p_mr_title, p_mr_version_number);
217 END IF;
218
219 -- For instance id.
220 IF (l_csi_item_instance_id IS NULL OR
221 l_csi_item_instance_id = FND_API.G_MISS_NUM) THEN
222 Convert_Instance (l_csi_item_instance_id, p_csi_instance_number);
223 END IF;
224
225 -- For unit name.
226 IF (l_unit_config_header_id IS NULL OR
227 l_unit_config_header_id = FND_API.G_MISS_NUM) THEN
228 Convert_Unit (l_unit_config_header_id, p_unit_name);
229 END IF;
230
231 Validate_Input_Parameters (l_mr_id, l_csi_item_instance_id, l_unit_config_header_id);
232
233 -- Check Error Message stack.
234 l_msg_count := FND_MSG_PUB.count_msg;
235 IF l_msg_count > 0 THEN
236 RAISE FND_API.G_EXC_ERROR;
237 END IF;
238
239 -- Depending on input parameters call procedures for processing.
240 IF (l_mr_id IS NOT NULL) THEN
241 -- process all units affected by the MR.
242 AHL_UMP_ProcessUnit_PVT.Process_MRAffected_Units (
243 x_msg_count => x_msg_count,
244 x_msg_data => x_msg_data,
245 x_return_status => x_return_status,
246 p_mr_header_id => l_mr_id);
247
248 ELSIF (l_csi_item_instance_id IS NOT NULL) THEN
249 -- Call Process Unit for the item instance.
250 AHL_UMP_ProcessUnit_PVT.Process_Unit (
251 x_msg_count => x_msg_count,
252 x_msg_data => x_msg_data,
253 x_return_status => x_return_status,
254 p_csi_item_instance_id => l_csi_item_instance_id);
255
256
257 ELSE
258 -- process all units.
259 AHL_UMP_ProcessUnit_PVT.Process_All_Units (
260 x_msg_count => x_msg_count,
261 x_msg_data => x_msg_data,
262 x_return_status => x_return_status);
263
264 END IF;
265
266 -- Check return status.
267 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
268 RAISE FND_API.G_EXC_ERROR;
269 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
270 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
271 END IF;
272
273 -- Standard check of p_commit
274 IF FND_API.TO_BOOLEAN(p_commit) THEN
275 COMMIT WORK;
276 END IF;
277
278 -- Standard call to get message count and if count is 1, get message info
279 FND_MSG_PUB.Count_And_Get
280 ( p_count => x_msg_count,
281 p_data => x_msg_data,
282 p_encoded => fnd_api.g_false
283 );
284
285 --
286 EXCEPTION
287 WHEN FND_API.G_EXC_ERROR THEN
288 x_return_status := FND_API.G_RET_STS_ERROR;
289 Rollback to Process_UnitEffectivity_PVT;
290 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
291 p_data => x_msg_data,
292 p_encoded => fnd_api.g_false);
293
294 -- Disable debug
295 AHL_DEBUG_PUB.disable_debug;
296
297
298
299 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
300 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
301 Rollback to Process_UnitEffectivity_PVT;
302 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
303 p_data => x_msg_data,
304 p_encoded => fnd_api.g_false);
305
306 -- Disable debug
307 AHL_DEBUG_PUB.disable_debug;
308
309 WHEN OTHERS THEN
310 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
311 Rollback to Process_UnitEffectivity_PVT;
312 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
313 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
314 p_procedure_name => 'Process_UnitEffectivity_PVT',
315 p_error_text => SUBSTR(SQLERRM,1,240));
316 END IF;
317 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
318 p_data => x_msg_data,
319 p_encoded => fnd_api.g_false);
320
321 -- Disable debug
322 AHL_DEBUG_PUB.disable_debug;
323
324 END Process_UnitEffectivity;
325
326 --------------------------------------------------------------------------------------------
327 -- Start of Comments --
328 -- Procedure name : Build_UnitEffectivity
329 -- Type : Private
330 -- Function : This procedure will build unit and item effectivity and commit.
331 -- Build_UnitEffectivity will commit at a unit level. If the
332 -- unit has any errors, then rollback will be performed for that unit only.
333 --
334 -- Pre-reqs :
335 -- Parameters :
336 --
337 -- Standard OUT Parameters :
338 -- x_return_status OUT VARCHAR2 Required
339 -- x_msg_count OUT NUMBER Required
340 -- x_msg_data OUT VARCHAR2 Required
341 --
342 -- Parameters:
343 -- If no input parameters are passed, then effectivity will be built for all units.
344 -- If either p_mr_header_id OR p_mr_title and p_mr_version_number are passed, then effectivity
345 -- will be built for all units having this maintenance requirement; p_mr_header_id being
346 -- the unique
347 -- identifier of a maintenance requirement.
348 -- If either p_csi_item_instance_id OR p_csi_instance_number are passed, then effectivity
349 -- will be built for the unit this item instance belongs to.
350 -- If either p_unit_name OR p_unit_config_header_id are passed, then effectivity will be
351 -- built for the unit configuration.
352 --
353
354 PROCEDURE Build_UnitEffectivity (
355 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
356 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
357 p_default IN VARCHAR2 := FND_API.G_TRUE,
358 p_module_type IN VARCHAR2 := NULL,
359 x_return_status OUT NOCOPY VARCHAR2,
360 x_msg_count OUT NOCOPY NUMBER,
361 x_msg_data OUT NOCOPY VARCHAR2,
362 p_mr_header_id IN NUMBER := NULL,
363 p_mr_title IN VARCHAR2 := NULL,
364 p_mr_version_number IN NUMBER := NULL,
365 p_unit_config_header_id IN NUMBER := NULL,
366 p_unit_name IN VARCHAR2 := NULL,
367 p_csi_item_instance_id IN NUMBER := NULL,
368 p_csi_instance_number IN VARCHAR2 := NULL,
369 -- Tamal: Bug #4207212, #4114368 Begin
370 p_contract_number IN VARCHAR2 := NULL,
371 p_contract_modifier IN VARCHAR2 := NULL,
372 -- Tamal: Bug #4207212, #4114368 End
373 p_concurrent_flag IN VARCHAR2 := 'N' ,
374 -- sracha: Added parameter to launch multiple workers.
375 p_num_of_workers IN NUMBER := 1,
376 p_mtl_category_id IN NUMBER := NULL,
377 p_process_option IN VARCHAR2 := NULL)
378 IS
379
380 -- Local variables.
381 l_api_name VARCHAR2(200) := 'Build_UnitEffectivity';
382 l_mr_id NUMBER := p_mr_header_id;
383 l_unit_config_header_id NUMBER := p_unit_config_header_id;
384 l_csi_item_instance_id NUMBER := p_csi_item_instance_id;
385 l_contract_number VARCHAR2(120) := p_contract_number;
386 l_contract_modifier VARCHAR2(120) := p_contract_modifier;
387 l_return_status VARCHAR2(1);
388 l_msg_count NUMBER;
389
390 BEGIN
391
392 -- Initialize message list if p_init_msg_list is set to TRUE
393 IF FND_API.To_Boolean(p_init_msg_list) THEN
394 FND_MSG_PUB.Initialize;
395 END IF;
396
397 -- Initialize Procedure return status to success
398 x_return_status := FND_API.G_RET_STS_SUCCESS;
399
400 -- Enable Debug.
401 IF G_DEBUG='Y' THEN
402 AHL_DEBUG_PUB.enable_debug;
403 END IF;
404
405 -- Add debug mesg.
406 IF G_DEBUG='Y' THEN
407 AHL_DEBUG_PUB.debug('Begin private API:' || G_PKG_NAME || '.' || l_api_name);
408 END IF;
409
410 -- Convert Value to IDs and validate.
411 -- For maintenance requirement.
412 IF (l_mr_id IS NULL OR l_mr_id = FND_API.G_MISS_NUM) THEN
413 Convert_MRID (l_mr_id, p_mr_title, p_mr_version_number);
414 END IF;
415
416 -- For instance id.
417 IF (l_csi_item_instance_id IS NULL OR
418 l_csi_item_instance_id = FND_API.G_MISS_NUM) THEN
419 Convert_Instance (l_csi_item_instance_id, p_csi_instance_number);
420 END IF;
421
422 -- For unit name.
423 IF (l_unit_config_header_id IS NULL OR
424 l_unit_config_header_id = FND_API.G_MISS_NUM) THEN
425 Convert_Unit (l_unit_config_header_id, p_unit_name);
426 END IF;
427
428 --AMSRINIV: Bug #4360784
429 -- Tamal: Bug #4207212, #4114368 Begin
430 IF (ahl_util_pkg.is_pm_installed = 'Y')
431 THEN
432 Validate_PM_Input_Parameters (l_mr_id, l_csi_item_instance_id, l_contract_number, l_contract_modifier);
433 ELSE
434 Validate_Input_Parameters (l_mr_id, l_csi_item_instance_id, l_unit_config_header_id);
435 END IF;
436 -- Tamal: Bug #4207212, #4114368 End
437
438 -- Check Error Message stack.
439 l_msg_count := FND_MSG_PUB.count_msg;
440 IF l_msg_count > 0 THEN
441 RAISE FND_API.G_EXC_ERROR;
442 END IF;
443
444 -- Depending on input parameters call procedures for processing.
445 -- Tamal: Bug #4207212, #4114368 Begin
446 IF (l_contract_number IS NOT NULL and ahl_util_pkg.is_pm_installed = 'Y') THEN
447 -- Process all units affected by the contract number...
448 AHL_UMP_ProcessUnit_PVT.Process_PM_Contracts
449 (
450 p_commit => FND_API.G_TRUE,
451 p_init_msg_list => FND_API.G_FALSE,
452 x_msg_count => x_msg_count,
453 x_msg_data => x_msg_data,
454 x_return_status => x_return_status,
455 p_contract_number => l_contract_number,
456 p_contract_modifier => l_contract_modifier,
457 p_concurrent_flag => p_concurrent_flag
458 );
459 -- Tamal: Bug #4207212, #4114368 End
460 ELSIF (l_mr_id IS NOT NULL) THEN
461 -- process all units affected by the MR.
462 AHL_UMP_ProcessUnit_PVT.Process_MRAffected_Units (
463 p_commit => FND_API.G_TRUE,
464 x_msg_count => x_msg_count,
465 x_msg_data => x_msg_data,
466 x_return_status => x_return_status,
467 p_mr_header_id => l_mr_id,
468 p_concurrent_flag => p_concurrent_flag,
469 p_num_of_workers => p_num_of_workers,
470 p_mtl_category_id => p_mtl_category_id,
471 p_process_option => p_process_option);
472
473 ELSIF (l_csi_item_instance_id IS NOT NULL) THEN
474 -- Call Process Unit for the item instance.
475 AHL_UMP_ProcessUnit_PVT.Process_Unit (
476 p_commit => FND_API.G_TRUE,
477 x_msg_count => x_msg_count,
478 x_msg_data => x_msg_data,
479 x_return_status => x_return_status,
480 p_csi_item_instance_id => l_csi_item_instance_id,
481 p_concurrent_flag => p_concurrent_flag);
482
483 ELSE
484 -- process all units.
485 AHL_UMP_ProcessUnit_PVT.Process_All_Units (
486 p_commit => FND_API.G_TRUE,
487 x_msg_count => x_msg_count,
488 x_msg_data => x_msg_data,
489 x_return_status => x_return_status,
490 p_concurrent_flag => p_concurrent_flag,
491 p_num_of_workers => p_num_of_workers,
492 p_mtl_category_id => p_mtl_category_id,
493 p_process_option => p_process_option);
494
495 END IF;
496
497 -- Check return status.
498 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
499 RAISE FND_API.G_EXC_ERROR;
500 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
501 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
502 END IF;
503
504 -- Standard call to get message count and if count is 1, get message info
505 FND_MSG_PUB.Count_And_Get
506 ( p_count => x_msg_count,
507 p_data => x_msg_data,
508 p_encoded => fnd_api.g_false
509 );
510
511 --
512 EXCEPTION
513 WHEN FND_API.G_EXC_ERROR THEN
514 x_return_status := FND_API.G_RET_STS_ERROR;
515 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
516 p_data => x_msg_data,
517 p_encoded => fnd_api.g_false);
518 IF (p_concurrent_flag = 'Y') THEN
519 fnd_file.put_line(fnd_file.log, 'Building Unit Effectivity failed. Refer to the error message below.');
520 log_error_messages;
521 END IF;
522 -- Disable debug
523 AHL_DEBUG_PUB.disable_debug;
524
525
526
527 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
528 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
529 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
530 p_data => x_msg_data,
531 p_encoded => fnd_api.g_false);
532
533 IF (p_concurrent_flag = 'Y') THEN
534 fnd_file.put_line(fnd_file.log, 'Building Unit Effectivity failed. Refer to the error message below.');
535 log_error_messages;
536 END IF;
537 -- Disable debug
538 AHL_DEBUG_PUB.disable_debug;
539
540 WHEN OTHERS THEN
541 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
542 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
543 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
544 p_procedure_name => 'Build_UnitEffectivity_PVT',
545 p_error_text => SUBSTR(SQLERRM,1,240));
546 END IF;
547 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
548 p_data => x_msg_data,
549 p_encoded => fnd_api.g_false);
550
551 IF (p_concurrent_flag = 'Y') THEN
552 fnd_file.put_line(fnd_file.log, 'Building Unit Effectivity failed. Refer to the error message below.');
553 log_error_messages;
554 END IF;
555
556 -- Disable debug
557 AHL_DEBUG_PUB.disable_debug;
558
559 END Build_UnitEffectivity;
560
561 -----------------------------
562
563 PROCEDURE Capture_MR_Updates
564 (
565 p_api_version IN NUMBER,
566 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
567 p_commit IN VARCHAR2 := FND_API.G_FALSE,
568 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
569 p_default IN VARCHAR2 := FND_API.G_TRUE,
570 p_module_type IN VARCHAR2 := NULL,
571 p_unit_Effectivity_tbl IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_tbl_type,
572 p_x_unit_threshold_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type,
573 p_x_unit_accomplish_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type,
574 x_return_status OUT NOCOPY VARCHAR2,
575 x_msg_count OUT NOCOPY NUMBER,
576 x_msg_data OUT NOCOPY VARCHAR2) IS
577
578 l_api_version CONSTANT NUMBER := 1.5;
579 l_api_name CONSTANT VARCHAR2(30) := 'Capture_MR_Updates';
580 l_unit_Effectivity_rec AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type;
581 l_unit_threshold_tbl AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type;
582 l_unit_accomplish_tbl AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type;
583 l_MR_Initialization_flag VARCHAR2(1) := 'N';
584 l_prev_status VARCHAR2(30);
585 l_prev_object_version_no NUMBER;
586 l_counter_index BINARY_INTEGER := 0;
587 l_temp_return_status VARCHAR2(30);
588
589 BEGIN
590
591 -- Standard start of API savepoint
592 SAVEPOINT Capture_MR_Updates_pvt;
593
594 -- Standard call to check for call compatibility
595 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
596 G_PKG_NAME) THEN
597 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
598 END IF;
599
600 -- Initialize message list if p_init_msg_list is set to TRUE
601 IF FND_API.To_Boolean(p_init_msg_list) THEN
602 FND_MSG_PUB.Initialize;
603 END IF;
604
605 -- Initialize API return status to success
606 x_return_status := FND_API.G_RET_STS_SUCCESS;
607
608 -- Begin Processing
609
610 -- Enable Debug (optional)
611 IF G_DEBUG='Y' THEN
612 AHL_DEBUG_PUB.enable_debug;
613 END IF;
614
615 -- Check if the user is authorized: is in role AHL_UMP_MR_INITIALIZE
616 -- This functionality is not available now. So allow always
617 l_MR_Initialization_flag := 'Y';
618
619 IF (p_unit_Effectivity_tbl.COUNT > 0) THEN
620 -- If from JSP, nullify counter ids since they come from LOV
621 IF (p_module_type = 'JSP') THEN
622 IF (p_x_unit_threshold_tbl.COUNT > 0) THEN
623 FOR i IN p_x_unit_threshold_tbl.FIRST..p_x_unit_threshold_tbl.LAST LOOP
624 p_x_unit_threshold_tbl(i).COUNTER_ID := null;
625 END LOOP;
626 END IF;
627 IF (p_x_unit_accomplish_tbl.COUNT > 0) THEN
628 FOR j IN p_x_unit_accomplish_tbl.FIRST..p_x_unit_accomplish_tbl.LAST LOOP
629 p_x_unit_accomplish_tbl(j).COUNTER_ID := null;
630 END LOOP;
631 END IF;
632 END IF;
633
634 IF FND_API.to_boolean( p_default ) THEN
635 -- No special default settings required in this API
636 null;
637 END IF;
638 IF G_DEBUG='Y' THEN
639 AHL_DEBUG_PUB.debug('Beginning Processing... ', 'UMP');
640 END IF;
641 -- Start processing
642 FOR i IN p_unit_Effectivity_tbl.FIRST..p_unit_Effectivity_tbl.LAST LOOP
643 -- Initialize Return Status for this Unit Effectivity to SUCCESS
644 l_temp_return_status := FND_API.G_RET_STS_SUCCESS;
645 l_unit_Effectivity_rec := p_unit_Effectivity_tbl(i);
646
647 -- Resolve Values to Ids
648 convert_effectivity_val_to_id(l_unit_Effectivity_rec, l_temp_return_status);
649 IF G_DEBUG='Y' THEN
650 AHL_DEBUG_PUB.debug('Resolved Values to Id for Effectivity', 'UMP');
651 END IF;
652 -- Ignore errors from the resolution process
653 l_temp_return_status := FND_API.G_RET_STS_SUCCESS;
654
655 -- Validate the current unit effectivity record
656 Validate_Effectivity(l_unit_Effectivity_rec, l_MR_Initialization_flag, l_temp_return_status);
657 IF G_DEBUG='Y' THEN
658 AHL_DEBUG_PUB.debug('Validated Effectivity, Status = ' || l_temp_return_status, 'UMP');
659
660 END IF;
661 -- Continue processing this effectivity only if there are no errors
662 IF G_DEBUG='Y' THEN
663 AHL_DEBUG_PUB.debug('About to process thresholds', 'UMP');
664 AHL_DEBUG_PUB.debug('Count threshold:' || p_x_unit_threshold_tbl.count, 'UMP');
665 END IF;
666 IF l_temp_return_status = FND_API.G_RET_STS_SUCCESS THEN
667 -- Get all the thresholds for the current effectivity
668 IF (p_x_unit_threshold_tbl.COUNT > 0) THEN
669 l_counter_index := 0;
670 FOR j IN p_x_unit_threshold_tbl.FIRST..p_x_unit_threshold_tbl.LAST LOOP
671 IF (p_x_unit_threshold_tbl(j).UNIT_EFFECTIVITY_ID = l_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID) THEN
672 l_counter_index := l_counter_index + 1;
673 l_unit_threshold_tbl(l_counter_index) := p_x_unit_threshold_tbl(j);
674 END IF;
675 END LOOP; /* thresholds-table */
676 Validate_Thresholds(l_unit_threshold_tbl, l_temp_return_status);
677 IF G_DEBUG='Y' THEN
678 AHL_DEBUG_PUB.debug('Validated Threshold', 'UMP');
679 END IF;
680 END IF;
681
682 IF G_DEBUG='Y' THEN
683 AHL_DEBUG_PUB.debug('About to process accomplishments', 'UMP');
684 AHL_DEBUG_PUB.debug('Count accomplishments Tbl:' || p_x_unit_accomplish_tbl.count, 'UMP');
685 END IF;
686 -- Get all the accomplishments for the current effectivity
687 IF (p_x_unit_accomplish_tbl.COUNT > 0) THEN
688 l_counter_index := 0;
689 FOR k IN p_x_unit_accomplish_tbl.FIRST..p_x_unit_accomplish_tbl.LAST LOOP
690 IF (p_x_unit_accomplish_tbl(k).UNIT_EFFECTIVITY_ID = l_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID) THEN
691 l_counter_index := l_counter_index + 1;
692 l_unit_accomplish_tbl(l_counter_index) := p_x_unit_accomplish_tbl(k);
693 END IF;
694 END LOOP; /* accomplishments-table */
695 Validate_Accomplishments(l_unit_accomplish_tbl, l_unit_Effectivity_rec.ACCOMPLISHED_DATE,
696 l_unit_Effectivity_rec.STATUS_CODE, l_temp_return_status);
697 IF G_DEBUG='Y' THEN
698 AHL_DEBUG_PUB.debug('Validated Accomplishment', 'UMP');
699 END IF;
700 END IF;
701
702 -- Proceed to updating the database only if there are no errors
703 IF l_temp_return_status = FND_API.G_RET_STS_SUCCESS THEN
704
705 IF G_DEBUG='Y' THEN
706 AHL_DEBUG_PUB.debug('About to update thresholds', 'UMP');
707 END IF;
708 -- First Update the Unit Thresholds Table
709 Update_Thresholds(l_unit_Effectivity_rec,
710 l_unit_threshold_tbl);
711 IF G_DEBUG='Y' THEN
712 AHL_DEBUG_PUB.debug('About to restore thresholds', 'UMP');
713 END IF;
714 -- Restore the saved thresholds in the IN OUT parameter
715 Restore_Thresholds(p_x_unit_threshold_tbl, l_unit_threshold_tbl);
716
717 IF G_DEBUG='Y' THEN
718 AHL_DEBUG_PUB.debug('About to update accomplishments', 'UMP');
719 END IF;
720 -- Next Update the Unit Accomplishments Table
721 Update_Accomplishments(l_unit_accomplish_tbl, l_unit_Effectivity_rec);
722 IF G_DEBUG='Y' THEN
723 AHL_DEBUG_PUB.debug('About to restore accomplishments', 'UMP');
724 END IF;
725 -- Restore the saved accomplishments in the IN OUT parameter
726 Restore_Accomplishments(p_x_unit_accomplish_tbl, l_unit_accomplish_tbl);
727
728 IF G_DEBUG='Y' THEN
729 AHL_DEBUG_PUB.debug('About to update unit effectivity', 'UMP');
730 END IF;
731 -- Finally update the Unit Effectivities Table
732 Update_Unit_Effectivity(l_unit_Effectivity_rec);
733 IF G_DEBUG='Y' THEN
734 AHL_DEBUG_PUB.debug('Updated unit effectivity', 'UMP');
735 END IF;
736 END IF;
737 END IF;
738
739 -- Clear the local tables to prepare for next Unit effectivity
740 l_unit_threshold_tbl.DELETE;
741 l_unit_accomplish_tbl.DELETE;
742 END LOOP; /* effectivity-table */
743 END IF;
744
745 IF G_DEBUG='Y' THEN
746 AHL_DEBUG_PUB.debug('Completed Processing. Checking for errors', 'UMP');
747 END IF;
748 -- Check Error Message stack.
749 x_msg_count := FND_MSG_PUB.count_msg;
750 IF x_msg_count > 0 THEN
751 RAISE FND_API.G_EXC_ERROR;
752 END IF;
753
754 -- Standard check of p_commit
755 IF FND_API.TO_BOOLEAN(p_commit) THEN
756 COMMIT WORK;
757 END IF;
758
759 -- Standard call to get message count and if count is 1, get message info
760 FND_MSG_PUB.Count_And_Get
761 ( p_count => x_msg_count,
762 p_data => x_msg_data,
763 p_encoded => fnd_api.g_false
764 );
765
766 -- Disable debug (if enabled)
767 AHL_DEBUG_PUB.disable_debug;
768
769 EXCEPTION
770 WHEN FND_API.G_EXC_ERROR THEN
771 Rollback to Capture_MR_Updates_pvt;
772 x_return_status := FND_API.G_RET_STS_ERROR;
773 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
774 p_data => x_msg_data,
775 p_encoded => fnd_api.g_false);
776 --AHL_UTIL_PKG.Err_Mesg_To_Table(x_err_mesg_tbl);
777
778
779 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
780 Rollback to Capture_MR_Updates_pvt;
781 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
782 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
783 p_data => x_msg_data,
784 p_encoded => fnd_api.g_false);
785 --AHL_UTIL_PKG.Err_Mesg_To_Table(x_err_mesg_tbl);
786
787 WHEN OTHERS THEN
788 Rollback to Capture_MR_Updates_pvt;
789 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
790 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
791 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
792 p_procedure_name => 'Capture_MR_Updates',
793 p_error_text => SUBSTR(SQLERRM,1,240));
794 END IF;
795 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
796 p_data => x_msg_data,
797 p_encoded => fnd_api.g_false);
798 --AHL_UTIL_PKG.Err_Mesg_To_Table(x_err_mesg_tbl);
799
800
801 END Capture_MR_Updates;
802
803 -----------------------------
804
805 PROCEDURE Validate_For_Initialize
806 (
807 p_api_version IN NUMBER,
808 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
809 p_commit IN VARCHAR2 := FND_API.G_FALSE,
810 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
811 p_default IN VARCHAR2 := FND_API.G_TRUE,
812 p_module_type IN VARCHAR2 := NULL,
813 p_unit_effectivity_id IN NUMBER,
814 x_return_status OUT NOCOPY VARCHAR2,
815 x_msg_count OUT NOCOPY NUMBER,
816 x_msg_data OUT NOCOPY VARCHAR2
817 ) IS
818
819
820 CURSOR l_child_mr_csr(p_ue_id IN NUMBER) IS
821 SELECT 'x'
822 FROM AHL_UE_RELATIONSHIPS
823 WHERE related_ue_id = p_ue_id;
824
825 CURSOR l_prior_initializations_csr(p_mr_id IN NUMBER,
826 p_item_instance_id IN NUMBER,
827 p_ue_id IN NUMBER) IS
828 SELECT 'x'
829 FROM AHL_UNIT_EFFECTIVITIES_APP_V
830 WHERE MR_HEADER_ID = p_mr_id AND
831 CSI_ITEM_INSTANCE_ID = p_item_instance_id AND
832 status_code IN ('INIT-DUE', 'INIT-ACCOMPLISHED') AND
833 UNIT_EFFECTIVITY_ID <> p_ue_id;
834
835 CURSOR l_ue_details_csr(p_ue_id IN NUMBER) IS
836 SELECT MR_HEADER_ID, CSI_ITEM_INSTANCE_ID, REPETITIVE_MR_FLAG, STATUS_CODE
837 FROM AHL_UNIT_EFFECTIVITIES_APP_V
838 WHERE UNIT_EFFECTIVITY_ID = p_ue_id;
839
840 l_api_version CONSTANT NUMBER := 1.0;
841 l_api_name CONSTANT VARCHAR2(30) := 'Validate_For_Initialize';
842 l_junk VARCHAR2(1);
843 l_mr_id NUMBER;
844 l_item_instance_id NUMBER;
845 l_repetitive_mr_flag VARCHAR2(1);
846 l_status_code VARCHAR2(30);
847 l_MR_Initialization_flag VARCHAR2(1) := 'N';
848 l_last_accomplish_date DATE := null;
849 l_last_ue_id NUMBER := null;
850 l_temp_status BOOLEAN;
851 l_temp_status_code VARCHAR2(30);
852 l_temp_deferral_flag BOOLEAN;
853
854 l_prior_ue_status VARCHAR2(30);
855
856 -- added for visit validation
857 l_visit_status VARCHAR2(100);
858
859 BEGIN
860 --IF G_DEBUG='Y' THEN
861 -- AHL_DEBUG_PUB.enable_debug;
862 --END IF;
863 -- Standard call to check for call compatibility
864 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
865 G_PKG_NAME) THEN
866 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
867 END IF;
868
869 -- Initialize message list if p_init_msg_list is set to TRUE
870 IF FND_API.To_Boolean(p_init_msg_list) THEN
871 FND_MSG_PUB.Initialize;
872 END IF;
873
874 -- Initialize API return status to success
875 x_return_status := FND_API.G_RET_STS_SUCCESS;
876
877 -- Begin Processing
878
879 -- Ensure that the User is authorized to initialize
880 -- This functionality is not available now. So allow always
881 l_MR_Initialization_flag := 'Y';
882 IF (l_MR_Initialization_flag <> 'Y') THEN
883 x_return_status := FND_API.G_RET_STS_ERROR;
884 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UNAUTHORIZED_USER');
885 FND_MSG_PUB.ADD;
886 --IF G_DEBUG='Y' THEN
887 --AHL_DEBUG_PUB.debug('Unauthorized User', 'UMP:Validate_For_Initialize');
888 --END IF;
889 RAISE FND_API.G_EXC_ERROR;
890 END IF;
891
892 IF (p_unit_effectivity_id IS NULL OR p_unit_effectivity_id = FND_API.G_MISS_NUM) THEN
893 x_return_status := FND_API.G_RET_STS_ERROR;
894 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_ID_NULL');
895 FND_MSG_PUB.ADD;
896 --IF G_DEBUG='Y' THEN
897 --AHL_DEBUG_PUB.debug('Null Effectivity', 'UMP:Validate_For_Initialize');
898 --END IF;
899 RAISE FND_API.G_EXC_ERROR;
900 END IF;
901
902 -- Ensure that this is not a repetitive MR
903 OPEN l_ue_details_csr(p_unit_effectivity_id);
904 FETCH l_ue_details_csr INTO l_mr_id, l_item_instance_id, l_repetitive_mr_flag, l_status_code;
905 IF (l_ue_details_csr%NOTFOUND) THEN
906 x_return_status := FND_API.G_RET_STS_ERROR;
907 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_ID_INVALID');
908 FND_MESSAGE.Set_Token('UEID', p_unit_effectivity_id);
909 FND_MSG_PUB.ADD;
910 CLOSE l_ue_details_csr;
911 --IF G_DEBUG='Y' THEN
912 --AHL_DEBUG_PUB.debug('Invalid Effectivity Id', 'UMP:Validate_For_Initialize');
913 --END IF;
914 RAISE FND_API.G_EXC_ERROR;
915 ELSE
916 --Ensure that unit is not locked
917 IF(AHL_UTIL_UC_PKG.IS_UNIT_QUARANTINED(p_unit_header_id => null, p_instance_id => l_item_instance_id) = FND_API.G_TRUE) THEN
918 x_return_status := FND_API.G_RET_STS_ERROR;
919 FND_MESSAGE.Set_Name('AHL','AHL_UMP_INIT_UNIT_LOCKED');
920 FND_MSG_PUB.ADD;
921 CLOSE l_ue_details_csr;
922 RAISE FND_API.G_EXC_ERROR;
923 END IF;
924 IF (l_repetitive_mr_flag = 'Y') THEN
925 x_return_status := FND_API.G_RET_STS_ERROR;
926 FND_MESSAGE.Set_Name('AHL','AHL_UMP_INVALID_MR_TYPE');
927 FND_MSG_PUB.ADD;
928 --IF G_DEBUG='Y' THEN
929 --AHL_DEBUG_PUB.debug('Repetitive Effectivity', 'UMP:Validate_For_Initialize');
930 --END IF;
931 CLOSE l_ue_details_csr;
932 RAISE FND_API.G_EXC_ERROR;
933 ELSE
934 CLOSE l_ue_details_csr;
935 END IF;
936 END IF;
937
938 -- Ensure that this is not a child MR
939 OPEN l_child_mr_csr(p_unit_effectivity_id);
940 FETCH l_child_mr_csr INTO l_junk;
941 IF (l_child_mr_csr%FOUND) THEN
942 FND_MESSAGE.Set_Name('AHL','AHL_UMP_CHILD_MR');
943 FND_MSG_PUB.ADD;
944 CLOSE l_child_mr_csr;
945 --IF G_DEBUG='Y' THEN
946 --AHL_DEBUG_PUB.debug('Child MR', 'UMP:Validate_For_Initialize');
947 --END IF;
948 RAISE FND_API.G_EXC_ERROR;
949 ELSE
950 CLOSE l_child_mr_csr;
951 END IF;
952
953 -- Ensure that the Current status is null, init-due or init-accomplished only
954 IF ((l_status_code IS NOT NULL) AND (l_status_code <> 'INIT-DUE') AND (l_status_code <> 'INIT-ACCOMPLISHED')) THEN
955 x_return_status := FND_API.G_RET_STS_ERROR;
956 FND_MESSAGE.Set_Name('AHL','AHL_UMP_INVALID_STATUS');
957 FND_MESSAGE.Set_Token('STATUS', l_status_code);
958 FND_MSG_PUB.ADD;
959 --IF G_DEBUG='Y' THEN
960 --AHL_DEBUG_PUB.debug('Invalid Status: ' || 'l_status_code', 'UMP:Validate_For_Initialize');
961 --END IF;
962 RAISE FND_API.G_EXC_ERROR;
963 END IF;
964
965 -- Ensure that there are no prior accomplishments
966 AHL_UMP_UTIL_PKG.get_last_accomplishment(l_item_instance_id, l_mr_id, l_last_accomplish_date, l_last_ue_id, l_temp_deferral_flag, l_temp_status_code, l_temp_status);
967 IF (l_temp_status = FALSE) THEN
968 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
969 END IF;
970 IF (l_temp_status_code <> 'INIT-ACCOMPLISHED' and l_last_accomplish_date IS NOT null) THEN
971 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ALRDY_ACCMPLSHD');
972 FND_MSG_PUB.ADD;
973 --IF G_DEBUG='Y' THEN
974 --AHL_DEBUG_PUB.debug('Already Accomplished', 'UMP:Validate_For_Initialize');
975 --END IF;
976 RAISE FND_API.G_EXC_ERROR;
977 END IF;
978
979 -- Ensure that there are no prior initializations
980 OPEN l_prior_initializations_csr(l_mr_id, l_item_instance_id, p_unit_effectivity_id);
981 FETCH l_prior_initializations_csr INTO l_prior_ue_status;
982 IF (l_prior_initializations_csr%FOUND) THEN
983 x_return_status := FND_API.G_RET_STS_ERROR;
984 IF (l_prior_ue_status = 'DEFERRED') THEN
985 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ALRDY_DEFERRED');
986 FND_MSG_PUB.ADD;
987 ELSE
988 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ALRDY_INITLZD');
989 FND_MSG_PUB.ADD;
990 END IF;
991 CLOSE l_prior_initializations_csr;
992 --IF G_DEBUG='Y' THEN
993 --AHL_DEBUG_PUB.debug('Has prior Initializations', 'UMP:Validate_For_Initialize');
994 --END IF;
995 RAISE FND_API.G_EXC_ERROR;
996 ELSE
997 CLOSE l_prior_initializations_csr;
998 END IF;
999
1000 x_msg_count := FND_MSG_PUB.count_msg;
1001 IF x_msg_count > 0 THEN
1002 RAISE FND_API.G_EXC_ERROR;
1003 END IF;
1004
1005 EXCEPTION
1006 WHEN FND_API.G_EXC_ERROR THEN
1007 x_return_status := FND_API.G_RET_STS_ERROR;
1008 x_msg_count := FND_MSG_PUB.count_msg;
1009 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1010 p_data => x_msg_data,
1011 p_encoded => fnd_api.g_false);
1012
1013
1014 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1015 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1016 x_msg_count := FND_MSG_PUB.count_msg;
1017 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1018 p_data => x_msg_data,
1019 p_encoded => fnd_api.g_false);
1020
1021 WHEN OTHERS THEN
1022 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1023 x_msg_count := FND_MSG_PUB.count_msg;
1024 -- IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1025 -- fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
1026 -- p_procedure_name => 'Validate_For_Initialize',
1027 -- p_error_text => SUBSTR(SQLERRM,1,240));
1028 -- END IF;
1029 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1030 p_data => x_msg_data,
1031 p_encoded => fnd_api.g_false);
1032
1033 END Validate_For_Initialize;
1034
1035 ----------------------------------------
1036 -- Local Procedure Definitions follow --
1037 ----------------------------------------
1038
1039 PROCEDURE Convert_Effectivity_Val_To_ID(
1040 p_x_unit_Effectivity_rec IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type,
1041 x_return_status OUT NOCOPY VARCHAR2 ) IS
1042
1043 CURSOR l_get_mr_id_csr(p_mr_title IN VARCHAR2,
1044 p_mr_version_number IN NUMBER) IS
1045 SELECT MR_HEADER_ID
1046 FROM AHL_MR_HEADERS_B
1047 WHERE TITLE = p_mr_title AND
1048 VERSION_NUMBER = p_mr_version_number;
1049
1050 CURSOR l_get_item_instance_id_csr(p_instance_number IN VARCHAR2) IS
1051 SELECT INSTANCE_ID
1052 FROM CSI_ITEM_INSTANCES
1053 WHERE INSTANCE_NUMBER = p_instance_number;
1054
1055 CURSOR l_get_status_code_csr(p_status_meaning IN VARCHAR2) IS
1056 SELECT LOOKUP_CODE
1057 FROM fnd_lookup_values_vl
1058 WHERE lookup_type = 'AHL_UNIT_EFFECTIVITY_STATUS' AND
1059 MEANING = p_status_meaning;
1060
1061 l_mr_id NUMBER;
1062 l_item_instance_id NUMBER;
1063 l_status_code VARCHAR2(30);
1064
1065 BEGIN
1066 -- Initialize API return status to success
1067 x_return_status := FND_API.G_RET_STS_SUCCESS;
1068
1069 -- Resolve MR_ID
1070 IF(p_x_unit_Effectivity_rec.MR_ID IS NULL OR p_x_unit_Effectivity_rec.MR_ID = FND_API.G_MISS_NUM) THEN
1071 IF((p_x_unit_Effectivity_rec.MR_TITLE IS NOT NULL AND p_x_unit_Effectivity_rec.MR_TITLE <> FND_API.G_MISS_CHAR) AND
1072 (p_x_unit_Effectivity_rec.MR_VERSION_NUMBER IS NOT NULL AND p_x_unit_Effectivity_rec.MR_VERSION_NUMBER <> FND_API.G_MISS_NUM)) THEN
1073 OPEN l_get_mr_id_csr(p_x_unit_Effectivity_rec.MR_TITLE, p_x_unit_Effectivity_rec.MR_VERSION_NUMBER);
1074 FETCH l_get_mr_id_csr INTO l_mr_id;
1075 IF (l_get_mr_id_csr%FOUND) THEN
1076 p_x_unit_Effectivity_rec.MR_ID := l_mr_id;
1077 ELSE
1078 -- No match
1079 x_return_status := FND_API.G_RET_STS_ERROR;
1080 END IF;
1081 CLOSE l_get_mr_id_csr;
1082 ELSE
1083 -- Insufficient information to retrieve mr_id
1084 x_return_status := FND_API.G_RET_STS_ERROR;
1085 END IF;
1086 END IF;
1087
1088 -- Resolve CSI_ITEM_INSTANCE_ID
1089 IF(p_x_unit_Effectivity_rec.CSI_ITEM_INSTANCE_ID IS NULL OR p_x_unit_Effectivity_rec.CSI_ITEM_INSTANCE_ID = FND_API.G_MISS_NUM) THEN
1090 IF(p_x_unit_Effectivity_rec.CSI_INSTANCE_NUMBER IS NOT NULL AND p_x_unit_Effectivity_rec.CSI_INSTANCE_NUMBER <> FND_API.G_MISS_CHAR) THEN
1091 OPEN l_get_item_instance_id_csr(p_x_unit_Effectivity_rec.CSI_INSTANCE_NUMBER);
1092 FETCH l_get_item_instance_id_csr INTO l_item_instance_id;
1093 IF (l_get_item_instance_id_csr%FOUND) THEN
1094 p_x_unit_Effectivity_rec.CSI_ITEM_INSTANCE_ID := l_item_instance_id;
1095 ELSE
1096 -- No match
1097 x_return_status := FND_API.G_RET_STS_ERROR;
1098 END IF;
1099 CLOSE l_get_item_instance_id_csr;
1100 ELSE
1101 -- Insufficient information to retrieve item instance id
1102 x_return_status := FND_API.G_RET_STS_ERROR;
1103 END IF;
1104 END IF;
1105
1106 -- Resolve STATUS_CODE
1107 IF(p_x_unit_Effectivity_rec.STATUS_CODE IS NULL OR p_x_unit_Effectivity_rec.STATUS_CODE = FND_API.G_MISS_CHAR) THEN
1108 IF(p_x_unit_Effectivity_rec.STATUS IS NOT NULL AND p_x_unit_Effectivity_rec.STATUS <> FND_API.G_MISS_CHAR) THEN
1109 OPEN l_get_status_code_csr(p_x_unit_Effectivity_rec.STATUS);
1110 FETCH l_get_status_code_csr INTO l_status_code;
1111 IF (l_get_status_code_csr%FOUND) THEN
1112 p_x_unit_Effectivity_rec.STATUS_CODE := l_status_code;
1113 ELSE
1114 -- No match
1115 x_return_status := FND_API.G_RET_STS_ERROR;
1116 END IF;
1117 CLOSE l_get_status_code_csr;
1118 ELSE
1119 -- Insufficient information to retrieve status code
1120 x_return_status := FND_API.G_RET_STS_ERROR;
1121 END IF;
1122 END IF;
1123
1124 --
1125
1126 END Convert_Effectivity_Val_To_ID;
1127
1128 ------------------------------------
1129
1130 PROCEDURE Convert_Threshold_Val_To_ID(
1131 p_x_unit_threshold_rec IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_Rec_Type,
1132 x_return_status OUT NOCOPY VARCHAR2 ) IS
1133
1134 CURSOR l_get_counter_id(p_counter_name IN VARCHAR2,
1135 p_ue_id IN NUMBER) IS
1136 /*SELECT co.counter_id
1137 FROM csi_cp_counters_v co, ahl_unit_effectivities_app_v ue
1138 WHERE co.COUNTER_NAME = p_counter_name AND
1139 ue.UNIT_EFFECTIVITY_ID = p_ue_id AND
1140 ue.csi_item_instance_id = CUSTOMER_PRODUCT_ID;*/
1141
1142 --performace tuning related change
1143
1144 /*SELECT c.counter_id
1145 FROM CS_COUNTERS C, CS_COUNTER_GROUPS CTRGRP, CSI_ITEM_INSTANCES CII, MTL_SYSTEM_ITEMS_KFV MSITEM, ahl_unit_effectivities_app_v ue
1146 WHERE C.COUNTER_GROUP_ID(+) = CTRGRP.COUNTER_GROUP_ID
1147 AND CTRGRP.SOURCE_OBJECT_CODE = 'CP'
1148 AND CTRGRP.SOURCE_OBJECT_ID = CII.INSTANCE_ID
1149 AND MSITEM.INVENTORY_ITEM_ID = CII.INVENTORY_ITEM_ID
1150 AND MSITEM.ORGANIZATION_ID = CII.INV_MASTER_ORGANIZATION_ID
1151 AND ue.csi_item_instance_id = CII.INSTANCE_ID
1152 AND c.NAME = p_counter_name
1153 AND ue.UNIT_EFFECTIVITY_ID = p_ue_id;*/
1154
1155 --Priyan
1156 --Query changes due to performance related issues
1157 --Refer Bug # 4918732
1158
1159 select
1160 cc.counter_id
1161 from
1162 csi_counters_vl cc,
1163 csi_counter_associations cca,
1164 ahl_unit_effectivities_b ue
1165 where
1166 cc.counter_id (+) = cca.counter_id
1167 and cca.source_object_code = 'CP'
1168 and cca.source_object_id = ue.csi_item_instance_id
1169 and cc.name = p_counter_name
1170 --and cc.counter_template_name = p_counter_name
1171 and ue.unit_effectivity_id = p_ue_id;
1172
1173 l_counter_id NUMBER;
1174
1175 BEGIN
1176 -- Initialize API return status to success
1177 x_return_status := FND_API.G_RET_STS_SUCCESS;
1178
1179 -- Resolve Counter_ID
1180 IF (p_x_unit_threshold_rec.counter_id IS NULL) OR (p_x_unit_threshold_rec.counter_id = FND_API.G_MISS_NUM) THEN
1181 IF ((p_x_unit_threshold_rec.counter_name IS NOT NULL AND p_x_unit_threshold_rec.counter_name <> FND_API.G_MISS_CHAR) AND
1182 (p_x_unit_threshold_rec.unit_effectivity_id IS NOT NULL AND p_x_unit_threshold_rec.unit_effectivity_id <> FND_API.G_MISS_NUM))THEN
1183 OPEN l_get_counter_id(p_x_unit_threshold_rec.counter_name, p_x_unit_threshold_rec.unit_effectivity_id);
1184 FETCH l_get_counter_id INTO l_counter_id;
1185 IF (l_get_counter_id%FOUND) THEN
1186 p_x_unit_threshold_rec.counter_id := l_counter_id;
1187 ELSE
1188 -- No match
1189 x_return_status := FND_API.G_RET_STS_ERROR;
1190 END IF;
1191 CLOSE l_get_counter_id;
1192 ELSE
1193 -- Insufficient information to retrieve counter_id
1194 x_return_status := FND_API.G_RET_STS_ERROR;
1195 END IF;
1196 END IF;
1197
1198 END Convert_Threshold_Val_To_ID;
1199
1200 ------------------------------------
1201
1202 PROCEDURE Convert_Accomplish_Val_To_ID(
1203 p_x_unit_accomplish_rec IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_rec_type,
1204 x_return_status OUT NOCOPY VARCHAR2 ) IS
1205
1206 CURSOR l_get_counter_id(p_counter_name IN VARCHAR2,
1207 p_ue_id IN NUMBER) IS
1208 /*SELECT co.counter_id
1209 FROM csi_cp_counters_v co, ahl_unit_effectivities_app_v ue
1210 WHERE co.COUNTER_NAME = p_counter_name AND
1211 ue.UNIT_EFFECTIVITY_ID = p_ue_id AND
1212 ue.csi_item_instance_id = CUSTOMER_PRODUCT_ID;*/
1213
1214 --performace tuning related change
1215 /*
1216 SELECT c.counter_id
1217 FROM CS_COUNTERS C, CS_COUNTER_GROUPS CTRGRP, CSI_ITEM_INSTANCES CII, MTL_SYSTEM_ITEMS_KFV MSITEM, ahl_unit_effectivities_app_v ue
1218 WHERE C.COUNTER_GROUP_ID(+) = CTRGRP.COUNTER_GROUP_ID
1219 AND CTRGRP.SOURCE_OBJECT_CODE = 'CP'
1220 AND CTRGRP.SOURCE_OBJECT_ID = CII.INSTANCE_ID
1221 AND MSITEM.INVENTORY_ITEM_ID = CII.INVENTORY_ITEM_ID
1222 AND MSITEM.ORGANIZATION_ID = CII.INV_MASTER_ORGANIZATION_ID
1223 AND ue.csi_item_instance_id = CII.INSTANCE_ID
1224 AND c.NAME = p_counter_name
1225 AND ue.UNIT_EFFECTIVITY_ID = p_ue_id; */
1226
1227 select
1228 cc.counter_id
1229 from
1230 csi_counters_vl cc,
1231 csi_counter_associations cca,
1232 ahl_unit_effectivities_b ue
1233 where
1234 cc.counter_id (+) = cca.counter_id
1235 and cca.source_object_code = 'CP'
1236 and cca.source_object_id = ue.csi_item_instance_id
1237 and cc.name = p_counter_name
1238 --and cc.counter_template_name = p_counter_name
1239 and ue.unit_effectivity_id = p_ue_id;
1240
1241 l_counter_id NUMBER;
1242
1243 BEGIN
1244 -- Initialize API return status to success
1245 x_return_status := FND_API.G_RET_STS_SUCCESS;
1246
1247 -- Resolve Counter_ID
1248 IF (p_x_unit_accomplish_rec.counter_id IS NULL) OR (p_x_unit_accomplish_rec.counter_id = FND_API.G_MISS_NUM) THEN
1249 IF ((p_x_unit_accomplish_rec.counter_name IS NOT NULL AND p_x_unit_accomplish_rec.counter_name <> FND_API.G_MISS_CHAR) AND
1250 (p_x_unit_accomplish_rec.unit_effectivity_id IS NOT NULL AND p_x_unit_accomplish_rec.unit_effectivity_id <> FND_API.G_MISS_NUM))THEN
1251 OPEN l_get_counter_id(p_x_unit_accomplish_rec.counter_name, p_x_unit_accomplish_rec.unit_effectivity_id);
1252 FETCH l_get_counter_id INTO l_counter_id;
1253 IF (l_get_counter_id%FOUND) THEN
1254 p_x_unit_accomplish_rec.counter_id := l_counter_id;
1255 ELSE
1256 -- No match
1257 x_return_status := FND_API.G_RET_STS_ERROR;
1258 END IF;
1259 CLOSE l_get_counter_id;
1260 ELSE
1261 -- Insufficient information to retrieve counter_id
1262 x_return_status := FND_API.G_RET_STS_ERROR;
1263 END IF;
1264 END IF;
1265
1266 END Convert_Accomplish_Val_To_ID;
1267
1268 -----------------------------
1269
1270 PROCEDURE Validate_Effectivity
1271 (
1272 p_unit_Effectivity_rec IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type,
1273 p_authorized_user_flag IN VARCHAR2 := 'N',
1274 x_return_status IN OUT NOCOPY VARCHAR2) IS
1275
1276 CURSOR l_invalid_descendents_csr(p_ue_id IN NUMBER) IS
1277 SELECT 'x'
1278 FROM ahl_unit_effectivities_app_v
1279 WHERE (status_code not in ('INIT-ACCOMPLISHED', 'TERMINATED', 'MR-TERMINATE', 'ACCOMPLISHED','SR-CLOSED','DEFERRED','CANCELLED') OR status_code IS NULL)
1280 AND unit_effectivity_id in (
1281 SELECT related_ue_id
1282 FROM ahl_ue_relationships
1283 START WITH ue_id = p_ue_id
1284 AND relationship_code = 'PARENT'
1285 CONNECT BY ue_id = PRIOR related_ue_id
1286 AND relationship_code = 'PARENT');
1287
1288 CURSOR l_prior_initializations_csr(p_mr_id IN NUMBER,
1289 p_item_instance_id IN NUMBER,
1290 p_ue_id IN NUMBER) IS
1291 SELECT status_code
1292 FROM AHL_UNIT_EFFECTIVITIES_APP_V
1293 WHERE MR_HEADER_ID = p_mr_id AND
1294 CSI_ITEM_INSTANCE_ID = p_item_instance_id AND
1295 status_code IN ('INIT-DUE', 'INIT-ACCOMPLISHED','DEFERRED') AND
1296 UNIT_EFFECTIVITY_ID <> p_ue_id;
1297
1298 CURSOR l_ue_details_csr(p_ue_id IN NUMBER) IS
1299 SELECT STATUS_CODE, OBJECT_VERSION_NUMBER, MR_HEADER_ID,
1300 CSI_ITEM_INSTANCE_ID, PRECEDING_UE_ID,SERVICE_LINE_ID
1301 FROM AHL_UNIT_EFFECTIVITIES_APP_V
1302 WHERE UNIT_EFFECTIVITY_ID = p_ue_id;
1303
1304 -- Added p_service_line_id as part of bugfix 6903768(FP for bug# 5764351).
1305 CURSOR l_prior_ue_csr(p_mr_id IN NUMBER,
1306 p_item_instance_id IN NUMBER,
1307 p_service_line_id IN NUMBER) IS
1308 /*
1309 SELECT UNIT_EFFECTIVITY_ID
1310 FROM AHL_UNIT_EFFECTIVITIES_APP_V
1311 WHERE MR_HEADER_ID = p_mr_id AND
1312 CSI_ITEM_INSTANCE_ID = p_item_instance_id AND
1313 FORECAST_SEQUENCE = (SELECT MIN(FORECAST_SEQUENCE) FROM AHL_UNIT_EFFECTIVITIES_APP_V
1314 WHERE MR_HEADER_ID = p_mr_id AND
1315 CSI_ITEM_INSTANCE_ID = p_item_instance_id AND
1316 (STATUS_CODE IS NULL OR
1317 STATUS_CODE = 'INIT-DUE'))
1318 AND (STATUS_CODE IS NULL OR STATUS_CODE = 'INIT-DUE');
1319 */
1320
1321 -- For preventive maintenance bug# 4692366, changing logic to base
1322 -- on min unit_effectivity_id as duplicate forecast seq can exist if
1323 -- contract numbers are different(renewal, modification cases).
1324 SELECT MIN(unit_effectivity_id)
1325 FROM AHL_UNIT_EFFECTIVITIES_VL
1326 WHERE MR_HEADER_ID = p_mr_id AND
1327 CSI_ITEM_INSTANCE_ID = p_item_instance_id AND
1328 service_line_id = p_service_line_id AND
1329 (STATUS_CODE IS NULL OR
1330 STATUS_CODE IN ('INIT-DUE'));
1331
1332 CURSOR l_get_pred_details_csr(p_pred_ue_id IN NUMBER) IS
1333 SELECT MR_HEADER_ID, CSI_ITEM_INSTANCE_ID
1334 FROM AHL_UNIT_EFFECTIVITIES_APP_V
1335 WHERE UNIT_EFFECTIVITY_ID = p_pred_ue_id;
1336
1337 CURSOR l_validate_status_csr(p_status_code IN VARCHAR2) IS
1338 SELECT 'x'
1339 FROM FND_LOOKUP_VALUES_VL
1340 WHERE LOOKUP_TYPE = 'AHL_UNIT_EFFECTIVITY_STATUS' AND
1341 LOOKUP_CODE IN ('ACCOMPLISHED','INIT-ACCOMPLISHED','INIT-DUE','CANCELLED') AND
1342 LOOKUP_CODE = p_status_code;
1343
1344 -- Added for 11.5.10 enhancements.
1345 CURSOR l_qa_collection_csr(p_qa_collection_id IN NUMBER) IS
1346 SELECT collection_id
1347 FROM QA_RESULTS
1348 WHERE collection_id = p_qa_collection_id
1349 AND rownum < 2;
1350
1351 -- validate deferral ID
1352 CURSOR l_unit_deferral_csr (p_unit_deferral_id IN NUMBER) IS
1353 SELECT 'x'
1354 FROM ahl_unit_deferrals_b
1355 WHERE unit_deferral_id = p_unit_deferral_id
1356 AND unit_deferral_type = 'INIT-DUE';
1357
1358 -- For bug# 4172783.
1359 CURSOR l_ue_err_details_csr (p_ue_id IN NUMBER) IS
1360 SELECT CSI.instance_number, UE.due_date, MR.title
1361 FROM ahl_unit_effectivities_b UE, ahl_mr_headers_b MR,
1362 csi_item_instances CSI
1363 WHERE UE.unit_effectivity_id = p_ue_id
1364 AND UE.mr_header_id = MR.mr_header_id
1365 AND UE.csi_item_instance_id = CSI.instance_id;
1366
1367 CURSOR l_servq_num_csr (p_ue_id IN NUMBER, p_object_type IN VARCHAR2,
1368 p_subject_type IN VARCHAR2, p_link_type_id IN NUMBER) IS
1369 SELECT CS.incident_number
1370 FROM cs_incident_links CLK, CS_INCIDENTS_ALL_B CS
1371 WHERE CS.incident_id = CLK.subject_id
1372 AND CLK.object_id = p_ue_id
1373 AND CLK.object_type = p_object_type
1374 AND CLK.subject_type = p_subject_type
1375 AND CLK.link_type_id = p_link_type_id;
1376
1377 -- Added to validate if UE ID is a child UE.
1378 CURSOR l_child_mr_csr(p_ue_id IN NUMBER) IS
1379 SELECT 'x'
1380 FROM AHL_UE_RELATIONSHIPS
1381 WHERE related_ue_id = p_ue_id;
1382
1383 l_prev_status VARCHAR2(30);
1384 l_prev_object_version_no NUMBER;
1385 l_item_instance_id NUMBER;
1386 l_mr_id NUMBER;
1387 l_preceding_ue_id NUMBER := null;
1388 l_last_accomplished_date DATE := null;
1389 l_junk VARCHAR2(1);
1390 l_temp_ue_id NUMBER;
1391 l_pred_mr_id NUMBER;
1392 l_pred_item_instance_id NUMBER;
1393 l_last_ue_id NUMBER := null;
1394 l_temp_status BOOLEAN;
1395 l_temp_status_code VARCHAR2(30);
1396 l_temp_deferral_flag BOOLEAN;
1397
1398 l_prior_ue_status VARCHAR2(20);
1399
1400 l_err_instance_number CSI_ITEM_INSTANCES.instance_number%TYPE;
1401 l_err_due_date DATE;
1402 l_err_title ahl_mr_headers_b.title%TYPE;
1403 l_err_serreq_num cs_incidents_all_b.incident_number%TYPE;
1404 l_service_line_id ahl_unit_effectivities_b.service_line_id%TYPE;
1405 -- added to validate visit status.
1406 l_visit_status VARCHAR2(100);
1407
1408 BEGIN
1409 -- DO NOT Initialize API return status to success
1410
1411 IF G_DEBUG='Y' THEN
1412 AHL_DEBUG_PUB.debug('Start of Validate Effectivity:' || p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID, 'UMP');
1413 AHL_DEBUG_PUB.debug('Start Validation Set1:' || x_return_status, 'UMP');
1414 END IF;
1415
1416 -- Check if the unit effectivity id is not null
1417 IF (p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID IS NULL OR p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID = FND_API.G_MISS_NUM) THEN
1418 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_ID_NULL');
1419 FND_MSG_PUB.ADD;
1420 x_return_status := FND_API.G_RET_STS_ERROR;
1421 END IF;
1422
1423 -- Check if the status is valid
1424 --IF (p_unit_Effectivity_rec.STATUS_CODE IS NOT NULL AND p_unit_Effectivity_rec.STATUS_CODE <> FND_API.G_MISS_CHAR) THEN
1425 OPEN l_validate_status_csr(p_unit_Effectivity_rec.STATUS_CODE);
1426 FETCH l_validate_status_csr into l_junk;
1427 IF (l_validate_status_csr%NOTFOUND) THEN
1428 FND_MESSAGE.Set_Name('AHL','AHL_UMP_STATUS_INVALID');
1429 FND_MESSAGE.Set_Token('STATUS', p_unit_Effectivity_rec.STATUS_CODE);
1430 FND_MSG_PUB.ADD;
1431 x_return_status := FND_API.G_RET_STS_ERROR;
1432 END IF;
1433 CLOSE l_validate_status_csr;
1434 --END IF;
1435
1436 -- If the status is INIT-ACCOMPLISHED or INIT-DUE, ensure that the user has permission
1437 IF ((p_unit_Effectivity_rec.STATUS_CODE = 'INIT-ACCOMPLISHED') OR (p_unit_Effectivity_rec.STATUS_CODE = 'INIT-DUE')) THEN
1438 IF (p_authorized_user_flag = 'N') THEN
1439 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UNAUTHORIZED_USER');
1440 FND_MSG_PUB.ADD;
1441 x_return_status := FND_API.G_RET_STS_ERROR;
1442 --RAISE USER_NOT_AUTHORIZED;
1443 END IF;
1444
1445 -- validate that UE is not assigned to any visit.
1446 IF (p_unit_Effectivity_rec.STATUS_CODE = 'INIT-ACCOMPLISHED') THEN
1447 l_visit_status := AHL_UMP_UTIL_PKG.get_Visit_Status(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
1448 IF (l_visit_status IS NOT NULL) THEN
1449 FND_MESSAGE.Set_Name('AHL','AHL_UMP_VISIT_ASSIGNED');
1450 FND_MSG_PUB.ADD;
1451 x_return_status := FND_API.G_RET_STS_ERROR;
1452 END IF;
1453 END IF;
1454
1455 -- validate that UE is not a child UE.
1456 OPEN l_child_mr_csr(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
1457 FETCH l_child_mr_csr INTO l_junk;
1458 IF (l_child_mr_csr%FOUND) THEN
1459 FND_MESSAGE.Set_Name('AHL','AHL_UMP_CHILD_MR');
1460 FND_MSG_PUB.ADD;
1461 x_return_status := FND_API.G_RET_STS_ERROR;
1462 END IF;
1463 CLOSE l_child_mr_csr;
1464
1465 END IF;
1466
1467 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1468 -- Cannot proceed further
1469 RETURN;
1470 END IF;
1471
1472 -- Retrieve current status, object version no. mr_id, item_instance id and
1473 -- preceding ue id for current ue
1474 OPEN l_ue_details_csr(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
1475 FETCH l_ue_details_csr into
1476 l_prev_status, l_prev_object_version_no, l_mr_id, l_item_instance_id, l_preceding_ue_id,
1477 l_service_line_id;
1478 IF (l_ue_details_csr%NOTFOUND) THEN
1479 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_ID_INVALID');
1480 FND_MESSAGE.Set_Token('UEID',p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
1481 FND_MSG_PUB.ADD;
1482 x_return_status := FND_API.G_RET_STS_ERROR;
1483 -- Cannot proceed further
1484 RETURN;
1485 END IF;
1486 CLOSE l_ue_details_csr;
1487
1488 --Ensure that unit is not locked
1489 IF(AHL_UTIL_UC_PKG.IS_UNIT_QUARANTINED(p_unit_header_id => null, p_instance_id => l_item_instance_id) = FND_API.G_TRUE) THEN
1490 x_return_status := FND_API.G_RET_STS_ERROR;
1491 FND_MESSAGE.Set_Name('AHL','AHL_UMP_INIT_UNIT_LOCKED');
1492 FND_MSG_PUB.ADD;
1493 RETURN; -- cannot proceed further
1494 END IF;
1495
1496 -- Returning only after doing all of the following checks
1497
1498 -- If object version no is different, write error message and skip to next unit effectivity
1499 IF(l_prev_object_version_no <> p_unit_Effectivity_rec.OBJECT_VERSION_NUMBER) THEN
1500 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_CHANGED');
1501 FND_MESSAGE.Set_Name('AHL','AHL_COM_RECORD_CHANGED');
1502 FND_MSG_PUB.ADD;
1503 x_return_status := FND_API.G_RET_STS_ERROR;
1504 END IF;
1505
1506 -- 07/03/2002: Allow termination even if visit is in execution
1507 -- -- Ensure that an in-progress MR is not terminated
1508 -- IF(p_unit_Effectivity_rec.STATUS_CODE = 'TERMINATED') THEN
1509 -- -- Call VWP API to ensure that this is not assigned to a visit
1510 -- -- and if the visit is not in progress
1511 -- IF(AHL_UMP_UTIL_PKG.Is_UE_In_Execution(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID) = TRUE) THEN
1512 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_IN_EXEC');
1513 -- FND_MSG_PUB.ADD;
1514 -- x_return_status := FND_API.G_RET_STS_ERROR;
1515 -- END IF;
1516 -- END IF;
1517
1518 IF G_DEBUG='Y' THEN
1519 AHL_DEBUG_PUB.debug('p_unit_Effectivity_rec.STATUS_CODE:' || p_unit_Effectivity_rec.STATUS_CODE, 'UMP');
1520 AHL_DEBUG_PUB.debug('p_unit_Effectivity_rec.SET_DUE_DATE:' || p_unit_Effectivity_rec.SET_DUE_DATE, 'UMP');
1521 AHL_DEBUG_PUB.debug('p_unit_Effectivity_rec.ACCOMPLISHED_DATE:' || p_unit_Effectivity_rec.ACCOMPLISHED_DATE, 'UMP');
1522 END IF;
1523
1524 -- Both the dates (due and accomplished) should not be set. Only one should be set.
1525 IF (p_unit_Effectivity_rec.STATUS_CODE IS NOT NULL) THEN
1526 IF ((p_unit_Effectivity_rec.SET_DUE_DATE IS NOT NULL AND p_unit_Effectivity_rec.SET_DUE_DATE <> FND_API.G_MISS_DATE) AND
1527 (p_unit_Effectivity_rec.ACCOMPLISHED_DATE IS NOT NULL AND p_unit_Effectivity_rec.ACCOMPLISHED_DATE <> FND_API.G_MISS_DATE)) THEN
1528 FND_MESSAGE.Set_Name('AHL','AHL_UMP_BOTH_DATES_SET');
1529 FND_MSG_PUB.ADD;
1530 x_return_status := FND_API.G_RET_STS_ERROR;
1531 END IF;
1532 END IF;
1533
1534 -- If the status is INIT-ACCOMPLISHED, or ACCOMPLISHED, ensure that the accomplished date is set
1535 IF ((p_unit_Effectivity_rec.STATUS_CODE = 'INIT-ACCOMPLISHED') OR
1536 (p_unit_Effectivity_rec.STATUS_CODE = 'ACCOMPLISHED')) THEN
1537 -- validate ACCOMPLISHED_DATE = G_MISS_DATE for INIT-ACCOMPLISHED later in update_unit_effectivity proc.
1538 IF (p_unit_Effectivity_rec.ACCOMPLISHED_DATE IS NULL OR (p_unit_Effectivity_rec.ACCOMPLISHED_DATE = FND_API.G_MISS_DATE AND p_unit_Effectivity_rec.STATUS_CODE = 'ACCOMPLISHED')) THEN
1539 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACCMPLSHD_DATE_NULL');
1540 FND_MSG_PUB.ADD;
1541 x_return_status := FND_API.G_RET_STS_ERROR;
1542 ELSIF (p_unit_Effectivity_rec.ACCOMPLISHED_DATE <> FND_API.G_MISS_DATE
1543 AND p_unit_Effectivity_rec.ACCOMPLISHED_DATE > sysdate) THEN
1544 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACC_DATE_IN_FUTR');
1545 FND_MESSAGE.Set_Token('ACCDATE',p_unit_Effectivity_rec.ACCOMPLISHED_DATE);
1546 FND_MSG_PUB.ADD;
1547 x_return_status := FND_API.G_RET_STS_ERROR;
1548 END IF;
1549 -- If this is a group MR, ensure that all descendents are accomplished
1550 /*
1551 OPEN l_invalid_descendents_csr(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
1552 FETCH l_invalid_descendents_csr INTO l_junk;
1553 IF (l_invalid_descendents_csr%FOUND) THEN
1554 FND_MESSAGE.Set_Name('AHL','AHL_UMP_CHILD_UNACCMPLSHD');
1555 FND_MSG_PUB.ADD;
1556 x_return_status := FND_API.G_RET_STS_ERROR;
1557 END IF;
1558 CLOSE l_invalid_descendents_csr;
1559 */
1560 END IF;
1561
1562 -- Ensure that the previous status of the current effectivity is not MR-TERMINATE, DEFERRED or SR-CLOSED or CANCELLED.
1563 -- Allow updates to UE in status ACCOMPLISHED and TERMINATED. Only Counter values can be updated for this case.
1564 IF ((l_prev_status = 'MR-TERMINATE') OR (l_prev_status = 'DEFERRED') OR
1565 (l_prev_status = 'SR-CLOSED') OR (l_prev_status = 'CANCELLED') ) THEN
1566 FND_MESSAGE.Set_Name('AHL','AHL_UMP_INVALID_STTS_CHNG');
1567 FND_MESSAGE.Set_Token('FROM_STATUS', l_prev_status);
1568 FND_MESSAGE.Set_Token('TO_STATUS', p_unit_Effectivity_rec.STATUS_CODE);
1569 FND_MSG_PUB.ADD;
1570 x_return_status := FND_API.G_RET_STS_ERROR;
1571 END IF;
1572
1573 -- If initializing, ensure that there are no prior initializations or accomplishments
1574 IF ((p_unit_Effectivity_rec.STATUS_CODE = 'INIT-ACCOMPLISHED') OR (p_unit_Effectivity_rec.STATUS_CODE = 'INIT-DUE')) THEN
1575 -- Ensure that there are no prior accomplishments
1576 AHL_UMP_UTIL_PKG.get_last_accomplishment(l_item_instance_id, l_mr_id, l_last_accomplished_date, l_last_ue_id, l_temp_deferral_flag, l_temp_status_code, l_temp_status);
1577 IF (l_temp_status = FALSE) THEN
1578 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1579 END IF;
1580 IF (l_temp_status_code <> 'INIT-ACCOMPLISHED' and l_last_accomplished_date IS NOT null) THEN
1581 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ALRDY_ACCMPLSHD');
1582 FND_MSG_PUB.ADD;
1583 x_return_status := FND_API.G_RET_STS_ERROR;
1584 END IF;
1585 -- Ensure that there are no prior initializations
1586 OPEN l_prior_initializations_csr(l_mr_id, l_item_instance_id, p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
1587 FETCH l_prior_initializations_csr INTO l_prior_ue_status;
1588 IF (l_prior_initializations_csr%FOUND) THEN
1589 IF (l_prior_ue_status = 'DEFERRED') THEN
1590 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ALRDY_DEFERRED');
1591 FND_MSG_PUB.ADD;
1592 ELSE
1593 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ALRDY_INITLZD');
1594 FND_MSG_PUB.ADD;
1595 END IF;
1596 x_return_status := FND_API.G_RET_STS_ERROR;
1597 END IF;
1598 CLOSE l_prior_initializations_csr;
1599 END IF;
1600
1601 -- If accomplishing or terminating, ensure that the most recent accomplishment
1602 -- of this MR for this instance has an accomplishment date before the
1603 -- currently set accomplishment date
1604 -- Check for l_mr_id not null for Service Request accomplishment.
1605 IF ((p_unit_Effectivity_rec.STATUS_CODE = 'ACCOMPLISHED' OR p_unit_Effectivity_rec.STATUS_CODE = 'TERMINATED') AND l_mr_id IS NOT NULL) THEN
1606 AHL_UMP_UTIL_PKG.get_last_accomplishment(l_item_instance_id, l_mr_id, l_last_accomplished_date, l_last_ue_id, l_temp_deferral_flag, l_temp_status_code, l_temp_status);
1607 IF (l_temp_status = FALSE) THEN
1608 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1609 END IF;
1610 IF (AHL_UTIL_PKG.IS_PM_INSTALLED = 'Y') THEN
1611 IF (p_unit_Effectivity_rec.ACCOMPLISHED_DATE < l_last_accomplished_date) THEN
1612 -- Get service request number.
1613 OPEN l_servq_num_csr(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID,
1614 'AHL_UMP_EFF','SR',6);
1615 FETCH l_servq_num_csr INTO l_err_serreq_num;
1616 CLOSE l_servq_num_csr;
1617
1618 FND_MESSAGE.Set_Name('AHL','AHL_UMP_LTR_ACCMPLSH_EXSTS');
1619 FND_MESSAGE.Set_Token('UEID', p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
1620 FND_MESSAGE.Set_Token('NEW_ACC_DATE',to_char(p_unit_Effectivity_rec.ACCOMPLISHED_DATE,fnd_date.outputDT_mask));
1621 FND_MESSAGE.Set_Token('ACC_DATE',to_char(l_last_accomplished_date,fnd_date.outputDT_mask));
1622 FND_MESSAGE.Set_Token('SERVQ_NUM',l_err_serreq_num);
1623 FND_MSG_PUB.ADD;
1624 x_return_status := FND_API.G_RET_STS_ERROR;
1625 END IF;
1626 END IF;
1627 END IF;
1628
1629 -- Enable this validation for PM only as the execution sequence needs to be retained
1630 -- for cases where schedule is defined in Contracts. We use the due date to get the next
1631 -- set of open records.
1632
1633 -- If TERMINATING or ACCOMPLISHING, ensure that this is the earliest
1634 -- effectivity (nothing outstanding) for the given MR
1635 IF (AHL_UTIL_PKG.IS_PM_INSTALLED = 'Y') THEN
1636 IF ((p_unit_Effectivity_rec.STATUS_CODE = 'TERMINATED') OR
1637 (p_unit_Effectivity_rec.STATUS_CODE = 'ACCOMPLISHED')) THEN
1638 OPEN l_prior_ue_csr(l_mr_id, l_item_instance_id,l_service_line_id);
1639 FETCH l_prior_ue_csr INTO l_temp_ue_id;
1640 IF (l_prior_ue_csr%FOUND) THEN
1641 IF (l_temp_ue_id <> p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID) THEN
1642 -- get full details for error message. For bug# 4172783.
1643 OPEN l_ue_err_details_csr(l_temp_ue_id);
1644 FETCH l_ue_err_details_csr INTO l_err_instance_number, l_err_due_date,
1645 l_err_title;
1646 CLOSE l_ue_err_details_csr;
1647
1648 -- Get service request number.
1649 OPEN l_servq_num_csr(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID,
1650 'AHL_UMP_EFF','SR',6);
1651 FETCH l_servq_num_csr INTO l_err_serreq_num;
1652 CLOSE l_servq_num_csr;
1653
1654 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ERLR_EFF_EXISTS');
1655 FND_MESSAGE.Set_Token('INST', l_err_instance_number);
1656 FND_MESSAGE.Set_Token('BEF_UEID', l_temp_ue_id);
1657 FND_MESSAGE.Set_Token('UEID',p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
1658 FND_MESSAGE.Set_Token('DUEDATE',l_err_due_date);
1659 FND_MESSAGE.Set_Token('TITLE',l_err_title);
1660 FND_MESSAGE.Set_Token('SERVQ_NUM',l_err_serreq_num);
1661 FND_MSG_PUB.ADD;
1662 x_return_status := FND_API.G_RET_STS_ERROR;
1663 END IF;
1664 END IF;
1665 CLOSE l_prior_ue_csr;
1666 END IF;
1667 END IF;
1668
1669 -- If INIT-ACCOMPLISHED, ensure that the predecessor (if any)
1670 -- has at least one accomplishment
1671 IF (p_unit_Effectivity_rec.STATUS_CODE IN ('INIT-ACCOMPLISHED','ACCOMPLISHED','TERMINATED')
1672 AND (l_preceding_ue_id IS NOT NULL)) THEN
1673 -- Get the item instance id and the mr_id for the preceding ue
1674 OPEN l_get_pred_details_csr(l_preceding_ue_id);
1675 FETCH l_get_pred_details_csr INTO l_pred_mr_id, l_pred_item_instance_id;
1676 IF (l_get_pred_details_csr%FOUND) THEN
1677 AHL_UMP_UTIL_PKG.get_last_accomplishment(l_pred_item_instance_id, l_pred_mr_id, l_last_accomplished_date, l_last_ue_id, l_temp_deferral_flag, l_temp_status_code, l_temp_status);
1678 IF (l_temp_status = FALSE) THEN
1679 CLOSE l_get_pred_details_csr;
1680 x_return_status := FND_API.G_RET_STS_ERROR;
1681 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1682 END IF;
1683 IF (l_last_accomplished_date IS NULL) THEN
1684 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PRED_NOT_ACCMPLSHD');
1685 FND_MSG_PUB.ADD;
1686 x_return_status := FND_API.G_RET_STS_ERROR;
1687 END IF;
1688 END IF;
1689 CLOSE l_get_pred_details_csr;
1690 END IF;
1691
1692 -- If terminating, ensure that the Accomplished Date if given, is in the past
1693 IF (p_unit_Effectivity_rec.STATUS_CODE = 'TERMINATED' OR p_unit_Effectivity_rec.STATUS_CODE = 'MR-TERMINATE') THEN
1694 IF (p_unit_Effectivity_rec.ACCOMPLISHED_DATE IS NOT NULL AND p_unit_Effectivity_rec.ACCOMPLISHED_DATE <> FND_API.G_MISS_DATE) THEN
1695 IF (TRUNC(p_unit_Effectivity_rec.ACCOMPLISHED_DATE) > TRUNC(sysdate)) THEN
1696 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACC_DATE_IN_FUTR');
1697 FND_MESSAGE.Set_Token('ACCDATE', p_unit_Effectivity_rec.ACCOMPLISHED_DATE);
1698 FND_MSG_PUB.ADD;
1699 x_return_status := FND_API.G_RET_STS_ERROR;
1700 END IF;
1701 END IF;
1702 END IF;
1703
1704 -- If INIT-DUE, ensure that the Set Due Date if given, is in the future
1705 IF (p_unit_Effectivity_rec.STATUS_CODE = 'INIT-DUE') THEN
1706 IF (p_unit_Effectivity_rec.SET_DUE_DATE IS NOT NULL AND p_unit_Effectivity_rec.SET_DUE_DATE <> FND_API.G_MISS_DATE) THEN
1707 IF (TRUNC(p_unit_Effectivity_rec.SET_DUE_DATE) < TRUNC(sysdate)) THEN
1708 FND_MESSAGE.Set_Name('AHL','AHL_UMP_DUE_DATE_IN_PAST');
1709 FND_MESSAGE.Set_Token('DUEDATE', p_unit_Effectivity_rec.SET_DUE_DATE);
1710 FND_MSG_PUB.ADD;
1711 x_return_status := FND_API.G_RET_STS_ERROR;
1712 END IF;
1713 END IF;
1714 END IF;
1715
1716 -- Validate CollectionID if present.
1717 IF (p_unit_Effectivity_rec.qa_collection_id IS NOT NULL) AND
1718 (p_unit_Effectivity_rec.qa_collection_id <> FND_API.G_MISS_NUM) THEN
1719 OPEN l_qa_collection_csr (p_unit_Effectivity_rec.qa_collection_id);
1720 IF l_qa_collection_csr%NOTFOUND THEN
1721 FND_MESSAGE.Set_Name('AHL','AHL_UMP_QA_COLLECTION_INVALID');
1722 FND_MESSAGE.Set_Token('COLLECT_ID', p_unit_Effectivity_rec.qa_collection_id);
1723 FND_MSG_PUB.ADD;
1724 x_return_status := FND_API.G_RET_STS_ERROR;
1725 END IF;
1726 CLOSE l_qa_collection_csr;
1727
1728 -- This validation already done above.
1729 -- Validate the current UE status is not ACCOMPLISHED.
1730 IF (l_prev_status = 'ACCOMPLISHED' OR l_prev_status = 'TERMINATED' OR
1731 l_prev_status = 'DEFERRED' OR l_prev_status = 'INIT-ACCOMPLISHED' OR
1732 l_prev_status = 'SR-CLOSED' OR l_prev_status = 'CANCELLED') THEN
1733 FND_MESSAGE.Set_Name('AHL','AHL_UMP_INVALID_STTS_CHNG');
1734 FND_MESSAGE.Set_Token('FROM_STATUS', l_prev_status);
1735 FND_MESSAGE.Set_Token('TO_STATUS', p_unit_Effectivity_rec.STATUS_CODE);
1736 FND_MSG_PUB.ADD;
1737 x_return_status := FND_API.G_RET_STS_ERROR;
1738 END IF;
1739
1740 END IF;
1741
1742 -- Validate Deferral ID if present.
1743 IF (p_unit_Effectivity_rec.unit_deferral_id IS NOT NULL) AND
1744 (p_unit_Effectivity_rec.unit_deferral_ID <> FND_API.G_MISS_NUM) THEN
1745 OPEN l_unit_deferral_csr (p_unit_Effectivity_rec.unit_deferral_id);
1746 FETCH l_unit_deferral_csr INTO l_junk;
1747 IF (l_unit_deferral_csr%NOTFOUND) THEN
1748 FND_MESSAGE.Set_Name('AHL','AHL_UMP_DEFERRAL_INVALID');
1749 FND_MESSAGE.Set_Token('DEFERRAL_ID', p_unit_Effectivity_rec.unit_deferral_id);
1750 FND_MSG_PUB.ADD;
1751 x_return_status := FND_API.G_RET_STS_ERROR;
1752 END IF;
1753
1754 END IF;
1755
1756 END Validate_Effectivity;
1757 ------------------------------------
1758
1759 PROCEDURE Validate_Thresholds
1760 (
1761 p_unit_threshold_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type,
1762 x_return_status IN OUT NOCOPY VARCHAR2) IS
1763
1764 CURSOR l_validate_counter_csr(p_ue_id IN NUMBER,
1765 p_counter_id IN NUMBER) IS
1766 /*
1767 SELECT NVL(net_reading, 0)
1768 FROM CSI_CP_COUNTERS_V CO, AHL_UNIT_EFFECTIVITIES_APP_V UE
1769 WHERE co.customer_product_id = ue.csi_item_instance_id and
1770 ue.unit_effectivity_id = p_ue_id and
1771 co.counter_id = p_counter_id;
1772 */
1773
1774 /*
1775 SELECT NVL(net_reading, 0)
1776 FROM csi_counter_values_v cv, csi_counter_associations cca, AHL_UNIT_EFFECTIVITIES_APP_V UE
1777 WHERE cca.source_object_code = 'CP'
1778 AND cca.source_object_id = ue.csi_item_instance_id
1779 AND cca.counter_id = cv.counter_id
1780 AND ue.unit_effectivity_id = p_ue_id
1781 AND cv.counter_id = p_counter_id
1782 ORDER BY cv.value_timestamp desc;
1783 */
1784 -- Added for R12 IB Uptake. If counter does not have any reading,
1785 -- csi_counter_values_v does not retrieve any row.
1786 -- split above cursor into 2 cursors.
1787 SELECT 'x'
1788 FROM CSI_COUNTERS_VL CC, csi_counter_associations cca, AHL_UNIT_EFFECTIVITIES_APP_V UE
1789 WHERE cca.source_object_code = 'CP'
1790 AND cca.source_object_id = ue.csi_item_instance_id
1791 AND cca.counter_id = cc.counter_id
1792 AND ue.unit_effectivity_id = p_ue_id
1793 AND cc.counter_id = p_counter_id;
1794
1795 -- Added for R12 bug# 6080133.
1796 CURSOR get_ctr_reading_csr(p_counter_id IN NUMBER) IS
1797 SELECT NVL(CCR.net_reading, 0)
1798 FROM
1799 CSI_COUNTERS_VL CC,
1800 CSI_COUNTER_READINGS CCR
1801 WHERE
1802 CCR.COUNTER_ID = CC.COUNTER_ID
1803 AND CC.COUNTER_ID = p_counter_id
1804 ORDER BY
1805 CCR.VALUE_TIMESTAMP DESC;
1806
1807 CURSOR l_get_prev_ctr_csr(p_threshold_id IN NUMBER) IS
1808 SELECT OBJECT_VERSION_NUMBER, COUNTER_ID
1809 FROM AHL_UNIT_THRESHOLDS
1810 WHERE UNIT_THRESHOLD_ID = p_threshold_id;
1811
1812 CURSOR l_ue_id_check_csr(p_threshold_id IN NUMBER, p_ue_id IN NUMBER) IS
1813 SELECT 'x'
1814 FROM AHL_UNIT_THRESHOLDS UTH, AHL_UNIT_DEFERRALS_B UDF
1815 WHERE UTH.unit_deferral_id = UDF.unit_deferral_ID AND
1816 UTH.UNIT_THRESHOLD_ID = p_threshold_id AND
1817 UDF.UNIT_EFFECTIVITY_ID = p_ue_id AND
1818 UDF.Unit_deferral_type = 'INIT-DUE';
1819
1820 l_prev_object_version_no NUMBER;
1821 l_prev_counter NUMBER;
1822 l_net_reading NUMBER;
1823 l_return_status VARCHAR2(30);
1824 l_junk VARCHAR2(1);
1825
1826 BEGIN
1827 -- DO NOT Initialize API return status to success
1828
1829 IF (p_unit_threshold_tbl.COUNT > 0) THEN
1830
1831 FOR i IN p_unit_threshold_tbl.FIRST..p_unit_threshold_tbl.LAST LOOP
1832
1833 -- Resolve Counter Id
1834 Convert_Threshold_Val_To_ID(p_unit_threshold_tbl(i), l_return_status);
1835
1836 -- Ensure that for Modify or delete operation, the threshold id is present
1837 IF (p_unit_threshold_tbl(i).OPERATION_FLAG = 'M' OR p_unit_threshold_tbl(i).OPERATION_FLAG = 'D') THEN
1838 IF (p_unit_threshold_tbl(i).UNIT_THRESHOLD_ID IS NULL OR p_unit_threshold_tbl(i).UNIT_THRESHOLD_ID = FND_API.G_MISS_NUM) THEN
1839 FND_MESSAGE.Set_Name('AHL','AHL_UMP_THRESHOLD_ID_NULL');
1840 FND_MSG_PUB.ADD;
1841 x_return_status := FND_API.G_RET_STS_ERROR;
1842 END IF;
1843 END IF;
1844
1845 -- Ensure that for Modify operation, the unit effectivity Id matches the threshold
1846 IF (p_unit_threshold_tbl(i).OPERATION_FLAG = 'M') THEN
1847 OPEN l_ue_id_check_csr(p_unit_threshold_tbl(i).UNIT_THRESHOLD_ID,
1848 p_unit_threshold_tbl(i).UNIT_EFFECTIVITY_ID);
1849 FETCH l_ue_id_check_csr INTO l_junk;
1850 IF (l_ue_id_check_csr%NOTFOUND) THEN
1851 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_ID_INVALID');
1852 FND_MESSAGE.Set_Token('UEID', p_unit_threshold_tbl(i).UNIT_EFFECTIVITY_ID);
1853 FND_MSG_PUB.ADD;
1854 x_return_status := FND_API.G_RET_STS_ERROR;
1855 END IF;
1856 CLOSE l_ue_id_check_csr;
1857 END IF;
1858
1859 -- Ensure that the Counter ID is valid for a Create or Modify operation
1860 IF (p_unit_threshold_tbl(i).COUNTER_ID IS NULL OR p_unit_threshold_tbl(i).COUNTER_ID = FND_API.G_MISS_NUM) THEN
1861 IF (p_unit_threshold_tbl(i).OPERATION_FLAG = 'C' OR p_unit_threshold_tbl(i).OPERATION_FLAG = 'M') THEN
1862 FND_MESSAGE.Set_Name('AHL','AHL_UMP_COUNTER_INVALID');
1863 FND_MESSAGE.Set_Token('COUNTER', p_unit_threshold_tbl(i).COUNTER_NAME);
1864 FND_MSG_PUB.ADD;
1865 x_return_status := FND_API.G_RET_STS_ERROR;
1866 END IF;
1867 END IF;
1868
1869 -- Ensure that the counter is appropriate for the current item instance
1870 IF (p_unit_threshold_tbl(i).COUNTER_ID IS NOT NULL AND p_unit_threshold_tbl(i).COUNTER_ID <> FND_API.G_MISS_NUM) THEN
1871 OPEN l_validate_counter_csr(p_unit_threshold_tbl(i).UNIT_EFFECTIVITY_ID, p_unit_threshold_tbl(i).COUNTER_ID);
1872 FETCH l_validate_counter_csr INTO l_junk;
1873 IF (l_validate_counter_csr%NOTFOUND) THEN
1874 FND_MESSAGE.Set_Name('AHL','AHL_UMP_COUNTER_INVALID');
1875 FND_MESSAGE.Set_Token('COUNTER', p_unit_threshold_tbl(i).COUNTER_NAME);
1876 FND_MSG_PUB.ADD;
1877 x_return_status := FND_API.G_RET_STS_ERROR;
1878 ELSE
1879 -- get counter reading.
1880 OPEN get_ctr_reading_csr(p_unit_threshold_tbl(i).COUNTER_ID);
1881 FETCH get_ctr_reading_csr INTO l_net_reading;
1882 IF (get_ctr_reading_csr%NOTFOUND) THEN
1883 l_net_reading := 0;
1884 END IF;
1885 CLOSE get_ctr_reading_csr;
1886 END IF;
1887 CLOSE l_validate_counter_csr;
1888 END IF;
1889
1890 -- Ensure that the Threshold has not changed
1891 IF (p_unit_threshold_tbl(i).UNIT_THRESHOLD_ID IS NOT NULL AND p_unit_threshold_tbl(i).UNIT_THRESHOLD_ID <> FND_API.G_MISS_NUM) THEN
1892 -- Retrieve object version no. for this threshold
1893 OPEN l_get_prev_ctr_csr(p_unit_threshold_tbl(i).UNIT_THRESHOLD_ID);
1894 FETCH l_get_prev_ctr_csr into l_prev_object_version_no, l_prev_counter;
1895 IF (l_get_prev_ctr_csr%NOTFOUND) THEN
1896 FND_MESSAGE.Set_Name('AHL','AHL_UMP_THRSHLD_ID_INVALID');
1897 FND_MESSAGE.Set_Token('THRESHOLDID', p_unit_threshold_tbl(i).UNIT_THRESHOLD_ID);
1898 FND_MSG_PUB.ADD;
1899 CLOSE l_get_prev_ctr_csr;
1900 x_return_status := FND_API.G_RET_STS_ERROR;
1901 RETURN;
1902 END IF;
1903 CLOSE l_get_prev_ctr_csr;
1904 -- Check if object version no is different
1905 IF(l_prev_object_version_no <> p_unit_threshold_tbl(i).OBJECT_VERSION_NUMBER) THEN
1906 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_THRESHOLD_CHANGED');
1907 -- FND_MESSAGE.Set_Token('COUNTER', p_unit_threshold_tbl(i).COUNTER_NAME);
1908 FND_MESSAGE.Set_Name('AHL', 'AHL_COM_RECORD_CHANGED');
1909 FND_MSG_PUB.ADD;
1910 x_return_status := FND_API.G_RET_STS_ERROR;
1911 RETURN;
1912 END IF;
1913 -- For modify operation, ensure that the counter (id) has not changed
1914 IF (p_unit_threshold_tbl(i).OPERATION_FLAG = 'M') THEN
1915 IF (p_unit_threshold_tbl(i).COUNTER_ID <> l_prev_counter) THEN
1916 FND_MESSAGE.Set_Name('AHL','AHL_UMP_THR_COUNTER_CHANGED');
1917 FND_MSG_PUB.ADD;
1918 x_return_status := FND_API.G_RET_STS_ERROR;
1919 END IF;
1920 END IF;
1921 END IF;
1922
1923 -- Ensure that the counter value is valid
1924 IF (p_unit_threshold_tbl(i).OPERATION_FLAG = 'C' OR p_unit_threshold_tbl(i).OPERATION_FLAG = 'M') THEN
1925 IF (p_unit_threshold_tbl(i).COUNTER_VALUE IS NULL OR p_unit_threshold_tbl(i).COUNTER_VALUE = FND_API.G_MISS_NUM) THEN
1926 FND_MESSAGE.Set_Name('AHL','AHL_UMP_CNTR_VALUE_MISSING');
1927 FND_MESSAGE.Set_Token('COUNTER', p_unit_threshold_tbl(i).COUNTER_NAME);
1928 FND_MSG_PUB.ADD;
1929 x_return_status := FND_API.G_RET_STS_ERROR;
1930 ELSE
1931 -- Ensure that the entered value is not lesser than the Net Reading
1932 IF (p_unit_threshold_tbl(i).COUNTER_VALUE < l_net_reading) THEN
1933 FND_MESSAGE.Set_Name('AHL','AHL_UMP_CTR_VAL_LESSER');
1934 FND_MESSAGE.Set_Token('COUNTER', p_unit_threshold_tbl(i).COUNTER_NAME);
1935 FND_MESSAGE.Set_Token('ENTVAL', p_unit_threshold_tbl(i).COUNTER_VALUE);
1936 FND_MESSAGE.Set_Token('CURRVAL', l_net_reading);
1937 FND_MSG_PUB.ADD;
1938 x_return_status := FND_API.G_RET_STS_ERROR;
1939 END IF;
1940 END IF;
1941 END IF;
1942 END LOOP; -- All thresholds
1943 END IF;
1944 END Validate_Thresholds;
1945
1946 ------------------------------------
1947
1948 -- Added accomplishment date to fix bug# 6750836.
1949 PROCEDURE Validate_Accomplishments
1950 (
1951 p_unit_accomplish_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type,
1952 p_accomplishment_date IN DATE,
1953 p_ue_status_code IN VARCHAR2,
1954 x_return_status IN OUT NOCOPY VARCHAR2) IS
1955
1956 CURSOR l_validate_counter_csr(p_ue_id IN NUMBER,
1957 p_counter_id IN NUMBER) IS
1958
1959 /*
1960 SELECT NVL(net_reading, 0)
1961 FROM CSI_CP_COUNTERS_V CO, AHL_UNIT_EFFECTIVITIES_APP_V UE
1962 WHERE co.customer_product_id = ue.csi_item_instance_id and
1963 ue.unit_effectivity_id = p_ue_id and
1964 co.counter_id = p_counter_id;
1965 */
1966 -- Added for R12 IB Uptake. If counter does not have any reading,
1967 -- csi_counter_values_v does not retrieve any row.
1968 -- split above cursor into 2 cursors.
1969 SELECT 'x'
1970 FROM CSI_COUNTERS_VL CC, csi_counter_associations cca, AHL_UNIT_EFFECTIVITIES_APP_V UE
1971 WHERE cca.source_object_code = 'CP'
1972 AND cca.source_object_id = ue.csi_item_instance_id
1973 AND cca.counter_id = cc.counter_id
1974 AND ue.unit_effectivity_id = p_ue_id
1975 AND cc.counter_id = p_counter_id;
1976
1977 -- Added for R12 bug# 6080133.
1978 CURSOR get_ctr_reading_csr(p_counter_id IN NUMBER,
1979 p_accomplishment_date IN DATE) IS
1980 SELECT NVL(CCR.net_reading, 0)
1981 FROM
1982 CSI_COUNTERS_VL CC,
1983 CSI_COUNTER_READINGS CCR
1984 WHERE
1985 CCR.COUNTER_ID = CC.COUNTER_ID
1986 AND CC.COUNTER_ID = p_counter_id
1987 AND CCR.VALUE_TIMESTAMP <= p_accomplishment_date
1988 ORDER BY
1989 CCR.VALUE_TIMESTAMP DESC;
1990
1991 -- Added for R12 bug# 6080133.
1992 CURSOR get_max_ctr_reading_csr(p_counter_id IN NUMBER,
1993 p_accomplishment_date IN DATE) IS
1994 SELECT NVL(CCR.net_reading, 0)
1995 FROM
1996 CSI_COUNTERS_VL CC,
1997 CSI_COUNTER_READINGS CCR
1998 WHERE
1999 CCR.COUNTER_ID = CC.COUNTER_ID
2000 AND CC.COUNTER_ID = p_counter_id
2001 AND trunc(CCR.VALUE_TIMESTAMP) <= trunc(p_accomplishment_date)
2002 ORDER BY
2003 CCR.VALUE_TIMESTAMP DESC;
2004
2005 -- Added for R12 bug# 7016783.
2006 CURSOR get_nxt_max_ctr_reading_csr(p_counter_id IN NUMBER,
2007 p_accomplishment_date IN DATE) IS
2008 SELECT NVL(CCR.net_reading, 0)
2009 FROM
2010 CSI_COUNTER_READINGS CCR
2011 WHERE
2012 CCR.COUNTER_ID = p_counter_id
2013 -- fix for bug# 7016783. pick next highest counter value.
2014 AND trunc(CCR.VALUE_TIMESTAMP) > trunc(p_accomplishment_date)
2015 ORDER BY
2016 -- fix for bug# 7016783
2017 CCR.VALUE_TIMESTAMP ASC;
2018
2019 CURSOR l_get_prev_ctr_csr(p_accomplishment_id IN NUMBER) IS
2020 SELECT OBJECT_VERSION_NUMBER, COUNTER_ID
2021 FROM AHL_UNIT_ACCOMPLISHMNTS
2022 WHERE UNIT_ACCOMPLISHMNT_ID = p_accomplishment_id;
2023
2024 CURSOR l_ue_id_check_csr(p_accomplishment_id IN NUMBER, p_ue_id IN NUMBER) IS
2025 SELECT 'x'
2026 FROM AHL_UNIT_ACCOMPLISHMNTS
2027 WHERE UNIT_ACCOMPLISHMNT_ID = p_accomplishment_id AND
2028 UNIT_EFFECTIVITY_ID = p_ue_id;
2029
2030 l_prev_object_version_no NUMBER;
2031 l_prev_counter NUMBER;
2032 l_net_reading NUMBER;
2033 l_return_status VARCHAR2(30);
2034 l_junk VARCHAR2(1);
2035
2036 BEGIN
2037 -- DO NOT Initialize API return status to success
2038
2039 IF (p_unit_accomplish_tbl.COUNT > 0) THEN
2040
2041 FOR i IN p_unit_accomplish_tbl.FIRST..p_unit_accomplish_tbl.LAST LOOP
2042 -- Resolve Counter Id
2043 Convert_Accomplish_Val_To_ID(p_unit_accomplish_tbl(i), l_return_status);
2044
2045 -- Ensure that for Modify or delete operation, the accomplishment id is present
2046 IF (p_unit_accomplish_tbl(i).OPERATION_FLAG = 'M' OR p_unit_accomplish_tbl(i).OPERATION_FLAG = 'D') THEN
2047 IF (p_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID IS NULL OR p_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID = FND_API.G_MISS_NUM) THEN
2048 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACCOMPLISH_ID_NULL');
2049 FND_MSG_PUB.ADD;
2050 x_return_status := FND_API.G_RET_STS_ERROR;
2051 END IF;
2052 END IF;
2053
2054 -- Ensure that for Modify operation, the UE Id matches the accomplishment
2055 IF (p_unit_accomplish_tbl(i).OPERATION_FLAG = 'M') THEN
2056 OPEN l_ue_id_check_csr(p_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID,
2057 p_unit_accomplish_tbl(i).UNIT_EFFECTIVITY_ID);
2058 FETCH l_ue_id_check_csr INTO l_junk;
2059 IF (l_ue_id_check_csr%NOTFOUND) THEN
2060 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_ID_INVALID');
2061 FND_MESSAGE.Set_Token('UEID', p_unit_accomplish_tbl(i).UNIT_EFFECTIVITY_ID);
2062 FND_MSG_PUB.ADD;
2063 x_return_status := FND_API.G_RET_STS_ERROR;
2064 END IF;
2065 CLOSE l_ue_id_check_csr;
2066 END IF;
2067
2068 -- Ensure that the Counter ID is valid for a Create or Modify operation
2069 IF (p_unit_accomplish_tbl(i).COUNTER_ID IS NULL OR p_unit_accomplish_tbl(i).COUNTER_ID = FND_API.G_MISS_NUM) THEN
2070 IF (p_unit_accomplish_tbl(i).OPERATION_FLAG = 'C' OR p_unit_accomplish_tbl(i).OPERATION_FLAG = 'M') THEN
2071 FND_MESSAGE.Set_Name('AHL','AHL_UMP_COUNTER_INVALID');
2072 FND_MESSAGE.Set_Token('COUNTER', p_unit_accomplish_tbl(i).COUNTER_NAME);
2073 FND_MSG_PUB.ADD;
2074 x_return_status := FND_API.G_RET_STS_ERROR;
2075 END IF;
2076 END IF;
2077
2078 -- Ensure that the counter is appropriate for the current item instance
2079 IF (p_unit_accomplish_tbl(i).COUNTER_ID IS NOT NULL AND p_unit_accomplish_tbl(i).COUNTER_ID <> FND_API.G_MISS_NUM) THEN
2080 -- Add check for accomplishment date - need in the case of init-accomplishment update when the
2081 -- user passes G MISS date or NULL. We bypass date validation in validate_effectivity
2082 -- to allow for init-accomplishment deletion along with counter values; so there is a
2083 -- possibility for accomplishment date to be null or g-miss date.
2084 IF (p_accomplishment_date IS NULL OR p_accomplishment_date = FND_API.G_MISS_DATE)
2085 THEN
2086 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACCMPLSHD_DATE_NULL');
2087 FND_MSG_PUB.ADD;
2088 x_return_status := FND_API.G_RET_STS_ERROR;
2089 RETURN;
2090 END IF;
2091 -- Modified for IB uptake of R12 schema. Split original cursor into 2 cursors.
2092 OPEN l_validate_counter_csr(p_unit_accomplish_tbl(i).UNIT_EFFECTIVITY_ID,
2093 p_unit_accomplish_tbl(i).COUNTER_ID);
2094 FETCH l_validate_counter_csr INTO l_junk;
2095 IF (l_validate_counter_csr%NOTFOUND) THEN
2096 FND_MESSAGE.Set_Name('AHL','AHL_UMP_COUNTER_INVALID');
2097 FND_MESSAGE.Set_Token('COUNTER', p_unit_accomplish_tbl(i).COUNTER_NAME);
2098 FND_MSG_PUB.ADD;
2099 x_return_status := FND_API.G_RET_STS_ERROR;
2100 ELSE
2101 IF (p_ue_status_code = 'INIT-ACCOMPLISHED') THEN
2102 -- get max counter reading.
2103 -- Added accomplishment date to fix bug# 6750836.
2104 OPEN get_max_ctr_reading_csr(p_unit_accomplish_tbl(i).COUNTER_ID, p_accomplishment_date);
2105 FETCH get_max_ctr_reading_csr INTO l_net_reading;
2106 IF (get_max_ctr_reading_csr%NOTFOUND) THEN
2107 -- added to fix bug# 7016783.
2108 OPEN get_nxt_max_ctr_reading_csr(p_unit_accomplish_tbl(i).COUNTER_ID, p_accomplishment_date);
2109 FETCH get_nxt_max_ctr_reading_csr INTO l_net_reading;
2110 IF (get_nxt_max_ctr_reading_csr%NOTFOUND) THEN
2111 l_net_reading := 0;
2112 END IF;
2113 CLOSE get_nxt_max_ctr_reading_csr;
2114 END IF;
2115 CLOSE get_max_ctr_reading_csr;
2116 ELSE
2117 -- get counter reading.
2118 -- Added accomplishment date to fix bug# 6750836.
2119 OPEN get_ctr_reading_csr(p_unit_accomplish_tbl(i).COUNTER_ID, p_accomplishment_date);
2120 FETCH get_ctr_reading_csr INTO l_net_reading;
2121 IF (get_ctr_reading_csr%NOTFOUND) THEN
2122 l_net_reading := 0;
2123 END IF;
2124 CLOSE get_ctr_reading_csr;
2125 END IF;
2126 END IF;
2127 CLOSE l_validate_counter_csr;
2128 END IF;
2129
2130 -- Ensure that the Accomplishment has not changed
2131 IF (p_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID IS NOT NULL AND p_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID <> FND_API.G_MISS_NUM) THEN
2132 -- Retrieve object version no. for this accomplishment
2133 OPEN l_get_prev_ctr_csr(p_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID);
2134 FETCH l_get_prev_ctr_csr into l_prev_object_version_no, l_prev_counter;
2135 IF (l_get_prev_ctr_csr%NOTFOUND) THEN
2136 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACCMPLSH_ID_INVALID');
2137 FND_MESSAGE.Set_Token('ACCOMPLISHMENTID', p_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID);
2138 FND_MSG_PUB.ADD;
2139 CLOSE l_get_prev_ctr_csr;
2140 x_return_status := FND_API.G_RET_STS_ERROR;
2141 RETURN;
2142 END IF;
2143 CLOSE l_get_prev_ctr_csr;
2144 -- Check if object version no is different
2145 IF(l_prev_object_version_no <> p_unit_accomplish_tbl(i).OBJECT_VERSION_NUMBER) THEN
2146 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACCMPLSHMNT_CHANGED');
2147 -- FND_MESSAGE.Set_Token('COUNTER', p_unit_accomplish_tbl(i).COUNTER_NAME);
2148 FND_MESSAGE.Set_Name('AHL', 'AHL_COM_RECORD_CHANGED');
2149 FND_MSG_PUB.ADD;
2150 x_return_status := FND_API.G_RET_STS_ERROR;
2151 RETURN;
2152 END IF;
2153 -- For modify operation, ensure that the counter (id) has not changed
2154 IF (p_unit_accomplish_tbl(i).OPERATION_FLAG = 'M') THEN
2155 IF (p_unit_accomplish_tbl(i).COUNTER_ID <> l_prev_counter) THEN
2156 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACC_COUNTER_CHANGED');
2157 FND_MSG_PUB.ADD;
2158 x_return_status := FND_API.G_RET_STS_ERROR;
2159 END IF;
2160 END IF;
2161 END IF;
2162
2163 -- Ensure that the counter value is valid
2164 IF (p_unit_accomplish_tbl(i).OPERATION_FLAG = 'C' OR p_unit_accomplish_tbl(i).OPERATION_FLAG = 'M') THEN
2165 IF (p_unit_accomplish_tbl(i).COUNTER_VALUE IS NULL OR p_unit_accomplish_tbl(i).COUNTER_VALUE = FND_API.G_MISS_NUM) THEN
2166 FND_MESSAGE.Set_Name('AHL','AHL_UMP_CNTR_VALUE_MISSING');
2167 FND_MESSAGE.Set_Token('COUNTER', p_unit_accomplish_tbl(i).COUNTER_NAME);
2168 FND_MSG_PUB.ADD;
2169 x_return_status := FND_API.G_RET_STS_ERROR;
2170 ELSE
2171 -- Ensure that the entered value is not greater than the Net Reading
2172 IF (p_unit_accomplish_tbl(i).COUNTER_VALUE > l_net_reading) THEN
2173 FND_MESSAGE.Set_Name('AHL','AHL_UMP_CTR_VAL_GREATER');
2174 FND_MESSAGE.Set_Token('COUNTER', p_unit_accomplish_tbl(i).COUNTER_NAME);
2175 FND_MESSAGE.Set_Token('ENTVAL', p_unit_accomplish_tbl(i).COUNTER_VALUE);
2176 FND_MESSAGE.Set_Token('CURRVAL', l_net_reading);
2177 FND_MSG_PUB.ADD;
2178 x_return_status := FND_API.G_RET_STS_ERROR;
2179 END IF;
2180 END IF;
2181 END IF;
2182
2183 END LOOP; -- All Accomplishments
2184 END IF;
2185 END Validate_Accomplishments;
2186
2187 ------------------------------------
2188 -- This procedure updates an Unit Effectivity
2189 -- It also ensures that if there are no counters during
2190 -- initialization, then the date is set
2191 ------------------------------------
2192
2193 PROCEDURE Update_Unit_Effectivity
2194 (
2195 p_unit_Effectivity_rec IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type) IS
2196
2197 CURSOR l_threshold_exists_csr(p_ue_id IN NUMBER) IS
2198 SELECT 'x'
2199 FROM AHL_UNIT_THRESHOLDS UTH, AHL_UNIT_DEFERRALS_B UDF
2200 WHERE UTH.unit_deferral_id = UDF.unit_deferral_id
2201 AND UDF.unit_deferral_type = 'INIT-DUE'
2202 AND UDF.unit_effectivity_id = p_ue_id;
2203
2204 CURSOR l_accomplish_exists_csr(p_ue_id IN NUMBER) IS
2205 SELECT 'x'
2206 FROM AHL_UNIT_ACCOMPLISHMNTS
2207 WHERE unit_effectivity_id = p_ue_id;
2208
2209 CURSOR l_get_unit_effectivity_csr(p_ue_id IN NUMBER) IS
2210 SELECT
2211 OBJECT_VERSION_NUMBER,
2212 CSI_ITEM_INSTANCE_ID,
2213 MR_INTERVAL_ID,
2214 MR_EFFECTIVITY_ID,
2215 MR_HEADER_ID,
2216 STATUS_CODE,
2217 DUE_DATE,
2218 ACCOMPLISHED_DATE,
2219 SET_DUE_DATE,
2220 DUE_COUNTER_VALUE,
2221 FORECAST_SEQUENCE,
2222 REPETITIVE_MR_FLAG,
2223 TOLERANCE_FLAG,
2224 DATE_RUN,
2225 PRECEDING_UE_ID,
2226 MESSAGE_CODE,
2227 REMARKS,
2228 SERVICE_LINE_ID,
2229 PROGRAM_MR_HEADER_ID,
2230 CANCEL_REASON_CODE,
2231 EARLIEST_DUE_DATE,
2232 LATEST_DUE_DATE,
2233 DEFER_FROM_UE_ID,
2234 CS_INCIDENT_ID,
2235 QA_COLLECTION_ID,
2236 ORIG_DEFERRAL_UE_ID,
2237 APPLICATION_USG_CODE,
2238 OBJECT_TYPE,
2239 COUNTER_ID,
2240 MANUALLY_PLANNED_FLAG,
2241 LOG_SERIES_CODE,
2242 LOG_SERIES_NUMBER,
2243 FLIGHT_NUMBER,
2244 MEL_CDL_TYPE_CODE,
2245 POSITION_PATH_ID,
2246 ATA_CODE,
2247 UNIT_CONFIG_HEADER_ID,
2248 ATTRIBUTE_CATEGORY,
2249 ATTRIBUTE1,
2250 ATTRIBUTE2,
2251 ATTRIBUTE3,
2252 ATTRIBUTE4,
2253 ATTRIBUTE5,
2254 ATTRIBUTE6,
2255 ATTRIBUTE7,
2256 ATTRIBUTE8,
2257 ATTRIBUTE9,
2258 ATTRIBUTE10,
2259 ATTRIBUTE11,
2260 ATTRIBUTE12,
2261 ATTRIBUTE13,
2262 ATTRIBUTE14,
2263 ATTRIBUTE15
2264 FROM AHL_UNIT_EFFECTIVITIES_APP_V
2265 WHERE unit_effectivity_id = p_ue_id
2266 FOR UPDATE OF OBJECT_VERSION_NUMBER;
2267
2268 CURSOR l_get_descendents(p_ue_id IN NUMBER) IS
2269 SELECT related_ue_id
2270 FROM ahl_ue_relationships
2271 START WITH ue_id = p_ue_id
2272 AND relationship_code = 'PARENT'
2273 CONNECT BY ue_id = PRIOR related_ue_id
2274 AND relationship_code = 'PARENT';
2275
2276 CURSOR l_get_accomplishments(p_ue_id IN NUMBER) IS
2277 SELECT UNIT_ACCOMPLISHMNT_ID
2278 FROM ahl_unit_accomplishmnts
2279 WHERE UNIT_EFFECTIVITY_ID = p_ue_id;
2280
2281 CURSOR l_get_thresholds(p_ue_id IN NUMBER) IS
2282 SELECT UNIT_THRESHOLD_ID
2283 FROM ahl_unit_thresholds
2284 WHERE UNIT_DEFERRAL_ID = p_ue_id;
2285
2286 CURSOR ahl_unit_def_csr(p_ue_id IN NUMBER) IS
2287 SELECT unit_deferral_id,
2288 ata_sequence_id,
2289 object_version_number,
2290 unit_deferral_type,
2291 approval_status_code,
2292 defer_reason_code,
2293 skip_mr_flag,
2294 affect_due_calc_flag,
2295 set_due_date,
2296 deferral_effective_on,
2297 remarks,approver_notes,attribute_category, attribute1,
2298 attribute2, attribute3, attribute4, attribute5, attribute6, attribute7,
2299 attribute8, attribute9, attribute10, attribute11, attribute12,
2300 attribute13, attribute14, attribute15
2301 FROM ahl_unit_deferrals_vl
2302 WHERE unit_effectivity_id = p_ue_id
2303 AND UNIT_DEFERRAL_TYPE = 'INIT-DUE'
2304 FOR UPDATE OF OBJECT_VERSION_NUMBER;
2305
2306 l_ue_rec l_get_unit_effectivity_csr%rowtype;
2307
2308 l_descendent_ue_id NUMBER;
2309 l_status_code VARCHAR2(30);
2310 l_accomplished_date DATE;
2311 l_set_due_date DATE;
2312 l_junk VARCHAR2(1);
2313 l_date_missing_flag boolean := false;
2314 l_accomplishment_id NUMBER;
2315 l_threshold_id NUMBER;
2316 l_return_status VARCHAR2(32);
2317 l_counters_msg VARCHAR2(1000);
2318
2319 -- Added for 11.5.10.
2320 l_unit_deferral_operation VARCHAR2(1) := 'X';
2321 l_unit_deferral_id NUMBER;
2322 l_unit_def_rec ahl_unit_def_csr%ROWTYPE;
2323 l_rowid VARCHAR2(30);
2324
2325
2326 BEGIN
2327 l_status_code := p_unit_Effectivity_rec.status_code;
2328 l_accomplished_date := p_unit_Effectivity_rec.ACCOMPLISHED_DATE;
2329 l_set_due_date := p_unit_Effectivity_rec.SET_DUE_DATE;
2330
2331 -- Get current state
2332 OPEN l_get_unit_effectivity_csr(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
2333 FETCH l_get_unit_effectivity_csr INTO l_ue_rec;
2334 CLOSE l_get_unit_effectivity_csr;
2335
2336 IF G_DEBUG='Y' THEN
2337 AHL_DEBUG_PUB.debug('In Update_Unit_Effectivity', 'UMP');
2338 AHL_DEBUG_PUB.debug('Unit Eff ID:' || p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID, 'UMP');
2339 AHL_DEBUG_PUB.debug('l_status_code:' || l_status_code, 'UMP');
2340 AHL_DEBUG_PUB.debug('l_ue_rec.status_code:' || l_ue_rec.status_code, 'UMP');
2341
2342 END IF;
2343
2344 -- If there are no accomplishments during initialization, reset status to null
2345 -- If the accomplishment date is not set during termination, set it to sysdate
2346 IF (l_status_code = 'INIT-DUE') THEN
2347 OPEN l_threshold_exists_csr(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
2348 FETCH l_threshold_exists_csr INTO l_junk;
2349 IF (l_threshold_exists_csr%NOTFOUND) THEN
2350 IF(l_set_due_date = FND_API.G_MISS_DATE) THEN
2351 l_status_code := null;
2352 l_unit_deferral_operation := 'D';
2353 ELSE
2354 l_unit_deferral_operation := 'U';
2355 END IF;
2356 ELSE
2357 l_unit_deferral_operation := 'U';
2358 END IF;
2359 CLOSE l_threshold_exists_csr;
2360
2361 ELSIF (l_status_code = 'INIT-ACCOMPLISHED') THEN
2362 OPEN l_accomplish_exists_csr(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
2363 FETCH l_accomplish_exists_csr INTO l_junk;
2364 IF (l_accomplish_exists_csr%NOTFOUND) THEN
2365 IF(l_accomplished_date IS NULL OR l_accomplished_date = FND_API.G_MISS_DATE) THEN
2366 l_status_code := null;
2367 END IF;
2368 -- raise error if date is null or g_miss.
2369 ELSIF (l_accomplished_date IS NULL OR l_accomplished_date = FND_API.G_MISS_DATE) THEN
2370 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACCMPLSHD_DATE_NULL');
2371 FND_MSG_PUB.ADD;
2372 RETURN;
2373 END IF;
2374 CLOSE l_accomplish_exists_csr;
2375 -- For INIT-ACCOMPLISHED, reset DUE_DATE, DUE_COUNTER_VALUE and MR_INTERVAL_ID
2376 l_ue_rec.DUE_DATE := null;
2377 l_ue_rec.earliest_due_date := null;
2378 l_ue_rec.latest_due_date := null;
2379 l_ue_rec.DUE_COUNTER_VALUE := null;
2380 l_ue_rec.MR_INTERVAL_ID := null;
2381 ELSIF (l_status_code = 'TERMINATED' OR l_status_code = 'MR-TERMINATE') THEN
2382 IF (l_accomplished_date IS NULL OR l_accomplished_date = FND_API.G_MISS_DATE) THEN
2383 l_accomplished_date := sysdate;
2384 END IF;
2385 END IF;
2386
2387 -- If object version no is different, write error message and skip to next unit effectivity
2388 IF(l_ue_rec.OBJECT_VERSION_NUMBER <> p_unit_Effectivity_rec.OBJECT_VERSION_NUMBER) THEN
2389 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_UE_CHANGED');
2390 FND_MESSAGE.Set_Name('AHL', 'AHL_COM_RECORD_CHANGED');
2391 FND_MSG_PUB.ADD;
2392 RETURN;
2393 END IF;
2394
2395 /* Moved this validation to the end of this procedure to validate after
2396 * init-accomplishment deletes as well.
2397 -- If this an accomplishment, init-accomplishment or termination, ensure that
2398 -- values for all counters are given by calling FMP API
2399 IF l_ue_rec.MR_HEADER_ID IS NOT NULL THEN
2400 IF (l_status_code = 'TERMINATED' OR l_status_code = 'MR-TERMINATE' OR
2401 l_status_code = 'ACCOMPLISHED') OR (l_status_code = 'INIT-ACCOMPLISHED' AND l_ue_rec.status_code IS NULL) THEN
2402 Match_Counters_with_FMP(
2403 p_unit_effectivity_id => p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID,
2404 p_item_instance_id => l_ue_rec.CSI_ITEM_INSTANCE_ID,
2405 p_mr_header_id => l_ue_rec.MR_HEADER_ID,
2406 x_counters => l_counters_msg,
2407 x_return_status => l_return_status);
2408 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2409 FND_MESSAGE.Set_Name('AHL','AHL_UMP_MISSING_COUNTERS');
2410 FND_MESSAGE.Set_Token('COUNTERS', l_counters_msg);
2411 FND_MSG_PUB.ADD;
2412 RETURN;
2413 END IF;
2414 END IF;
2415 END IF;
2416 */
2417
2418 -- Handle G_MISS and null values
2419 IF l_accomplished_date = FND_API.G_MISS_DATE THEN
2420 l_accomplished_date := null;
2421 ELSIF l_accomplished_date IS NULL THEN
2422 l_accomplished_date := l_ue_rec.accomplished_date;
2423 END IF;
2424
2425 -- For qa collection id.
2426 IF p_unit_Effectivity_rec.qa_collection_id = FND_API.G_MISS_NUM THEN
2427 l_ue_rec.qa_collection_id := null;
2428 ELSIF p_unit_Effectivity_rec.qa_collection_id IS NOT NULL THEN
2429 l_ue_rec.qa_collection_id := p_unit_Effectivity_rec.qa_collection_id ;
2430 END IF;
2431
2432 IF p_unit_Effectivity_rec.REMARKS = FND_API.G_MISS_CHAR THEN
2433 l_ue_rec.REMARKS := null;
2434 ELSIF p_unit_Effectivity_rec.REMARKS IS NOT null THEN
2435 l_ue_rec.REMARKS := p_unit_Effectivity_rec.REMARKS;
2436 END IF;
2437 IF p_unit_Effectivity_rec.ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
2438 l_ue_rec.ATTRIBUTE_CATEGORY := null;
2439 ELSIF p_unit_Effectivity_rec.ATTRIBUTE_CATEGORY IS NOT null THEN
2440 l_ue_rec.ATTRIBUTE_CATEGORY := p_unit_Effectivity_rec.ATTRIBUTE_CATEGORY;
2441 END IF;
2442 IF p_unit_Effectivity_rec.ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
2443 l_ue_rec.ATTRIBUTE1 := null;
2444 ELSIF p_unit_Effectivity_rec.ATTRIBUTE1 IS NOT null THEN
2445 l_ue_rec.ATTRIBUTE1 := p_unit_Effectivity_rec.ATTRIBUTE1;
2446 END IF;
2447 IF p_unit_Effectivity_rec.ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
2448 l_ue_rec.ATTRIBUTE2 := null;
2449 ELSIF p_unit_Effectivity_rec.ATTRIBUTE2 IS NOT null THEN
2450 l_ue_rec.ATTRIBUTE2 := p_unit_Effectivity_rec.ATTRIBUTE2;
2451 END IF;
2452 IF p_unit_Effectivity_rec.ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
2453 l_ue_rec.ATTRIBUTE3 := null;
2454 ELSIF p_unit_Effectivity_rec.ATTRIBUTE3 IS NOT null THEN
2455 l_ue_rec.ATTRIBUTE3 := p_unit_Effectivity_rec.ATTRIBUTE3;
2456 END IF;
2457 IF p_unit_Effectivity_rec.ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
2458 l_ue_rec.ATTRIBUTE4 := null;
2459 ELSIF p_unit_Effectivity_rec.ATTRIBUTE4 IS NOT null THEN
2460 l_ue_rec.ATTRIBUTE4 := p_unit_Effectivity_rec.ATTRIBUTE4;
2461 END IF;
2462 IF p_unit_Effectivity_rec.ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
2463 l_ue_rec.ATTRIBUTE5 := null;
2464 ELSIF p_unit_Effectivity_rec.ATTRIBUTE5 IS NOT null THEN
2465 l_ue_rec.ATTRIBUTE5 := p_unit_Effectivity_rec.ATTRIBUTE5;
2466 END IF;
2467 IF p_unit_Effectivity_rec.ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
2468 l_ue_rec.ATTRIBUTE6 := null;
2469 ELSIF p_unit_Effectivity_rec.ATTRIBUTE6 IS NOT null THEN
2470 l_ue_rec.ATTRIBUTE6 := p_unit_Effectivity_rec.ATTRIBUTE6;
2471 END IF;
2472 IF p_unit_Effectivity_rec.ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
2473 l_ue_rec.ATTRIBUTE7 := null;
2474 ELSIF p_unit_Effectivity_rec.ATTRIBUTE7 IS NOT null THEN
2475 l_ue_rec.ATTRIBUTE7 := p_unit_Effectivity_rec.ATTRIBUTE7;
2476 END IF;
2477 IF p_unit_Effectivity_rec.ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
2478 l_ue_rec.ATTRIBUTE8 := null;
2479 ELSIF p_unit_Effectivity_rec.ATTRIBUTE8 IS NOT null THEN
2480 l_ue_rec.ATTRIBUTE8 := p_unit_Effectivity_rec.ATTRIBUTE8;
2481 END IF;
2482 IF p_unit_Effectivity_rec.ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
2483 l_ue_rec.ATTRIBUTE9 := null;
2484 ELSIF p_unit_Effectivity_rec.ATTRIBUTE9 IS NOT null THEN
2485 l_ue_rec.ATTRIBUTE9 := p_unit_Effectivity_rec.ATTRIBUTE9;
2486 END IF;
2487 IF p_unit_Effectivity_rec.ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
2488 l_ue_rec.ATTRIBUTE10 := null;
2489 ELSIF p_unit_Effectivity_rec.ATTRIBUTE10 IS NOT null THEN
2490 l_ue_rec.ATTRIBUTE10 := p_unit_Effectivity_rec.ATTRIBUTE10;
2491 END IF;
2492 IF p_unit_Effectivity_rec.ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
2493 l_ue_rec.ATTRIBUTE11 := null;
2494 ELSIF p_unit_Effectivity_rec.ATTRIBUTE11 IS NOT null THEN
2495 l_ue_rec.ATTRIBUTE11 := p_unit_Effectivity_rec.ATTRIBUTE11;
2496 END IF;
2497 IF p_unit_Effectivity_rec.ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
2498 l_ue_rec.ATTRIBUTE12 := null;
2499 ELSIF p_unit_Effectivity_rec.ATTRIBUTE12 IS NOT null THEN
2500 l_ue_rec.ATTRIBUTE12 := p_unit_Effectivity_rec.ATTRIBUTE12;
2501 END IF;
2502 IF p_unit_Effectivity_rec.ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
2503 l_ue_rec.ATTRIBUTE13 := null;
2504 ELSIF p_unit_Effectivity_rec.ATTRIBUTE13 IS NOT null THEN
2505 l_ue_rec.ATTRIBUTE13 := p_unit_Effectivity_rec.ATTRIBUTE13;
2506 END IF;
2507 IF p_unit_Effectivity_rec.ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
2508 l_ue_rec.ATTRIBUTE14 := null;
2509 ELSIF p_unit_Effectivity_rec.ATTRIBUTE14 IS NOT null THEN
2510 l_ue_rec.ATTRIBUTE14 := p_unit_Effectivity_rec.ATTRIBUTE14;
2511 END IF;
2512 IF p_unit_Effectivity_rec.ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
2513 l_ue_rec.ATTRIBUTE15 := null;
2514 ELSIF p_unit_Effectivity_rec.ATTRIBUTE15 IS NOT null THEN
2515 l_ue_rec.ATTRIBUTE15 := p_unit_Effectivity_rec.ATTRIBUTE15;
2516 END IF;
2517
2518 -- Call Table Handler to update record
2519 AHL_UNIT_EFFECTIVITIES_PKG.update_row(
2520 x_unit_effectivity_id => p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID,
2521 x_csi_item_instance_id => l_ue_rec.CSI_ITEM_INSTANCE_ID,
2522 x_mr_interval_id => l_ue_rec.MR_INTERVAL_ID,
2523 x_mr_effectivity_id => l_ue_rec.MR_EFFECTIVITY_ID,
2524 x_mr_header_id => l_ue_rec.MR_HEADER_ID,
2525 x_status_code => l_status_code,
2526 x_due_date => l_ue_rec.DUE_DATE,
2527 x_due_counter_value => l_ue_rec.DUE_COUNTER_VALUE,
2528 x_forecast_sequence => l_ue_rec.FORECAST_SEQUENCE,
2529 x_repetitive_mr_flag => l_ue_rec.REPETITIVE_MR_FLAG,
2530 x_tolerance_flag => l_ue_rec.TOLERANCE_FLAG,
2531 x_remarks => l_ue_rec.REMARKS,
2532 x_message_code => l_ue_rec.MESSAGE_CODE,
2533 x_preceding_ue_id => l_ue_rec.PRECEDING_UE_ID,
2534 x_date_run => l_ue_rec.DATE_RUN,
2535 x_set_due_date => null,
2536 x_accomplished_date => l_accomplished_date,
2537 x_service_line_id => l_ue_rec.service_line_id,
2538 x_program_mr_header_id => l_ue_rec.program_mr_header_id,
2539 x_cancel_reason_code => l_ue_rec.cancel_reason_code,
2540 x_earliest_due_date => l_ue_rec.earliest_due_date,
2541 x_latest_due_date => l_ue_rec.latest_due_date,
2542 x_defer_from_ue_id => l_ue_rec.defer_from_ue_id,
2543 x_qa_collection_id => l_ue_rec.qa_collection_id,
2544 x_cs_incident_id => l_ue_rec.cs_incident_id,
2545 x_orig_deferral_ue_id => l_ue_rec.orig_deferral_ue_id,
2546 x_application_usg_code => l_ue_rec.application_usg_code,
2547 x_object_type => l_ue_rec.object_type,
2548 x_counter_id => l_ue_rec.counter_id,
2549 x_manually_planned_flag => l_ue_rec.manually_planned_flag,
2550 X_LOG_SERIES_CODE => l_ue_rec.log_series_code,
2551 X_LOG_SERIES_NUMBER => l_ue_rec.log_series_number,
2552 X_FLIGHT_NUMBER => l_ue_rec.flight_number,
2553 X_MEL_CDL_TYPE_CODE => l_ue_rec.mel_cdl_type_code,
2554 X_POSITION_PATH_ID => l_ue_rec.position_path_id,
2555 X_ATA_CODE => l_ue_rec.ATA_CODE,
2556 X_UNIT_CONFIG_HEADER_ID => l_ue_rec.unit_config_header_id,
2557 x_attribute_category => l_ue_rec.ATTRIBUTE_CATEGORY,
2558 x_attribute1 => l_ue_rec.ATTRIBUTE1,
2559 x_attribute2 => l_ue_rec.ATTRIBUTE2,
2560 x_attribute3 => l_ue_rec.ATTRIBUTE3,
2561 x_attribute4 => l_ue_rec.ATTRIBUTE4,
2562 x_attribute5 => l_ue_rec.ATTRIBUTE5,
2563 x_attribute6 => l_ue_rec.ATTRIBUTE6,
2564 x_attribute7 => l_ue_rec.ATTRIBUTE7,
2565 x_attribute8 => l_ue_rec.ATTRIBUTE8,
2566 x_attribute9 => l_ue_rec.ATTRIBUTE9,
2567 x_attribute10 => l_ue_rec.ATTRIBUTE10,
2568 x_attribute11 => l_ue_rec.ATTRIBUTE11,
2569 x_attribute12 => l_ue_rec.ATTRIBUTE12,
2570 x_attribute13 => l_ue_rec.ATTRIBUTE13,
2571 x_attribute14 => l_ue_rec.ATTRIBUTE14,
2572 x_attribute15 => l_ue_rec.ATTRIBUTE15,
2573 x_object_version_number => l_ue_rec.OBJECT_VERSION_NUMBER + 1,
2574 x_last_update_date => TRUNC(sysdate),
2575 x_last_updated_by => fnd_global.user_id,
2576 x_last_update_login => fnd_global.login_id);
2577
2578
2579 -- Update/Delete the unit_deferrals record.
2580 OPEN ahl_unit_def_csr (p_unit_Effectivity_rec.unit_effectivity_id);
2581 FETCH ahl_unit_def_csr INTO l_unit_def_rec;
2582 IF (ahl_unit_def_csr%FOUND) THEN
2583 IF (l_unit_deferral_operation = 'D') THEN
2584 -- Check Object version.
2585 IF (l_unit_def_rec.object_version_number <> p_unit_Effectivity_rec.unit_deferral_object_version)
2586 THEN
2587 FND_MESSAGE.Set_Name('AHL', 'AHL_COM_RECORD_CHANGED');
2588 FND_MSG_PUB.ADD;
2589 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2590 END IF;
2591
2592 AHL_UNIT_DEFERRALS_PKG.delete_row(x_unit_deferral_id => l_unit_def_rec.unit_deferral_id);
2593
2594 ELSIF (l_unit_deferral_operation = 'U') THEN
2595
2596 -- Check Object version.
2597 IF (l_unit_def_rec.object_version_number <> p_unit_Effectivity_rec.unit_deferral_object_version)
2598 THEN
2599 FND_MESSAGE.Set_Name('AHL', 'AHL_COM_RECORD_CHANGED');
2600 FND_MSG_PUB.ADD;
2601 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2602 END IF;
2603
2604 IF l_set_due_date = FND_API.G_MISS_DATE THEN
2605 l_set_due_date := null;
2606 ELSIF l_set_due_date IS NULL THEN
2607 l_set_due_date := l_unit_def_rec.set_due_date;
2608 END IF;
2609
2610 IF (nvl(l_unit_def_rec.set_due_date, sysdate+1) <> nvl(l_set_due_date, sysdate+1)) THEN
2611 AHL_UNIT_DEFERRALS_PKG.update_row(
2612 x_unit_deferral_id => l_unit_def_rec.unit_deferral_id,
2613 x_ata_sequence_id => l_unit_def_rec.ata_sequence_id,
2614 x_object_version_number => l_unit_def_rec.object_version_number + 1,
2615 x_last_updated_by => fnd_global.user_id,
2616 x_last_update_date => sysdate,
2617 x_last_update_login => fnd_global.login_id,
2618 x_unit_effectivity_id => p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID,
2619 x_unit_deferral_type => l_unit_def_rec.unit_deferral_type,
2620 x_set_due_date => l_set_due_date,
2621 x_deferral_effective_on => l_unit_def_rec.deferral_effective_on,
2622 x_approval_status_code => l_unit_def_rec.approval_status_code,
2623 x_defer_reason_code => l_unit_def_rec.defer_reason_code,
2624 x_affect_due_calc_flag => l_unit_def_rec.affect_due_calc_flag,
2625 x_skip_mr_flag => l_unit_def_rec.skip_mr_flag,
2626 x_remarks => l_unit_def_rec.remarks,
2627 x_approver_notes => l_unit_def_rec.approver_notes,
2628 x_user_deferral_type => null,
2629 x_attribute_category => l_unit_def_rec.attribute_category,
2630 x_attribute1 => l_unit_def_rec.attribute1,
2631 x_attribute2 => l_unit_def_rec.attribute2,
2632 x_attribute3 => l_unit_def_rec.attribute3,
2633 x_attribute4 => l_unit_def_rec.attribute4,
2634 x_attribute5 => l_unit_def_rec.attribute5,
2635 x_attribute6 => l_unit_def_rec.attribute6,
2636 x_attribute7 => l_unit_def_rec.attribute7,
2637 x_attribute8 => l_unit_def_rec.attribute8,
2638 x_attribute9 => l_unit_def_rec.attribute9,
2639 x_attribute10 => l_unit_def_rec.attribute10,
2640 x_attribute11 => l_unit_def_rec.attribute11,
2641 x_attribute12 => l_unit_def_rec.attribute12,
2642 x_attribute13 => l_unit_def_rec.attribute13,
2643 x_attribute14 => l_unit_def_rec.attribute14,
2644 x_attribute15 => l_unit_def_rec.attribute15
2645 );
2646 END IF; -- set due date.
2647 END IF;
2648 ELSE -- unit deferral not found.
2649 -- If set due date is not null, create a new unit deferral record.
2650 -- Create unit_deferral record.
2651 AHL_UNIT_DEFERRALS_PKG.insert_row(
2652 x_rowid => l_rowid,
2653 x_unit_deferral_id => l_unit_deferral_id,
2654 x_ata_sequence_id => null,
2655 x_object_version_number => 1,
2656 x_created_by => fnd_global.user_id,
2657 x_creation_date => sysdate,
2658 x_last_updated_by => fnd_global.user_id,
2659 x_last_update_date => sysdate,
2660 x_last_update_login => fnd_global.login_id,
2661 x_unit_effectivity_id => p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID,
2662 x_unit_deferral_type => 'INIT-DUE',
2663 x_set_due_date => p_unit_Effectivity_rec.set_due_date,
2664 x_deferral_effective_on => null,
2665 x_approval_status_code => null,
2666 x_defer_reason_code => null,
2667 x_affect_due_calc_flag => 'Y',
2668 x_skip_mr_flag => null,
2669 x_remarks => null,
2670 x_approver_notes => null,
2671 x_user_deferral_type => null,
2672 x_attribute_category => null,
2673 x_attribute1 => null,
2674 x_attribute2 => null,
2675 x_attribute3 => null,
2676 x_attribute4 => null,
2677 x_attribute5 => null,
2678 x_attribute6 => null,
2679 x_attribute7 => null,
2680 x_attribute8 => null,
2681 x_attribute9 => null,
2682 x_attribute10 => null,
2683 x_attribute11 => null,
2684 x_attribute12 => null,
2685 x_attribute13 => null,
2686 x_attribute14 => null,
2687 x_attribute15 => null
2688 );
2689
2690 END IF;
2691 CLOSE ahl_unit_def_csr ;
2692
2693 -- Post Processing
2694 -- If this is a parent of a group, terminate all its descendents also
2695 IF (l_status_code = 'TERMINATED') THEN
2696 OPEN l_get_descendents(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
2697 LOOP
2698 FETCH l_get_descendents into l_descendent_ue_id;
2699 EXIT WHEN l_get_descendents%NOTFOUND;
2700 Terminate_Descendent(l_descendent_ue_id);
2701 END LOOP;
2702 CLOSE l_get_descendents;
2703 END IF;
2704
2705 -- If this is an INIT-DUE, remove all accomplishments if any exists
2706 IF (l_status_code = 'INIT-DUE') THEN
2707 OPEN l_get_accomplishments(p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
2708 LOOP
2709 FETCH l_get_accomplishments into l_accomplishment_id;
2710 EXIT WHEN l_get_accomplishments%NOTFOUND;
2711 AHL_UNIT_ACCOMPLISH_PKG.delete_row(l_accomplishment_id);
2712 END LOOP;
2713 CLOSE l_get_accomplishments;
2714 END IF;
2715
2716 -- If this is an INIT-ACCOMPLISHED, remove all thresholds if any exists
2717 IF (l_status_code = 'INIT-ACCOMPLISHED') THEN
2718 OPEN ahl_unit_def_csr (p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID);
2719 FETCH ahl_unit_def_csr INTO l_unit_def_rec;
2720 IF (ahl_unit_def_csr%FOUND) THEN
2721
2722 -- delete thresholds.
2723 OPEN l_get_thresholds(l_unit_def_rec.unit_deferral_id);
2724 LOOP
2725 FETCH l_get_thresholds into l_threshold_id;
2726 EXIT WHEN l_get_thresholds%NOTFOUND;
2727 AHL_UNIT_THRESHOLDS_PKG.delete_row(l_threshold_id);
2728 END LOOP;
2729 CLOSE l_get_thresholds;
2730
2731 -- delete unit_deferrals.
2732 AHL_UNIT_DEFERRALS_PKG.delete_row(x_unit_deferral_id => l_unit_def_rec.unit_deferral_id);
2733
2734 END IF;
2735 CLOSE ahl_unit_def_csr;
2736 END IF;
2737
2738 -- For an MR, if this an accomplishment, init-accomplishment or termination, ensure that
2739 -- values for all counters are given by calling FMP API
2740 IF l_ue_rec.MR_HEADER_ID IS NOT NULL THEN
2741 IF (l_status_code = 'TERMINATED' OR --l_status_code = 'MR-TERMINATE' OR
2742 l_status_code = 'ACCOMPLISHED' OR l_status_code = 'INIT-ACCOMPLISHED')
2743 THEN
2744 Match_Counters_with_FMP(
2745 p_unit_effectivity_id => p_unit_Effectivity_rec.UNIT_EFFECTIVITY_ID,
2746 p_item_instance_id => l_ue_rec.CSI_ITEM_INSTANCE_ID,
2747 p_mr_header_id => l_ue_rec.MR_HEADER_ID,
2748 x_counters => l_counters_msg,
2749 x_return_status => l_return_status);
2750 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2751 FND_MESSAGE.Set_Name('AHL','AHL_UMP_MISSING_COUNTERS');
2752 FND_MESSAGE.Set_Token('COUNTERS', l_counters_msg);
2753 FND_MSG_PUB.ADD;
2754 --RETURN;
2755 END IF;
2756 END IF;
2757 END IF;
2758
2759 END Update_Unit_Effectivity;
2760
2761 ------------------------------------
2762 -- This procedure terminates a descendent unit effectivity
2763 -- Only the following fields are affected (The rest are retained):
2764 -- OBJECT_VERSION_NUMBER
2765 -- STATUS_CODE
2766 -- ACCOMPLISHED_DATE
2767 -- LAST_UPDATE_DATE
2768 -- LAST_UPDATED_BY
2769 -- LAST_UPDATE_LOGIN
2770 ------------------------------------
2771 PROCEDURE Terminate_Descendent(
2772 p_descendent_ue_id IN NUMBER) IS
2773 CURSOR l_get_unit_effectivity_csr(p_ue_id IN NUMBER) IS
2774 SELECT
2775 OBJECT_VERSION_NUMBER,
2776 CSI_ITEM_INSTANCE_ID,
2777 MR_INTERVAL_ID,
2778 MR_EFFECTIVITY_ID,
2779 MR_HEADER_ID,
2780 DUE_DATE,
2781 DUE_COUNTER_VALUE,
2782 FORECAST_SEQUENCE,
2783 REPETITIVE_MR_FLAG,
2784 TOLERANCE_FLAG,
2785 REMARKS,
2786 MESSAGE_CODE,
2787 PRECEDING_UE_ID,
2788 DATE_RUN,
2789 SET_DUE_DATE,
2790 SERVICE_LINE_ID,
2791 PROGRAM_MR_HEADER_ID,
2792 CANCEL_REASON_CODE,
2793 EARLIEST_DUE_DATE,
2794 LATEST_DUE_DATE,
2795 DEFER_FROM_UE_ID,
2796 CS_INCIDENT_ID,
2797 QA_COLLECTION_ID,
2798 ORIG_DEFERRAL_UE_ID,
2799 APPLICATION_USG_CODE,
2800 OBJECT_TYPE,
2801 COUNTER_ID,
2802 MANUALLY_PLANNED_FLAG,
2803 LOG_SERIES_CODE,
2804 LOG_SERIES_NUMBER,
2805 FLIGHT_NUMBER,
2806 MEL_CDL_TYPE_CODE,
2807 POSITION_PATH_ID,
2808 ATA_CODE,
2809 UNIT_CONFIG_HEADER_ID,
2810 ATTRIBUTE_CATEGORY,
2811 ATTRIBUTE1,
2812 ATTRIBUTE2,
2813 ATTRIBUTE3,
2814 ATTRIBUTE4,
2815 ATTRIBUTE5,
2816 ATTRIBUTE6,
2817 ATTRIBUTE7,
2818 ATTRIBUTE8,
2819 ATTRIBUTE9,
2820 ATTRIBUTE10,
2821 ATTRIBUTE11,
2822 ATTRIBUTE12,
2823 ATTRIBUTE13,
2824 ATTRIBUTE14,
2825 ATTRIBUTE15
2826 FROM AHL_UNIT_EFFECTIVITIES_APP_V
2827 WHERE unit_effectivity_id = p_ue_id
2828 FOR UPDATE OF OBJECT_VERSION_NUMBER;
2829
2830 l_ue_rec l_get_unit_effectivity_csr%rowtype;
2831
2832 BEGIN
2833 IF G_DEBUG='Y' THEN
2834 AHL_DEBUG_PUB.debug('Terminating Descendent with ue_id ' || p_descendent_ue_id, 'UMP');
2835 END IF;
2836 OPEN l_get_unit_effectivity_csr(p_descendent_ue_id);
2837 FETCH l_get_unit_effectivity_csr INTO l_ue_rec;
2838 CLOSE l_get_unit_effectivity_csr;
2839
2840 -- Call Table Handler to update record
2841 AHL_UNIT_EFFECTIVITIES_PKG.update_row(
2842 x_unit_effectivity_id => p_descendent_ue_id,
2843 x_csi_item_instance_id => l_ue_rec.CSI_ITEM_INSTANCE_ID,
2844 x_mr_interval_id => l_ue_rec.MR_INTERVAL_ID,
2845 x_mr_effectivity_id => l_ue_rec.MR_EFFECTIVITY_ID,
2846 x_mr_header_id => l_ue_rec.MR_HEADER_ID,
2847 x_status_code => 'TERMINATED',
2848 x_due_date => l_ue_rec.DUE_DATE,
2849 x_due_counter_value => l_ue_rec.DUE_COUNTER_VALUE,
2850 x_forecast_sequence => l_ue_rec.FORECAST_SEQUENCE,
2851 x_repetitive_mr_flag => l_ue_rec.REPETITIVE_MR_FLAG,
2852 x_tolerance_flag => l_ue_rec.TOLERANCE_FLAG,
2853 x_remarks => l_ue_rec.REMARKS,
2854 x_message_code => l_ue_rec.MESSAGE_CODE,
2855 x_preceding_ue_id => l_ue_rec.PRECEDING_UE_ID,
2856 x_date_run => l_ue_rec.DATE_RUN,
2857 x_set_due_date => l_ue_rec.SET_DUE_DATE,
2858 x_accomplished_date => TRUNC(sysdate),
2859 x_service_line_id => l_ue_rec.service_line_id,
2860 x_program_mr_header_id => l_ue_rec.program_mr_header_id,
2861 x_cancel_reason_code => l_ue_rec.cancel_reason_code,
2862 x_earliest_due_date => l_ue_rec.earliest_due_date,
2863 x_latest_due_date => l_ue_rec.latest_due_date,
2864 x_defer_from_ue_id => l_ue_rec.defer_from_ue_id,
2865 x_qa_collection_id => l_ue_rec.qa_collection_id,
2866 x_orig_deferral_ue_id => l_ue_rec.orig_deferral_ue_id,
2867 x_cs_incident_id => l_ue_rec.cs_incident_id,
2868 x_application_usg_code => l_ue_rec.application_usg_code,
2869 x_object_type => l_ue_rec.object_type,
2870 x_counter_id => l_ue_rec.counter_id,
2871 x_manually_planned_flag => l_ue_rec.manually_planned_flag,
2872 X_LOG_SERIES_CODE => l_ue_rec.log_series_code,
2873 X_LOG_SERIES_NUMBER => l_ue_rec.log_series_number,
2874 X_FLIGHT_NUMBER => l_ue_rec.flight_number,
2875 X_MEL_CDL_TYPE_CODE => l_ue_rec.mel_cdl_type_code,
2876 X_POSITION_PATH_ID => l_ue_rec.position_path_id,
2877 X_ATA_CODE => l_ue_rec.ATA_CODE,
2878 X_UNIT_CONFIG_HEADER_ID => l_ue_rec.unit_config_header_id,
2879 x_attribute_category => l_ue_rec.ATTRIBUTE_CATEGORY,
2880 x_attribute1 => l_ue_rec.ATTRIBUTE1,
2881 x_attribute2 => l_ue_rec.ATTRIBUTE2,
2882 x_attribute3 => l_ue_rec.ATTRIBUTE3,
2883 x_attribute4 => l_ue_rec.ATTRIBUTE4,
2884 x_attribute5 => l_ue_rec.ATTRIBUTE5,
2885 x_attribute6 => l_ue_rec.ATTRIBUTE6,
2886 x_attribute7 => l_ue_rec.ATTRIBUTE7,
2887 x_attribute8 => l_ue_rec.ATTRIBUTE8,
2888 x_attribute9 => l_ue_rec.ATTRIBUTE9,
2889 x_attribute10 => l_ue_rec.ATTRIBUTE10,
2890 x_attribute11 => l_ue_rec.ATTRIBUTE11,
2891 x_attribute12 => l_ue_rec.ATTRIBUTE12,
2892 x_attribute13 => l_ue_rec.ATTRIBUTE13,
2893 x_attribute14 => l_ue_rec.ATTRIBUTE14,
2894 x_attribute15 => l_ue_rec.ATTRIBUTE15,
2895 x_object_version_number => l_ue_rec.OBJECT_VERSION_NUMBER + 1,
2896 x_last_update_date => TRUNC(sysdate),
2897 x_last_updated_by => fnd_global.user_id,
2898 x_last_update_login => fnd_global.login_id);
2899
2900 END Terminate_Descendent;
2901
2902 ------------------------------------
2903 -- This procedure saves the thresholds by calling
2904 -- the insert_row, update_row or delete_row methods
2905 -- of the Thresholds table handler
2906 ------------------------------------
2907 PROCEDURE Update_Thresholds(
2908 p_unit_Effectivity_rec IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type,
2909 p_x_unit_threshold_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type) IS
2910
2911 CURSOR l_get_unit_threshold_csr(p_threshold_id IN NUMBER) IS
2912 SELECT OBJECT_VERSION_NUMBER,
2913 --UNIT_EFFECTIVITY_ID,
2914 UNIT_DEFERRAL_ID,
2915 COUNTER_ID,
2916 CTR_VALUE_TYPE_CODE,
2917 ATTRIBUTE_CATEGORY,
2918 ATTRIBUTE1,
2919 ATTRIBUTE2,
2920 ATTRIBUTE3,
2921 ATTRIBUTE4,
2922 ATTRIBUTE5,
2923 ATTRIBUTE6,
2924 ATTRIBUTE7,
2925 ATTRIBUTE8,
2926 ATTRIBUTE9,
2927 ATTRIBUTE10,
2928 ATTRIBUTE11,
2929 ATTRIBUTE12,
2930 ATTRIBUTE13,
2931 ATTRIBUTE14,
2932 ATTRIBUTE15
2933 FROM AHL_UNIT_THRESHOLDS
2934 WHERE UNIT_THRESHOLD_ID = p_threshold_id
2935 FOR UPDATE OF OBJECT_VERSION_NUMBER;
2936
2937 CURSOR l_get_dup_counter_csr(p_unit_def_id IN NUMBER,
2938 p_counter_id IN NUMBER) IS
2939 SELECT 'x'
2940 FROM AHL_UNIT_THRESHOLDS UTH
2941 WHERE UTH.unit_deferral_id = p_unit_def_id AND
2942 UTH.COUNTER_ID = p_counter_id;
2943
2944 CURSOR l_get_def_csr(p_ue_id IN NUMBER) IS
2945 SELECT unit_deferral_id
2946 FROM AHL_UNIT_DEFERRALS_B UDF
2947 WHERE UDF.UNIT_EFFECTIVITY_ID = p_ue_id AND
2948 UDF.UNIT_DEFERRAL_TYPE = 'INIT-DUE';
2949
2950 l_threshold_details l_get_unit_threshold_csr%ROWTYPE;
2951 l_junk VARCHAR2(1);
2952 l_unit_deferral_id NUMBER;
2953 l_rowid VARCHAR2(30);
2954
2955 BEGIN
2956 IF (p_x_unit_threshold_tbl.COUNT > 0) THEN
2957 FOR i IN p_x_unit_threshold_tbl.FIRST..p_x_unit_threshold_tbl.LAST LOOP
2958 IF (p_x_unit_threshold_tbl(i).OPERATION_FLAG = 'D') THEN
2959 -- delete row
2960 AHL_UNIT_THRESHOLDS_PKG.delete_row(p_x_unit_threshold_tbl(i).UNIT_THRESHOLD_ID);
2961 ELSIF (p_x_unit_threshold_tbl(i).OPERATION_FLAG = 'M') THEN
2962 -- modify row
2963 OPEN l_get_unit_threshold_csr(p_x_unit_threshold_tbl(i).UNIT_THRESHOLD_ID);
2964 FETCH l_get_unit_threshold_csr INTO l_threshold_details;
2965 IF (l_get_unit_threshold_csr%FOUND) THEN
2966 -- If object version no is different, write error message and skip to next unit effectivity
2967 IF(l_threshold_details.OBJECT_VERSION_NUMBER <> p_x_unit_threshold_tbl(i).OBJECT_VERSION_NUMBER) THEN
2968 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_THRESHOLD_CHANGED');
2969 -- FND_MESSAGE.Set_Token('COUNTER', p_x_unit_threshold_tbl(i).COUNTER_NAME);
2970 FND_MESSAGE.Set_Name('AHL', 'AHL_COM_RECORD_CHANGED');
2971 FND_MSG_PUB.ADD;
2972 RETURN;
2973 END IF;
2974 p_x_unit_threshold_tbl(i).OBJECT_VERSION_NUMBER := l_threshold_details.OBJECT_VERSION_NUMBER + 1;
2975 -- Handle G_MISS and null values
2976 IF p_x_unit_threshold_tbl(i).ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
2977 p_x_unit_threshold_tbl(i).ATTRIBUTE_CATEGORY := null;
2978 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE_CATEGORY IS null THEN
2979 p_x_unit_threshold_tbl(i).ATTRIBUTE_CATEGORY := l_threshold_details.ATTRIBUTE_CATEGORY;
2980 END IF;
2981 IF p_x_unit_threshold_tbl(i).ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
2982 p_x_unit_threshold_tbl(i).ATTRIBUTE1 := null;
2983 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE1 IS null THEN
2984 p_x_unit_threshold_tbl(i).ATTRIBUTE1 := l_threshold_details.ATTRIBUTE1;
2985 END IF;
2986 IF p_x_unit_threshold_tbl(i).ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
2987 p_x_unit_threshold_tbl(i).ATTRIBUTE2 := null;
2988 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE2 IS null THEN
2989 p_x_unit_threshold_tbl(i).ATTRIBUTE2 := l_threshold_details.ATTRIBUTE2;
2990 END IF;
2991 IF p_x_unit_threshold_tbl(i).ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
2992 p_x_unit_threshold_tbl(i).ATTRIBUTE3 := null;
2993 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE3 IS null THEN
2994 p_x_unit_threshold_tbl(i).ATTRIBUTE3 := l_threshold_details.ATTRIBUTE3;
2995 END IF;
2996 IF p_x_unit_threshold_tbl(i).ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
2997 p_x_unit_threshold_tbl(i).ATTRIBUTE4 := null;
2998 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE4 IS null THEN
2999 p_x_unit_threshold_tbl(i).ATTRIBUTE4 := l_threshold_details.ATTRIBUTE4;
3000 END IF;
3001 IF p_x_unit_threshold_tbl(i).ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
3002 p_x_unit_threshold_tbl(i).ATTRIBUTE5 := null;
3003 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE5 IS null THEN
3004 p_x_unit_threshold_tbl(i).ATTRIBUTE5 := l_threshold_details.ATTRIBUTE5;
3005 END IF;
3006 IF p_x_unit_threshold_tbl(i).ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
3007 p_x_unit_threshold_tbl(i).ATTRIBUTE6 := null;
3008 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE6 IS null THEN
3009 p_x_unit_threshold_tbl(i).ATTRIBUTE6 := l_threshold_details.ATTRIBUTE6;
3010 END IF;
3011 IF p_x_unit_threshold_tbl(i).ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
3012 p_x_unit_threshold_tbl(i).ATTRIBUTE7 := null;
3013 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE7 IS null THEN
3014 p_x_unit_threshold_tbl(i).ATTRIBUTE7 := l_threshold_details.ATTRIBUTE7;
3015 END IF;
3016 IF p_x_unit_threshold_tbl(i).ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
3017 p_x_unit_threshold_tbl(i).ATTRIBUTE8 := null;
3018 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE8 IS null THEN
3019 p_x_unit_threshold_tbl(i).ATTRIBUTE8 := l_threshold_details.ATTRIBUTE8;
3020 END IF;
3021 IF p_x_unit_threshold_tbl(i).ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
3022 p_x_unit_threshold_tbl(i).ATTRIBUTE9 := null;
3023 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE9 IS null THEN
3024 p_x_unit_threshold_tbl(i).ATTRIBUTE9 := l_threshold_details.ATTRIBUTE9;
3025 END IF;
3026 IF p_x_unit_threshold_tbl(i).ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
3027 p_x_unit_threshold_tbl(i).ATTRIBUTE10 := null;
3028 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE10 IS null THEN
3029 p_x_unit_threshold_tbl(i).ATTRIBUTE10 := l_threshold_details.ATTRIBUTE10;
3030 END IF;
3031 IF p_x_unit_threshold_tbl(i).ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
3032 p_x_unit_threshold_tbl(i).ATTRIBUTE11 := null;
3033 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE11 IS null THEN
3034 p_x_unit_threshold_tbl(i).ATTRIBUTE11 := l_threshold_details.ATTRIBUTE11;
3035 END IF;
3036 IF p_x_unit_threshold_tbl(i).ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
3037 p_x_unit_threshold_tbl(i).ATTRIBUTE12 := null;
3038 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE12 IS null THEN
3039 p_x_unit_threshold_tbl(i).ATTRIBUTE12 := l_threshold_details.ATTRIBUTE12;
3040 END IF;
3041 IF p_x_unit_threshold_tbl(i).ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
3042 p_x_unit_threshold_tbl(i).ATTRIBUTE13 := null;
3043 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE13 IS null THEN
3044 p_x_unit_threshold_tbl(i).ATTRIBUTE13 := l_threshold_details.ATTRIBUTE13;
3045 END IF;
3046 IF p_x_unit_threshold_tbl(i).ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
3047 p_x_unit_threshold_tbl(i).ATTRIBUTE14 := null;
3048 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE14 IS null THEN
3049 p_x_unit_threshold_tbl(i).ATTRIBUTE14 := l_threshold_details.ATTRIBUTE14;
3050 END IF;
3051 IF p_x_unit_threshold_tbl(i).ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
3052 p_x_unit_threshold_tbl(i).ATTRIBUTE15 := null;
3053 ELSIF p_x_unit_threshold_tbl(i).ATTRIBUTE15 IS null THEN
3054 p_x_unit_threshold_tbl(i).ATTRIBUTE15 := l_threshold_details.ATTRIBUTE15;
3055 END IF;
3056
3057 -- Call table handler to update
3058 AHL_UNIT_THRESHOLDS_PKG.update_row (
3059 P_UNIT_THRESHOLD_ID => p_x_unit_threshold_tbl(i).UNIT_THRESHOLD_ID,
3060 --P_UNIT_EFFECTIVITY_ID => l_threshold_details.UNIT_EFFECTIVITY_ID,
3061 P_UNIT_DEFERRAL_ID => l_threshold_details.UNIT_DEFERRAL_ID,
3062 P_CTR_VALUE_TYPE_CODE => l_threshold_details.CTR_VALUE_TYPE_CODE,
3063 P_COUNTER_ID => l_threshold_details.COUNTER_ID,
3064 P_COUNTER_VALUE => p_x_unit_threshold_tbl(i).COUNTER_VALUE,
3065 P_ATTRIBUTE_CATEGORY => p_x_unit_threshold_tbl(i).ATTRIBUTE_CATEGORY,
3066 P_ATTRIBUTE1 => p_x_unit_threshold_tbl(i).ATTRIBUTE1,
3067 P_ATTRIBUTE2 => p_x_unit_threshold_tbl(i).ATTRIBUTE2,
3068 P_ATTRIBUTE3 => p_x_unit_threshold_tbl(i).ATTRIBUTE3,
3069 P_ATTRIBUTE4 => p_x_unit_threshold_tbl(i).ATTRIBUTE4,
3070 P_ATTRIBUTE5 => p_x_unit_threshold_tbl(i).ATTRIBUTE5,
3071 P_ATTRIBUTE6 => p_x_unit_threshold_tbl(i).ATTRIBUTE6,
3072 P_ATTRIBUTE7 => p_x_unit_threshold_tbl(i).ATTRIBUTE7,
3073 P_ATTRIBUTE8 => p_x_unit_threshold_tbl(i).ATTRIBUTE8,
3074 P_ATTRIBUTE9 => p_x_unit_threshold_tbl(i).ATTRIBUTE9,
3075 P_ATTRIBUTE10 => p_x_unit_threshold_tbl(i).ATTRIBUTE10,
3076 P_ATTRIBUTE11 => p_x_unit_threshold_tbl(i).ATTRIBUTE11,
3077 P_ATTRIBUTE12 => p_x_unit_threshold_tbl(i).ATTRIBUTE12,
3078 P_ATTRIBUTE13 => p_x_unit_threshold_tbl(i).ATTRIBUTE13,
3079 P_ATTRIBUTE14 => p_x_unit_threshold_tbl(i).ATTRIBUTE14,
3080 P_ATTRIBUTE15 => p_x_unit_threshold_tbl(i).ATTRIBUTE15,
3081 P_OBJECT_VERSION_NUMBER => p_x_unit_threshold_tbl(i).OBJECT_VERSION_NUMBER,
3082 P_LAST_UPDATE_DATE => TRUNC(sysdate),
3083 P_LAST_UPDATED_BY => fnd_global.user_id,
3084 P_LAST_UPDATE_LOGIN => fnd_global.login_id);
3085 ELSE
3086 FND_MESSAGE.Set_Name('AHL','AHL_UMP_THRSHLD_ID_INVALID');
3087 FND_MESSAGE.Set_Token('THRESHOLDID', p_x_unit_threshold_tbl(i).UNIT_THRESHOLD_ID);
3088 FND_MSG_PUB.ADD;
3089 END IF;
3090 CLOSE l_get_unit_threshold_csr;
3091 ELSIF (p_x_unit_threshold_tbl(i).OPERATION_FLAG = 'C') THEN
3092 -- insert threshold row
3093 -- Check if record exists in ahl_unit_deferral.
3094 OPEN l_get_def_csr(p_x_unit_threshold_tbl(i).UNIT_EFFECTIVITY_ID);
3095 FETCH l_get_def_csr INTO l_unit_deferral_id;
3096 IF (l_get_def_csr%FOUND) THEN
3097 OPEN l_get_dup_counter_csr(l_unit_deferral_id, p_x_unit_threshold_tbl(i).COUNTER_ID);
3098 FETCH l_get_dup_counter_csr INTO l_junk;
3099 IF (l_get_dup_counter_csr%FOUND) THEN
3100 FND_MESSAGE.Set_Name('AHL','AHL_UMP_DUPLICATE_COUNTER');
3101 FND_MESSAGE.Set_Token('COUNTERID', p_x_unit_threshold_tbl(i).COUNTER_ID);
3102 FND_MSG_PUB.ADD;
3103 CLOSE l_get_dup_counter_csr;
3104 RETURN;
3105 END IF;
3106 CLOSE l_get_dup_counter_csr;
3107 ELSE
3108 -- Create unit_deferral record.
3109 AHL_UNIT_DEFERRALS_PKG.insert_row(
3110 x_rowid => l_rowid,
3111 x_unit_deferral_id => l_unit_deferral_id,
3112 x_ata_sequence_id => null,
3113 x_object_version_number => 1,
3114 x_created_by => fnd_global.user_id,
3115 x_creation_date => sysdate,
3116 x_last_updated_by => fnd_global.user_id,
3117 x_last_update_date => sysdate,
3118 x_last_update_login => fnd_global.login_id,
3119 x_unit_effectivity_id => p_x_unit_threshold_tbl(i).unit_effectivity_id,
3120 x_unit_deferral_type => 'INIT-DUE',
3121 x_set_due_date => p_unit_Effectivity_rec.set_due_date,
3122 x_deferral_effective_on => null,
3123 x_approval_status_code => null,
3124 x_defer_reason_code => null,
3125 x_affect_due_calc_flag => 'Y',
3126 x_skip_mr_flag => null,
3127 x_remarks => null,
3128 x_approver_notes => null,
3129 x_user_deferral_type => null,
3130 x_attribute_category => null,
3131 x_attribute1 => null,
3132 x_attribute2 => null,
3133 x_attribute3 => null,
3134 x_attribute4 => null,
3135 x_attribute5 => null,
3136 x_attribute6 => null,
3137 x_attribute7 => null,
3138 x_attribute8 => null,
3139 x_attribute9 => null,
3140 x_attribute10 => null,
3141 x_attribute11 => null,
3142 x_attribute12 => null,
3143 x_attribute13 => null,
3144 x_attribute14 => null,
3145 x_attribute15 => null
3146 );
3147
3148 END IF;
3149 CLOSE l_get_def_csr;
3150
3151 p_x_unit_threshold_tbl(i).OBJECT_VERSION_NUMBER := 1;
3152 -- Handle G_MISS and null values
3153 IF p_x_unit_threshold_tbl(i).ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
3154 p_x_unit_threshold_tbl(i).ATTRIBUTE_CATEGORY := null;
3155 END IF;
3156 IF p_x_unit_threshold_tbl(i).ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
3157 p_x_unit_threshold_tbl(i).ATTRIBUTE1 := null;
3158 END IF;
3159 IF p_x_unit_threshold_tbl(i).ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
3160 p_x_unit_threshold_tbl(i).ATTRIBUTE2 := null;
3161 END IF;
3162 IF p_x_unit_threshold_tbl(i).ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
3163 p_x_unit_threshold_tbl(i).ATTRIBUTE3 := null;
3164 END IF;
3165 IF p_x_unit_threshold_tbl(i).ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
3166 p_x_unit_threshold_tbl(i).ATTRIBUTE4 := null;
3167 END IF;
3168 IF p_x_unit_threshold_tbl(i).ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
3169 p_x_unit_threshold_tbl(i).ATTRIBUTE5 := null;
3170 END IF;
3171 IF p_x_unit_threshold_tbl(i).ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
3172 p_x_unit_threshold_tbl(i).ATTRIBUTE6 := null;
3173 END IF;
3174 IF p_x_unit_threshold_tbl(i).ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
3175 p_x_unit_threshold_tbl(i).ATTRIBUTE7 := null;
3176 END IF;
3177 IF p_x_unit_threshold_tbl(i).ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
3178 p_x_unit_threshold_tbl(i).ATTRIBUTE8 := null;
3179 END IF;
3180 IF p_x_unit_threshold_tbl(i).ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
3181 p_x_unit_threshold_tbl(i).ATTRIBUTE9 := null;
3182 END IF;
3183 IF p_x_unit_threshold_tbl(i).ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
3184 p_x_unit_threshold_tbl(i).ATTRIBUTE10 := null;
3185 END IF;
3186 IF p_x_unit_threshold_tbl(i).ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
3187 p_x_unit_threshold_tbl(i).ATTRIBUTE11 := null;
3188 END IF;
3189 IF p_x_unit_threshold_tbl(i).ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
3190 p_x_unit_threshold_tbl(i).ATTRIBUTE12 := null;
3191 END IF;
3192 IF p_x_unit_threshold_tbl(i).ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
3193 p_x_unit_threshold_tbl(i).ATTRIBUTE13 := null;
3194 END IF;
3195 IF p_x_unit_threshold_tbl(i).ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
3196 p_x_unit_threshold_tbl(i).ATTRIBUTE14 := null;
3197 END IF;
3198 IF p_x_unit_threshold_tbl(i).ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
3199 p_x_unit_threshold_tbl(i).ATTRIBUTE15 := null;
3200 END IF;
3201 -- Call table handler to insert
3202 AHL_UNIT_THRESHOLDS_PKG.insert_row (
3203 P_X_UNIT_THRESHOLD_ID => p_x_unit_threshold_tbl(i).UNIT_THRESHOLD_ID,
3204 --P_UNIT_EFFECTIVITY_ID => p_x_unit_threshold_tbl(i).UNIT_EFFECTIVITY_ID,
3205 P_UNIT_DEFERRAL_ID => l_UNIT_DEFERRAL_ID,
3206 P_COUNTER_ID => p_x_unit_threshold_tbl(i).COUNTER_ID,
3207 P_COUNTER_VALUE => p_x_unit_threshold_tbl(i).COUNTER_VALUE,
3208 P_CTR_VALUE_TYPE_CODE => 'DEFER_TO',
3209 P_ATTRIBUTE_CATEGORY => p_x_unit_threshold_tbl(i).ATTRIBUTE_CATEGORY,
3210 P_ATTRIBUTE1 => p_x_unit_threshold_tbl(i).ATTRIBUTE1,
3211 P_ATTRIBUTE2 => p_x_unit_threshold_tbl(i).ATTRIBUTE2,
3212 P_ATTRIBUTE3 => p_x_unit_threshold_tbl(i).ATTRIBUTE3,
3213 P_ATTRIBUTE4 => p_x_unit_threshold_tbl(i).ATTRIBUTE4,
3214 P_ATTRIBUTE5 => p_x_unit_threshold_tbl(i).ATTRIBUTE5,
3215 P_ATTRIBUTE6 => p_x_unit_threshold_tbl(i).ATTRIBUTE6,
3216 P_ATTRIBUTE7 => p_x_unit_threshold_tbl(i).ATTRIBUTE7,
3217 P_ATTRIBUTE8 => p_x_unit_threshold_tbl(i).ATTRIBUTE8,
3218 P_ATTRIBUTE9 => p_x_unit_threshold_tbl(i).ATTRIBUTE9,
3219 P_ATTRIBUTE10 => p_x_unit_threshold_tbl(i).ATTRIBUTE10,
3220 P_ATTRIBUTE11 => p_x_unit_threshold_tbl(i).ATTRIBUTE11,
3221 P_ATTRIBUTE12 => p_x_unit_threshold_tbl(i).ATTRIBUTE12,
3222 P_ATTRIBUTE13 => p_x_unit_threshold_tbl(i).ATTRIBUTE13,
3223 P_ATTRIBUTE14 => p_x_unit_threshold_tbl(i).ATTRIBUTE14,
3224 P_ATTRIBUTE15 => p_x_unit_threshold_tbl(i).ATTRIBUTE15,
3225 P_OBJECT_VERSION_NUMBER => p_x_unit_threshold_tbl(i).OBJECT_VERSION_NUMBER,
3226 P_LAST_UPDATE_DATE => TRUNC(sysdate),
3227 P_LAST_UPDATED_BY => fnd_global.user_id,
3228 P_CREATION_DATE => TRUNC(sysdate),
3229 P_CREATED_BY => fnd_global.user_id,
3230 P_LAST_UPDATE_LOGIN => fnd_global.login_id);
3231 ELSE
3232 -- unrecognized operation flag
3233 FND_MESSAGE.Set_Name('AHL','AHL_UMP_OPERATION_INVALID');
3234 FND_MESSAGE.Set_Token('OPERATION', p_x_unit_threshold_tbl(i).OPERATION_FLAG);
3235 FND_MSG_PUB.ADD;
3236 END IF;
3237 END LOOP;
3238 END IF;
3239 END Update_Thresholds;
3240
3241 ------------------------------------
3242 -- This procedure saves the accomplishments by calling
3243 -- the insert_row, update_row or delete_row methods
3244 -- of the Accomplishments table handler
3245 ------------------------------------
3246 PROCEDURE Update_Accomplishments(
3247 p_x_unit_accomplish_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type,
3248 p_unit_Effectivity_rec IN AHL_UMP_UNITMAINT_PVT.Unit_Effectivity_rec_type) IS
3249
3250 CURSOR l_get_unit_accomplish_csr(p_accomplish_id IN NUMBER) IS
3251 SELECT OBJECT_VERSION_NUMBER,
3252 UNIT_EFFECTIVITY_ID,
3253 COUNTER_ID,
3254 ATTRIBUTE_CATEGORY,
3255 ATTRIBUTE1,
3256 ATTRIBUTE2,
3257 ATTRIBUTE3,
3258 ATTRIBUTE4,
3259 ATTRIBUTE5,
3260 ATTRIBUTE6,
3261 ATTRIBUTE7,
3262 ATTRIBUTE8,
3263 ATTRIBUTE9,
3264 ATTRIBUTE10,
3265 ATTRIBUTE11,
3266 ATTRIBUTE12,
3267 ATTRIBUTE13,
3268 ATTRIBUTE14,
3269 ATTRIBUTE15
3270 FROM AHL_UNIT_ACCOMPLISHMNTS
3271 WHERE UNIT_ACCOMPLISHMNT_ID = p_accomplish_id
3272 FOR UPDATE OF OBJECT_VERSION_NUMBER;
3273
3274 CURSOR l_get_dup_counter_csr(p_ue_id IN NUMBER,
3275 p_counter_id IN NUMBER) IS
3276 SELECT 'x'
3277 FROM AHL_UNIT_ACCOMPLISHMNTS
3278 WHERE UNIT_EFFECTIVITY_ID = p_ue_id AND
3279 COUNTER_ID = p_counter_id;
3280
3281 l_accomplish_details l_get_unit_accomplish_csr%ROWTYPE;
3282 l_junk VARCHAR2(1);
3283
3284 l_counter_reading_lock_rec csi_ctr_datastructures_pub.ctr_reading_lock_rec;
3285 l_reading_lock_id NUMBER;
3286 l_msg_count NUMBER;
3287 l_msg_data VARCHAR2(2000);
3288 l_return_status VARCHAR2(1);
3289
3290 BEGIN
3291 IF (p_x_unit_accomplish_tbl.COUNT > 0) THEN
3292 FOR i IN p_x_unit_accomplish_tbl.FIRST..p_x_unit_accomplish_tbl.LAST LOOP
3293 IF (p_x_unit_accomplish_tbl(i).OPERATION_FLAG = 'D') THEN
3294 -- delete row
3295 AHL_UNIT_ACCOMPLISH_PKG.delete_row(p_x_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID);
3296 ELSIF (p_x_unit_accomplish_tbl(i).OPERATION_FLAG = 'M') THEN
3297 -- modify row
3298 OPEN l_get_unit_accomplish_csr(p_x_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID);
3299 FETCH l_get_unit_accomplish_csr INTO l_accomplish_details;
3300 IF (l_get_unit_accomplish_csr%FOUND) THEN
3301 -- If object version no is different, write error message and skip to next unit effectivity
3302 IF(l_accomplish_details.OBJECT_VERSION_NUMBER <> p_x_unit_accomplish_tbl(i).OBJECT_VERSION_NUMBER) THEN
3303 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACCMPLSHMNT_CHANGED');
3304 -- FND_MESSAGE.Set_Token('COUNTER', p_x_unit_accomplish_tbl(i).COUNTER_NAME);
3305 FND_MESSAGE.Set_Name('AHL', 'AHL_COM_RECORD_CHANGED');
3306 FND_MSG_PUB.ADD;
3307 RETURN;
3308 END IF;
3309 p_x_unit_accomplish_tbl(i).OBJECT_VERSION_NUMBER := l_accomplish_details.OBJECT_VERSION_NUMBER + 1;
3310 -- Handle G_MISS and null values
3311 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
3312 p_x_unit_accomplish_tbl(i).ATTRIBUTE_CATEGORY := null;
3313 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE_CATEGORY IS null THEN
3314 p_x_unit_accomplish_tbl(i).ATTRIBUTE_CATEGORY := l_accomplish_details.ATTRIBUTE_CATEGORY;
3315 END IF;
3316 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
3317 p_x_unit_accomplish_tbl(i).ATTRIBUTE1 := null;
3318 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE1 IS null THEN
3319 p_x_unit_accomplish_tbl(i).ATTRIBUTE1 := l_accomplish_details.ATTRIBUTE1;
3320 END IF;
3321 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
3322 p_x_unit_accomplish_tbl(i).ATTRIBUTE2 := null;
3323 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE2 IS null THEN
3324 p_x_unit_accomplish_tbl(i).ATTRIBUTE2 := l_accomplish_details.ATTRIBUTE2;
3325 END IF;
3326 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
3327 p_x_unit_accomplish_tbl(i).ATTRIBUTE3 := null;
3328 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE3 IS null THEN
3329 p_x_unit_accomplish_tbl(i).ATTRIBUTE3 := l_accomplish_details.ATTRIBUTE3;
3330 END IF;
3331 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
3332 p_x_unit_accomplish_tbl(i).ATTRIBUTE4 := null;
3333 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE4 IS null THEN
3334 p_x_unit_accomplish_tbl(i).ATTRIBUTE4 := l_accomplish_details.ATTRIBUTE4;
3335 END IF;
3336 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
3337 p_x_unit_accomplish_tbl(i).ATTRIBUTE5 := null;
3338 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE5 IS null THEN
3339 p_x_unit_accomplish_tbl(i).ATTRIBUTE5 := l_accomplish_details.ATTRIBUTE5;
3340 END IF;
3341 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
3342 p_x_unit_accomplish_tbl(i).ATTRIBUTE6 := null;
3343 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE6 IS null THEN
3344 p_x_unit_accomplish_tbl(i).ATTRIBUTE6 := l_accomplish_details.ATTRIBUTE6;
3345 END IF;
3346 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
3347 p_x_unit_accomplish_tbl(i).ATTRIBUTE7 := null;
3348 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE7 IS null THEN
3349 p_x_unit_accomplish_tbl(i).ATTRIBUTE7 := l_accomplish_details.ATTRIBUTE7;
3350 END IF;
3351 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
3352 p_x_unit_accomplish_tbl(i).ATTRIBUTE8 := null;
3353 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE8 IS null THEN
3354 p_x_unit_accomplish_tbl(i).ATTRIBUTE8 := l_accomplish_details.ATTRIBUTE8;
3355 END IF;
3356 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
3357 p_x_unit_accomplish_tbl(i).ATTRIBUTE9 := null;
3358 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE9 IS null THEN
3359 p_x_unit_accomplish_tbl(i).ATTRIBUTE9 := l_accomplish_details.ATTRIBUTE9;
3360 END IF;
3361 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
3362 p_x_unit_accomplish_tbl(i).ATTRIBUTE10 := null;
3363 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE10 IS null THEN
3364 p_x_unit_accomplish_tbl(i).ATTRIBUTE10 := l_accomplish_details.ATTRIBUTE10;
3365 END IF;
3366 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
3367 p_x_unit_accomplish_tbl(i).ATTRIBUTE11 := null;
3368 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE11 IS null THEN
3369 p_x_unit_accomplish_tbl(i).ATTRIBUTE11 := l_accomplish_details.ATTRIBUTE11;
3370 END IF;
3371 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
3372 p_x_unit_accomplish_tbl(i).ATTRIBUTE12 := null;
3373 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE12 IS null THEN
3374 p_x_unit_accomplish_tbl(i).ATTRIBUTE12 := l_accomplish_details.ATTRIBUTE12;
3375 END IF;
3376 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
3377 p_x_unit_accomplish_tbl(i).ATTRIBUTE13 := null;
3378 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE13 IS null THEN
3379 p_x_unit_accomplish_tbl(i).ATTRIBUTE13 := l_accomplish_details.ATTRIBUTE13;
3380 END IF;
3381 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
3382 p_x_unit_accomplish_tbl(i).ATTRIBUTE14 := null;
3383 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE14 IS null THEN
3384 p_x_unit_accomplish_tbl(i).ATTRIBUTE14 := l_accomplish_details.ATTRIBUTE14;
3385 END IF;
3386 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
3387 p_x_unit_accomplish_tbl(i).ATTRIBUTE15 := null;
3388 ELSIF p_x_unit_accomplish_tbl(i).ATTRIBUTE15 IS null THEN
3389 p_x_unit_accomplish_tbl(i).ATTRIBUTE15 := l_accomplish_details.ATTRIBUTE15;
3390 END IF;
3391
3392 -- Call table handler to update
3393 AHL_UNIT_ACCOMPLISH_PKG.update_row (
3394 P_UNIT_ACCOMPLISHMNT_ID => p_x_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID,
3395 P_UNIT_EFFECTIVITY_ID => p_x_unit_accomplish_tbl(i).UNIT_EFFECTIVITY_ID,
3396 P_COUNTER_ID => p_x_unit_accomplish_tbl(i).COUNTER_ID,
3397 P_COUNTER_VALUE => p_x_unit_accomplish_tbl(i).COUNTER_VALUE,
3398 P_ATTRIBUTE_CATEGORY => p_x_unit_accomplish_tbl(i).ATTRIBUTE_CATEGORY,
3399 P_ATTRIBUTE1 => p_x_unit_accomplish_tbl(i).ATTRIBUTE1,
3400 P_ATTRIBUTE2 => p_x_unit_accomplish_tbl(i).ATTRIBUTE2,
3401 P_ATTRIBUTE3 => p_x_unit_accomplish_tbl(i).ATTRIBUTE3,
3402 P_ATTRIBUTE4 => p_x_unit_accomplish_tbl(i).ATTRIBUTE4,
3403 P_ATTRIBUTE5 => p_x_unit_accomplish_tbl(i).ATTRIBUTE5,
3404 P_ATTRIBUTE6 => p_x_unit_accomplish_tbl(i).ATTRIBUTE6,
3405 P_ATTRIBUTE7 => p_x_unit_accomplish_tbl(i).ATTRIBUTE7,
3406 P_ATTRIBUTE8 => p_x_unit_accomplish_tbl(i).ATTRIBUTE8,
3407 P_ATTRIBUTE9 => p_x_unit_accomplish_tbl(i).ATTRIBUTE9,
3408 P_ATTRIBUTE10 => p_x_unit_accomplish_tbl(i).ATTRIBUTE10,
3409 P_ATTRIBUTE11 => p_x_unit_accomplish_tbl(i).ATTRIBUTE11,
3410 P_ATTRIBUTE12 => p_x_unit_accomplish_tbl(i).ATTRIBUTE12,
3411 P_ATTRIBUTE13 => p_x_unit_accomplish_tbl(i).ATTRIBUTE13,
3412 P_ATTRIBUTE14 => p_x_unit_accomplish_tbl(i).ATTRIBUTE14,
3413 P_ATTRIBUTE15 => p_x_unit_accomplish_tbl(i).ATTRIBUTE15,
3414 P_OBJECT_VERSION_NUMBER => p_x_unit_accomplish_tbl(i).OBJECT_VERSION_NUMBER,
3415 P_LAST_UPDATE_DATE => TRUNC(sysdate),
3416 P_LAST_UPDATED_BY => fnd_global.user_id,
3417 P_LAST_UPDATE_LOGIN => fnd_global.login_id);
3418 ELSE
3419 FND_MESSAGE.Set_Name('AHL','AHL_UMP_ACCMPLSH_ID_INVALID');
3420 FND_MESSAGE.Set_Token('ACCOMPLISHMENTID', p_x_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID);
3421 FND_MSG_PUB.ADD;
3422 END IF;
3423 CLOSE l_get_unit_accomplish_csr;
3424 ELSIF (p_x_unit_accomplish_tbl(i).OPERATION_FLAG = 'C') THEN
3425 -- insert row
3426 OPEN l_get_dup_counter_csr(p_x_unit_accomplish_tbl(i).UNIT_EFFECTIVITY_ID, p_x_unit_accomplish_tbl(i).COUNTER_ID);
3427 FETCH l_get_dup_counter_csr INTO l_junk;
3428 IF (l_get_dup_counter_csr%FOUND) THEN
3429 FND_MESSAGE.Set_Name('AHL','AHL_UMP_DUPLICATE_COUNTER');
3430 FND_MESSAGE.Set_Token('COUNTERID', p_x_unit_accomplish_tbl(i).COUNTER_ID);
3431 FND_MSG_PUB.ADD;
3432 CLOSE l_get_dup_counter_csr;
3433 RETURN;
3434 END IF;
3435 CLOSE l_get_dup_counter_csr;
3436 p_x_unit_accomplish_tbl(i).OBJECT_VERSION_NUMBER := 1;
3437 -- Handle G_MISS and null values
3438 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
3439 p_x_unit_accomplish_tbl(i).ATTRIBUTE_CATEGORY := null;
3440 END IF;
3441 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
3442 p_x_unit_accomplish_tbl(i).ATTRIBUTE1 := null;
3443 END IF;
3444 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
3445 p_x_unit_accomplish_tbl(i).ATTRIBUTE2 := null;
3446 END IF;
3447 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
3448 p_x_unit_accomplish_tbl(i).ATTRIBUTE3 := null;
3449 END IF;
3450 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
3451 p_x_unit_accomplish_tbl(i).ATTRIBUTE4 := null;
3452 END IF;
3453 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
3454 p_x_unit_accomplish_tbl(i).ATTRIBUTE5 := null;
3455 END IF;
3456 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
3457 p_x_unit_accomplish_tbl(i).ATTRIBUTE6 := null;
3458 END IF;
3459 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
3460 p_x_unit_accomplish_tbl(i).ATTRIBUTE7 := null;
3461 END IF;
3462 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
3463 p_x_unit_accomplish_tbl(i).ATTRIBUTE8 := null;
3464 END IF;
3465 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
3466 p_x_unit_accomplish_tbl(i).ATTRIBUTE9 := null;
3467 END IF;
3468 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
3469 p_x_unit_accomplish_tbl(i).ATTRIBUTE10 := null;
3470 END IF;
3471 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
3472 p_x_unit_accomplish_tbl(i).ATTRIBUTE11 := null;
3473 END IF;
3474 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
3475 p_x_unit_accomplish_tbl(i).ATTRIBUTE12 := null;
3476 END IF;
3477 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
3478 p_x_unit_accomplish_tbl(i).ATTRIBUTE13 := null;
3479 END IF;
3480 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
3481 p_x_unit_accomplish_tbl(i).ATTRIBUTE14 := null;
3482 END IF;
3483 IF p_x_unit_accomplish_tbl(i).ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
3484 p_x_unit_accomplish_tbl(i).ATTRIBUTE15 := null;
3485 END IF;
3486 -- Call table handler to insert
3487 AHL_UNIT_ACCOMPLISH_PKG.insert_row (
3488 P_X_UNIT_ACCOMPLISHMNT_ID => p_x_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID,
3489 P_UNIT_EFFECTIVITY_ID => p_x_unit_accomplish_tbl(i).UNIT_EFFECTIVITY_ID,
3490 P_COUNTER_ID => p_x_unit_accomplish_tbl(i).COUNTER_ID,
3491 P_COUNTER_VALUE => p_x_unit_accomplish_tbl(i).COUNTER_VALUE,
3492 P_ATTRIBUTE_CATEGORY => p_x_unit_accomplish_tbl(i).ATTRIBUTE_CATEGORY,
3493 P_ATTRIBUTE1 => p_x_unit_accomplish_tbl(i).ATTRIBUTE1,
3494 P_ATTRIBUTE2 => p_x_unit_accomplish_tbl(i).ATTRIBUTE2,
3495 P_ATTRIBUTE3 => p_x_unit_accomplish_tbl(i).ATTRIBUTE3,
3496 P_ATTRIBUTE4 => p_x_unit_accomplish_tbl(i).ATTRIBUTE4,
3497 P_ATTRIBUTE5 => p_x_unit_accomplish_tbl(i).ATTRIBUTE5,
3498 P_ATTRIBUTE6 => p_x_unit_accomplish_tbl(i).ATTRIBUTE6,
3499 P_ATTRIBUTE7 => p_x_unit_accomplish_tbl(i).ATTRIBUTE7,
3500 P_ATTRIBUTE8 => p_x_unit_accomplish_tbl(i).ATTRIBUTE8,
3501 P_ATTRIBUTE9 => p_x_unit_accomplish_tbl(i).ATTRIBUTE9,
3502 P_ATTRIBUTE10 => p_x_unit_accomplish_tbl(i).ATTRIBUTE10,
3503 P_ATTRIBUTE11 => p_x_unit_accomplish_tbl(i).ATTRIBUTE11,
3504 P_ATTRIBUTE12 => p_x_unit_accomplish_tbl(i).ATTRIBUTE12,
3505 P_ATTRIBUTE13 => p_x_unit_accomplish_tbl(i).ATTRIBUTE13,
3506 P_ATTRIBUTE14 => p_x_unit_accomplish_tbl(i).ATTRIBUTE14,
3507 P_ATTRIBUTE15 => p_x_unit_accomplish_tbl(i).ATTRIBUTE15,
3508 P_OBJECT_VERSION_NUMBER => p_x_unit_accomplish_tbl(i).OBJECT_VERSION_NUMBER,
3509 P_LAST_UPDATE_DATE => TRUNC(sysdate),
3510 P_LAST_UPDATED_BY => fnd_global.user_id,
3511 P_CREATION_DATE => TRUNC(sysdate),
3512 P_CREATED_BY => fnd_global.user_id,
3513 P_LAST_UPDATE_LOGIN => fnd_global.login_id);
3514
3515 /* Commented out call for locking counter reading for bug# 6388834.
3516 * User can adjust counter readings/record for prior dated counter
3517 * readings after MR signoff.
3518 -- lock counter reading if UMP being accomplished.
3519 IF (p_unit_Effectivity_rec.status_code = 'ACCOMPLISHED' OR
3520 p_unit_Effectivity_rec.status_code = 'TERMINATED') THEN
3521 l_counter_reading_lock_rec.reading_lock_date := p_unit_Effectivity_rec.accomplished_date;
3522 l_counter_reading_lock_rec.counter_id := p_x_unit_accomplish_tbl(i).COUNTER_ID;
3523 l_counter_reading_lock_rec.source_line_ref_id := p_x_unit_accomplish_tbl(i).UNIT_ACCOMPLISH_ID;
3524 l_counter_reading_lock_rec.source_line_ref := 'MAINTENANCE_ACCOMPLISHMENT';
3525
3526 CSI_COUNTER_PUB.Create_Reading_Lock
3527 (
3528 p_api_version => 1.0,
3529 p_commit => FND_API.G_FALSE,
3530 p_init_msg_list => FND_API.G_FALSE,
3531 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
3532 p_ctr_reading_lock_rec => l_counter_reading_lock_rec,
3533 x_return_status => l_return_status,
3534 x_msg_count => l_msg_count,
3535 x_msg_data => l_msg_data,
3536 x_reading_lock_id => l_reading_lock_id
3537 );
3538
3539 -- Raise errors if exception occurs
3540 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3541 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3542 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3543 RAISE FND_API.G_EXC_ERROR;
3544 END IF;
3545
3546 END IF;
3547 */
3548 ELSE
3549 -- unrecognized operation flag
3550 FND_MESSAGE.Set_Name('AHL','AHL_UMP_OPERATION_INVALID');
3551 FND_MESSAGE.Set_Token('OPERATION', p_x_unit_accomplish_tbl(i).OPERATION_FLAG);
3552 FND_MSG_PUB.ADD;
3553 END IF;
3554 END LOOP;
3555 END IF;
3556 END Update_Accomplishments;
3557
3558 ------------------------------------
3559 -- This procedure transfers data to the master
3560 -- table from the sub list
3561 ------------------------------------
3562 PROCEDURE Restore_Thresholds(
3563 p_x_unit_threshold_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type,
3564 p_unit_threshold_tbl IN AHL_UMP_UNITMAINT_PVT.Unit_Threshold_tbl_type) IS
3565 l_index NUMBER;
3566 l_curr_ue_id NUMBER;
3567 BEGIN
3568 IF (p_unit_threshold_tbl.COUNT > 0) THEN
3569 l_index := p_unit_threshold_tbl.FIRST;
3570 l_curr_ue_id := p_unit_threshold_tbl(l_index).UNIT_EFFECTIVITY_ID;
3571 FOR i IN p_x_unit_threshold_tbl.FIRST..p_x_unit_threshold_tbl.LAST LOOP
3572 IF (p_x_unit_threshold_tbl(i).UNIT_EFFECTIVITY_ID = l_curr_ue_id) THEN
3573 p_x_unit_threshold_tbl(i) := p_unit_threshold_tbl(l_index);
3574 l_index := l_index + 1;
3575 END IF;
3576 END LOOP;
3577 END IF;
3578 END Restore_Thresholds;
3579
3580 ------------------------------------
3581 -- This procedure transfers data to the master
3582 -- table from the sub list
3583 ------------------------------------
3584 PROCEDURE Restore_Accomplishments(
3585 p_x_unit_accomplish_tbl IN OUT NOCOPY AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type,
3586 p_unit_accomplish_tbl IN AHL_UMP_UNITMAINT_PVT.Unit_Accomplish_tbl_type) IS
3587 l_index NUMBER;
3588 l_curr_ue_id NUMBER;
3589 BEGIN
3590 IF (p_unit_accomplish_tbl.COUNT > 0) THEN
3591 l_index := p_unit_accomplish_tbl.FIRST;
3592 l_curr_ue_id := p_unit_accomplish_tbl(l_index).UNIT_EFFECTIVITY_ID;
3593 FOR i IN p_x_unit_accomplish_tbl.FIRST..p_x_unit_accomplish_tbl.LAST LOOP
3594 IF (p_x_unit_accomplish_tbl(i).UNIT_EFFECTIVITY_ID = l_curr_ue_id) THEN
3595 p_x_unit_accomplish_tbl(i) := p_unit_accomplish_tbl(l_index);
3596 l_index := l_index + 1;
3597 END IF;
3598 END LOOP;
3599 END IF;
3600 END Restore_Accomplishments;
3601
3602 ------------------------------------
3603 -- This procedure checks if all required counters are available for a given UE.
3604 -- Uses FMP API in the process
3605 ------------------------------------
3606 PROCEDURE Match_Counters_with_FMP(
3607 p_unit_effectivity_id IN NUMBER,
3608 p_item_instance_id IN NUMBER,
3609 p_mr_header_id IN NUMBER,
3610 x_counters OUT NOCOPY VARCHAR2,
3611 x_return_status OUT NOCOPY VARCHAR2) IS
3612
3613 l_temp_counter_name VARCHAR2(30);
3614 l_temp_sql_str VARCHAR2(4000);
3615 l_fmp_eff VARCHAR2(3000);
3616 l_fmp_sql VARCHAR2(3500);
3617 l_inst_sql VARCHAR2(250);
3618 l_acc_sql VARCHAR2(250);
3619 l_counters_csr CounterCurTyp;
3620 l_effectivities_tbl AHL_FMP_PVT.APPLICABLE_MR_TBL_TYPE;
3621 l_return_status VARCHAR2(1);
3622 l_msg_count NUMBER;
3623 l_msg_data VARCHAR2(30);
3624 l_counters_msg VARCHAR2(1000);
3625
3626 CURSOR get_unmatched_counter(p_mr_effectivity_id IN NUMBER,
3627 p_instance_id IN NUMBER,
3628 p_unit_effectivity_id IN NUMBER)
3629 IS
3630 -- Fix for bug# 6956784. Replace CS_COUNTERS with csi_counter_template_vl.
3631 -- select distinct name counter_name from cs_counters co, ahl_mr_intervals mr
3632 select distinct name counter_name from csi_counter_template_vl co, ahl_mr_intervals mr
3633 where co.counter_id = mr.counter_id
3634 and mr.mr_effectivity_id = p_mr_effectivity_id
3635 intersect
3636 /* Fix for bug# 6956784. Replace CS_COUNTERS with CSI_COUNTERS_VL.
3637 * Use COUNTER_TEMPLATE_NAME for counter name
3638 * Uptake R12 Counters Changes.
3639 SELECT c.name
3640 FROM CS_COUNTERS C, CS_COUNTER_GROUPS CTRGRP, CSI_ITEM_INSTANCES CII--, MTL_SYSTEM_ITEMS_KFV MSITEM
3641 WHERE C.COUNTER_GROUP_ID = CTRGRP.COUNTER_GROUP_ID
3642 AND CTRGRP.SOURCE_OBJECT_CODE = 'CP'
3643 AND CTRGRP.SOURCE_OBJECT_ID = CII.INSTANCE_ID
3644 --AND MSITEM.INVENTORY_ITEM_ID = CII.INVENTORY_ITEM_ID
3645 --AND MSITEM.ORGANIZATION_ID = CII.INV_MASTER_ORGANIZATION_ID
3646 AND CII.INSTANCE_ID = p_instance_id
3647 */
3648 SELECT cc.COUNTER_TEMPLATE_NAME counter_name
3649 FROM csi_counters_vl cc,
3650 csi_counter_associations cca --, CSI_ITEM_INSTANCES CII
3651 WHERE cc.counter_id = cca.counter_id
3652 and cca.source_object_code = 'CP'
3653 and cca.source_object_id = p_instance_id
3654 MINUS
3655 --SELECT c.name counter_name
3656 SELECt c.COUNTER_TEMPLATE_NAME counter_name
3657 --FROM CS_COUNTERS C, ahl_unit_accomplishmnts ua
3658 FROM csi_counters_vl C, ahl_unit_accomplishmnts ua
3659 WHERE c.COUNTER_ID = UA.COUNTER_ID
3660 AND UA.unit_effectivity_id = p_unit_effectivity_id;
3661
3662 BEGIN
3663 IF G_DEBUG='Y' THEN
3664 AHL_DEBUG_PUB.debug('Entering Match_Counters_with_FMP', 'UMP');
3665 AHL_DEBUG_PUB.debug('Input CSI:MR:' || p_item_instance_id || ':' || p_mr_header_id, 'UMP');
3666 AHL_DEBUG_PUB.debug('p_unit_effectivity_id:' || p_unit_effectivity_id, 'UMP');
3667 END IF;
3668 -- Initialize API return status to success
3669 x_return_status := FND_API.G_RET_STS_SUCCESS;
3670
3671 -- Call FMP API to get the list of effectivities for this MR_ID and item_instance_id
3672 AHL_FMP_PVT.GET_APPLICABLE_MRS(
3673 p_api_version => 1.0,
3674 p_init_msg_list => FND_API.G_FALSE,
3675 p_commit => FND_API.G_FALSE,
3676 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
3677 x_return_status => l_return_status,
3678 x_msg_count => l_msg_count,
3679 x_msg_data => l_msg_data,
3680 p_item_instance_id => p_item_instance_id,
3681 p_mr_header_id => p_mr_header_id,
3682 p_components_flag => 'N',
3683 x_applicable_mr_tbl => l_effectivities_tbl
3684 );
3685
3686 -- Raise errors if exceptions occur
3687 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3688 RAISE FND_API.G_EXC_ERROR;
3689 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3690 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3691 END IF;
3692
3693 -- fix for bug number 6761311
3694
3695 /*IF (l_effectivities_tbl.COUNT = 0) THEN
3696 RETURN;
3697 ELSE
3698 l_fmp_eff := '(';
3699 FOR i IN l_effectivities_tbl.FIRST..l_effectivities_tbl.LAST LOOP
3700 l_fmp_eff := l_fmp_eff || l_effectivities_tbl(i).MR_EFFECTIVITY_ID || ',';
3701 END LOOP;
3702 l_fmp_eff := rtrim(l_fmp_eff, ',') || ')';
3703 IF G_DEBUG='Y' THEN
3704 AHL_DEBUG_PUB.debug('Match_Counters_with_FMP: Effectivities list from FMP: ' || l_fmp_eff, 'UMP');
3705 END IF;
3706 END IF;
3707
3708 -- Counters for the given MR
3709 -- Modified from cs_counters_v to csi_counter_template_vl for R12 bug# 6080133.
3710 --l_fmp_sql := ' select distinct name counter_name from cs_counters_v co, ahl_mr_intervals mr';
3711 l_fmp_sql := ' select distinct name counter_name from csi_counter_template_vl co, ahl_mr_intervals mr';
3712 l_fmp_sql := l_fmp_sql || ' where co.counter_id = mr.counter_id and';
3713 l_fmp_sql := l_fmp_sql || ' mr.mr_effectivity_id in ' || l_fmp_eff;
3714
3715 -- Counters for the given item instance
3716 --l_inst_sql := ' select distinct counter_name from csi_cp_counters_v';
3717 l_inst_sql := ' select distinct counter_template_name counter_name from csi_counters_vl cc, csi_counter_associations cca ';
3718 l_inst_sql := l_inst_sql || ' where cc.counter_id = cca.counter_id and cca.source_object_code = ''CP'' and cca.source_object_id = :1';
3719
3720 -- Counters for the Accomplishment
3721 --l_acc_sql := ' select distinct counter_name from csi_cp_counters_v co, ahl_unit_accomplishmnts ua';
3722 l_acc_sql := ' select distinct counter_template_name counter_name from csi_counters_vl cc, ahl_unit_accomplishmnts ua';
3723 l_acc_sql := l_acc_sql || ' where ua.unit_effectivity_id = :2';
3724 l_acc_sql := l_acc_sql || ' and ua.counter_id = cc.counter_id';
3725 l_acc_sql := l_acc_sql || ' order by counter_name ';
3726
3727 l_temp_sql_str := l_fmp_sql || ' INTERSECT ' || l_inst_sql || ' MINUS ' || l_acc_sql;
3728 IF G_DEBUG='Y' THEN
3729 AHL_DEBUG_PUB.debug('Match_Counters_with_FMP: Final SQL: ' || l_temp_sql_str, 'UMP');
3730
3731 END IF;
3732 OPEN l_counters_csr for l_temp_sql_str USING p_item_instance_id, p_unit_effectivity_id;
3733 l_counters_msg := '';
3734 LOOP
3735 FETCH l_counters_csr INTO l_temp_counter_name;
3736 EXIT WHEN l_counters_csr%NOTFOUND;
3737 l_counters_msg := l_counters_msg || l_temp_counter_name || ', ';
3738 x_return_status := FND_API.G_RET_STS_ERROR;
3739 END LOOP;
3740 CLOSE l_counters_csr;
3741 l_counters_msg := rtrim(l_counters_msg);
3742 l_counters_msg := rtrim(l_counters_msg, ',');
3743 x_counters := l_counters_msg;*/
3744
3745 IF G_DEBUG='Y' THEN
3746 AHL_DEBUG_PUB.debug('Count of l_effectivities_tbl:' || l_effectivities_tbl.count , 'UMP');
3747 END IF;
3748
3749 IF (l_effectivities_tbl.COUNT = 0) THEN
3750 RETURN;
3751 ELSE
3752 l_counters_msg := '';
3753 FOR i IN l_effectivities_tbl.FIRST..l_effectivities_tbl.LAST LOOP
3754 FOR counter_name_rec IN get_unmatched_counter(l_effectivities_tbl(i).MR_EFFECTIVITY_ID
3755 ,p_item_instance_id,p_unit_effectivity_id) LOOP
3756 l_counters_msg := l_counters_msg || counter_name_rec.counter_name || ', ';
3757 x_return_status := FND_API.G_RET_STS_ERROR;
3758 END LOOP;
3759 END LOOP;
3760 END IF;
3761 l_counters_msg := rtrim(l_counters_msg);
3762 l_counters_msg := rtrim(l_counters_msg, ',');
3763 x_counters := l_counters_msg;
3764
3765 IF G_DEBUG='Y' THEN
3766 AHL_DEBUG_PUB.debug('x_counters:' || x_counters, 'UMP');
3767 AHL_DEBUG_PUB.debug('Exiting Match_Counters_with_FMP', 'UMP');
3768
3769 END IF;
3770 END Match_Counters_with_FMP;
3771
3772 ------------------------------------
3773
3774
3775
3776 ------------------------
3777 -- Define Procedures --
3778 ------------------------
3779 PROCEDURE Terminate_MR_Instances (
3780 p_api_version IN NUMBER := 1.0,
3781 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
3782 p_commit IN VARCHAR2 := FND_API.G_FALSE,
3783 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
3784 p_default IN VARCHAR2 := FND_API.G_TRUE,
3785 p_module_type IN VARCHAR2 := NULL,
3786 p_old_mr_header_id IN NUMBER,
3787 p_old_mr_title IN VARCHAR2,
3788 p_old_version_number IN NUMBER,
3789 p_new_mr_header_id IN NUMBER := NULL,
3790 p_new_mr_title IN VARCHAR2 := NULL,
3791 p_new_version_number IN NUMBER := NULL,
3792 x_return_status OUT NOCOPY VARCHAR2,
3793 x_msg_count OUT NOCOPY NUMBER,
3794 x_msg_data OUT NOCOPY VARCHAR2 ) IS
3795
3796
3797 l_api_version CONSTANT NUMBER := 1.0;
3798 l_api_name CONSTANT VARCHAR2(30) := 'Terminate_MR_Instances';
3799 l_new_mr_header_id NUMBER;
3800 l_old_mr_header_id NUMBER;
3801 l_effective_to_date DATE;
3802 l_effective_from_date DATE;
3803 l_visit_status VARCHAR2(30);
3804
3805 l_return_status VARCHAR2(1);
3806 l_msg_count NUMBER;
3807 l_msg_data VARCHAR2(30);
3808 --l_old_mr_item_instance_tbl AHL_FMP_PVT.MR_ITEM_INSTANCE_TBL_TYPE;
3809 l_new_mr_item_instance_tbl AHL_FMP_PVT.MR_ITEM_INSTANCE_TBL_TYPE;
3810
3811
3812
3813
3814 CURSOR l_get_mr_header_id(p_mr_title IN VARCHAR2, p_version_number IN NUMBER) IS
3815 SELECT MR_HEADER_ID FROM AHL_MR_HEADERS_B
3816 WHERE TITLE = p_mr_title AND VERSION_NUMBER = p_version_number;
3817
3818 CURSOR l_get_effective_to_date(p_mr_header_id IN NUMBER) IS
3819 SELECT EFFECTIVE_TO, application_usg_code FROM AHL_MR_HEADERS_VL WHERE MR_HEADER_ID = p_mr_header_id;
3820
3821 CURSOR l_get_effective_from_date(p_mr_header_id IN NUMBER) IS
3822 SELECT EFFECTIVE_FROM FROM AHL_MR_HEADERS_VL WHERE MR_HEADER_ID = p_mr_header_id;
3823
3824 CURSOR l_unit_effectivity_csr(p_header_id IN NUMBER) IS SELECT
3825 EFF.UNIT_EFFECTIVITY_ID,
3826 EFF.CSI_ITEM_INSTANCE_ID,
3827 EFF.MR_INTERVAL_ID ,
3828 EFF.MR_EFFECTIVITY_ID ,
3829 EFF.MR_HEADER_ID ,
3830 EFF.STATUS_CODE ,
3831 EFF.DUE_DATE ,
3832 EFF.DUE_COUNTER_VALUE ,
3833 EFF.FORECAST_SEQUENCE ,
3834 EFF.REPETITIVE_MR_FLAG,
3835 EFF.TOLERANCE_FLAG ,
3836 EFF.REMARKS ,
3837 EFF.MESSAGE_CODE ,
3838 EFF.PRECEDING_UE_ID ,
3839 EFF.DATE_RUN,
3840 EFF.SET_DUE_DATE,
3841 EFF.ACCOMPLISHED_DATE,
3842 EFF.SERVICE_LINE_ID,
3843 EFF.PROGRAM_MR_HEADER_ID,
3844 EFF.CANCEL_REASON_CODE,
3845 EFF.EARLIEST_DUE_DATE,
3846 EFF.LATEST_DUE_DATE,
3847 EFF.DEFER_FROM_UE_ID,
3848 EFF.CS_INCIDENT_ID,
3849 EFF.QA_COLLECTION_ID,
3850 EFF.ORIG_DEFERRAL_UE_ID,
3851 EFF.APPLICATION_USG_CODE,
3852 EFF.OBJECT_TYPE,
3853 EFF.COUNTER_ID,
3854 EFF.MANUALLY_PLANNED_FLAG,
3855 EFF.LOG_SERIES_CODE,
3856 EFF.LOG_SERIES_NUMBER,
3857 EFF.FLIGHT_NUMBER,
3858 EFF.MEL_CDL_TYPE_CODE,
3859 EFF.POSITION_PATH_ID,
3860 EFF.ATA_CODE,
3861 EFF.UNIT_CONFIG_HEADER_ID,
3862 EFF.ATTRIBUTE_CATEGORY,
3863 EFF.ATTRIBUTE1,
3864 EFF.ATTRIBUTE2,
3865 EFF.ATTRIBUTE3,
3866 EFF.ATTRIBUTE4,
3867 EFF.ATTRIBUTE5,
3868 EFF.ATTRIBUTE6,
3869 EFF.ATTRIBUTE7,
3870 EFF.ATTRIBUTE8,
3871 EFF.ATTRIBUTE9,
3872 EFF.ATTRIBUTE10,
3873 EFF.ATTRIBUTE11,
3874 EFF.ATTRIBUTE12,
3875 EFF.ATTRIBUTE13,
3876 EFF.ATTRIBUTE14,
3877 EFF.ATTRIBUTE15,
3878 EFF.OBJECT_VERSION_NUMBER,
3879 EFF.LAST_UPDATE_DATE,
3880 EFF.LAST_UPDATED_BY ,
3881 EFF.LAST_UPDATE_LOGIN
3882 FROM AHL_UNIT_EFFECTIVITIES_APP_V EFF
3883 WHERE EFF.MR_HEADER_ID = p_header_id
3884 AND object_type = 'MR'
3885 -- AND (EFF.status_code is null or EFF.status_code in ('INIT-DUE','DEFERRED'))
3886 AND (EFF.status_code is null or EFF.status_code = 'INIT-DUE')
3887 AND not exists (select 'x' from ahl_ue_relationships where
3888 related_ue_id = EFF.unit_effectivity_id)
3889 FOR UPDATE;
3890
3891 l_ue_rec l_unit_effectivity_csr%ROWTYPE;
3892
3893 CURSOR l_ue_descendent_csr(p_effectivity_id IN NUMBER) IS SELECT
3894 EFF.UNIT_EFFECTIVITY_ID,
3895 EFF.CSI_ITEM_INSTANCE_ID,
3896 EFF.MR_INTERVAL_ID ,
3897 EFF.MR_EFFECTIVITY_ID ,
3898 EFF.MR_HEADER_ID ,
3899 EFF.STATUS_CODE ,
3900 EFF.DUE_DATE ,
3901 EFF.DUE_COUNTER_VALUE ,
3902 EFF.FORECAST_SEQUENCE ,
3903 EFF.REPETITIVE_MR_FLAG,
3904 EFF.TOLERANCE_FLAG ,
3905 EFF.REMARKS ,
3906 EFF.MESSAGE_CODE ,
3907 EFF.PRECEDING_UE_ID ,
3908 EFF.DATE_RUN,
3909 EFF.SET_DUE_DATE,
3910 EFF.ACCOMPLISHED_DATE,
3911 EFF.SERVICE_LINE_ID,
3912 EFF.PROGRAM_MR_HEADER_ID,
3913 EFF.CANCEL_REASON_CODE,
3914 EFF.EARLIEST_DUE_DATE,
3915 EFF.LATEST_DUE_DATE,
3916 EFF.DEFER_FROM_UE_ID,
3917 EFF.CS_INCIDENT_ID,
3918 EFF.QA_COLLECTION_ID,
3919 EFF.ORIG_DEFERRAL_UE_ID,
3920 EFF.APPLICATION_USG_CODE,
3921 EFF.OBJECT_TYPE,
3922 EFF.COUNTER_ID,
3923 EFF.MANUALLY_PLANNED_FLAG,
3924 EFF.LOG_SERIES_CODE,
3925 EFF.LOG_SERIES_NUMBER,
3926 EFF.FLIGHT_NUMBER,
3927 EFF.MEL_CDL_TYPE_CODE,
3928 EFF.POSITION_PATH_ID,
3929 EFF.ATA_CODE,
3930 EFF.UNIT_CONFIG_HEADER_ID,
3931 EFF.ATTRIBUTE_CATEGORY,
3932 EFF.ATTRIBUTE1,
3933 EFF.ATTRIBUTE2,
3934 EFF.ATTRIBUTE3,
3935 EFF.ATTRIBUTE4,
3936 EFF.ATTRIBUTE5,
3937 EFF.ATTRIBUTE6,
3938 EFF.ATTRIBUTE7,
3939 EFF.ATTRIBUTE8,
3940 EFF.ATTRIBUTE9,
3941 EFF.ATTRIBUTE10,
3942 EFF.ATTRIBUTE11,
3943 EFF.ATTRIBUTE12,
3944 EFF.ATTRIBUTE13,
3945 EFF.ATTRIBUTE14,
3946 EFF.ATTRIBUTE15,
3947 EFF.OBJECT_VERSION_NUMBER,
3948 EFF.LAST_UPDATE_DATE,
3949 EFF.LAST_UPDATED_BY,
3950 EFF.LAST_UPDATE_LOGIN
3951 FROM AHL_UNIT_EFFECTIVITIES_APP_V EFF
3952 WHERE EFF.UNIT_EFFECTIVITY_ID IN
3953 (SELECT REL.RELATED_UE_ID FROM AHL_UE_RELATIONSHIPS REL
3954 WHERE REL.ORIGINATOR_UE_ID = p_effectivity_id)
3955 FOR UPDATE;
3956 -- AND REL.UE_ID = EFF.UNIT_EFFECTIVITY_ID;
3957
3958
3959 -- For processsing object type = 'SR'
3960 /*CURSOR ahl_sr_ue_csr(p_mr_header_id IN NUMBER) IS
3961 SELECT UE1.unit_effectivity_id
3962 FROM ahl_unit_effectivities_app_v UE,
3963 ahl_ue_relationships UER, ahl_unit_effectivities_b UE1
3964 WHERE UER.ue_id = UE.unit_effectivity_id
3965 AND UER.related_ue_id = UE1.unit_effectivity_id
3966 AND UE.object_type = 'SR'
3967 AND (UE.status_code is null or UE.status_code = 'INIT-DUE')
3968 AND UE1.mr_header_id = p_mr_header_id;*/-- commented for performance tuning
3969 /*-Start-----Above cursor go devided into two----------*/
3970
3971 CURSOR ahl_sr_ue_valid_csr(p_mr_header_id IN NUMBER,
3972 p_unit_effectivity_id IN NUMBER) IS
3973 SELECT 'x'
3974 FROM ahl_unit_effectivities_app_v UE1
3975 WHERE UE1.unit_effectivity_id = p_unit_effectivity_id
3976 AND UE1.mr_header_id = p_mr_header_id;
3977
3978 CURSOR ahl_sr_ue_csr IS
3979 SELECT UER.related_ue_id
3980 FROM ahl_unit_effectivities_app_v UE, ahl_ue_relationships UER
3981 WHERE UER.ue_id = UE.unit_effectivity_id
3982 AND UER.relationship_code = 'PARENT'
3983 AND UE.object_type = 'SR'
3984 AND (UE.status_code is null or UE.status_code = 'INIT-DUE');
3985
3986 /*-End-----split---------------------------------------*/
3987
3988
3989 CURSOR get_descendents_csr(p_ue_id IN NUMBER) IS
3990 SELECT related_ue_id
3991 FROM ahl_ue_relationships
3992 START WITH ue_id = p_ue_id
3993 AND relationship_code = 'PARENT'
3994 CONNECT BY ue_id = PRIOR related_ue_id
3995 AND relationship_code = 'PARENT';
3996
3997 l_ue_descendent_rec l_ue_descendent_csr%ROWTYPE;
3998 l_application_usg_code ahl_mr_headers_b.application_usg_code%TYPE;
3999 l_junk varchar2(1);
4000 --l_req_id number;
4001
4002 CURSOR get_mr_copy_dtls_csr(p_mr_header_id IN NUMBER) IS
4003 SELECT COPY_INIT_ACCOMPL_FLAG, COPY_DEFERRALS_FLAG FROM AHL_MR_HEADERS_APP_V
4004 WHERE MR_HEADER_ID = p_mr_header_id;
4005
4006 l_COPY_FIRST_DUE_FLAG VARCHAR2(1);
4007 l_COPY_DEFERRALS_FLAG VARCHAR2(1);
4008
4009 CURSOR l_cp_ue_csr(p_header_id IN NUMBER,p_csi_item_instance_id IN NUMBER) IS SELECT
4010 EFF.UNIT_EFFECTIVITY_ID,
4011 EFF.CSI_ITEM_INSTANCE_ID,
4012 EFF.MR_INTERVAL_ID ,
4013 EFF.MR_EFFECTIVITY_ID ,
4014 EFF.MR_HEADER_ID ,
4015 EFF.STATUS_CODE ,
4016 EFF.DUE_DATE ,
4017 EFF.DUE_COUNTER_VALUE ,
4018 EFF.FORECAST_SEQUENCE ,
4019 EFF.REPETITIVE_MR_FLAG,
4020 EFF.TOLERANCE_FLAG ,
4021 EFF.REMARKS ,
4022 EFF.MESSAGE_CODE ,
4023 EFF.PRECEDING_UE_ID ,
4024 EFF.DATE_RUN,
4025 EFF.SET_DUE_DATE,
4026 EFF.ACCOMPLISHED_DATE,
4027 EFF.SERVICE_LINE_ID,
4028 EFF.PROGRAM_MR_HEADER_ID,
4029 EFF.CANCEL_REASON_CODE,
4030 EFF.EARLIEST_DUE_DATE,
4031 EFF.LATEST_DUE_DATE,
4032 EFF.DEFER_FROM_UE_ID,
4033 EFF.CS_INCIDENT_ID,
4034 EFF.QA_COLLECTION_ID,
4035 EFF.ORIG_DEFERRAL_UE_ID,
4036 EFF.APPLICATION_USG_CODE,
4037 EFF.OBJECT_TYPE,
4038 EFF.COUNTER_ID,
4039 EFF.MANUALLY_PLANNED_FLAG,
4040 EFF.LOG_SERIES_CODE,
4041 EFF.LOG_SERIES_NUMBER,
4042 EFF.FLIGHT_NUMBER,
4043 EFF.MEL_CDL_TYPE_CODE,
4044 EFF.POSITION_PATH_ID,
4045 EFF.ATA_CODE,
4046 EFF.UNIT_CONFIG_HEADER_ID,
4047 EFF.ATTRIBUTE_CATEGORY,
4048 EFF.ATTRIBUTE1,
4049 EFF.ATTRIBUTE2,
4050 EFF.ATTRIBUTE3,
4051 EFF.ATTRIBUTE4,
4052 EFF.ATTRIBUTE5,
4053 EFF.ATTRIBUTE6,
4054 EFF.ATTRIBUTE7,
4055 EFF.ATTRIBUTE8,
4056 EFF.ATTRIBUTE9,
4057 EFF.ATTRIBUTE10,
4058 EFF.ATTRIBUTE11,
4059 EFF.ATTRIBUTE12,
4060 EFF.ATTRIBUTE13,
4061 EFF.ATTRIBUTE14,
4062 EFF.ATTRIBUTE15,
4063 EFF.OBJECT_VERSION_NUMBER,
4064 EFF.LAST_UPDATE_DATE,
4065 EFF.LAST_UPDATED_BY ,
4066 EFF.LAST_UPDATE_LOGIN
4067 FROM AHL_UNIT_EFFECTIVITIES_APP_V EFF
4068 WHERE EFF.MR_HEADER_ID = p_header_id
4069 AND EFF.CSI_ITEM_INSTANCE_ID = p_csi_item_instance_id
4070 AND object_type = 'MR'
4071 -- AND (EFF.status_code is null or EFF.status_code in ('INIT-DUE','DEFERRED'))
4072 AND (EFF.status_code = 'MR-TERMINATE')
4073 AND not exists (select 'x' from ahl_ue_relationships where
4074 related_ue_id = EFF.unit_effectivity_id);
4075
4076 l_copy_record BOOLEAN;
4077 l_copy_ud_record BOOLEAN;
4078
4079 CURSOR unit_deferral_id_csr(p_unit_effectivity_id IN NUMBER) IS
4080 SELECT unit_deferral_id from ahl_unit_deferrals_b
4081 where UNIT_EFFECTIVITY_ID = p_unit_effectivity_id
4082 AND UNIT_DEFERRAL_TYPE = 'INIT-DUE';
4083
4084 l_unit_deferral_id NUMBER;
4085 l_unit_effectivity_id NUMBER;
4086 l_rowid VARCHAR2(30);
4087
4088
4089
4090
4091 BEGIN
4092
4093 -- Standard start of API savepoint
4094 SAVEPOINT Terminate_MR_Instances_pvt;
4095
4096 -- Enable Debug (optional)
4097 IF G_DEBUG='Y' THEN
4098 AHL_DEBUG_PUB.enable_debug;
4099 END IF;
4100
4101 IF G_DEBUG='Y' THEN
4102 AHL_DEBUG_PUB.debug('Beginning Processing... ', 'UMP-TERMINATE: ');
4103 END IF;
4104 -- Standard call to check for call compatibility
4105 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
4106 G_PKG_NAME) THEN
4107 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4108 END IF;
4109
4110 IF G_DEBUG='Y' THEN
4111 AHL_DEBUG_PUB.debug('After call compatible api ', 'UMP-TERMINATE:');
4112 AHL_DEBUG_PUB.debug('Input Parameters:');
4113 AHL_DEBUG_PUB.debug('p_new_mr_header_id: ' || p_new_mr_header_id);
4114 AHL_DEBUG_PUB.debug('p_old_mr_header_id: ' || p_old_mr_header_id);
4115 AHL_DEBUG_PUB.debug('p_old_mr_title: ' || p_old_mr_title);
4116 AHL_DEBUG_PUB.debug('p_old_version_number: ' || p_old_version_number);
4117 AHL_DEBUG_PUB.debug('p_new_mr_header_id: ' || p_new_mr_header_id);
4118 AHL_DEBUG_PUB.debug('p_new_mr_title: ' || p_new_mr_title);
4119 AHL_DEBUG_PUB.debug('p_new_version_number: ' || p_new_version_number);
4120 END IF;
4121
4122 -- Initialize message list if p_init_msg_list is set to TRUE
4123 IF FND_API.To_Boolean(p_init_msg_list) THEN
4124 FND_MSG_PUB.Initialize;
4125 END IF;
4126
4127 -- Initialize API return status to success
4128 x_return_status := FND_API.G_RET_STS_SUCCESS;
4129
4130 -- Begin Processing
4131
4132 l_new_mr_header_id := p_new_mr_header_id;
4133 l_old_mr_header_id := p_old_mr_header_id;
4134
4135 --resolve new mr_header_id
4136
4137 IF(p_new_mr_header_id IS NULL OR p_new_mr_header_id = FND_API.G_MISS_NUM) THEN
4138 IF((p_new_mr_title IS NOT NULL AND p_new_mr_title <> FND_API.G_MISS_CHAR) AND
4139 (p_new_version_number IS NOT NULL AND p_new_version_number <> FND_API.G_MISS_NUM)) THEN
4140
4141 OPEN l_get_mr_header_id(p_new_mr_title, p_new_version_number);
4142 FETCH l_get_mr_header_id INTO l_new_mr_header_id;
4143 -- IF (l_get_mr_header_id%NOTFOUND) THEN
4144 CLOSE l_get_mr_header_id;
4145 END IF;
4146 END IF;
4147
4148
4149 --resolve old mr_header_id
4150
4151 IF(p_old_mr_header_id IS NULL OR p_old_mr_header_id = FND_API.G_MISS_NUM) THEN
4152 IF((p_old_mr_title IS NOT NULL AND p_old_mr_title <> FND_API.G_MISS_CHAR) AND
4153 (p_old_version_number IS NOT NULL AND p_old_version_number <> FND_API.G_MISS_NUM)) THEN
4154 OPEN l_get_mr_header_id(p_old_mr_title, p_old_version_number);
4155 FETCH l_get_mr_header_id INTO l_old_mr_header_id;
4156 CLOSE l_get_mr_header_id;
4157 END IF;
4158 END IF;
4159
4160 IF (l_old_mr_header_id IS NULL) THEN
4161 x_return_status := FND_API.G_RET_STS_ERROR;
4162 FND_MESSAGE.Set_Name('AHL','AHL_UMP_TERMNT_MR_DET_MAND');
4163 FND_MSG_PUB.ADD;
4164 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4165 -- RETURN;
4166 END IF;
4167
4168 /*
4169 IF (l_new_mr_header_id IS NULL) THEN
4170 x_return_status := FND_API.G_RET_STS_ERROR;
4171 FND_MESSAGE.Set_Name('AHL','AHL_UMP_CUR_MR_DET_MAND');
4172 FND_MSG_PUB.ADD;
4173 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4174 -- RETURN;
4175 END IF;
4176 */
4177
4178 OPEN l_get_effective_to_date(l_old_mr_header_id);
4179 FETCH l_get_effective_to_date INTO l_effective_to_date, l_application_usg_code; --, l_effective_from_date;
4180 IF (l_get_effective_to_date%FOUND) THEN
4181 --check if effective to date has passed
4182 /* IF( TRUNC(l_effective_to_date) > TRUNC(SYSDATE)) THEN
4183 x_return_status := FND_API.G_RET_STS_ERROR;
4184 FND_MESSAGE.Set_Name('AHL','AHL_UMP_EFF_TO_DATE');
4185 FND_MESSAGE.Set_Token('EFF_TO', l_effective_to_date);
4186 FND_MSG_PUB.ADD;
4187 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4188 END IF; */
4189
4190 -- Set the profile for due date calculation as the work flow user may not have this
4191 -- profile set.
4192 FND_PROFILE.PUT('AHL_APPLN_USG', l_application_usg_code);
4193
4194 END IF;
4195 CLOSE l_get_effective_to_date;
4196
4197 IF G_DEBUG='Y' THEN
4198 AHL_DEBUG_PUB.debug('l_effective_to_date = ' || l_effective_to_date);
4199 END IF;
4200
4201
4202 IF (l_new_mr_header_id IS NOT NULL) THEN
4203 OPEN l_get_effective_from_date(l_new_mr_header_id);
4204 FETCH l_get_effective_from_date INTO l_effective_from_date;
4205 IF (l_get_effective_from_date%NOTFOUND) THEN
4206 x_return_status := FND_API.G_RET_STS_ERROR;
4207 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_MR_NOTFOUND');
4208 FND_MESSAGE.Set_Token('MR_ID',l_new_mr_header_id);
4209 FND_MSG_PUB.ADD;
4210 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4211 END IF;
4212 CLOSE l_get_effective_from_date;
4213 END IF;
4214
4215 IF G_DEBUG='Y' THEN
4216 AHL_DEBUG_PUB.debug('l_effective_from_date = ' || l_effective_from_date);
4217 END IF;
4218
4219 OPEN l_unit_effectivity_csr(l_old_mr_header_id);
4220 LOOP
4221 FETCH l_unit_effectivity_csr INTO l_ue_rec; --l_ue_id, l_repetitive_flag, l_status_code;
4222
4223 IF G_DEBUG='Y' THEN
4224 AHL_DEBUG_PUB.debug('l_ue_rec.unit_effectivity_id = ' || l_ue_rec.UNIT_EFFECTIVITY_ID);
4225 AHL_DEBUG_PUB.debug('l_ue_rec.mr_header_id = ' || l_ue_rec.mr_header_id);
4226 AHL_DEBUG_PUB.debug('l_ue_rec.object_version_number = ' || l_ue_rec.object_version_number);
4227 END IF;
4228 EXIT WHEN l_unit_effectivity_csr%NOTFOUND;
4229
4230
4231 l_visit_status := AHL_UMP_UTIL_PKG.get_Visit_Status ( l_ue_rec.UNIT_EFFECTIVITY_ID);
4232
4233 -- only if visit is in planning status we must mark an exception or delete.
4234 -- if visit is already on the floor, we do nothing.
4235 IF (nvl(l_visit_status,'X') NOT IN ('RELEASED','CLOSED')) THEN
4236 IF (l_ue_rec.REPETITIVE_MR_FLAG = 'N'
4237 OR l_ue_rec.STATUS_CODE = 'INIT-DUE' OR l_ue_rec.defer_from_ue_id IS NOT NULL) THEN
4238
4239 IF G_DEBUG='Y' THEN
4240 AHL_DEBUG_PUB.debug('IN if repetitive_mr_flag = N');
4241 END IF;
4242 l_ue_rec.STATUS_CODE := 'MR-TERMINATE';
4243 l_ue_rec.MESSAGE_CODE := 'TERMINATE-W-NEW-REV';
4244 l_ue_rec.ACCOMPLISHED_DATE := SYSDATE;
4245
4246 IF G_DEBUG='Y' THEN
4247 AHL_DEBUG_PUB.debug('before update record status to MR-TERMINATE');
4248 END IF;
4249 AHL_UNIT_EFFECTIVITIES_PKG.UPDATE_ROW (
4250 x_unit_effectivity_id => l_ue_rec.UNIT_EFFECTIVITY_ID,
4251 x_csi_item_instance_id => l_ue_rec.CSI_ITEM_INSTANCE_ID,
4252 x_mr_interval_id => l_ue_rec.MR_INTERVAL_ID ,
4253 x_MR_EFFECTIVITY_ID => l_ue_rec.MR_EFFECTIVITY_ID ,
4254 x_MR_HEADER_ID => l_ue_rec.MR_HEADER_ID ,
4255 x_STATUS_CODE => l_ue_rec.STATUS_CODE ,
4256 x_DUE_DATE => l_ue_rec.DUE_DATE ,
4257 x_DUE_COUNTER_VALUE => l_ue_rec.DUE_COUNTER_VALUE ,
4258 x_FORECAST_SEQUENCE => l_ue_rec.FORECAST_SEQUENCE ,
4259 x_REPETITIVE_MR_FLAG => l_ue_rec.REPETITIVE_MR_FLAG,
4260 x_TOLERANCE_FLAG => l_ue_rec.TOLERANCE_FLAG ,
4261 x_REMARKS => l_ue_rec.REMARKS ,
4262 x_MESSAGE_CODE => l_ue_rec.MESSAGE_CODE ,
4263 x_PRECEDING_UE_ID => l_ue_rec.PRECEDING_UE_ID ,
4264 x_DATE_RUN => l_ue_rec.DATE_RUN,
4265 x_SET_DUE_DATE => l_ue_rec.SET_DUE_DATE,
4266 x_ACCOMPLISHED_DATE => l_ue_rec.ACCOMPLISHED_DATE,
4267 x_SERVICE_LINE_ID => l_ue_rec.SERVICE_LINE_ID,
4268 x_PROGRAM_MR_HEADER_ID => l_ue_rec.PROGRAM_MR_HEADER_ID,
4269 x_CANCEL_REASON_CODE => l_ue_rec.CANCEL_REASON_CODE,
4270 x_EARLIEST_DUE_DATE => l_ue_rec.EARLIEST_DUE_DATE,
4271 x_LATEST_DUE_DATE => l_ue_rec.LATEST_DUE_DATE,
4272 x_defer_from_ue_id => l_ue_rec.defer_from_ue_id,
4273 x_qa_collection_id => l_ue_rec.qa_collection_id,
4274 x_orig_deferral_ue_id => l_ue_rec.orig_deferral_ue_id,
4275 x_cs_incident_id => l_ue_rec.cs_incident_id,
4276 x_application_usg_code => l_ue_rec.application_usg_code,
4277 x_object_type => l_ue_rec.object_type,
4278 x_counter_id => l_ue_rec.counter_id,
4279 x_manually_planned_flag => l_ue_rec.manually_planned_flag,
4280 X_LOG_SERIES_CODE => l_ue_rec.log_series_code,
4281 X_LOG_SERIES_NUMBER => l_ue_rec.log_series_number,
4282 X_FLIGHT_NUMBER => l_ue_rec.flight_number,
4283 X_MEL_CDL_TYPE_CODE => l_ue_rec.mel_cdl_type_code,
4284 X_POSITION_PATH_ID => l_ue_rec.position_path_id,
4285 X_ATA_CODE => l_ue_rec.ATA_CODE,
4286 X_UNIT_CONFIG_HEADER_ID => l_ue_rec.unit_config_header_id,
4287 x_ATTRIBUTE_CATEGORY => l_ue_rec.ATTRIBUTE_CATEGORY,
4288 x_ATTRIBUTE1 => l_ue_rec.ATTRIBUTE1,
4289 x_ATTRIBUTE2 => l_ue_rec.ATTRIBUTE2,
4290 x_ATTRIBUTE3 => l_ue_rec.ATTRIBUTE3,
4291 x_ATTRIBUTE4 => l_ue_rec.ATTRIBUTE4,
4292 x_ATTRIBUTE5 => l_ue_rec.ATTRIBUTE5,
4293 x_ATTRIBUTE6 => l_ue_rec.ATTRIBUTE6,
4294 x_ATTRIBUTE7 => l_ue_rec.ATTRIBUTE7,
4295 x_ATTRIBUTE8 => l_ue_rec.ATTRIBUTE8,
4296 x_ATTRIBUTE9 => l_ue_rec.ATTRIBUTE9,
4297 x_ATTRIBUTE10 => l_ue_rec.ATTRIBUTE10,
4298 x_ATTRIBUTE11 => l_ue_rec.ATTRIBUTE11,
4299 x_ATTRIBUTE12 => l_ue_rec.ATTRIBUTE12,
4300 x_ATTRIBUTE13 => l_ue_rec.ATTRIBUTE13,
4301 x_ATTRIBUTE14 => l_ue_rec.ATTRIBUTE14,
4302 x_ATTRIBUTE15 => l_ue_rec.ATTRIBUTE15,
4303 x_OBJECT_VERSION_NUMBER => l_ue_rec.OBJECT_VERSION_NUMBER + 1,
4304 x_LAST_UPDATE_DATE => sysdate,
4305 X_LAST_UPDATED_BY => fnd_global.user_id,
4306 X_LAST_UPDATE_LOGIN => fnd_global.login_id);
4307
4308 IF G_DEBUG='Y' THEN
4309 AHL_DEBUG_PUB.debug('After update record');
4310 END IF;
4311
4312 --update all descendent Unit Effectivities
4313 OPEN l_ue_descendent_csr(l_ue_rec.UNIT_EFFECTIVITY_ID);
4314 LOOP
4315 FETCH l_ue_descendent_csr INTO l_ue_descendent_rec;
4316 EXIT WHEN l_ue_descendent_csr%NOTFOUND;
4317
4318 IF G_DEBUG='Y' THEN
4319 AHL_DEBUG_PUB.debug('descedant ue_id' || l_ue_descendent_rec.UNIT_EFFECTIVITY_ID);
4320 END IF;
4321 l_ue_descendent_rec.STATUS_CODE := 'MR-TERMINATE';
4322 l_ue_descendent_rec.MESSAGE_CODE := 'TERMINATE-W-NEW-REV';
4323 l_ue_descendent_rec.ACCOMPLISHED_DATE := SYSDATE;
4324 AHL_UNIT_EFFECTIVITIES_PKG.UPDATE_ROW (
4325 x_unit_effectivity_id => l_ue_descendent_rec.UNIT_EFFECTIVITY_ID,
4326 x_csi_item_instance_id => l_ue_descendent_rec.CSI_ITEM_INSTANCE_ID,
4327 x_mr_interval_id => l_ue_descendent_rec.MR_INTERVAL_ID ,
4328 x_MR_EFFECTIVITY_ID => l_ue_descendent_rec.MR_EFFECTIVITY_ID ,
4329 x_MR_HEADER_ID => l_ue_descendent_rec.MR_HEADER_ID ,
4330 x_STATUS_CODE => l_ue_descendent_rec.STATUS_CODE ,
4331 x_DUE_DATE => l_ue_descendent_rec.DUE_DATE ,
4332 x_DUE_COUNTER_VALUE => l_ue_descendent_rec.DUE_COUNTER_VALUE ,
4333 x_FORECAST_SEQUENCE => l_ue_descendent_rec.FORECAST_SEQUENCE ,
4334 x_REPETITIVE_MR_FLAG => l_ue_descendent_rec.REPETITIVE_MR_FLAG,
4335 x_TOLERANCE_FLAG => l_ue_descendent_rec.TOLERANCE_FLAG ,
4336 x_REMARKS => l_ue_descendent_rec.REMARKS ,
4337 x_MESSAGE_CODE => l_ue_descendent_rec.MESSAGE_CODE ,
4338 x_PRECEDING_UE_ID => l_ue_descendent_rec.PRECEDING_UE_ID ,
4339 x_DATE_RUN => l_ue_descendent_rec.DATE_RUN,
4340 x_SET_DUE_DATE => l_ue_descendent_rec.SET_DUE_DATE,
4341 x_ACCOMPLISHED_DATE => l_ue_descendent_rec.ACCOMPLISHED_DATE,
4342 x_SERVICE_LINE_ID => l_ue_descendent_rec.SERVICE_LINE_ID,
4343 x_PROGRAM_MR_HEADER_ID => l_ue_descendent_rec.PROGRAM_MR_HEADER_ID,
4344 x_CANCEL_REASON_CODE => l_ue_descendent_rec.CANCEL_REASON_CODE,
4345 x_EARLIEST_DUE_DATE => l_ue_descendent_rec.EARLIEST_DUE_DATE,
4346 x_LATEST_DUE_DATE => l_ue_descendent_rec.LATEST_DUE_DATE,
4347 x_defer_from_ue_id => l_ue_descendent_rec.defer_from_ue_id,
4348 x_qa_collection_id => l_ue_descendent_rec.qa_collection_id,
4349 x_orig_deferral_ue_id => l_ue_descendent_rec.orig_deferral_ue_id,
4350 x_cs_incident_id => l_ue_descendent_rec.cs_incident_id,
4351 x_application_usg_code => l_ue_descendent_rec.application_usg_code,
4352 x_object_type => l_ue_descendent_rec.object_type,
4353 x_counter_id => l_ue_descendent_rec.counter_id,
4354 x_manually_planned_flag => l_ue_descendent_rec.manually_planned_flag,
4355 X_LOG_SERIES_CODE => l_ue_descendent_rec.log_series_code,
4356 X_LOG_SERIES_NUMBER => l_ue_descendent_rec.log_series_number,
4357 X_FLIGHT_NUMBER => l_ue_descendent_rec.flight_number,
4358 X_MEL_CDL_TYPE_CODE => l_ue_descendent_rec.mel_cdl_type_code,
4359 X_POSITION_PATH_ID => l_ue_descendent_rec.position_path_id,
4360 X_ATA_CODE => l_ue_descendent_rec.ATA_CODE,
4361 X_UNIT_CONFIG_HEADER_ID => l_ue_descendent_rec.unit_config_header_id,
4362 x_ATTRIBUTE_CATEGORY => l_ue_descendent_rec.ATTRIBUTE_CATEGORY,
4363 x_ATTRIBUTE1 => l_ue_descendent_rec.ATTRIBUTE1,
4364 x_ATTRIBUTE2 => l_ue_descendent_rec.ATTRIBUTE2,
4365 x_ATTRIBUTE3 => l_ue_descendent_rec.ATTRIBUTE3,
4366 x_ATTRIBUTE4 => l_ue_descendent_rec.ATTRIBUTE4,
4367 x_ATTRIBUTE5 => l_ue_descendent_rec.ATTRIBUTE5,
4368 x_ATTRIBUTE6 => l_ue_descendent_rec.ATTRIBUTE6,
4369 x_ATTRIBUTE7 => l_ue_descendent_rec.ATTRIBUTE7,
4370 x_ATTRIBUTE8 => l_ue_descendent_rec.ATTRIBUTE8,
4371 x_ATTRIBUTE9 => l_ue_descendent_rec.ATTRIBUTE9,
4372 x_ATTRIBUTE10 => l_ue_descendent_rec.ATTRIBUTE10,
4373 x_ATTRIBUTE11 => l_ue_descendent_rec.ATTRIBUTE11,
4374 x_ATTRIBUTE12 => l_ue_descendent_rec.ATTRIBUTE12,
4375 x_ATTRIBUTE13 => l_ue_descendent_rec.ATTRIBUTE13,
4376 x_ATTRIBUTE14 => l_ue_descendent_rec.ATTRIBUTE14,
4377 x_ATTRIBUTE15 => l_ue_descendent_rec.ATTRIBUTE15,
4378 x_OBJECT_VERSION_NUMBER => l_ue_descendent_rec.OBJECT_VERSION_NUMBER + 1,
4379 x_LAST_UPDATE_DATE => sysdate,
4380 x_LAST_UPDATED_BY => fnd_global.user_id,
4381 X_LAST_UPDATE_LOGIN => fnd_global.login_id);
4382
4383
4384 END LOOP;
4385 CLOSE l_ue_descendent_csr;
4386 -- END IF;
4387 ELSIF (l_ue_rec.REPETITIVE_MR_FLAG = 'Y') THEN
4388 IF (nvl(l_visit_status,'X') = 'PLANNING') THEN
4389
4390 IF G_DEBUG='Y' THEN
4391 AHL_DEBUG_PUB.debug('In repetitive_mr_flag = Y');
4392 END IF;
4393 l_ue_rec.STATUS_CODE := 'EXCEPTION';
4394 l_ue_rec.MESSAGE_CODE := 'TERMINATE-W-NEW-REV';
4395 l_ue_rec.ACCOMPLISHED_DATE := SYSDATE;
4396
4397 IF G_DEBUG='Y' THEN
4398 AHL_DEBUG_PUB.debug('Before update record status to EXCEPTION');
4399 END IF;
4400 AHL_UNIT_EFFECTIVITIES_PKG.UPDATE_ROW (
4401 x_unit_effectivity_id => l_ue_rec.UNIT_EFFECTIVITY_ID,
4402 x_csi_item_instance_id => l_ue_rec.CSI_ITEM_INSTANCE_ID,
4403 x_mr_interval_id => l_ue_rec.MR_INTERVAL_ID ,
4404 x_MR_EFFECTIVITY_ID => l_ue_rec.MR_EFFECTIVITY_ID ,
4405 x_MR_HEADER_ID => l_ue_rec.MR_HEADER_ID ,
4406 x_STATUS_CODE => l_ue_rec.STATUS_CODE ,
4407 x_DUE_DATE => l_ue_rec.DUE_DATE ,
4408 x_DUE_COUNTER_VALUE => l_ue_rec.DUE_COUNTER_VALUE ,
4409 x_FORECAST_SEQUENCE => l_ue_rec.FORECAST_SEQUENCE ,
4410 x_REPETITIVE_MR_FLAG => l_ue_rec.REPETITIVE_MR_FLAG,
4411 x_TOLERANCE_FLAG => l_ue_rec.TOLERANCE_FLAG ,
4412 x_REMARKS => l_ue_rec.REMARKS ,
4413 x_MESSAGE_CODE => l_ue_rec.MESSAGE_CODE ,
4414 x_PRECEDING_UE_ID => l_ue_rec.PRECEDING_UE_ID ,
4415 x_DATE_RUN => l_ue_rec.DATE_RUN,
4416 x_SET_DUE_DATE => l_ue_rec.SET_DUE_DATE,
4417 x_ACCOMPLISHED_DATE => l_ue_rec.ACCOMPLISHED_DATE,
4418 x_SERVICE_LINE_ID => l_ue_rec.SERVICE_LINE_ID,
4419 x_PROGRAM_MR_HEADER_ID => l_ue_rec.PROGRAM_MR_HEADER_ID,
4420 x_CANCEL_REASON_CODE => l_ue_rec.CANCEL_REASON_CODE,
4421 x_EARLIEST_DUE_DATE => l_ue_rec.EARLIEST_DUE_DATE,
4422 x_LATEST_DUE_DATE => l_ue_rec.LATEST_DUE_DATE,
4423 x_defer_from_ue_id => l_ue_rec.defer_from_ue_id,
4424 x_qa_collection_id => l_ue_rec.qa_collection_id,
4425 x_orig_deferral_ue_id => l_ue_rec.orig_deferral_ue_id,
4426 x_cs_incident_id => l_ue_rec.cs_incident_id,
4427 x_application_usg_code => l_ue_rec.application_usg_code,
4428 x_object_type => l_ue_rec.object_type,
4429 x_counter_id => l_ue_rec.counter_id,
4430 x_manually_planned_flag => l_ue_rec.manually_planned_flag,
4431 X_LOG_SERIES_CODE => l_ue_rec.log_series_code,
4432 X_LOG_SERIES_NUMBER => l_ue_rec.log_series_number,
4433 X_FLIGHT_NUMBER => l_ue_rec.flight_number,
4434 X_MEL_CDL_TYPE_CODE => l_ue_rec.mel_cdl_type_code,
4435 X_POSITION_PATH_ID => l_ue_rec.position_path_id,
4436 X_ATA_CODE => l_ue_rec.ATA_CODE,
4437 X_UNIT_CONFIG_HEADER_ID => l_ue_rec.unit_config_header_id,
4438 x_ATTRIBUTE_CATEGORY => l_ue_rec.ATTRIBUTE_CATEGORY,
4439 x_ATTRIBUTE1 => l_ue_rec.ATTRIBUTE1,
4440 x_ATTRIBUTE2 => l_ue_rec.ATTRIBUTE2,
4441 x_ATTRIBUTE3 => l_ue_rec.ATTRIBUTE3,
4442 x_ATTRIBUTE4 => l_ue_rec.ATTRIBUTE4,
4443 x_ATTRIBUTE5 => l_ue_rec.ATTRIBUTE5,
4444 x_ATTRIBUTE6 => l_ue_rec.ATTRIBUTE6,
4445 x_ATTRIBUTE7 => l_ue_rec.ATTRIBUTE7,
4446 x_ATTRIBUTE8 => l_ue_rec.ATTRIBUTE8,
4447 x_ATTRIBUTE9 => l_ue_rec.ATTRIBUTE9,
4448 x_ATTRIBUTE10 => l_ue_rec.ATTRIBUTE10,
4449 x_ATTRIBUTE11 => l_ue_rec.ATTRIBUTE11,
4450 x_ATTRIBUTE12 => l_ue_rec.ATTRIBUTE12,
4451 x_ATTRIBUTE13 => l_ue_rec.ATTRIBUTE13,
4452 x_ATTRIBUTE14 => l_ue_rec.ATTRIBUTE14,
4453 x_ATTRIBUTE15 => l_ue_rec.ATTRIBUTE15,
4454 x_OBJECT_VERSION_NUMBER => l_ue_rec.OBJECT_VERSION_NUMBER + 1,
4455 x_LAST_UPDATE_DATE => sysdate, --l_ue_rec.LAST_UPDATE_DATE,
4456 x_LAST_UPDATED_BY => fnd_global.user_id, --l_ue_rec.LAST_UPDATED_BY,
4457 x_LAST_UPDATE_LOGIN => fnd_global.login_id); -- l_ue_rec.LAST_UPDATE_LOGIN );
4458
4459
4460 IF G_DEBUG='Y' THEN
4461 AHL_DEBUG_PUB.debug('After update record');
4462 END IF;
4463 --update all descendent Unit Effectivities
4464 OPEN l_ue_descendent_csr(l_ue_rec.UNIT_EFFECTIVITY_ID);
4465 LOOP
4466 FETCH l_ue_descendent_csr INTO l_ue_descendent_rec;
4467 EXIT WHEN l_ue_descendent_csr%NOTFOUND;
4468 l_ue_descendent_rec.STATUS_CODE := 'EXCEPTION';
4469 --l_ue_descendent_rec.MESSAGE_CODE := 'TERMINATE-W-NEW-REV';
4470 l_ue_descendent_rec.ACCOMPLISHED_DATE := SYSDATE;
4471
4472 IF G_DEBUG='Y' THEN
4473 AHL_DEBUG_PUB.debug('start update status to Exception descedant ue_id' || l_ue_descendent_rec.UNIT_EFFECTIVITY_ID);
4474 END IF;
4475 AHL_UNIT_EFFECTIVITIES_PKG.UPDATE_ROW (
4476 x_unit_effectivity_id => l_ue_descendent_rec.UNIT_EFFECTIVITY_ID,
4477 x_csi_item_instance_id => l_ue_descendent_rec.CSI_ITEM_INSTANCE_ID,
4478 x_mr_interval_id => l_ue_descendent_rec.MR_INTERVAL_ID ,
4479 x_MR_EFFECTIVITY_ID => l_ue_descendent_rec.MR_EFFECTIVITY_ID ,
4480 x_MR_HEADER_ID => l_ue_descendent_rec.MR_HEADER_ID ,
4481 x_STATUS_CODE => l_ue_descendent_rec.STATUS_CODE ,
4482 x_DUE_DATE => l_ue_descendent_rec.DUE_DATE ,
4483 x_DUE_COUNTER_VALUE => l_ue_descendent_rec.DUE_COUNTER_VALUE ,
4484 x_FORECAST_SEQUENCE => l_ue_descendent_rec.FORECAST_SEQUENCE ,
4485 x_REPETITIVE_MR_FLAG => l_ue_descendent_rec.REPETITIVE_MR_FLAG,
4486 x_TOLERANCE_FLAG => l_ue_descendent_rec.TOLERANCE_FLAG ,
4487 x_REMARKS => l_ue_descendent_rec.REMARKS ,
4488 x_MESSAGE_CODE => l_ue_descendent_rec.MESSAGE_CODE ,
4489 x_PRECEDING_UE_ID => l_ue_descendent_rec.PRECEDING_UE_ID ,
4490 x_DATE_RUN => l_ue_descendent_rec.DATE_RUN,
4491 x_SET_DUE_DATE => l_ue_descendent_rec.SET_DUE_DATE,
4492 x_ACCOMPLISHED_DATE => l_ue_descendent_rec.ACCOMPLISHED_DATE,
4493 x_SERVICE_LINE_ID => l_ue_descendent_rec.SERVICE_LINE_ID,
4494 x_PROGRAM_MR_HEADER_ID => l_ue_descendent_rec.PROGRAM_MR_HEADER_ID,
4495 x_CANCEL_REASON_CODE => l_ue_descendent_rec.CANCEL_REASON_CODE,
4496 x_EARLIEST_DUE_DATE => l_ue_descendent_rec.EARLIEST_DUE_DATE,
4497 x_LATEST_DUE_DATE => l_ue_descendent_rec.LATEST_DUE_DATE,
4498 x_defer_from_ue_id => l_ue_descendent_rec.defer_from_ue_id,
4499 x_qa_collection_id => l_ue_descendent_rec.qa_collection_id,
4500 x_orig_deferral_ue_id => l_ue_descendent_rec.orig_deferral_ue_id,
4501 x_cs_incident_id => l_ue_descendent_rec.cs_incident_id,
4502 x_application_usg_code => l_ue_descendent_rec.application_usg_code,
4503 x_object_type => l_ue_descendent_rec.object_type,
4504 x_counter_id => l_ue_descendent_rec.counter_id,
4505 x_manually_planned_flag => l_ue_descendent_rec.manually_planned_flag,
4506 X_LOG_SERIES_CODE => l_ue_descendent_rec.log_series_code,
4507 X_LOG_SERIES_NUMBER => l_ue_descendent_rec.log_series_number,
4508 X_FLIGHT_NUMBER => l_ue_descendent_rec.flight_number,
4509 X_MEL_CDL_TYPE_CODE => l_ue_descendent_rec.mel_cdl_type_code,
4510 X_POSITION_PATH_ID => l_ue_descendent_rec.position_path_id,
4511 X_ATA_CODE => l_ue_descendent_rec.ATA_CODE,
4512 X_UNIT_CONFIG_HEADER_ID => l_ue_descendent_rec.unit_config_header_id,
4513 x_ATTRIBUTE_CATEGORY => l_ue_descendent_rec.ATTRIBUTE_CATEGORY,
4514 x_ATTRIBUTE1 => l_ue_descendent_rec.ATTRIBUTE1,
4515 x_ATTRIBUTE2 => l_ue_descendent_rec.ATTRIBUTE2,
4516 x_ATTRIBUTE3 => l_ue_descendent_rec.ATTRIBUTE3,
4517 x_ATTRIBUTE4 => l_ue_descendent_rec.ATTRIBUTE4,
4518 x_ATTRIBUTE5 => l_ue_descendent_rec.ATTRIBUTE5,
4519 x_ATTRIBUTE6 => l_ue_descendent_rec.ATTRIBUTE6,
4520 x_ATTRIBUTE7 => l_ue_descendent_rec.ATTRIBUTE7,
4521 x_ATTRIBUTE8 => l_ue_descendent_rec.ATTRIBUTE8,
4522 x_ATTRIBUTE9 => l_ue_descendent_rec.ATTRIBUTE9,
4523 x_ATTRIBUTE10 => l_ue_descendent_rec.ATTRIBUTE10,
4524 x_ATTRIBUTE11 => l_ue_descendent_rec.ATTRIBUTE11,
4525 x_ATTRIBUTE12 => l_ue_descendent_rec.ATTRIBUTE12,
4526 x_ATTRIBUTE13 => l_ue_descendent_rec.ATTRIBUTE13,
4527 x_ATTRIBUTE14 => l_ue_descendent_rec.ATTRIBUTE14,
4528 x_ATTRIBUTE15 => l_ue_descendent_rec.ATTRIBUTE15,
4529 x_OBJECT_VERSION_NUMBER => l_ue_descendent_rec.OBJECT_VERSION_NUMBER + 1,
4530 x_LAST_UPDATE_DATE => sysdate, --l_ue_descendent_rec.LAST_UPDATE_DATE,
4531 x_LAST_UPDATED_BY => fnd_global.user_id, --l_ue_descendent_rec.LAST_UPDATED_BY ,
4532 x_LAST_UPDATE_LOGIN => fnd_global.login_id); --l_ue_descendent_rec.LAST_UPDATE_LOGIN );
4533 END LOOP;
4534 CLOSE l_ue_descendent_csr;
4535
4536 ELSE
4537 AHL_UNIT_EFFECTIVITIES_PKG.Delete_Row(l_ue_rec.UNIT_EFFECTIVITY_ID);
4538
4539 --Delete Descendants effectivities
4540 OPEN l_ue_descendent_csr(l_ue_rec.UNIT_EFFECTIVITY_ID);
4541 LOOP
4542 FETCH l_ue_descendent_csr INTO l_ue_descendent_rec;
4543 EXIT WHEN l_ue_descendent_csr%NOTFOUND;
4544
4545 IF G_DEBUG='Y' THEN
4546 AHL_DEBUG_PUB.debug('start delete descedant ue_id' ||l_ue_descendent_rec.UNIT_EFFECTIVITY_ID);
4547 END IF;
4548 AHL_UNIT_EFFECTIVITIES_PKG.Delete_Row(l_ue_descendent_rec.UNIT_EFFECTIVITY_ID);
4549 END LOOP;
4550 CLOSE l_ue_descendent_csr;
4551
4552 END IF;
4553 END IF; -- end if mr_repetitive_flag = 'Y'
4554 END IF; -- visit status.
4555 END LOOP;
4556
4557 CLOSE l_unit_effectivity_csr;
4558
4559 IF G_DEBUG='Y' THEN
4560 AHL_DEBUG_PUB.debug('Start of Processing SRs');
4561 END IF;
4562
4563 -- Process for SRs.
4564 FOR ahl_sr_ue_rec IN ahl_sr_ue_csr LOOP
4565 OPEN ahl_sr_ue_valid_csr(l_old_mr_header_id, ahl_sr_ue_rec.RELATED_UE_ID);
4566 FETCH ahl_sr_ue_valid_csr INTO l_junk;
4567 IF(ahl_sr_ue_valid_csr%FOUND)THEN
4568 IF G_DEBUG='Y' THEN
4569 AHL_DEBUG_PUB.debug('Found ue:' || ahl_sr_ue_rec.RELATED_UE_ID);
4570 END IF;
4571
4572 l_visit_status := AHL_UMP_UTIL_PKG.get_Visit_Status ( ahl_sr_ue_rec.RELATED_UE_ID);
4573
4574 -- only if visit is in planning status we must mark it for termination.
4575 -- if visit is already on the floor, we do nothing.
4576 IF (nvl(l_visit_status,'X') NOT IN ('RELEASED','CLOSED')) THEN
4577
4578 IF G_DEBUG='Y' THEN
4579 AHL_DEBUG_PUB.debug('Processing ue:' || ahl_sr_ue_rec.RELATED_UE_ID || ' for termination');
4580 END IF;
4581
4582 MR_Terminate (ahl_sr_ue_rec.RELATED_UE_ID);
4583
4584 -- For child MRs.
4585 FOR descendent_rec IN get_descendents_csr(ahl_sr_ue_rec.RELATED_UE_ID) LOOP
4586 MR_Terminate (descendent_rec.related_ue_id);
4587 END LOOP;
4588
4589 END IF; -- Visit status.
4590 END IF;--end of if found
4591 CLOSE ahl_sr_ue_valid_csr;
4592 END LOOP;
4593
4594 -- Check Error Message stack.
4595 x_msg_count := FND_MSG_PUB.count_msg;
4596 IF x_msg_count > 0 THEN
4597 x_return_status := 'U';
4598 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4599 END IF;
4600
4601 IF(l_new_mr_header_id IS NOT NULL)THEN
4602 OPEN get_mr_copy_dtls_csr(l_new_mr_header_id);
4603 FETCH get_mr_copy_dtls_csr INTO l_COPY_FIRST_DUE_FLAG,l_COPY_DEFERRALS_FLAG;
4604 CLOSE get_mr_copy_dtls_csr;
4605 IF(l_COPY_FIRST_DUE_FLAG = 'Y' OR l_COPY_DEFERRALS_FLAG = 'Y') THEN
4606 AHL_FMP_PVT.GET_MR_AFFECTED_ITEMS(
4607 p_api_version => 1.0,
4608 p_init_msg_list => FND_API.G_FALSE,
4609 p_commit => FND_API.G_FALSE,
4610 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4611 x_return_status => l_return_status,
4612 x_msg_count => l_msg_count,
4613 x_msg_data => l_msg_data,
4614 p_mr_header_id => l_new_mr_header_id,
4615 p_mr_effectivity_id => NULL,
4616 p_top_node_flag => 'N',
4617 p_unique_inst_flag => 'N',
4618 p_sort_flag => 'N',
4619 x_mr_item_inst_tbl => l_new_mr_item_instance_tbl
4620 );
4621 IF(l_return_status = 'U') THEN
4622 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4623 END IF;
4624 IF(l_return_status = 'E') THEN
4625 RAISE FND_API.G_EXC_ERROR;
4626 END IF;
4627
4628 IF (l_new_mr_item_instance_tbl.COUNT) > 0 THEN
4629 FOR i IN l_new_mr_item_instance_tbl.FIRST..l_new_mr_item_instance_tbl.LAST LOOP
4630 FOR cp_ue_rec IN l_cp_ue_csr(l_old_mr_header_id,l_new_mr_item_instance_tbl(i).ITEM_INSTANCE_ID) LOOP
4631 l_copy_record := FALSE;
4632 l_copy_ud_record := FALSE;
4633 IF(NVL(l_COPY_DEFERRALS_FLAG,'N') = 'N') THEN
4634 cp_ue_rec.DEFER_FROM_UE_ID := NULL;
4635 cp_ue_rec.ORIG_DEFERRAL_UE_ID := NULL;
4636 ELSE
4637 IF cp_ue_rec.DEFER_FROM_UE_ID IS NOT NULL THEN
4638 l_copy_record := TRUE;
4639 END IF;
4640 END IF;
4641
4642 cp_ue_rec.status_code := NULL;
4643 l_unit_deferral_id := NULL;
4644
4645 IF(NVL(l_COPY_FIRST_DUE_FLAG,'N') = 'Y') THEN
4646 -- check whether init due data exists
4647 OPEN unit_deferral_id_csr(cp_ue_rec.unit_effectivity_id);
4648 FETCH unit_deferral_id_csr INTO l_unit_deferral_id;
4649 IF(unit_deferral_id_csr%FOUND)THEN
4650 l_copy_record := TRUE;
4651 l_copy_ud_record := TRUE;
4652 cp_ue_rec.status_code := 'INIT-DUE';
4653 END IF;
4654 CLOSE unit_deferral_id_csr;
4655 END IF;
4656
4657 IF(l_copy_record)THEN
4658 AHL_UNIT_EFFECTIVITIES_PKG.Insert_Row (
4659 X_ROWID => l_rowid,
4660 X_UNIT_EFFECTIVITY_ID => l_unit_effectivity_id,
4661 X_CSI_ITEM_INSTANCE_ID => cp_ue_rec.csi_item_instance_id,
4662 X_MR_INTERVAL_ID => cp_ue_rec.mr_interval_id,
4663 X_MR_EFFECTIVITY_ID => cp_ue_rec.mr_effectivity_id,
4664 X_MR_HEADER_ID => l_new_mr_header_id,
4665 X_STATUS_CODE => cp_ue_rec.status_code, /* status_code */
4666 X_DUE_DATE => cp_ue_rec.due_date,
4667 X_DUE_COUNTER_VALUE => cp_ue_rec.due_counter_value,
4668 X_FORECAST_SEQUENCE => cp_ue_rec.forecast_sequence,
4669 X_REPETITIVE_MR_FLAG => cp_ue_rec.repetitive_mr_flag,
4670 X_TOLERANCE_FLAG => cp_ue_rec.tolerance_flag,
4671 X_REMARKS => null, /* remarks */
4672 X_MESSAGE_CODE => null,
4673 X_PRECEDING_UE_ID => null, /* p_x_temp_mr_rec.preceding_ue_id */
4674 X_DATE_RUN => sysdate, /* date_run */
4675 X_SET_DUE_DATE => cp_ue_rec.set_due_date,
4676 X_ACCOMPLISHED_DATE => null, /* accomplished date */
4677 X_SERVICE_LINE_ID => cp_ue_rec.service_line_id,
4678 X_PROGRAM_MR_HEADER_ID => cp_ue_rec.program_mr_header_id,
4679 X_CANCEL_REASON_CODE => null, /* cancel_reason_code */
4680 X_EARLIEST_DUE_DATE => cp_ue_rec.earliest_due_date,
4681 X_LATEST_DUE_DATE => cp_ue_rec.latest_due_date,
4682 X_defer_from_ue_id => cp_ue_rec.DEFER_FROM_UE_ID,
4683 X_cs_incident_id => null,
4684 X_qa_collection_id => null,
4685 X_orig_deferral_ue_id => cp_ue_rec.ORIG_DEFERRAL_UE_ID,
4686 X_application_usg_code => cp_ue_rec.APPLICATION_USG_CODE,
4687 X_object_type => 'MR',
4688 X_counter_id => cp_ue_rec.counter_id,
4689 X_MANUALLY_PLANNED_FLAG => cp_ue_rec.MANUALLY_PLANNED_FLAG,
4690 X_LOG_SERIES_CODE => cp_ue_rec.LOG_SERIES_CODE,
4691 X_LOG_SERIES_NUMBER => cp_ue_rec.LOG_SERIES_NUMBER,
4692 X_FLIGHT_NUMBER => cp_ue_rec.FLIGHT_NUMBER,
4693 X_MEL_CDL_TYPE_CODE => cp_ue_rec.MEL_CDL_TYPE_CODE,
4694 X_POSITION_PATH_ID => cp_ue_rec.POSITION_PATH_ID,
4695 X_ATA_CODE => cp_ue_rec.ATA_CODE,
4696 X_UNIT_CONFIG_HEADER_ID => cp_ue_rec.UNIT_CONFIG_HEADER_ID,
4697 X_ATTRIBUTE_CATEGORY => cp_ue_rec.ATTRIBUTE_CATEGORY,
4698 X_ATTRIBUTE1 => cp_ue_rec.ATTRIBUTE1,
4699 X_ATTRIBUTE2 => cp_ue_rec.ATTRIBUTE2,
4700 X_ATTRIBUTE3 => cp_ue_rec.ATTRIBUTE3,
4701 X_ATTRIBUTE4 => cp_ue_rec.ATTRIBUTE4,
4702 X_ATTRIBUTE5 => cp_ue_rec.ATTRIBUTE5,
4703 X_ATTRIBUTE6 => cp_ue_rec.ATTRIBUTE6,
4704 X_ATTRIBUTE7 => cp_ue_rec.ATTRIBUTE7,
4705 X_ATTRIBUTE8 => cp_ue_rec.ATTRIBUTE8,
4706 X_ATTRIBUTE9 => cp_ue_rec.ATTRIBUTE9,
4707 X_ATTRIBUTE10 => cp_ue_rec.ATTRIBUTE10,
4708 X_ATTRIBUTE11 => cp_ue_rec.ATTRIBUTE11,
4709 X_ATTRIBUTE12 => cp_ue_rec.ATTRIBUTE12,
4710 X_ATTRIBUTE13 => cp_ue_rec.ATTRIBUTE13,
4711 X_ATTRIBUTE14 => cp_ue_rec.ATTRIBUTE14,
4712 X_ATTRIBUTE15 => cp_ue_rec.ATTRIBUTE15,
4713 X_OBJECT_VERSION_NUMBER => 1, /* object version */
4714 X_CREATION_DATE => sysdate,
4715 X_CREATED_BY => fnd_global.user_id,
4716 X_LAST_UPDATE_DATE => sysdate,
4717 X_LAST_UPDATED_BY => fnd_global.user_id,
4718 X_LAST_UPDATE_LOGIN => fnd_global.login_id );
4719 IF(l_copy_ud_record)THEN
4720 Update AHL_UNIT_DEFERRALS_B SET UNIT_EFFECTIVITY_ID = l_unit_effectivity_id,
4721 last_update_date = sysdate,
4722 object_version_number = object_version_number + 1,
4723 LAST_UPDATED_BY = fnd_global.user_id,
4724 LAST_UPDATE_LOGIN = fnd_global.login_id
4725 WHERE unit_deferral_id = l_unit_deferral_id;
4726 END IF;
4727 END IF;
4728 END LOOP;
4729 END LOOP;
4730 END IF; -- call fmp if
4731 END IF; -- count > 0
4732 END IF;
4733
4734 -- Standard check of p_commit
4735 IF FND_API.TO_BOOLEAN(p_commit) THEN
4736 COMMIT WORK;
4737 IF G_DEBUG='Y' THEN
4738 AHL_DEBUG_PUB.debug('Committed Changes', 'UMP');
4739 END IF;
4740 END IF;
4741
4742 /* commented call from here as BUE api commits. Launching concurrent program instead.
4743 IF (l_new_mr_header_id IS NOT NULL AND trunc(l_effective_from_date) <= trunc(sysdate)) THEN
4744 AHL_UMP_UNITMAINT_PVT.Build_UnitEffectivity (
4745 p_init_msg_list => FND_API.G_FALSE,
4746 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4747 p_default => FND_API.G_TRUE,
4748 p_module_type => NULL,
4749 x_return_status => l_return_status,
4750 x_msg_count => l_msg_count,
4751 x_msg_data => l_msg_data,
4752 p_mr_header_id => l_new_mr_header_id
4753 ) ;
4754
4755 IF(l_return_status = 'U') THEN
4756 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4757 END IF;
4758 IF(l_return_status = 'E') THEN
4759 RAISE FND_API.G_EXC_ERROR;
4760 END IF;
4761
4762 END IF;
4763 */
4764
4765 -- launch concurrent program to build UEs for applicable old and new MRs.
4766 -- commenting the cc pgm - modified for FP bug# 7414814
4767 /*
4768 l_req_id := fnd_request.submit_request('AHL','AHLWUEFF',NULL,NULL,FALSE, l_old_mr_header_id,
4769 l_new_mr_header_id);
4770 IF (l_req_id = 0 OR l_req_id IS NULL) THEN
4771 IF G_debug = 'Y' THEN
4772 AHL_DEBUG_PUB.debug('Tried to submit concurrent request but failed');
4773 END IF;
4774 END IF;
4775 */
4776
4777 -- Standard call to get message count and if count is 1, get message info
4778 FND_MSG_PUB.Count_And_Get
4779 ( p_count => x_msg_count,
4780 p_data => x_msg_data,
4781 p_encoded => fnd_api.g_false
4782 );
4783
4784 --
4785 EXCEPTION
4786 WHEN FND_API.G_EXC_ERROR THEN
4787 x_return_status := FND_API.G_RET_STS_ERROR;
4788 Rollback to Terminate_MR_Instances_pvt;
4789 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
4790 p_data => x_msg_data,
4791 p_encoded => fnd_api.g_false);
4792
4793 -- Disable debug
4794 AHL_DEBUG_PUB.disable_debug;
4795
4796 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4797 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4798 Rollback to Terminate_MR_Instances_pvt;
4799 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
4800 p_data => x_msg_data,
4801 p_encoded => fnd_api.g_false);
4802
4803 -- Disable debug
4804 AHL_DEBUG_PUB.disable_debug;
4805
4806 WHEN OTHERS THEN
4807 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4808 Rollback to Terminate_MR_Instances_pvt;
4809 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4810 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
4811 p_procedure_name => 'Terminate_MR_Instances_pvt',
4812 p_error_text => SUBSTR(SQLERRM,1,240));
4813 END IF;
4814 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
4815 p_data => x_msg_data,
4816 p_encoded => fnd_api.g_false);
4817
4818
4819 -- Disable debug
4820 AHL_DEBUG_PUB.disable_debug;
4821
4822
4823 END TERMINATE_MR_INSTANCES;
4824
4825
4826 ------------------------------
4827 -- Define Local Procedures --
4828 ------------------------------
4829 PROCEDURE Convert_MRID (p_x_mr_id IN OUT NOCOPY NUMBER,
4830 p_mr_title IN VARCHAR2,
4831 p_version_number IN NUMBER)
4832 IS
4833
4834 -- For case where title and version is known.
4835 CURSOR ahl_mr_headers_csr (p_title IN VARCHAR2,
4836 p_version_number IN NUMBER) IS
4837 /*SELECT mr_header_id, effective_to
4838 FROM ahl_mr_headers_v
4839 WHERE title = p_title
4840 AND version_number = p_version_number;*/
4841 SELECT mr_header_id, effective_to
4842 FROM ahl_mr_headers_app_v
4843 WHERE title = p_title
4844 AND version_number = p_version_number;
4845
4846 -- local variables.
4847 l_mr_id NUMBER;
4848 l_effective_to ahl_mr_headers_app_v.EFFECTIVE_TO%TYPE;
4849 l_mr_title ahl_mr_headers_app_v.TITLE%TYPE;
4850 l_version_number ahl_mr_headers_app_v.VERSION_NUMBER%TYPE;
4851
4852 BEGIN
4853
4854 IF (p_x_mr_id IS NULL OR p_x_mr_id = FND_API.G_MISS_NUM) THEN
4855 IF (p_mr_title IS NOT NULL AND p_mr_title <> FND_API.G_MISS_CHAR) AND
4856 (p_version_number IS NOT NULL AND p_version_number <> FND_API.G_MISS_NUM) THEN
4857 OPEN ahl_mr_headers_csr(p_mr_title, p_version_number);
4858 FETCH ahl_mr_headers_csr INTO l_mr_id, l_effective_to;
4859 IF (ahl_mr_headers_csr%NOTFOUND) THEN
4860 FND_MESSAGE.Set_Name ('AHL','AHL_UMP_PUE_TITLE_INVALID');
4861 FND_MESSAGE.Set_Token('TITLE',p_mr_title);
4862 FND_MESSAGE.Set_Token('VERSION',p_version_number);
4863 FND_MSG_PUB.ADD;
4864 ELSIF (trunc(l_effective_to) < trunc(sysdate)) THEN
4865 FND_MESSAGE.Set_Name ('AHL','AHL_UMP_PUE_MR_EXPIRED');
4866 FND_MESSAGE.Set_Token('TITLE',p_mr_title);
4867 FND_MESSAGE.Set_Token('VERSION',p_version_number);
4868 FND_MSG_PUB.ADD;
4869 ELSE
4870 p_x_mr_id := l_mr_id;
4871 END IF;
4872 CLOSE ahl_mr_headers_csr;
4873 END IF;
4874 END IF;
4875
4876 END Convert_MRID;
4877
4878 PROCEDURE Convert_Unit (p_x_uc_header_id IN OUT NOCOPY NUMBER,
4879 p_unit_name IN VARCHAR2)
4880 IS
4881
4882 CURSOR ahl_uc_headers_csr(p_unit_name IN VARCHAR2) IS
4883 SELECT unit_config_header_id
4884 FROM ahl_unit_config_headers
4885 WHERE name = p_unit_name;
4886
4887 l_uc_header_id NUMBER;
4888 l_junk VARCHAR2(1);
4889
4890 BEGIN
4891
4892 IF (p_x_uc_header_id IS NULL OR p_x_uc_header_id = FND_API.G_MISS_NUM) THEN
4893 IF (p_unit_name IS NOT NULL AND p_unit_name <> FND_API.G_MISS_CHAR) THEN
4894 OPEN ahl_uc_headers_csr(p_unit_name);
4895 FETCH ahl_uc_headers_csr INTO l_uc_header_id;
4896 IF (ahl_uc_headers_csr%NOTFOUND) THEN
4897 FND_MESSAGE.Set_Name ('AHL','AHL_UMP_PUE_UNIT_INVALID');
4898 FND_MESSAGE.Set_Token('NAME',p_unit_name);
4899 FND_MSG_PUB.ADD;
4900 ELSE
4901 p_x_uc_header_id := l_uc_header_id;
4902 END IF;
4903 END IF;
4904 END IF;
4905
4906 END Convert_Unit;
4907
4908 PROCEDURE Convert_Instance (p_x_csi_item_instance_id IN OUT NOCOPY NUMBER,
4909 p_csi_instance_number IN VARCHAR2)
4910 IS
4911
4912 CURSOR csi_item_instances_csr(p_csi_instance_number IN VARCHAR2) IS
4913 SELECT instance_id
4914 FROM csi_item_instances
4915 WHERE instance_number = p_csi_instance_number
4916 AND trunc(sysdate) < trunc(nvl(active_end_date, sysdate+1));
4917
4918 l_csi_item_instance_id NUMBER;
4919
4920 BEGIN
4921
4922 IF (p_x_csi_item_instance_id IS NULL OR
4923 p_x_csi_item_instance_id = FND_API.G_MISS_NUM) THEN
4924 IF (p_csi_instance_number IS NOT NULL AND
4925 p_csi_instance_number <> FND_API.G_MISS_CHAR) THEN
4926 -- get instance_id.
4927 OPEN csi_item_instances_csr (p_csi_instance_number);
4928 FETCH csi_item_instances_csr INTO l_csi_item_instance_id;
4929 IF (csi_item_instances_csr%NOTFOUND) THEN
4930 FND_MESSAGE.Set_Name ('AHL','AHL_UMP_PUE_INST_NOTFOUND');
4931 FND_MESSAGE.Set_Token('NUMBER',p_csi_instance_number);
4932 FND_MSG_PUB.ADD;
4933 ELSE
4934 p_x_csi_item_instance_id := l_csi_item_instance_id;
4935 END IF;
4936 CLOSE csi_item_instances_csr;
4937 END IF;
4938 END IF;
4939
4940 END Convert_Instance;
4941
4942 -------------------------------
4943 -- Validate input parameters.
4944 Procedure Validate_Input_Parameters (p_mr_header_id IN NUMBER,
4945 p_x_csi_item_instance_id IN OUT NOCOPY NUMBER,
4946 p_unit_config_header_id IN NUMBER)
4947 IS
4948
4949 -- To validate mr id.
4950 CURSOR ahl_mr_headers_csr(p_mr_header_id IN NUMBER) IS
4951 SELECT title, version_number, effective_to, effective_from
4952 FROM ahl_mr_headers_app_v
4953 WHERE mr_header_id = p_mr_header_id;
4954
4955 -- To validate instance.
4956 CURSOR csi_item_instances_csr(p_csi_item_instance_id IN NUMBER) IS
4957 SELECT instance_number, active_end_date
4958 FROM csi_item_instances
4959 WHERE instance_id = p_csi_item_instance_id;
4960
4961 -- To validate unit.
4962 CURSOR ahl_unit_config_headers_csr (p_uc_header_id IN NUMBER) IS
4963 SELECT name, active_start_date, active_end_date, csi_item_instance_id
4964 FROM ahl_unit_config_headers
4965 WHERE unit_config_header_id = p_uc_header_id;
4966
4967 l_effective_from ahl_mr_headers_app_v.EFFECTIVE_FROM%TYPE;
4968 l_effective_to ahl_mr_headers_app_v.EFFECTIVE_TO%TYPE;
4969 l_mr_title ahl_mr_headers_app_v.TITLE%TYPE;
4970 l_version_number ahl_mr_headers_app_v.VERSION_NUMBER%TYPE;
4971 l_csi_item_instance_id NUMBER;
4972 l_active_end_date DATE;
4973 l_active_start_date DATE;
4974 l_name ahl_unit_config_headers.name%TYPE;
4975 l_instance_number csi_item_instances.instance_number%TYPE;
4976
4977 BEGIN
4978
4979 -- validate mr id.
4980 IF (p_mr_header_id IS NOT NULL) THEN
4981 OPEN ahl_mr_headers_csr (p_mr_header_id);
4982 FETCH ahl_mr_headers_csr INTO l_mr_title, l_version_number,
4983 l_effective_to, l_effective_from;
4984 IF (ahl_mr_headers_csr%NOTFOUND) THEN
4985 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_MR_NOTFOUND');
4986 FND_MESSAGE.Set_Token('MR_ID',p_mr_header_id);
4987 FND_MSG_PUB.ADD;
4988 CLOSE ahl_mr_headers_csr;
4989 --dbms_output.put_line('MR not found.');
4990 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4991 ELSIF ( trunc(l_effective_from) > trunc(sysdate) OR
4992 trunc(sysdate) > trunc(l_effective_to)) THEN
4993 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_MR_EXPIRED');
4994 FND_MESSAGE.Set_Token('TITLE',l_mr_title);
4995 FND_MESSAGE.Set_Token('VERSION',l_version_number);
4996 FND_MSG_PUB.ADD;
4997 --dbms_output.put_line('MR is not valid for today.');
4998 END IF;
4999
5000 CLOSE ahl_mr_headers_csr;
5001 END IF;
5002
5003 -- validate item instance.
5004 IF (p_x_csi_item_instance_id IS NOT NULL) THEN
5005 OPEN csi_item_instances_csr (p_x_csi_item_instance_id);
5006 FETCH csi_item_instances_csr INTO l_instance_number, l_active_end_date;
5007 IF (csi_item_instances_csr%NOTFOUND) THEN
5008 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_INSTID_NOTFOUND');
5009 FND_MESSAGE.Set_Token('INST_ID', p_x_csi_item_instance_id);
5010 FND_MSG_PUB.ADD;
5011 CLOSE csi_item_instances_csr;
5012 --dbms_output.put_line('Instance not found');
5013 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5014 ELSIF (trunc(l_active_end_date) < trunc(sysdate)) THEN
5015 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_INST_EXPIRED');
5016 FND_MESSAGE.Set_Token('NUMBER', l_instance_number);
5017 FND_MSG_PUB.ADD;
5018 --dbms_output.put_line('Instance has expired');
5019 END IF;
5020 CLOSE csi_item_instances_csr;
5021 END IF;
5022
5023 -- Validate unit config id.
5024 IF (p_unit_config_header_id IS NOT NULL) THEN
5025 OPEN ahl_unit_config_headers_csr (p_unit_config_header_id);
5026 FETCH ahl_unit_config_headers_csr INTO l_name, l_active_start_date,
5027 l_active_end_date, l_csi_item_instance_id;
5028 IF (ahl_unit_config_headers_csr%NOTFOUND) THEN
5029 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_UNIT_NOTFOUND');
5030 FND_MESSAGE.Set_Token('UNIT_ID',p_unit_config_header_id);
5031 FND_MSG_PUB.ADD;
5032 --dbms_output.put_line('Unit not found');
5033 CLOSE ahl_unit_config_headers_csr;
5034 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5035
5036 -- Dates obsoleted 11.5.10.
5037 -- ELSIF (trunc(l_active_start_date) > trunc(sysdate) OR
5038 -- trunc(sysdate) > trunc(l_active_end_date)) THEN
5039 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_UC_EXPIRED');
5040 -- FND_MESSAGE.Set_Token('NAME',l_name);
5041 -- FND_MSG_PUB.ADD;
5042 --dbms_output.put_line('Unit has expired');
5043 ELSIF (p_x_csi_item_instance_id IS NULL) THEN
5044 p_x_csi_item_instance_id := l_csi_item_instance_id;
5045 END IF;
5046 END IF;
5047
5048 -- Validate for too many parameters.
5049 -- If both item instance and mr_id present then raise error.
5050 IF (p_mr_header_id IS NOT NULL AND p_x_csi_item_instance_id IS NOT NULL) THEN
5051 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_INPUT_INVALID');
5052 -- Fix for bug# 3962903.
5053 --FND_MESSAGE.Set_Token('MR_ID',p_mr_header_id);
5054 --FND_MESSAGE.Set_Token('INST_ID',p_x_csi_item_instance_id);
5055 FND_MSG_PUB.ADD;
5056 END IF;
5057
5058 -- If both p_unit_config_header_id and p_x_csi_item_instance_id are not
5059 -- null, then p_x_csi_item_instance_id should match l_csi_item_instance_id.
5060 IF ((p_x_csi_item_instance_id IS NOT NULL) AND
5061 (p_unit_config_header_id IS NOT NULL)) THEN
5062 IF (l_csi_item_instance_id <> p_x_csi_item_instance_id) THEN
5063 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_INPUT_INVALID');
5064 -- Fix for bug# 3962903.
5065 --FND_MESSAGE.Set_Token('MR_ID',p_mr_header_id);
5066 --FND_MESSAGE.Set_Token('INST_ID',p_x_csi_item_instance_id);
5067 FND_MSG_PUB.ADD;
5068 END IF;
5069 END IF;
5070
5071
5072 END Validate_Input_Parameters;
5073
5074 -- AMSRINIV : #4360784 Modified Validate_PM_Input_Parameters so that Validate_Input_Parameters needn't be called. Begin
5075 -- Tamal: Bug #4207212, #4114368 Begin
5076 -- Validation procedure for PM mode.
5077 Procedure Validate_PM_Input_Parameters (p_mr_header_id IN NUMBER,
5078 p_csi_item_instance_id IN NUMBER,
5079 p_contract_number IN VARCHAR2,
5080 p_contract_modifier IN VARCHAR2)
5081 IS
5082 -- To validate mr id.
5083 CURSOR ahl_mr_headers_csr(p_mr_header_id IN NUMBER) IS
5084 SELECT title, version_number, effective_to, effective_from
5085 FROM ahl_mr_headers_app_v
5086 WHERE mr_header_id = p_mr_header_id;
5087
5088 -- To validate instance.
5089 CURSOR csi_item_instances_csr(p_csi_item_instance_id IN NUMBER) IS
5090 SELECT instance_number, active_end_date
5091 FROM csi_item_instances
5092 WHERE instance_id = p_csi_item_instance_id;
5093
5094 -- Invalid assumption post bug #4360784. Fixed by AMSRINIV
5095 -- The assumption in this package is that Validate_Input_Parameters has already been called before calling this
5096 -- R12: replaced okc_k_headers_b with okc_k_headers_all_b for MOAC (ref bug# 4337173).
5097 cursor contract_number_csr
5098 is
5099 select 'x'
5100 from okc_k_headers_all_b
5101 where contract_number = p_contract_number
5102 and nvl(contract_number_modifier, 'X') = nvl(decode(p_contract_modifier, FND_API.G_MISS_CHAR, null, p_contract_modifier), 'X');
5103
5104 l_effective_from ahl_mr_headers_app_v.EFFECTIVE_FROM%TYPE;
5105 l_effective_to ahl_mr_headers_app_v.EFFECTIVE_TO%TYPE;
5106 l_mr_title ahl_mr_headers_app_v.TITLE%TYPE;
5107 l_version_number ahl_mr_headers_app_v.VERSION_NUMBER%TYPE;
5108 l_csi_item_instance_id NUMBER;
5109 l_active_end_date DATE;
5110 l_active_start_date DATE;
5111 l_instance_number csi_item_instances.instance_number%TYPE;
5112 l_dummy VARCHAR2(1);
5113
5114 BEGIN
5115
5116 -- validate mr id.
5117 IF (p_mr_header_id IS NOT NULL) THEN
5118 OPEN ahl_mr_headers_csr (p_mr_header_id);
5119 FETCH ahl_mr_headers_csr INTO l_mr_title, l_version_number,
5120 l_effective_to, l_effective_from;
5121 IF (ahl_mr_headers_csr%NOTFOUND) THEN
5122 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_MR_NOTFOUND');
5123 FND_MESSAGE.Set_Token('MR_ID',p_mr_header_id);
5124 FND_MSG_PUB.ADD;
5125 CLOSE ahl_mr_headers_csr;
5126 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5127 ELSIF ( trunc(l_effective_from) > trunc(sysdate) OR
5128 trunc(sysdate) > trunc(l_effective_to)) THEN
5129 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_MR_EXPIRED');
5130 FND_MESSAGE.Set_Token('TITLE',l_mr_title);
5131 FND_MESSAGE.Set_Token('VERSION',l_version_number);
5132 FND_MSG_PUB.ADD;
5133 END IF;
5134
5135 CLOSE ahl_mr_headers_csr;
5136 END IF;
5137
5138 -- validate item instance.
5139 IF (p_csi_item_instance_id IS NOT NULL) THEN
5140 OPEN csi_item_instances_csr (p_csi_item_instance_id);
5141 FETCH csi_item_instances_csr INTO l_instance_number, l_active_end_date;
5142 IF (csi_item_instances_csr%NOTFOUND) THEN
5143 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_INSTID_NOTFOUND');
5144 FND_MESSAGE.Set_Token('INST_ID', p_csi_item_instance_id);
5145 FND_MSG_PUB.ADD;
5146 CLOSE csi_item_instances_csr;
5147 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5148 ELSIF (trunc(l_active_end_date) < trunc(sysdate)) THEN
5149 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_INST_EXPIRED');
5150 FND_MESSAGE.Set_Token('NUMBER', l_instance_number);
5151 FND_MSG_PUB.ADD;
5152 END IF;
5153 CLOSE csi_item_instances_csr;
5154 END IF;
5155
5156 -- Validate whether contract number + modifier combination exists
5157 -- Validate whether contract modifier is NOT NULL but contract number IS NULL
5158 IF (p_contract_number is not null and p_contract_number <> FND_API.G_MISS_CHAR)
5159 THEN
5160 OPEN contract_number_csr;
5161 FETCH contract_number_csr INTO l_dummy;
5162 IF (contract_number_csr%NOTFOUND)
5163 THEN
5164 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_CONT_NOTFOUND');
5165 FND_MESSAGE.Set_Token('CONTRACT',p_contract_number);
5166 FND_MESSAGE.Set_Token('MODIFIER',p_contract_modifier);
5167 FND_MSG_PUB.ADD;
5168 END IF;
5169 CLOSE contract_number_csr;
5170 ELSIF (p_contract_modifier IS NOT NULL and p_contract_modifier <> FND_API.G_MISS_CHAR)
5171 THEN
5172 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_CONT_MOD_INV');
5173 FND_MESSAGE.Set_Token('MODIFIER',p_contract_modifier);
5174 FND_MSG_PUB.ADD;
5175 END IF;
5176
5177 -- Validate for too many params(any combination of 2 is an issue)
5178 IF (
5179 (p_mr_header_id IS NOT NULL AND p_csi_item_instance_id IS NOT NULL)
5180 OR
5181 (
5182 (p_mr_header_id IS NOT NULL or p_csi_item_instance_id IS NOT NULL)
5183 and
5184 p_contract_number IS NOT NULL
5185 )
5186 )
5187 THEN
5188 FND_MESSAGE.Set_Name('AHL','AHL_UMP_PUE_PM_INPUT_INVALID');
5189 FND_MSG_PUB.ADD;
5190 END IF;
5191 END Validate_PM_Input_Parameters;
5192 -- Tamal: Bug #4207212, #4114368 End
5193 -- AMSRINIV: Bug #4360784. End
5194
5195 -- Procedure to mark a UE record as MR-Terminated.
5196 PROCEDURE MR_Terminate(p_unit_effectivity_id IN NUMBER) IS
5197
5198 CURSOR get_unit_effectivity_csr(p_ue_id IN NUMBER) IS
5199 SELECT
5200 OBJECT_VERSION_NUMBER,
5201 CSI_ITEM_INSTANCE_ID,
5202 MR_INTERVAL_ID,
5203 MR_EFFECTIVITY_ID,
5204 MR_HEADER_ID,
5205 STATUS_CODE,
5206 ACCOMPLISHED_DATE,
5207 DUE_DATE,
5208 DUE_COUNTER_VALUE,
5209 FORECAST_SEQUENCE,
5210 REPETITIVE_MR_FLAG,
5211 TOLERANCE_FLAG,
5212 REMARKS,
5213 MESSAGE_CODE,
5214 PRECEDING_UE_ID,
5215 DATE_RUN,
5216 SET_DUE_DATE,
5217 SERVICE_LINE_ID,
5218 PROGRAM_MR_HEADER_ID,
5219 CANCEL_REASON_CODE,
5220 EARLIEST_DUE_DATE,
5221 LATEST_DUE_DATE,
5222 DEFER_FROM_UE_ID,
5223 CS_INCIDENT_ID,
5224 QA_COLLECTION_ID,
5225 ORIG_DEFERRAL_UE_ID,
5226 APPLICATION_USG_CODE,
5227 OBJECT_TYPE,
5228 COUNTER_ID,
5229 MANUALLY_PLANNED_FLAG,
5230 LOG_SERIES_CODE,
5231 LOG_SERIES_NUMBER,
5232 FLIGHT_NUMBER,
5233 MEL_CDL_TYPE_CODE,
5234 POSITION_PATH_ID,
5235 ATA_CODE,
5236 UNIT_CONFIG_HEADER_ID,
5237 ATTRIBUTE_CATEGORY,
5238 ATTRIBUTE1,
5239 ATTRIBUTE2,
5240 ATTRIBUTE3,
5241 ATTRIBUTE4,
5242 ATTRIBUTE5,
5243 ATTRIBUTE6,
5244 ATTRIBUTE7,
5245 ATTRIBUTE8,
5246 ATTRIBUTE9,
5247 ATTRIBUTE10,
5248 ATTRIBUTE11,
5249 ATTRIBUTE12,
5250 ATTRIBUTE13,
5251 ATTRIBUTE14,
5252 ATTRIBUTE15
5253 FROM AHL_UNIT_EFFECTIVITIES_APP_V
5254 WHERE unit_effectivity_id = p_ue_id
5255 FOR UPDATE OF OBJECT_VERSION_NUMBER;
5256
5257 l_ue_rec get_unit_effectivity_csr%rowtype;
5258
5259 BEGIN
5260 IF G_DEBUG='Y' THEN
5261 AHL_DEBUG_PUB.debug('MR-Terminating UE record with ue_id ' || p_unit_effectivity_id, 'UMP');
5262 END IF;
5263
5264 OPEN get_unit_effectivity_csr(p_unit_effectivity_id);
5265 FETCH get_unit_effectivity_csr INTO l_ue_rec;
5266 CLOSE get_unit_effectivity_csr;
5267
5268 l_ue_rec.STATUS_CODE := 'MR-TERMINATE';
5269 l_ue_rec.MESSAGE_CODE := 'TERMINATE-W-NEW-REV';
5270 l_ue_rec.ACCOMPLISHED_DATE := SYSDATE;
5271
5272 -- Call Table Handler to update record
5273 AHL_UNIT_EFFECTIVITIES_PKG.update_row(
5274 x_unit_effectivity_id => p_unit_effectivity_id,
5275 x_csi_item_instance_id => l_ue_rec.CSI_ITEM_INSTANCE_ID,
5276 x_mr_interval_id => l_ue_rec.MR_INTERVAL_ID,
5277 x_mr_effectivity_id => l_ue_rec.MR_EFFECTIVITY_ID,
5278 x_mr_header_id => l_ue_rec.MR_HEADER_ID,
5279 x_status_code => l_ue_rec.STATUS_CODE,
5280 x_due_date => null,
5281 x_due_counter_value => null,
5282 x_forecast_sequence => null,
5283 x_repetitive_mr_flag => null,
5284 x_tolerance_flag => null,
5285 x_remarks => l_ue_rec.REMARKS,
5286 x_message_code => l_ue_rec.message_code,
5287 x_preceding_ue_id => l_ue_rec.PRECEDING_UE_ID,
5288 x_date_run => l_ue_rec.DATE_RUN,
5289 x_set_due_date => l_ue_rec.SET_DUE_DATE,
5290 x_accomplished_date => TRUNC(sysdate),
5291 x_service_line_id => l_ue_rec.service_line_id,
5292 x_program_mr_header_id => l_ue_rec.program_mr_header_id,
5293 x_cancel_reason_code => l_ue_rec.cancel_reason_code,
5294 x_earliest_due_date => l_ue_rec.earliest_due_date,
5295 x_latest_due_date => l_ue_rec.latest_due_date,
5296 x_defer_from_ue_id => l_ue_rec.defer_from_ue_id,
5297 x_qa_collection_id => l_ue_rec.qa_collection_id,
5298 x_orig_deferral_ue_id => l_ue_rec.orig_deferral_ue_id,
5299 x_cs_incident_id => l_ue_rec.cs_incident_id,
5300 x_application_usg_code => l_ue_rec.application_usg_code,
5301 x_object_type => l_ue_rec.object_type,
5302 x_counter_id => l_ue_rec.counter_id,
5303 x_manually_planned_flag => l_ue_rec.manually_planned_flag,
5304 X_LOG_SERIES_CODE => l_ue_rec.log_series_code,
5305 X_LOG_SERIES_NUMBER => l_ue_rec.log_series_number,
5306 X_FLIGHT_NUMBER => l_ue_rec.flight_number,
5307 X_MEL_CDL_TYPE_CODE => l_ue_rec.mel_cdl_type_code,
5308 X_POSITION_PATH_ID => l_ue_rec.position_path_id,
5309 X_ATA_CODE => l_ue_rec.ATA_CODE,
5310 X_UNIT_CONFIG_HEADER_ID => l_ue_rec.unit_config_header_id,
5311 x_attribute_category => l_ue_rec.ATTRIBUTE_CATEGORY,
5312 x_attribute1 => l_ue_rec.ATTRIBUTE1,
5313 x_attribute2 => l_ue_rec.ATTRIBUTE2,
5314 x_attribute3 => l_ue_rec.ATTRIBUTE3,
5315 x_attribute4 => l_ue_rec.ATTRIBUTE4,
5316 x_attribute5 => l_ue_rec.ATTRIBUTE5,
5317 x_attribute6 => l_ue_rec.ATTRIBUTE6,
5318 x_attribute7 => l_ue_rec.ATTRIBUTE7,
5319 x_attribute8 => l_ue_rec.ATTRIBUTE8,
5320 x_attribute9 => l_ue_rec.ATTRIBUTE9,
5321 x_attribute10 => l_ue_rec.ATTRIBUTE10,
5322 x_attribute11 => l_ue_rec.ATTRIBUTE11,
5323 x_attribute12 => l_ue_rec.ATTRIBUTE12,
5324 x_attribute13 => l_ue_rec.ATTRIBUTE13,
5325 x_attribute14 => l_ue_rec.ATTRIBUTE14,
5326 x_attribute15 => l_ue_rec.ATTRIBUTE15,
5327 x_object_version_number => l_ue_rec.OBJECT_VERSION_NUMBER + 1,
5328 x_last_update_date => TRUNC(sysdate),
5329 x_last_updated_by => fnd_global.user_id,
5330 x_last_update_login => fnd_global.login_id);
5331
5332
5333 END MR_Terminate;
5334
5335 -- Tamal: Bug #4207212, #4114368 Begin
5336 PROCEDURE Building_PM_Unit_Effectivities (
5337 errbuf OUT NOCOPY VARCHAR2,
5338 retcode OUT NOCOPY NUMBER,
5339 p_api_version IN NUMBER,
5340 p_mr_header_id IN NUMBER := NULL,
5341 p_csi_item_instance_id IN NUMBER := NULL,
5342 p_contract_number IN VARCHAR2 := NULL,
5343 p_contract_modifier IN VARCHAR2 := NULL,
5344 p_num_of_workers IN NUMBER := 1
5345 )
5346 IS
5347
5348 l_return_status VARCHAR2(30);
5349 l_msg_count NUMBER;
5350
5351 l_api_name VARCHAR2(30) := 'Building_PM_Unit_Effectivities';
5352 l_api_version NUMBER := 1.0;
5353
5354 BEGIN
5355
5356 -- Initialize error message stack by default
5357 FND_MSG_PUB.Initialize;
5358
5359 -- Standard call to check for call compatibility
5360 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME)
5361 THEN
5362 retcode := 2;
5363 errbuf := FND_MSG_PUB.Get;
5364
5365 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5366 END IF;
5367
5368 Build_UnitEffectivity (
5369 p_init_msg_list => FND_API.G_TRUE,
5370 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5371 p_default => FND_API.G_TRUE,
5372 p_module_type => NULL,
5373 x_return_status => l_return_status,
5374 x_msg_count => l_msg_count,
5375 x_msg_data => errbuf,
5376 p_mr_header_id => p_mr_header_id,
5377 p_csi_item_instance_id => p_csi_item_instance_id,
5378 p_contract_number => p_contract_number,
5379 p_contract_modifier => p_contract_modifier,
5380 p_concurrent_flag => 'Y'
5381 );
5382
5383 l_msg_count := FND_MSG_PUB.Count_Msg;
5384 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
5385 THEN
5386 retcode := 2; -- error based only on return status
5387 ELSIF (l_msg_count > 0 AND l_return_status = FND_API.G_RET_STS_SUCCESS)
5388 THEN
5389 retcode := 1; -- warning based on return status + msg count
5390 ELSE
5391 retcode := 0; -- success, since nothing is wrong
5392 END IF;
5393 END Building_PM_Unit_Effectivities;
5394 -- Tamal: Bug #4207212, #4114368 End
5395
5396 -- SATHAPLI::Bug# 6504069, 26-Mar-2008
5397 -- API to build the unit effectivities for all the attached units for a given PC.
5398 -- The API is configured as the concurrent program AHLPCUEFF.
5399 PROCEDURE Building_PC_Unit_Effectivities (
5400 errbuf OUT NOCOPY VARCHAR2,
5401 retcode OUT NOCOPY NUMBER,
5402 p_api_version IN NUMBER,
5403 p_pc_header_id IN NUMBER
5404 ) IS
5405
5406 CURSOR check_for_pc_csr (c_pc_header_id NUMBER) IS
5407 SELECT 'X'
5408 FROM ahl_pc_headers_b
5409 WHERE pc_header_id = c_pc_header_id
5410 AND status = 'COMPLETE';
5411
5412 CURSOR get_mr_for_pc_csr (c_pc_header_id NUMBER) IS
5413 SELECT mrh.mr_header_id, mre.mr_effectivity_id
5414 FROM ahl_mr_headers_b mrh, ahl_mr_effectivities mre,
5415 ahl_pc_nodes_b pcn
5416 WHERE mrh.mr_header_id = mre.mr_header_id
5417 AND mre.pc_node_id = pcn.pc_node_id
5418 AND pcn.pc_header_id = c_pc_header_id
5419 AND TRUNC(NVL(mrh.effective_to, SYSDATE+1)) > TRUNC(SYSDATE);
5420
5421 --
5422 l_return_status VARCHAR2(30);
5423 l_msg_count NUMBER;
5424
5425 l_api_version NUMBER := 1.0;
5426 l_api_name CONSTANT VARCHAR2(30) := 'Building_PC_Unit_Effectivities';
5427 l_full_name CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
5428
5429 TYPE MR_ITM_INST_TBL_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
5430
5431 l_pc_mr_item_inst_tbl MR_ITM_INST_TBL_TYPE;
5432 l_get_mr_for_pc_rec get_mr_for_pc_csr%ROWTYPE;
5433 l_mr_item_inst_tbl AHL_FMP_PVT.MR_ITEM_INSTANCE_TBL_TYPE;
5434 indx NUMBER;
5435 l_dummy VARCHAR2(1);
5436 --
5437
5438 BEGIN
5439 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5440 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,l_full_name,'Start of the API');
5441 END IF;
5442
5443 -- initialize error message stack
5444 FND_MSG_PUB.Initialize;
5445
5446 -- standard call to check for call compatibility
5447 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version,
5448 l_api_name, G_PKG_NAME) THEN
5449 IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
5450 FND_LOG.string(FND_LOG.level_statement,l_full_name,
5451 ' Incompatible call. Raising exception.');
5452 END IF;
5453
5454 retcode := 2;
5455 errbuf := FND_MSG_PUB.Get;
5456 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5457 END IF;
5458
5459 -- check for pc_header_id validity
5460 OPEN check_for_pc_csr(p_pc_header_id);
5461 FETCH check_for_pc_csr INTO l_dummy;
5462 IF check_for_pc_csr%NOTFOUND THEN
5463 IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
5464 FND_LOG.string(FND_LOG.level_statement,l_full_name,
5465 ' Invalid PC');
5466 END IF;
5467
5468 CLOSE check_for_pc_csr;
5469 -- invalid pc_header_id
5470 FND_MESSAGE.Set_Name('AHL','AHL_PC_NOT_FOUND');
5471 FND_MSG_PUB.ADD;
5472
5473 retcode := 2;
5474 errbuf := FND_MSG_PUB.Get;
5475 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5476 END IF;
5477 CLOSE check_for_pc_csr;
5478
5479 -- get all the applicable MRs for the PC
5480 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5481 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,l_full_name,
5482 ' p_pc_header_id => '||p_pc_header_id);
5483 END IF;
5484
5485 OPEN get_mr_for_pc_csr(p_pc_header_id);
5486 LOOP
5487 FETCH get_mr_for_pc_csr INTO l_get_mr_for_pc_rec;
5488 EXIT WHEN get_mr_for_pc_csr%NOTFOUND;
5489
5490 -- get the top level applicable instances for the MR
5491 AHL_FMP_PVT.GET_MR_AFFECTED_ITEMS(
5492 p_api_version => 1.0,
5493 p_init_msg_list => FND_API.G_FALSE,
5494 p_commit => FND_API.G_FALSE,
5495 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5496 x_return_status => l_return_status,
5497 x_msg_count => l_msg_count,
5498 x_msg_data => errbuf,
5499 p_mr_header_id => l_get_mr_for_pc_rec.mr_header_id,
5500 p_mr_effectivity_id => l_get_mr_for_pc_rec.mr_effectivity_id,
5501 p_top_node_flag => 'Y',
5502 p_unique_inst_flag => 'Y',
5503 x_mr_item_inst_tbl => l_mr_item_inst_tbl);
5504
5505 -- check for the return status
5506 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5507 IF (FND_LOG.level_statement >= FND_LOG.g_current_runtime_level) THEN
5508 FND_LOG.string(FND_LOG.level_statement,l_full_name,
5509 ' Raising exception with x_return_status => '||l_return_status);
5510 END IF;
5511
5512 retcode := 2;
5513 errbuf := FND_MSG_PUB.Get;
5514
5515 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5516 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5517 ELSE
5518 RAISE FND_API.G_EXC_ERROR;
5519 END IF;
5520 END IF;
5521
5522 -- populate the associative array of instances for the PC
5523 IF (l_mr_item_inst_tbl.COUNT > 0) THEN
5524 FOR i IN l_mr_item_inst_tbl.FIRST..l_mr_item_inst_tbl.LAST LOOP
5525 indx := l_mr_item_inst_tbl(i).item_instance_id;
5526 l_pc_mr_item_inst_tbl(indx) := l_mr_item_inst_tbl(i).item_instance_id;
5527 END LOOP;
5528 END IF;
5529 END LOOP;
5530 CLOSE get_mr_for_pc_csr;
5531
5532 -- put all the applicable instances for the PC in the debug logs
5533 indx := l_pc_mr_item_inst_tbl.FIRST;
5534 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5535 WHILE indx IS NOT NULL LOOP
5536 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,l_full_name,
5537 ' l_pc_mr_item_inst_tbl indx, item_instance_id => '||indx||
5538 ' ,'||l_pc_mr_item_inst_tbl(indx));
5539 indx := l_pc_mr_item_inst_tbl.NEXT(indx);
5540 END LOOP;
5541 END IF;
5542
5543 -- for each of the top level instances fetched in l_pc_mr_item_inst_tbl above, call the API Build_UnitEffectivity
5544 indx := l_pc_mr_item_inst_tbl.FIRST;
5545 WHILE indx IS NOT NULL LOOP
5546 -- call the API Build_UnitEffectivity
5547 Build_UnitEffectivity (
5548 p_init_msg_list => FND_API.G_TRUE,
5549 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5550 p_default => FND_API.G_TRUE,
5551 p_module_type => NULL,
5552 x_return_status => l_return_status,
5553 x_msg_count => l_msg_count,
5554 x_msg_data => errbuf,
5555 p_csi_item_instance_id => l_pc_mr_item_inst_tbl(indx),
5556 p_concurrent_flag => 'Y');
5557
5558 l_msg_count := FND_MSG_PUB.Count_Msg;
5559 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5560 -- error based only on return status
5561 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5562 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,l_full_name,
5563 ' Build_UnitEffectivity failed for l_pc_mr_item_inst_tbl(indx) => '||
5564 l_pc_mr_item_inst_tbl(indx));
5565 END IF;
5566
5567 retcode := 2;
5568 EXIT; -- stop building unit effectivities for rest of the instances
5569 ELSIF (l_msg_count > 0 AND l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
5570 -- warning based on return status + msg count
5571 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5572 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,l_full_name,
5573 ' Build_UnitEffectivity had warnings for l_pc_mr_item_inst_tbl(indx) => '||
5574 l_pc_mr_item_inst_tbl(indx));
5575 END IF;
5576
5577 retcode := 1;
5578 ELSE
5579 -- success, since nothing is wrong
5580 retcode := 0;
5581 END IF;
5582
5583 indx := l_pc_mr_item_inst_tbl.NEXT(indx);
5584 END LOOP;
5585
5586 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5587 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,l_full_name,'End of the API');
5588 END IF;
5589
5590 END Building_PC_Unit_Effectivities;
5591
5592 --------------------------------------------------------------------------
5593 -- To log error messages into a log file if called from concurrent process.
5594 -- fix for bug#3602277
5595 ---------------------------------------------------------------------------
5596
5597 PROCEDURE log_error_messages IS
5598
5599 l_msg_count NUMBER;
5600 l_msg_index_out NUMBER;
5601 l_msg_data VARCHAR2(2000);
5602
5603 BEGIN
5604
5605 IF G_DEBUG = 'Y' THEN
5606 AHL_DEBUG_PUB.Debug('Start log error messages');
5607 END IF;
5608
5609 -- Standard call to get message count.
5610 l_msg_count := FND_MSG_PUB.Count_Msg;
5611
5612 FOR i IN 1..l_msg_count LOOP
5613 FND_MSG_PUB.get (
5614 p_msg_index => i,
5615 p_encoded => FND_API.G_FALSE,
5616 p_data => l_msg_data,
5617 p_msg_index_out => l_msg_index_out );
5618
5619 fnd_file.put_line(FND_FILE.LOG, 'Err message-'||l_msg_index_out||':' || l_msg_data);
5620 IF G_DEBUG = 'Y' THEN
5621 AHL_DEBUG_PUB.Debug('Err message-'||l_msg_index_out||':' || substr(l_msg_data,1,240));
5622 END IF;
5623
5624 END LOOP;
5625
5626 IF G_DEBUG = 'Y' THEN
5627 AHL_DEBUG_PUB.Debug('Start log error messages');
5628 END IF;
5629
5630
5631 END log_error_messages;
5632 -------------------------------
5633 -- End Local Procedures --
5634 -------------------------------
5635
5636 END AHL_UMP_UNITMAINT_PVT;