[Home] [Help]
PACKAGE BODY: APPS.AHL_PRD_DF_PVT
Source
1 PACKAGE BODY AHL_PRD_DF_PVT AS
2 /* $Header: AHLVPDFB.pls 120.27.12020000.2 2012/12/07 07:48:59 sareepar ship $ */
3 -- Package/App Name
4 G_PKG_NAME CONSTANT VARCHAR(30) := 'AHL_PRD_DF_PVT';
5 G_APP_NAME CONSTANT VARCHAR2(3) := 'AHL';
6
7 G_OP_SUBMIT_FOR_APPROVAL BOOLEAN := false;
8 G_MODULE_TYPE VARCHAR2(30) := 'JSP';
9
10 -- job statuses
11 G_JOB_UNRELEASED CONSTANT VARCHAR2(30) := '1';
12 G_JOB_RELEASED CONSTANT VARCHAR2(30) := '3';
13 G_JOB_CLOSED CONSTANT VARCHAR2(30) := '12';
14 G_JOB_DRAFT CONSTANT VARCHAR2(30) := '17';
15 G_JOB_PARTS_HOLD CONSTANT VARCHAR2(30) := '19';
16 G_JOB_COMPLETE CONSTANT VARCHAR2(30) := '4';
17 G_JOB_COMPLETE_NC CONSTANT VARCHAR2(30) := '5';
18 G_JOB_ON_HOLD CONSTANT VARCHAR2(30) := '6';
19 G_JOB_CANCELLED CONSTANT VARCHAR2(30) := '7';
20 G_JOB_PEND_DFR_APPR CONSTANT VARCHAR2(30) := '21';
21 G_JOB_PEND_QA_APPR CONSTANT VARCHAR2(20) := '20';
22 G_JOB_DELETED CONSTANT VARCHAR2(30) := '22';
23
24 -- approval actions
25 G_DEFERRAL_INITIATED CONSTANT VARCHAR2(1) := 'I';
26 G_DEFERRAL_REJECTED CONSTANT VARCHAR2(1) := 'R';
27 G_DEFERRAL_APPROVED CONSTANT VARCHAR2(1) := 'A';
28 G_DEFERRAL_ERROR CONSTANT VARCHAR2(1) := 'E';
29
30 ------------------------------------------------------------------------------------
31 -- Declare Procedures --
32 ------------------------------------------------------------------------------------
33 -- Internal procedure that this API uses For procedures defined in specs of this API
34 ------------------------------------------------------------------------------------
35 PROCEDURE process_df_header(
36 p_x_df_header_rec IN OUT NOCOPY AHL_PRD_DF_PVT.df_header_rec_type);
37
38 PROCEDURE log_df_header(
39 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type);
40
41 PROCEDURE validate_df_header(
42 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type);
43
44 PROCEDURE validate_reason_codes(
45 p_defer_reason_code IN VARCHAR2);
46
47 PROCEDURE default_unchanged_df_header(
48 p_x_df_header_rec IN OUT NOCOPY AHL_PRD_DF_PVT.df_header_rec_type);
49
50 PROCEDURE process_df_schedules(
51 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type,
52 p_x_df_schedules_tbl IN OUT NOCOPY AHL_PRD_DF_PVT.df_schedules_tbl_type);
53
54 PROCEDURE log_df_schedules(
55 p_df_schedules_tbl IN AHL_PRD_DF_PVT.df_schedules_tbl_type);
56
57 PROCEDURE validate_df_schedules(
58 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type,
59 p_df_schedules_tbl IN AHL_PRD_DF_PVT.df_schedules_tbl_type);
60
61 PROCEDURE default_unchanged_df_schedules(
62 p_x_df_schedules_tbl IN OUT NOCOPY AHL_PRD_DF_PVT.df_schedules_tbl_type);
63
64 PROCEDURE validate_deferral_updates(
65 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type,
66 x_warning_msg_data OUT NOCOPY VARCHAR2);
67
68 /* R12: moved to spec.
69 PROCEDURE process_approval_initiated (
70 p_unit_deferral_id IN NUMBER,
71 p_object_version_number IN NUMBER,
72 p_new_status IN VARCHAR2,
73 x_return_status OUT NOCOPY VARCHAR2);
74 */
75
76 PROCEDURE submit_for_approval(
77 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type);
78
79 FUNCTION valid_for_submission(
80 p_unit_effectivity_id IN NUMBER) RETURN BOOLEAN;
81
82 FUNCTION get_applicable_ue(p_unit_effectivity_id IN NUMBER)RETURN NUMBER;
83
84 PROCEDURE process_workorders(
85 p_unit_deferral_id IN NUMBER,
86 p_object_version_number IN NUMBER,
87 p_approval_result_code IN VARCHAR2,
88 x_return_status OUT NOCOPY VARCHAR2);
89
90 PROCEDURE process_unit_maint_plan(
91 p_unit_deferral_id IN NUMBER,
92 p_object_version_number IN NUMBER,
93 p_approval_result_code IN VARCHAR2,
94 p_new_status IN VARCHAR2,
95 x_return_status OUT NOCOPY VARCHAR2);
96
97 PROCEDURE process_prior_ump_deferrals(
98 p_unit_effectivity_id IN NUMBER);
99
100 PROCEDURE calculate_due_date(
101 x_return_status OUT NOCOPY VARCHAR2,
102 p_csi_item_instance_id IN NUMBER);
103
104
105 FUNCTION getLastStatus(p_workorder_id IN NUMBER) RETURN VARCHAR2;
106
107 FUNCTION isValidStatusUpdate(
108 operation_code VARCHAR2,
109 status_code VARCHAR2)RETURN BOOLEAN;
110
111 -- function to check if source of deferral is UMP or Production.
112 FUNCTION Is_UMP_Deferral(p_unit_deferral_id IN NUMBER) RETURN BOOLEAN;
113
114 -- function to get Counter/UOM Remain.
115 FUNCTION get_uom_remain(p_unit_effectivity_id IN NUMBER) RETURN VARCHAR2;
116
117 -- JKJain, NR Analysis and Forecasting
118 FUNCTION get_fleet_from_effectivity(p_unit_effectivity_id IN NUMBER) RETURN NUMBER;
119
120 -- ------------------------------------------------------------------------------------------------
121 -- Procedure name : process_deferral
122 -- Type : private
123 -- Function :
124 -- Pre-reqs :
125 -- Parameters :
126 --
127 -- Standard IN Parameters :
128 -- p_api_version IN NUMBER Default 1.0
129 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_TRUE
130 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
131 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
132 -- Standard OUT Parameters :
133 -- x_return_status OUT VARCHAR2 Required
134 -- x_msg_count OUT NUMBER Required
135 -- x_msg_data OUT VARCHAR2 Required
136 --
137 -- p_module_type IN VARCHAR2 Required.
138 --
139 -- This parameter indicates the front-end form interface. The default value is 'JSP'. If the value
140 -- is JSP, then this API clears out all id columns and validations are done using the values based
141 -- on which the Id's are populated.
142 --
143 -- process_deferral Parameters:
144 --
145 --
146 --
147 --
148 -- Version :
149 -- Initial Version 1.0
150 --
151 -- End of Comments.
152
153 PROCEDURE process_deferral(
154 p_api_version IN NUMBER := 1.0,
155 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
156 p_commit IN VARCHAR2 := FND_API.G_FALSE,
157 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
158 p_module_type IN VARCHAR2 := NULL,
159 p_x_df_header_rec IN OUT NOCOPY AHL_PRD_DF_PVT.df_header_rec_type,
160 p_x_df_schedules_tbl IN OUT NOCOPY AHL_PRD_DF_PVT.df_schedules_tbl_type,
161 x_return_status OUT NOCOPY VARCHAR2,
162 x_msg_count OUT NOCOPY NUMBER,
163 x_msg_data OUT NOCOPY VARCHAR2) IS
164
165 l_api_version CONSTANT NUMBER := 1.0;
166 l_api_name CONSTANT VARCHAR2(30) := 'process_deferral';
167 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
168 l_warning_msg_data VARCHAR2(4000);
169
170 BEGIN
171 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
172 fnd_log.string
173 (
174 fnd_log.level_procedure,
175 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral.begin',
176 'At the start of PLSQL procedure'
177 );
178 END IF;
179 -- Standard start of API savepoint
180 SAVEPOINT process_deferral;
181
182 -- Standard call to check for call compatibility
183 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version,l_api_name, G_PKG_NAME ) THEN
184 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
185 END IF;
186 -- setting up module type
187 G_MODULE_TYPE := p_module_type;
188 -- Initialize message list if p_init_msg_list is set to TRUE
189 IF FND_API.To_Boolean( p_init_msg_list) THEN
190 FND_MSG_PUB.Initialize;
191 END IF;
192
193 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
194 fnd_log.string
195 (
196 fnd_log.level_statement,
197 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
198 'p_init_message_list : ' || p_init_msg_list
199 );
200 fnd_log.string
201 (
202 fnd_log.level_statement,
203 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
204 'p_commit : ' || p_commit
205 );
206 fnd_log.string
207 (
208 fnd_log.level_statement,
209 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
210 'p_validation_level : ' || p_validation_level
211 );
212 fnd_log.string
213 (
214 fnd_log.level_statement,
215 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
216 'p_module_type : ' || p_module_type
217 );
218 END IF;
219 -- Initialize API return status to success
220 x_return_status := FND_API.G_RET_STS_SUCCESS;
221
222 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
223 fnd_log.string
224 (
225 fnd_log.level_statement,
226 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
227 'Logging deferral header record prior to processing'
228 );
229 log_df_header(p_df_header_rec => p_x_df_header_rec);
230 END IF;
231
232 process_df_header(
233 p_x_df_header_rec => p_x_df_header_rec
234 );
235
236 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
237 fnd_log.string
238 (
239 fnd_log.level_statement,
240 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
241 'Logging deferral header record after processing'
242 );
243 log_df_header(p_df_header_rec => p_x_df_header_rec);
244 END IF;
245
246
247 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
248 fnd_log.string
249 (
250 fnd_log.level_statement,
251 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
252 'Number of records in schedules : ' || p_x_df_schedules_tbl.count
253 );
254 fnd_log.string
255 (
256 fnd_log.level_statement,
257 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
258 'Logging deferral schedule records before processing'
259 );
260 IF(p_x_df_schedules_tbl.count > 0)THEN
261 log_df_schedules(p_df_schedules_tbl => p_x_df_schedules_tbl);
262 END IF;
263 END IF;
264
265 -- PROCESS deferral schedules
266 IF (p_x_df_schedules_tbl.count > 0 AND
267 (p_x_df_header_rec.skip_mr_flag = G_NO_FLAG AND p_x_df_header_rec.cancel_flag = G_NO_FLAG) AND
268 (p_x_df_header_rec.operation_flag IS NULL OR
269 p_x_df_header_rec.operation_flag IN (G_OP_CREATE,G_OP_UPDATE))) THEN
270 process_df_schedules(
271 p_df_header_rec => p_x_df_header_rec,
272 p_x_df_schedules_tbl => p_x_df_schedules_tbl
273 );
274 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
275 fnd_log.string
276 (
277 fnd_log.level_statement,
278 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
279 'Logging deferral schedule records after processing'
280 );
281 log_df_schedules(p_df_schedules_tbl => p_x_df_schedules_tbl);
282 END IF;
283 END IF;
284
285 -- validating the updates as a whole
286 IF((p_x_df_header_rec.skip_mr_flag = G_NO_FLAG AND p_x_df_header_rec.cancel_flag = G_NO_FLAG)
287 AND (p_x_df_header_rec.operation_flag IS NULL OR
288 p_x_df_header_rec.operation_flag IN (G_OP_CREATE,G_OP_UPDATE))) THEN
289 validate_deferral_updates(
290 p_df_header_rec => p_x_df_header_rec,
291 x_warning_msg_data => l_warning_msg_data
292 );
293 END IF;
294
295 IF G_OP_SUBMIT_FOR_APPROVAL THEN
296 IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)THEN
297 fnd_log.string
298 (
299 fnd_log.level_event,
300 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral',
301 'Submitting for Aprroval Unit Deferral ID : ' || p_x_df_header_rec.unit_deferral_id ||
302 ' Object Version Number : ' || p_x_df_header_rec.object_version_number
303 );
304 END IF;
305 submit_for_approval(
306 p_df_header_rec => p_x_df_header_rec
307 );
308 END IF;
309
310 -- Check Error Message stack.
311 x_msg_count := FND_MSG_PUB.count_msg;
312 IF x_msg_count > 0 THEN
313 RAISE FND_API.G_EXC_ERROR;
314 END IF;
315
316 -- Standard check of p_commit
317 IF FND_API.TO_BOOLEAN(p_commit) THEN
318 COMMIT WORK;
319 END IF;
320
321
322
323 -- Standard call to get message count and if count is 1, get message info
324 FND_MSG_PUB.Count_And_Get
325 ( p_count => x_msg_count,
326 p_data => x_msg_data,
327 p_encoded => fnd_api.g_false
328 );
329 IF(x_msg_count = 0 AND l_warning_msg_data IS NOT NULL)THEN
330 x_msg_count := 1;
331 x_msg_data := l_warning_msg_data;
332 END IF;
333
334 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
335 fnd_log.string
336 (
337 fnd_log.level_procedure,
338 'ahl.plsql.AHL_PRD_DF_PVT.process_deferral.end',
339 'At the end of PLSQL procedure'
340 );
341 END IF;
342
343 EXCEPTION
344 WHEN FND_API.G_EXC_ERROR THEN
345 Rollback to process_deferral;
346 x_return_status := FND_API.G_RET_STS_ERROR;
347 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
348 p_data => x_msg_data,
349 p_encoded => fnd_api.g_false);
350
351
352 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
353 Rollback to process_deferral;
354 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
355 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
356 p_data => x_msg_data,
357 p_encoded => fnd_api.g_false);
358
359
360 WHEN OTHERS THEN
361 Rollback to process_deferral;
362 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
363 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
364 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
365 p_procedure_name => l_api_name,
366 p_error_text => SUBSTR(SQLERRM,1,500));
367 END IF;
368 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
369 p_data => x_msg_data,
370 p_encoded => fnd_api.g_false);
371 END process_deferral;
372
373 -------------------------------------------------------------------------------------
374 -- procedure processes the header information
375 -- handle dml updates to the deferral context information
376 -- Note : Value to id conversion is done only for unit_effectivity_id and unit_deferral_type to fetch
377 -- the unit_deferral_id. Hence no validation level check and no sperate procedure for value
378 -- to id conversion process.
379 -------------------------------------------------------------------------------------
380 PROCEDURE process_df_header(
381 p_x_df_header_rec IN OUT NOCOPY AHL_PRD_DF_PVT.df_header_rec_type)
382 IS
383
384 l_rowid VARCHAR2(30);
385
386 CURSOR unit_deferral_id_csr(p_unit_effectivity_id In NUMBER) IS
387 SELECT unit_deferral_id, object_version_number
388 from ahl_unit_deferrals_b
389 WHERE unit_deferral_type = 'DEFERRAL'
390 AND unit_effectivity_id = p_unit_effectivity_id;
391
392 l_unit_deferral_id NUMBER;
393 l_object_version_number NUMBER;
394 l_input_key_error_flag BOOLEAN := false;
395
396 /*
397 * Application usage code AND condition has been added to resolve all application usage code related issues here
398 * in the cursor select of "unit_effectivity_info_csr".
399 * Here onwards in this program we dont have to worry about any app usage code related issues.
400 */
401
402 CURSOR unit_effectivity_info_csr(p_unit_effectivity_id IN NUMBER) IS
403 SELECT mr_header_id,cs_incident_id,repetitive_mr_flag,orig_deferral_ue_id,ue_status_code,
404 def_status_code,manually_planned_flag
405 FROM ahl_ue_deferral_details_v
406 WHERE unit_effectivity_id = p_unit_effectivity_id
407 AND APPLICATION_USG_CODE = RTRIM(LTRIM(FND_PROFILE.VALUE('AHL_APPLN_USAGE'))) ;
408
409 l_mr_header_id NUMBER;
410 l_incident_id NUMBER;
411 l_orig_deferral_ue_id NUMBER;
412 l_ue_status_code VARCHAR2(30);
413 l_def_status_code VARCHAR2(30);
414 l_repetitive_mr_flag VARCHAR2(1);
415 l_manually_planned_flag VARCHAR2(1);
416
417 -- to check whether MR or any of its children has resettable counters
418 CURSOR reset_counter_csr(p_unit_effectivity_id IN NUMBER) IS
419 --SELECT 'x' from csi_cp_counters_v CP, AHL_MR_INTERVALS_V MRI,AHL_MR_EFFECTIVITIES_APP_V MRE, AHL_UNIT_EFFECTIVITIES_APP_V UE
420 /* In R12, modified to use csi_counters_vl instead of csi_cp_counters_v.
421 SELECT 'x' from csi_cp_counters_v CP, AHL_MR_INTERVALS_V MRI,AHL_MR_EFFECTIVITIES MRE, AHL_UNIT_EFFECTIVITIES_B UE
422 WHERE CP.customer_product_id = UE.csi_item_instance_id
423 AND CP.counter_name = MRI.counter_name
424 AND MRI.reset_value IS NOT NULL
425 AND MRI.mr_effectivity_id = MRE.mr_effectivity_id
426 AND MRE.mr_header_id = UE.mr_header_id
427 AND UE.unit_effectivity_id = p_unit_effectivity_id
428 UNION
429 --SELECT 'x' from csi_cp_counters_v CP, AHL_MR_INTERVALS_V MRI, AHL_MR_EFFECTIVITIES_APP_V MRE, AHL_UNIT_EFFECTIVITIES_APP_V UE
430 SELECT 'x' from csi_cp_counters_v CP, AHL_MR_INTERVALS_V MRI,AHL_MR_EFFECTIVITIES MRE, AHL_UNIT_EFFECTIVITIES_B UE
431 WHERE CP.customer_product_id = UE.csi_item_instance_id
432 AND CP.counter_name = MRI.counter_name
433 AND MRI.reset_value IS NOT NULL
434 AND MRI.mr_effectivity_id = MRE.mr_effectivity_id
435 AND MRE.mr_header_id = UE.mr_header_id
436 AND UE.unit_effectivity_id IN
437 (
438
439 SELECT related_ue_id
440 FROM AHL_UE_RELATIONSHIPS
441 WHERE relationship_code = 'PARENT'
442 START WITH ue_id = p_unit_effectivity_id
443 CONNECT BY ue_id = PRIOR related_ue_id
444
445 );
446 */
447 SELECT 'x'
448 from csi_counter_associations ca, csi_counters_vl CP, AHL_MR_INTERVALS_V MRI,
449 AHL_MR_EFFECTIVITIES MRE, AHL_UNIT_EFFECTIVITIES_B UE
450 WHERE CA.source_object_id = UE.csi_item_instance_id
451 AND ca.source_object_code = 'CP'
452 AND CP.counter_template_name = MRI.counter_name
453 AND MRI.reset_value IS NOT NULL
454 AND MRI.mr_effectivity_id = MRE.mr_effectivity_id
455 AND MRE.mr_header_id = UE.mr_header_id
456 AND UE.unit_effectivity_id = p_unit_effectivity_id
457 UNION
458 SELECT 'x'
459 from csi_counter_associations ca, csi_counters_vl CP, AHL_MR_INTERVALS_V MRI,
460 AHL_MR_EFFECTIVITIES MRE, AHL_UNIT_EFFECTIVITIES_B UE
461 WHERE CA.source_object_id = UE.csi_item_instance_id
462 AND ca.source_object_code = 'CP'
463 AND CP.counter_template_name = MRI.counter_name
464 AND MRI.reset_value IS NOT NULL
465 AND MRI.mr_effectivity_id = MRE.mr_effectivity_id
466 AND MRE.mr_header_id = UE.mr_header_id
467 AND UE.unit_effectivity_id IN
468 (
469
470 SELECT related_ue_id
471 FROM AHL_UE_RELATIONSHIPS
472 WHERE relationship_code = 'PARENT'
473 START WITH ue_id = p_unit_effectivity_id
474 CONNECT BY ue_id = PRIOR related_ue_id
475
476 );
477
478 l_exists VARCHAR2(1);
479
480
481 BEGIN
482 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
483 fnd_log.string
484 (
485 fnd_log.level_procedure,
486 'ahl.plsql.AHL_PRD_DF_PVT.process_df_header.begin',
487 'At the start of PLSQL procedure'
488 );
489 END IF;
490 -- initializaing submit for approval flag
491 G_OP_SUBMIT_FOR_APPROVAL := false;
492 -- value to id conversion based on unit_effectivity_id
493 IF( p_x_df_header_rec.unit_effectivity_id IS NULL AND
494 (p_x_df_header_rec.unit_deferral_id IS NULL OR p_x_df_header_rec.object_version_number IS NULL))THEN
495 l_input_key_error_flag := true;
496 ELSIF(p_x_df_header_rec.unit_effectivity_id IS NOT NULL)THEN
497 IF(NVL(p_x_df_header_rec.operation_flag,'x') <> G_OP_CREATE)THEN
498 OPEN unit_deferral_id_csr(p_x_df_header_rec.unit_effectivity_id);
499 FETCH unit_deferral_id_csr INTO p_x_df_header_rec.unit_deferral_id,p_x_df_header_rec.object_version_number;
500 IF(unit_deferral_id_csr%NOTFOUND) THEN
501 IF(p_x_df_header_rec.operation_flag = G_OP_SUBMIT)THEN
502 p_x_df_header_rec.operation_flag := G_OP_CREATE;
503 G_OP_SUBMIT_FOR_APPROVAL := TRUE;
504 ELSE
505 l_input_key_error_flag := true;
506 END IF;
507 ELSIF(p_x_df_header_rec.operation_flag = G_OP_SUBMIT)THEN
508 p_x_df_header_rec.operation_flag := G_OP_UPDATE;
509 G_OP_SUBMIT_FOR_APPROVAL := TRUE;
510 END IF;
511 CLOSE unit_deferral_id_csr;
512 END IF;
513 END IF;
514 -- raise error if input keys are wrong.
515 IF(l_input_key_error_flag)THEN
516 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_HREC_KMISS');
517 FND_MSG_PUB.ADD;
518 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
519 fnd_log.string
520 (
521 fnd_log.level_unexpected,
522 'ahl.plsql.AHL_PRD_DF_PVT.process_df_header',
523 'Input Keys are missing or invalid'
524 );
525 END IF;
526 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
527 END IF;
528 -- check whether unit effectivity is valid
529 OPEN unit_effectivity_info_csr(p_x_df_header_rec.unit_effectivity_id);
530 FETCH unit_effectivity_info_csr INTO l_mr_header_id,
531 l_incident_id,
532 l_repetitive_mr_flag,
533 l_orig_deferral_ue_id,
534 l_ue_status_code,
535 l_def_status_code,
536 l_manually_planned_flag;
537 IF(unit_effectivity_info_csr%NOTFOUND) THEN
538 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_HREC_UE_ID');
539 FND_MSG_PUB.ADD;
540 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
541 fnd_log.string
542 (
543 fnd_log.level_unexpected,
544 'ahl.plsql.AHL_PRD_DF_PVT.process_df_header',
545 'unit effectivity record not found'
546 );
547 END IF;
548 CLOSE unit_effectivity_info_csr;
549 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
550 ELSE
551 IF(l_orig_deferral_ue_id IS NOT NULL) THEN
552 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_HREC_UE_ID');
553 FND_MSG_PUB.ADD;
554 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
555 fnd_log.string
556 (
557 fnd_log.level_unexpected,
558 'ahl.plsql.AHL_PRD_DF_PVT.process_df_header',
559 'unit effectivity record not found'
560 );
561 END IF;
562 CLOSE unit_effectivity_info_csr;
563 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
564 ELSIF((NVL(l_ue_status_code,'x') IN ('ACCOMPLISHED','DEFERRED','EXCEPTION','TERMINATED','CANCELLED','MR-TERMINATE'))
565 OR (NVL(l_def_status_code,'x')IN ('DEFERRED','DEFERRAL_PENDING','TERMINATED','CANCELLED')))THEN
566 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_MRSR_STATUS');
567 FND_MSG_PUB.ADD;
568 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
569 fnd_log.string
570 (
571 fnd_log.level_error,
572 'ahl.plsql.AHL_PRD_DF_PVT.process_df_header',
573 'Status of MR or SR is not valid for deferral'
574 );
575 END IF;
576 CLOSE unit_effectivity_info_csr;
577 RAISE FND_API.G_EXC_ERROR;
578 ELSE
579 -- filling in additional info
580 IF(l_mr_header_id IS NULL)THEN
581 p_x_df_header_rec.deferral_type := G_DEFERRAL_TYPE_SR;
582 ELSE
583 p_x_df_header_rec.deferral_type := G_DEFERRAL_TYPE_MR;
584 END IF;
585 p_x_df_header_rec.mr_repetitive_flag := NVL(l_repetitive_mr_flag,G_NO_FLAG);
586 p_x_df_header_rec.manually_planned_flag := NVL(l_manually_planned_flag,G_NO_FLAG);
587 p_x_df_header_rec.reset_counter_flag := G_YES_FLAG;
588 p_x_df_header_rec.affect_due_calc_flag := NVL(p_x_df_header_rec.affect_due_calc_flag,G_NO_FLAG);
589 p_x_df_header_rec.skip_mr_flag := NVL(p_x_df_header_rec.skip_mr_flag,G_NO_FLAG);
590 p_x_df_header_rec.cancel_flag := NVL(p_x_df_header_rec.cancel_flag,G_NO_FLAG);
591 IF(p_x_df_header_rec.deferral_type = G_DEFERRAL_TYPE_MR)THEN
592 OPEN reset_counter_csr(p_x_df_header_rec.unit_effectivity_id);
593 FETCH reset_counter_csr INTO l_exists;
594 IF(reset_counter_csr%NOTFOUND)THEN
595 p_x_df_header_rec.reset_counter_flag := G_NO_FLAG;
596 END IF;
597 CLOSE reset_counter_csr;
598 /*
599 ELSE
600 p_x_df_header_rec.skip_mr_flag := G_NO_FLAG;
601 p_x_df_header_rec.affect_due_calc_flag := G_YES_FLAG;
602 */
603 IF (p_x_df_header_rec.cancel_flag = G_YES_FLAG) THEN
604 p_x_df_header_rec.skip_mr_flag := G_NO_FLAG;
605 END IF;
606 IF(p_x_df_header_rec.skip_mr_flag = G_YES_FLAG OR p_x_df_header_rec.cancel_flag = G_YES_FLAG) THEN
607 p_x_df_header_rec.set_due_date := NULL;
608 p_x_df_header_rec.affect_due_calc_flag := G_NO_FLAG;
609 END IF;
610 ELSE
611 --Enable SR cancellation for non-serialized items.
612 --p_x_df_header_rec.skip_mr_flag := G_NO_FLAG;
613 IF (p_x_df_header_rec.cancel_flag = G_YES_FLAG) THEN
614 p_x_df_header_rec.skip_mr_flag := G_NO_FLAG;
615 p_x_df_header_rec.set_due_date := NULL;
616 p_x_df_header_rec.affect_due_calc_flag := G_NO_FLAG;
617 END IF;
618 p_x_df_header_rec.affect_due_calc_flag := G_YES_FLAG;
619 END IF;
620 END IF;
621 END IF;
622 -- doing defaulting before validation because of future OA needs
623 default_unchanged_df_header(p_x_df_header_rec => p_x_df_header_rec);
624
625 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
626 fnd_log.string
627 (
628 fnd_log.level_statement,
629 'ahl.plsql.AHL_PRD_DF_PVT.process_df_header',
630 'Dumping deferral header record prior to validating'
631 );
632 log_df_header(p_df_header_rec => p_x_df_header_rec);
633 END IF;
634
635 IF(p_x_df_header_rec.operation_flag IS NOT NULL) THEN
636 validate_df_header(p_df_header_rec => p_x_df_header_rec);
637 END IF;
638
639 IF(p_x_df_header_rec.operation_flag = G_OP_DELETE) THEN
640 -- delete schedules records
641 DELETE AHL_UNIT_THRESHOLDS WHERE UNIT_DEFERRAL_ID = p_x_df_header_rec.unit_deferral_id;
642 -- delete header records.
643 AHL_UNIT_DEFERRALS_PKG.delete_row(x_unit_deferral_id => p_x_df_header_rec.unit_deferral_id);
644 ELSIF(p_x_df_header_rec.operation_flag = G_OP_CREATE) THEN
645 --setting object version number for create
646 p_x_df_header_rec.object_version_number := 1;
647 --setting up user/create/update information
648 p_x_df_header_rec.created_by := fnd_global.user_id;
649 p_x_df_header_rec.creation_date := SYSDATE;
650 p_x_df_header_rec.last_updated_by := fnd_global.user_id;
651 p_x_df_header_rec.last_update_date := SYSDATE;
652 p_x_df_header_rec.last_update_login := fnd_global.user_id;
653
654 IF(p_x_df_header_rec.skip_mr_flag = G_YES_FLAG OR p_x_df_header_rec.cancel_flag = G_YES_FLAG)THEN
655 p_x_df_header_rec.set_due_date := null;
656 p_x_df_header_rec.affect_due_calc_flag := G_NO_FLAG;
657 END IF;
658
659 AHL_UNIT_DEFERRALS_PKG.insert_row(
660 x_rowid => l_rowid,
661 x_unit_deferral_id => p_x_df_header_rec.unit_deferral_id,
662 x_object_version_number => p_x_df_header_rec.object_version_number,
663 x_created_by => p_x_df_header_rec.created_by,
664 x_creation_date => p_x_df_header_rec.creation_date,
665 x_last_updated_by => p_x_df_header_rec.last_updated_by,
666 x_last_update_date => p_x_df_header_rec.last_update_date,
667 x_last_update_login => p_x_df_header_rec.last_update_login,
668 x_unit_effectivity_id => p_x_df_header_rec.unit_effectivity_id,
669 x_unit_deferral_type => p_x_df_header_rec.unit_deferral_type,
670 x_set_due_date => p_x_df_header_rec.set_due_date,
671 x_deferral_effective_on => p_x_df_header_rec.deferral_effective_on,
672 x_approval_status_code => p_x_df_header_rec.approval_status_code,
673 x_defer_reason_code => p_x_df_header_rec.defer_reason_code,
674 x_affect_due_calc_flag => p_x_df_header_rec.affect_due_calc_flag,
675 x_skip_mr_flag => p_x_df_header_rec.skip_mr_flag,
676 x_cancel_flag => p_x_df_header_rec.cancel_flag,
677 x_remarks => p_x_df_header_rec.remarks,
678 x_approver_notes => p_x_df_header_rec.approver_notes,
679 x_ata_sequence_id => NULL,
680 x_user_deferral_type => p_x_df_header_rec.user_deferral_type_code,
681 x_attribute_category => p_x_df_header_rec.attribute_category,
682 x_attribute1 => p_x_df_header_rec.attribute1,
683 x_attribute2 => p_x_df_header_rec.attribute2,
684 x_attribute3 => p_x_df_header_rec.attribute3,
685 x_attribute4 => p_x_df_header_rec.attribute4,
686 x_attribute5 => p_x_df_header_rec.attribute5,
687 x_attribute6 => p_x_df_header_rec.attribute6,
688 x_attribute7 => p_x_df_header_rec.attribute7,
689 x_attribute8 => p_x_df_header_rec.attribute8,
690 x_attribute9 => p_x_df_header_rec.attribute9,
691 x_attribute10 => p_x_df_header_rec.attribute10,
692 x_attribute11 => p_x_df_header_rec.attribute11,
693 x_attribute12 => p_x_df_header_rec.attribute12,
694 x_attribute13 => p_x_df_header_rec.attribute13,
695 x_attribute14 => p_x_df_header_rec.attribute14,
696 x_attribute15 => p_x_df_header_rec.attribute15
697 );
698 ELSIF (p_x_df_header_rec.operation_flag = G_OP_UPDATE) THEN
699
700 -- setting up object version number
701 p_x_df_header_rec.object_version_number := p_x_df_header_rec.object_version_number + 1;
702 --setting up user/create/update information
703 p_x_df_header_rec.last_updated_by := fnd_global.user_id;
704 p_x_df_header_rec.last_update_date := SYSDATE;
705 p_x_df_header_rec.last_update_login := fnd_global.user_id;
706
707 IF(p_x_df_header_rec.skip_mr_flag = G_YES_FLAG OR p_x_df_header_rec.cancel_flag = G_YES_FLAG)THEN
708 p_x_df_header_rec.set_due_date := null;
709 p_x_df_header_rec.affect_due_calc_flag := G_NO_FLAG;
710 -- Delete all records in unit thresholds
711 DELETE AHL_UNIT_THRESHOLDS WHERE UNIT_DEFERRAL_ID = p_x_df_header_rec.unit_deferral_id;
712 END IF;
713 p_x_df_header_rec.approval_status_code := 'DRAFT';
714 AHL_UNIT_DEFERRALS_PKG.update_row(
715 x_unit_deferral_id => p_x_df_header_rec.unit_deferral_id,
716 x_object_version_number => p_x_df_header_rec.object_version_number,
717 x_last_updated_by => p_x_df_header_rec.last_updated_by,
718 x_last_update_date => p_x_df_header_rec.last_update_date,
719 x_last_update_login => p_x_df_header_rec.last_update_login,
720 x_unit_effectivity_id => p_x_df_header_rec.unit_effectivity_id,
721 x_unit_deferral_type => p_x_df_header_rec.unit_deferral_type,
722 x_set_due_date => p_x_df_header_rec.set_due_date,
723 x_deferral_effective_on => p_x_df_header_rec.deferral_effective_on,
724 x_approval_status_code => p_x_df_header_rec.approval_status_code,
725 x_defer_reason_code => p_x_df_header_rec.defer_reason_code,
726 x_affect_due_calc_flag => p_x_df_header_rec.affect_due_calc_flag,
727 x_skip_mr_flag => p_x_df_header_rec.skip_mr_flag,
728 x_cancel_flag => p_x_df_header_rec.cancel_flag,
729 x_remarks => p_x_df_header_rec.remarks,
730 x_approver_notes => p_x_df_header_rec.approver_notes,
731 x_ata_sequence_id => null,
732 x_user_deferral_type => p_x_df_header_rec.user_deferral_type_code,
733 x_attribute_category => p_x_df_header_rec.attribute_category,
734 x_attribute1 => p_x_df_header_rec.attribute1,
735 x_attribute2 => p_x_df_header_rec.attribute2,
736 x_attribute3 => p_x_df_header_rec.attribute3,
737 x_attribute4 => p_x_df_header_rec.attribute4,
738 x_attribute5 => p_x_df_header_rec.attribute5,
739 x_attribute6 => p_x_df_header_rec.attribute6,
740 x_attribute7 => p_x_df_header_rec.attribute7,
741 x_attribute8 => p_x_df_header_rec.attribute8,
742 x_attribute9 => p_x_df_header_rec.attribute9,
743 x_attribute10 => p_x_df_header_rec.attribute10,
744 x_attribute11 => p_x_df_header_rec.attribute11,
745 x_attribute12 => p_x_df_header_rec.attribute12,
746 x_attribute13 => p_x_df_header_rec.attribute13,
747 x_attribute14 => p_x_df_header_rec.attribute14,
748 x_attribute15 => p_x_df_header_rec.attribute15
749 );
750 END IF;
751
752 IF(FND_MSG_PUB.count_msg > 0)THEN
753 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
754 END IF;
755
756 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
757 fnd_log.string
758 (
759 fnd_log.level_procedure,
760 'ahl.plsql.AHL_PRD_DF_PVT.process_df_header.end',
761 'At the end of PLSQL procedure'
762 );
763 END IF;
764
765 END process_df_header;
766 --------------------------------------------------------------------------------
767 -- Procedure to dump deferral header record
768 --------------------------------------------------------------------------------
769 PROCEDURE log_df_header(
770 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type) IS
771
772 BEGIN
773 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
774 fnd_log.string
775 (
776 fnd_log.level_statement,
777 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
778 'p_x_df_header_rec.operation_flag : ' || p_df_header_rec.operation_flag
779 );
780 fnd_log.string
781 (
782 fnd_log.level_statement,
783 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
784 'p_x_df_header_rec.unit_deferral_id : ' || p_df_header_rec.unit_deferral_id
785 );
786 fnd_log.string
787 (
788 fnd_log.level_statement,
789 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
790 'p_x_df_header_rec.object_version_number : ' || p_df_header_rec.object_version_number
791 );
792 fnd_log.string
793 (
794 fnd_log.level_statement,
795 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
796 'p_x_df_header_rec.unit_effectivity_id : ' || p_df_header_rec.unit_effectivity_id
797 );
798 fnd_log.string
799 (
800 fnd_log.level_statement,
801 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
802 'p_x_df_header_rec.defer_reason_code : ' || p_df_header_rec.defer_reason_code
803 );
804 fnd_log.string
805 (
806 fnd_log.level_statement,
807 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
808 'p_x_df_header_rec.remarks : ' || p_df_header_rec.remarks
809 );
810 fnd_log.string
811 (
812 fnd_log.level_statement,
813 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
814 'p_x_df_header_rec.skip_mr_flag : ' || p_df_header_rec.skip_mr_flag
815 );
816 fnd_log.string
817 (
818 fnd_log.level_statement,
819 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
820 'p_x_df_header_rec.cancel_flag : ' || p_df_header_rec.cancel_flag
821 );
822 fnd_log.string
823 (
824 fnd_log.level_statement,
825 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
826 'p_x_df_header_rec.affect_due_calc_flag : ' || p_df_header_rec.affect_due_calc_flag
827 );
828 fnd_log.string
829 (
830 fnd_log.level_statement,
831 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
832 'p_x_df_header_rec.set_due_date : ' || p_df_header_rec.set_due_date
833 );
834 fnd_log.string
835 (
836 fnd_log.level_statement,
837 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
838 'p_x_df_header_rec.deferral_effective_on : ' || p_df_header_rec.deferral_effective_on
839 );
840 fnd_log.string
841 (
842 fnd_log.level_statement,
843 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
844 'p_x_df_header_rec.deferral_type : ' || p_df_header_rec.deferral_type
845 );
846 fnd_log.string
847 (
848 fnd_log.level_statement,
849 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
850 'p_x_df_header_rec.mr_repetitive_flag : ' || p_df_header_rec.mr_repetitive_flag
851 );
852 fnd_log.string
853 (
854 fnd_log.level_statement,
855 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
856 'p_x_df_header_rec.reset_counter_flag : ' || p_df_header_rec.reset_counter_flag
857 );
858 fnd_log.string
859 (
860 fnd_log.level_statement,
861 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
862 'p_x_df_header_rec.manually_planned_flag : ' || p_df_header_rec.manually_planned_flag
863 );
864 fnd_log.string
865 (
866 fnd_log.level_statement,
867 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
868 'user id : ' || FND_GLOBAL.USER_ID()
869 );
870 fnd_log.string
871 (
872 fnd_log.level_statement,
873 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
874 'resp id : ' || FND_GLOBAL.RESP_ID()
875 );
876 fnd_log.string
877 (
878 fnd_log.level_statement,
879 'ahl.plsql.AHL_PRD_DF_PVT.log_df_header',
880 'resp appl id : ' || FND_GLOBAL.resp_appl_id()
881 );
882 END IF;
883 END log_df_header;
884
885 PROCEDURE validate_df_header(
886 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type)IS
887
888 -- check whether any record already exists related to deferral
889 CURSOR deferral_rec_exists_csr(p_unit_effectivity_id IN NUMBER) IS
890 SELECT 'x' from ahl_unit_deferrals_vl
891 WHERE unit_deferral_type = 'DEFERRAL'
892 AND unit_effectivity_id = p_unit_effectivity_id;
893
894 -- to check whether ue is in production
895 CURSOR valid_deferral_csr(p_unit_effectivity_id IN NUMBER) IS
896 SELECT 'x' from ahl_workorder_tasks_v WO,AHL_UNIT_EFFECTIVITIES_B UE --Undid App usage related BLIND changes
897 WHERE WO.unit_effectivity_id = UE.unit_effectivity_id
898 AND NVL(UE.status_code,'x') NOT IN('ACCOMPLISHED','DEFERRED','EXCEPTION','TERMINATED','CANCELLED','MR-TERMINATE')
899 AND UE.unit_effectivity_id = p_unit_effectivity_id;
900
901 -- check whether MR is not terminated
902 /*CURSOR valid_mr_csr(p_unit_effectivity_id IN NUMBER) IS
903 select 'x' from AHL_MR_HEADERS_APP_V mr, AHL_MR_HEADERS_APP_V def, ahl_unit_effectivities_b UE
904 where UE.unit_effectivity_id = p_unit_effectivity_id
905 AND def.mr_header_id = UE.mr_header_id
906 and def.title = mr.title
907 and trunc(sysdate) between trunc(mr.effective_from)
908 and trunc(nvl(mr.effective_to, sysdate))
909 and mr.version_number >= def.version_number;*/
910
911 -- to check whether this deferral record can be updated or deleted
912 CURSOR valid_deferral_up_csr(p_unit_deferral_id IN NUMBER) IS
913 SELECT 'x' from ahl_unit_deferrals_b
914 WHERE approval_status_code IN ('DRAFT','DEFERRAL_REJECTED')
915 AND unit_deferral_type = 'DEFERRAL'
916 AND unit_deferral_id = p_unit_deferral_id;
917
918 -- TAMAL -- Begin changes for ER #3356804
919 -- This cursor specifically checks whether the UE for an SR with MRs is available for deferral processing
920 -- Contrast this with the earlier cursor valid_deferral_csr, which handles SRs with no MRs and plain MRs
921 CURSOR valid_sr_deferral_csr (p_ue_id in number)
922 IS
923 SELECT 'x'
924 FROM ahl_workorders WO, ahl_visits_b VS, ahl_visit_tasks_b VST, ahl_unit_effectivities_b UE
925 WHERE WO.master_workorder_flag = 'Y'
926 /* to filter out draft / deleted WOs */
927 AND WO.STATUS_CODE NOT IN ( '17' , '22' )
928 /* to check whether visit available in client's organization */
929 AND WO.visit_id = VS.visit_id
930 AND VS.ORGANIZATION_ID IN
931 (SELECT ORGANIZATION_ID FROM org_organization_definitions
932 WHERE NVL (operating_unit, mo_global.get_current_org_id())
933 = mo_global.get_current_org_id())
934 AND VST.visit_id = VS.visit_id
935 /* */
936 AND WO.visit_task_id = VST.visit_task_id
937 AND VST.unit_effectivity_id = UE.unit_effectivity_id
938 AND VST.mr_id IS NULL
939 AND NVL(UE.status_code,'x') NOT IN('ACCOMPLISHED','DEFERRED','EXCEPTION','TERMINATED','CANCELLED','MR-TERMINATE')
940 AND UE.cs_incident_id IS NOT NULL
941 AND UE.unit_effectivity_id = p_ue_id;
942 -- TAMAL -- End changes for ER #3356804
943
944 -- R12: UMP Deferral
945 CURSOR valid_ue_csr (p_unit_effectivity_id IN NUMBER) IS
946 SELECT 'x'
947 FROM AHL_Unit_Effectivities_B UE
948 WHERE (status_code IS NULL OR status_code = 'INIT-DUE')
949 AND unit_effectivity_id = p_unit_effectivity_id
950 AND NOT EXISTS (SELECT 'x'
951 FROM ahl_visit_tasks_b vts
952 WHERE vts.unit_effectivity_id = UE.unit_effectivity_id
953 AND NVL(vts.status_code,'x') IN ('PLANNING')
954 AND vts.task_type_code = 'SUMMARY'
955 AND EXISTS (select 'x'
956 from ahl_visits_b vst, ahl_simulation_plans_b sim
957 where vst.simulation_plan_id = sim.simulation_plan_id(+)
958 and vst.visit_id = vts.visit_id
959 and sim.primary_plan_flag(+) = 'Y')
960 );
961
962 -- R12: UMP Deferral.
963 -- Validate user deferral type.
964 CURSOR validate_user_defer_csr(p_user_defer_type IN VARCHAR2) IS
965 SELECT 'x'
966 FROM fnd_lookup_values_vl
967 WHERE lookup_type = 'AHL_PRD_DEFERRAL_TYPE'
968 AND lookup_code = p_user_defer_type
969 AND enabled_flag = 'Y'
970 AND trunc(sysdate) BETWEEN start_date_active AND nvl(end_date_active, sysdate+1);
971
972 -- SR Cancellation for nonserialized items.
973 CURSOR is_orig_ue_nonserial(p_ue_id in number)
974 IS
975 SELECT cii.serial_number
976 FROM ahl_unit_effectivities_b ue, csi_item_instances cii
977 WHERE unit_effectivity_id in (select originator_ue_id
978 from ahl_ue_relationships
979 where related_ue_id = p_ue_id)
980 AND ue.csi_item_instance_id = cii.instance_id
981 AND cii.quantity > 0
982 AND ue.object_type = 'SR';
983
984 -- SR Cancellation for nonserialized items.
985 CURSOR is_sr_ue_nonserial(p_ue_id in number)
986 IS
987 SELECT cii.serial_number
988 FROM ahl_unit_effectivities_b ue, csi_item_instances cii
989 WHERE unit_effectivity_id = p_ue_id
990 AND ue.csi_item_instance_id = cii.instance_id
991 AND cii.quantity > 0
992 AND ue.object_type = 'SR';
993
994 l_exists VARCHAR2(1);
995 l_serial_number csi_item_instances.serial_number%TYPE;
996 l_mr_applicable VARCHAR2(1);
997 l_active_end_date DATE;
998 l_new_mr_header_id NUMBER;
999 l_new_mr_applicable VARCHAR2(1);
1000 l_return_status VARCHAR2(1);
1001 l_msg_data VARCHAR2(4000);
1002 l_msg_count NUMBER;
1003
1004 -- to detemine whether deferral is done from UMP
1005 CURSOR wo_exists_csr(p_unit_effectivity_id IN NUMBER) IS
1006 SELECT 'x'
1007 FROM ahl_workorders wo,
1008 ahl_visit_tasks_b vts
1009 WHERE WO.VISIT_TASK_ID=VTS.VISIT_TASK_ID
1010 AND wo.STATUS_CODE NOT IN ( '17' , '22' )
1011 AND vts.unit_effectivity_id = p_unit_effectivity_id
1012 AND rownum < 2;
1013
1014 BEGIN
1015
1016 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1017 fnd_log.string
1018 (
1019 fnd_log.level_procedure,
1020 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header.begin',
1021 'At the start of PLSQL procedure'
1022 );
1023 END IF;
1024
1025 IF(p_df_header_rec.operation_flag IS NOT NULL AND p_df_header_rec.operation_flag NOT IN(G_OP_CREATE,G_OP_UPDATE,G_OP_DELETE))THEN
1026 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_HD_OP_FLAG');
1027 FND_MSG_PUB.ADD;
1028 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1029 fnd_log.string ( fnd_log.level_unexpected, 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1030 'Operation Flag is invalid in the header record' );
1031 END IF;
1032 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1033 ELSE
1034 -- R12: UMP Deferral.
1035 -- First validate UE ID. If UMP Deferral, then UE must not be in a 'planned' status.
1036 OPEN valid_ue_csr(p_df_header_rec.unit_effectivity_id);
1037 FETCH valid_ue_csr INTO l_exists;
1038 IF (valid_ue_csr%FOUND) THEN
1039 -- ump deferral.
1040 CLOSE valid_ue_csr;
1041 -- do not allow cancellation of MR/SR if not already in execution
1042 OPEN wo_exists_csr(p_df_header_rec.unit_effectivity_id);
1043 FETCH wo_exists_csr INTO l_exists;
1044 IF (wo_exists_csr%NOTFOUND and p_df_header_rec.cancel_flag = G_YES_FLAG) THEN
1045 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_UMP_SR_MR_CAN');
1046 FND_MSG_PUB.ADD;
1047 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1048 fnd_log.string
1049 (
1050 fnd_log.level_error,
1051 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1052 'This MR/SR can not be cancelled from Unit Maintenance Plan.'
1053 );
1054 END IF;
1055 END IF;
1056 CLOSE wo_exists_csr;
1057 ELSE
1058 CLOSE valid_ue_csr;
1059 -- Production Validations.
1060 -- TAMAL -- Begin changes for ER #3356804
1061 -- This splitting of cursors is needed to handle the case of SRs with MRs v/s SRs without MRs
1062 -- First check whether the UE corresponds to a SR with MRs that is available for deferral processing
1063 -- If yes, fine
1064 -- If no, then check whether the UE corresponds to a SR without MRs or plain MRs that is available for deferral processing
1065 -- If yes, fine
1066 -- If no, raise unexpected error
1067 OPEN valid_sr_deferral_csr (p_df_header_rec.unit_effectivity_id);
1068 FETCH valid_sr_deferral_csr INTO l_exists;
1069 IF (valid_sr_deferral_csr%NOTFOUND) THEN
1070 CLOSE valid_sr_deferral_csr;
1071 OPEN valid_deferral_csr(p_df_header_rec.unit_effectivity_id);
1072 FETCH valid_deferral_csr INTO l_exists;
1073 IF(valid_deferral_csr%NOTFOUND) THEN
1074 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_MRSR_STATUS');
1075 FND_MSG_PUB.ADD;
1076 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
1077 fnd_log.string ( fnd_log.level_unexpected, 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1078 'invalid mr or sr status invalid for update or delete 1' );
1079 END IF;
1080 CLOSE valid_deferral_csr;
1081 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1082 ELSE
1083 CLOSE valid_deferral_csr;
1084 END IF; -- valid_deferral_csr
1085 ELSE
1086 CLOSE valid_sr_deferral_csr;
1087 END IF; -- valid_sr_deferral_csr
1088 -- SR Cancellation - child MR cannot be deferred if originator ue is a SR
1089 -- based on non-serialized instance.
1090 IF (p_df_header_rec.cancel_flag = G_NO_FLAG) THEN
1091 OPEN is_orig_ue_nonserial(p_df_header_rec.unit_effectivity_id);
1092 FETCH is_orig_ue_nonserial INTO l_serial_number;
1093 CLOSE is_orig_ue_nonserial;
1094 IF (l_serial_number IS NULL) THEN
1095 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_NS_DF_INVALID');
1096 FND_MSG_PUB.ADD;
1097 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1098 fnd_log.string
1099 (
1100 fnd_log.level_unexpected,
1101 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1102 'cannot defer child MR when parent MR is based on non-serial SR'
1103 );
1104 END IF;
1105 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1106 END IF;
1107 END IF;
1108 END IF; -- valid_ue_csr
1109 END IF;
1110
1111
1112 IF(p_df_header_rec.operation_flag = G_OP_CREATE) THEN
1113 ----------------VALIDATION for DEFERRAL RECORD CREATION----------------
1114 -- check whether any record alreasy exists for the UE, IF yes raise error
1115 OPEN deferral_rec_exists_csr(p_df_header_rec.unit_effectivity_id);
1116 FETCH deferral_rec_exists_csr INTO l_exists;
1117 IF(deferral_rec_exists_csr%FOUND)THEN
1118 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_HD_OP_REXIST');
1119 FND_MSG_PUB.ADD;
1120 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1121 fnd_log.string
1122 (
1123 fnd_log.level_unexpected,
1124 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1125 'Deferral record exist while operation flag is create'
1126 );
1127 END IF;
1128 CLOSE deferral_rec_exists_csr;
1129 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1130 END IF;
1131 CLOSE deferral_rec_exists_csr;
1132
1133 -- check whether status is nothing but draft while creating record for deferral
1134 IF(p_df_header_rec.approval_status_code <> 'DRAFT')THEN
1135 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_APPR_STATUS');
1136 FND_MSG_PUB.ADD;
1137 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1138 fnd_log.string
1139 (
1140 fnd_log.level_unexpected,
1141 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1142 'approval status is not DRAFT while creating a deferral record'
1143 );
1144 END IF;
1145 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1146 END IF;
1147
1148 -- update and delete validations
1149 ELSIF (p_df_header_rec.operation_flag IN (G_OP_UPDATE,G_OP_DELETE)) THEN
1150 -- check whether deferral record can be updated or deleted
1151 OPEN valid_deferral_up_csr(p_df_header_rec.unit_deferral_id);
1152 FETCH valid_deferral_up_csr INTO l_exists;
1153 IF(valid_deferral_up_csr%NOTFOUND)THEN
1154 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_MRSR_STATUS');
1155 FND_MSG_PUB.ADD;
1156 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1157 fnd_log.string
1158 (
1159 fnd_log.level_unexpected,
1160 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1161 'approval status invalid for update or delete : ue_id : ' || p_df_header_rec.unit_deferral_id
1162 );
1163 END IF;
1164 CLOSE valid_deferral_up_csr;
1165 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1166 END IF;
1167 CLOSE valid_deferral_up_csr;
1168 END IF;
1169
1170 --Data validation for creates and updates.
1171 IF (p_df_header_rec.operation_flag IN (G_OP_CREATE, G_OP_UPDATE)) THEN
1172 -- validate deferral reason codes
1173 IF(p_df_header_rec.defer_reason_code IS NOT NULL)THEN
1174 validate_reason_codes(p_df_header_rec.defer_reason_code);
1175 END IF;
1176 -- general validations for flags
1177 IF(p_df_header_rec.cancel_flag NOT IN(G_YES_FLAG,G_NO_FLAG))THEN
1178 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CANCEL_FLAG');
1179 FND_MSG_PUB.ADD;
1180 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1181 fnd_log.string
1182 (
1183 fnd_log.level_unexpected,
1184 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1185 'Cancel flag is not Y or N'
1186 );
1187 END IF;
1188 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1189 END IF;
1190 IF(p_df_header_rec.skip_mr_flag NOT IN(G_YES_FLAG,G_NO_FLAG))THEN
1191 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_SKIP_FLAG');
1192 FND_MSG_PUB.ADD;
1193 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1194 fnd_log.string
1195 (
1196 fnd_log.level_unexpected,
1197 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1198 'Skip flag is not Y or N'
1199 );
1200 END IF;
1201 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1202 END IF;
1203 IF(p_df_header_rec.affect_due_calc_flag NOT IN(G_YES_FLAG,G_NO_FLAG))THEN
1204 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_AFFDUE_FLAG');
1205 FND_MSG_PUB.ADD;
1206 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1207 fnd_log.string
1208 (
1209 fnd_log.level_unexpected,
1210 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1211 'Affect Due Calc Flag is not Y or N'
1212 );
1213 END IF;
1214 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1215 END IF;
1216
1217 -- Check user deferral type.(R12: UMP Deferral)
1218 IF (p_df_header_rec.user_deferral_type_code IS NOT NULL AND
1219 p_df_header_rec.user_deferral_type_code <> FND_API.G_MISS_CHAR) THEN
1220 OPEN validate_user_defer_csr(p_df_header_rec.user_deferral_type_code);
1221 FETCH validate_user_defer_csr INTO l_exists;
1222 IF (validate_user_defer_csr%NOTFOUND) THEN
1223 FND_MESSAGE.Set_Name('AHL','AHL_UMP_INVALID_DEF_TYPE');
1224 FND_MESSAGE.Set_token('CODE', p_df_header_rec.user_deferral_type_code);
1225 FND_MSG_PUB.ADD;
1226 END IF;
1227 CLOSE validate_user_defer_csr;
1228 END IF;
1229
1230 IF(p_df_header_rec.skip_mr_flag = G_NO_FLAG AND p_df_header_rec.cancel_flag = G_NO_FLAG AND
1231 (p_df_header_rec.set_due_date IS NOT NULL AND
1232 trunc(p_df_header_rec.set_due_date) < trunc(SYSDATE))) THEN
1233 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_SET_DUE_DT');
1234 FND_MESSAGE.Set_Token('SET_DUE_DATE',p_df_header_rec.set_due_date);
1235 FND_MSG_PUB.ADD;
1236 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1237 fnd_log.string
1238 (
1239 fnd_log.level_error,
1240 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1241 'Set due date cant be null or less than system date '
1242 );
1243 END IF;
1244 END IF;
1245
1246 IF(p_df_header_rec.deferral_effective_on IS NULL OR
1247 p_df_header_rec.deferral_effective_on > SYSDATE) THEN
1248 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_DF_EFF_DT');
1249 FND_MESSAGE.Set_Token('DEFERRAL_EFFECTIVE_ON',p_df_header_rec.deferral_effective_on);
1250 FND_MSG_PUB.ADD;
1251 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1252 fnd_log.string
1253 (
1254 fnd_log.level_error,
1255 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1256 'Deferral Effective On Date can not be null or greater than system date '
1257 );
1258 END IF;
1259 END IF;
1260
1261 -- MR/SR specific validations
1262 IF(p_df_header_rec.deferral_type = G_DEFERRAL_TYPE_MR) THEN
1263
1264 AHL_PRD_DF_PVT.get_mr_termination_details(
1265 p_unit_effectivity_id => p_df_header_rec.unit_effectivity_id,
1266 x_mr_applicable => l_mr_applicable,
1267 x_active_end_date => l_active_end_date,
1268 x_new_mr_header_id => l_new_mr_header_id,
1269 x_new_mr_applicable => l_new_mr_applicable,
1270 x_return_status => l_return_status,
1271 x_msg_count => l_msg_count,
1272 x_msg_data => l_msg_data);
1273 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1274 RAISE FND_API.G_EXC_ERROR;
1275 END IF;
1276 -- if MR is not applicable anymore, it must be terminated. Whether Planned or unplanned
1277 IF(l_mr_applicable = FND_API.G_FALSE AND l_new_mr_applicable = FND_API.G_FALSE
1278 AND (p_df_header_rec.skip_mr_flag = G_NO_FLAG OR p_df_header_rec.cancel_flag = G_YES_FLAG) )THEN
1279 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_MR_EXPIRED');
1280 FND_MSG_PUB.ADD;
1281 RAISE FND_API.G_EXC_ERROR;
1282 END IF;
1283 IF (p_df_header_rec.manually_planned_flag = G_NO_FLAG)THEN -- MR is planned
1284 IF(p_df_header_rec.cancel_flag = G_NO_FLAG AND p_df_header_rec.affect_due_calc_flag = G_NO_FLAG AND p_df_header_rec.reset_counter_flag = G_YES_FLAG) THEN
1285 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_AFFDUE_FLAG');
1286 FND_MSG_PUB.ADD;
1287 RAISE FND_API.G_EXC_ERROR;
1288 END IF;
1289 IF(p_df_header_rec.mr_repetitive_flag = G_NO_FLAG AND
1290 p_df_header_rec.skip_mr_flag = G_YES_FLAG AND l_mr_applicable = FND_API.G_TRUE) THEN
1291 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_SKIP_FLAG');
1292 FND_MSG_PUB.ADD;
1293 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1294 fnd_log.string
1295 (
1296 fnd_log.level_unexpected,
1297 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1298 'Skip MR flag is Y while MR is not repetitive'
1299 );
1300 END IF;
1301 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1302 END IF;
1303 ELSE -- MR is unplanned
1304 IF(p_df_header_rec.cancel_flag = G_NO_FLAG AND p_df_header_rec.skip_mr_flag = G_NO_FLAG) THEN
1305 IF(p_df_header_rec.affect_due_calc_flag = G_NO_FLAG AND
1306 p_df_header_rec.reset_counter_flag = G_YES_FLAG) THEN
1307 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_AFFDUE_FLAG');
1308 FND_MSG_PUB.ADD;
1309 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1310 fnd_log.string
1311 (
1312 fnd_log.level_unexpected,
1313 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1314 'MR has resettable counters so affect due cal flag cant be N '
1315 );
1316 END IF;
1317 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1318 END IF;
1319 ELSE -- MR is being terminated or cancelled
1320 IF(p_df_header_rec.affect_due_calc_flag = G_YES_FLAG) THEN
1321 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_AFFDUE_FLAG');
1322 FND_MSG_PUB.ADD;
1323 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1324 fnd_log.string
1325 (
1326 fnd_log.level_unexpected,
1327 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1328 'MR skip flag is Y so affect due cal flag can not be Y '
1329 );
1330 END IF;
1331 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1332 END IF;
1333 END IF;
1334 END IF;
1335 ELSIF(p_df_header_rec.deferral_type = G_DEFERRAL_TYPE_SR)THEN
1336 -- no deferral for SR with non-serialized items
1337 IF (p_df_header_rec.cancel_flag = G_NO_FLAG) THEN
1338 OPEN is_sr_ue_nonserial(p_df_header_rec.unit_effectivity_id);
1339 FETCH is_sr_ue_nonserial INTO l_serial_number;
1340 CLOSE is_sr_ue_nonserial;
1341 IF (l_serial_number IS NULL) THEN
1342 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_NS_DF_INVALID');
1343 FND_MSG_PUB.ADD;
1344 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1345 fnd_log.string
1346 (
1347 fnd_log.level_unexpected,
1348 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1349 'cannot defer SR based on non-serial item'
1350 );
1351 END IF;
1352 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1353 END IF;
1354 END IF;
1355
1356 IF(p_df_header_rec.cancel_flag = G_NO_FLAG AND p_df_header_rec.affect_due_calc_flag = G_NO_FLAG)THEN
1357 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_AFFDUE_FLAG');
1358 FND_MSG_PUB.ADD;
1359 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1360 fnd_log.string
1361 (
1362 fnd_log.level_unexpected,
1363 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header',
1364 'For SR, affect due date flag can not be N '
1365 );
1366 END IF;
1367 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1368 END IF;
1369 END IF;
1370 END IF;
1371
1372
1373 -- raise expected error
1374 IF(FND_MSG_PUB.count_msg > 0)THEN
1375 RAISE FND_API.G_EXC_ERROR;
1376 END IF;
1377
1378 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1379 fnd_log.string
1380 (
1381 fnd_log.level_procedure,
1382 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_header.end',
1383 'At the end of PLSQL procedure'
1384 );
1385 END IF;
1386
1387 END validate_df_header;
1388 --------------------------------------------------------------------------------------------------------
1389 -- Reason code validation
1390 --------------------------------------------------------------------------------------------------------
1391
1392 PROCEDURE validate_reason_codes(
1393 p_defer_reason_code IN VARCHAR2) IS
1394
1395 l_temp1 NUMBER := 1;
1396 l_temp2 NUMBER;
1397 l_index NUMBER := 1;
1398 exit_flag boolean := false;
1399 l_string VARCHAR2(30);
1400
1401 CURSOR val_reason_code_csr(p_reason_code IN VARCHAR2) IS
1402 SELECT 'x' FROM fnd_lookup_values_vl fnd
1403 WHERE fnd.lookup_code = p_reason_code
1404 AND fnd.lookup_type = 'AHL_PRD_DF_REASON_TYPES';
1405
1406 l_exists VARCHAR2(1);
1407
1408 BEGIN
1409 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1410 fnd_log.string
1411 (
1412 fnd_log.level_procedure,
1413 'ahl.plsql.AHL_PRD_DF_PVT.validate_reason_codes.begin',
1414 'At the start of PLSQL procedure'
1415 );
1416 END IF;
1417
1418 LOOP
1419 l_temp2 := instr(p_defer_reason_code,G_REASON_CODE_DELIM,1,l_index);
1420 IF(l_temp2 = 0) THEN
1421 l_string := substr(p_defer_reason_code,l_temp1);
1422 OPEN val_reason_code_csr(l_string);
1423 FETCH val_reason_code_csr INTO l_exists;
1424 IF(val_reason_code_csr%NOTFOUND) THEN
1425 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_RSN_CODE');
1426 FND_MSG_PUB.ADD;
1427 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1428 fnd_log.string
1429 (
1430 fnd_log.level_unexpected,
1431 'ahl.plsql.AHL_PRD_DF_PVT.validate_reason_codes',
1432 'Reason code is not defined in lookups '
1433 );
1434 END IF;
1435 CLOSE val_reason_code_csr;
1436 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1437 END IF;
1438 CLOSE val_reason_code_csr;
1439 exit_flag := true;
1440 ELSE
1441 l_string := substr(p_defer_reason_code,l_temp1,l_temp2 - l_temp1);
1442 OPEN val_reason_code_csr(l_string);
1443 FETCH val_reason_code_csr INTO l_exists;
1444 IF(val_reason_code_csr%NOTFOUND) THEN
1445 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_RSN_CODE');
1446 FND_MSG_PUB.ADD;
1447 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1448 fnd_log.string
1449 (
1450 fnd_log.level_unexpected,
1451 'ahl.plsql.AHL_PRD_DF_PVT.validate_reason_codes',
1452 'Reason code is not defined in lookups '
1453 );
1454 END IF;
1455 CLOSE val_reason_code_csr;
1456 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1457 END IF;
1458 CLOSE val_reason_code_csr;
1459 l_index := l_index + 1;
1460 l_temp1 := l_temp2 + 1;
1461 END IF;
1462 EXIT WHEN exit_flag;
1463 END LOOP;
1464
1465 IF(FND_MSG_PUB.count_msg > 0)THEN
1466 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1467 END IF;
1468
1469 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1470 fnd_log.string
1471 (
1472 fnd_log.level_procedure,
1473 'ahl.plsql.AHL_PRD_DF_PVT.validate_reason_codes.end',
1474 'At the end of PLSQL procedure'
1475 );
1476 END IF;
1477
1478 END validate_reason_codes;
1479
1480
1481 ---------------------------------------------------------------------------------------------------------
1482 -- defaulting values in case of create and update mode
1483 ---------------------------------------------------------------------------------------------------------
1484
1485 PROCEDURE default_unchanged_df_header(
1486 p_x_df_header_rec IN OUT NOCOPY AHL_PRD_DF_PVT.df_header_rec_type)IS
1487
1488 CURSOR df_header_csr(p_unit_deferral_id IN NUMBER, p_object_version_number IN NUMBER) IS
1489 SELECT unit_effectivity_id, unit_deferral_type, approval_status_code, defer_reason_code,skip_mr_flag,cancel_flag,
1490 affect_due_calc_flag, set_due_date, deferral_effective_on,remarks,approver_notes,attribute_category, attribute1,
1491 attribute2, attribute3, attribute4, attribute5, attribute6, attribute7,
1492 attribute8, attribute9, attribute10, attribute11, attribute12,
1493 attribute13, attribute14, attribute15
1494 FROM ahl_unit_deferrals_vl
1495 WHERE object_version_number= p_object_version_number
1496 AND unit_deferral_id = p_unit_deferral_id;
1497
1498 l_df_header_rec AHL_PRD_DF_PVT.df_header_Rec_type;
1499
1500 BEGIN
1501 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1502 fnd_log.string
1503 (
1504 fnd_log.level_procedure,
1505 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_header.begin',
1506 'At the start of PLSQL procedure'
1507 );
1508 END IF;
1509
1510 IF(p_x_df_header_rec.operation_flag IS NULL OR p_x_df_header_rec.operation_flag = G_OP_UPDATE) THEN
1511 OPEN df_header_csr(p_x_df_header_rec.unit_deferral_id, p_x_df_header_rec.object_version_number);
1512 FETCH df_header_csr INTO l_df_header_rec.unit_effectivity_id, l_df_header_rec.unit_deferral_type,
1513 l_df_header_rec.approval_status_code,l_df_header_rec.defer_reason_code,
1514 l_df_header_rec.skip_mr_flag,l_df_header_rec.cancel_flag,l_df_header_rec.affect_due_calc_flag,l_df_header_rec.set_due_date,
1515 l_df_header_rec.deferral_effective_on,l_df_header_rec.remarks,l_df_header_rec.approver_notes,
1516 l_df_header_rec.attribute_category,l_df_header_rec.attribute1,l_df_header_rec.attribute2,
1517 l_df_header_rec.attribute3, l_df_header_rec.attribute4, l_df_header_rec.attribute5,
1518 l_df_header_rec.attribute6, l_df_header_rec.attribute7, l_df_header_rec.attribute8,
1519 l_df_header_rec.attribute9, l_df_header_rec.attribute10, l_df_header_rec.attribute11,
1520 l_df_header_rec.attribute12, l_df_header_rec.attribute13, l_df_header_rec.attribute14,
1521 l_df_header_rec.attribute15;
1522 IF (df_header_csr%NOTFOUND) THEN
1523 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INVOP_HREC_MISS');
1524 FND_MSG_PUB.ADD;
1525 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1526 fnd_log.string
1527 (
1528 fnd_log.level_error,
1529 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_header',
1530 'Missing Deferral Header Record'
1531 );
1532 END IF;
1533 ELSE
1534 IF (p_x_df_header_rec.unit_effectivity_id IS NULL) THEN
1535 p_x_df_header_rec.unit_effectivity_id := l_df_header_rec.unit_effectivity_id;
1536 ELSIF(p_x_df_header_rec.unit_effectivity_id <> l_df_header_rec.unit_effectivity_id ) THEN
1537 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_UE');
1538 FND_MSG_PUB.ADD;
1539 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1540 fnd_log.string
1541 (
1542 fnd_log.level_unexpected,
1543 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_header',
1544 'Unit Effectivity ID does not match with deferral header record'
1545 );
1546 END IF;
1547 CLOSE df_header_csr;
1548 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1549 END IF;
1550
1551 IF (p_x_df_header_rec.unit_deferral_type IS NULL) THEN
1552 p_x_df_header_rec.unit_deferral_type := l_df_header_rec.unit_deferral_type;
1553 ELSIF(p_x_df_header_rec.unit_deferral_type <> l_df_header_rec.unit_deferral_type) THEN
1554 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_UDF_TYPE');
1555 FND_MSG_PUB.ADD;
1556 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1557 fnd_log.string
1558 (
1559 fnd_log.level_unexpected,
1560 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_header',
1561 'Unit Deferral Type does not match with deferral header record'
1562 );
1563 END IF;
1564 CLOSE df_header_csr;
1565 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1566 END IF;
1567
1568 IF (p_x_df_header_rec.approval_status_code IS NULL) THEN
1569 p_x_df_header_rec.approval_status_code := l_df_header_rec.approval_status_code;
1570 ELSIF(p_x_df_header_rec.approval_status_code <> l_df_header_rec.approval_status_code) THEN
1571 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_APPR_STATUS');
1572 FND_MSG_PUB.ADD;
1573 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1574 fnd_log.string
1575 (
1576 fnd_log.level_unexpected,
1577 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_header',
1578 'Approval status code can not be modified'
1579 );
1580 END IF;
1581 CLOSE df_header_csr;
1582 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1583 END IF;
1584
1585 IF (p_x_df_header_rec.defer_reason_code IS NULL) THEN
1586 p_x_df_header_rec.defer_reason_code := l_df_header_rec.defer_reason_code;
1587 ELSIF(p_x_df_header_rec.defer_reason_code = FND_API.G_MISS_CHAR) THEN
1588 p_x_df_header_rec.defer_reason_code := NULL;
1589 END IF;
1590
1591 IF (p_x_df_header_rec.skip_mr_flag IS NULL) THEN
1592 p_x_df_header_rec.skip_mr_flag := l_df_header_rec.skip_mr_flag;
1593 ELSIF(p_x_df_header_rec.skip_mr_flag = FND_API.G_MISS_CHAR) THEN
1594 p_x_df_header_rec.skip_mr_flag := G_NO_FLAG;
1595 END IF;
1596
1597 IF (p_x_df_header_rec.cancel_flag IS NULL) THEN
1598 p_x_df_header_rec.cancel_flag := l_df_header_rec.cancel_flag;
1599 ELSIF(p_x_df_header_rec.cancel_flag = FND_API.G_MISS_CHAR) THEN
1600 p_x_df_header_rec.cancel_flag := G_NO_FLAG;
1601 END IF;
1602
1603 IF (p_x_df_header_rec.affect_due_calc_flag IS NULL) THEN
1604 p_x_df_header_rec.affect_due_calc_flag := l_df_header_rec.affect_due_calc_flag;
1605 ELSIF(p_x_df_header_rec.affect_due_calc_flag = FND_API.G_MISS_CHAR) THEN
1606 p_x_df_header_rec.affect_due_calc_flag := G_NO_FLAG;
1607 END IF;
1608
1609 IF (p_x_df_header_rec.set_due_date IS NULL) THEN
1610 p_x_df_header_rec.set_due_date := l_df_header_rec.set_due_date;
1611 ELSIF(p_x_df_header_rec.set_due_date = FND_API.G_MISS_DATE) THEN
1612 p_x_df_header_rec.set_due_date := NULL;
1613 END IF;
1614
1615 IF (p_x_df_header_rec.deferral_effective_on IS NULL) THEN
1616 p_x_df_header_rec.deferral_effective_on := l_df_header_rec.deferral_effective_on;
1617 ELSIF(p_x_df_header_rec.deferral_effective_on = FND_API.G_MISS_DATE) THEN
1618 p_x_df_header_rec.deferral_effective_on := NULL;
1619 END IF;
1620
1621 IF (p_x_df_header_rec.remarks IS NULL) THEN
1622 p_x_df_header_rec.remarks := l_df_header_rec.remarks;
1623 ELSIF(p_x_df_header_rec.remarks = FND_API.G_MISS_CHAR) THEN
1624 p_x_df_header_rec.remarks := NULL;
1625 END IF;
1626
1627 IF (p_x_df_header_rec.approver_notes IS NULL) THEN
1628 p_x_df_header_rec.approver_notes := l_df_header_rec.approver_notes;
1629 ELSIF(p_x_df_header_rec.approver_notes <> l_df_header_rec.approver_notes) THEN
1630 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_APPR_NOTES');
1631 FND_MSG_PUB.ADD;
1632 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1633 fnd_log.string
1634 (
1635 fnd_log.level_unexpected,
1636 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_header',
1637 'approver notes can not be updated by this API'
1638 );
1639 END IF;
1640 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1641 END IF;
1642
1643 IF (p_x_df_header_rec.attribute_category IS NULL) THEN
1644 p_x_df_header_rec.attribute_category := l_df_header_rec.attribute_category;
1645 ELSIF(p_x_df_header_rec.attribute_category = FND_API.G_MISS_CHAR) THEN
1646 p_x_df_header_rec.attribute_category := NULL;
1647 END IF;
1648
1649 IF (p_x_df_header_rec.attribute1 IS NULL) THEN
1650 p_x_df_header_rec.attribute1 := l_df_header_rec.attribute1;
1651 ELSIF(p_x_df_header_rec.attribute1 = FND_API.G_MISS_CHAR) THEN
1652 p_x_df_header_rec.attribute1 := NULL;
1653 END IF;
1654
1655 IF (p_x_df_header_rec.attribute2 IS NULL) THEN
1656 p_x_df_header_rec.attribute2 := l_df_header_rec.attribute2;
1657 ELSIF(p_x_df_header_rec.attribute2 = FND_API.G_MISS_CHAR) THEN
1658 p_x_df_header_rec.attribute2 := NULL;
1659 END IF;
1660
1661 IF (p_x_df_header_rec.attribute3 IS NULL) THEN
1662 p_x_df_header_rec.attribute3 := l_df_header_rec.attribute3;
1663 ELSIF(p_x_df_header_rec.attribute3 = FND_API.G_MISS_CHAR) THEN
1664 p_x_df_header_rec.attribute3 := NULL;
1665 END IF;
1666
1667 IF (p_x_df_header_rec.attribute4 IS NULL) THEN
1668 p_x_df_header_rec.attribute4 := l_df_header_rec.attribute4;
1669 ELSIF(p_x_df_header_rec.attribute4 = FND_API.G_MISS_CHAR) THEN
1670 p_x_df_header_rec.attribute4 := NULL;
1671 END IF;
1672
1673 IF (p_x_df_header_rec.attribute5 IS NULL) THEN
1674 p_x_df_header_rec.attribute5 := l_df_header_rec.attribute5;
1675 ELSIF(p_x_df_header_rec.attribute5 = FND_API.G_MISS_CHAR) THEN
1676 p_x_df_header_rec.attribute5 := NULL;
1677 END IF;
1678
1679 IF (p_x_df_header_rec.attribute6 IS NULL) THEN
1680 p_x_df_header_rec.attribute6 := l_df_header_rec.attribute6;
1681 ELSIF(p_x_df_header_rec.attribute6 = FND_API.G_MISS_CHAR) THEN
1682 p_x_df_header_rec.attribute6 := NULL;
1683 END IF;
1684
1685 IF (p_x_df_header_rec.attribute7 IS NULL) THEN
1686 p_x_df_header_rec.attribute7 := l_df_header_rec.attribute7;
1687 ELSIF(p_x_df_header_rec.attribute7 = FND_API.G_MISS_CHAR) THEN
1688 p_x_df_header_rec.attribute7 := NULL;
1689 END IF;
1690
1691 IF (p_x_df_header_rec.attribute8 IS NULL) THEN
1692 p_x_df_header_rec.attribute8 := l_df_header_rec.attribute8;
1693 ELSIF(p_x_df_header_rec.attribute8 = FND_API.G_MISS_CHAR) THEN
1694 p_x_df_header_rec.attribute8 := NULL;
1695 END IF;
1696
1697 IF (p_x_df_header_rec.attribute9 IS NULL) THEN
1698 p_x_df_header_rec.attribute9 := l_df_header_rec.attribute9;
1699 ELSIF(p_x_df_header_rec.attribute9 = FND_API.G_MISS_CHAR) THEN
1700 p_x_df_header_rec.attribute9 := NULL;
1701 END IF;
1702
1703 IF (p_x_df_header_rec.attribute10 IS NULL) THEN
1704 p_x_df_header_rec.attribute10 := l_df_header_rec.attribute10;
1705 ELSIF(p_x_df_header_rec.attribute10 = FND_API.G_MISS_CHAR) THEN
1706 p_x_df_header_rec.attribute10 := NULL;
1707 END IF;
1708
1709 IF (p_x_df_header_rec.attribute11 IS NULL) THEN
1710 p_x_df_header_rec.attribute11 := l_df_header_rec.attribute11;
1711 ELSIF(p_x_df_header_rec.attribute11 = FND_API.G_MISS_CHAR) THEN
1712 p_x_df_header_rec.attribute11 := NULL;
1713 END IF;
1714
1715 IF (p_x_df_header_rec.attribute12 IS NULL) THEN
1716 p_x_df_header_rec.attribute12 := l_df_header_rec.attribute12;
1717 ELSIF(p_x_df_header_rec.attribute12 = FND_API.G_MISS_CHAR) THEN
1718 p_x_df_header_rec.attribute12 := NULL;
1719 END IF;
1720
1721 IF (p_x_df_header_rec.attribute13 IS NULL) THEN
1722 p_x_df_header_rec.attribute13 := l_df_header_rec.attribute13;
1723 ELSIF(p_x_df_header_rec.attribute13 = FND_API.G_MISS_CHAR) THEN
1724 p_x_df_header_rec.attribute13 := NULL;
1725 END IF;
1726
1727 IF (p_x_df_header_rec.attribute14 IS NULL) THEN
1728 p_x_df_header_rec.attribute14 := l_df_header_rec.attribute14;
1729 ELSIF(p_x_df_header_rec.attribute14 = FND_API.G_MISS_CHAR) THEN
1730 p_x_df_header_rec.attribute14 := NULL;
1731 END IF;
1732
1733 IF (p_x_df_header_rec.attribute15 IS NULL) THEN
1734 p_x_df_header_rec.attribute15 := l_df_header_rec.attribute15;
1735 ELSIF(p_x_df_header_rec.attribute15 = FND_API.G_MISS_CHAR) THEN
1736 p_x_df_header_rec.attribute15 := NULL;
1737 END IF;
1738
1739 END IF;
1740 CLOSE df_header_csr;
1741 ELSIF (p_x_df_header_rec.operation_flag = G_OP_CREATE) THEN
1742
1743 IF (p_x_df_header_rec.unit_effectivity_id IS NULL OR
1744 p_x_df_header_rec.unit_effectivity_id = FND_API.G_MISS_NUM) THEN
1745 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_UE');
1746 FND_MSG_PUB.ADD;
1747 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1748 fnd_log.string
1749 (
1750 fnd_log.level_unexpected,
1751 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_header',
1752 'Unit effectivity ID can not be null while creating deferral header record'
1753 );
1754 END IF;
1755 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1756 END IF;
1757
1758 IF (p_x_df_header_rec.unit_deferral_type IS NULL OR
1759 p_x_df_header_rec.unit_deferral_type = FND_API.G_MISS_CHAR) THEN
1760 p_x_df_header_rec.unit_deferral_type := 'DEFERRAL';
1761 END IF;
1762
1763 IF(p_x_df_header_rec.approval_status_code IS NULL OR
1764 p_x_df_header_rec.approval_status_code = FND_API.G_MISS_CHAR) THEN
1765 p_x_df_header_rec.approval_status_code := 'DRAFT';
1766 END IF;
1767
1768 IF(p_x_df_header_rec.defer_reason_code = FND_API.G_MISS_CHAR) THEN
1769 p_x_df_header_rec.defer_reason_code := NULL;
1770 END IF;
1771
1772 IF(p_x_df_header_rec.skip_mr_flag IS NULL OR
1773 p_x_df_header_rec.skip_mr_flag = FND_API.G_MISS_CHAR) THEN
1774 p_x_df_header_rec.skip_mr_flag := G_NO_FLAG;
1775 END IF;
1776
1777 IF(p_x_df_header_rec.cancel_flag IS NULL OR
1778 p_x_df_header_rec.cancel_flag = FND_API.G_MISS_CHAR) THEN
1779 p_x_df_header_rec.cancel_flag := G_NO_FLAG;
1780 END IF;
1781
1782 IF(p_x_df_header_rec.affect_due_calc_flag IS NULL OR
1783 p_x_df_header_rec.affect_due_calc_flag = FND_API.G_MISS_CHAR) THEN
1784 p_x_df_header_rec.affect_due_calc_flag := G_YES_FLAG;
1785 END IF;
1786
1787 IF(p_x_df_header_rec.set_due_date = FND_API.G_MISS_DATE) THEN
1788 p_x_df_header_rec.set_due_date := NULL;
1789 END IF;
1790
1791 IF(p_x_df_header_rec.deferral_effective_on = FND_API.G_MISS_DATE) THEN
1792 p_x_df_header_rec.deferral_effective_on := NULL;
1793 END IF;
1794
1795 IF(p_x_df_header_rec.remarks = FND_API.G_MISS_CHAR) THEN
1796 p_x_df_header_rec.remarks := NULL;
1797 END IF;
1798
1799 IF(p_x_df_header_rec.approver_notes = FND_API.G_MISS_CHAR) THEN
1800 p_x_df_header_rec.approver_notes := NULL;
1801 END IF;
1802
1803 IF(p_x_df_header_rec.attribute_category = FND_API.G_MISS_CHAR) THEN
1804 p_x_df_header_rec.attribute_category := NULL;
1805 END IF;
1806
1807 IF(p_x_df_header_rec.attribute1 = FND_API.G_MISS_CHAR) THEN
1808 p_x_df_header_rec.attribute1 := NULL;
1809 END IF;
1810
1811 IF(p_x_df_header_rec.attribute2 = FND_API.G_MISS_CHAR) THEN
1812 p_x_df_header_rec.attribute2 := NULL;
1813 END IF;
1814
1815 IF(p_x_df_header_rec.attribute3 = FND_API.G_MISS_CHAR) THEN
1816 p_x_df_header_rec.attribute3 := NULL;
1817 END IF;
1818
1819 IF(p_x_df_header_rec.attribute4 = FND_API.G_MISS_CHAR) THEN
1820 p_x_df_header_rec.attribute4 := NULL;
1821 END IF;
1822
1823 IF(p_x_df_header_rec.attribute5 = FND_API.G_MISS_CHAR) THEN
1824 p_x_df_header_rec.attribute5 := NULL;
1825 END IF;
1826
1827 IF(p_x_df_header_rec.attribute6 = FND_API.G_MISS_CHAR) THEN
1828 p_x_df_header_rec.attribute6 := NULL;
1829 END IF;
1830
1831 IF(p_x_df_header_rec.attribute7 = FND_API.G_MISS_CHAR) THEN
1832 p_x_df_header_rec.attribute7 := NULL;
1833 END IF;
1834
1835 IF(p_x_df_header_rec.attribute8 = FND_API.G_MISS_CHAR) THEN
1836 p_x_df_header_rec.attribute8 := NULL;
1837 END IF;
1838
1839 IF(p_x_df_header_rec.attribute9 = FND_API.G_MISS_CHAR) THEN
1840 p_x_df_header_rec.attribute9 := NULL;
1841 END IF;
1842
1843 IF(p_x_df_header_rec.attribute10 = FND_API.G_MISS_CHAR) THEN
1844 p_x_df_header_rec.attribute10 := NULL;
1845 END IF;
1846
1847 IF(p_x_df_header_rec.attribute11 = FND_API.G_MISS_CHAR) THEN
1848 p_x_df_header_rec.attribute11 := NULL;
1849 END IF;
1850
1851 IF(p_x_df_header_rec.attribute12 = FND_API.G_MISS_CHAR) THEN
1852 p_x_df_header_rec.attribute12 := NULL;
1853 END IF;
1854
1855 IF(p_x_df_header_rec.attribute13 = FND_API.G_MISS_CHAR) THEN
1856 p_x_df_header_rec.attribute13 := NULL;
1857 END IF;
1858
1859 IF(p_x_df_header_rec.attribute14 = FND_API.G_MISS_CHAR) THEN
1860 p_x_df_header_rec.attribute14 := NULL;
1861 END IF;
1862
1863 IF(p_x_df_header_rec.attribute15 = FND_API.G_MISS_CHAR) THEN
1864 p_x_df_header_rec.attribute15 := NULL;
1865 END IF;
1866 END IF;
1867
1868 -- raise expected error
1869 IF(FND_MSG_PUB.count_msg > 0)THEN
1870 RAISE FND_API.G_EXC_ERROR;
1871 END IF;
1872
1873 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1874 fnd_log.string
1875 (
1876 fnd_log.level_procedure,
1877 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_header.end',
1878 'At the end of PLSQL procedure'
1879 );
1880 END IF;
1881
1882 END default_unchanged_df_header;
1883
1884 PROCEDURE process_df_schedules(
1885 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type,
1886 p_x_df_schedules_tbl IN OUT NOCOPY AHL_PRD_DF_PVT.df_schedules_tbl_type)IS
1887
1888 CURSOR counter_id_csr(p_counter_name IN VARCHAR2,p_unit_effectivity_id IN NUMBER) IS
1889 --SELECT CO.counter_id FROM CSI_CP_COUNTERS_V CO, AHL_UNIT_EFFECTIVITIES_APP_V UE
1890 SELECT CO.counter_id FROM CSI_CP_COUNTERS_V CO, AHL_UNIT_EFFECTIVITIES_B UE -- Undid App usage BLIND changes
1891 WHERE UPPER(co.counter_name) like UPPER(p_counter_name)
1892 AND co.customer_product_id = ue.csi_item_instance_id
1893 AND UE.unit_effectivity_id = p_unit_effectivity_id;
1894
1895 l_counter_id NUMBER;
1896
1897 BEGIN
1898
1899 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1900 fnd_log.string
1901 (
1902 fnd_log.level_procedure,
1903 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules.begin',
1904 'At the start of PLSQL procedure'
1905 );
1906 END IF;
1907 -- record dml validations and key requirement validations
1908 FOR i IN p_x_df_schedules_tbl.FIRST..p_x_df_schedules_tbl.LAST LOOP
1909 -- key requirements
1910 IF(p_x_df_schedules_tbl(i).operation_flag NOT IN (G_OP_CREATE,G_OP_UPDATE,G_OP_DELETE)) THEN
1911 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_INV_OP');
1912 FND_MSG_PUB.ADD;
1913 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1914 fnd_log.string
1915 (
1916 fnd_log.level_unexpected,
1917 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules',
1918 'Operation Flag is invalid in the schedule record : ' || i
1919 );
1920 END IF;
1921 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1922 ELSIF(p_x_df_schedules_tbl(i).operation_flag IN (G_OP_UPDATE,G_OP_DELETE)) THEN
1923 IF(p_x_df_schedules_tbl(i).unit_threshold_id IS NULL OR
1924 p_x_df_schedules_tbl(i).object_version_number IS NULL) THEN
1925 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_REC_KEY_MISS');
1926 FND_MSG_PUB.ADD;
1927 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1928 fnd_log.string
1929 (
1930 fnd_log.level_unexpected,
1931 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules',
1932 'Object version number or key missing in schedule record : ' || i
1933 );
1934 END IF;
1935 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1936 ELSIF (p_x_df_schedules_tbl(i).unit_deferral_id IS NOT NULL AND
1937 p_x_df_schedules_tbl(i).unit_deferral_id <> p_df_header_rec.unit_deferral_id) THEN
1938 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_HDR_MISS');
1939 FND_MSG_PUB.ADD;
1940 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1941 fnd_log.string
1942 (
1943 fnd_log.level_unexpected,
1944 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules',
1945 'Unit Deferral ID does not match in schedule record : ' || i
1946 );
1947 END IF;
1948 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1949 END IF;
1950 ELSIF(p_x_df_schedules_tbl(i).operation_flag = G_OP_CREATE) THEN
1951 IF(p_x_df_schedules_tbl(i).unit_threshold_id IS NOT NULL OR
1952 p_x_df_schedules_tbl(i).object_version_number IS NOT NULL) THEN
1953 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_INV_OP');
1954 FND_MSG_PUB.ADD;
1955 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1956 fnd_log.string
1957 (
1958 fnd_log.level_unexpected,
1959 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules',
1960 'For Create Operation, Unit Threshold ID or Object Version Number is not null in schedule record : ' || i
1961 );
1962 END IF;
1963 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1964 END IF;
1965 IF(p_x_df_schedules_tbl(i).unit_deferral_id IS NULL OR
1966 p_x_df_schedules_tbl(i).unit_deferral_id = FND_API.G_MISS_NUM) THEN
1967 p_x_df_schedules_tbl(i).unit_deferral_id := p_df_header_rec.unit_deferral_id;
1968 ELSIF(p_x_df_schedules_tbl(i).unit_deferral_id <> p_df_header_rec.unit_deferral_id)THEN
1969 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_HDR_MISS');
1970 FND_MSG_PUB.ADD;
1971 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
1972 fnd_log.string
1973 (
1974 fnd_log.level_unexpected,
1975 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules',
1976 'For Create Operation, Header Unit Deferral ID does not match with same in schedule record : ' || i
1977 );
1978 END IF;
1979 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1980 END IF;
1981 END IF;
1982 -- value to id conversion for counter name
1983 IF(G_MODULE_TYPE = 'JSP' AND p_x_df_schedules_tbl(i).operation_flag IN (G_OP_CREATE,G_OP_UPDATE))THEN
1984 OPEN counter_id_csr(p_x_df_schedules_tbl(i).counter_name, p_df_header_rec.unit_effectivity_id);
1985 FETCH counter_id_csr INTO l_counter_id;
1986 IF(counter_id_csr%NOTFOUND)THEN
1987 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CNT_NAME');
1988 FND_MESSAGE.Set_Token('COUNTER_NAME',p_x_df_schedules_tbl(i).counter_name);
1989 FND_MSG_PUB.ADD;
1990 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
1991 fnd_log.string
1992 (
1993 fnd_log.level_error,
1994 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules',
1995 'Invalid Counter name for schedule record : ' || i
1996 );
1997 END IF;
1998 ELSE
1999 p_x_df_schedules_tbl(i).counter_id := l_counter_id;
2000 END IF;
2001 CLOSE counter_id_csr;
2002 END IF;
2003 END LOOP;
2004
2005 -- raise expected error
2006 IF(FND_MSG_PUB.count_msg > 0)THEN
2007 RAISE FND_API.G_EXC_ERROR;
2008 END IF;
2009
2010 default_unchanged_df_schedules(p_x_df_schedules_tbl => p_x_df_schedules_tbl);
2011
2012 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2013 fnd_log.string
2014 (
2015 fnd_log.level_statement,
2016 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules',
2017 'Logging deferral schedule records prior to validations'
2018 );
2019 log_df_schedules(p_df_schedules_tbl => p_x_df_schedules_tbl);
2020 END IF;
2021
2022 validate_df_schedules(
2023 p_df_header_rec => p_df_header_rec,
2024 p_df_schedules_tbl => p_x_df_schedules_tbl
2025 );
2026
2027 IF(FND_MSG_PUB.count_msg > 0)THEN
2028 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2029 END IF;
2030
2031
2032
2033 FOR i IN p_x_df_schedules_tbl.FIRST..p_x_df_schedules_tbl.LAST LOOP
2034 IF(p_x_df_schedules_tbl(i).operation_flag = G_OP_DELETE) THEN
2035 AHL_UNIT_THRESHOLDS_PKG.delete_row(p_x_df_schedules_tbl(i).unit_threshold_id);
2036 END IF;
2037 END LOOP;
2038
2039 FOR i IN p_x_df_schedules_tbl.FIRST..p_x_df_schedules_tbl.LAST LOOP
2040 IF (p_x_df_schedules_tbl(i).operation_flag = G_OP_UPDATE) THEN
2041
2042 p_x_df_schedules_tbl(i).object_version_number := p_x_df_schedules_tbl(i).object_version_number + 1;
2043
2044 p_x_df_schedules_tbl(i).last_updated_by := fnd_global.user_id;
2045 p_x_df_schedules_tbl(i).last_update_date := SYSDATE;
2046 p_x_df_schedules_tbl(i).last_update_login := fnd_global.user_id;
2047
2048 AHL_UNIT_THRESHOLDS_PKG.update_row(
2049 p_unit_threshold_id => p_x_df_schedules_tbl(i).unit_threshold_id,
2050 p_object_version_number => p_x_df_schedules_tbl(i).object_version_number,
2051 p_last_updated_by => p_x_df_schedules_tbl(i).last_updated_by,
2052 p_last_update_date => p_x_df_schedules_tbl(i).last_update_date,
2053 p_last_update_login => p_x_df_schedules_tbl(i).last_update_login,
2054 p_unit_deferral_id => p_x_df_schedules_tbl(i).unit_deferral_id,
2055 p_counter_id => p_x_df_schedules_tbl(i).counter_id,
2056 p_counter_value => p_x_df_schedules_tbl(i).counter_value,
2057 p_ctr_value_type_code => p_x_df_schedules_tbl(i).ctr_value_type_code,
2058 p_attribute_category => p_x_df_schedules_tbl(i).attribute_category,
2059 p_attribute1 => p_x_df_schedules_tbl(i).attribute1,
2060 p_attribute2 => p_x_df_schedules_tbl(i).attribute2,
2061 p_attribute3 => p_x_df_schedules_tbl(i).attribute3,
2062 p_attribute4 => p_x_df_schedules_tbl(i).attribute4,
2063 p_attribute5 => p_x_df_schedules_tbl(i).attribute5,
2064 p_attribute6 => p_x_df_schedules_tbl(i).attribute6,
2065 p_attribute7 => p_x_df_schedules_tbl(i).attribute7,
2066 p_attribute8 => p_x_df_schedules_tbl(i).attribute8,
2067 p_attribute9 => p_x_df_schedules_tbl(i).attribute9,
2068 p_attribute10 => p_x_df_schedules_tbl(i).attribute10,
2069 p_attribute11 => p_x_df_schedules_tbl(i).attribute11,
2070 p_attribute12 => p_x_df_schedules_tbl(i).attribute12,
2071 p_attribute13 => p_x_df_schedules_tbl(i).attribute13,
2072 p_attribute14 => p_x_df_schedules_tbl(i).attribute14,
2073 p_attribute15 => p_x_df_schedules_tbl(i).attribute15
2074 );
2075 END IF;
2076 END LOOP;
2077 FOR i IN p_x_df_schedules_tbl.FIRST..p_x_df_schedules_tbl.LAST LOOP
2078 IF(p_x_df_schedules_tbl(i).operation_flag = G_OP_CREATE) THEN
2079
2080 p_x_df_schedules_tbl(i).object_version_number := 1;
2081
2082 p_x_df_schedules_tbl(i).created_by := fnd_global.user_id;
2083 p_x_df_schedules_tbl(i).creation_date := SYSDATE;
2084 p_x_df_schedules_tbl(i).last_updated_by := fnd_global.user_id;
2085 p_x_df_schedules_tbl(i).last_update_date := SYSDATE;
2086 p_x_df_schedules_tbl(i).last_update_login := fnd_global.user_id;
2087
2088 AHL_UNIT_THRESHOLDS_PKG.insert_row(
2089 p_x_unit_threshold_id => p_x_df_schedules_tbl(i).unit_threshold_id,
2090 p_object_version_number => p_x_df_schedules_tbl(i).object_version_number,
2091 p_created_by => p_x_df_schedules_tbl(i).created_by,
2092 p_creation_date => p_x_df_schedules_tbl(i).creation_date,
2093 p_last_updated_by => p_x_df_schedules_tbl(i).last_updated_by,
2094 p_last_update_date => p_x_df_schedules_tbl(i).last_update_date,
2095 p_last_update_login => p_x_df_schedules_tbl(i).last_update_login,
2096 p_unit_deferral_id => p_x_df_schedules_tbl(i).unit_deferral_id,
2097 p_counter_id => p_x_df_schedules_tbl(i).counter_id,
2098 p_counter_value => p_x_df_schedules_tbl(i).counter_value,
2099 p_ctr_value_type_code => p_x_df_schedules_tbl(i).ctr_value_type_code,
2100 p_attribute_category => p_x_df_schedules_tbl(i).attribute_category,
2101 p_attribute1 => p_x_df_schedules_tbl(i).attribute1,
2102 p_attribute2 => p_x_df_schedules_tbl(i).attribute2,
2103 p_attribute3 => p_x_df_schedules_tbl(i).attribute3,
2104 p_attribute4 => p_x_df_schedules_tbl(i).attribute4,
2105 p_attribute5 => p_x_df_schedules_tbl(i).attribute5,
2106 p_attribute6 => p_x_df_schedules_tbl(i).attribute6,
2107 p_attribute7 => p_x_df_schedules_tbl(i).attribute7,
2108 p_attribute8 => p_x_df_schedules_tbl(i).attribute8,
2109 p_attribute9 => p_x_df_schedules_tbl(i).attribute9,
2110 p_attribute10 => p_x_df_schedules_tbl(i).attribute10,
2111 p_attribute11 => p_x_df_schedules_tbl(i).attribute11,
2112 p_attribute12 => p_x_df_schedules_tbl(i).attribute12,
2113 p_attribute13 => p_x_df_schedules_tbl(i).attribute13,
2114 p_attribute14 => p_x_df_schedules_tbl(i).attribute14,
2115 p_attribute15 => p_x_df_schedules_tbl(i).attribute15
2116 );
2117 END IF;
2118 END LOOP;
2119
2120 IF(FND_MSG_PUB.count_msg > 0)THEN
2121 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2122 END IF;
2123
2124 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2125 fnd_log.string
2126 (
2127 fnd_log.level_procedure,
2128 'ahl.plsql.AHL_PRD_DF_PVT.process_df_schedules.end',
2129 'At the end of PLSQL procedure'
2130 );
2131 END IF;
2132
2133 END process_df_schedules;
2134 -----------------------------------------------------------------------------------
2135 -- Procedure to dump deferral schedules records
2136 -----------------------------------------------------------------------------------
2137 PROCEDURE log_df_schedules(
2138 p_df_schedules_tbl IN AHL_PRD_DF_PVT.df_schedules_tbl_type) IS
2139
2140 BEGIN
2141 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2142 FOR i IN p_df_schedules_tbl.FIRST..p_df_schedules_tbl.LAST LOOP
2143 fnd_log.string
2144 (
2145 fnd_log.level_statement,
2146 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2147 'p_df_schedules_tbl('|| i ||').operation_flag : ' || p_df_schedules_tbl(i).operation_flag
2148 );
2149 fnd_log.string
2150 (
2151 fnd_log.level_statement,
2152 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2153 'p_df_schedules_tbl('|| i ||').unit_threshold_id : ' || p_df_schedules_tbl(i).unit_threshold_id
2154 );
2155 fnd_log.string
2156 (
2157 fnd_log.level_statement,
2158 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2159 'p_df_schedules_tbl('|| i ||').object_version_number : ' || p_df_schedules_tbl(i).object_version_number
2160 );
2161 fnd_log.string
2162 (
2163 fnd_log.level_statement,
2164 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2165 'p_df_schedules_tbl('|| i ||').unit_deferral_id : ' || p_df_schedules_tbl(i).unit_deferral_id
2166 );
2167 fnd_log.string
2168 (
2169 fnd_log.level_statement,
2170 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2171 'p_df_schedules_tbl('|| i ||').counter_id : ' || p_df_schedules_tbl(i).counter_id
2172 );
2173 fnd_log.string
2174 (
2175 fnd_log.level_statement,
2176 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2177 'p_df_schedules_tbl('|| i ||').counter_name : ' || p_df_schedules_tbl(i).counter_name
2178 );
2179 fnd_log.string
2180 (
2181 fnd_log.level_statement,
2182 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2183 'p_df_schedules_tbl('|| i ||').ctr_value_type_code : ' || p_df_schedules_tbl(i).ctr_value_type_code
2184 );
2185 fnd_log.string
2186 (
2187 fnd_log.level_statement,
2188 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2189 'p_df_schedules_tbl('|| i ||').counter_value : ' || p_df_schedules_tbl(i).counter_value
2190 );
2191 fnd_log.string
2192 (
2193 fnd_log.level_statement,
2194 'ahl.plsql.AHL_PRD_DF_PVT.log_df_schedules',
2195 'p_df_schedules_tbl('|| i ||').unit_of_measure : ' || p_df_schedules_tbl(i).unit_of_measure
2196 );
2197 END LOOP;
2198 END IF;
2199 END log_df_schedules;
2200
2201 PROCEDURE validate_df_schedules(
2202 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type,
2203 p_df_schedules_tbl IN AHL_PRD_DF_PVT.df_schedules_tbl_type)IS
2204
2205
2206 CURSOR valid_counter_csr(p_unit_deferral_id IN NUMBER,p_counter_id IN NUMBER) IS
2207 --SELECT 'x' FROM CSI_CP_COUNTERS_V CO, AHL_UNIT_EFFECTIVITIES_APP_V UE,AHL_UNIT_DEFERRALS_B UD
2208 SELECT 'x' FROM CSI_CP_COUNTERS_V CO, AHL_UNIT_EFFECTIVITIES_B UE,AHL_UNIT_DEFERRALS_B UD -- Undid app usage related blind changes
2209 WHERE co.customer_product_id = ue.csi_item_instance_id
2210 AND co.counter_id = p_counter_id
2211 AND UE.unit_effectivity_id = UD.unit_effectivity_id
2212 AND UD.unit_deferral_id = p_unit_deferral_id;
2213
2214 /*CURSOR mr_valid_counter_csr(p_unit_deferral_id IN NUMBER,p_counter_id IN NUMBER) IS
2215 SELECT 'x' from ahl_unit_effectivities_b UE, ahl_unit_deferrals_b UD,AHL_MR_INTERVALS_V MR,CSI_CP_COUNTERS_V CO
2216 WHERE UD.unit_deferral_id = p_unit_deferral_id
2217 AND UE.unit_effectivity_id = UD.unit_effectivity_id
2218 AND co.customer_product_id = ue.csi_item_instance_id
2219 AND UE.mr_effectivity_id = MR.mr_effectivity_id
2220 AND CO.counter_id = p_counter_id
2221 AND CO.counter_name = MR.counter_name; */
2222
2223
2224 CURSOR valid_df_rec_del_csr(p_unit_threshold_id IN NUMBER, p_object_version_number IN NUMBER) IS
2225 SELECT 'x' FROM ahl_unit_thresholds
2226 WHERE object_version_number = p_object_version_number
2227 AND unit_threshold_id = p_unit_threshold_id;
2228
2229 l_exists VARCHAR2(1);
2230 --l_current_counter_value NUMBER;
2231
2232 BEGIN
2233 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2234 fnd_log.string
2235 (
2236 fnd_log.level_procedure,
2237 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_schedules.begin',
2238 'At the start of PLSQL procedure'
2239 );
2240 END IF;
2241
2242 FOR i IN p_df_schedules_tbl.FIRST..p_df_schedules_tbl.LAST LOOP
2243 -- not needed when module type is JSP as value to id conversion took care of that
2244 IF(p_df_schedules_tbl(i).operation_flag IN (G_OP_CREATE,G_OP_UPDATE) AND NVL(G_MODULE_TYPE,'x') <> 'JSP') THEN
2245 -- validate whether valid items' counter
2246 OPEN valid_counter_csr(p_df_schedules_tbl(i).unit_deferral_id,p_df_schedules_tbl(i).counter_id);
2247 FETCH valid_counter_csr INTO l_exists;
2248 IF(valid_counter_csr%NOTFOUND)THEN
2249 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CNT_NAME');
2250 FND_MESSAGE.Set_Token('COUNTER_NAME',p_df_schedules_tbl(i).counter_name);
2251 FND_MSG_PUB.ADD;
2252 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2253 fnd_log.string
2254 (
2255 fnd_log.level_error,
2256 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_schedules',
2257 'Invalid Counter name for associated item instance in schedule record : ' || i
2258 );
2259 END IF;
2260 END IF;
2261 CLOSE valid_counter_csr;
2262 -- validate whether counter defined for this MR at FMP level
2263 /*IF(p_df_header_rec.deferral_type = 'MR')THEN
2264 OPEN mr_valid_counter_csr(p_df_schedules_tbl(i).unit_deferral_id,p_df_schedules_tbl(i).counter_id);
2265 FETCH mr_valid_counter_csr INTO l_exists;
2266 IF(mr_valid_counter_csr%NOTFOUND)THEN
2267 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_INV_CNT');
2268 FND_MSG_PUB.ADD;
2269 END IF;
2270 CLOSE mr_valid_counter_csr;
2271 END IF;*/
2272
2273 ELSIF(p_df_schedules_tbl(i).operation_flag = G_OP_DELETE) THEN
2274 -- validate whether record exists for delete
2275 OPEN valid_df_rec_del_csr(p_df_schedules_tbl(i).unit_threshold_id,p_df_schedules_tbl(i).object_version_number);
2276 FETCH valid_df_rec_del_csr INTO l_exists;
2277 IF(valid_df_rec_del_csr%NOTFOUND) THEN
2278 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_REC_MISS');
2279 FND_MSG_PUB.ADD;
2280 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2281 fnd_log.string
2282 (
2283 fnd_log.level_error,
2284 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_schedules',
2285 'Record for delete operation not found with keys in schedule record : ' || i
2286 );
2287 END IF;
2288 END IF;
2289 CLOSE valid_df_rec_del_csr;
2290 END IF;
2291 END LOOP;
2292
2293 -- raise expected error
2294 IF(FND_MSG_PUB.count_msg > 0)THEN
2295 RAISE FND_API.G_EXC_ERROR;
2296 END IF;
2297
2298 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2299 fnd_log.string
2300 (
2301 fnd_log.level_procedure,
2302 'ahl.plsql.AHL_PRD_DF_PVT.validate_df_schedules.end',
2303 'At the end of PLSQL procedure'
2304 );
2305 END IF;
2306
2307 END validate_df_schedules;
2308
2309 PROCEDURE default_unchanged_df_schedules(
2310 p_x_df_schedules_tbl IN OUT NOCOPY AHL_PRD_DF_PVT.df_schedules_tbl_type)IS
2311
2312 CURSOR df_schedules_csr(p_unit_threshold_id IN NUMBER, p_object_version_number IN NUMBER) IS
2313 SELECT unit_deferral_id,counter_id,counter_value,ctr_value_type_code,attribute_category, attribute1,attribute2, attribute3, attribute4,
2314 attribute5, attribute6, attribute7, attribute8, attribute9, attribute10, attribute11,
2315 attribute12, attribute13, attribute14, attribute15
2316 FROM ahl_unit_thresholds
2317 WHERE object_version_number= p_object_version_number
2318 AND unit_threshold_id = p_unit_threshold_id;
2319
2320 l_df_schedules_rec AHL_PRD_DF_PVT.df_schedules_rec_type;
2321
2322 BEGIN
2323 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2324 fnd_log.string
2325 (
2326 fnd_log.level_procedure,
2327 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules.begin',
2328 'At the start of PLSQL procedure'
2329 );
2330 END IF;
2331
2332 FOR i IN p_x_df_schedules_tbl.FIRST..p_x_df_schedules_tbl.LAST LOOP
2333 IF(p_x_df_schedules_tbl(i).operation_flag = G_OP_UPDATE) THEN
2334 OPEN df_schedules_csr(p_x_df_schedules_tbl(i).unit_threshold_id, p_x_df_schedules_tbl(i).object_version_number);
2335 FETCH df_schedules_csr INTO l_df_schedules_rec.unit_deferral_id,l_df_schedules_rec.counter_id,
2336 l_df_schedules_rec.counter_value, l_df_schedules_rec.ctr_value_type_code,
2337 l_df_schedules_rec.attribute_category,l_df_schedules_rec.attribute1,l_df_schedules_rec.attribute2,
2338 l_df_schedules_rec.attribute3, l_df_schedules_rec.attribute4, l_df_schedules_rec.attribute5,
2339 l_df_schedules_rec.attribute6, l_df_schedules_rec.attribute7, l_df_schedules_rec.attribute8,
2340 l_df_schedules_rec.attribute9, l_df_schedules_rec.attribute10, l_df_schedules_rec.attribute11,
2341 l_df_schedules_rec.attribute12, l_df_schedules_rec.attribute13, l_df_schedules_rec.attribute14, l_df_schedules_rec.attribute15;
2342 IF (df_schedules_csr%NOTFOUND) THEN
2343 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_REC_MISS');
2344 FND_MSG_PUB.ADD;
2345 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2346 fnd_log.string
2347 (
2348 fnd_log.level_error,
2349 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2350 'Missing Deferral Schedule Record : ' || i
2351 );
2352 END IF;
2353 ELSE
2354 IF (p_x_df_schedules_tbl(i).unit_deferral_id IS NULL) THEN
2355 p_x_df_schedules_tbl(i).unit_deferral_id := l_df_schedules_rec.unit_deferral_id;
2356 ELSIF(p_x_df_schedules_tbl(i).unit_deferral_id <> l_df_schedules_rec.unit_deferral_id) THEN
2357 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_SCH_HDR_MISS');
2358 FND_MSG_PUB.ADD;
2359 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
2360 fnd_log.string
2361 (
2362 fnd_log.level_unexpected,
2363 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2364 'Unit Deferral ID does not match with deferral schedule record : ' || i
2365 );
2366 END IF;
2367 CLOSE df_schedules_csr;
2368 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2369 END IF;
2370
2371 IF (p_x_df_schedules_tbl(i).counter_id IS NULL) THEN
2372 p_x_df_schedules_tbl(i).counter_id := l_df_schedules_rec.counter_id;
2373 ELSIF(p_x_df_schedules_tbl(i).counter_id = FND_API.G_MISS_NUM) THEN
2374 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CNT_NAME');
2375 FND_MESSAGE.Set_Token('COUNTER_NAME',p_x_df_schedules_tbl(i).counter_name);
2376 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2377 fnd_log.string
2378 (
2379 fnd_log.level_error,
2380 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2381 'Missing counter ID in schedule Record : ' || i
2382 );
2383 END IF;
2384 END IF;
2385
2386 IF (p_x_df_schedules_tbl(i).counter_value IS NULL) THEN
2387 p_x_df_schedules_tbl(i).counter_value := l_df_schedules_rec.counter_value;
2388 ELSIF(p_x_df_schedules_tbl(i).counter_value = FND_API.G_MISS_NUM OR
2389 p_x_df_schedules_tbl(i).counter_value <= 0) THEN
2390 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CNTVAL');
2391 FND_MESSAGE.Set_Token('COUNTER_NAME',p_x_df_schedules_tbl(i).counter_name);
2392 FND_MESSAGE.Set_Token('COUNTER_VALUE',p_x_df_schedules_tbl(i).counter_value);
2393 FND_MSG_PUB.ADD;
2394 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2395 fnd_log.string
2396 (
2397 fnd_log.level_error,
2398 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2399 'Missing counter Value in schedule Record : ' || i
2400 );
2401 END IF;
2402 END IF;
2403
2404 IF (p_x_df_schedules_tbl(i).ctr_value_type_code IS NULL) THEN
2405 p_x_df_schedules_tbl(i).ctr_value_type_code := l_df_schedules_rec.ctr_value_type_code;
2406 ELSIF(p_x_df_schedules_tbl(i).ctr_value_type_code NOT IN(G_DEFER_BY,G_DEFER_TO)) THEN
2407 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CNTVL_TPCD');
2408 FND_MSG_PUB.ADD;
2409 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
2410 fnd_log.string
2411 (
2412 fnd_log.level_unexpected,
2413 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2414 'Invalid counter value type code in deferral schedule record : ' || i
2415 );
2416 END IF;
2417 CLOSE df_schedules_csr;
2418 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2419 END IF;
2420
2421 IF (p_x_df_schedules_tbl(i).attribute_category IS NULL) THEN
2422 p_x_df_schedules_tbl(i).attribute_category := l_df_schedules_rec.attribute_category;
2423 ELSIF(p_x_df_schedules_tbl(i).attribute_category = FND_API.G_MISS_CHAR) THEN
2424 p_x_df_schedules_tbl(i).attribute_category := NULL;
2425 END IF;
2426
2427 IF (p_x_df_schedules_tbl(i).attribute1 IS NULL) THEN
2428 p_x_df_schedules_tbl(i).attribute1 := l_df_schedules_rec.attribute1;
2429 ELSIF(p_x_df_schedules_tbl(i).attribute1 = FND_API.G_MISS_CHAR) THEN
2430 p_x_df_schedules_tbl(i).attribute1 := NULL;
2431 END IF;
2432
2433 IF (p_x_df_schedules_tbl(i).attribute2 IS NULL) THEN
2434 p_x_df_schedules_tbl(i).attribute2 := l_df_schedules_rec.attribute2;
2435 ELSIF(p_x_df_schedules_tbl(i).attribute2 = FND_API.G_MISS_CHAR) THEN
2436 p_x_df_schedules_tbl(i).attribute2 := NULL;
2437 END IF;
2438
2439 IF (p_x_df_schedules_tbl(i).attribute3 IS NULL) THEN
2440 p_x_df_schedules_tbl(i).attribute3 := l_df_schedules_rec.attribute3;
2441 ELSIF(p_x_df_schedules_tbl(i).attribute3 = FND_API.G_MISS_CHAR) THEN
2442 p_x_df_schedules_tbl(i).attribute3 := NULL;
2443 END IF;
2444
2445 IF (p_x_df_schedules_tbl(i).attribute4 IS NULL) THEN
2446 p_x_df_schedules_tbl(i).attribute4 := l_df_schedules_rec.attribute4;
2447 ELSIF(p_x_df_schedules_tbl(i).attribute4 = FND_API.G_MISS_CHAR) THEN
2448 p_x_df_schedules_tbl(i).attribute4 := NULL;
2449 END IF;
2450
2451 IF (p_x_df_schedules_tbl(i).attribute5 IS NULL) THEN
2452 p_x_df_schedules_tbl(i).attribute5 := l_df_schedules_rec.attribute5;
2453 ELSIF(p_x_df_schedules_tbl(i).attribute5 = FND_API.G_MISS_CHAR) THEN
2454 p_x_df_schedules_tbl(i).attribute5 := NULL;
2455 END IF;
2456
2457 IF (p_x_df_schedules_tbl(i).attribute6 IS NULL) THEN
2458 p_x_df_schedules_tbl(i).attribute6 := l_df_schedules_rec.attribute6;
2459 ELSIF(p_x_df_schedules_tbl(i).attribute6 = FND_API.G_MISS_CHAR) THEN
2460 p_x_df_schedules_tbl(i).attribute6 := NULL;
2461 END IF;
2462
2463 IF (p_x_df_schedules_tbl(i).attribute7 IS NULL) THEN
2464 p_x_df_schedules_tbl(i).attribute7 := l_df_schedules_rec.attribute7;
2465 ELSIF(p_x_df_schedules_tbl(i).attribute7 = FND_API.G_MISS_CHAR) THEN
2466 p_x_df_schedules_tbl(i).attribute7 := NULL;
2467 END IF;
2468
2469 IF (p_x_df_schedules_tbl(i).attribute8 IS NULL) THEN
2470 p_x_df_schedules_tbl(i).attribute8 := l_df_schedules_rec.attribute8;
2471 ELSIF(p_x_df_schedules_tbl(i).attribute8 = FND_API.G_MISS_CHAR) THEN
2472 p_x_df_schedules_tbl(i).attribute8 := NULL;
2473 END IF;
2474
2475 IF (p_x_df_schedules_tbl(i).attribute9 IS NULL) THEN
2476 p_x_df_schedules_tbl(i).attribute9 := l_df_schedules_rec.attribute9;
2477 ELSIF(p_x_df_schedules_tbl(i).attribute9 = FND_API.G_MISS_CHAR) THEN
2478 p_x_df_schedules_tbl(i).attribute9 := NULL;
2479 END IF;
2480
2481 IF (p_x_df_schedules_tbl(i).attribute10 IS NULL) THEN
2482 p_x_df_schedules_tbl(i).attribute10 := l_df_schedules_rec.attribute10;
2483 ELSIF(p_x_df_schedules_tbl(i).attribute10 = FND_API.G_MISS_CHAR) THEN
2484 p_x_df_schedules_tbl(i).attribute10 := NULL;
2485 END IF;
2486
2487 IF (p_x_df_schedules_tbl(i).attribute11 IS NULL) THEN
2488 p_x_df_schedules_tbl(i).attribute11 := l_df_schedules_rec.attribute11;
2489 ELSIF(p_x_df_schedules_tbl(i).attribute11 = FND_API.G_MISS_CHAR) THEN
2490 p_x_df_schedules_tbl(i).attribute11 := NULL;
2491 END IF;
2492
2493 IF (p_x_df_schedules_tbl(i).attribute12 IS NULL) THEN
2494 p_x_df_schedules_tbl(i).attribute12 := l_df_schedules_rec.attribute12;
2495 ELSIF(p_x_df_schedules_tbl(i).attribute12 = FND_API.G_MISS_CHAR) THEN
2496 p_x_df_schedules_tbl(i).attribute12 := NULL;
2497 END IF;
2498
2499 IF (p_x_df_schedules_tbl(i).attribute13 IS NULL) THEN
2500 p_x_df_schedules_tbl(i).attribute13 := l_df_schedules_rec.attribute13;
2501 ELSIF(p_x_df_schedules_tbl(i).attribute13 = FND_API.G_MISS_CHAR) THEN
2502 p_x_df_schedules_tbl(i).attribute13 := NULL;
2503 END IF;
2504
2505 IF (p_x_df_schedules_tbl(i).attribute14 IS NULL) THEN
2506 p_x_df_schedules_tbl(i).attribute14 := l_df_schedules_rec.attribute14;
2507 ELSIF(p_x_df_schedules_tbl(i).attribute14 = FND_API.G_MISS_CHAR) THEN
2508 p_x_df_schedules_tbl(i).attribute14 := NULL;
2509 END IF;
2510
2511 IF (p_x_df_schedules_tbl(i).attribute15 IS NULL) THEN
2512 p_x_df_schedules_tbl(i).attribute15 := l_df_schedules_rec.attribute15;
2513 ELSIF(p_x_df_schedules_tbl(i).attribute15 = FND_API.G_MISS_CHAR) THEN
2514 p_x_df_schedules_tbl(i).attribute15 := NULL;
2515 END IF;
2516
2517 END IF;
2518 CLOSE df_schedules_csr;
2519 ELSIF (p_x_df_schedules_tbl(i).operation_flag = G_OP_CREATE) THEN
2520
2521 IF (p_x_df_schedules_tbl(i).unit_deferral_id IS NULL OR
2522 p_x_df_schedules_tbl(i).unit_deferral_id = FND_API.G_MISS_NUM) THEN
2523 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_UDID');
2524 FND_MSG_PUB.ADD;
2525 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
2526 fnd_log.string
2527 (
2528 fnd_log.level_unexpected,
2529 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2530 'Missing Unit Deferral ID for create operation in deferral schedule record : ' || i
2531 );
2532 END IF;
2533 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2534 END IF;
2535
2536 IF (p_x_df_schedules_tbl(i).counter_id IS NULL OR
2537 p_x_df_schedules_tbl(i).counter_id = FND_API.G_MISS_NUM) THEN
2538 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CNT_NAME');
2539 FND_MESSAGE.Set_Token('COUNTER_NAME',p_x_df_schedules_tbl(i).counter_name);
2540 FND_MSG_PUB.ADD;
2541 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2542 fnd_log.string
2543 (
2544 fnd_log.level_error,
2545 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2546 'Missing counter ID in schedule Record : ' || i
2547 );
2548 END IF;
2549 END IF;
2550
2551 IF (p_x_df_schedules_tbl(i).counter_value IS NULL OR
2552 p_x_df_schedules_tbl(i).counter_value = FND_API.G_MISS_NUM OR
2553 p_x_df_schedules_tbl(i).counter_value <= 0 ) THEN
2554 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CNTVAL');
2555 FND_MESSAGE.Set_Token('COUNTER_NAME',p_x_df_schedules_tbl(i).counter_name);
2556 FND_MESSAGE.Set_Token('COUNTER_VALUE',p_x_df_schedules_tbl(i).counter_value);
2557 FND_MSG_PUB.ADD;
2558 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2559 fnd_log.string
2560 (
2561 fnd_log.level_error,
2562 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2563 'Missing or invalid counter Value in schedule Record : ' || i
2564 );
2565 END IF;
2566 END IF;
2567
2568 IF (p_x_df_schedules_tbl(i).ctr_value_type_code IS NULL OR
2569 p_x_df_schedules_tbl(i).ctr_value_type_code NOT IN(G_DEFER_BY,G_DEFER_TO)) THEN
2570 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_CNTVL_TPCD');
2571 FND_MSG_PUB.ADD;
2572 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
2573 fnd_log.string
2574 (
2575 fnd_log.level_unexpected,
2576 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules',
2577 'Invalid counter value type code in deferral schedule record : ' || i
2578 );
2579 END IF;
2580 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2581 END IF;
2582
2583 IF (p_x_df_schedules_tbl(i).attribute_category = FND_API.G_MISS_CHAR) THEN
2584 p_x_df_schedules_tbl(i).attribute_category := NULL;
2585 END IF;
2586
2587 IF (p_x_df_schedules_tbl(i).attribute1 = FND_API.G_MISS_CHAR) THEN
2588 p_x_df_schedules_tbl(i).attribute1 := NULL;
2589 END IF;
2590
2591 IF (p_x_df_schedules_tbl(i).attribute2 = FND_API.G_MISS_CHAR) THEN
2592 p_x_df_schedules_tbl(i).attribute2 := NULL;
2593 END IF;
2594
2595 IF (p_x_df_schedules_tbl(i).attribute3 = FND_API.G_MISS_CHAR) THEN
2596 p_x_df_schedules_tbl(i).attribute3 := NULL;
2597 END IF;
2598
2599 IF (p_x_df_schedules_tbl(i).attribute4 = FND_API.G_MISS_CHAR) THEN
2600 p_x_df_schedules_tbl(i).attribute4 := NULL;
2601 END IF;
2602
2603 IF (p_x_df_schedules_tbl(i).attribute5 = FND_API.G_MISS_CHAR) THEN
2604 p_x_df_schedules_tbl(i).attribute5 := NULL;
2605 END IF;
2606
2607 IF (p_x_df_schedules_tbl(i).attribute6 = FND_API.G_MISS_CHAR) THEN
2608 p_x_df_schedules_tbl(i).attribute6 := NULL;
2609 END IF;
2610
2611 IF (p_x_df_schedules_tbl(i).attribute7 = FND_API.G_MISS_CHAR) THEN
2612 p_x_df_schedules_tbl(i).attribute7 := NULL;
2613 END IF;
2614
2615 IF (p_x_df_schedules_tbl(i).attribute8 = FND_API.G_MISS_CHAR) THEN
2616 p_x_df_schedules_tbl(i).attribute8 := NULL;
2617 END IF;
2618
2619 IF (p_x_df_schedules_tbl(i).attribute9 = FND_API.G_MISS_CHAR) THEN
2620 p_x_df_schedules_tbl(i).attribute9 := NULL;
2621 END IF;
2622
2623 IF (p_x_df_schedules_tbl(i).attribute10 = FND_API.G_MISS_CHAR) THEN
2624 p_x_df_schedules_tbl(i).attribute10 := NULL;
2625 END IF;
2626
2627 IF (p_x_df_schedules_tbl(i).attribute11 = FND_API.G_MISS_CHAR) THEN
2628 p_x_df_schedules_tbl(i).attribute11 := NULL;
2629 END IF;
2630
2631 IF (p_x_df_schedules_tbl(i).attribute12 = FND_API.G_MISS_CHAR) THEN
2632 p_x_df_schedules_tbl(i).attribute12 := NULL;
2633 END IF;
2634
2635 IF (p_x_df_schedules_tbl(i).attribute13 = FND_API.G_MISS_CHAR) THEN
2636 p_x_df_schedules_tbl(i).attribute13 := NULL;
2637 END IF;
2638
2639 IF (p_x_df_schedules_tbl(i).attribute14 = FND_API.G_MISS_CHAR) THEN
2640 p_x_df_schedules_tbl(i).attribute14 := NULL;
2641 END IF;
2642
2643 IF (p_x_df_schedules_tbl(i).attribute15 = FND_API.G_MISS_CHAR) THEN
2644 p_x_df_schedules_tbl(i).attribute15 := NULL;
2645 END IF;
2646
2647 END IF;
2648 END LOOP;
2649
2650 -- raise expected error
2651 IF(FND_MSG_PUB.count_msg > 0)THEN
2652 RAISE FND_API.G_EXC_ERROR;
2653 END IF;
2654
2655 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2656 fnd_log.string
2657 (
2658 fnd_log.level_procedure,
2659 'ahl.plsql.AHL_PRD_DF_PVT.default_unchanged_df_schedules.end',
2660 'At the end of PLSQL procedure'
2661 );
2662 END IF;
2663
2664 END default_unchanged_df_schedules;
2665 --------------------------------------------------------------------------------
2666 -- Validate deferral record as a whole
2667 --------------------------------------------------------------------------------
2668
2669 PROCEDURE validate_deferral_updates(
2670 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type,
2671 x_warning_msg_data OUT NOCOPY VARCHAR2)IS
2672
2673 l_count1 NUMBER;
2674 l_count2 NUMBER;
2675
2676 CURSOR counter_values_csr(p_unit_deferral_id IN NUMBER) IS
2677 SELECT UT.counter_id, CO.name, UT.counter_value, UT.ctr_value_type_code,CO.uom_code
2678 FROM CS_COUNTERS CO,ahl_unit_thresholds UT
2679 WHERE CO.counter_id = UT.counter_id
2680 AND UT.unit_deferral_id = p_unit_deferral_id;
2681
2682 l_counter_id NUMBER;
2683 l_counter_name VARCHAR2(30);
2684 l_uom_code VARCHAR2(3);
2685 l_counter_value NUMBER;
2686 l_ctr_value_type_code VARCHAR2(30);
2687 i NUMBER := 0;
2688 l_defer_due_date DATE;
2689 l_calc_due_date_flag BOOLEAN := false;
2690 l_current_counter_value NUMBER := 0;
2691
2692 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
2693 l_msg_data VARCHAR2(4000);
2694 l_msg_count NUMBER;
2695
2696 CURSOR curr_counter_val_csr(p_unit_deferral_id IN NUMBER, p_counter_id IN NUMBER,p_deferral_effective_on IN DATE) IS
2697 /* Modified to fix bug# 8328818: ignore disabled counter readings.
2698 SELECT NVL(net_reading, 0) FROM cs_ctr_counter_values_v ctrread, cs_counter_groups_v ctrgrp,
2699 -- AHL_UNIT_EFFECTIVITIES_APP_V UE,AHL_UNIT_DEFERRALS_B UD
2700 AHL_UNIT_EFFECTIVITIES_B UE,AHL_UNIT_DEFERRALS_B UD -- Undid app usage related blind changes
2701 WHERE ctrread.VALUE_TIMESTAMP <= p_deferral_effective_on
2702 AND ctrread.counter_group_id = ctrgrp.counter_group_id
2703 AND SOURCE_OBJECT_CODE = 'CP'
2704 AND SOURCE_OBJECT_ID = UE.csi_item_instance_id
2705 AND ctrread.counter_id = p_counter_id
2706 AND UE.unit_effectivity_id = UD.unit_effectivity_id
2707 AND UD.unit_deferral_id = p_unit_deferral_id
2708 ORDER BY ctrread.counter_id asc, ctrread.VALUE_TIMESTAMP desc;
2709 */
2710
2711 -- Fix for bug# 8328818: ignore disabled counter readings.
2712 -- rewrote above query as we do not need AHL_UNIT_EFFECTIVITIES_B,
2713 -- cs_counter_groups_v, AHL_UNIT_DEFERRALS_B tables.
2714 SELECT * FROM (
2715 SELECT CCR.NET_READING
2716 FROM CSI_COUNTER_READINGS CCR
2717 WHERE CCR.COUNTER_ID = P_COUNTER_ID
2718 AND nvl(CCR.disabled_flag,'N') = 'N'
2719 AND CCR.VALUE_TIMESTAMP <= p_deferral_effective_on
2720 ORDER BY CCR.VALUE_TIMESTAMP DESC
2721 )
2722 WHERE rownum < 2;
2723
2724 l_counter_values_tbl AHL_UMP_PROCESSUNIT_PVT.counter_values_tbl_type;
2725
2726 CURSOR whichever_first_code_csr (p_unit_effectivity_id IN NUMBER) IS
2727 SELECT whichever_first_code
2728 --FROM AHL_MR_HEADERS_APP_V MR, AHL_UNIT_EFFECTIVITIES_APP_V UE
2729 FROM AHL_MR_HEADERS_B MR, AHL_UNIT_EFFECTIVITIES_B UE -- Undid blind changes for app_usage code
2730 WHERE MR.mr_header_id = UE.mr_header_id
2731 AND UE.unit_effectivity_id = p_unit_effectivity_id;
2732
2733 l_whichever_first_code ahl_mr_headers_b.whichever_first_code%TYPE;
2734
2735
2736 CURSOR next_due_date_csr(p_unit_effectivity_id IN NUMBER) IS
2737 SELECT UE.due_date
2738 FROM AHL_UNIT_EFFECTIVITIES_B UE
2739 WHERE UE.mr_header_id = (
2740 SELECT mr_header_id FROM AHL_UNIT_EFFECTIVITIES_B where unit_effectivity_id = p_unit_effectivity_id)
2741 AND UE.csi_item_instance_id = (
2742 SELECT csi_item_instance_id FROM AHL_UNIT_EFFECTIVITIES_B where unit_effectivity_id = p_unit_effectivity_id)
2743 AND UE.unit_effectivity_id <> p_unit_effectivity_id
2744 AND ( UE.status_code IS NULL OR UE.status_code = 'INIT-DUE')
2745 ORDER BY DUE_DATE ASC;
2746
2747 l_next_due_date DATE;
2748
2749 -- JKJain, NR Analysis and Forecasting
2750 CURSOR get_csi_item_instance_id(c_unit_effectivity_id IN NUMBER) IS
2751 SELECT CSI_ITEM_INSTANCE_ID
2752 FROM AHL_UNIT_EFFECTIVITIES_B
2753 WHERE unit_effectivity_id = c_unit_effectivity_id;
2754 l_fleet_header_id NUMBER;
2755 l_csi_item_inst_id NUMBER;
2756 l_uc_header_id NUMBER;
2757
2758
2759 BEGIN
2760 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2761 fnd_log.string
2762 (
2763 fnd_log.level_procedure,
2764 'ahl.plsql.AHL_PRD_DF_PVT.validate_deferral_updates.begin',
2765 'At the start of PLSQL procedure'
2766 );
2767 END IF;
2768
2769 -- df schedule validity for the the unit_deferral_id.
2770 SELECT count(*) INTO l_count1 from (SELECT counter_id FROM ahl_unit_thresholds
2771 WHERE unit_deferral_id = p_df_header_rec.unit_deferral_id);
2772
2773 SELECT count(*) INTO l_count2 from (SELECT DISTINCT counter_id FROM ahl_unit_thresholds
2774 WHERE unit_deferral_id = p_df_header_rec.unit_deferral_id);
2775 IF(l_count1 <> l_count2) THEN
2776 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_CNT_NAME_REP');
2777 FND_MSG_PUB.ADD;
2778 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2779 fnd_log.string
2780 (
2781 fnd_log.level_error,
2782 'ahl.plsql.AHL_PRD_DF_PVT.validate_deferral_updates',
2783 'Counters are repeating in schedules'
2784 );
2785 END IF;
2786 END IF;
2787
2788 IF(l_count2 = 0)THEN
2789 IF(p_df_header_rec.set_due_date IS NULL)THEN
2790 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_SET_DUE_MAND');
2791 FND_MSG_PUB.ADD;
2792 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2793 fnd_log.string
2794 (
2795 fnd_log.level_error,
2796 'ahl.plsql.AHL_PRD_DF_PVT.validate_deferral_updates',
2797 'Set due date or counter values are mandatory '
2798 );
2799 END IF;
2800 ELSE
2801 l_defer_due_date := p_df_header_rec.set_due_date;
2802 END IF;
2803 ELSE
2804 l_calc_due_date_flag := true;
2805 IF(p_df_header_rec.deferral_effective_on IS NULL OR p_df_header_rec.deferral_effective_on > SYSDATE)THEN
2806 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_DF_EFF_DT');
2807 FND_MESSAGE.Set_Token('DEFERRAL_EFFECTIVE_ON',p_df_header_rec.deferral_effective_on);
2808 FND_MSG_PUB.ADD;
2809 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2810 fnd_log.string
2811 (
2812 fnd_log.level_error,
2813 'ahl.plsql.AHL_PRD_DF_PVT.validate_deferral_updates',
2814 'Deferral Effective On Date can not be null or greater than system date '
2815 );
2816 END IF;
2817 END IF;
2818 END IF;
2819
2820 IF(FND_MSG_PUB.count_msg > 0)THEN
2821 RAISE FND_API.G_EXC_ERROR;
2822 END IF;
2823
2824 IF(l_calc_due_date_flag)THEN
2825 -- validate counter values and populate table of counter, values to calculate due date
2826 OPEN counter_values_csr(p_df_header_rec.unit_deferral_id);
2827 LOOP
2828 FETCH counter_values_csr INTO l_counter_id,l_counter_name,
2829 l_counter_value,l_ctr_value_type_code,
2830 l_uom_code;
2831 IF(counter_values_csr%NOTFOUND) THEN
2832 EXIT;
2833 END IF;
2834 OPEN curr_counter_val_csr(p_df_header_rec.unit_deferral_id,l_counter_id,p_df_header_rec.deferral_effective_on);
2835 FETCH curr_counter_val_csr INTO l_current_counter_value;
2836 IF(curr_counter_val_csr%NOTFOUND) THEN
2837 l_current_counter_value := 0;
2838 END IF;
2839 CLOSE curr_counter_val_csr;
2840 IF(l_ctr_value_type_code = G_DEFER_BY) THEN
2841 l_counter_value := l_current_counter_value + l_counter_value;
2842 ELSE
2843 IF(l_counter_value < l_current_counter_value) THEN
2844 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_LS_CNTVAL');
2845 FND_MESSAGE.Set_Token('COUNTER_NAME',l_counter_name);
2846 FND_MESSAGE.Set_Token('COUNTER_VALUE',l_counter_value);
2847 FND_MSG_PUB.ADD;
2848 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
2849 fnd_log.string
2850 (
2851 fnd_log.level_error,
2852 'ahl.plsql.AHL_PRD_DF_PVT.validate_deferral_updates',
2853 'Defer to counter value is less than current counter value for counter name : ' || l_counter_name
2854 );
2855 END IF;
2856 END IF;
2857 END IF;
2858 l_counter_values_tbl(i).counter_id := l_counter_id;
2859 l_counter_values_tbl(i).counter_name := l_counter_name;
2860 l_counter_values_tbl(i).counter_value := l_counter_value;
2861 l_counter_values_tbl(i).uom_code := l_uom_code;
2862 i := i + 1;
2863 END LOOP;
2864 CLOSE counter_values_csr;
2865 -- throw errors if any here and do not proceed.
2866 IF(FND_MSG_PUB.count_msg > 0)THEN
2867 RAISE FND_API.G_EXC_ERROR;
2868 END IF;
2869
2870 IF((p_df_header_rec.deferral_type = G_DEFERRAL_TYPE_MR) AND
2871 (p_df_header_rec.mr_repetitive_flag = G_YES_FLAG)) THEN
2872 -- make a call to calculate due date with the table if mr is repetitive
2873 AHL_UMP_PROCESSUNIT_PVT.Get_Deferred_Due_Date (
2874 p_unit_effectivity_id => p_df_header_rec.unit_effectivity_id,
2875 p_deferral_threshold_tbl => l_counter_values_tbl,
2876 x_due_date => l_defer_due_date,
2877 x_return_status => l_return_status ,
2878 x_msg_data => l_msg_data,
2879 x_msg_count => l_msg_count);
2880 IF(l_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
2881 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_DUE_DT_CALC_ERR');
2882 FND_MSG_PUB.ADD;
2883 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
2884 fnd_log.string
2885 (
2886 fnd_log.level_unexpected,
2887 'ahl.plsql.AHL_PRD_DF_PVT.validate_deferral_updates',
2888 'Calculate Due Date API threw Error'
2889 );
2890 END IF;
2891 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2892 END IF;
2893 IF(l_defer_due_date IS NOT NULL)THEN
2894 -- read whicever comes first or last code
2895 OPEN whichever_first_code_csr(p_df_header_rec.unit_effectivity_id);
2896 FETCH whichever_first_code_csr INTO l_whichever_first_code;
2897 IF(whichever_first_code_csr%NOTFOUND)THEN
2898 l_whichever_first_code := 'FIRST';
2899 END IF;
2900 CLOSE whichever_first_code_csr;
2901
2902 IF(l_whichever_first_code = 'FIRST') THEN
2903 IF(TRUNC(p_df_header_rec.set_due_date) < TRUNC(l_defer_due_date)) THEN
2904 l_defer_due_date := p_df_header_rec.set_due_date;
2905 END IF;
2906 ELSE
2907 IF(TRUNC(p_df_header_rec.set_due_date) > TRUNC(l_defer_due_date)) THEN
2908 l_defer_due_date := p_df_header_rec.set_due_date;
2909 END IF;
2910 END IF;
2911 -- read next due date if available
2912 OPEN next_due_date_csr(p_df_header_rec.unit_effectivity_id);
2913 FETCH next_due_date_csr INTO l_next_due_date;
2914 IF(next_due_date_csr%NOTFOUND)THEN
2915 NULL;-- thorw warning here
2916 ELSIF( TRUNC(l_next_due_date) < TRUNC(l_defer_due_date))THEN
2917 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_PRD_DF_DUE_DATE_WARN');
2918 FND_MESSAGE.SET_TOKEN('DEFER_DUE_DATE',l_defer_due_date,false);
2919 FND_MESSAGE.SET_TOKEN('NEXT_DUE_DATE',l_next_due_date,false);
2920 l_msg_data := FND_MESSAGE.get;
2921 END IF;
2922 CLOSE next_due_date_csr;
2923 END IF;
2924
2925 END IF;
2926 END IF;
2927 -- add validations here if needed in future
2928 -- throw errors if any
2929
2930 -- JKJain, NR Analysis and Forecasting
2931 IF(l_defer_due_date IS NOT NULL) THEN
2932 l_fleet_header_id := get_fleet_from_effectivity(p_df_header_rec.unit_effectivity_id);
2933 IF(l_fleet_header_id IS NOT NULL) THEN
2934 OPEN get_csi_item_instance_id(p_df_header_rec.unit_effectivity_id);
2935 FETCH get_csi_item_instance_id INTO l_csi_item_inst_id;
2936 CLOSE get_csi_item_instance_id;
2937 l_uc_header_id := AHL_UTIL_UC_PKG.get_uc_header_id(l_csi_item_inst_id);
2938 IF(l_fleet_header_id <> nvl(AHL_UMP_ProcessUnit_PVT.get_fleet_from_unit_asso(l_uc_header_id,l_defer_due_date,null),-1)) THEN
2939 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_FLT_ASSO');
2940 FND_MSG_PUB.ADD;
2941 END IF;
2942 END IF;
2943 END IF;
2944
2945 IF(FND_MSG_PUB.count_msg > 0)THEN
2946 RAISE FND_API.G_EXC_ERROR;
2947 END IF;
2948
2949 x_warning_msg_data := l_msg_data;
2950
2951 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2952 fnd_log.string
2953 (
2954 fnd_log.level_procedure,
2955 'ahl.plsql.AHL_PRD_DF_PVT.validate_deferral_updates.end',
2956 'At the end of PLSQL procedure'
2957 );
2958 END IF;
2959
2960 END validate_deferral_updates;
2961
2962 PROCEDURE submit_for_approval(
2963 p_df_header_rec IN AHL_PRD_DF_PVT.df_header_rec_type)IS
2964
2965 l_object VARCHAR2(30):= G_WORKFLOW_OBJECT_KEY;
2966 l_approval_type VARCHAR2(100):='CONCEPT';
2967 l_active VARCHAR2(50):= 'N';
2968 l_process_name VARCHAR2(50);
2969 l_item_type VARCHAR2(50);
2970 l_return_status VARCHAR2(50) := FND_API.G_RET_STS_SUCCESS;
2971 l_msg_count NUMBER;
2972 l_msg_data VARCHAR2(2000);
2973
2974 l_new_status_code VARCHAR2(30);
2975
2976 l_mr_applicable VARCHAR2(1);
2977 l_active_end_date DATE;
2978 l_new_mr_header_id NUMBER;
2979 l_new_mr_applicable VARCHAR2(1);
2980 l_mr_expired VARCHAR2(3);
2981 l_mr_header_id NUMBER;
2982
2983 BEGIN
2984 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2985 fnd_log.string
2986 (
2987 fnd_log.level_procedure,
2988 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval.begin',
2989 'At the start of PLSQL procedure'
2990 );
2991 END IF;
2992
2993 IF(p_df_header_rec.approval_status_code NOT IN('DRAFT','DEFERRAL_REJECTED'))THEN
2994 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_SUB_APPR_STS');
2995 FND_MSG_PUB.ADD;
2996 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
2997 fnd_log.string
2998 (
2999 fnd_log.level_unexpected,
3000 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3001 'Can not submit for approval because current status is : ' || p_df_header_rec.approval_status_code
3002 );
3003 END IF;
3004 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3005 END IF;
3006
3007 IF(valid_for_submission( p_df_header_rec.unit_effectivity_id) = FALSE)THEN
3008 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_SUB_PRC_STS');
3009 FND_MSG_PUB.ADD;
3010 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
3011 fnd_log.string
3012 (
3013 fnd_log.level_error,
3014 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3015 'Can not submit for approval because a parent or child is in pending deferral approval status'
3016 );
3017 END IF;
3018 RAISE FND_API.G_EXC_ERROR;
3019 END IF;
3020
3021 -- Skip for UMP Deferral
3022 IF NOT(is_ump_deferral(p_df_header_rec.unit_deferral_id)) THEN
3023
3024 AHL_PRD_WORKORDER_PVT.validate_dependencies
3025 (
3026 p_api_version => 1.0,
3027 p_init_msg_list => FND_API.G_TRUE,
3028 p_commit => FND_API.G_FALSE,
3029 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
3030 p_default => FND_API.G_FALSE,
3031 p_module_type => NULL,
3032 x_return_status =>l_return_status,
3033 x_msg_count =>l_msg_count,
3034 x_msg_data =>l_msg_data,
3035 p_visit_id => NULL,
3036 p_unit_effectivity_id =>p_df_header_rec.unit_effectivity_id,
3037 p_workorder_id => NULL
3038 );
3039 -- if workorders under UE has external dependencies, dont submit for approval, raise error.
3040 IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3041 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
3042 fnd_log.string
3043 (
3044 fnd_log.level_error,
3045 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3046 'Can not go ahead with aubmission of approval because Workorder dependencies exists'
3047 );
3048 END IF;
3049 RAISE FND_API.G_EXC_ERROR;
3050 END IF; -- l_return_status
3051 END IF; -- is_ump_deferral.
3052
3053 ahl_utility_pvt.get_wf_process_name(
3054 p_object =>l_object,
3055 x_active =>l_active,
3056 x_process_name =>l_process_name ,
3057 x_item_type =>l_item_type,
3058 x_return_status=>l_return_status,
3059 x_msg_count =>l_msg_count,
3060 x_msg_data =>l_msg_data);
3061 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3062 fnd_log.string
3063 (
3064 fnd_log.level_statement,
3065 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3066 'Workflow active flag : ' || l_active
3067 );
3068 fnd_log.string
3069 (
3070 fnd_log.level_statement,
3071 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3072 'l_process_name : ' || l_process_name
3073 );
3074 fnd_log.string
3075 (
3076 fnd_log.level_statement,
3077 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3078 'l_item_type : ' || l_item_type
3079 );
3080
3081 END IF;
3082
3083 IF((l_return_status <> FND_API.G_RET_STS_SUCCESS) OR
3084 ( l_active <> G_YES_FLAG))THEN
3085 /*FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_WF_INACTIVE');
3086 FND_MSG_PUB.ADD;
3087 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
3088 fnd_log.string
3089 (
3090 fnd_log.level_error,
3091 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3092 'Can not submit for approval because workflow is not active for Deferral'
3093 );
3094 END IF;
3095 RAISE FND_API.G_EXC_ERROR;*/
3096 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3097 fnd_log.string
3098 (
3099 fnd_log.level_statement,
3100 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3101 'Workflow is not active so going for automatic approval'
3102 );
3103 END IF;
3104 l_active := G_NO_FLAG;
3105 END IF;
3106
3107 -- make a call to update job status to pending deferral approval and update approval status
3108 AHL_PRD_DF_PVT.process_approval_initiated(
3109 p_unit_deferral_id => p_df_header_rec.unit_deferral_id,
3110 p_object_version_number => p_df_header_rec.object_version_number,
3111 p_new_status => 'DEFERRAL_PENDING',
3112 x_return_status => l_return_status);
3113
3114
3115 IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3116 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
3117 fnd_log.string
3118 (
3119 fnd_log.level_error,
3120 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3121 'Can not go ahead with approval because AHL_PRD_DF_PVT.process_approval_initiated threw error'
3122 );
3123 END IF;
3124 RAISE FND_API.G_EXC_ERROR;
3125 END IF;
3126
3127 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3128 fnd_log.string
3129 (
3130 fnd_log.level_statement,
3131 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3132 'Workflow active flag : ' || l_active
3133 );
3134 END IF;
3135
3136 l_mr_expired := FND_API.G_FALSE;
3137 SELECT mr_header_id INTO l_mr_header_id FROM ahl_unit_effectivities_b
3138 WHERE unit_effectivity_id = p_df_header_rec.unit_effectivity_id;
3139 IF(l_mr_header_id IS NOT NULL)THEN
3140 -- find whether deferral type is MR or SR
3141 -- if MR find whether active else pluggin new mr
3142 -- if SR, find the same for immediate children if any and repeat it for them
3143 AHL_PRD_DF_PVT.get_mr_termination_details(
3144 p_unit_effectivity_id => p_df_header_rec.unit_effectivity_id,
3145 x_mr_applicable => l_mr_applicable,
3146 x_active_end_date => l_active_end_date,
3147 x_new_mr_header_id => l_new_mr_header_id,
3148 x_new_mr_applicable => l_new_mr_applicable,
3149 x_return_status => l_return_status,
3150 x_msg_count => l_msg_count,
3151 x_msg_data => l_msg_data);
3152 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3153 RAISE FND_API.G_EXC_ERROR;
3154 ELSIF (l_mr_applicable = FND_API.G_FALSE AND l_new_mr_applicable = FND_API.G_FALSE)THEN
3155 l_mr_expired := FND_API.G_TRUE;
3156 END IF;
3157 END IF;
3158 IF(p_df_header_rec.skip_mr_flag = G_YES_FLAG AND p_df_header_rec.manually_planned_flag = G_NO_FLAG
3159 AND l_mr_expired = FND_API.G_TRUE)THEN
3160 l_new_status_code := 'MR-TERMINATE';
3161 ELSIF(p_df_header_rec.skip_mr_flag = G_YES_FLAG AND p_df_header_rec.manually_planned_flag = G_NO_FLAG)THEN
3162 l_new_status_code := 'TERMINATED';
3163 /*ELSIF(p_df_header_rec.skip_mr_flag = G_YES_FLAG AND p_df_header_rec.manually_planned_flag = G_YES_FLAG)THEN
3164 l_new_status_code := 'CANCELLED';*/
3165 ELSIF(p_df_header_rec.cancel_flag = G_YES_FLAG)THEN
3166 l_new_status_code := 'CANCELLED';
3167 ELSE
3168 l_new_status_code := 'DEFERRED';
3169 END IF;
3170
3171 IF(l_active <> G_NO_FLAG)THEN
3172 Ahl_generic_aprv_pvt.Start_Wf_Process(
3173 P_OBJECT => l_object,
3174 P_APPROVAL_TYPE => 'CONCEPT',
3175 P_ACTIVITY_ID => p_df_header_rec.unit_deferral_id,--unit_deferral_id
3176 P_OBJECT_VERSION_NUMBER => p_df_header_rec.object_version_number,
3177 P_ORIG_STATUS_CODE => p_df_header_rec.approval_status_code,
3178 P_NEW_STATUS_CODE => l_new_status_code ,
3179 P_REJECT_STATUS_CODE => 'DEFERRAL_REJECTED',
3180 P_REQUESTER_USERID => fnd_global.user_id,--1003259,--
3181 P_NOTES_FROM_REQUESTER => '',
3182 P_WORKFLOWPROCESS => 'AHL_GEN_APPROVAL',
3183 P_ITEM_TYPE => 'AHLGAPP');
3184 ELSE
3185 -- make a call for automatic approval
3186 AHL_PRD_DF_PVT.process_approval_approved(
3187 p_unit_deferral_id => p_df_header_rec.unit_deferral_id,
3188 p_object_version_number => p_df_header_rec.object_version_number,
3189 p_new_status => l_new_status_code,
3190 x_return_status => l_return_status);
3191 IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3192 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
3193 fnd_log.string
3194 (
3195 fnd_log.level_error,
3196 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval',
3197 'Can not go ahead with automatic approval because AHL_PRD_DF_PVT.process_approval_approved threw error'
3198 );
3199 END IF;
3200 RAISE FND_API.G_EXC_ERROR;
3201 END IF;
3202 END IF;
3203
3204 -- throw errors if any
3205 IF(FND_MSG_PUB.count_msg > 0)THEN
3206 RAISE FND_API.G_EXC_ERROR;
3207 END IF;
3208
3209
3210 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
3211 fnd_log.string
3212 (
3213 fnd_log.level_procedure,
3214 'ahl.plsql.AHL_PRD_DF_PVT.submit_for_approval.end',
3215 'At the end of PLSQL procedure'
3216 );
3217 END IF;
3218
3219 END submit_for_approval;
3220
3221 -------------------------------------------------------------------------
3222 FUNCTION valid_for_submission(
3223 p_unit_effectivity_id IN NUMBER) RETURN BOOLEAN IS
3224
3225
3226 CURSOR status_code_csr(p_unit_effectivity_id IN NUMBER)IS
3227 SELECT approval_status_code FROM ahl_unit_deferrals_b
3228 WHERE unit_effectivity_id = p_unit_effectivity_id
3229 UNION
3230 SELECT approval_status_code FROM ahl_unit_deferrals_b
3231 WHERE unit_effectivity_id IN
3232 (
3233
3234 /*SELECT ue_id
3235 FROM AHL_UE_RELATIONSHIPS
3236 WHERE relationship_code = 'PARENT'
3237 START WITH related_ue_id = p_unit_effectivity_id
3238 CONNECT BY related_ue_id = PRIOR ue_id
3239 UNION*/--parents are taken care of by now
3240 SELECT distinct related_ue_id
3241 FROM AHL_UE_RELATIONSHIPS
3242 WHERE relationship_code = 'PARENT'
3243 START WITH ue_id = p_unit_effectivity_id
3244 CONNECT BY ue_id = PRIOR related_ue_id
3245 );
3246
3247 l_approval_status_code VARCHAR2(30);
3248
3249
3250 BEGIN
3251
3252 OPEN status_code_csr(p_unit_effectivity_id);
3253 LOOP
3254 FETCH status_code_csr INTO l_approval_status_code;
3255 IF(l_approval_status_code = 'DEFERRAL_PENDING')THEN
3256 CLOSE status_code_csr;
3257 RETURN FALSE;
3258 END IF;
3259 EXIT WHEN status_code_csr%NOTFOUND;
3260 END LOOP;
3261
3262 RETURN TRUE;
3263
3264 END valid_for_submission;
3265
3266
3267 PROCEDURE process_approval_initiated (
3268
3269 p_unit_deferral_id IN NUMBER,
3270 p_object_version_number IN NUMBER,
3271 p_new_status IN VARCHAR2,
3272 x_return_status OUT NOCOPY VARCHAR2)IS
3273
3274 BEGIN
3275 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3276 fnd_log.string
3277 (
3278 fnd_log.level_procedure,
3279 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_initiated.begin',
3280 'At the start of PLSQL procedure'
3281 );
3282 END IF;
3283 x_return_status := FND_API.G_RET_STS_SUCCESS;
3284
3285 IF NOT(is_ump_deferral(p_unit_deferral_id)) THEN
3286 process_workorders(
3287 p_unit_deferral_id => p_unit_deferral_id,
3288 p_object_version_number => p_object_version_number,
3289 p_approval_result_code => G_DEFERRAL_INITIATED,
3290 x_return_status => x_return_status );
3291
3292 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3293 fnd_log.string
3294 (
3295 fnd_log.level_statement,
3296 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_initiated',
3297 'unit_deferral_id : ' || p_unit_deferral_id
3298 );
3299 fnd_log.string
3300 (
3301 fnd_log.level_statement,
3302 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_initiated',
3303 'object_version_number : ' || p_object_version_number
3304 );
3305 fnd_log.string
3306 (
3307 fnd_log.level_statement,
3308 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_initiated',
3309 'Return status after process_workorders API call : ' || x_return_status
3310 );
3311 END IF;
3312
3313 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
3314 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3315 fnd_log.string
3316 (
3317 fnd_log.level_unexpected,
3318 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_initiated',
3319 'process_workorders API API threw error'
3320 );
3321 END IF;
3322 RETURN;
3323 END IF;
3324 END IF; -- ump deferral.
3325
3326 process_unit_maint_plan(
3327 p_unit_deferral_id => p_unit_deferral_id,
3328 p_object_version_number => p_object_version_number,
3329 p_approval_result_code => G_DEFERRAL_INITIATED,
3330 p_new_status => NULL,
3331 x_return_status => x_return_status);
3332
3333 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
3334 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3335 fnd_log.string
3336 (
3337 fnd_log.level_unexpected,
3338 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_initiated',
3339 'process_unit_maint_plan API threw error'
3340 );
3341 END IF;
3342 RETURN;
3343 END IF;
3344
3345 UPDATE ahl_unit_deferrals_b
3346 SET approval_status_code = p_new_status
3347 WHERE unit_deferral_id = p_unit_deferral_id
3348 AND object_version_number = p_object_version_number;--same transaction of caller API and update already happened
3349
3350 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3351 fnd_log.string
3352 (
3353 fnd_log.level_procedure,
3354 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_initiated.end',
3355 'At the end of PLSQL procedure'
3356 );
3357 END IF;
3358
3359
3360 END process_approval_initiated;
3361
3362 PROCEDURE process_approval_approved (
3363
3364 p_unit_deferral_id IN NUMBER,
3365 p_object_version_number IN NUMBER,
3366 p_new_status IN VARCHAR2,
3367 x_return_status OUT NOCOPY VARCHAR2)IS
3368
3369 CURSOR csi_item_instance_id_csr(p_unit_deferral_id IN NUMBER)
3370 --,p_object_version_number IN NUMBER)
3371 IS
3372 SELECT csi_item_instance_id FROM AHL_UNIT_EFFECTIVITIES_B UE, ahl_unit_deferrals_b UD
3373 WHERE UE.unit_effectivity_id = UD.unit_effectivity_id
3374 --AND UD.object_version_number = p_object_version_number
3375 AND UD.unit_deferral_id = p_unit_deferral_id;
3376
3377 l_csi_item_instance_id NUMBER;
3378
3379 -- to check whether MR is not terminated already
3380 /*CURSOR valid_mr_csr(p_unit_deferral_id IN NUMBER,p_object_version_number IN NUMBER) IS
3381 SELECT 'x' from AHL_MR_HEADERS_APP_V mr, AHL_MR_HEADERS_APP_V def,
3382 ahl_unit_effectivities_b UE,ahl_unit_deferrals_b UD
3383 WHERE UD.unit_deferral_id = p_unit_deferral_id
3384 AND UD.object_version_number = p_object_version_number
3385 AND UE.unit_effectivity_id = UD.unit_effectivity_id
3386 AND def.mr_header_id = NVL(UE.mr_header_id,def.mr_header_id)
3387 AND def.title = mr.title
3388 AND trunc(sysdate) between trunc(mr.effective_from)
3389 AND trunc(nvl(mr.effective_to, sysdate))
3390 AND mr.version_number >= def.version_number;
3391
3392 l_exists VARCHAR2(1);*/
3393
3394 CURSOR is_calc_needed(p_unit_deferral_id IN NUMBER)IS
3395 SELECT cancel_flag from ahl_unit_deferrals_b
3396 WHERE unit_deferral_id = p_unit_deferral_id;
3397
3398 l_cancel_flag VARCHAR2(1);
3399
3400
3401 BEGIN
3402 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3403 fnd_log.string
3404 (
3405 fnd_log.level_procedure,
3406 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved.begin',
3407 'At the start of PLSQL procedure'
3408 );
3409 END IF;
3410
3411 x_return_status := FND_API.G_RET_STS_SUCCESS;
3412
3413
3414 /*OPEN valid_mr_csr(p_unit_deferral_id ,p_object_version_number);
3415 FETCH valid_mr_csr INTO l_exists;
3416 IF(valid_mr_csr%NOTFOUND)THEN
3417 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_MR_TERM');
3418 FND_MSG_PUB.ADD;
3419 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
3420 fnd_log.string
3421 (
3422 fnd_log.level_error,
3423 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
3424 'Associated MR has been terminated in FMP'
3425 );
3426 END IF;
3427 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3428 CLOSE valid_mr_csr;
3429 RETURN;
3430 END IF;
3431 CLOSE valid_mr_csr; */
3432 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3433 fnd_log.string
3434 (
3435 fnd_log.level_statement,
3436 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3437 'unit_deferral_id : ' || p_unit_deferral_id
3438 );
3439 fnd_log.string
3440 (
3441 fnd_log.level_statement,
3442 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3443 'object_version_number : ' || p_object_version_number
3444 );
3445 fnd_log.string
3446 (
3447 fnd_log.level_statement,
3448 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3449 'p_new_status : ' || p_new_status
3450 );
3451 END IF;
3452
3453 IF NOT(is_ump_deferral(p_unit_deferral_id)) THEN
3454 --update workorders
3455 process_workorders(
3456 p_unit_deferral_id => p_unit_deferral_id,
3457 p_object_version_number => p_object_version_number,
3458 p_approval_result_code => G_DEFERRAL_APPROVED,
3459 x_return_status => x_return_status);
3460
3461 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3462 fnd_log.string
3463 (
3464 fnd_log.level_statement,
3465 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3466 'Return status after process_workorders API call : ' || x_return_status
3467 );
3468 END IF;
3469
3470 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
3471 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3472 fnd_log.string
3473 (
3474 fnd_log.level_unexpected,
3475 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3476 'process_workorders API threw error'
3477 );
3478 END IF;
3479 RETURN;
3480 END IF;
3481 END IF; -- UMP deferral.
3482
3483 -- copy unit effectivities and update ue status(update unit maintenance plan)
3484 process_unit_maint_plan(
3485 p_unit_deferral_id => p_unit_deferral_id,
3486 p_object_version_number => p_object_version_number,
3487 p_approval_result_code => G_DEFERRAL_APPROVED,
3488 p_new_status => p_new_status,
3489 x_return_status => x_return_status);
3490
3491 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
3492
3493 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3494 fnd_log.string
3495 (
3496 fnd_log.level_unexpected,
3497 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3498 'process_unit_maint_plan API threw error'
3499 );
3500 END IF;
3501 RETURN;
3502 END IF;
3503
3504 -- update unit_effectivity_status
3505 UPDATE ahl_unit_deferrals_b
3506 SET approval_status_code = 'DEFERRED',
3507 object_version_number = p_object_version_number + 1
3508 WHERE unit_deferral_id = p_unit_deferral_id
3509 AND object_version_number = p_object_version_number;
3510
3511
3512 IF (fnd_log.level_event >= fnd_log.g_current_runtime_level)THEN
3513 fnd_log.string
3514 (
3515 fnd_log.level_event,
3516 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3517 'Succesfully approved deferral for unit_deferral_id : ' || p_unit_deferral_id
3518 );
3519 END IF;
3520
3521 -- fetch item instance id
3522 OPEN csi_item_instance_id_csr(p_unit_deferral_id --,p_object_version_number
3523 );
3524 FETCH csi_item_instance_id_csr INTO l_csi_item_instance_id;
3525 IF(csi_item_instance_id_csr%NOTFOUND)THEN
3526 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3527 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3528 fnd_log.string
3529 (
3530 fnd_log.level_unexpected,
3531 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3532 'Unit Effectivity record not found when fetching item instance id'
3533 );
3534 END IF;
3535 CLOSE csi_item_instance_id_csr;
3536 RETURN;
3537 ELSE
3538 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3539 fnd_log.string
3540 (
3541 fnd_log.level_statement,
3542 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3543 'p_csi_item_instance_id : ' || l_csi_item_instance_id
3544 );
3545 END IF;
3546 -- decide whether due date calculation is needed
3547 OPEN is_calc_needed(p_unit_deferral_id);
3548 FETCH is_calc_needed INTO l_cancel_flag;
3549 CLOSE is_calc_needed;--existence check is not need.. already done above
3550
3551 IF NVL(l_cancel_flag,G_NO_FLAG) = G_NO_FLAG THEN
3552 -- then call due date calc concurrent request
3553 calculate_due_date(
3554 x_return_status => x_return_status ,
3555 p_csi_item_instance_id => l_csi_item_instance_id
3556 );
3557
3558 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
3559 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3560 fnd_log.string
3561 (
3562 fnd_log.level_unexpected,
3563 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3564 'Could not calculate due date'
3565 );
3566 END IF;
3567 RETURN;
3568 END IF;
3569 END IF;
3570 END IF;
3571
3572 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3573 fnd_log.string
3574 (
3575 fnd_log.level_procedure,
3576 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved.end',
3577 'At the end of PLSQL procedure'
3578 );
3579 END IF;
3580
3581 END process_approval_approved;
3582
3583 PROCEDURE calculate_due_date(
3584 x_return_status OUT NOCOPY VARCHAR2,
3585 p_csi_item_instance_id IN NUMBER
3586 ) IS
3587
3588 l_targetp NUMBER;
3589 l_activep NUMBER;
3590 l_targetp1 NUMBER;
3591 l_activep1 NUMBER;
3592 l_pmon_method VARCHAR2(30);
3593 l_callstat NUMBER;
3594 l_req_id NUMBER;
3595
3596 l_can_submit_request BOOLEAN := TRUE;
3597 l_concurrent_request_sucess BOOLEAN := FALSE;
3598
3599 l_msg_count NUMBER;
3600 l_msg_data VARCHAR2(4000);
3601
3602 BEGIN
3603 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
3604 fnd_log.string
3605 (
3606 fnd_log.level_procedure,
3607 'ahl.plsql.AHL_PRD_DF_PVT.calculate_due_date.begin',
3608 'At the start of PLSQL procedure'
3609 );
3610 END IF;
3611 -- check whether Internal Concurrent Manager is up
3612 fnd_concurrent.get_manager_status(applid => 0,
3613 managerid => 1,
3614 targetp => l_targetp1,
3615 activep => l_activep1,
3616 pmon_method => l_pmon_method,
3617 callstat => l_callstat);
3618 -- check whether Standard Concurrent Manager is up, this is not optional.
3619 fnd_concurrent.get_manager_status(applid => 0,
3620 managerid => 0,
3621 targetp => l_targetp,
3622 activep => l_activep,
3623 pmon_method => l_pmon_method,
3624 callstat => l_callstat);
3625 IF (l_activep <= 0 OR l_activep1 <= 0) THEN
3626 l_can_submit_request := FALSE;
3627 ELSIF NOT fnd_program.program_exists('AHLUEFF','AHL') THEN
3628 l_can_submit_request := FALSE;
3629 ELSIF NOT fnd_program.executable_exists('AHLUEFF','AHL') THEN
3630 l_can_submit_request := FALSE;
3631 END IF;
3632
3633 -- submit request
3634 --IF(l_can_submit_request)THEN
3635 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3636 fnd_log.string
3637 (
3638 fnd_log.level_statement,
3639 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3640 'Submitting concurrent request to calculate due date for p_csi_item_instance_id : ' || p_csi_item_instance_id
3641 );
3642 END IF;
3643 --l_req_id := fnd_request.submit_request('AHL','AHLUEFF',NULL,NULL,FALSE,NULL,NULL,p_csi_item_instance_id );
3644 -- modification due to additional parameters added to AHLUEFF
3645 l_req_id := fnd_request.submit_request('AHL','AHLUEFF',NULL,NULL,FALSE,NULL,NULL,p_csi_item_instance_id,NULL,NULL,1);
3646
3647 IF (l_req_id = 0 ) THEN
3648 l_concurrent_request_sucess := FALSE;
3649 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3650 fnd_log.string
3651 (
3652 fnd_log.level_statement,
3653 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3654 'Tried to submit concurrent request but failed'
3655 );
3656 END IF;
3657 ELSE
3658 l_concurrent_request_sucess := TRUE;
3659 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3660 fnd_log.string
3661 (
3662 fnd_log.level_statement,
3663 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3664 'Concurrent request to calculate due date successful'
3665 );
3666 END IF;
3667 END IF;
3668 --END IF;
3669
3670 /* -- launching concurrent program always
3671 IF NOT (l_concurrent_request_sucess) THEN
3672 -- submit online request
3673 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3674 fnd_log.string
3675 (
3676 fnd_log.level_statement,
3677 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_approved',
3678 'Calculating due date online'
3679 );
3680 END IF;
3681
3682 AHL_UMP_PROCESSUNIT_PVT.Process_Unit (
3683 p_commit => FND_API.G_FALSE,
3684 p_init_msg_list => FND_API.G_FALSE,
3685 x_msg_count => l_msg_count,
3686 x_msg_data => l_msg_data,
3687 x_return_status => x_return_status,
3688 p_csi_item_instance_id => p_csi_item_instance_id,
3689 p_concurrent_flag => 'N');
3690
3691 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
3692 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3693 fnd_log.string
3694 (
3695 fnd_log.level_unexpected,
3696 'ahl.plsql.AHL_PRD_DF_PVT.calculate_due_date',
3697 'AHL_UMP_PROCESSUNIT_PVT.Process_Unit API threw error'
3698 );
3699 END IF;
3700 RETURN;
3701 END IF;
3702 END IF; */
3703
3704 x_return_status := FND_API.G_RET_STS_SUCCESS;
3705
3706 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
3707 fnd_log.string
3708 (
3709 fnd_log.level_procedure,
3710 'ahl.plsql.AHL_PRD_DF_PVT.calculate_due_date.end',
3711 'At the end of PLSQL procedure'
3712 );
3713 END IF;
3714
3715 END calculate_due_date;
3716
3717
3718 PROCEDURE process_approval_rejected (
3719
3720 p_unit_deferral_id IN NUMBER,
3721 p_object_version_number IN NUMBER,
3722 p_new_status IN VARCHAR2,
3723 x_return_status OUT NOCOPY VARCHAR2)IS
3724 BEGIN
3725 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
3726 fnd_log.string
3727 (
3728 fnd_log.level_procedure,
3729 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_rejected.begin',
3730 'At the start of PLSQL procedure'
3731 );
3732 END IF;
3733
3734 x_return_status := FND_API.G_RET_STS_SUCCESS;
3735
3736 -- bypass for UMP Deferral
3737 IF NOT(Is_UMP_Deferral(p_unit_deferral_id)) THEN
3738
3739 process_workorders(
3740 p_unit_deferral_id => p_unit_deferral_id,
3741 p_object_version_number => p_object_version_number,
3742 p_approval_result_code => G_DEFERRAL_REJECTED,
3743 x_return_status => x_return_status);
3744
3745 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3746 fnd_log.string
3747 (
3748 fnd_log.level_statement,
3749 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_rejected',
3750 'unit_deferral_id : ' || p_unit_deferral_id
3751 );
3752 fnd_log.string
3753 (
3754 fnd_log.level_statement,
3755 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_rejected',
3756 'object_version_number : ' || p_object_version_number
3757 );
3758 fnd_log.string
3759 (
3760 fnd_log.level_statement,
3761 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_rejected',
3762 'Return status after process_workorders API call : ' || x_return_status
3763 );
3764 fnd_log.string
3765 (
3766 fnd_log.level_statement,
3767 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_rejected',
3768 'New approval status : ' || p_new_status
3769 );
3770 END IF;
3771
3772 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
3773 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3774 fnd_log.string
3775 (
3776 fnd_log.level_unexpected,
3777 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_rejected',
3778 'process_workorders API threw error'
3779 );
3780 END IF;
3781 RETURN;
3782 END IF; -- x_return_status
3783 END IF; -- is_ump_deferral.
3784
3785 -- update unit maintenance plan)
3786 process_unit_maint_plan(
3787 p_unit_deferral_id => p_unit_deferral_id,
3788 p_object_version_number => p_object_version_number,
3789 p_approval_result_code => G_DEFERRAL_REJECTED,
3790 p_new_status => NULL,
3791 x_return_status => x_return_status);
3792
3793 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
3794 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3795 fnd_log.string
3796 (
3797 fnd_log.level_unexpected,
3798 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_rejected',
3799 'process_unit_maint_plan API threw error'
3800 );
3801 END IF;
3802 RETURN;
3803 END IF;
3804
3805 UPDATE ahl_unit_deferrals_b
3806 SET approval_status_code = p_new_status,
3807 object_version_number = p_object_version_number + 1
3808 WHERE unit_deferral_id = p_unit_deferral_id
3809 AND object_version_number = p_object_version_number;
3810
3811 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
3812 fnd_log.string
3813 (
3814 fnd_log.level_procedure,
3815 'ahl.plsql.AHL_PRD_DF_PVT.process_approval_rejected.end',
3816 'At the end of PLSQL procedure'
3817 );
3818 END IF;
3819
3820 END process_approval_rejected;
3821
3822
3823 PROCEDURE process_workorders(
3824 p_unit_deferral_id IN NUMBER,
3825 p_object_version_number IN NUMBER,
3826 p_approval_result_code IN VARCHAR2,
3827 x_return_status OUT NOCOPY VARCHAR2) IS
3828
3829 l_prd_workorder_rec AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
3830 l_temp_prd_workorder_rec AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
3831
3832
3833 l_prd_workoper_tbl AHL_PRD_WORKORDER_PVT.PRD_WORKOPER_TBL;
3834
3835 --rroy
3836 --ACL Changes
3837 -- Added object_type to query
3838 CURSOR unit_effectivity_id_csr(p_unit_deferral_id IN NUMBER,
3839 p_object_version_number IN NUMBER)IS
3840 SELECT UD.unit_effectivity_id, ue.object_type
3841 from ahl_unit_deferrals_b UD, AHL_UNIT_EFFECTIVITIES_B UE
3842 WHERE NVL(UE.status_code,'x') NOT IN('ACCOMPLISHED','DEFERRED','EXCEPTION','TERMINATED','CANCELLED','MR-TERMINATE')
3843 AND UE.unit_effectivity_id = UD.unit_effectivity_id
3844 AND UD.object_version_number = p_object_version_number
3845 AND UD.unit_deferral_id = p_unit_deferral_id;
3846 -- rroy
3847 -- ACL Changes
3848
3849 l_unit_effectivity_id NUMBER;
3850 l_ue_title VARCHAR2(155);
3851 -- rroy
3852 -- ACL Changes
3853 l_object_type VARCHAR2(3);
3854 l_return_status VARCHAR2(1);
3855 -- rroy
3856 -- ACL Changes
3857
3858 CURSOR validate_approver_privilages(p_unit_effectivity_id IN NUMBER)IS
3859
3860 /* replaced as this query does not pick up master workorders.
3861 SELECT WO.workorder_id
3862 FROM ahl_workorder_tasks_v WO
3863 WHERE WO.job_status_code NOT IN ( G_JOB_DRAFT,G_JOB_DELETED)
3864 AND WO.unit_effectivity_id = p_unit_effectivity_id; */
3865
3866 SELECT WO.workorder_id
3867 FROM ahl_workorders wo, ahl_visit_tasks_b vts,
3868 ahl_visits_b vst,
3869 (SELECT ORGANIZATION_ID FROM INV_ORGANIZATION_INFO_V
3870 WHERE NVL (operating_unit, mo_global.get_current_org_id()) = mo_global.get_current_org_id()) ORG
3871 WHERE wo.visit_task_id = vts.visit_task_id
3872 AND vts.visit_id = vst.visit_id
3873 AND vst.organization_id = org.organization_id
3874 AND WO.status_code NOT IN ( G_JOB_DRAFT,G_JOB_DELETED)
3875 AND vts.unit_effectivity_id = p_unit_effectivity_id
3876 AND vts.task_type_code IN ('SUMMARY','UNASSOCIATED');
3877
3878 l_workorder_id NUMBER;
3879
3880 -- rroy
3881 -- ACL Changes
3882 -- Added workorder_name to select clause
3883 CURSOR workorder_csr(p_unit_effectivity_id IN NUMBER)IS
3884 SELECT WO.workorder_id,
3885 WO.object_version_number,
3886 WO.status_code,
3887 WO.actual_start_date,
3888 WO.actual_end_date,
3889 WO.workorder_name
3890 FROM ahl_workorders WO , ahl_unit_effectivities_b UE, ahl_visit_tasks_b VST
3891 WHERE WO.status_code NOT IN ( G_JOB_DRAFT,G_JOB_DELETED)
3892 AND WO.master_workorder_flag = 'N'
3893 AND WO.visit_task_id = VST.visit_task_id
3894 AND VST.unit_effectivity_id = UE.unit_effectivity_id
3895 AND UE.unit_effectivity_id = p_unit_effectivity_id
3896 UNION
3897 SELECT WO.workorder_id,
3898 WO.object_version_number,
3899 WO.status_code,
3900 WO.actual_start_date,
3901 WO.actual_end_date,
3902 WO.workorder_name
3903 FROM ahl_workorders WO , ahl_unit_effectivities_b UE, ahl_visit_tasks_b VST
3904 WHERE WO.status_code NOT IN ( G_JOB_DRAFT,G_JOB_DELETED)
3905 AND WO.master_workorder_flag = 'N'
3906 AND WO.visit_task_id = VST.visit_task_id
3907 AND VST.unit_effectivity_id = UE.unit_effectivity_id
3908 AND UE.unit_effectivity_id IN
3909 (
3910
3911 SELECT distinct related_ue_id
3912 FROM AHL_UE_RELATIONSHIPS
3913 WHERE relationship_code = 'PARENT'
3914 START WITH ue_id = p_unit_effectivity_id
3915 CONNECT BY ue_id = PRIOR related_ue_id
3916 );
3917 -- rroy
3918 -- ACL Changes
3919
3920 CURSOR workorder_objver_csr(p_workorder_id IN NUMBER) IS
3921 SELECT object_version_number from ahl_workorders
3922 WHERE workorder_id = p_workorder_id;
3923
3924 --Changes by nsikka for Bug 5324101
3925 --Cursor added to fetch UE Title to be passed as token
3926
3927 CURSOR ue_title_csr(p_unit_effectivity_id IN NUMBER) IS
3928 SELECT title from ahl_unit_effectivities_v
3929 WHERE UNIT_EFFECTIVITY_ID = p_unit_effectivity_id;
3930
3931 l_update_flag BOOLEAN := false;
3932 --l_complete_flag BOOLEAN := false; /* commented out as workorder completion is no longer needed. */
3933
3934 l_msg_count NUMBER;
3935 l_msg_data VARCHAR2(4000);
3936
3937 l_temp VARCHAR2(30);
3938
3939 -- fix for bug number 6990380
3940 CURSOR chk_inst_in_job (p_workorder_id IN NUMBER) IS
3941 SELECT 'x'
3942 FROM CSI_ITEM_INSTANCES CII, AHL_WORKORDERS AWO
3943 WHERE CII.WIP_JOB_ID = AWO.WIP_ENTITY_ID
3944 AND AWO.workorder_id = p_workorder_id
3945 AND ACTIVE_START_DATE <= SYSDATE
3946 AND ((ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE >= SYSDATE))
3947 AND LOCATION_TYPE_CODE = 'WIP'
3948 AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
3949 WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
3950 AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
3951 AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE) AND NVL(ACTIVE_END_DATE,SYSDATE));
3952
3953 l_status_meaning VARCHAR2(80);
3954
3955 BEGIN
3956 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3957 fnd_log.string
3958 (
3959 fnd_log.level_procedure,
3960 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders.begin',
3961 'At the start of PLSQL procedure'
3962 );
3963 END IF;
3964
3965 x_return_status := FND_API.G_RET_STS_SUCCESS;
3966
3967 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3968 fnd_log.string
3969 (
3970 fnd_log.level_statement,
3971 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
3972 'unit_deferral_id : ' || p_unit_deferral_id
3973 );
3974 fnd_log.string
3975 (
3976 fnd_log.level_statement,
3977 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
3978 'object_version_number : ' || p_object_version_number
3979 );
3980 fnd_log.string
3981 (
3982 fnd_log.level_statement,
3983 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
3984 'Approval Result Code : ' || p_approval_result_code
3985 );
3986 END IF;
3987 -- validating ue and getting it
3988 OPEN unit_effectivity_id_csr(p_unit_deferral_id, p_object_version_number);
3989 FETCH unit_effectivity_id_csr INTO l_unit_effectivity_id, l_object_type;
3990 IF(unit_effectivity_id_csr%NOTFOUND)THEN
3991 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INVOP_HREC_MISS');
3992 FND_MSG_PUB.ADD;
3993 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3994 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
3995 fnd_log.string
3996 (
3997 fnd_log.level_unexpected,
3998 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
3999 'Unit Effectivity Record not found for unit deferral id : ' || p_unit_deferral_id
4000 );
4001 END IF;
4002 END IF;
4003 CLOSE unit_effectivity_id_csr;
4004
4005 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
4006 RETURN;
4007 END IF;
4008
4009 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4010 fnd_log.string
4011 (
4012 fnd_log.level_statement,
4013 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4014 'unit_effectivity_id : ' || l_unit_effectivity_id
4015 );
4016 END IF;
4017
4018 IF (p_approval_result_code IN ( G_DEFERRAL_REJECTED,G_DEFERRAL_APPROVED ))THEN
4019 OPEN validate_approver_privilages(l_unit_effectivity_id);
4020 FETCH validate_approver_privilages INTO l_workorder_id;
4021 IF(validate_approver_privilages%NOTFOUND)THEN
4022 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_APPR_SETUP');
4023 FND_MSG_PUB.ADD;
4024 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4025 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level) THEN
4026 fnd_log.string
4027 (
4028 fnd_log.level_unexpected,
4029 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4030 'Approver client information not same as the requester. workorders not found for approver'
4031 );
4032 END IF;
4033 END IF;
4034 CLOSE validate_approver_privilages;
4035 END IF;
4036
4037 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
4038 RETURN;
4039 END IF;
4040
4041 --OPEN workorder_csr(l_unit_effectivity_id);
4042 FOR workorder_rec IN workorder_csr(l_unit_effectivity_id) LOOP
4043 l_update_flag := FALSE;
4044 --l_complete_flag := FALSE;
4045 l_prd_workorder_rec := l_temp_prd_workorder_rec;--initialize it
4046 l_prd_workorder_rec.workorder_id := workorder_rec.workorder_id;
4047 l_prd_workorder_rec.object_version_number := workorder_rec.object_version_number;
4048 l_prd_workorder_rec.status_code := workorder_rec.status_code;
4049 l_prd_workorder_rec.actual_start_date := workorder_rec.actual_start_date;
4050 l_prd_workorder_rec.actual_end_date := workorder_rec.actual_end_date;
4051
4052 -- rroy
4053 -- ACL Changes
4054 l_return_status := AHL_PRD_UTIL_PKG.Is_Unit_Locked(p_workorder_id => l_prd_workorder_rec.workorder_id,
4055 p_ue_id => NULL, p_visit_id => NULL,
4056 p_item_instance_id => NULL);
4057
4058
4059 --nsikka
4060 --Changes made for Bug 5324101 .
4061 --tokens passed changed to MR_TITLE
4062
4063 IF l_return_status = FND_API.G_TRUE THEN
4064 IF l_object_type IS NOT NULL AND l_object_type = 'SR' THEN
4065 FND_MESSAGE.Set_Name('AHL', 'AHL_PRD_DFSR_UNTLCKD');
4066 FND_MESSAGE.Set_Token('WO_NAME', workorder_rec.workorder_name);
4067 FND_MSG_PUB.ADD;
4068 ELSE
4069 OPEN ue_title_csr(l_unit_effectivity_id);
4070 FETCH ue_title_csr into l_ue_title;
4071 CLOSE ue_title_csr;
4072 FND_MESSAGE.Set_Name('AHL', 'AHL_PRD_DFMR_UNTLCKD');
4073 FND_MESSAGE.Set_Token('MR_TITLE', l_ue_title);
4074 FND_MSG_PUB.ADD;
4075 END IF;
4076 EXIT;
4077 END IF;
4078 -- rroy
4079 -- ACL Changes
4080
4081 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4082 fnd_log.string
4083 (
4084 fnd_log.level_statement,
4085 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4086 'workorder_id : ' || l_prd_workorder_rec.workorder_id
4087 );
4088 fnd_log.string
4089 (
4090 fnd_log.level_statement,
4091 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4092 'object_version_number : ' || l_prd_workorder_rec.object_version_number
4093 );
4094 fnd_log.string
4095 (
4096 fnd_log.level_statement,
4097 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4098 'Current Workorder status : ' || l_prd_workorder_rec.status_code
4099 );
4100 END IF;
4101
4102 IF(p_approval_result_code = G_DEFERRAL_INITIATED)THEN
4103 --l_prd_workorder_rec.status_code := G_JOB_UNRELEASED;
4104 --l_update_flag := TRUE;
4105 IF(isValidStatusUpdate(G_DEFERRAL_INITIATED, l_prd_workorder_rec.status_code))THEN
4106 l_update_flag := TRUE;
4107 l_prd_workorder_rec.status_code := G_JOB_PEND_DFR_APPR;
4108 END IF;
4109 ELSIF (p_approval_result_code = G_DEFERRAL_REJECTED)THEN
4110 IF(isValidStatusUpdate(G_DEFERRAL_REJECTED, l_prd_workorder_rec.status_code))THEN
4111 l_update_flag := TRUE;
4112 -- find out the old status and set it here
4113 l_prd_workorder_rec.status_code := getLastStatus(l_prd_workorder_rec.workorder_id);
4114 END IF;
4115 /* sracha: commented out as workorder completion is no longer needed.*/
4116 /*ELSIF (p_approval_result_code = G_DEFERRAL_APPROVED)THEN
4117 -- find out the old status and populate here
4118 IF(l_prd_workorder_rec.status_code = G_JOB_PEND_DFR_APPR)THEN
4119 l_prd_workorder_rec.status_code := getLastStatus(l_prd_workorder_rec.workorder_id);
4120 END IF;
4121 --IF(isValidStatusUpdate(G_DEFERRAL_APPROVED, l_prd_workorder_rec.status_code))THEN
4122 -- l_update_flag := TRUE;
4123 -- l_prd_workorder_rec.status_code := G_JOB_CANCELLED;
4124 --ELSIF (l_prd_workorder_rec.status_code IN(G_JOB_RELEASED,G_JOB_PARTS_HOLD,G_JOB_ON_HOLD,G_JOB_PEND_QA_APPR))THEN
4125 -- l_complete_flag := TRUE;
4126 --END IF;
4127 IF (l_prd_workorder_rec.status_code IN(G_JOB_UNRELEASED,G_JOB_RELEASED,G_JOB_PARTS_HOLD,G_JOB_ON_HOLD,G_JOB_PEND_QA_APPR))THEN
4128 l_complete_flag := TRUE;
4129 END IF; */
4130 /* sracha - end */
4131 END IF;
4132
4133 -- call production API to update job status or complete job
4134 IF(l_update_flag)THEN
4135 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4136 fnd_log.string
4137 (
4138 fnd_log.level_statement,
4139 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4140 'Workorder Update Flag :TRUE '
4141 );
4142 fnd_log.string
4143 (
4144 fnd_log.level_statement,
4145 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4146 'new Workorder status/Update : ' || l_prd_workorder_rec.status_code
4147 );
4148 END IF;
4149
4150 IF (l_prd_workorder_rec.status_code IN (G_JOB_CANCELLED,G_JOB_PEND_DFR_APPR)) THEN
4151 OPEN chk_inst_in_job(l_prd_workorder_rec.workorder_id);
4152 FETCH chk_inst_in_job INTO l_temp;
4153 IF (chk_inst_in_job%FOUND) THEN
4154 --Get status meaning
4155 SELECT meaning INTO l_status_meaning
4156 FROM fnd_lookup_values_vl
4157 WHERE lookup_type = 'AHL_JOB_STATUS'
4158 AND LOOKUP_CODE = l_prd_workorder_rec.status_code;
4159 FND_MESSAGE.set_name('AHL','AHL_PRD_MAT_NOT_RETURN');
4160 FND_MESSAGE.set_token('WO_STATUS', l_status_meaning);
4161 FND_MESSAGE.set_token('WO_NAME', workorder_rec.workorder_name);
4162 FND_MSG_PUB.add;
4163 x_return_status := FND_API.G_RET_STS_ERROR;
4164 END IF;
4165 CLOSE chk_inst_in_job;
4166 END IF;
4167 IF(x_return_status = FND_API.G_RET_STS_SUCCESS)THEN
4168 -- call update job API
4169 AHL_PRD_WORKORDER_PVT.update_job
4170 (
4171 p_api_version => 1.0,
4172 p_init_msg_list => FND_API.G_FALSE,
4173 p_commit => FND_API.G_FALSE,
4174 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4175 p_default => FND_API.G_TRUE,
4176 p_module_type => 'API',
4177 x_return_status => x_return_status,
4178 x_msg_count => l_msg_count,
4179 x_msg_data => l_msg_data,
4180 p_x_prd_workorder_rec => l_prd_workorder_rec,
4181 p_x_prd_workoper_tbl => l_prd_workoper_tbl
4182 );
4183 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4184 fnd_log.string
4185 (
4186 fnd_log.level_statement,
4187 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4188 'Status after AHL_PRD_WORKORDER_PVT.update_job API call : ' || x_return_status
4189 );
4190 END IF;
4191 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
4192 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_PRD_DF_APPR_UPD_JB_FAIL');
4193 FND_MSG_PUB.ADD;
4194 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
4195 fnd_log.string
4196 (
4197 fnd_log.level_unexpected,
4198 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4199 'AHL_PRD_WORKORDER_PVT.update_job API returned error '
4200 );
4201 END IF;
4202 EXIT;
4203 END IF;
4204 /* sracha: commented out as workorder completion is no longer needed. */
4205 /* ELSIF(l_complete_flag)THEN
4206 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4207 fnd_log.string
4208 (
4209 fnd_log.level_statement,
4210 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4211 'Workorder Complete Flag :TRUE '
4212 );
4213 fnd_log.string
4214 (
4215 fnd_log.level_statement,
4216 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4217 'new Workorder status/Complete : ' || l_prd_workorder_rec.status_code
4218 );
4219 END IF;
4220 l_prd_workorder_rec.status_code := G_JOB_RELEASED;
4221
4222 -- modified 4/24/06 to not pass actual start dates --FP bug# 5114848.
4223 -- actual dates are not needed if WO is being cancelled.
4224 --l_prd_workorder_rec.actual_start_date := NVL(l_prd_workorder_rec.actual_start_date,SYSDATE);
4225 --l_prd_workorder_rec.actual_end_date := NVL(l_prd_workorder_rec.actual_end_date,SYSDATE);
4226
4227 -- call update job API
4228 AHL_PRD_WORKORDER_PVT.update_job
4229 (
4230 p_api_version => 1.0,
4231 p_init_msg_list => FND_API.G_FALSE,
4232 p_commit => FND_API.G_FALSE,
4233 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4234 p_default => FND_API.G_TRUE,
4235 p_module_type => 'API',
4236 x_return_status => x_return_status,
4237 x_msg_count => l_msg_count,
4238 x_msg_data => l_msg_data,
4239 p_x_prd_workorder_rec => l_prd_workorder_rec,
4240 p_x_prd_workoper_tbl => l_prd_workoper_tbl
4241 );
4242 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4243 fnd_log.string
4244 (
4245 fnd_log.level_statement,
4246 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4247 'Status after AHL_PRD_WORKORDER_PVT.update_job API call : ' || x_return_status
4248 );
4249 END IF;
4250 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
4251 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_PRD_DF_APPR_UPD_JB_FAIL');
4252 FND_MSG_PUB.ADD;
4253 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
4254 fnd_log.string
4255 (
4256 fnd_log.level_unexpected,
4257 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4258 'AHL_PRD_WORKORDER_PVT.update_job API returned error '
4259 );
4260 END IF;
4261 EXIT;
4262 END IF; */
4263 -- sure to find record here
4264 -- Following code has been commented because we have got an API which will cancel all jobs for us
4265 -- after approval of deferral.
4266 -- also in 11.5.10+ we will cancel all workorders inspite of their statuses.
4267 /*OPEN workorder_objver_csr(l_prd_workorder_rec.workorder_id);
4268 FETCH workorder_objver_csr INTO l_prd_workorder_rec.object_version_number;
4269 CLOSE workorder_objver_csr;
4270
4271 AHL_COMPLETIONS_PVT.defer_workorder
4272 (
4273 p_api_version => 1.0,
4274 p_init_msg_list => FND_API.G_FALSE,
4275 p_commit => FND_API.G_FALSE,
4276 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4277 p_default => FND_API.G_TRUE,
4278 p_module_type => 'API',
4279 x_return_status => x_return_status,
4280 x_msg_count => l_msg_count,
4281 x_msg_data => l_msg_data,
4282 p_workorder_id => l_prd_workorder_rec.workorder_id,
4283 p_object_version_no => l_prd_workorder_rec.object_version_number
4284 );
4285 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4286 fnd_log.string
4287 (
4288 fnd_log.level_statement,
4289 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4290 'Status after AHL_COMPLETIONS_PVT.defer_workorder API call : ' || x_return_status
4291 );
4292 END IF;
4293 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
4294 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_PRD_DF_APPR_CMP_JB_FAIL');
4295 FND_MSG_PUB.ADD;
4296 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
4297 fnd_log.string
4298 (
4299 fnd_log.level_unexpected,
4300 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4301 'AHL_COMPLETIONS_PVT.defer_workorder API returned error '
4302 );
4303 END IF;
4304 EXIT;
4305 END IF;*/
4306 END IF;
4307 END IF;
4308 END LOOP;
4309
4310 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4311 fnd_log.string
4312 (
4313 fnd_log.level_statement,
4314 'before ahl.plsql.AHL_PRD_WORKORDER_PVT.cancel_visit_jobs',
4315 'Workorder Cancel Visits Jobs '
4316 );
4317 END IF;
4318
4319 -- throw errors if any
4320 IF(FND_MSG_PUB.count_msg > 0)THEN
4321 RETURN;
4322 END IF;
4323
4324 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4325 fnd_log.string
4326 (
4327 fnd_log.level_statement,
4328 'ahl.plsql.AHL_PRD_WORKORDER_PVT.cancel_visit_jobs',
4329 'Workorder Cancel Visits Jobs '
4330 );
4331 END IF;
4332
4333 -- if approval was approved, cancel all workorders
4334 IF (p_approval_result_code = G_DEFERRAL_APPROVED)THEN
4335 AHL_PRD_WORKORDER_PVT.cancel_visit_jobs
4336 (
4337 p_api_version => 1.0,
4338 p_init_msg_list => FND_API.G_TRUE,
4339 p_commit => FND_API.G_FALSE,
4340 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4341 p_default => FND_API.G_FALSE,
4342 p_module_type => 'API',
4343 x_return_status => x_return_status,
4344 x_msg_count => l_msg_count,
4345 x_msg_data => l_msg_data,
4346 p_visit_id => NULL,
4347 p_unit_effectivity_id => l_unit_effectivity_id,
4348 p_workorder_id => NULL
4349 );
4350 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
4351 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_PRD_DF_APPR_CMP_JB_FAIL');
4352 FND_MSG_PUB.ADD;
4353 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
4354 fnd_log.string
4355 (
4356 fnd_log.level_unexpected,
4357 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders',
4358 'AHL_PRD_WORKORDERS_PVT.cancel_visit_jobs API returned error '
4359 );
4360 END IF;
4361 END IF;
4362 END IF;
4363
4364 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
4365 fnd_log.string
4366 (
4367 fnd_log.level_procedure,
4368 'ahl.plsql.AHL_PRD_DF_PVT.process_workorders.end',
4369 'At the end of PLSQL procedure'
4370 );
4371 END IF;
4372 END process_workorders;
4373
4374 FUNCTION isValidStatusUpdate(
4375 operation_code VARCHAR2,
4376 status_code VARCHAR2)RETURN BOOLEAN IS
4377
4378 l_yes_flag boolean := FALSE;
4379
4380 BEGIN
4381 IF(operation_code = G_DEFERRAL_INITIATED)THEN
4382 IF(status_code IN (G_JOB_UNRELEASED,G_JOB_RELEASED,G_JOB_PARTS_HOLD,G_JOB_ON_HOLD,G_JOB_PEND_QA_APPR))THEN
4383 l_yes_flag := TRUE;
4384 END IF;
4385 ELSIF(operation_code = G_DEFERRAL_REJECTED)THEN
4386 IF(status_code = G_JOB_PEND_DFR_APPR)THEN
4387 l_yes_flag := TRUE;
4388 END IF;
4389 /*ELSIF(operation_code = G_DEFERRAL_APPROVED)THEN
4390 IF(status_code IN (G_JOB_UNRELEASED))THEN
4391 l_yes_flag := TRUE;
4392 END IF;*/
4393 END IF;
4394 RETURN l_yes_flag;
4395 END isValidStatusUpdate;
4396
4397 FUNCTION getLastStatus(p_workorder_id IN NUMBER) RETURN VARCHAR2 IS
4398
4399 CURSOR last_status_code_csr(p_workorder_id IN NUMBER) IS
4400 SELECT status_code,last_update_date FROM ahl_workorder_txns
4401 WHERE workorder_id = p_workorder_id ORDER BY last_update_date DESC;
4402
4403 l_junk_date DATE;
4404 l_last_status_code VARCHAR2(30);
4405 BEGIN
4406 OPEN last_status_code_csr(p_workorder_id);
4407 LOOP
4408 FETCH last_status_code_csr INTO l_last_status_code,l_junk_date;
4409 IF(last_status_code_csr%NOTFOUND)THEN
4410 l_last_status_code := G_JOB_UNRELEASED;
4411 EXIT;
4412 ELSIF (l_last_status_code <> G_JOB_PEND_DFR_APPR)THEN
4413 EXIT;
4414 END IF;
4415 END LOOP;
4416 CLOSE last_status_code_csr;
4417 RETURN l_last_status_code;
4418 END getLastStatus;
4419
4420
4421 PROCEDURE process_unit_maint_plan(
4422 p_unit_deferral_id IN NUMBER,
4423 p_object_version_number IN NUMBER,
4424 p_approval_result_code IN VARCHAR2,
4425 p_new_status IN VARCHAR2,
4426 x_return_status OUT NOCOPY VARCHAR2)IS
4427
4428 -- to fetch unit effectivity id
4429 CURSOR unit_effectivity_id_csr(p_unit_deferral_id IN NUMBER,p_object_version_number IN NUMBER) IS
4430 SELECT UD.unit_effectivity_id,UE.mr_header_id,UE.manually_planned_flag,UE.defer_from_ue_id
4431 from ahl_unit_deferrals_b UD,ahl_unit_effectivities_b UE
4432 WHERE UE.unit_effectivity_id = UD.unit_effectivity_id
4433 AND UD.object_version_number = p_object_version_number
4434 AND UD.unit_deferral_id = p_unit_deferral_id;
4435
4436 l_unit_effectivity_id NUMBER;
4437
4438 CURSOR unit_effectivity_csr (p_unit_effectivity_id IN NUMBER) IS
4439 SELECT
4440 UNIT_EFFECTIVITY_ID, OBJECT_VERSION_NUMBER, CSI_ITEM_INSTANCE_ID, MR_INTERVAL_ID,
4441 MR_EFFECTIVITY_ID, MR_HEADER_ID, STATUS_CODE, SET_DUE_DATE, ACCOMPLISHED_DATE,
4442 DUE_DATE, DUE_COUNTER_VALUE, FORECAST_SEQUENCE, REPETITIVE_MR_FLAG,
4443 TOLERANCE_FLAG, DATE_RUN, PRECEDING_UE_ID, MESSAGE_CODE, REMARKS,
4444 SERVICE_LINE_ID, PROGRAM_MR_HEADER_ID, CANCEL_REASON_CODE, EARLIEST_DUE_DATE,
4445 LATEST_DUE_DATE, DEFER_FROM_UE_ID, CS_INCIDENT_ID, QA_COLLECTION_ID,
4446 ORIG_DEFERRAL_UE_ID, COUNTER_ID,OBJECT_TYPE,MANUALLY_PLANNED_FLAG,
4447 LOG_SERIES_CODE,LOG_SERIES_NUMBER,FLIGHT_NUMBER, MEL_CDL_TYPE_CODE,
4448 POSITION_PATH_ID, ATA_CODE, UNIT_CONFIG_HEADER_ID,
4449 ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3,
4450 ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8,ATTRIBUTE9,
4451 ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14,ATTRIBUTE15,
4452 ORIGINATING_WO_ID, ACCOMPLISH_TRIGGER_TYPE, LOOP_CHAIN_SEQ_NUM, START_LC_UE_ID
4453 FROM AHL_UNIT_EFFECTIVITIES_VL UE
4454 WHERE unit_effectivity_id = p_unit_effectivity_id
4455 UNION
4456 SELECT
4457 UNIT_EFFECTIVITY_ID, OBJECT_VERSION_NUMBER, CSI_ITEM_INSTANCE_ID, MR_INTERVAL_ID,
4458 MR_EFFECTIVITY_ID, MR_HEADER_ID, STATUS_CODE, SET_DUE_DATE, ACCOMPLISHED_DATE,
4459 DUE_DATE, DUE_COUNTER_VALUE, FORECAST_SEQUENCE, REPETITIVE_MR_FLAG,
4460 TOLERANCE_FLAG, DATE_RUN, PRECEDING_UE_ID, MESSAGE_CODE, REMARKS,
4461 SERVICE_LINE_ID, PROGRAM_MR_HEADER_ID, CANCEL_REASON_CODE, EARLIEST_DUE_DATE,
4462 LATEST_DUE_DATE, DEFER_FROM_UE_ID, CS_INCIDENT_ID, QA_COLLECTION_ID,
4463 ORIG_DEFERRAL_UE_ID, COUNTER_ID,OBJECT_TYPE,MANUALLY_PLANNED_FLAG,
4464 LOG_SERIES_CODE,LOG_SERIES_NUMBER,FLIGHT_NUMBER, MEL_CDL_TYPE_CODE,
4465 POSITION_PATH_ID, ATA_CODE, UNIT_CONFIG_HEADER_ID,
4466 ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3,
4467 ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8,ATTRIBUTE9,
4468 ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14,ATTRIBUTE15,
4469 ORIGINATING_WO_ID, ACCOMPLISH_TRIGGER_TYPE, LOOP_CHAIN_SEQ_NUM, START_LC_UE_ID
4470 FROM AHL_UNIT_EFFECTIVITIES_VL UE
4471 WHERE unit_effectivity_id IN
4472 (
4473
4474 SELECT distinct related_ue_id
4475 FROM AHL_UE_RELATIONSHIPS
4476 WHERE relationship_code = 'PARENT'
4477 START WITH ue_id = p_unit_effectivity_id
4478 CONNECT BY ue_id = PRIOR related_ue_id
4479 );
4480 --FOR UPDATE OF OBJECT_VERSION_NUMBER;
4481
4482 l_rowid VARCHAR2(80);
4483 l_new_unit_effectivity_id NUMBER;
4484 l_FORECAST_SEQUENCE NUMBER;
4485 l_TOLERANCE_FLAG VARCHAR2(1);
4486 l_PRECEDING_UE_ID NUMBER;
4487 l_DUE_DATE DATE;
4488 l_EARLIEST_DUE_DATE DATE;
4489 l_LATEST_DUE_DATE DATE;
4490 l_DUE_COUNTER_VALUE NUMBER;
4491 l_MR_EFFECTIVITY_ID NUMBER;
4492 l_MR_INTERVAL_ID NUMBER;
4493 l_DATE_RUN DATE;
4494
4495 CURSOR ue_relns_csr(p_unit_effectivity_id IN NUMBER)IS
4496 SELECT distinct ue_id, related_ue_id, originator_ue_id
4497 FROM AHL_UE_RELATIONSHIPS
4498 WHERE relationship_code = 'PARENT'
4499 START WITH ue_id = p_unit_effectivity_id
4500 CONNECT BY ue_id = PRIOR related_ue_id;
4501
4502 TYPE ue_relns_rec_type IS RECORD(
4503 ue_id NUMBER,
4504 related_ue_id NUMBER,
4505 originator_ue_id NUMBER
4506 );
4507
4508 TYPE ue_relns_tbl_type IS TABLE OF ue_relns_rec_type INDEX BY BINARY_INTEGER;
4509
4510 l_ue_relns_tbl ue_relns_tbl_type;
4511
4512 i NUMBER := 0;
4513 l_ue_relationship_id NUMBER;
4514 l_new_parent_ue_id NUMBER;
4515 l_orig_deferral_ue_id NUMBER;
4516 l_update_status VARCHAR2(30);
4517
4518 -- TAMAL -- Begin changes for ER #3356804
4519 -- TAMAL -- Adding cursor to retrieve UE and SR details
4520 CURSOR get_ue_sr_details
4521 (
4522 p_ue_id in number
4523 )
4524 IS
4525 SELECT ue.object_type,
4526 sr.incident_id,
4527 sr.incident_number,
4528 sr.object_version_number
4529 FROM
4530 ahl_unit_effectivities_b ue,
4531 cs_incidents_all_b sr
4532 WHERE
4533 ue.cs_incident_id = sr.incident_id (+) and
4534 ue.unit_effectivity_id = p_ue_id;
4535
4536 l_ue_obj_type VARCHAR2(3);
4537 l_cs_incident_id NUMBER;
4538 l_cs_incident_number VARCHAR2(64);
4539 l_cs_incident_ovn NUMBER;
4540 l_interaction_id NUMBER;
4541 l_return_status VARCHAR2(1);
4542 l_msg_count NUMBER;
4543 l_msg_data VARCHAR2(4000);
4544 -- TAMAL -- End changes for ER #3356804
4545
4546 -- Support for SR cancellation.
4547 l_status_id NUMBER;
4548
4549 l_mr_applicable VARCHAR2(1);
4550 l_active_end_date DATE;
4551 l_new_mr_header_id NUMBER;
4552 l_new_mr_applicable VARCHAR2(1);
4553
4554 l_mr_header_id NUMBER;
4555 l_ue_status_code VARCHAR2(30);
4556 l_deferral_type VARCHAR2(3);
4557
4558 CURSOR immediate_child_check_csr(p_root_ue_id IN NUMBER,p_child_ue_id IN NUMBER)IS
4559 SELECT 'x'
4560 FROM AHL_UE_RELATIONSHIPS
4561 WHERE related_ue_id = p_child_ue_id
4562 AND relationship_code = 'PARENT'
4563 AND ue_id = p_root_ue_id;
4564
4565 l_junc VARCHAR2(1);
4566 l_new_defer_from_ue_id NUMBER;
4567 l_curr_defer_from_ue_id NUMBER;
4568 l_manually_planned_flag VARCHAR2(1);
4569
4570 -- SR Cancellation for nonserialized items.
4571 CURSOR is_sr_ue_nonserial(p_ue_id in number)
4572 IS
4573 SELECT cii.serial_number
4574 FROM ahl_unit_effectivities_b ue, csi_item_instances cii
4575 WHERE unit_effectivity_id = p_ue_id
4576 AND ue.csi_item_instance_id = cii.instance_id
4577 AND cii.quantity > 0
4578 AND ue.object_type = 'SR';
4579 l_serial_number csi_item_instances.serial_number%TYPE;
4580
4581 CURSOR is_initdue_def(p_ue_id in number)IS
4582 SELECT unit_deferral_id from ahl_unit_deferrals_b
4583 WHERE unit_effectivity_id = p_ue_id
4584 AND unit_deferral_type = 'INIT-DUE';
4585
4586 l_init_due_deferral_id NUMBER;
4587 BEGIN
4588
4589 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
4590 fnd_log.string
4591 (
4592 fnd_log.level_procedure,
4593 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan.begin',
4594 'At the start of PLSQL procedure'
4595 );
4596 END IF;
4597
4598 x_return_status := FND_API.G_RET_STS_SUCCESS;
4599
4600 OPEN unit_effectivity_id_csr(p_unit_deferral_id ,p_object_version_number);
4601 FETCH unit_effectivity_id_csr INTO l_unit_effectivity_id,l_mr_header_id,l_manually_planned_flag,l_curr_defer_from_ue_id;
4602 IF(unit_effectivity_id_csr%NOTFOUND)THEN
4603 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_PRD_DF_APPR_INV_DF');
4604 FND_MESSAGE.SET_TOKEN('DEFERRAL_ID',p_unit_deferral_id);
4605 FND_MSG_PUB.ADD;
4606 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
4607 fnd_log.string
4608 (
4609 fnd_log.level_unexpected,
4610 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4611 'Deferral record details not found for unit deferral id : ' || p_unit_deferral_id
4612 );
4613 END IF;
4614 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4615 ELSE
4616 IF(l_mr_header_id IS NOT NULL) THEN
4617 l_deferral_type := 'MR';
4618 ELSE
4619 l_deferral_type := 'SR';
4620 OPEN get_ue_sr_details (l_unit_effectivity_id);
4621 FETCH get_ue_sr_details INTO l_ue_obj_type, l_cs_incident_id, l_cs_incident_number, l_cs_incident_ovn;
4622 CLOSE get_ue_sr_details;
4623 OPEN is_sr_ue_nonserial(l_unit_effectivity_id);
4624 FETCH is_sr_ue_nonserial INTO l_serial_number;
4625 CLOSE is_sr_ue_nonserial;
4626
4627 IF (l_ue_obj_type IS NOT NULL AND l_ue_obj_type = 'SR' AND p_new_status IS NOT NULL
4628 AND p_new_status IN ('DEFERRED','CANCELLED')) THEN
4629 IF NOT (l_cs_incident_id IS NOT NULL AND l_cs_incident_id > 0) THEN
4630 FND_MESSAGE.SET_NAME(G_APP_NAME, 'AHL_UMP_INVALID_INCIDENT_ID');
4631 FND_MESSAGE.SET_TOKEN('INCIDENT_ID', l_cs_incident_id);
4632 FND_MSG_PUB.ADD;
4633 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
4634 fnd_log.string
4635 (
4636 fnd_log.level_unexpected, 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4637 'Wrong SR incident id: ' || l_cs_incident_id
4638 );
4639 END IF;
4640 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4641 CLOSE unit_effectivity_id_csr;
4642 RETURN;
4643 END IF;
4644 -- Support for cancelled SRs.
4645 IF (p_new_status = 'CANCELLED' AND l_serial_number IS NULL) THEN
4646 l_status_id := FND_PROFILE.VALUE('AHL_PRD_SR_CANCELLED_STATUS');
4647 IF (l_status_id IS NULL) THEN
4648 l_status_id := 2; -- closed.
4649 END IF;
4650 ELSE -- Deferred
4651 l_status_id := 1; -- open.
4652 END IF;
4653 -- Call SR Update_Status API
4654 CS_ServiceRequest_PUB.Update_Status
4655 (
4656 p_api_version => 2.0,
4657 p_init_msg_list => FND_API.G_FALSE,
4658 p_commit => FND_API.G_FALSE,
4659 p_resp_appl_id => NULL,
4660 p_resp_id => NULL,
4661 p_user_id => NULL,
4662 p_login_id => NULL,
4663 --p_status_id => 1, --OPEN
4664 p_status_id => l_status_id,
4665 p_closed_date => NULL,
4666 p_audit_comments => NULL,
4667 p_called_by_workflow => FND_API.G_FALSE,
4668 p_workflow_process_id => NULL,
4669 p_comments => NULL,
4670 p_public_comment_flag => FND_API.G_FALSE,
4671 p_validate_sr_closure => 'N',
4672 p_auto_close_child_entities => 'N',
4673 p_request_id => NULL,
4674 p_request_number => l_cs_incident_number,
4675 x_return_status => l_return_status,
4676 x_msg_count => l_msg_count,
4677 x_msg_data => l_msg_data,
4678 p_object_version_number => l_cs_incident_ovn,
4679 -- p_status => 'OPEN',
4680 x_interaction_id => l_interaction_id
4681 );
4682
4683 -- Abort if any error in calling the SR Update_Status API...
4684 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4685 x_return_status := l_return_status;
4686 RETURN;
4687 END IF;
4688 END IF;
4689 END IF;
4690 END IF;
4691 CLOSE unit_effectivity_id_csr;
4692
4693 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4694 fnd_log.string
4695 (
4696 fnd_log.level_statement,
4697 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4698 'x_return_status : ' || x_return_status
4699 );
4700 fnd_log.string
4701 (
4702 fnd_log.level_statement,
4703 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4704 'p_new_status : ' || p_new_status
4705 );
4706 fnd_log.string
4707 (
4708 fnd_log.level_statement,
4709 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4710 'p_approval_result_code : ' || p_approval_result_code
4711 );
4712
4713 END IF;
4714
4715 IF(x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
4716 RETURN;
4717 END IF;
4718
4719 IF(p_approval_result_code = G_DEFERRAL_APPROVED)THEN
4720 -- clean up prior deferrals
4721 process_prior_ump_deferrals(l_unit_effectivity_id);
4722 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4723 fnd_log.string
4724 (
4725 fnd_log.level_statement,
4726 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4727 'l_deferral_type : ' || l_deferral_type
4728 );
4729 fnd_log.string
4730 (
4731 fnd_log.level_statement,
4732 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4733 'l_manually_planned_flag : ' || l_manually_planned_flag
4734 );
4735 END IF;
4736 l_manually_planned_flag := NVL(l_manually_planned_flag,G_NO_FLAG);
4737 -- get relationship tree snapshot
4738 IF(p_new_status = 'DEFERRED' OR (l_deferral_type = 'MR' AND l_manually_planned_flag = G_NO_FLAG AND p_new_status = 'CANCELLED')
4739 OR (l_deferral_type = 'SR' AND p_new_status = 'CANCELLED' AND l_serial_number IS NOT NULL))THEN
4740 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4741 fnd_log.string
4742 (
4743 fnd_log.level_statement,
4744 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4745 'copying child tree : '
4746 );
4747 END IF;
4748 FOR ue_relns_rec IN ue_relns_csr(l_unit_effectivity_id) LOOP
4749 l_ue_relns_tbl(i).ue_id := ue_relns_rec.ue_id;
4750 l_ue_relns_tbl(i).related_ue_id := ue_relns_rec.related_ue_id;
4751 l_ue_relns_tbl(i).originator_ue_id := ue_relns_rec.originator_ue_id;
4752 i := i + 1;
4753 END LOOP;
4754 END IF;
4755 -- Loop through old records.update its status and insert new ones, update ue relationships table
4756 FOR ue_rec IN unit_effectivity_csr(l_unit_effectivity_id) LOOP
4757
4758 IF(p_new_status = 'DEFERRED' OR (l_deferral_type = 'MR' AND l_manually_planned_flag = G_NO_FLAG AND p_new_status = 'CANCELLED')
4759 OR (l_deferral_type = 'SR' AND p_new_status = 'CANCELLED' AND l_serial_number IS NOT NULL))THEN
4760 -- copy records here
4761 l_new_unit_effectivity_id := NULL;
4762 l_rowid := NULL;
4763
4764 l_mr_header_id := ue_rec.mr_header_id;
4765 l_ue_status_code := NULL;
4766 IF(ue_rec.mr_header_id IS NOT NULL AND l_deferral_type = 'MR' AND ue_rec.unit_effectivity_id = l_unit_effectivity_id)THEN
4767 -- find whether deferral type is MR or SR
4768 -- if MR find whether active else pluggin new mr
4769 -- if SR, find the same for immediate children if any and repeat it for them
4770 AHL_PRD_DF_PVT.get_mr_termination_details(
4771 p_unit_effectivity_id => l_unit_effectivity_id,
4772 x_mr_applicable => l_mr_applicable,
4773 x_active_end_date => l_active_end_date,
4774 x_new_mr_header_id => l_new_mr_header_id,
4775 x_new_mr_applicable => l_new_mr_applicable,
4776 x_return_status => l_return_status,
4777 x_msg_count => l_msg_count,
4778 x_msg_data => l_msg_data);
4779 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4780 x_return_status := l_return_status;
4781 RETURN;
4782 ELSE
4783 IF(l_mr_applicable = FND_API.G_FALSE AND l_new_mr_applicable = FND_API.G_TRUE)THEN
4784 l_mr_header_id := l_new_mr_header_id;
4785 ELSIF (l_mr_applicable = FND_API.G_FALSE AND l_new_mr_applicable = FND_API.G_FALSE)THEN
4786 l_ue_status_code := 'MR-TERMINATE';
4787 END IF;
4788 END IF;
4789 ELSIF(ue_rec.mr_header_id IS NOT NULL AND l_deferral_type = 'SR') THEN
4790 -- verify whether immediate child if yes/expired mr pluggin new MR
4791 OPEN immediate_child_check_csr(l_unit_effectivity_id,ue_rec.unit_effectivity_id);
4792 FETCH immediate_child_check_csr INTO l_junc;
4793 IF(immediate_child_check_csr%FOUND)THEN
4794 AHL_PRD_DF_PVT.get_mr_termination_details(
4795 p_unit_effectivity_id => ue_rec.unit_effectivity_id,
4796 x_mr_applicable => l_mr_applicable,
4797 x_active_end_date => l_active_end_date,
4798 x_new_mr_header_id => l_new_mr_header_id,
4799 x_new_mr_applicable => l_new_mr_applicable,
4800 x_return_status => l_return_status,
4801 x_msg_count => l_msg_count,
4802 x_msg_data => l_msg_data);
4803 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4804 x_return_status := l_return_status;
4805 RETURN;
4806 ELSE
4807 IF(l_mr_applicable = FND_API.G_FALSE AND l_new_mr_applicable = FND_API.G_TRUE)THEN
4808 l_mr_header_id := l_new_mr_header_id;
4809 ELSIF (l_mr_applicable = FND_API.G_FALSE AND l_new_mr_applicable = FND_API.G_FALSE)THEN
4810 l_ue_status_code := 'MR-TERMINATE';
4811 END IF;
4812 END IF;
4813 END IF;
4814 CLOSE immediate_child_check_csr;
4815 END IF;
4816
4817 IF ((l_deferral_type = 'MR' AND l_manually_planned_flag = G_NO_FLAG AND p_new_status = 'CANCELLED') OR
4818 (l_deferral_type = 'SR' AND p_new_status = 'CANCELLED' AND l_serial_number IS NOT NULL))THEN
4819 l_new_defer_from_ue_id := l_curr_defer_from_ue_id;
4820 ELSE
4821 l_new_defer_from_ue_id := l_unit_effectivity_id;
4822 END IF;
4823
4824 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4825 fnd_log.string
4826 (
4827 fnd_log.level_statement,
4828 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4829 'inserting new UMP :l_new_defer_from_ue_id : ' || l_new_defer_from_ue_id
4830 );
4831 END IF;
4832 -- these attributes need to be copied in this case
4833 IF(l_deferral_type = 'MR' AND l_manually_planned_flag = G_NO_FLAG AND p_new_status = 'CANCELLED')THEN
4834 l_FORECAST_SEQUENCE := ue_rec.FORECAST_SEQUENCE ;
4835 l_TOLERANCE_FLAG := ue_rec.TOLERANCE_FLAG ;
4836 l_PRECEDING_UE_ID := ue_rec.PRECEDING_UE_ID ;
4837 l_DUE_DATE := ue_rec.DUE_DATE ;
4838 l_EARLIEST_DUE_DATE := ue_rec.EARLIEST_DUE_DATE ;
4839 l_LATEST_DUE_DATE := ue_rec.LATEST_DUE_DATE ;
4840 l_DUE_COUNTER_VALUE := ue_rec.DUE_COUNTER_VALUE ;
4841 l_MR_EFFECTIVITY_ID := ue_rec.MR_EFFECTIVITY_ID ;
4842 l_MR_INTERVAL_ID := ue_rec.MR_INTERVAL_ID ;
4843 l_DATE_RUN := ue_rec.DATE_RUN ;
4844 IF(ue_rec.status_code = 'INIT-DUE' AND NVL(l_ue_status_code,'x') <> 'MR-TERMINATE')THEN
4845 l_ue_status_code := ue_rec.status_code;
4846 END IF;
4847 ELSE
4848 l_FORECAST_SEQUENCE := NULL;
4849 l_TOLERANCE_FLAG := NULL;
4850 l_PRECEDING_UE_ID := NULL;
4851 l_DUE_DATE := NULL;
4852 l_EARLIEST_DUE_DATE := NULL;
4853 l_LATEST_DUE_DATE := NULL;
4854 l_DUE_COUNTER_VALUE := NULL;
4855 l_MR_EFFECTIVITY_ID := NULL;
4856 l_MR_INTERVAL_ID := NULL;
4857 l_DATE_RUN := NULL;
4858 END IF;
4859
4860 AHL_UNIT_EFFECTIVITIES_PKG.Insert_Row (
4861 X_ROWID => l_rowid,
4862 X_UNIT_EFFECTIVITY_ID => l_new_unit_effectivity_id,
4863 X_CSI_ITEM_INSTANCE_ID => ue_rec.csi_item_instance_id,
4864 X_MR_HEADER_ID => l_mr_header_id,--ue_rec.mr_header_id,
4865 X_REPETITIVE_MR_FLAG => ue_rec.repetitive_mr_flag,
4866 X_REMARKS => ue_rec.remarks,
4867 X_SERVICE_LINE_ID => ue_rec.service_line_id,
4868 X_PROGRAM_MR_HEADER_ID => ue_rec.program_mr_header_id,
4869 X_CS_INCIDENT_ID => ue_rec.cs_incident_id,
4870 X_DEFER_FROM_UE_ID => l_new_defer_from_ue_id,--l_unit_effectivity_id,
4871 X_ORIG_DEFERRAL_UE_ID => NULL,
4872 X_QA_COLLECTION_ID => NULL, --ue_rec.qa_collection_id,
4873 X_MR_INTERVAL_ID => l_MR_INTERVAL_ID,
4874 X_MR_EFFECTIVITY_ID => l_MR_EFFECTIVITY_ID,
4875 X_STATUS_CODE => l_ue_status_code,--null,
4876 X_DUE_DATE => l_DUE_DATE,
4877 X_DUE_COUNTER_VALUE => l_DUE_COUNTER_VALUE,
4878 X_FORECAST_SEQUENCE => l_FORECAST_SEQUENCE,
4879 X_TOLERANCE_FLAG => l_TOLERANCE_FLAG,
4880 X_MESSAGE_CODE => null,
4881 X_PRECEDING_UE_ID => l_PRECEDING_UE_ID,
4882 X_DATE_RUN => l_DATE_RUN,
4883 X_SET_DUE_DATE => null,
4884 X_ACCOMPLISHED_DATE => null,
4885 X_CANCEL_REASON_CODE => null,
4886 X_EARLIEST_DUE_DATE => l_EARLIEST_DUE_DATE,
4887 X_LATEST_DUE_DATE => l_LATEST_DUE_DATE,
4888 x_attribute_category => ue_rec.ATTRIBUTE_CATEGORY,
4889 x_attribute1 => ue_rec.ATTRIBUTE1,
4890 x_attribute2 => ue_rec.ATTRIBUTE2,
4891 x_attribute3 => ue_rec.ATTRIBUTE3,
4892 x_attribute4 => ue_rec.ATTRIBUTE4,
4893 x_attribute5 => ue_rec.ATTRIBUTE5,
4894 x_attribute6 => ue_rec.ATTRIBUTE6,
4895 x_attribute7 => ue_rec.ATTRIBUTE7,
4896 x_attribute8 => ue_rec.ATTRIBUTE8,
4897 x_attribute9 => ue_rec.ATTRIBUTE9,
4898 x_attribute10 => ue_rec.ATTRIBUTE10,
4899 x_attribute11 => ue_rec.ATTRIBUTE11,
4900 x_attribute12 => ue_rec.ATTRIBUTE12,
4901 x_attribute13 => ue_rec.ATTRIBUTE13,
4902 x_attribute14 => ue_rec.ATTRIBUTE14,
4903 x_attribute15 => ue_rec.ATTRIBUTE15,
4904 X_OBJECT_VERSION_NUMBER => 1,
4905 X_APPLICATION_USG_CODE => RTRIM(LTRIM(FND_PROFILE.VALUE('AHL_APPLN_USAGE'))),
4906 X_OBJECT_TYPE => ue_rec.object_type,
4907 X_MANUALLY_PLANNED_FLAG => ue_rec.manually_planned_flag,
4908 X_COUNTER_ID => ue_rec.counter_id,
4909 X_LOG_SERIES_CODE => ue_rec.log_series_code,
4910 X_LOG_SERIES_NUMBER => ue_rec.log_series_number,
4911 X_FLIGHT_NUMBER => ue_rec.flight_number,
4912 X_MEL_CDL_TYPE_CODE => ue_rec.mel_cdl_type_code,
4913 X_POSITION_PATH_ID => ue_rec.position_path_id,
4914 X_ATA_CODE => ue_rec.ATA_CODE,
4915 X_UNIT_CONFIG_HEADER_ID => ue_rec.unit_config_header_id,
4916 X_CREATION_DATE => sysdate,
4917 X_CREATED_BY => fnd_global.user_id,
4918 X_LAST_UPDATE_DATE => sysdate,
4919 X_LAST_UPDATED_BY => fnd_global.user_id,
4920 X_LAST_UPDATE_LOGIN => fnd_global.login_id );
4921
4922 -- copy originating WO id seperately as table handler does not support it.
4923 UPDATE ahl_unit_effectivities_b
4924 SET originating_wo_id = ue_rec.originating_wo_id,
4925 -- added for SB Enh
4926 accomplish_trigger_type = ue_rec.accomplish_trigger_type,
4927 start_lc_ue_id = ue_rec.start_lc_ue_id,
4928 loop_chain_seq_num = ue_rec.loop_chain_seq_num
4929 WHERE ROWID = l_rowid;
4930
4931 IF(ue_rec.unit_effectivity_id = l_unit_effectivity_id)THEN
4932 l_new_parent_ue_id := l_new_unit_effectivity_id;
4933 END IF;
4934
4935 -- update l_ue_relns_tbl with the new unit effectivity id
4936 IF(l_ue_relns_tbl.count > 0)THEN
4937 FOR j IN l_ue_relns_tbl.FIRST..l_ue_relns_tbl.LAST LOOP
4938 IF(l_ue_relns_tbl(j).ue_id = ue_rec.unit_effectivity_id)THEN
4939 l_ue_relns_tbl(j).ue_id := l_new_unit_effectivity_id;
4940 END IF;
4941 IF(l_ue_relns_tbl(j).related_ue_id = ue_rec.unit_effectivity_id)THEN
4942 l_ue_relns_tbl(j).related_ue_id := l_new_unit_effectivity_id;
4943 END IF;
4944 END LOOP;
4945 END IF;
4946 END IF;--
4947
4948 IF(ue_rec.status_code IS NULL OR ue_rec.status_code IN ('INIT-DUE','DEFERRED','TERMINATED','CANCELLED','MR-TERMINATE'))THEN
4949 l_update_status := p_new_status;
4950 ELSE
4951 l_update_status := ue_rec.status_code;
4952 END IF;
4953 -- update thresholds
4954 IF(l_deferral_type = 'MR' AND l_manually_planned_flag = G_NO_FLAG AND p_new_status = 'CANCELLED')THEN
4955 OPEN is_initdue_def(ue_rec.unit_effectivity_id);
4956 FETCH is_initdue_def INTO l_init_due_deferral_id;
4957 IF is_initdue_def%FOUND THEN
4958 UPDATE AHL_UNIT_DEFERRALS_B
4959 SET unit_effectivity_id = l_new_unit_effectivity_id,
4960 LAST_UPDATE_DATE = sysdate,
4961 LAST_UPDATED_BY = fnd_global.user_id,
4962 LAST_UPDATE_LOGIN = fnd_global.login_id
4963 WHERE unit_deferral_id = l_init_due_deferral_id;
4964 END IF;
4965 CLOSE is_initdue_def;
4966 END IF;
4967 -- update status here
4968 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4969 fnd_log.string
4970 (
4971 fnd_log.level_statement,
4972 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
4973 'updating UMP :l_update_status : ' || l_update_status
4974 );
4975 END IF;
4976 AHL_UNIT_EFFECTIVITIES_PKG.update_row(
4977 x_unit_effectivity_id => ue_rec.UNIT_EFFECTIVITY_ID,
4978 x_csi_item_instance_id => ue_rec.CSI_ITEM_INSTANCE_ID,
4979 x_mr_interval_id => ue_rec.MR_INTERVAL_ID,
4980 x_mr_effectivity_id => ue_rec.MR_EFFECTIVITY_ID,
4981 x_mr_header_id => ue_rec.MR_HEADER_ID,
4982 x_status_code => l_update_status,
4983 x_due_date => ue_rec.DUE_DATE,
4984 x_due_counter_value => ue_rec.DUE_COUNTER_VALUE,
4985 x_forecast_sequence => ue_rec.FORECAST_SEQUENCE,
4986 x_repetitive_mr_flag => ue_rec.REPETITIVE_MR_FLAG,
4987 x_tolerance_flag => ue_rec.TOLERANCE_FLAG,
4988 x_remarks => ue_rec.REMARKS,
4989 x_message_code => ue_rec.MESSAGE_CODE,
4990 x_preceding_ue_id => ue_rec.PRECEDING_UE_ID,
4991 x_date_run => ue_rec.DATE_RUN,
4992 x_set_due_date => ue_rec.set_due_date,
4993 x_accomplished_date => ue_rec.accomplished_date,
4994 x_service_line_id => ue_rec.service_line_id,
4995 x_program_mr_header_id => ue_rec.program_mr_header_id,
4996 x_cancel_reason_code => ue_rec.cancel_reason_code,
4997 x_earliest_due_date => ue_rec.earliest_due_date,
4998 x_latest_due_date => ue_rec.latest_due_date,
4999 x_defer_from_ue_id => ue_rec.defer_from_ue_id,
5000 x_qa_collection_id => ue_rec.qa_collection_id,
5001 x_cs_incident_id => ue_rec.cs_incident_id,
5002 x_orig_deferral_ue_id => ue_rec.orig_deferral_ue_id,
5003 X_APPLICATION_USG_CODE => RTRIM(LTRIM(FND_PROFILE.VALUE('AHL_APPLN_USAGE'))),
5004 X_COUNTER_ID => ue_rec.counter_id,
5005 X_OBJECT_TYPE => ue_rec.object_type,
5006 X_MANUALLY_PLANNED_FLAG => ue_rec.manually_planned_flag,
5007 X_LOG_SERIES_CODE => ue_rec.log_series_code,
5008 X_LOG_SERIES_NUMBER => ue_rec.log_series_number,
5009 X_FLIGHT_NUMBER => ue_rec.flight_number,
5010 X_MEL_CDL_TYPE_CODE => ue_rec.mel_cdl_type_code,
5011 X_POSITION_PATH_ID => ue_rec.position_path_id,
5012 X_ATA_CODE => ue_rec.ATA_CODE,
5013 X_UNIT_CONFIG_HEADER_ID => ue_rec.unit_config_header_id,
5014 x_attribute_category => ue_rec.ATTRIBUTE_CATEGORY,
5015 x_attribute1 => ue_rec.ATTRIBUTE1,
5016 x_attribute2 => ue_rec.ATTRIBUTE2,
5017 x_attribute3 => ue_rec.ATTRIBUTE3,
5018 x_attribute4 => ue_rec.ATTRIBUTE4,
5019 x_attribute5 => ue_rec.ATTRIBUTE5,
5020 x_attribute6 => ue_rec.ATTRIBUTE6,
5021 x_attribute7 => ue_rec.ATTRIBUTE7,
5022 x_attribute8 => ue_rec.ATTRIBUTE8,
5023 x_attribute9 => ue_rec.ATTRIBUTE9,
5024 x_attribute10 => ue_rec.ATTRIBUTE10,
5025 x_attribute11 => ue_rec.ATTRIBUTE11,
5026 x_attribute12 => ue_rec.ATTRIBUTE12,
5027 x_attribute13 => ue_rec.ATTRIBUTE13,
5028 x_attribute14 => ue_rec.ATTRIBUTE14,
5029 x_attribute15 => ue_rec.ATTRIBUTE15,
5030 x_object_version_number => ue_rec.OBJECT_VERSION_NUMBER + 1,
5031 x_last_update_date => sysdate,
5032 x_last_updated_by => fnd_global.user_id,
5033 x_last_update_login => fnd_global.login_id
5034 );
5035 END LOOP;
5036 -- create tree here
5037 IF (l_ue_relns_tbl.count > 0 AND (p_new_status = 'DEFERRED' OR (l_deferral_type = 'MR' AND l_manually_planned_flag = G_NO_FLAG AND p_new_status = 'CANCELLED')
5038 OR (l_deferral_type = 'SR' AND p_new_status = 'CANCELLED' AND l_serial_number IS NOT NULL)))THEN
5039 FOR k IN l_ue_relns_tbl.FIRST..l_ue_relns_tbl.LAST LOOP
5040 -- Insert into ahl_ue_relationships.
5041 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5042 fnd_log.string
5043 (
5044 fnd_log.level_statement,
5045 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan',
5046 'inserting Relationships :l_ue_relns_tbl.count : ' || l_ue_relns_tbl.count
5047 );
5048 END IF;
5049 AHL_UE_RELATIONSHIPS_PKG.Insert_Row(
5050 X_UE_RELATIONSHIP_ID => l_ue_relationship_id,
5051 X_UE_ID => l_ue_relns_tbl(k).ue_id,
5052 X_RELATED_UE_ID => l_ue_relns_tbl(k).related_ue_id,
5053 X_RELATIONSHIP_CODE => 'PARENT',
5054 X_ORIGINATOR_UE_ID => l_new_parent_ue_id,
5055 X_ATTRIBUTE_CATEGORY => null,
5056 X_ATTRIBUTE1 => null,
5057 X_ATTRIBUTE2 => null,
5058 X_ATTRIBUTE3 => null,
5059 X_ATTRIBUTE4 => null,
5060 X_ATTRIBUTE5 => null,
5061 X_ATTRIBUTE6 => null,
5062 X_ATTRIBUTE7 => null,
5063 X_ATTRIBUTE8 => null,
5064 X_ATTRIBUTE9 => null,
5065 X_ATTRIBUTE10 => null,
5066 X_ATTRIBUTE11 => null,
5067 X_ATTRIBUTE12 => null,
5068 X_ATTRIBUTE13 => null,
5069 X_ATTRIBUTE14 => null,
5070 X_ATTRIBUTE15 => null,
5071 X_OBJECT_VERSION_NUMBER => 1,
5072 X_LAST_UPDATE_DATE => sysdate,
5073 X_LAST_UPDATED_BY => fnd_global.user_id,
5074 X_CREATION_DATE => sysdate,
5075 X_CREATED_BY => fnd_global.user_id,
5076 X_LAST_UPDATE_LOGIN => fnd_global.login_id);
5077 END LOOP;
5078 END IF;
5079 /* Insert SR update status call here after making sure that object type is 'SR' for p_unit_effectivity_id
5080 * This call should be made only when p_new_status = 'DEFERRED' as SR can not be terminated
5081 * IF SR need to be updated even when deferral has been rejected then make the same call in ELSIF
5082 * statement below
5083 */
5084 ELSIF(p_approval_result_code IN (G_DEFERRAL_INITIATED,G_DEFERRAL_REJECTED))THEN
5085 IF(p_approval_result_code = G_DEFERRAL_INITIATED)THEN
5086 l_orig_deferral_ue_id := l_unit_effectivity_id;
5087 ELSE
5088 l_orig_deferral_ue_id := NULL;
5089 END IF;
5090
5091 FOR ue_rec IN unit_effectivity_csr(l_unit_effectivity_id) LOOP
5092 --update applicable unit deferral id for all children
5093 -- and removing it if deferral got rejected.
5094 IF(ue_rec.UNIT_EFFECTIVITY_ID <> l_unit_effectivity_id)THEN
5095 -- update status here
5096 AHL_UNIT_EFFECTIVITIES_PKG.update_row(
5097 x_unit_effectivity_id => ue_rec.UNIT_EFFECTIVITY_ID,
5098 x_csi_item_instance_id => ue_rec.CSI_ITEM_INSTANCE_ID,
5099 x_mr_interval_id => ue_rec.MR_INTERVAL_ID,
5100 x_mr_effectivity_id => ue_rec.MR_EFFECTIVITY_ID,
5101 x_mr_header_id => ue_rec.MR_HEADER_ID,
5102 x_status_code => ue_rec.status_code,
5103 x_due_date => ue_rec.DUE_DATE,
5104 x_due_counter_value => ue_rec.DUE_COUNTER_VALUE,
5105 x_forecast_sequence => ue_rec.FORECAST_SEQUENCE,
5106 x_repetitive_mr_flag => ue_rec.REPETITIVE_MR_FLAG,
5107 x_tolerance_flag => ue_rec.TOLERANCE_FLAG,
5108 x_remarks => ue_rec.REMARKS,
5109 x_message_code => ue_rec.MESSAGE_CODE,
5110 x_preceding_ue_id => ue_rec.PRECEDING_UE_ID,
5111 x_date_run => ue_rec.DATE_RUN,
5112 x_set_due_date => ue_rec.set_due_date,
5113 x_accomplished_date => ue_rec.accomplished_date,
5114 x_service_line_id => ue_rec.service_line_id,
5115 x_program_mr_header_id => ue_rec.program_mr_header_id,
5116 x_cancel_reason_code => ue_rec.cancel_reason_code,
5117 x_earliest_due_date => ue_rec.earliest_due_date,
5118 x_latest_due_date => ue_rec.latest_due_date,
5119 x_defer_from_ue_id => ue_rec.defer_from_ue_id,
5120 x_qa_collection_id => ue_rec.qa_collection_id,
5121 x_cs_incident_id => ue_rec.cs_incident_id,
5122 x_orig_deferral_ue_id => l_orig_deferral_ue_id,
5123 X_APPLICATION_USG_CODE => RTRIM(LTRIM(FND_PROFILE.VALUE('AHL_APPLN_USAGE'))),
5124 X_OBJECT_TYPE => ue_rec.object_type,
5125 X_MANUALLY_PLANNED_FLAG => ue_rec.manually_planned_flag,
5126 X_COUNTER_ID => ue_rec.counter_id,
5127 X_LOG_SERIES_CODE => ue_rec.log_series_code,
5128 X_LOG_SERIES_NUMBER => ue_rec.log_series_number,
5129 X_FLIGHT_NUMBER => ue_rec.flight_number,
5130 X_MEL_CDL_TYPE_CODE => ue_rec.mel_cdl_type_code,
5131 X_POSITION_PATH_ID => ue_rec.position_path_id,
5132 X_ATA_CODE => ue_rec.ATA_CODE,
5133 X_UNIT_CONFIG_HEADER_ID => ue_rec.unit_config_header_id,
5134 x_attribute_category => ue_rec.ATTRIBUTE_CATEGORY,
5135 x_attribute1 => ue_rec.ATTRIBUTE1,
5136 x_attribute2 => ue_rec.ATTRIBUTE2,
5137 x_attribute3 => ue_rec.ATTRIBUTE3,
5138 x_attribute4 => ue_rec.ATTRIBUTE4,
5139 x_attribute5 => ue_rec.ATTRIBUTE5,
5140 x_attribute6 => ue_rec.ATTRIBUTE6,
5141 x_attribute7 => ue_rec.ATTRIBUTE7,
5142 x_attribute8 => ue_rec.ATTRIBUTE8,
5143 x_attribute9 => ue_rec.ATTRIBUTE9,
5144 x_attribute10 => ue_rec.ATTRIBUTE10,
5145 x_attribute11 => ue_rec.ATTRIBUTE11,
5146 x_attribute12 => ue_rec.ATTRIBUTE12,
5147 x_attribute13 => ue_rec.ATTRIBUTE13,
5148 x_attribute14 => ue_rec.ATTRIBUTE14,
5149 x_attribute15 => ue_rec.ATTRIBUTE15,
5150 x_object_version_number => ue_rec.OBJECT_VERSION_NUMBER + 1,
5151 x_last_update_date => sysdate,
5152 x_last_updated_by => fnd_global.user_id,
5153 x_last_update_login => fnd_global.login_id);
5154 END IF;
5155 END LOOP;
5156 END IF;
5157
5158 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5159 fnd_log.string
5160 (
5161 fnd_log.level_procedure,
5162 'ahl.plsql.AHL_PRD_DF_PVT.process_unit_maint_plan.end',
5163 'At the end of PLSQL procedure'
5164 );
5165 END IF;
5166
5167 END process_unit_maint_plan;
5168
5169 -------------------------------------------------------------------------
5170 -------------------------------------------------------------------------
5171 PROCEDURE process_prior_ump_deferrals(
5172 p_unit_effectivity_id IN NUMBER) IS
5173
5174 CURSOR prior_child_defer_to_ue_csr(p_unit_effectivity_id IN NUMBER) IS
5175 SELECT UE.unit_effectivity_id FROM ahl_unit_effectivities_b UE
5176 WHERE defer_from_ue_id IS NOT NULL
5177 --AND NOT EXISTS (Select 'x' from ahl_visit_tasks_b VST where VST.unit_effectivity_id = UE.unit_effectivity_id)
5178 AND defer_from_ue_id IN (
5179 SELECT related_ue_id
5180 FROM AHL_UE_RELATIONSHIPS
5181 WHERE relationship_code = 'PARENT'
5182 START WITH ue_id = p_unit_effectivity_id
5183 CONNECT BY ue_id = PRIOR related_ue_id
5184 );
5185
5186 CURSOR assigned_to_visit_csr(p_unit_effectivity_id IN NUMBER) IS
5187 SELECT 'x' FROM ahl_visit_tasks_b VST
5188 WHERE VST.unit_effectivity_id = p_unit_effectivity_id;
5189
5190 l_exists VARCHAR2(1);
5191
5192 CURSOR ue_rel_id_csr(p_unit_effectivity_id IN NUMBER) IS
5193 SELECT ue_relationship_id FROM AHL_UE_RELATIONSHIPS
5194 WHERE relationship_code = 'PARENT'
5195 AND related_ue_id = p_unit_effectivity_id;
5196
5197 l_ue_relationship_id NUMBER;
5198
5199 CURSOR unit_effectivity_csr (p_unit_effectivity_id IN NUMBER) IS
5200 SELECT
5201 UNIT_EFFECTIVITY_ID, OBJECT_VERSION_NUMBER, CSI_ITEM_INSTANCE_ID, MR_INTERVAL_ID,
5202 MR_EFFECTIVITY_ID, MR_HEADER_ID, STATUS_CODE, SET_DUE_DATE, ACCOMPLISHED_DATE,
5203 DUE_DATE, DUE_COUNTER_VALUE, FORECAST_SEQUENCE, REPETITIVE_MR_FLAG,
5204 TOLERANCE_FLAG, DATE_RUN, PRECEDING_UE_ID, MESSAGE_CODE, REMARKS,
5205 SERVICE_LINE_ID, PROGRAM_MR_HEADER_ID, CANCEL_REASON_CODE, EARLIEST_DUE_DATE,
5206 LATEST_DUE_DATE, DEFER_FROM_UE_ID, CS_INCIDENT_ID, QA_COLLECTION_ID,
5207 ORIG_DEFERRAL_UE_ID, COUNTER_ID,OBJECT_TYPE,MANUALLY_PLANNED_FLAG,
5208 LOG_SERIES_CODE,LOG_SERIES_NUMBER,FLIGHT_NUMBER, MEL_CDL_TYPE_CODE,
5209 POSITION_PATH_ID, ATA_CODE, UNIT_CONFIG_HEADER_ID,
5210 ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3,
5211 ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8,ATTRIBUTE9,
5212 ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14,ATTRIBUTE15
5213 FROM AHL_UNIT_EFFECTIVITIES_VL UE
5214 WHERE unit_effectivity_id = p_unit_effectivity_id;
5215
5216 CURSOR redundant_deferral_ue_csr(p_unit_effectivity_id IN NUMBER) IS
5217 SELECT UD.unit_deferral_id FROM ahl_unit_deferrals_b UD
5218 WHERE UD.unit_deferral_type = 'DEFERRAL'
5219 AND UD.unit_effectivity_id IN (
5220 SELECT related_ue_id
5221 FROM AHL_UE_RELATIONSHIPS
5222 WHERE relationship_code = 'PARENT'
5223 START WITH ue_id = p_unit_effectivity_id
5224 CONNECT BY ue_id = PRIOR related_ue_id
5225 )
5226 AND NOT EXISTS (
5227 SELECT 'x' FROM ahl_unit_effectivities_b
5228 WHERE defer_from_ue_id = UD.unit_effectivity_id
5229 );
5230
5231 CURSOR redundant_threshold_csr(p_unit_deferral_id IN NUMBER) IS
5232 SELECT unit_threshold_id FROM ahl_unit_thresholds
5233 WHERE unit_deferral_id = p_unit_deferral_id;
5234
5235
5236 BEGIN
5237 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5238 fnd_log.string
5239 (
5240 fnd_log.level_procedure,
5241 'ahl.plsql.AHL_PRD_DF_PVT.process_prior_ump_deferrals.begin',
5242 'At the start of PLSQL procedure'
5243 );
5244 END IF;
5245
5246 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5247 fnd_log.string
5248 (
5249 fnd_log.level_statement,
5250 'ahl.plsql.AHL_PRD_DF_PVT.process_prior_ump_deferrals',
5251 'deleting redundant ue, relationships and marking as exception if assigned to visit'
5252 );
5253 END IF;
5254
5255 FOR ue_id_rec IN prior_child_defer_to_ue_csr(p_unit_effectivity_id) LOOP
5256 -- determine whether assigned to a visit
5257 OPEN assigned_to_visit_csr(ue_id_rec.unit_effectivity_id);
5258 FETCH assigned_to_visit_csr INTO l_exists;
5259 IF(assigned_to_visit_csr%NOTFOUND)THEN
5260 -- if not assigned to a visit delete the ue rec and relationships
5261 AHL_UNIT_EFFECTIVITIES_PKG.delete_row(ue_id_rec.unit_effectivity_id);
5262 OPEN ue_rel_id_csr(ue_id_rec.unit_effectivity_id);
5263 FETCH ue_rel_id_csr INTO l_ue_relationship_id;
5264 IF(ue_rel_id_csr%FOUND) THEN
5265 AHL_UE_RELATIONSHIPS_PKG.delete_row(l_ue_relationship_id);
5266 END IF;
5267 CLOSE ue_rel_id_csr;
5268 ELSE -- assigned to visit -- mark as exception
5269 FOR ue_rec IN unit_effectivity_csr(ue_id_rec.unit_effectivity_id) LOOP
5270 -- update status
5271 AHL_UNIT_EFFECTIVITIES_PKG.update_row(
5272 x_unit_effectivity_id => ue_rec.UNIT_EFFECTIVITY_ID,
5273 x_csi_item_instance_id => ue_rec.CSI_ITEM_INSTANCE_ID,
5274 x_mr_interval_id => ue_rec.MR_INTERVAL_ID,
5275 x_mr_effectivity_id => ue_rec.MR_EFFECTIVITY_ID,
5276 x_mr_header_id => ue_rec.MR_HEADER_ID,
5277 x_status_code => 'EXCEPTION',
5278 x_due_date => ue_rec.DUE_DATE,
5279 x_due_counter_value => ue_rec.DUE_COUNTER_VALUE,
5280 x_forecast_sequence => ue_rec.FORECAST_SEQUENCE,
5281 x_repetitive_mr_flag => ue_rec.REPETITIVE_MR_FLAG,
5282 x_tolerance_flag => ue_rec.TOLERANCE_FLAG,
5283 x_remarks => ue_rec.REMARKS,
5284 x_message_code => ue_rec.MESSAGE_CODE,
5285 x_preceding_ue_id => ue_rec.PRECEDING_UE_ID,
5286 x_date_run => ue_rec.DATE_RUN,
5287 x_set_due_date => ue_rec.set_due_date,
5288 x_accomplished_date => ue_rec.accomplished_date,
5289 x_service_line_id => ue_rec.service_line_id,
5290 x_program_mr_header_id => ue_rec.program_mr_header_id,
5291 x_cancel_reason_code => ue_rec.cancel_reason_code,
5292 x_earliest_due_date => ue_rec.earliest_due_date,
5293 x_latest_due_date => ue_rec.latest_due_date,
5294 x_defer_from_ue_id => ue_rec.defer_from_ue_id,
5295 x_qa_collection_id => ue_rec.qa_collection_id,
5296 x_cs_incident_id => ue_rec.cs_incident_id,
5297 x_orig_deferral_ue_id => ue_rec.orig_deferral_ue_id,
5298 X_APPLICATION_USG_CODE => RTRIM(LTRIM(FND_PROFILE.VALUE('AHL_APPLN_USAGE'))),
5299 X_OBJECT_TYPE => ue_rec.object_type,
5300 X_MANUALLY_PLANNED_FLAG => ue_rec.manually_planned_flag,
5301 X_COUNTER_ID => ue_rec.counter_id,
5302 X_LOG_SERIES_CODE => ue_rec.log_series_code,
5303 X_LOG_SERIES_NUMBER => ue_rec.log_series_number,
5304 X_FLIGHT_NUMBER => ue_rec.flight_number,
5305 X_MEL_CDL_TYPE_CODE => ue_rec.mel_cdl_type_code,
5306 X_POSITION_PATH_ID => ue_rec.position_path_id,
5307 X_ATA_CODE => ue_rec.ATA_CODE,
5308 X_UNIT_CONFIG_HEADER_ID => ue_rec.unit_config_header_id,
5309 x_attribute_category => ue_rec.ATTRIBUTE_CATEGORY,
5310 x_attribute1 => ue_rec.ATTRIBUTE1,
5311 x_attribute2 => ue_rec.ATTRIBUTE2,
5312 x_attribute3 => ue_rec.ATTRIBUTE3,
5313 x_attribute4 => ue_rec.ATTRIBUTE4,
5314 x_attribute5 => ue_rec.ATTRIBUTE5,
5315 x_attribute6 => ue_rec.ATTRIBUTE6,
5316 x_attribute7 => ue_rec.ATTRIBUTE7,
5317 x_attribute8 => ue_rec.ATTRIBUTE8,
5318 x_attribute9 => ue_rec.ATTRIBUTE9,
5319 x_attribute10 => ue_rec.ATTRIBUTE10,
5320 x_attribute11 => ue_rec.ATTRIBUTE11,
5321 x_attribute12 => ue_rec.ATTRIBUTE12,
5322 x_attribute13 => ue_rec.ATTRIBUTE13,
5323 x_attribute14 => ue_rec.ATTRIBUTE14,
5324 x_attribute15 => ue_rec.ATTRIBUTE15,
5325 x_object_version_number => ue_rec.OBJECT_VERSION_NUMBER + 1,
5326 x_last_update_date => sysdate,
5327 x_last_updated_by => fnd_global.user_id,
5328 x_last_update_login => fnd_global.login_id);
5329 END LOOP;
5330 END IF;
5331 CLOSE assigned_to_visit_csr;
5332 END LOOP;
5333
5334 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5335 fnd_log.string
5336 (
5337 fnd_log.level_statement,
5338 'ahl.plsql.AHL_PRD_DF_PVT.process_prior_ump_deferrals',
5339 'deleting un-necessary deferral records'
5340 );
5341 END IF;
5342
5343 FOR redundant_deferral_rec IN redundant_deferral_ue_csr(p_unit_effectivity_id) LOOP
5344 FOR redundant_threshold_rec IN redundant_threshold_csr(redundant_deferral_rec.unit_deferral_id) LOOP
5345 AHL_UNIT_THRESHOLDS_PKG.delete_row(redundant_threshold_rec.unit_threshold_id);
5346 END LOOP;
5347 AHL_UNIT_DEFERRALS_PKG.delete_row(redundant_deferral_rec.unit_deferral_id);
5348 END LOOP;
5349
5350
5351 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5352 fnd_log.string
5353 (
5354 fnd_log.level_procedure,
5355 'ahl.plsql.AHL_PRD_DF_PVT.process_prior_ump_deferrals.end',
5356 'At the end of PLSQL procedure'
5357 );
5358 END IF;
5359 END process_prior_ump_deferrals;
5360
5361
5362
5363 -------------------------------------------------------------------------
5364 -- Procedure to get deferral details attached to any unit effectivity --
5365 --------------------------------------------------------------------------
5366 PROCEDURE get_deferral_details (
5367
5368 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
5369 p_unit_effectivity_id IN NUMBER,
5370 x_df_header_info_rec OUT NOCOPY AHL_PRD_DF_PVT.df_header_info_rec_type,
5371 x_df_schedules_tbl OUT NOCOPY AHL_PRD_DF_PVT.df_schedules_tbl_type,
5372 x_return_status OUT NOCOPY VARCHAR2,
5373 x_msg_count OUT NOCOPY NUMBER,
5374 x_msg_data OUT NOCOPY VARCHAR2) IS
5375
5376 l_api_name CONSTANT VARCHAR2(30) := 'get_deferral_details';
5377
5378 l_df_header_info_rec AHL_PRD_DF_PVT.df_header_info_rec_type;
5379 l_applicable_ue_id NUMBER;
5380
5381 -- to fecth context information
5382 CURSOR context_info_csr(p_unit_effectivity_id IN NUMBER) IS
5383 SELECT due_date, mr_header_id,title,description,repetitive_mr_flag,cs_incident_id,cs_incident_number,
5384 cs_incident_summary,manually_planned_flag
5385 FROM ahl_ue_deferral_details_v
5386 WHERE unit_effectivity_id = p_unit_effectivity_id
5387 AND APPLICATION_USG_CODE = RTRIM(LTRIM(FND_PROFILE.VALUE('AHL_APPLN_USAGE'))) ;--this takes care of app_usage changes
5388
5389 -- mr status meaning has to be fecthed seperately because function returns only code
5390 CURSOR mr_status_meaning_csr(p_status_code IN VARCHAR2)IS
5391 SELECT meaning FROM FND_LOOKUP_VALUES_VL
5392 WHERE lookup_code = p_status_code
5393 AND lookup_type = 'AHL_PRD_MR_STATUS';
5394
5395 CURSOR ue_status_meaning_csr(p_status_code IN VARCHAR2)IS
5396 SELECT meaning FROM FND_LOOKUP_VALUES_VL
5397 WHERE lookup_code = p_status_code
5398 AND lookup_type = 'AHL_UNIT_EFFECTIVITY_STATUS';
5399
5400 -- to fetch visit info
5401 CURSOR visit_info_csr(p_unit_effectivity_id IN NUMBER) IS
5402 SELECT VS.visit_id, VS.visit_number FROM ahl_visits_b VS,ahl_visit_tasks_b VST
5403 WHERE VST.visit_id = VS.visit_id
5404 AND VST.unit_effectivity_id = p_unit_effectivity_id;
5405
5406 -- to check whether MR or any of its children has resettable counters
5407 CURSOR reset_counter_csr(p_unit_effectivity_id IN NUMBER) IS
5408 /* In R12, modified to use csi_counters_vl instead of csi_cp_counters_v.
5409 SELECT 'x' from csi_cp_counters_v CP, AHL_MR_INTERVALS_V MRI, AHL_MR_EFFECTIVITIES MRE, AHL_UNIT_EFFECTIVITIES_B UE
5410 WHERE CP.customer_product_id = UE.csi_item_instance_id
5411 AND CP.counter_name = MRI.counter_name
5412 AND MRI.reset_value IS NOT NULL
5413 AND MRI.mr_effectivity_id = MRE.mr_effectivity_id
5414 AND MRE.mr_header_id = UE.mr_header_id
5415 AND UE.unit_effectivity_id = p_unit_effectivity_id
5416 UNION
5417 SELECT 'x' from csi_cp_counters_v CP, AHL_MR_INTERVALS_V MRI, AHL_MR_EFFECTIVITIES MRE, AHL_UNIT_EFFECTIVITIES_B UE
5418 WHERE CP.customer_product_id = UE.csi_item_instance_id
5419 AND CP.counter_name = MRI.counter_name
5420 AND MRI.reset_value IS NOT NULL
5421 AND MRI.mr_effectivity_id = MRE.mr_effectivity_id
5422 AND MRE.mr_header_id = UE.mr_header_id
5423 AND UE.unit_effectivity_id IN
5424 (
5425
5426 SELECT related_ue_id
5427 FROM AHL_UE_RELATIONSHIPS
5428 WHERE relationship_code = 'PARENT'
5429 START WITH ue_id = p_unit_effectivity_id
5430 CONNECT BY ue_id = PRIOR related_ue_id
5431
5432 );
5433 */
5434
5435 SELECT 'x'
5436 from csi_counter_associations ca, csi_counters_vl CP, AHL_MR_INTERVALS_V MRI,
5437 AHL_MR_EFFECTIVITIES MRE, AHL_UNIT_EFFECTIVITIES_B UE
5438 WHERE CA.source_object_id = UE.csi_item_instance_id
5439 AND ca.source_object_code = 'CP'
5440 AND CP.counter_template_name = MRI.counter_name
5441 AND MRI.reset_value IS NOT NULL
5442 AND MRI.mr_effectivity_id = MRE.mr_effectivity_id
5443 AND MRE.mr_header_id = UE.mr_header_id
5444 AND UE.unit_effectivity_id = p_unit_effectivity_id
5445 UNION
5446 SELECT 'x'
5447 from csi_counter_associations ca, csi_counters_vl CP, AHL_MR_INTERVALS_V MRI,
5448 AHL_MR_EFFECTIVITIES MRE, AHL_UNIT_EFFECTIVITIES_B UE
5449 WHERE CA.source_object_id = UE.csi_item_instance_id
5450 AND ca.source_object_code = 'CP'
5451 AND CP.counter_template_name = MRI.counter_name
5452 AND MRI.reset_value IS NOT NULL
5453 AND MRI.mr_effectivity_id = MRE.mr_effectivity_id
5454 AND MRE.mr_header_id = UE.mr_header_id
5455 AND UE.unit_effectivity_id IN
5456 (
5457
5458 SELECT related_ue_id
5459 FROM AHL_UE_RELATIONSHIPS
5460 WHERE relationship_code = 'PARENT'
5461 START WITH ue_id = p_unit_effectivity_id
5462 CONNECT BY ue_id = PRIOR related_ue_id
5463
5464 );
5465
5466 l_exists VARCHAR2(1);
5467
5468 -- to fetch df_header_rec
5469 CURSOR df_header_info_csr(p_unit_effectivity_id IN NUMBER) IS
5470 SELECT unit_deferral_id, object_version_number, approval_status_code,FLV.meaning approval_status_meaning,defer_reason_code,skip_mr_flag,
5471 cancel_flag, affect_due_calc_flag, set_due_date, deferral_effective_on,remarks,approver_notes, user_deferral_type, DTYP.meaning user_deferral_mean,
5472 /*manisaga: added attributes for DFF Enablement on 22-Jan-2010--start */
5473 ahl_unit_deferrals_vl.attribute_category,ahl_unit_deferrals_vl.attribute1,ahl_unit_deferrals_vl.attribute2,ahl_unit_deferrals_vl.attribute3,
5474 ahl_unit_deferrals_vl.attribute4,ahl_unit_deferrals_vl.attribute5,ahl_unit_deferrals_vl.attribute6,ahl_unit_deferrals_vl.attribute7,
5475 ahl_unit_deferrals_vl.attribute8,ahl_unit_deferrals_vl.attribute9,ahl_unit_deferrals_vl.attribute10,ahl_unit_deferrals_vl.attribute11,
5476 ahl_unit_deferrals_vl.attribute12,ahl_unit_deferrals_vl.attribute13,ahl_unit_deferrals_vl.attribute14,ahl_unit_deferrals_vl.attribute15
5477 /*manisaga: added attributes for DFF Enablement on 22-Jan-2010--end */
5478
5479 FROM ahl_unit_deferrals_vl,fnd_lookup_values_vl FLV, fnd_lookup_values_vl DTYP
5480 WHERE unit_deferral_type = 'DEFERRAL'
5481 AND unit_effectivity_id = p_unit_effectivity_id
5482 AND FLV.lookup_code = approval_status_code
5483 AND FLV.lookup_type = 'AHL_PRD_DF_APPR_STATUS_TYPES'
5484 AND DTYP.lookup_type(+) = 'AHL_PRD_DEFERRAL_TYPE'
5485 AND DTYP.lookup_code(+) = user_deferral_type ;
5486
5487 -- fetch deferral schedule rec
5488 CURSOR df_schedule_tbl_csr(p_unit_deferral_id IN NUMBER) IS
5489 SELECT UT.unit_threshold_id,UT.object_version_number,UT.unit_deferral_id, UT.counter_id,
5490 CO.name, UT.counter_value, UT.ctr_value_type_code,MU.unit_of_measure
5491 FROM MTL_UNITS_OF_MEASURE_VL MU, CS_COUNTERS CO,ahl_unit_thresholds UT
5492 WHERE MU.uom_code = CO.uom_code
5493 AND CO.counter_id = UT.counter_id
5494 AND UT.unit_deferral_id = p_unit_deferral_id
5495 ORDER BY CO.name;
5496
5497
5498 i NUMBER := 0;
5499 l_df_schedules_tbl AHL_PRD_DF_PVT.df_schedules_tbl_type;
5500
5501 l_mr_applicable VARCHAR2(1);
5502 l_active_end_date DATE;
5503 l_new_mr_header_id NUMBER;
5504 l_new_mr_applicable VARCHAR2(1);
5505
5506 CURSOR is_ue_inst_serial_ctld(p_unit_effectivity_id IN NUMBER)IS
5507 SELECT 'X' FROM csi_item_instances csi, ahl_unit_effectivities_b ue
5508 WHERE ue.UNIT_EFFECTIVITY_ID = p_unit_effectivity_id
5509 AND csi.instance_id = ue.CSI_ITEM_INSTANCE_ID AND csi.SERIAL_NUMBER IS NOT NULL;
5510
5511 BEGIN
5512 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5513 fnd_log.string
5514 (
5515 fnd_log.level_procedure,
5516 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details.begin',
5517 'At the start of PLSQL procedure'
5518 );
5519 END IF;
5520 -- Initialize message list if p_init_msg_list is set to TRUE
5521 IF FND_API.To_Boolean( p_init_msg_list) THEN
5522 FND_MSG_PUB.Initialize;
5523 END IF;
5524 -- Initialize API return status to success
5525 x_return_status := FND_API.G_RET_STS_SUCCESS;
5526
5527 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5528 fnd_log.string
5529 (
5530 fnd_log.level_statement,
5531 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details',
5532 'Got request for deferral record of Unit effectivity ID : ' || p_unit_effectivity_id
5533 );
5534 END IF;
5535
5536 IF(p_unit_effectivity_id IS NULL OR p_unit_effectivity_id = FND_API.G_MISS_NUM)THEN
5537 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_HREC_KMISS');
5538 FND_MSG_PUB.ADD;
5539 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
5540 fnd_log.string
5541 (
5542 fnd_log.level_unexpected,
5543 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details',
5544 'Invalid request, Unit Effectivity IS NULL'
5545 );
5546 END IF;
5547 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5548 END IF;
5549 --get applicable ue id and find out whether deferral record should be shown.
5550 l_applicable_ue_id := get_applicable_ue(p_unit_effectivity_id);
5551
5552 -- throw errors if any
5553 IF(FND_MSG_PUB.count_msg > 0)THEN
5554 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5555 END IF;
5556
5557 IF(l_applicable_ue_id IS NULL)THEN
5558 l_applicable_ue_id := p_unit_effectivity_id;
5559 /*FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_MRSR_STATUS');
5560 FND_MSG_PUB.ADD;
5561 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
5562 fnd_log.string
5563 (
5564 fnd_log.level_error,
5565 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details',
5566 'Status of MR or SR is not valid for deferral'
5567 );
5568 END IF;*/
5569 END IF;
5570 l_df_header_info_rec.unit_effectivity_id := l_applicable_ue_id;
5571 --dbms_output.put_line('l_applicable_ue_id : ' || l_applicable_ue_id );
5572 -- fill in context information
5573 OPEN context_info_csr(l_applicable_ue_id);
5574 FETCH context_info_csr INTO l_df_header_info_rec.due_date,l_df_header_info_rec.mr_header_id,
5575 l_df_header_info_rec.mr_title,l_df_header_info_rec.mr_description,
5576 l_df_header_info_rec.mr_repetitive_flag,l_df_header_info_rec.incident_id,
5577 l_df_header_info_rec.incident_number,l_df_header_info_rec.summary,
5578 l_df_header_info_rec.manually_planned_flag;
5579
5580 IF(context_info_csr%NOTFOUND)THEN
5581 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_HREC_UE_ID');
5582 FND_MSG_PUB.ADD;
5583 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
5584 fnd_log.string
5585 (
5586 fnd_log.level_unexpected,
5587 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details',
5588 'Unit Effectivity record not found'
5589 );
5590 END IF;
5591 CLOSE context_info_csr;
5592 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5593 END IF;
5594 CLOSE context_info_csr;
5595
5596
5597 l_df_header_info_rec.ue_status_code := AHL_COMPLETIONS_PVT.get_mr_status(l_df_header_info_rec.unit_effectivity_id);
5598
5599 OPEN mr_status_meaning_csr(l_df_header_info_rec.ue_status_code);
5600 FETCH mr_status_meaning_csr INTO l_df_header_info_rec.ue_status_meaning;
5601 IF(mr_status_meaning_csr%NOTFOUND)THEN
5602 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_UE_MR');
5603 FND_MSG_PUB.ADD;
5604 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
5605 fnd_log.string
5606 (
5607 fnd_log.level_unexpected,
5608 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details',
5609 'Invalid unit effectivity record, mr status meaning not found'
5610 );
5611 END IF;
5612 CLOSE mr_status_meaning_csr;
5613 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5614 END IF;
5615 CLOSE mr_status_meaning_csr;
5616
5617 -- fill in visit information
5618 OPEN visit_info_csr(l_applicable_ue_id);
5619 FETCH visit_info_csr INTO l_df_header_info_rec.visit_id,l_df_header_info_rec.visit_number;
5620 /* R12: UMP Deferral.
5621 IF(visit_info_csr%NOTFOUND)THEN
5622 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_UE_VISIT');
5623 FND_MSG_PUB.ADD;
5624 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
5625 fnd_log.string
5626 (
5627 fnd_log.level_unexpected,
5628 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details',
5629 'Visit Information not found'
5630 );
5631 END IF;
5632 CLOSE visit_info_csr;
5633 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5634 END IF;
5635 */
5636 CLOSE visit_info_csr;
5637
5638 -- filling in mr/sr type and whether mr or its children has restettable counters
5639 IF(l_df_header_info_rec.mr_header_id IS NOT NULL) THEN
5640 l_df_header_info_rec.deferral_type := G_DEFERRAL_TYPE_MR;
5641 l_df_header_info_rec.reset_counter_flag := G_YES_FLAG;
5642 IF(l_df_header_info_rec.mr_repetitive_flag = G_YES_FLAG)THEN
5643 OPEN reset_counter_csr(l_applicable_ue_id);
5644 FETCH reset_counter_csr INTO l_exists;
5645 IF(reset_counter_csr%NOTFOUND)THEN
5646 l_df_header_info_rec.reset_counter_flag := G_NO_FLAG;
5647 END IF;
5648 CLOSE reset_counter_csr;
5649 END IF;
5650 ELSIF l_df_header_info_rec.incident_id IS NOT NULL THEN
5651 l_df_header_info_rec.deferral_type := G_DEFERRAL_TYPE_SR;
5652 l_df_header_info_rec.mr_repetitive_flag := G_NO_FLAG;
5653 l_df_header_info_rec.reset_counter_flag := G_YES_FLAG;
5654 END IF;
5655
5656 OPEN is_ue_inst_serial_ctld(l_applicable_ue_id);
5657 FETCH is_ue_inst_serial_ctld INTO l_exists;
5658 IF(is_ue_inst_serial_ctld%NOTFOUND)THEN
5659 l_df_header_info_rec.WO_ITEM_SRL_CTRLD := G_NO_FLAG;
5660 ELSE
5661 l_df_header_info_rec.WO_ITEM_SRL_CTRLD := G_YES_FLAG;
5662 END IF;
5663 CLOSE is_ue_inst_serial_ctld;
5664
5665 -- throw errors if any
5666 IF(FND_MSG_PUB.count_msg > 0)THEN
5667 RAISE FND_API.G_EXC_ERROR;
5668 END IF;
5669 -- fetch deferral header record
5670 OPEN df_header_info_csr(l_applicable_ue_id);
5671 FETCH df_header_info_csr INTO l_df_header_info_rec.unit_deferral_id,
5672 l_df_header_info_rec.object_version_number,
5673 l_df_header_info_rec.approval_status_code,
5674 l_df_header_info_rec.approval_status_meaning,
5675 l_df_header_info_rec.defer_reason_code,
5676 l_df_header_info_rec.skip_mr_flag,
5677 l_df_header_info_rec.cancel_flag,
5678 l_df_header_info_rec.affect_due_calc_flag,
5679 l_df_header_info_rec.set_due_date,
5680 l_df_header_info_rec.deferral_effective_on,
5681 l_df_header_info_rec.remarks,
5682 l_df_header_info_rec.approver_notes,
5683 l_df_header_info_rec.user_deferral_type_code,
5684 l_df_header_info_rec.user_deferral_type_mean,
5685 /*manisaga: added attributes for DFF Enablement on 22-Jan-2010--start */
5686 l_df_header_info_rec.attribute_category,
5687 l_df_header_info_rec.attribute1,
5688 l_df_header_info_rec.attribute2,
5689 l_df_header_info_rec.attribute3,
5690 l_df_header_info_rec.attribute4,
5691 l_df_header_info_rec.attribute5,
5692 l_df_header_info_rec.attribute6,
5693 l_df_header_info_rec.attribute7,
5694 l_df_header_info_rec.attribute8,
5695 l_df_header_info_rec.attribute9,
5696 l_df_header_info_rec.attribute10,
5697 l_df_header_info_rec.attribute11,
5698 l_df_header_info_rec.attribute12,
5699 l_df_header_info_rec.attribute13,
5700 l_df_header_info_rec.attribute14,
5701 l_df_header_info_rec.attribute15;
5702 /*manisaga: added attributes for DFF Enablement on 22-Jan-2010--end */
5703
5704 IF(df_header_info_csr%NOTFOUND)THEN
5705 l_df_header_info_rec.cancel_flag := NULL;--keep it NULL
5706 l_df_header_info_rec.skip_mr_flag := G_NO_FLAG;
5707 l_df_header_info_rec.affect_due_calc_flag := G_YES_FLAG;
5708 l_df_header_info_rec.approval_status_code := 'DRAFT';
5709 IF(l_df_header_info_rec.deferral_type = G_DEFERRAL_TYPE_MR AND
5710 l_df_header_info_rec.reset_counter_flag = G_NO_FLAG)THEN
5711 l_df_header_info_rec.affect_due_calc_flag := G_NO_FLAG;
5712 END IF;
5713 l_df_header_info_rec.deferral_effective_on := SYSDATE;
5714 ELSIF(l_df_header_info_rec.approval_status_code = 'DEFERRAL_REJECTED')THEN--,'DEFERRAL_PENDING','DEFERRED'))THEN
5715 IF(l_df_header_info_rec.cancel_flag = G_YES_FLAG)THEN
5716 l_df_header_info_rec.ue_status_code := 'CANCEL_REJECTED';
5717 OPEN ue_status_meaning_csr(l_df_header_info_rec.ue_status_code);
5718 FETCH ue_status_meaning_csr INTO l_df_header_info_rec.ue_status_meaning;
5719 IF(ue_status_meaning_csr%NOTFOUND)THEN
5720 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_UE_MR');
5721 FND_MSG_PUB.ADD;
5722 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
5723 fnd_log.string
5724 (
5725 fnd_log.level_unexpected,
5726 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details',
5727 'Invalid unit effectivity record, mr status meaning not found'
5728 );
5729 END IF;
5730 CLOSE ue_status_meaning_csr;
5731 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5732 END IF;
5733 CLOSE ue_status_meaning_csr;
5734 ELSE
5735 l_df_header_info_rec.ue_status_code := l_df_header_info_rec.approval_status_code;
5736 l_df_header_info_rec.ue_status_meaning := l_df_header_info_rec.approval_status_meaning;
5737 END IF;
5738 END IF;
5739 CLOSE df_header_info_csr;
5740
5741 l_df_header_info_rec.CTR_UOM_REMAIN := get_uom_remain(l_applicable_ue_id);
5742
5743 -- throw errors if any
5744 IF(FND_MSG_PUB.count_msg > 0)THEN
5745 RAISE FND_API.G_EXC_ERROR;
5746 END IF;
5747
5748 -- fetch deferral schedule rec
5749 IF(l_df_header_info_rec.unit_deferral_id IS NOT NULL)THEN
5750 OPEN df_schedule_tbl_csr(l_df_header_info_rec.unit_deferral_id);
5751 LOOP
5752 FETCH df_schedule_tbl_csr INTO
5753 l_df_schedules_tbl(i).unit_threshold_id,
5754 l_df_schedules_tbl(i).object_version_number,
5755 l_df_schedules_tbl(i).unit_deferral_id,
5756 l_df_schedules_tbl(i).counter_id,
5757 l_df_schedules_tbl(i).counter_name,
5758 l_df_schedules_tbl(i).counter_value,
5759 l_df_schedules_tbl(i).ctr_value_type_code,
5760 l_df_schedules_tbl(i).unit_of_measure;
5761 EXIT WHEN df_schedule_tbl_csr%NOTFOUND;
5762 i := i + 1;
5763 END LOOP;
5764 CLOSE df_schedule_tbl_csr;
5765 END IF;
5766
5767 -- throw errors if any
5768 IF(FND_MSG_PUB.count_msg > 0)THEN
5769 RAISE FND_API.G_EXC_ERROR;
5770 END IF;
5771
5772 IF(l_df_header_info_rec.deferral_type = G_DEFERRAL_TYPE_MR)THEN
5773 AHL_PRD_DF_PVT.get_mr_termination_details(
5774 p_unit_effectivity_id => l_applicable_ue_id,
5775 x_mr_applicable => l_mr_applicable,
5776 x_active_end_date => l_active_end_date,
5777 x_new_mr_header_id => l_new_mr_header_id,
5778 x_new_mr_applicable => l_new_mr_applicable,
5779 x_return_status => x_return_status,
5780 x_msg_count => x_msg_count,
5781 x_msg_data => x_msg_data);
5782 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5783 RETURN;
5784 ELSE
5785 IF(l_mr_applicable = FND_API.G_FALSE AND l_new_mr_applicable = FND_API.G_FALSE)THEN
5786 l_df_header_info_rec.MR_APPL_EXPIRED := FND_API.G_TRUE;
5787 l_df_header_info_rec.cancel_flag := G_NO_FLAG;
5788 END IF;
5789 END IF;
5790 END IF;
5791
5792 x_df_header_info_rec := l_df_header_info_rec;
5793 x_df_schedules_tbl := l_df_schedules_tbl;
5794
5795
5796 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5797 fnd_log.string
5798 (
5799 fnd_log.level_procedure,
5800 'ahl.plsql.AHL_PRD_DF_PVT.get_deferral_details.end',
5801 'At the end of PLSQL procedure'
5802 );
5803 END IF;
5804
5805 EXCEPTION
5806 WHEN FND_API.G_EXC_ERROR THEN
5807 x_df_header_info_rec := l_df_header_info_rec;
5808 x_df_schedules_tbl := l_df_schedules_tbl;
5809 x_return_status := FND_API.G_RET_STS_ERROR;
5810 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
5811 p_data => x_msg_data,
5812 p_encoded => fnd_api.g_false);
5813
5814
5815 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5816 x_df_header_info_rec := l_df_header_info_rec;
5817 x_df_schedules_tbl := l_df_schedules_tbl;
5818 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5819 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
5820 p_data => x_msg_data,
5821 p_encoded => fnd_api.g_false);
5822
5823
5824 WHEN OTHERS THEN
5825 x_df_header_info_rec := l_df_header_info_rec;
5826 x_df_schedules_tbl := l_df_schedules_tbl;
5827 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5828 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5829 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
5830 p_procedure_name => l_api_name,
5831 p_error_text => SUBSTR(SQLERRM,1,500));
5832 END IF;
5833 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
5834 p_data => x_msg_data,
5835 p_encoded => fnd_api.g_false);
5836 END get_deferral_details;
5837
5838 FUNCTION get_applicable_ue(
5839 p_unit_effectivity_id NUMBER) RETURN NUMBER IS
5840
5841 -- to fecth context information
5842 CURSOR applicable_ue_csr(p_unit_effectivity_id IN NUMBER) IS
5843 SELECT orig_deferral_ue_id,ue_status_code,def_status_code
5844 FROM ahl_ue_deferral_details_v
5845 WHERE unit_effectivity_id = p_unit_effectivity_id;
5846
5847 l_orig_deferral_ue_id NUMBER;
5848 l_ue_status_code VARCHAR2(30);
5849 l_def_status_code VARCHAR2(30);
5850 l_applicable_ue_id NUMBER;
5851 BEGIN
5852 OPEN applicable_ue_csr(p_unit_effectivity_id);
5853 FETCH applicable_ue_csr INTO l_orig_deferral_ue_id,
5854 l_ue_status_code,
5855 l_def_status_code;
5856 IF(applicable_ue_csr%NOTFOUND)THEN
5857 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_PRD_DF_INV_HREC_UE_ID');
5858 FND_MSG_PUB.ADD;
5859 IF (fnd_log.level_unexpected >= fnd_log.g_current_runtime_level)THEN
5860 fnd_log.string
5861 (
5862 fnd_log.level_unexpected,
5863 'ahl.plsql.AHL_PRD_DF_PVT.get_applicable_ue',
5864 'Unit Effectivity record not found'
5865 );
5866 END IF;
5867 ELSE
5868 l_applicable_ue_id := l_orig_deferral_ue_id;
5869 IF(l_orig_deferral_ue_id IS NULL)THEN
5870 IF((NVL(l_def_status_code,'x') IN ('DEFERRAL_PENDING','DEFERRED','TERMINATED','CANCELLED')) OR
5871 (NVL(l_ue_status_code,'x') IN ('DEFERRED','TERMINATED','CANCELLED')) OR
5872 l_ue_status_code IS NULL )THEN
5873 l_applicable_ue_id := p_unit_effectivity_id;
5874 END IF;
5875 END IF;
5876 END IF;
5877 CLOSE applicable_ue_csr;
5878 RETURN l_applicable_ue_id;
5879
5880 END get_applicable_ue;
5881
5882 --------------------------------------------------------------------------------
5883 FUNCTION process_deferred_exceptions(p_unit_effectivity_id IN NUMBER) RETURN BOOLEAN IS
5884
5885 CURSOR unit_deferral_csr(p_unit_effectivity_id IN NUMBER) IS
5886 SELECT UD.unit_deferral_id FROM ahl_unit_deferrals_b UD
5887 WHERE UD.unit_deferral_type = 'DEFERRAL'
5888 AND UD.unit_effectivity_id = p_unit_effectivity_id;
5889
5890 l_unit_deferral_id NUMBER;
5891
5892 CURSOR redundant_threshold_csr(p_unit_deferral_id IN NUMBER) IS
5893 SELECT unit_threshold_id FROM ahl_unit_thresholds
5894 WHERE unit_deferral_id = p_unit_deferral_id;
5895
5896 BEGIN
5897 OPEN unit_deferral_csr(p_unit_effectivity_id);
5898 FETCH unit_deferral_csr INTO l_unit_deferral_id;
5899 IF(unit_deferral_csr%NOTFOUND)THEN
5900 RETURN FALSE;
5901 ELSE
5902 FOR redundant_threshold_rec IN redundant_threshold_csr(l_unit_deferral_id) LOOP
5903 AHL_UNIT_THRESHOLDS_PKG.delete_row(redundant_threshold_rec.unit_threshold_id);
5904 END LOOP;
5905 AHL_UNIT_DEFERRALS_PKG.delete_row(l_unit_deferral_id);
5906 END IF;
5907 RETURN TRUE;
5908 END process_deferred_exceptions;
5909
5910
5911 FUNCTION Is_UMP_Deferral(p_unit_deferral_id IN NUMBER) RETURN BOOLEAN
5912 IS
5913 CURSOR wo_exists_csr(p_unit_deferral_id IN NUMBER) IS
5914 /* -- fix for bug# 6849943 (FP for Bug # 6815689).
5915 SELECT 'x'
5916 FROM ahl_workorder_tasks_v wo, ahl_unit_deferrals_b udf
5917 WHERE wo.unit_effectivity_id = udf.unit_effectivity_id
5918 AND udf.unit_deferral_id = p_unit_deferral_id;
5919 */
5920
5921 SELECT 'x'
5922 FROM ahl_workorders wo, ahl_unit_deferrals_b udf,
5923 ahl_visit_tasks_b vts, ahl_visits_b vst,
5924 (SELECT ORGANIZATION_ID
5925 FROM INV_ORGANIZATION_INFO_V
5926 WHERE NVL (operating_unit, mo_global.get_current_org_id()) = mo_global.get_current_org_id()) ORG
5927 WHERE WO.VISIT_TASK_ID=VTS.VISIT_TASK_ID
5928 AND VST.VISIT_ID=VTS.VISIT_ID
5929 AND VST.ORGANIZATION_ID=ORG.ORGANIZATION_ID
5930 AND vts.unit_effectivity_id = udf.unit_effectivity_id
5931 AND udf.unit_deferral_id = p_unit_deferral_id
5932 AND rownum < 2;
5933
5934 l_exists VARCHAR2(1);
5935 l_found BOOLEAN;
5936
5937 BEGIN
5938 OPEN wo_exists_csr(p_unit_deferral_id);
5939 FETCH wo_exists_csr INTO l_exists;
5940 IF (wo_exists_csr%FOUND) THEN
5941 l_found := FALSE;
5942 ELSE
5943 l_found := TRUE;
5944 END IF;
5945 CLOSE wo_exists_csr;
5946
5947 RETURN l_found;
5948
5949 END Is_UMP_Deferral;
5950
5951
5952 PROCEDURE get_mr_termination_details(
5953 p_unit_effectivity_id IN NUMBER,
5954 x_mr_applicable OUT NOCOPY VARCHAR2,
5955 x_active_end_date OUT NOCOPY DATE,
5956 x_new_mr_header_id OUT NOCOPY NUMBER,
5957 x_new_mr_applicable OUT NOCOPY VARCHAR2,
5958 x_return_status OUT NOCOPY VARCHAR2,
5959 x_msg_count OUT NOCOPY NUMBER,
5960 x_msg_data OUT NOCOPY VARCHAR2) IS
5961
5962 -- added active_end_date to fix bug# 12776603; sorao for backporting project
5963 CURSOR get_mr_details_csr(p_unit_effectivity_id IN NUMBER) IS
5964 SELECT MR.mr_header_id,MR.title,MR.effective_from,MR.effective_to,MR.version_number,UE.csi_item_instance_id,
5965 ii.active_end_date
5966 from ahl_mr_headers_b MR,ahl_unit_effectivities_b UE, csi_item_instances ii
5967 WHERE MR.mr_header_id = UE.mr_header_id
5968 AND UE.csi_item_instance_id = ii.instance_id
5969 AND UE.unit_effectivity_id = p_unit_effectivity_id;
5970
5971
5972 l_mr_header_id NUMBER;
5973 l_title ahl_mr_headers_b.title%TYPE;
5974 l_effective_from DATE;
5975 l_effective_to DATE;
5976 l_version_number ahl_mr_headers_b.version_number%TYPE;
5977 l_item_instance_id NUMBER;
5978 l_active_end_date DATE;
5979
5980 -- cursor fixed for bug 9143707
5981 CURSOR get_new_mr_details_csr(p_title IN VARCHAR2,
5982 p_mr_header_id IN NUMBER,
5983 p_version_number IN NUMBER) IS
5984 Select mr_header_id FROM ahl_mr_headers_b
5985 WHERE title = p_title
5986 AND version_number > p_version_number
5987 AND sysdate between effective_from and NVL(effective_to,SYSDATE+1)
5988 AND MR_status_code = 'COMPLETE'
5989 ORDER BY version_number desc;
5990
5991 l_new_mr_header_id NUMBER;
5992
5993 --l_mr_item_instance_tbl AHL_FMP_PVT.MR_ITEM_INSTANCE_TBL_TYPE;
5994 l_mr_item_instance_tbl AHL_FMP_PVT.applicable_mr_tbl_type;
5995
5996 BEGIN
5997 x_return_status := FND_API.G_RET_STS_SUCCESS;
5998 x_mr_applicable := FND_API.G_TRUE;
5999 x_new_mr_applicable := FND_API.G_TRUE;
6000
6001 OPEN get_mr_details_csr(p_unit_effectivity_id);
6002 FETCH get_mr_details_csr INTO l_mr_header_id,l_title, l_effective_from,
6003 l_effective_to,l_version_number,l_item_instance_id,l_active_end_date;
6004 CLOSE get_mr_details_csr;
6005
6006 -- fix for bug# 12776603 ; sorao for backporting project
6007 -- if instance expired, return 'not applicable'.
6008 IF (l_active_end_date IS NOT NULL AND l_active_end_date < sysdate) THEN
6009 x_mr_applicable := FND_API.G_FALSE;
6010 x_new_mr_applicable := FND_API.G_FALSE;
6011 RETURN;
6012 END IF;
6013
6014 x_active_end_date := l_effective_to;
6015 IF(trunc(NVL(x_active_end_date,SYSDATE+1)) <= trunc(SYSDATE))THEN
6016 x_mr_applicable := FND_API.G_FALSE;
6017 END IF;
6018
6019 IF(x_mr_applicable = FND_API.G_FALSE)THEN
6020 OPEN get_new_mr_details_csr(l_title,l_mr_header_id,l_version_number);
6021 FETCH get_new_mr_details_csr INTO l_new_mr_header_id;
6022 IF(get_new_mr_details_csr%NOTFOUND) THEN
6023 x_new_mr_applicable := FND_API.G_FALSE;
6024 END IF;
6025 CLOSE get_new_mr_details_csr;
6026
6027 IF(x_new_mr_applicable = FND_API.G_TRUE)THEN
6028 /* replacing with call get_applicable_mrs instead.
6029 AHL_FMP_PVT.GET_MR_AFFECTED_ITEMS (
6030 p_api_version => 1.0,
6031 p_init_msg_list => FND_API.G_FALSE,
6032 p_commit => FND_API.G_FALSE,
6033 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
6034 x_return_status => x_return_status,
6035 x_msg_count => x_msg_count,
6036 x_msg_data => x_msg_data,
6037 p_mr_header_id => l_new_mr_header_id,
6038 p_mr_effectivity_id => NULL,
6039 p_top_node_flag => 'N',
6040 p_unique_inst_flag => 'N',
6041 p_sort_flag => 'N',
6042 x_mr_item_inst_tbl => l_mr_item_instance_tbl
6043 );
6044 */
6045
6046 -- get applicable effectivities.
6047 AHL_FMP_PVT.Get_Applicable_MRs(p_api_version => 1.0,
6048 x_return_status => x_return_status,
6049 x_msg_count => x_msg_count,
6050 x_msg_data => x_msg_data,
6051 p_item_instance_id => l_item_instance_id,
6052 p_mr_header_id => l_new_mr_header_id,
6053 p_components_flag => 'N',
6054 x_applicable_mr_tbl => l_mr_item_instance_tbl) ;
6055
6056 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
6057 fnd_log.string
6058 (
6059 fnd_log.level_statement,
6060 'ahl.plsql.AHL_PRD_DF_PVT.get_mr_termination_details',
6061 'returned from AHL_FMP_PVT.Get_Applicable_MRs:status:' || x_return_status
6062 );
6063 END IF;
6064
6065 x_new_mr_applicable := FND_API.G_FALSE;
6066 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6067 RETURN;
6068 ELSE
6069 -- added count check to fix bug# 8917761
6070 IF (l_mr_item_instance_tbl.COUNT > 0) THEN
6071 FOR i IN l_mr_item_instance_tbl.FIRST..l_mr_item_instance_tbl.LAST LOOP
6072 IF(l_mr_item_instance_tbl(i).ITEM_INSTANCE_ID = l_item_instance_id)THEN
6073 x_new_mr_applicable := FND_API.G_TRUE;
6074 x_new_mr_header_id := l_new_mr_header_id;
6075 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
6076 fnd_log.string
6077 (
6078 fnd_log.level_statement,
6079 'ahl.plsql.AHL_PRD_DF_PVT.get_mr_termination_details',
6080 'Found new version of MR applicable:x_new_mr_header_id:' || x_new_mr_header_id
6081 );
6082 END IF;
6083 EXIT;
6084 END IF;
6085 END LOOP;
6086 END IF; -- l_mr_item_instance_tbl.COUNT
6087 END IF; -- x_return_status
6088 END IF; -- x_new_mr_applicable
6089 ELSE
6090 -- SB Enh. Check if current MR is applicable.
6091 -- get applicable effectivities.
6092 AHL_FMP_PVT.Get_Applicable_MRs(p_api_version => 1.0,
6093 x_return_status => x_return_status,
6094 x_msg_count => x_msg_count,
6095 x_msg_data => x_msg_data,
6096 p_item_instance_id => l_item_instance_id,
6097 p_mr_header_id => l_mr_header_id,
6098 p_components_flag => 'N',
6099 x_applicable_mr_tbl => l_mr_item_instance_tbl) ;
6100
6101 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
6102 fnd_log.string
6103 (
6104 fnd_log.level_statement,
6105 'ahl.plsql.AHL_PRD_DF_PVT.get_mr_termination_details', 'Current MR:returned from AHL_FMP_PVT.Get_Applicable_MRs:status:' || x_return_status
6106 );
6107 END IF;
6108 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6109 RETURN;
6110 END IF;
6111
6112 x_mr_applicable := FND_API.G_FALSE;
6113 x_new_mr_applicable := FND_API.G_FALSE;
6114 IF (l_mr_item_instance_tbl.COUNT > 0) THEN
6115 FOR i IN l_mr_item_instance_tbl.FIRST..l_mr_item_instance_tbl.LAST LOOP
6116 IF(l_mr_item_instance_tbl(i).ITEM_INSTANCE_ID = l_item_instance_id)THEN
6117 x_mr_applicable := FND_API.G_TRUE;
6118 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
6119 fnd_log.string
6120 (
6121 fnd_log.level_statement,
6122 'ahl.plsql.AHL_PRD_DF_PVT.get_mr_termination_details', 'Found MR applicable:l_mr_header_id:' || l_mr_header_id
6123 );
6124 END IF;
6125 EXIT;
6126 END IF;
6127 END LOOP;
6128 IF (x_mr_applicable = FND_API.G_TRUE) THEN
6129 x_new_mr_applicable := FND_API.G_TRUE;
6130 END IF;
6131 END IF; -- l_mr_item_instance_tbl.COUNT
6132
6133 END IF; -- x_mr_applicable
6134
6135 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
6136 fnd_log.string
6137 (
6138 fnd_log.level_procedure,
6139 'ahl.plsql.AHL_PRD_DF_PVT.get_mr_termination_details',
6140 'End of procedure'
6141 );
6142 END IF;
6143
6144 END get_mr_termination_details;
6145
6146 FUNCTION get_uom_remain(
6147 p_unit_effectivity_id IN NUMBER)
6148 RETURN VARCHAR2
6149 IS
6150 l_uom_remain VARCHAR2(240);
6151
6152 CURSOR ump_details_csr(p_unit_effectivity_id IN NUMBER)
6153 IS
6154 SELECT UMP.counter_name,
6155 UMP.status_code,
6156 UMP.originator_title,
6157 UMP.csi_item_instance_id,
6158 UMP.orig_ue_instance_id,
6159 UMP.counter_id,
6160 UMP.due_counter_value
6161 FROM ahl_unit_effectivities_v UMP
6162 WHERE UMP.unit_effectivity_id = p_unit_effectivity_id;
6163
6164 ump_rec ump_details_csr%rowtype;
6165
6166 CURSOR get_net_reading_csr (p_csi_item_instance_id IN NUMBER, p_ctr_template_name IN VARCHAR2)
6167 IS
6168 SELECT cc.UOM_CODE,
6169 (SELECT ccr.net_reading
6170 FROM csi_counter_readings ccr
6171 WHERE ccr.counter_value_id = cc.CTR_VAL_MAX_SEQ_NO
6172 AND NVL(ccr.disabled_flag,'N') = 'N'
6173 ) net_reading
6174 FROM CSI_COUNTER_ASSOCIATIONS CCA,
6175 CSI_COUNTERS_VL CC
6176 WHERE CCA.COUNTER_ID = CC.COUNTER_ID
6177 AND CCA.SOURCE_OBJECT_ID = p_csi_item_instance_id
6178 AND CCA.SOURCE_OBJECT_CODE = 'CP'
6179 AND CC.COUNTER_TEMPLATE_NAME = p_ctr_template_name;
6180
6181 CURSOR ump_ctr_name_csr (p_counter_id IN NUMBER)
6182 IS
6183 SELECT cc.counter_template_name counter_name,cc.UOM_CODE,
6184 (SELECT ccr.net_reading
6185 FROM csi_counter_readings ccr
6186 WHERE ccr.counter_value_id = cc.CTR_VAL_MAX_SEQ_NO
6187 AND NVL(ccr.disabled_flag,'N') = 'N'
6188 )
6189 FROM csi_counters_vl cc
6190 WHERE cc.counter_id = p_counter_id;
6191
6192 l_counter_name VARCHAR2(240);
6193 l_uom_code VARCHAR2(3);
6194 l_due_counter_value NUMBER;
6195 l_net_reading NUMBER;
6196 BEGIN
6197 OPEN ump_details_csr(p_unit_effectivity_id);
6198 FETCH ump_details_csr INTO ump_rec;
6199 CLOSE ump_details_csr;
6200
6201 IF (ump_rec.status_code IS NULL OR ump_rec.status_code = 'INIT-DUE') THEN
6202 IF (ump_rec.COUNTER_NAME IS NOT NULL) THEN
6203 -- uom_remain based on interval threshold.
6204 IF (ump_rec.ORIGINATOR_TITLE IS NULL) THEN
6205 OPEN get_net_reading_csr ( ump_rec.CSI_ITEM_INSTANCE_ID, ump_rec.COUNTER_NAME);
6206 ELSE
6207 OPEN get_net_reading_csr ( ump_rec.orig_ue_instance_id, ump_rec.COUNTER_NAME);
6208 END IF;
6209 FETCH get_net_reading_csr INTO l_uom_code,l_net_reading;
6210 IF (get_net_reading_csr%NOTFOUND) OR (l_net_reading IS NULL) THEN
6211 l_net_reading := 0;
6212 END IF;
6213 CLOSE get_net_reading_csr;
6214 l_uom_remain := ump_rec.COUNTER_NAME || '/' || (ump_rec.due_counter_value - l_net_reading) || ' ' || l_uom_code;
6215 -- UOM remain based on init due threshold counter_id.
6216 ELSIF (ump_rec.counter_id IS NOT NULL) THEN
6217 OPEN ump_ctr_name_csr(ump_rec.counter_id);
6218 FETCH ump_ctr_name_csr INTO l_COUNTER_NAME,l_uom_code, l_net_reading;
6219 IF (ump_ctr_name_csr%NOTFOUND) THEN
6220 l_net_reading := 0;
6221 ELSIF (l_net_reading IS NULL) THEN
6222 l_net_reading := 0;
6223 END IF;
6224 CLOSE ump_ctr_name_csr;
6225 l_uom_remain := l_COUNTER_NAME || '/' || (ump_rec.due_counter_value - l_net_reading) || ' ' || l_uom_code;
6226 END IF; -- x_results_mr_instance_tbl(l_counter).COUNTER_NAME
6227 ELSE
6228 l_uom_remain := NULL;
6229 END IF;
6230 RETURN l_uom_remain;
6231 END get_uom_remain;
6232
6233 -- JKJain, NR Analysis and Forecasting
6234 FUNCTION get_fleet_from_effectivity(p_unit_effectivity_id IN NUMBER) RETURN NUMBER IS
6235
6236 Cursor get_fleet_header_id(c_unit_effectivity_id NUMBER) IS
6237 SELECT eff.fleet_header_id from ahl_mr_effectivities eff, ahl_unit_effectivities_b ue
6238 WHERE eff.mr_effectivity_id = ue.mr_effectivity_id
6239 AND ue.unit_effectivity_id = c_unit_effectivity_id;
6240
6241 l_fleet_header_id NUMBER := null;
6242 BEGIN
6243
6244 OPEN get_fleet_header_id(p_unit_effectivity_id);
6245 FETCH get_fleet_header_id INTO l_fleet_header_id;
6246 CLOSE get_fleet_header_id;
6247
6248 RETURN l_fleet_header_id;
6249
6250 END get_fleet_from_effectivity;
6251
6252 END AHL_PRD_DF_PVT; -- Package body