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