1 PACKAGE BODY AHL_VWP_VISITS_PVT AS
2 /* $Header: AHLVVSTB.pls 120.38.12020000.3 2013/03/20 09:31:49 prakkum ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'AHL_VWP_VISITS_PVT';
5 G_APP_NAME CONSTANT VARCHAR2(3) := 'AHL';
6 G_DEBUG VARCHAR2(1) := AHL_DEBUG_PUB.is_log_enabled;
7
8 ------------------------------------
9 -- Common constants and variables --
10 ------------------------------------
11 l_log_current_level NUMBER := fnd_log.g_current_runtime_level;
12 l_log_statement NUMBER := fnd_log.level_statement;
13 l_log_procedure NUMBER := fnd_log.level_procedure;
14 l_log_error NUMBER := fnd_log.level_error;
15 l_log_unexpected NUMBER := fnd_log.level_unexpected;
16
17 -- Added by jaramana on 04-NOV-2009 for bug 9087120
18 -- Job Statuses
19 G_JOB_STATUS_UNRELEASED VARCHAR2(1) := '1'; --Unreleased
20
21 -- SKPATHAK :: Bug 9115894 :: 23-NOV-2009
22 G_VALIDATION_EXCEPTION EXCEPTION;
23 G_VALIDATION_ERROR_STATUS VARCHAR2(1) := 'V';
24 TYPE G_MESSAGE_STACK_TBL IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
25
26
27 -----------------------------------------------------------------
28
29 ---------------------------------------------------------------------
30 -- Define Record Types for record structures needed by the APIs --
31 ---------------------------------------------------------------------
32 -- NO RECORD TYPES *************
33
34 --------------------------------------------------------------------
35 -- Define Table Type for Records Structures --
36 --------------------------------------------------------------------
37 -- NO TABLE TYPES **************
38
39 --------------------------------------------------------------------
40 -- START: Defining local functions and procedures SIGNATURES --
41 --------------------------------------------------------------------
42 -- To find out the Visit_Id for the AHL_Visits_B and TL tables
43 FUNCTION Get_Visit_Id
44 RETURN NUMBER;
45
46 -- To find out the Visit_Number for the AHL_Visits_B table
47 FUNCTION Get_Visit_Number
48 RETURN NUMBER;
49
50 -- To find out the Visit_Task_Number for the AHL_Visit_Tasks_B table
51 FUNCTION Get_Visit_Task_Number (p_visit_id IN NUMBER)
52 RETURN NUMBER;
53
54 -- PRAKKUM :: VWPE: ER:12424063 :: 01-FEB-2011
55 -- Changed procedure to function to make a call from sql and increased scope to public
56 /*
57 -- To find out Due_by_Date for the visit update screen.
58 PROCEDURE Get_Due_by_Date(
59 p_visit_id IN NUMBER,
60 x_Due_by_Date OUT NOCOPY DATE
61 );*/
62
63 -- To assign Null to missing attributes of visit while creation/updation.
64 PROCEDURE Default_Missing_Attribs(
65 p_x_visit_rec IN OUT NOCOPY Visit_Rec_Type
66 );
67
68 -- To validate visit for creation/updation of visit
69 PROCEDURE Validate_Visit (
70 p_api_version IN NUMBER,
71 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
72 p_commit IN VARCHAR2 := Fnd_Api.g_false,
73 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
74 p_Visit_rec IN visit_rec_type,
75 x_return_status OUT NOCOPY VARCHAR2,
76 x_msg_count OUT NOCOPY NUMBER,
77 x_msg_data OUT NOCOPY VARCHAR2
78 );
79
80 -- To Check all Visit's Items
81 PROCEDURE Check_Visit_Items (
82 p_Visit_rec IN visit_rec_type,
83 p_validation_mode IN VARCHAR2 := Jtf_Plsql_Api.g_create,
84 x_return_status OUT NOCOPY VARCHAR2
85 );
86
87 -- To Check all Visit's Required Items
88 PROCEDURE Check_Visit_Req_Items (
89 p_Visit_rec IN Visit_Rec_Type,
90 x_return_status OUT NOCOPY VARCHAR2
91 );
92
93 -- To Check all Visit's Unique items
94 PROCEDURE Check_Visit_UK_Items (
95 p_Visit_rec IN Visit_Rec_Type,
96 p_validation_mode IN VARCHAR2 := Jtf_Plsql_Api.g_create,
97 x_return_status OUT NOCOPY VARCHAR2
98 );
99
100 -- SKPATHAK :: AVF ER: 13416865 :: 25-NOV-2011
101 -- Comment out the below two signatures as these have been moved to
102 -- To Create a Maintenance Visit
103 /*PROCEDURE Create_Visit (
104 p_api_version IN NUMBER,
105 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
106 p_commit IN VARCHAR2 := Fnd_Api.g_false,
107 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
108 p_module_type IN VARCHAR2 := 'JSP',
109 p_x_visit_rec IN OUT NOCOPY visit_rec_type,
110 x_return_status OUT NOCOPY VARCHAR2,
111 x_msg_count OUT NOCOPY NUMBER,
112 x_msg_data OUT NOCOPY VARCHAR2
113 );
114
115 -- To Update a Maintenance Visit
116 PROCEDURE Update_Visit (
117 p_api_version IN NUMBER,
118 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
119 p_commit IN VARCHAR2 := Fnd_Api.g_false,
120 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
121 p_module_type IN VARCHAR2 := 'JSP',
122 p_x_Visit_Rec IN OUT NOCOPY visit_rec_type,
123 x_return_status OUT NOCOPY VARCHAR2,
124 x_msg_count OUT NOCOPY NUMBER,
125 x_msg_data OUT NOCOPY VARCHAR2
126 );*/
127
128 -- To Delete a Maintenance Visit
129 -- TCHIMIRA :: AVF ER: 13416865 :: 14-DEC-2011 :: Comment out the below signature as it is moved to spec
130 /*PROCEDURE Delete_Visit (
131 p_api_version IN NUMBER,
132 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
133 p_commit IN VARCHAR2 := Fnd_Api.g_false,
134 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
135 p_visit_id IN NUMBER,
136 x_return_status OUT NOCOPY VARCHAR2,
137 x_msg_count OUT NOCOPY NUMBER,
138 x_msg_data OUT NOCOPY VARCHAR2
139 ); */
140
141
142 -- Transit Check Visit Change
143 -- yazhou start
144
145 PROCEDURE Synchronize_Visit (
146 p_api_version IN NUMBER,
147 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
148 p_commit IN VARCHAR2 := Fnd_Api.g_false,
149 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
150 p_module_type IN VARCHAR2 := NULL,
151 p_x_Visit_Rec IN OUT NOCOPY visit_rec_type,
152 x_return_status OUT NOCOPY VARCHAR2,
153 x_msg_count OUT NOCOPY NUMBER,
154 x_msg_data OUT NOCOPY VARCHAR2
155 );
156
157 -- yazhou end
158
159 -- AnRaj added for ACL changes in VWP
160 -- Bug number 4297066
161 -------------------------------------------------------------------
162 -- Procedure name : check_unit_quarantined
163 -- Type : Private
164 -- Function : To check whether the Unit is quarantined
165 -- Parameters : p_visit_id
166 -- Parameters : item_instance_id
167 ----------------------------------------------------------------------
168 PROCEDURE check_unit_quarantined(
169 p_visit_id IN NUMBER,
170 item_instance_id IN NUMBER
171 );
172
173 -- SKPATHAK :: Bug 9115894 :: 23-NOV-2009 :: START
174 -- Added this procedure to get the messages from message stack
175 PROCEDURE Get_Message_Stack (
176 x_message_stack_tbl OUT NOCOPY G_MESSAGE_STACK_TBL
177 );
178
179 -- To put the messages back to message stack
180 PROCEDURE Set_Message_Stack (
181 p_message_stack_tbl IN G_MESSAGE_STACK_TBL
182 );
183 -- SKPATHAK :: Bug 9115894 :: 23-NOV-2009 :: END
184
185 -- New Procedure added by surrkuma on 15-JUL-2010 for bug 9901811
186 -- Unschedule ATP Materials when a visit undergoes an org Change
187 PROCEDURE Handle_Visit_Org_Change(p_visit_id IN NUMBER);
188
189 --------------------------------------------------------------------
190 -- END: Defining local functions and procedures SIGNATURES --
191 --------------------------------------------------------------------
192
193 -- ****************************************************************
194
195 --------------------------------------------------------------------
196 -- START: Defining local functions and procedures BODY --
197 --------------------------------------------------------------------
198
199 -------------------------------------------------------------------
200 -- FUNCTION
201 -- Get_Due_by_Date
202 -- Type : Public
203 -- PURPOSE
204 -- To find out least due by date among all tasks of a visit
205 --------------------------------------------------------------------
206 -- PRAKKUM :: VWPE: ER:12424063 :: 01-FEB-2011
207 -- Changed procedure to function to make a call from sql
208 /*
209 PROCEDURE Get_Due_by_Date(
210 p_visit_id IN NUMBER,
211 x_due_by_date OUT NOCOPY DATE)
212 */
213 FUNCTION Get_Due_by_Date(
214 p_visit_id IN NUMBER
215 ) RETURN DATE
216 IS
217 -- Define local variables
218 l_count1 NUMBER;
219 l_count2 NUMBER;
220 l_date DATE;
221 l_due_by_date DATE;
222
223 -- Define local Cursors
224 -- To find whether a visit exists
225 CURSOR c_visit (x_id IN NUMBER) IS
226 SELECT COUNT(*)
227 FROM Ahl_Visit_Tasks_B
228 WHERE VISIT_ID = x_id
229 AND NVL(STATUS_CODE,'X') <> 'DELETED';
230
231 -- To find the total number of tasks for a visit
232 CURSOR c_visit_task (x_id IN NUMBER) IS
233 SELECT COUNT(*)
234 FROM Ahl_Visit_Tasks_B
235 WHERE VISIT_ID = x_id
236 AND UNIT_EFFECTIVITY_ID IS NOT NULL
237 AND NVL(STATUS_CODE,'X') <> 'DELETED';
238
239 -- To find due date for a visit related with tasks
240 CURSOR c_due_date (x_id IN NUMBER) IS
241 SELECT MIN(T1.due_date)
242 FROM ahl_unit_effectivities_vl T1, ahl_visit_tasks_b T2
243 WHERE T1.unit_effectivity_id = T2.unit_effectivity_id
244 AND T1.due_date IS NOT NULL AND T2.visit_id = x_id;
245
246 L_API_NAME CONSTANT VARCHAR2(30) := 'Get_Due_by_Date';
247 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
248 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
249
250 BEGIN
251 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
252 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure');
253 END IF;
254
255 OPEN c_visit(p_visit_id);
256 FETCH c_visit INTO l_count1;
257 IF c_visit%FOUND THEN --Tasks found for visit
258 CLOSE c_visit;
259 OPEN c_visit_task(p_visit_id);
260 FETCH c_visit_task INTO l_count2;
261 IF c_visit_task%FOUND THEN --Tasks found for visit checking for unit_effectivity_id
262 CLOSE c_visit_task;
263 OPEN c_due_date(p_visit_id);
264 FETCH c_due_date INTO l_due_by_date;
265 IF c_due_date%FOUND THEN --Tasks found for visit
266 CLOSE c_due_date;
267 END IF;
268 ELSE
269 CLOSE c_visit_task;
270 END IF;
271 ELSE
272 CLOSE c_visit;
273 END IF;
274
275 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
276 fnd_log.string(fnd_log.level_procedure,L_DEBUG,'l_due_by_date - '||l_due_by_date);
277 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
278 END IF;
279
280 RETURN l_due_by_date;
281 END Get_Due_by_Date;
282
283 --------------------------------------------------------------------
284 -- PROCEDURE
285 -- Default_Missing_Attribs
286 --
287 -- PURPOSE
288 -- For all optional fields check if its g_miss_num/g_miss_char/
289 -- g_miss_date then Null else the value
290
291 --------------------------------------------------------------------
292 PROCEDURE Default_Missing_Attribs
293 ( p_x_visit_rec IN OUT NOCOPY Visit_Rec_Type)
294 AS
295 BEGIN
296 -- Post 11.5.10 Enhancements
297 -- Removing defaulting of Visit Name since it is a mandatory field
298 /*-- VISIT NAME
299 IF p_x_visit_rec.visit_name = Fnd_Api.G_MISS_char THEN
300 p_x_visit_rec.visit_name := NULL;
301 ELSE
302 p_x_visit_rec.visit_name := p_x_visit_rec.visit_name;
303 END IF;
304 */
305
306 -- ORGANIZATION ID
307 IF p_x_visit_rec.organization_id = Fnd_Api.G_MISS_NUM THEN
308 p_x_visit_rec.organization_id := NULL;
309 ELSE
310 p_x_visit_rec.organization_id := p_x_visit_rec.organization_id;
311 END IF;
312
313 -- DEPARTMENT ID
314 IF p_x_visit_rec.department_id = Fnd_Api.G_MISS_NUM THEN
315 p_x_visit_rec.department_id := NULL;
316 ELSE
317 p_x_visit_rec.department_id := p_x_visit_rec.department_id;
318 END IF;
319
320 -- START DATE
321 IF p_x_visit_rec.start_date = Fnd_Api.G_MISS_DATE THEN
322 p_x_visit_rec.start_date := NULL;
323 ELSE
324 p_x_visit_rec.start_date := p_x_visit_rec.start_date;
325 END IF;
326
327 -- PLAN END DATE
328 IF p_x_visit_rec.plan_end_date = Fnd_Api.G_MISS_DATE THEN
329 p_x_visit_rec.plan_end_date := NULL;
330 ELSE
331 p_x_visit_rec.plan_end_date := p_x_visit_rec.plan_end_date;
332 END IF;
333
334 -- SIMULATION_PLAN_ID
335 IF p_x_visit_rec.SIMULATION_PLAN_ID = Fnd_Api.G_MISS_NUM THEN
336 p_x_visit_rec.SIMULATION_PLAN_ID := NULL;
337 ELSE
338 p_x_visit_rec.SIMULATION_PLAN_ID := p_x_visit_rec.SIMULATION_PLAN_ID;
339 END IF;
340
341 -- ITEM_INSTANCE_ID
342 IF p_x_visit_rec.ITEM_INSTANCE_ID = Fnd_Api.G_MISS_NUM THEN
343 p_x_visit_rec.ITEM_INSTANCE_ID := NULL;
344 ELSE
345 p_x_visit_rec.ITEM_INSTANCE_ID := p_x_visit_rec.ITEM_INSTANCE_ID;
346 END IF;
347
348 -- ASSO_PRIMARY_VISIT_ID
349 IF p_x_visit_rec.ASSO_PRIMARY_VISIT_ID = Fnd_Api.G_MISS_NUM THEN
350 p_x_visit_rec.ASSO_PRIMARY_VISIT_ID := NULL;
351 ELSE
352 p_x_visit_rec.ASSO_PRIMARY_VISIT_ID := p_x_visit_rec.ASSO_PRIMARY_VISIT_ID;
353 END IF;
354
355 -- SIMULATION_DELETE_FLAG
356 IF p_x_visit_rec.SIMULATION_DELETE_FLAG = Fnd_Api.G_MISS_CHAR THEN
357 p_x_visit_rec.SIMULATION_DELETE_FLAG := NULL;
358 ELSE
359 p_x_visit_rec.SIMULATION_DELETE_FLAG := p_x_visit_rec.SIMULATION_DELETE_FLAG;
360 END IF;
361
362 -- OUT_OF_SYNC_FLAG
363 IF p_x_visit_rec.OUT_OF_SYNC_FLAG = Fnd_Api.G_MISS_CHAR THEN
364 p_x_visit_rec.OUT_OF_SYNC_FLAG := NULL;
365 ELSE
366 p_x_visit_rec.OUT_OF_SYNC_FLAG := p_x_visit_rec.OUT_OF_SYNC_FLAG;
367 END IF;
368
369 -- PROJECT_ID
370 IF p_x_visit_rec.PROJECT_ID = Fnd_Api.G_MISS_NUM THEN
371 p_x_visit_rec.PROJECT_ID := NULL;
372 ELSE
373 p_x_visit_rec.PROJECT_ID := p_x_visit_rec.PROJECT_ID;
374 END IF;
375
376 -- space_category_code
377 IF p_x_visit_rec.space_category_code = Fnd_Api.G_MISS_CHAR THEN
378 p_x_visit_rec.space_category_code := NULL;
379 ELSE
380 p_x_visit_rec.space_category_code := p_x_visit_rec.space_category_code;
381 END IF;
382
383 -- description
384 IF p_x_visit_rec.description = Fnd_Api.G_MISS_CHAR THEN
385 p_x_visit_rec.description := NULL;
386 ELSE
387 p_x_visit_rec.description := p_x_visit_rec.description;
388 END IF;
389
390 -- Post 11.5.10 Enhancements
391 -- Adding priority and project template
392 IF p_x_visit_rec.priority_code = Fnd_Api.G_MISS_CHAR THEN
393 p_x_visit_rec.priority_code := NULL;
394 ELSE
395 p_x_visit_rec.priority_code := p_x_visit_rec.priority_code;
396 END IF;
397
398 IF p_x_visit_rec.proj_template_id = Fnd_Api.G_MISS_NUM THEN
399 p_x_visit_rec.proj_template_id := NULL;
400 ELSE
401 p_x_visit_rec.proj_template_id := p_x_visit_rec.proj_template_id;
402 END IF;
403
404 -- Post 11.5.10 Enhancements
405 -- Adding item id and visit type code.
406 -- since these fields are not mandatory in Post 11.5.10
407 -- serial number check already exists (item_instance_id)
408 -- ITEM ID
409 IF p_x_visit_rec.inventory_item_id = Fnd_Api.G_MISS_NUM THEN
410 p_x_visit_rec.inventory_item_id := NULL;
411 ELSE
412 p_x_visit_rec.inventory_item_id := p_x_visit_rec.inventory_item_id;
413 END IF;
414
415 -- VISIT TYPE CODE
416 IF p_x_visit_rec.visit_type_code = Fnd_Api.G_MISS_CHAR THEN
417 p_x_visit_rec.visit_type_code := NULL;
418 ELSE
419 p_x_visit_rec.visit_type_code := p_x_visit_rec.visit_type_code;
420 END IF;
421
422 -- MANESING::Component Maintenance Planning Project, 02-Nov-2011, default sub-inventories and locators
423 -- Inventory Locator id
424 IF (p_x_visit_rec.inv_locator_id = FND_API.G_MISS_NUM) THEN
425 p_x_visit_rec.inv_locator_id := NULL;
426 END IF;
427
428 -- Planning Locator id
429 IF (p_x_visit_rec.comp_planning_loc_id = FND_API.G_MISS_NUM) THEN
430 p_x_visit_rec.comp_planning_loc_id := NULL;
431 END IF;
432
433 -- In-Repair Locator id
434 IF (p_x_visit_rec.comp_inrepair_loc_id = FND_API.G_MISS_NUM) THEN
435 p_x_visit_rec.comp_inrepair_loc_id := NULL;
436 END IF;
437
438 IF p_x_visit_rec.attribute_category = Fnd_Api.G_MISS_CHAR THEN
439 p_x_visit_rec.attribute_category := NULL;
440 ELSE
441 p_x_visit_rec.attribute_category := p_x_visit_rec.attribute_category;
442 END IF;
443
444 IF p_x_visit_rec.attribute1 = Fnd_Api.G_MISS_CHAR THEN
445 p_x_visit_rec.attribute1 := NULL;
446 ELSE
447 p_x_visit_rec.attribute1 := p_x_visit_rec.attribute1;
448 END IF;
449
450 IF p_x_visit_rec.attribute2 = Fnd_Api.G_MISS_CHAR THEN
451 p_x_visit_rec.attribute2 := NULL;
452 ELSE
453 p_x_visit_rec.attribute2 := p_x_visit_rec.attribute2;
454 END IF;
455
456 IF p_x_visit_rec.attribute3 = Fnd_Api.G_MISS_CHAR THEN
457 p_x_visit_rec.attribute3 := NULL;
458 ELSE
459 p_x_visit_rec.attribute3 := p_x_visit_rec.attribute3;
460 END IF;
461
462 IF p_x_visit_rec.attribute4 = Fnd_Api.G_MISS_CHAR THEN
463 p_x_visit_rec.attribute4 := NULL;
464 ELSE
465 p_x_visit_rec.attribute4 := p_x_visit_rec.attribute4;
466 END IF;
467
468 IF p_x_visit_rec.attribute5 = Fnd_Api.G_MISS_CHAR THEN
469 p_x_visit_rec.attribute5 := NULL;
470 ELSE
471 p_x_visit_rec.attribute5 := p_x_visit_rec.attribute5;
472 END IF;
473
474 IF p_x_visit_rec.attribute6 = Fnd_Api.G_MISS_CHAR THEN
475 p_x_visit_rec.attribute6 := NULL;
476 ELSE
477 p_x_visit_rec.attribute6 := p_x_visit_rec.attribute6;
478 END IF;
479
480 IF p_x_visit_rec.attribute7 = Fnd_Api.G_MISS_CHAR THEN
481 p_x_visit_rec.attribute7 := NULL;
482 ELSE
483 p_x_visit_rec.attribute7 := p_x_visit_rec.attribute7;
484 END IF;
485
486 IF p_x_visit_rec.attribute8 = Fnd_Api.G_MISS_CHAR THEN
487 p_x_visit_rec.attribute8 := NULL;
488 ELSE
489 p_x_visit_rec.attribute8 := p_x_visit_rec.attribute8;
490 END IF;
491
492 IF p_x_visit_rec.attribute9 = Fnd_Api.G_MISS_CHAR THEN
493 p_x_visit_rec.attribute9 := NULL;
494 ELSE
495 p_x_visit_rec.attribute9 := p_x_visit_rec.attribute9;
496 END IF;
497
498 IF p_x_visit_rec.attribute10 = Fnd_Api.G_MISS_CHAR THEN
499 p_x_visit_rec.attribute10 := NULL;
500 ELSE
501 p_x_visit_rec.attribute10 := p_x_visit_rec.attribute10;
502 END IF;
503
504 IF p_x_visit_rec.attribute11 = Fnd_Api.G_MISS_CHAR THEN
505 p_x_visit_rec.attribute11 := NULL;
506 ELSE
507 p_x_visit_rec.attribute11 := p_x_visit_rec.attribute11;
508 END IF;
509
510 IF p_x_visit_rec.attribute12 = Fnd_Api.G_MISS_CHAR THEN
511 p_x_visit_rec.attribute12 := NULL;
512 ELSE
513 p_x_visit_rec.attribute12 := p_x_visit_rec.attribute12;
514 END IF;
515
516 IF p_x_visit_rec.attribute13 = Fnd_Api.G_MISS_CHAR THEN
517 p_x_visit_rec.attribute13 := NULL;
518 ELSE
519 p_x_visit_rec.attribute13 := p_x_visit_rec.attribute13;
520 END IF;
521
522 IF p_x_visit_rec.attribute14 = Fnd_Api.G_MISS_CHAR THEN
523 p_x_visit_rec.attribute14 := NULL;
524 ELSE
525 p_x_visit_rec.attribute14 := p_x_visit_rec.attribute14;
526 END IF;
527
528 IF p_x_visit_rec.attribute15 = Fnd_Api.G_MISS_CHAR THEN
529 p_x_visit_rec.attribute15 := NULL;
530 ELSE
531 p_x_visit_rec.attribute15 := p_x_visit_rec.attribute15;
532 END IF;
533
534 END Default_Missing_Attribs;
535
536 --------------------------------------------------------------------
537 -- FUNCTION
538 -- Get_Visit_Id
539 --
540 --------------------------------------------------------------------
541 FUNCTION Get_Visit_Id RETURN NUMBER IS
542
543 -- To find the next id value from visit sequence
544 CURSOR c_seq IS
545 SELECT Ahl_Visits_B_S.NEXTVAL
546 FROM dual;
547
548 -- To find whether id already exists
549 CURSOR c_id_exists (x_id IN NUMBER) IS
550 SELECT 1 FROM Ahl_Visits_VL
551 WHERE Visit_id = x_id;
552
553 L_API_NAME CONSTANT VARCHAR2(30) := 'Get_Visit_Id';
554 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
555 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
556
557 x_Visit_Id NUMBER;
558 l_dummy NUMBER;
559 BEGIN
560 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
561 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of function');
562 END IF;
563
564 LOOP
565 -- If the ID is not passed into the API, then
566 -- grab a value from the sequence.
567 OPEN c_seq;
568 FETCH c_seq INTO x_Visit_Id;
569 CLOSE c_seq;
570 -- Check to be sure that the sequence does not exist.
571 OPEN c_id_exists (x_Visit_Id);
572 FETCH c_id_exists INTO l_dummy;
573 CLOSE c_id_exists;
574 -- If the value for the ID already exists, then
575 -- l_dummy would be populated with '1', otherwise, it receives NULL.
576 EXIT WHEN l_dummy = null ;
577 END LOOP;
578
579 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
580 fnd_log.string(fnd_log.level_procedure,L_DEBUG,'New visit id : ' || x_Visit_Id);
581 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of function');
582 END IF;
583
584 RETURN x_Visit_Id;
585
586 END Get_Visit_Id;
587
588 --------------------------------------------------------------------
589 -- FUNCTION
590 -- Get_Visit_Number
591 --
592 --------------------------------------------------------------------
593 FUNCTION Get_Visit_Number RETURN NUMBER IS
594 x_visit_number NUMBER;
595
596 -- To find maximum visit number among all visits
597 CURSOR c_visit_number IS
598 SELECT MAX(visit_number)
599 FROM Ahl_Visits_B;
600
601 L_API_NAME CONSTANT VARCHAR2(30) := 'Get_Visit_Number';
602 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
603 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
604 BEGIN
605
606 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
607 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of function');
608 END IF;
609
610 -- Check for Visit Number
611 OPEN c_visit_number;
612 FETCH c_visit_number INTO x_visit_number;
613 CLOSE c_visit_number;
614
615 IF x_visit_number IS NOT NULL THEN
616 x_visit_number := x_visit_number + 1;
617 ELSE
618 x_visit_number := 1;
619 END IF;
620
621 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
622 fnd_log.string(fnd_log.level_procedure,L_DEBUG,'New visit number : ' || x_visit_number);
623 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of function');
624 END IF;
625
626 RETURN x_visit_number;
627
628 END Get_Visit_Number;
629 --------------------------------------------------------------------
630 -- FUNCTION
631 -- Get_Visit_Task_Number
632 --
633 --------------------------------------------------------------------
634 FUNCTION Get_Visit_Task_Number(p_visit_id IN NUMBER)
635 RETURN NUMBER IS
636 x_Visit_Task_Number NUMBER ;
637
638 -- To find maximum visit task nubmer among all tasks for a particular visit
639 CURSOR c_task_number IS
640 SELECT MAX(visit_task_number)
641 FROM Ahl_Visit_Tasks_B
642 WHERE Visit_Id = p_visit_id;
643
644 L_API_NAME CONSTANT VARCHAR2(30) := 'Get_Visit_Task_Number';
645 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
646 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
647
648 BEGIN
649 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
650 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of function');
651 END IF;
652
653 -- Check for Visit Number
654 OPEN c_Task_Number;
655 FETCH c_Task_Number INTO x_Visit_Task_Number;
656 CLOSE c_Task_Number;
657
658 IF x_Visit_Task_Number IS NOT NULL THEN
659 x_Visit_Task_Number := x_Visit_Task_Number + 1;
660 ELSE
661 x_Visit_Task_Number := 1;
662 END IF;
663
664 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
665 fnd_log.string(fnd_log.level_procedure,L_DEBUG,'Visit Task Number - ' || x_Visit_Task_Number);
666 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of function');
667 END IF;
668
669 RETURN x_Visit_Task_Number;
670 END Get_Visit_Task_Number;
671 --------------------------------------------------------------------
672 -- END: Defining local functions and procedures BODY --
673 --------------------------------------------------------------------
674
675 ----------------------------------------------------------------------
676 -- START: Defining procedures BODY, which are called from UI screen --
677 ----------------------------------------------------------------------
678
679 --------------------------------------------------------------------
680 -- PROCEDURE
681 -- Process_Visit
682 --
683 -- PURPOSE
684 -- Process Visit Records from front end screen intermediate step
685 -- between API's and frontend.
686 --------------------------------------------------------------------
687 PROCEDURE Process_Visit (
688 p_api_version IN NUMBER,
689 p_init_msg_list IN VARCHAR2 := FND_API.g_false,
690 p_commit IN VARCHAR2 := FND_API.g_false,
691 p_validation_level IN NUMBER := FND_API.g_valid_level_full,
692 p_module_type IN VARCHAR2 := 'JSP',
693 p_x_Visit_tbl IN OUT NOCOPY Visit_Tbl_Type,
694 x_return_status OUT NOCOPY VARCHAR2,
695 x_msg_count OUT NOCOPY NUMBER,
696 x_msg_data OUT NOCOPY VARCHAR2
697 )
698 IS
699 -- Define local variables
700 l_api_name CONSTANT VARCHAR2(30) := 'Process_Visit';
701 l_api_version CONSTANT NUMBER := 1.0;
702 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
703 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
704
705 l_msg_count NUMBER;
706 l_visit_id NUMBER;
707 p_visit_id NUMBER;
708
709 l_return_status VARCHAR2(1);
710 l_msg_data VARCHAR2(2000);
711 -- Transit Visit Change
712 -- yazhou start
713 -- SKPATHAK :: Bug 9115894 :: 23-NOV-2009
714 l_status_flag VARCHAR2(1) := 'S';
715 l_init_msg_list VARCHAR2(1) := FND_API.g_false;
716 l_message_stack_tbl G_MESSAGE_STACK_TBL;
717
718 l_visit_status VARCHAR2(30);
719 l_ue_ids VARCHAR2(4000);
720 l_item_key VARCHAR2(100);
721
722 -- To find out visit status
723 CURSOR c_visit_status (x_visit_id IN NUMBER) IS
724 SELECT STATUS_CODE FROM AHL_VISITS_B
725 WHERE VISIT_ID = x_visit_id;
726
727 -- Cursor to get planned UEs for the given visit
728 CURSOR get_visit_planned_ues (c_visit_id NUMBER) IS
729 SELECT distinct unit_effectivity_id
730 FROM AHL_VISIT_TASKS_B
731 WHERE visit_id = c_visit_id
732 AND task_type_code = 'PLANNED';
733
734 -- yazhou end
735 --
736 BEGIN
737 -- Standard Start of API savepoint
738 SAVEPOINT Process_Visit;
739
740 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
741 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure');
742 END IF;
743
744 -- Initialize API return status to success
745 -- Initialize message list if p_init_msg_list is set to TRUE.
746 IF FND_API.to_boolean(p_init_msg_list) THEN
747 FND_MSG_PUB.initialize;
748 END IF;
749
750 x_return_status := FND_API.G_RET_STS_SUCCESS;
751
752 -- Standard call to check for call compatibility.
753 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
754 p_api_version,
755 l_api_name,G_PKG_NAME) THEN
756 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
757 END IF;
758
759 --------------------Start of API Body-----------------------------------
760 IF p_x_Visit_tbl.COUNT > 0 THEN
761 FOR i IN p_x_Visit_tbl.first..p_x_Visit_tbl.LAST
762 LOOP
763 -- For Create
764 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
765 fnd_log.string(fnd_log.level_statement,L_DEBUG,'p_x_Visit_tbl(i).operation_flag : '||p_x_Visit_tbl(i).operation_flag);
766 END IF;
767
768 IF p_x_Visit_tbl(i).operation_flag = 'I' or p_x_Visit_tbl(i).operation_flag = 'i' THEN
769
770 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
771 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Create_Visit');
772 END IF;
773
774 Create_Visit
775 (
776 p_api_version => l_api_version,
777 -- Changed by jaramana on 18-NOV-2009 for bug 9115894
778 p_init_msg_list => FND_API.g_false,
779 p_commit => Fnd_Api.g_false,
780 p_validation_level => p_validation_level,
781 p_module_type => p_module_type,
782 p_x_visit_rec => p_x_Visit_tbl(i),
783 x_return_status => l_return_status,
784 x_msg_count => l_msg_count,
785 x_msg_data => l_msg_data
786 );
787
788 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
789 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Create_Visit - l_return_status : '||l_return_status);
790 END IF;
791
792 --For Update
793 ELSIF p_x_Visit_tbl(i).operation_flag = 'U' or p_x_Visit_tbl(i).operation_flag = 'u' THEN
794
795 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
796 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Update_Visit');
797 END IF;
798
799 Update_Visit
800 (
801 p_api_version => l_api_version,
802 -- Changed by jaramana on 18-NOV-2009 for bug 9115894
803 p_init_msg_list => FND_API.g_false,
804 p_commit => Fnd_Api.g_false,
805 p_validation_level => p_validation_level,
806 p_module_type => p_module_type,
807 p_x_Visit_rec => p_x_Visit_tbl(i),
808 x_return_status => l_return_status,
809 x_msg_count => l_msg_count,
810 x_msg_data => l_msg_data
811 );
812
813 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
814 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Update_Visit - l_return_status : '||l_return_status);
815 END IF;
816
817 --For Delete
818 ELSIF p_x_Visit_tbl(i).operation_flag = 'D' or p_x_Visit_tbl(i).operation_flag = 'd' THEN
819
820 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
821 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Delete_Visit');
822 END IF;
823
824 Delete_Visit
825 (
826 p_api_version => l_api_version,
827 -- Changed by jaramana on 18-NOV-2009 for bug 9115894
828 p_init_msg_list => FND_API.g_false,
829 p_commit => Fnd_Api.g_false,
830 p_validation_level => p_validation_level,
831 p_Visit_id => p_x_visit_tbl(i).visit_id,
832 x_return_status => l_return_status,
833 x_msg_count => l_msg_count,
834 x_msg_data => l_msg_data
835 );
836
837 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
838 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Delete_Visit - l_return_status : '||l_return_status);
839 END IF;
840
841 -- Transit Visit Change
842 -- yazhou start
843 -- Will be called from UA
844 -- To Synchronize visit with flight schedule change
845 -- TCHIMIRA :: ER 13416865 :: Added the condition p_module_type = 'JSP'
846 ELSIF ((p_x_Visit_tbl(i).operation_flag = 'S' or p_x_Visit_tbl(i).operation_flag = 's')
847 AND (p_module_type <> 'JSP')) THEN
848
849 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
850 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Synchronize_Visit');
851 END IF;
852
853 Synchronize_Visit
854 (
855 p_api_version => l_api_version,
856 -- Changed by jaramana on 18-NOV-2009 for bug 9115894
857 p_init_msg_list => FND_API.g_false,
858 p_commit => Fnd_Api.g_false,
859 p_validation_level => p_validation_level,
860 p_x_Visit_rec => p_x_visit_tbl(i),
861 x_return_status => l_return_status,
862 x_msg_count => l_msg_count,
863 x_msg_data => l_msg_data
864 );
865
866 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
867 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Synchronize_Visit - l_return_status : '||l_return_status);
868 END IF;
869
870 -- Will be called from UA
871 -- Delete the visit if visit is in Draft or Planning status
872 -- Cancel the visit if visit is in Released or Partially Released status
873 ELSIF p_x_Visit_tbl(i).operation_flag = 'X' or p_x_Visit_tbl(i).operation_flag = 'x' THEN
874
875 OPEN c_visit_status(p_x_Visit_tbl(i).visit_id);
876 FETCH c_visit_status INTO l_visit_status;
877 IF c_visit_status%NOTFOUND THEN
878 CLOSE c_visit_status;
879 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
880 Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
881 Fnd_Msg_Pub.ADD;
882 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
883 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit status not found for visit : ' ||p_x_Visit_tbl(i).visit_id );
884 END IF;
885 END IF;
886 RAISE Fnd_Api.g_exc_error;
887 ELSE
888 CLOSE c_visit_status;
889 END IF;
890
891 -- SKPATHAK :: Bug 9115894 :: 23-NOV-2009
892 -- If status flag is V, then initialize the message list
893 -- and store all the message in the message stack in l_message_stack_tbl
894 IF l_status_flag = 'V' THEN
895 Get_Message_Stack (x_message_stack_tbl => l_message_stack_tbl);
896 l_init_msg_list := FND_API.g_true;
897 ELSE
898 l_init_msg_list := FND_API.g_false;
899 END IF;
900
901 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063
902
903 -- MANESING::Bug 13799364, 29-Mar-2012, get planned UEs, will be used later for launching notification
904 l_ue_ids := null;
905 FOR planned_ue_rec IN get_visit_planned_ues (p_x_visit_tbl(i).visit_id) LOOP
906 l_ue_ids := l_ue_ids || ',' || to_char(planned_ue_rec.unit_effectivity_id);
907 END LOOP;
908
909 -- Even the visits in DRAFT status can be deleted
910 IF l_visit_status IN ('PLANNING', 'DRAFT') THEN
911 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
912 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_visit_status : '||l_visit_status);
913 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Delete_Visit');
914 END IF;
915
916 Delete_Visit
917 (
918 p_api_version => l_api_version,
919 -- Changed by jaramana on 18-NOV-2009 for bug 9115894
920 p_init_msg_list => l_init_msg_list,
921 p_commit => Fnd_Api.g_false,
922 p_validation_level => p_validation_level,
923 p_Visit_id => p_x_visit_tbl(i).visit_id,
924 x_return_status => l_return_status,
925 x_msg_count => l_msg_count,
926 x_msg_data => l_msg_data
927 );
928
929 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
930 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Delete_Visit - l_return_status : '|| l_return_status);
931 END IF;
932 ELSIF l_visit_status = 'RELEASED' OR l_visit_status = 'PARTIALLY RELEASED' THEN
933 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
934 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_visit_status : '||l_visit_status);
935 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Cancel_Visit');
936 END IF;
937
938 Cancel_Visit (
939 p_api_version => l_api_version,
940 -- Changed by jaramana on 18-NOV-2009 for bug 9115894
941 p_init_msg_list => l_init_msg_list,
942 p_commit => Fnd_Api.g_false,
943 p_validation_level => p_validation_level,
944 p_module_type => p_module_type,
945 p_visit_id => p_x_visit_tbl(i).visit_id,
946 p_obj_ver_num => p_x_visit_tbl(i).object_version_number,
947 x_return_status => l_return_status,
948 x_msg_count => l_msg_count,
949 x_msg_data => l_msg_data );
950
951 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
952 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Cancel_Visit - l_return_status : '|| l_return_status);
953 END IF;
954 END IF;
955 -- yazhou end
956
957 /* MANESING::Bug 13799364, 29-Mar-2012, For Auto-Visits, if a Visit has planned UEs,
958 * then launch Visit Cancel notification when the associated Flight Schedule is deleted.
959 */
960 -- if Visit is Deleted or Cancelled
961 IF (l_visit_status IN ('DRAFT', 'PLANNING', 'RELEASED', 'PARTIALLY RELEASED')) THEN
962
963 -- if Visit has planned UEs
964 IF (l_ue_ids IS NOT NULL) THEN
965 -- remove an extra "," in the beginning of this string
966 l_ue_ids := substr(l_ue_ids, 2);
967
968 -- launch visit cancel notification
969 IF (l_log_statement >= l_log_current_level) THEN
970 FND_LOG.string(l_log_statement, l_debug, 'Invoking AHL_AVF_OPER_VSTS_PVT.Launch_Visit_Can_Notification API for visit id=' || p_x_visit_tbl(i).visit_id ||
971 ' and ue_ids=' || l_ue_ids);
972 END IF;
973
974 AHL_AVF_OPER_VSTS_PVT.Launch_Visit_Can_Notification (
975 p_visit_id => p_x_visit_tbl(i).visit_id,
976 p_ue_ids => l_ue_ids,
977 p_commit => FND_API.G_FALSE,
978 x_item_key => l_item_key,
979 x_return_status => l_return_status
980 );
981
982 IF (l_log_statement >= l_log_current_level) THEN
983 FND_LOG.string(l_log_statement, l_debug, 'After call to AHL_AVF_OPER_VSTS_PVT.Launch_Visit_Can_Notification API, Return Status: ' || l_return_status);
984 END IF;
985
986 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
987
988 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
989 RAISE FND_API.G_EXC_ERROR;
990 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
991 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
992 END IF;
993
994 END IF;
995 END IF; -- IF l_ue_ids IS NOT NULL
996
997 END IF; -- IF visit is Deleted or Cancelled
998
999 -- SKPATHAK :: Bug 9115894 :: 23-NOV-2009
1000 -- If status flag is V, put the stored messages back to the message stack
1001 IF l_status_flag = 'V' THEN
1002 Set_Message_Stack (p_message_stack_tbl => l_message_stack_tbl);
1003 END IF;
1004 END IF;
1005
1006 -- SKPATHAK :: Bug 9115894 :: 19-NOV-2009
1007 -- Populate the return status in l_status_flag. Make sure that the status
1008 -- priority remains U, then E, then V and then S (which is default)
1009 -- That is, U should not get overwritten by E or V, and E should not get overwritten by V
1010 IF l_return_status = 'U' OR l_status_flag = 'U' THEN
1011 l_status_flag := 'U';
1012 ELSIF l_return_status = 'E' OR l_status_flag = 'E' THEN
1013 l_status_flag := 'E';
1014 ELSIF l_return_status = 'V' THEN
1015 l_status_flag := 'V';
1016 END IF;
1017
1018 END LOOP;
1019 END IF;
1020
1021 -- SKPATHAK :: Bug 9115894 :: 19-NOV-2009
1022 IF (l_status_flag = 'E') THEN
1023 RAISE Fnd_Api.G_EXC_ERROR;
1024 ELSIF (l_status_flag = 'U') THEN
1025 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
1026 END IF;
1027
1028
1029 ------------------------End of API Body---------------------------------------
1030 --Standard check to count messages
1031 l_msg_count := Fnd_Msg_Pub.count_msg;
1032
1033 IF l_msg_count > 0 THEN
1034 x_msg_count := l_msg_count;
1035 IF l_status_flag <> 'V' THEN
1036 -- Unknown messages
1037 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1038 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
1039 END IF;
1040 END IF;
1041
1042 -- Proceed to commit if status is 'S' or if there were only validation errors
1043 --Standard check for commit
1044 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
1045 COMMIT;
1046 END IF;
1047
1048 -- Added by jaramana on 18-NOV-2009 for bug 9115894
1049 -- If validation had failed for any of the visits, return 'V' to the caller
1050 -- Otherwise X_return_status will already be 'S'
1051 IF l_status_flag = 'V' THEN
1052 X_return_status := G_VALIDATION_ERROR_STATUS;
1053 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1054 p_count => x_msg_count,
1055 p_data => x_msg_data);
1056 END IF;
1057
1058 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1059 fnd_log.string(fnd_log.level_procedure, L_DEBUG||'.end', 'At the end of PLSQL procedure. x_return_status = ' || x_return_status);
1060 END IF;
1061
1062 EXCEPTION
1063
1064 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1065 ROLLBACK TO Process_Visit;
1066 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1067 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1068 p_count => x_msg_count,
1069 p_data => x_msg_data);
1070
1071 WHEN FND_API.G_EXC_ERROR THEN
1072 ROLLBACK TO Process_Visit;
1073 X_return_status := FND_API.G_RET_STS_ERROR;
1074 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1075 p_count => x_msg_count,
1076 p_data => X_msg_data);
1077
1078 WHEN OTHERS THEN
1079 ROLLBACK TO Process_Visit;
1080 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1081 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1082 THEN
1083 fnd_msg_pub.add_exc_msg(p_pkg_name => 'AHL_VWP_VISITS_PVT',
1084 p_procedure_name => 'Process_Visit',
1085 p_error_text => SUBSTR(SQLERRM,1,240));
1086 END IF;
1087 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
1088 p_count => x_msg_count,
1089 p_data => x_msg_data);
1090 END Process_Visit;
1091
1092 --------------------------------------------------------------------
1093 -- PROCEDURE
1094 -- Get_Visit_Details
1095 --
1096 -- PURPOSE
1097 -- Get a particular Visit Records with all details
1098 --------------------------------------------------------------------
1099 PROCEDURE Get_Visit_Details (
1100 p_api_version IN NUMBER,
1101 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
1102 p_commit IN VARCHAR2 := Fnd_Api.g_false,
1103 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
1104 p_module_type IN VARCHAR2 := 'JSP',
1105 p_visit_id IN NUMBER,
1106 x_Visit_rec OUT NOCOPY Visit_Rec_Type,
1107 x_return_status OUT NOCOPY VARCHAR2,
1108 x_msg_count OUT NOCOPY NUMBER,
1109 x_msg_data OUT NOCOPY VARCHAR2
1110 )
1111 IS
1112 -- Define local Variables
1113 L_API_VERSION CONSTANT NUMBER := 1.0;
1114 L_API_NAME CONSTANT VARCHAR2(30) := 'Get_Visit_Details';
1115 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
1116 L_DEBUG CONSTANT VARCHAR2(90) := G_PKG_NAME || '.' || L_API_NAME;
1117
1118 l_msg_data VARCHAR2(2000);
1119 l_project_flag VARCHAR2(80);
1120 l_simulation_plan_name VARCHAR2(80);
1121 l_unit_name VARCHAR2(80);
1122 l_unit_header_id NUMBER;
1123 l_hour VARCHAR2(30);
1124 l_hour_close VARCHAR2(30);
1125 l_default VARCHAR2(30);
1126 l_proj_temp_name VARCHAR2(30);
1127 l_return_status VARCHAR2(1);
1128 l_valid_flag VARCHAR2(1);
1129 --PRAKKUM ::FP PIE :: 13-OCT-2010
1130 l_project_name VARCHAR2(30);
1131
1132 l_visit_id NUMBER:= p_visit_id;
1133 l_count NUMBER;
1134 l_duration NUMBER;
1135 l_visit_end_hour NUMBER;
1136 l_proj_temp_id NUMBER;
1137 l_workorder_id NUMBER;
1138 i NUMBER;
1139 x NUMBER;
1140
1141 l_due_date DATE;
1142 x_due_by_date DATE;
1143 l_visit_end_date DATE;
1144 l_minute NUMBER(2);
1145 l_minute_close NUMBER(2);
1146
1147 l_workorder_name VARCHAR2(80); -- Added in 11.5.10
1148
1149 ---Arvind changes for FlightNumber
1150 l_flight_number VARCHAR2(30);
1151 ---End
1152
1153 -- Define local record datatypes
1154 l_visit_rec Visit_Rec_Type;
1155
1156 -- Define local cursors
1157 --Arvind changes for FlightNumber
1158 -- To retreive FlightNumber based on UnitScheduleID
1159 CURSOR c_flight_number (x_id IN NUMBER) IS
1160 select flight_number
1161 from ahl_unit_schedules
1162 where unit_schedule_id=x_id;
1163 --end
1164
1165 -- To find out required search visit details
1166 -- Fix for ADS bug# 4357001.
1167 -- Modified query so that Visits retrieved are not OU stripped.
1168 -- 'View Visit' should show visit details accross OU.
1169 -- Following query is copied from ahl_search_visits_v without the CLIENT_INFO.
1170 CURSOR c_visit (x_id IN NUMBER) IS
1171 --SELECT * FROM AHL_SEARCH_VISITS_V
1172 --WHERE VISIT_ID = x_id;
1173 --AnRaj:Changed query, Perf Bug:4919502
1174 /* SELECT AVTS.VISIT_ID , AVTS.VISIT_NUMBER, AVTS.VISIT_NAME,
1175 AVTS.ORGANIZATION_ID , HROU.NAME ORGANIZATION_NAME, AVTS.DEPARTMENT_ID ,
1176 BDPT.DESCRIPTION DEPARTMENT_NAME , AVTS.OBJECT_VERSION_NUMBER,
1177 AVTS.START_DATE_TIME,
1178 AVTS.STATUS_CODE, FLVT1.MEANING STATUS_MEAN, AVTS.TEMPLATE_FLAG,
1179 AVTS.ITEM_INSTANCE_ID , CSIS.SERIAL_NUMBER , AVTS.INVENTORY_ITEM_ID ,
1180 AVTS.ITEM_ORGANIZATION_ID , MTSB.CONCATENATED_SEGMENTS ITEM_DESCRIPTION,
1181 AVTS.VISIT_TYPE_CODE , FLVT.MEANING VISIT_TYPE_MEAN, AVTS.SIMULATION_PLAN_ID,
1182 ASPV.SIMULATION_PLAN_NAME, NVL(ASPV.PRIMARY_PLAN_FLAG,'Y') ,
1183 AVTS.SPACE_CATEGORY_CODE, FLVT2.MEANING SPACE_CATEGORY_MEAN,
1184 AVTS.SERVICE_REQUEST_ID,
1185 AVTS.CLOSE_DATE_TIME, CSAB.INCIDENT_NUMBER, UC.NAME UNIT_NAME,
1186 AVTS.PRIORITY_CODE,
1187 FLVT3.MEANING PRIORITY_MEAN, AVTS.PROJECT_TEMPLATE_ID,
1188 PA.NAME PROJECT_TEMPLATE_NAME ,
1189 AVTS.UNIT_SCHEDULE_ID, AVTS.ASSO_PRIMARY_VISIT_ID
1190 FROM AHL_VISITS_VL AVTS, AHL_SIMULATION_PLANS_VL ASPV,
1191 CSI_ITEM_INSTANCES CSIS, HR_ALL_ORGANIZATION_UNITS HROU,
1192 BOM_DEPARTMENTS BDPT, MTL_SYSTEM_ITEMS_B_KFV MTSB,
1193 FND_LOOKUP_VALUES_VL FLVT, FND_LOOKUP_VALUES_VL FLVT1,
1194 FND_LOOKUP_VALUES_VL FLVT2, FND_LOOKUP_VALUES_VL FLVT3,
1195 PA_PROJECTS_ALL PA, AHL_UNIT_CONFIG_HEADERS UC, CS_INCIDENTS_ALL_B CSAB
1196 WHERE AVTS.ITEM_INSTANCE_ID = UC.CSI_ITEM_INSTANCE_ID(+)
1197 AND AVTS.ITEM_INSTANCE_ID = CSIS.INSTANCE_ID(+)
1198 AND AVTS.ORGANIZATION_ID = HROU.ORGANIZATION_ID(+)
1199 AND AVTS.DEPARTMENT_ID = BDPT.DEPARTMENT_ID(+)
1200 AND AVTS.SIMULATION_PLAN_ID = ASPV.SIMULATION_PLAN_ID(+)
1201 AND AVTS. INVENTORY_ITEM_ID = MTSB.INVENTORY_ITEM_ID(+)
1202 AND AVTS. ITEM_ORGANIZATION_ID = MTSB.ORGANIZATION_ID(+)
1203 AND FLVT.LOOKUP_TYPE(+) ='AHL_PLANNING_VISIT_TYPE'
1204 AND FLVT.LOOKUP_CODE(+) = AVTS.VISIT_TYPE_CODE
1205 AND FLVT1.LOOKUP_TYPE(+) = 'AHL_VWP_VISIT_STATUS'
1206 AND FLVT1.LOOKUP_CODE(+) = AVTS.STATUS_CODE
1207 AND FLVT2.LOOKUP_TYPE(+) = 'AHL_LTP_SPACE_CATEGORY'
1208 AND FLVT2.LOOKUP_CODE(+) = AVTS.SPACE_CATEGORY_CODE
1209 AND FLVT3.LOOKUP_TYPE(+) = 'AHL_VWP_VISIT_PRIORITY'
1210 AND FLVT3.LOOKUP_CODE(+) = AVTS.PRIORITY_CODE
1211 AND PA.PROJECT_ID(+) = AVTS.PROJECT_TEMPLATE_ID
1212 AND AVTS.SERVICE_REQUEST_ID = CSAB.INCIDENT_ID(+)
1213 AND AVTS.TEMPLATE_FLAG = 'N' AND AVTS.STATUS_CODE <> 'DELETED'
1214 AND UC.active_end_date is null
1215 AND VISIT_ID = x_id;*/
1216 -- AnRaj: Replaced HR_ALL_ORGANIZATION_UNITS with HR_ALL_ORGANIZATION_UNITS_TL, Fix for Bug# 5367598
1217 SELECT AVTS.VISIT_ID , AVTS.VISIT_NUMBER,
1218 AVTSTL.VISIT_NAME,AVTS.ORGANIZATION_ID ,
1219 AVTS.START_DATE_TIME, AVTS.CLOSE_DATE_TIME,AVTS.VISIT_TYPE_CODE ,
1220 AVTS.DEPARTMENT_ID ,AVTS.STATUS_CODE,AVTS.OBJECT_VERSION_NUMBER,
1221 HROU.NAME ORGANIZATION_NAME,
1222 BDPT.DESCRIPTION DEPARTMENT_NAME ,
1223 FLVT1.MEANING STATUS_MEAN,
1224 AVTS.TEMPLATE_FLAG,AVTS.ITEM_INSTANCE_ID ,
1225 AVTS.INVENTORY_ITEM_ID,AVTS.ITEM_ORGANIZATION_ID,
1226 AVTS.SIMULATION_PLAN_ID,AVTS.SERVICE_REQUEST_ID,
1227 AVTS.PRIORITY_CODE,AVTS.SPACE_CATEGORY_CODE,
1228 AVTS.PROJECT_TEMPLATE_ID,AVTS.UNIT_SCHEDULE_ID,AVTS.ASSO_PRIMARY_VISIT_ID,
1229 CSIS.SERIAL_NUMBER ,
1230 MTSB.CONCATENATED_SEGMENTS ITEM_DESCRIPTION,
1231 FLVT.MEANING VISIT_TYPE_MEAN,FLVT3.MEANING
1232 PRIORITY_MEAN,FLVT2.MEANING SPACE_CATEGORY_MEAN,
1233 ASPVTL.SIMULATION_PLAN_NAME, NVL(ASPV.PRIMARY_PLAN_FLAG,'Y') ,
1234 CSAB.INCIDENT_NUMBER, UC.NAME UNIT_NAME,
1235 -- SKPATHAK :: Bug #8983097 :: 20-OCT-2009
1236 -- Removed project template from the SELECT, FROM, and WHERE clauses of this cursor
1237 --PA.NAME PROJECT_TEMPLATE_NAME,
1238 AVTS.TOP_PROJECT_TASK_ID, --PRAKKUM ::FP PIE :: 13-OCT-2010
1239 AVTS.INV_LOCATOR_ID -- Added by sowsubra
1240 FROM AHL_VISITS_B AVTS,AHL_VISITS_TL AVTSTL,
1241 AHL_SIMULATION_PLANS_B ASPV,AHL_SIMULATION_PLANS_TL ASPVTL,
1242 CSI_ITEM_INSTANCES CSIS, HR_ALL_ORGANIZATION_UNITS_TL HROU,
1243 BOM_DEPARTMENTS BDPT, MTL_SYSTEM_ITEMS_B_KFV MTSB,
1244 FND_LOOKUP_VALUES FLVT, FND_LOOKUP_VALUES FLVT1,
1245 FND_LOOKUP_VALUES FLVT2, FND_LOOKUP_VALUES FLVT3,
1246 -- SKPATHAK :: Bug #8983097 :: 20-OCT-2009
1247 --PA_PROJECTS_ALL PA,
1248 AHL_UNIT_CONFIG_HEADERS UC, CS_INCIDENTS_ALL_B CSAB
1249 WHERE AVTS.VISIT_ID = AVTSTL.VISIT_ID
1250 AND AVTSTL.LANGUAGE = USERENV('LANG')
1251 AND ASPV.SIMULATION_PLAN_ID = ASPVTL.SIMULATION_PLAN_ID(+)
1252 AND ASPVTL.LANGUAGE(+) = USERENV('LANG')
1253 AND AVTS.ITEM_INSTANCE_ID = UC.CSI_ITEM_INSTANCE_ID(+)
1254 AND AVTS.ITEM_INSTANCE_ID = CSIS.INSTANCE_ID(+)
1255 AND AVTS.ORGANIZATION_ID = HROU.ORGANIZATION_ID(+)
1256 AND HROU.LANGUAGE(+) = USERENV('LANG')
1257 AND AVTS.DEPARTMENT_ID = BDPT.DEPARTMENT_ID(+)
1258 AND AVTS.SIMULATION_PLAN_ID = ASPV.SIMULATION_PLAN_ID(+)
1259 AND AVTS. INVENTORY_ITEM_ID = MTSB.INVENTORY_ITEM_ID(+)
1260 AND AVTS. ITEM_ORGANIZATION_ID = MTSB.ORGANIZATION_ID(+)
1261 AND FLVT.LOOKUP_TYPE(+) ='AHL_PLANNING_VISIT_TYPE'
1262 AND FLVT.LOOKUP_CODE(+) = AVTS.VISIT_TYPE_CODE
1263 AND FLVT.LANGUAGE(+) = userenv('LANG')
1264 AND FLVT1.LOOKUP_TYPE(+) = 'AHL_VWP_VISIT_STATUS'
1265 AND FLVT1.LOOKUP_CODE(+) = AVTS.STATUS_CODE
1266 AND FLVT1.LANGUAGE(+) = userenv('LANG')
1267 AND FLVT2.LOOKUP_TYPE(+) = 'AHL_LTP_SPACE_CATEGORY'
1268 AND FLVT2.LOOKUP_CODE(+) = AVTS.SPACE_CATEGORY_CODE
1269 AND FLVT2.LANGUAGE(+) = userenv('LANG')
1270 AND FLVT3.LOOKUP_TYPE(+) = 'AHL_VWP_VISIT_PRIORITY'
1271 AND FLVT3.LOOKUP_CODE(+) = AVTS.PRIORITY_CODE
1272 AND FLVT3.LANGUAGE(+) = userenv('LANG')
1273 -- SKPATHAK :: Bug #8983097 :: 20-OCT-2009
1274 --AND PA.PROJECT_ID = AVTS.PROJECT_TEMPLATE_ID
1275 AND AVTS.SERVICE_REQUEST_ID = CSAB.INCIDENT_ID(+)
1276 AND AVTS.TEMPLATE_FLAG = 'N'
1277 AND AVTS.STATUS_CODE <> 'DELETED'
1278 AND UC.active_end_date is null
1279 AND AVTS.VISIT_ID = x_id;
1280
1281 c_visit_rec c_visit%ROWTYPE;
1282
1283 -- To find out all visit/template details
1284 CURSOR c_visit_details (x_id IN NUMBER) IS
1285 SELECT * FROM AHL_VISITS_VL
1286 WHERE VISIT_ID = x_id;
1287
1288 visit_rec c_visit_details%ROWTYPE;
1289
1290 --TCHIMIRA::P2P CP ER 9151144::02-DEC-2009
1291 --Cursor to fetch CP related details
1292 CURSOR c_conc_req_details(x_cp_req_id IN NUMBER) IS
1293 SELECT FLS.MEANING CP_STATUS_CODE, FLP.MEANING CP_PHASE_CODE, FCR.REQUEST_DATE CP_REQUEST_DATE
1294 FROM FND_CONCURRENT_REQUESTS FCR, FND_LOOKUPS FLS, FND_LOOKUPS FLP
1295 WHERE FCR.REQUEST_ID = x_cp_req_id
1296 AND ((FCR.STATUS_CODE = FLS.LOOKUP_CODE
1297 AND FLS.LOOKUP_TYPE = 'CP_STATUS_CODE')
1298 AND (FCR.PHASE_CODE = FLP.LOOKUP_CODE
1299 AND FLP.LOOKUP_TYPE = 'CP_PHASE_CODE')) ;
1300
1301 conc_req_rec c_conc_req_details%ROWTYPE;
1302
1303 -- Cursor to find master workorder name for the given visit
1304 CURSOR c_workorder_csr (x_id IN NUMBER) IS
1305 SELECT WORKORDER_NAME, WORKORDER_ID FROM AHL_WORKORDERS
1306 WHERE MASTER_WORKORDER_FLAG = 'Y' AND VISIT_ID = x_id
1307 /*B6512777 - sowsubra - there is no task associated with visit master wo, hence included the check below to get the visit master wo name*/
1308 AND VISIT_TASK_ID IS NULL;
1309
1310 -- CURSOR added to get the Project Template Name
1311 -- Post 11.5.10
1312 -- Fix for ADS bug# 4357001. Changed to use PA_PROJECTS_ALL table.
1313 CURSOR c_proj_template(p_proj_temp_id IN NUMBER) IS
1314 SELECT name FROM PA_PROJECTS_ALL
1315 WHERE project_id = p_proj_temp_id;
1316
1317 CURSOR c_uc_header(x_instance_id IN NUMBER) IS
1318 SELECT name, UNIT_CONFIG_HEADER_ID FROM ahl_unit_config_headers
1319 WHERE CSI_ITEM_INSTANCE_ID = x_instance_id
1320 AND active_end_date is null;
1321
1322 --PRAKKUM ::FP PIE :: 13-OCT-2010
1323 CURSOR get_project_name_csr(c_project_id IN NUMBER) IS
1324 SELECT name FROM PA_PROJECTS_ALL
1325 WHERE project_id = c_project_id;
1326
1327 /*Added by sowsubra*/
1328 CURSOR c_get_subinv_loc_dtls(p_inv_locator_id IN NUMBER, p_org_id IN NUMBER) IS
1329 SELECT SUBINVENTORY_CODE, CONCATENATED_SEGMENTS
1330 FROM mtl_item_locations_kfv
1331 WHERE inventory_location_id = p_inv_locator_id;
1332
1333 l_sub_code VARCHAR2(10) := NULL;
1334 l_locator_code VARCHAR2(240) := NULL;
1335
1336 BEGIN
1337 -- Standard start of API savepoint
1338 SAVEPOINT Get_Visit_Details;
1339
1340 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1341 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure, p_visit_id - '||p_visit_id);
1342 END IF;
1343
1344 -- Initialize message list if p_init_msg_list is set to TRUE.
1345 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
1346 Fnd_Msg_Pub.initialize;
1347 END IF;
1348
1349 -- Initialize API return status to success
1350 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1351
1352 -- Standard call to check for call compatibility.
1353 IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
1354 p_api_version,
1355 l_api_name,G_PKG_NAME) THEN
1356 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
1357 END IF;
1358 ------------------------------Start of API Body------------------------------------
1359
1360 ----------------------------------------- Cursor ----------------------------------
1361 OPEN c_visit_details(p_visit_id);
1362 FETCH c_visit_details INTO visit_rec;
1363 CLOSE c_visit_details;
1364
1365 OPEN c_Visit(p_visit_id);
1366 FETCH c_visit INTO c_visit_rec;
1367 CLOSE c_Visit;
1368
1369 --TCHIMIRA::P2P CP ER 9151144::02-DEC-2009
1370 OPEN c_conc_req_details(visit_rec.request_id);
1371 FETCH c_conc_req_details INTO conc_req_rec;
1372 CLOSE c_conc_req_details;
1373 ------------------------------------------ Start -----------------------------------
1374 -- get workorder name and Id added in 11.5.10
1375 OPEN c_workorder_csr(p_visit_id);
1376 FETCH c_workorder_csr INTO l_workorder_name, l_workorder_id;
1377 IF c_workorder_csr%FOUND THEN
1378 l_visit_rec.job_number := l_workorder_name;
1379 --l_visit_rec.workorder_id := l_workorder_id;
1380 END IF;
1381 CLOSE c_workorder_csr;
1382
1383 -- To find meaning for fnd_lookups code
1384 IF (visit_rec.project_flag IS NOT NULL) THEN
1385 SELECT MEANING INTO l_project_flag
1386 FROM FND_LOOKUP_VALUES_VL
1387 WHERE LOOKUP_CODE = visit_rec.project_flag
1388 AND LOOKUP_TYPE = 'AHL_YES_NO_TYPE';
1389 END IF;
1390 ----------------------------------- FOR VISITS --------------------------------------
1391 IF UPPER(c_visit_rec.template_flag) = 'N' THEN
1392 -- To find Unit Name on basis of Instance Id
1393 IF visit_rec.item_instance_id IS NOT NULL THEN
1394 OPEN c_uc_header(visit_rec.item_instance_id);
1395 FETCH c_uc_header INTO l_unit_name, l_unit_header_id;
1396 CLOSE c_uc_header;
1397
1398 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1399 fnd_log.string(fnd_log.level_statement,L_DEBUG,'item instance : '|| visit_rec.item_instance_id);
1400 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_unit_name : '|| l_unit_name);
1401 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_unit_header_id : '|| l_unit_header_id);
1402 END IF;
1403 END IF;
1404
1405 -- To find simulation plan name for the simulation id from LTP view
1406 IF (visit_rec.simulation_plan_id IS NOT NULL) THEN
1407 SELECT SIMULATION_PLAN_NAME INTO l_simulation_plan_name
1408 FROM AHL_SIMULATION_PLANS_VL
1409 WHERE SIMULATION_PLAN_ID = visit_rec.simulation_plan_id;
1410 ELSE
1411 l_simulation_plan_name := NULL;
1412 END IF;
1413
1414 -- Post 11.5.10
1415 -- Reema Start
1416 -- To check if visit starttime is not null then store time in HH4 format
1417 IF (c_visit_rec.START_DATE_TIME IS NOT NULL AND c_visit_rec.START_DATE_TIME <> Fnd_Api.G_MISS_DATE) THEN
1418 l_hour := TO_NUMBER(TO_CHAR(c_visit_rec.START_DATE_TIME , 'HH24'));
1419 l_minute := TO_NUMBER(TO_CHAR(c_visit_rec.START_DATE_TIME , 'MI'));
1420 ELSE
1421 l_hour := NULL;
1422 c_visit_rec.START_DATE_TIME := NULL;
1423 END IF;
1424
1425 -- To check if visit closetime is not null then store time in HH4 format
1426 IF (visit_rec.CLOSE_DATE_TIME IS NOT NULL AND visit_rec.CLOSE_DATE_TIME <> Fnd_Api.G_MISS_DATE) THEN
1427 l_hour_close := TO_NUMBER(TO_CHAR(visit_rec.CLOSE_DATE_TIME , 'HH24'));
1428 l_minute_close := TO_NUMBER(TO_CHAR(c_visit_rec.CLOSE_DATE_TIME , 'MI'));
1429 ELSE
1430 l_hour_close := NULL;
1431 visit_rec.CLOSE_DATE_TIME := Null;
1432 END IF;
1433
1434 -- Call local procedure to retrieve Due by Date of the visit
1435 l_due_date := Get_Due_by_Date(p_visit_id => l_visit_id); -- PRAKKUM :: VWPE: ER:12424063 :: 01-FEB-2011
1436 /*
1437 Get_Due_by_Date(p_visit_id => l_visit_id, x_due_by_date => l_due_date);
1438 */
1439
1440 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1441 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Due by date : '|| l_due_date);
1442 END IF;
1443
1444 -- Derive the visit end date
1445 IF (c_visit_rec.START_DATE_TIME IS NOT NULL
1446 AND c_visit_rec.START_DATE_TIME <> Fnd_Api.G_MISS_DATE
1447 AND c_visit_rec.DEPARTMENT_ID IS NOT NULL
1448 AND c_visit_rec.DEPARTMENT_ID <> FND_API.G_MISS_NUM) THEN
1449 l_visit_end_date:= AHL_VWP_TIMES_PVT.get_visit_end_time(p_visit_id);
1450 END IF;
1451
1452
1453 -- PRAKKUM ::FP PIE :: 13-OCT-2010
1454 -- Get the project for the given project id
1455 IF visit_rec.project_id IS NOT NULL THEN
1456 OPEN get_project_name_csr (visit_rec.project_id);
1457 FETCH get_project_name_csr INTO l_project_name;
1458 CLOSE get_project_name_csr;
1459 END IF;
1460
1461 -- Post 11.5.10
1462 -- get the project template name from cursor
1463 IF visit_rec.project_template_id IS NOT NULL THEN
1464 OPEN c_proj_template(visit_rec.project_template_id);
1465 FETCH c_proj_template INTO l_visit_rec.proj_template_name;
1466 IF c_proj_template%NOTFOUND THEN
1467 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
1468 Fnd_Message.SET_NAME('AHL','AHL_VWP_INVALID_PROTEM');
1469 Fnd_Msg_Pub.ADD;
1470 RAISE Fnd_Api.G_EXC_ERROR;
1471 END IF;
1472 END IF;
1473 CLOSE c_proj_template;
1474 END IF;
1475
1476 /*Added by sowsubra*/
1477 IF (c_visit_rec.inv_locator_id IS NOT NULL) THEN
1478 OPEN c_get_subinv_loc_dtls(c_visit_rec.inv_locator_id,c_visit_rec.organization_id);
1479 FETCH c_get_subinv_loc_dtls into l_sub_code, l_locator_code;
1480 CLOSE c_get_subinv_loc_dtls;
1481 END IF;
1482
1483 -- SKPATHAK :: 19-MAY-2010 :: Enigma Job Card Changes :: START
1484 IF FND_PROFILE.VALUE('AHL_ENIGMA_3C_URL') IS NOT NULL THEN
1485 l_visit_rec.jc_exist := AHL_PRD_PRINT_PVT.Generated_JobCard_Exists('VST',c_visit_rec.visit_id);
1486 l_visit_rec.view_jc_url := AHL_PRD_PRINT_PVT.Get_JC_File_Location('VST',c_visit_rec.visit_id);
1487 l_visit_rec.jc_gen_status := AHL_PRD_PRINT_PVT.Get_Latest_JCG_Status('VST',c_visit_rec.visit_id);
1488 l_visit_rec.jc_gen_error_text := AHL_PRD_PRINT_PVT.Get_JCG_Error_Msg('VST',c_visit_rec.visit_id);
1489
1490 IF LENGTH(l_visit_rec.jc_gen_error_text) > 500 THEN
1491 l_visit_rec.jc_gen_error_text := SUBSTR(l_visit_rec.jc_gen_error_text, 1, 500) || '...';
1492 END IF;
1493 END IF;
1494 -- SKPATHAK :: 19-MAY-2010 :: Enigma Job Card Changes :: END
1495
1496 -- Assigning all visits field to visit record attributes meant for display
1497 l_visit_rec.visit_id := c_visit_rec.visit_id ;
1498 l_visit_rec.visit_name := c_visit_rec.visit_name ;
1499 l_visit_rec.visit_number := c_visit_rec.visit_number ;
1500 l_visit_rec.status_code := c_visit_rec.status_code;
1501 l_visit_rec.status_name := c_visit_rec.status_mean;
1502 l_visit_rec.visit_type_code := c_visit_rec.visit_type_code ;
1503 l_visit_rec.visit_type_name := c_visit_rec.VISIT_TYPE_MEAN ;
1504 l_visit_rec.object_version_number := c_visit_rec.object_version_number ;
1505 l_visit_rec.inventory_item_id := c_visit_rec.inventory_item_id ;
1506 l_visit_rec.item_organization_id := c_visit_rec.item_organization_id ;
1507 l_visit_rec.item_name := c_visit_rec.ITEM_DESCRIPTION ;
1508 l_visit_rec.unit_name := l_unit_name ;
1509 l_visit_rec.unit_header_id := l_unit_header_id;
1510 l_visit_rec.item_instance_id := c_visit_rec.item_instance_id ;
1511 l_visit_rec.serial_number := c_visit_rec.serial_number ;
1512 l_visit_rec.service_request_id := c_visit_rec.service_request_id;
1513 l_visit_rec.service_request_number:= c_visit_rec.incident_number;
1514 l_visit_rec.space_category_code := c_visit_rec.space_category_code;
1515 l_visit_rec.space_category_name := c_visit_rec.space_category_mean;
1516 l_visit_rec.organization_id := c_visit_rec.organization_id ;
1517 l_visit_rec.org_name := c_visit_rec.ORGANIZATION_NAME ;
1518 l_visit_rec.department_id := c_visit_rec.department_id ;
1519 l_visit_rec.dept_name := c_visit_rec.DEPARTMENT_NAME ;
1520 l_visit_rec.start_date := c_visit_rec.START_DATE_TIME;
1521 l_visit_rec.start_hour := l_hour;
1522 l_visit_rec.START_MIN := l_minute;
1523 l_visit_rec.PLAN_END_DATE := visit_rec.CLOSE_DATE_TIME;
1524 l_visit_rec.PLAN_END_HOUR := l_hour_close;
1525 l_visit_rec.PLAN_END_MIN := l_minute_close;
1526 l_visit_rec.project_flag := l_project_flag;
1527 l_visit_rec.project_flag_code := visit_rec.project_flag;
1528 l_visit_rec.end_date := l_visit_end_date ;
1529 l_visit_rec.due_by_date := TRUNC(l_due_date);
1530 l_visit_rec.duration := NULL ;
1531 l_visit_rec.simulation_plan_id := visit_rec.simulation_plan_id ;
1532 l_visit_rec.simulation_plan_name := l_simulation_plan_name ;
1533 l_visit_rec.template_flag := c_visit_rec.template_flag ;
1534 l_visit_rec.description := visit_rec.description ;
1535 l_visit_rec.last_update_date := visit_rec.last_update_date;
1536 l_visit_rec.project_id := visit_rec.project_id;
1537 l_visit_rec.project_number := visit_rec.visit_number;
1538 l_visit_rec.outside_party_flag := visit_rec.outside_party_flag;
1539 -- Post 11.5.10
1540 -- Reema Start
1541 l_visit_rec.priority_code := visit_rec.priority_code;
1542 l_visit_rec.proj_template_id := visit_rec.project_template_id;
1543 l_visit_rec.priority_value := c_visit_rec.priority_mean;
1544 --PRAKKUM ::FP PIE :: 13-OCT-2010
1545 l_visit_rec.top_project_task_id := c_visit_rec.top_project_task_id;
1546 IF l_visit_rec.proj_template_id IS NULL THEN
1547 l_visit_rec.project_name := l_project_name;
1548 END IF;
1549 -- Reema End
1550 l_visit_rec.unit_schedule_id := visit_rec.unit_schedule_id;
1551
1552 /*Added by sowsubra*/
1553 l_visit_rec.subinventory := l_sub_code;
1554 l_visit_rec.LOCATOR_SEGMENT := l_locator_code;
1555
1556 -- manisaga for DFF Enablement on 09-Feb-2010 Start
1557 l_visit_rec.attribute_category := visit_rec.attribute_category;
1558 l_visit_rec.attribute1 := visit_rec.attribute1;
1559 l_visit_rec.attribute2 := visit_rec.attribute2;
1560 l_visit_rec.attribute3 := visit_rec.attribute3;
1561 l_visit_rec.attribute4 := visit_rec.attribute4;
1562 l_visit_rec.attribute5 := visit_rec.attribute5;
1563 l_visit_rec.attribute6 := visit_rec.attribute6;
1564 l_visit_rec.attribute7 := visit_rec.attribute7;
1565 l_visit_rec.attribute8 := visit_rec.attribute8;
1566 l_visit_rec.attribute9 := visit_rec.attribute9;
1567 l_visit_rec.attribute10 := visit_rec.attribute10;
1568 l_visit_rec.attribute11 := visit_rec.attribute11;
1569 l_visit_rec.attribute12 := visit_rec.attribute12;
1570 l_visit_rec.attribute13 := visit_rec.attribute13;
1571 l_visit_rec.attribute14 := visit_rec.attribute14;
1572 l_visit_rec.attribute15 := visit_rec.attribute15;
1573 -- manisaga for DFF Enablement on 09-Feb-2010 End
1574
1575
1576 --TCHIMIRA::P2P CP ER 9151144::02-DEC-2009
1577 --Assigning all concurrent program fields to visit record attributes meant for display on the update visit UI.
1578 l_visit_rec.cp_request_id := visit_rec.request_id;
1579 l_visit_rec.cp_phase_code := conc_req_rec.cp_phase_code;
1580 l_visit_rec.cp_status_code := conc_req_rec.cp_status_code;
1581 l_visit_rec.cp_request_date := conc_req_rec.cp_request_date;
1582
1583 --Arvind Rupakula -Flight Number changes
1584 IF (visit_rec.unit_schedule_id IS NOT NULL) THEN
1585 OPEN c_flight_number(visit_rec.unit_schedule_id);
1586 FETCH c_flight_number INTO l_flight_number;
1587 CLOSE c_flight_number;
1588 l_visit_rec.flight_number := l_flight_number;
1589 END IF;
1590 --End Changes
1591 x_visit_rec := l_visit_rec;
1592 END IF;
1593 ------------------------End of API Body------------------------------------
1594 -- Standard call to get message count and if count is 1, get message info
1595 Fnd_Msg_Pub.Count_And_Get
1596 ( p_count => x_msg_count,
1597 p_data => x_msg_data,
1598 p_encoded => Fnd_Api.g_false);
1599
1600 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1601 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
1602 END IF;
1603
1604 RETURN;
1605 EXCEPTION
1606 WHEN Fnd_Api.G_EXC_ERROR THEN
1607 x_return_status := Fnd_Api.G_RET_STS_ERROR;
1608 ROLLBACK TO Get_Visit_Details;
1609 Fnd_Msg_Pub.count_and_get( p_count => x_msg_count,
1610 p_data => x_msg_data,
1611 p_encoded => Fnd_Api.g_false);
1612
1613 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
1614 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1615 ROLLBACK TO Get_Visit_Details;
1616 Fnd_Msg_Pub.count_and_get( p_count => x_msg_count,
1617 p_data => x_msg_data,
1618 p_encoded => Fnd_Api.g_false);
1619
1620 WHEN OTHERS THEN
1621 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1622 ROLLBACK TO Get_Visit_Details;
1623 Fnd_Msg_Pub.add_exc_msg( p_pkg_name => G_PKG_NAME,
1624 p_procedure_name => 'Get_Visit_Details',
1625 p_error_text => SQLERRM);
1626 Fnd_Msg_Pub.count_and_get( p_count => x_msg_count,
1627 p_data => x_msg_data,
1628 p_encoded => Fnd_Api.g_false);
1629 END Get_Visit_Details;
1630
1631 --------------------------------------------------------------------
1632 -- PROCEDURE
1633 --
1634 --
1635 -- PURPOSE
1636 -- To create a Maintainance Visit
1637 --------------------------------------------------------------------
1638 PROCEDURE Create_Visit (
1639 p_api_version IN NUMBER,
1640 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
1641 p_commit IN VARCHAR2 := Fnd_Api.g_false,
1642 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
1643 p_module_type IN VARCHAR2 := 'JSP',
1644 p_x_visit_rec IN OUT NOCOPY Visit_Rec_Type,
1645 x_return_status OUT NOCOPY VARCHAR2,
1646 x_msg_count OUT NOCOPY NUMBER,
1647 x_msg_data OUT NOCOPY VARCHAR2
1648 )
1649 IS
1650 -- Define local Variables
1651 L_API_VERSION CONSTANT NUMBER := 1.0;
1652 L_API_NAME CONSTANT VARCHAR2(30) := 'Create Visit';
1653 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
1654 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
1655
1656 l_msg_data VARCHAR2(2000);
1657 l_unit_name VARCHAR2(80);
1658 l_item_name VARCHAR2(40);
1659 l_rowid VARCHAR2(30);
1660 l_date VARCHAR2(30);
1661 l_return_status VARCHAR2(1);
1662
1663 l_proj_temp_Id NUMBER;
1664 l_msg_count NUMBER;
1665 l_count NUMBER;
1666 l_dummy NUMBER;
1667 l_organization_id NUMBER;
1668 l_department_id NUMBER;
1669 l_item_id NUMBER;
1670 l_serial_id NUMBER;
1671 l_visit_number NUMBER;
1672 l_org_id NUMBER;
1673 l_simulation_plan_id NUMBER;
1674 l_service_id NUMBER;
1675 l_date_time DATE;
1676
1677 l_time VARCHAR2(30);
1678 --TC Changes
1679 l_release_flag VARCHAR2(1) := NULL;
1680 -- Post 11.5.10 Enhancements
1681 l_priority_code VARCHAR2(30);
1682 l_proj_template_id NUMBER;
1683 -- Define local record datatypes
1684 l_Visit_rec Visit_Rec_Type := p_x_Visit_rec;
1685 -- PRAKKUM ::FP PIE :: 13-OCT-2010
1686 l_dummy_char VARCHAR2(1);
1687 l_is_comp_visit VARCHAR2(1);
1688
1689 -- Define local Cursors
1690 -- To find the next id value from visit sequence
1691 CURSOR c_seq IS
1692 SELECT Ahl_Visits_B_S.NEXTVAL
1693 FROM dual;
1694
1695 -- To find whether id already exists
1696 CURSOR c_id_exists (x_id IN NUMBER) IS
1697 SELECT 1 FROM Ahl_Visits_VL
1698 WHERE Visit_id = x_id;
1699
1700 -- To find the maximum visit number among all visits
1701 CURSOR c_visit_number IS
1702 SELECT MAX(visit_number) FROM Ahl_Visits_B;
1703
1704 -- Fix for ADS bug# 4357001.
1705 -- Changed cursor to not use ahl_mtl_items_ou_v and replaced with mtl_system_items_kfv
1706 -- and added OU stripping so that Master Org does not belong to the current user's OU.
1707 CURSOR c_unit_det (p_unit_name IN VARCHAR2) IS
1708 /* SELECT uc.name ,
1709 csis.serial_number ,
1710 csis.instance_id,
1711 mtl.inventory_item_id ,
1712 mtl.inventory_org_id
1713 FROM ahl_mtl_items_ou_v mtl,
1714 ahl_unit_config_headers uc,
1715 csi_item_instances csis
1716 WHERE uc.name = p_unit_name
1717 AND uc.csi_item_instance_id=csis.instance_id
1718 AND AHL_UTIL_UC_PKG.GET_UC_STATUS_CODE(uc.UNIT_CONFIG_HEADER_ID) in ('COMPLETE','INCOMPLETE','DEACTIVATE_QUARANTINE','QUARANTINE')
1719 AND (uc.active_end_date IS NULL OR uc.active_end_date > SYSDATE)
1720 AND csis.inventory_item_id = mtl.inventory_item_id
1721 AND csis.inv_master_organization_id = mtl.inventory_org_id
1722 AND csis.serial_number IS NOT NULL
1723 AND csis.ACTIVE_START_DATE <= sysdate AND (csis.ACTIVE_END_DATE >= sysdate OR csis.ACTIVE_END_DATE IS NULL); */
1724
1725 /* SELECT uc.name ,
1726 csis.serial_number ,
1727 csis.instance_id,
1728 mtl.inventory_item_id ,
1729 --mtl.inventory_org_id
1730 csis.inv_master_organization_id
1731 FROM mtl_system_items_kfv mtl,
1732 ahl_unit_config_headers uc,
1733 csi_item_instances csis
1734 WHERE uc.name = p_unit_name
1735 AND uc.csi_item_instance_id=csis.instance_id
1736 AND upper(AHL_UTIL_UC_PKG.GET_UC_STATUS_CODE(uc.UNIT_CONFIG_HEADER_ID))in ('COMPLETE','INCOMPLETE','DEACTIVATE_QUARANTINE','QUARANTINE')
1737 AND (uc.active_end_date IS NULL OR uc.active_end_date > SYSDATE)
1738 AND csis.inventory_item_id = mtl.inventory_item_id
1739 AND csis.inv_master_organization_id = mtl.organization_id
1740 AND csis.serial_number IS NOT NULL
1741 AND csis.ACTIVE_START_DATE <= sysdate AND (csis.ACTIVE_END_DATE >= sysdate OR csis.ACTIVE_END_DATE
1742 IS NULL)
1743 AND csis.inv_master_organization_id IN ( SELECT mp.master_organization_id FROM org_organization_definitions org
1744 , mtl_parameters mp WHERE org.organization_id = mp.organization_id
1745 AND NVL(operating_unit, mo_global.get_current_org_id())
1746 = mo_global.get_current_org_id()); */
1747
1748 -- AnRaj: Changed for fixing the perf bug 4919502
1749 SELECT uc.name ,
1750 csis.serial_number ,
1751 csis.instance_id,
1752 mtl.inventory_item_id ,
1753 csis.inv_master_organization_id
1754 FROM mtl_system_items mtl,
1755 ahl_unit_config_headers uc,
1756 csi_item_instances csis
1757 WHERE uc.name = p_unit_name
1758 AND uc.csi_item_instance_id=csis.instance_id
1759 -- Fix by jaramana on June 27, 2006 for Bug 5360066
1760 -- AND upper(AHL_UTIL_UC_PKG.GET_UC_STATUS(uc.UNIT_CONFIG_HEADER_ID))in ('COMPLETE','INCOMPLETE','DEACTIVATE_QUARANTINE','QUARANTINE')
1761 AND AHL_UTIL_UC_PKG.GET_UC_STATUS_CODE(uc.UNIT_CONFIG_HEADER_ID)in ('COMPLETE','INCOMPLETE','DEACTIVATE_QUARANTINE','QUARANTINE')
1762 AND (uc.active_end_date IS NULL OR uc.active_end_date > SYSDATE)
1763 AND csis.inventory_item_id = mtl.inventory_item_id
1764 AND csis.inv_master_organization_id = mtl.organization_id
1765 AND csis.serial_number IS NOT NULL
1766 AND csis.ACTIVE_START_DATE <= sysdate
1767 AND (csis.ACTIVE_END_DATE >= sysdate OR csis.ACTIVE_END_DATE IS NULL)
1768 AND csis.inv_master_organization_id IN
1769 ( SELECT mp.master_organization_id
1770 FROM inv_organization_info_v org, mtl_parameters mp
1771 WHERE org.organization_id = mp.organization_id
1772 AND NVL(operating_unit, mo_global.get_current_org_id()) = mo_global.get_current_org_id()
1773 );
1774 --PRAKKUM ::FP PIE :: 13-OCT-2010
1775 --To get project id given the project name
1776 CURSOR get_project_id_csr (c_project_name IN VARCHAR2)
1777 IS
1778 SELECT project_id
1779 FROM PA_PROJECTS_ALL
1780 WHERE name = c_project_name;
1781
1782 --PRAKKUM ::FP PIE :: 13-OCT-2010
1783 --To validate that the project completion is in future
1784 Cursor validate_proj_date_csr ( c_project_id IN NUMBER)
1785 IS
1786 SELECT 'X' from PA_PROJECTS_EXPEND_V
1787 WHERE project_id = c_project_id
1788 AND NVL(completion_date,SYSDATE+1)>=SYSDATE;
1789 /*Added by sowsubra*/
1790 CURSOR c_subinv_validate (p_subinv_code IN VARCHAR2, p_org_id IN VARCHAR2) IS
1791 SELECT status_id
1792 FROM mtl_secondary_inventories
1793 WHERE secondary_inventory_name = p_subinv_code
1794 AND organization_id = p_org_id;
1795
1796 /*Added by sowsubra*/
1797 CURSOR c_loc_validate (p_org_id IN NUMBER, p_subinv_code IN VARCHAR2, p_loc_seg IN VARCHAR2) IS
1798 -- jaramana on Feb 14, 2008 for bug 6819370
1799 -- Made segment19 and segment20 refer to base table
1800 SELECT mil.inventory_location_id
1801 from mtl_item_locations mil, mtl_item_locations_kfv milk
1802 where mil.organization_id = p_org_id
1803 and mil.subinventory_code = p_subinv_code
1804 and milk.concatenated_segments = p_loc_seg
1805 and mil.segment19 is NULL
1806 and mil.segment20 is NULL
1807 and mil.inventory_location_id = milk.inventory_location_id;
1808
1809 l_inv_loc_id NUMBER := 0;
1810 l_status_id NUMBER;
1811
1812
1813 BEGIN
1814 --------------------- Initialize -----------------------
1815 SAVEPOINT Create_Visit;
1816
1817 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
1818 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure');
1819 END IF;
1820
1821 -- Initialize message list if p_init_msg_list is set to TRUE.
1822 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
1823 Fnd_Msg_Pub.initialize;
1824 END IF;
1825
1826 -- Initialize API return status to success
1827 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1828
1829 -- Standard call to check for call compatibility.
1830 IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
1831 p_api_version,
1832 l_api_name,G_PKG_NAME) THEN
1833 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
1834 END IF;
1835 ------------------------Start of API Body------------------------------------
1836
1837 --------------------Value OR ID conversion---------------------------
1838 IF p_module_type = 'JSP' THEN
1839 l_Visit_rec.organization_id := NULL;
1840 l_Visit_rec.department_id := NULL;
1841 l_Visit_rec.item_instance_id := NULL;
1842 l_Visit_rec.service_request_id := NULL;
1843 END IF;
1844
1845 -- For VISIT STATUS
1846 -- To check visit status by default is Draft if not entered as input
1847 IF l_visit_rec.status_code IS NULL OR l_visit_rec.status_code = Fnd_Api.G_MISS_CHAR THEN
1848 -- VWPE ER-12424063 :: tchimira :: 15-FEB -2011
1849 --As a part of VWP enhancement, going forward Visits will be created with status 'DRAFT'.Commenting below statement for the same.
1850 --l_Visit_rec.status_code := 'PLANNING';
1851 l_Visit_rec.status_code := 'DRAFT';
1852 END IF;
1853
1854 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1855 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Status Code = ' || l_Visit_rec.status_code);
1856 END IF;
1857
1858 ----------- Starts defining all Dropdowns on Create Visit UI Screen-------------
1859 -- For SPACE CATEGORY CODE
1860 IF l_Visit_rec.space_category_code = Fnd_Api.G_MISS_CHAR THEN
1861 l_Visit_rec.space_category_code := Null;
1862 END IF;
1863
1864 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1865 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Space Category Code = ' || l_Visit_rec.space_category_code);
1866 END IF;
1867 ----------- End defining all Dropdowns on Create Visit UI Screen-------------
1868 ----------- Start defining and validate all LOVs on Create Visit UI Screen---
1869 -- For VISIT TYPE
1870 -- To find Visit Type Code when Visit Type Name has input values
1871 IF l_Visit_rec.visit_type_name IS NOT NULL AND
1872 l_Visit_rec.visit_type_name <> Fnd_Api.G_MISS_CHAR THEN
1873
1874 AHL_VWP_RULES_PVT.Check_Lookup_Name_Or_Id (
1875 p_lookup_type => 'AHL_PLANNING_VISIT_TYPE',
1876 p_lookup_code => NULL,
1877 p_meaning => l_Visit_rec.visit_type_name,
1878 p_check_id_flag => 'Y',
1879 x_lookup_code => l_Visit_rec.visit_type_code,
1880 x_return_status => l_return_status);
1881
1882 IF NVL(l_return_status, 'X') <> 'S' THEN
1883 Fnd_Message.SET_NAME('AHL','AHL_VWP_TYPE_CODE_NOT_EXISTS');
1884 Fnd_Msg_Pub.ADD;
1885 RAISE Fnd_Api.G_EXC_ERROR;
1886 END IF;
1887
1888 END IF;
1889
1890 IF l_Visit_rec.unit_name IS NOT NULL AND l_Visit_rec.unit_name <> Fnd_Api.G_MISS_CHAR THEN
1891 OPEN c_unit_det(l_Visit_rec.unit_name);
1892 FETCH c_unit_det INTO l_Visit_rec.unit_name,l_Visit_rec.serial_number,l_Visit_rec.item_instance_id,
1893 l_Visit_rec.inventory_item_id,l_Visit_rec.item_organization_id;
1894 IF c_unit_det%NOTFOUND THEN
1895 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1896 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Unit does not exists..');
1897 END IF;
1898 Fnd_Message.SET_NAME('AHL','AHL_VWP_UNIT_NOT_EXISTS');
1899 Fnd_Msg_Pub.ADD;
1900 CLOSE c_unit_det;
1901 RAISE Fnd_Api.G_EXC_ERROR;
1902 END IF;
1903 CLOSE c_unit_det;
1904
1905 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1906 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Serial Id found ' || l_Visit_rec.item_instance_id);
1907 END IF;
1908 ELSE
1909 l_Visit_rec.item_instance_id := NULL;
1910 l_Visit_rec.inventory_item_id := NULL;
1911 l_Visit_rec.item_organization_id := NULL;
1912 l_Visit_rec.serial_number := NULL;
1913 END IF;
1914
1915 -- For ORGANIZATION
1916 -- To Convert Organization Name to Organization Id
1917 IF (l_Visit_rec.org_name IS NOT NULL AND
1918 l_Visit_rec.org_name <> Fnd_Api.G_MISS_CHAR) THEN
1919
1920 AHL_VWP_RULES_PVT.Check_Org_Name_Or_Id
1921 (p_organization_id => l_Visit_rec.organization_id,
1922 p_org_name => l_Visit_rec.org_name,
1923 x_organization_id => l_organization_id,
1924 x_return_status => l_return_status,
1925 x_error_msg_code => l_msg_data);
1926
1927 IF NVL(l_return_status,'x') <> 'S' THEN
1928 Fnd_Message.SET_NAME('AHL','AHL_VWP_ORG_NOT_EXISTS');
1929 Fnd_Msg_Pub.ADD;
1930 RAISE Fnd_Api.G_EXC_ERROR;
1931 END IF;
1932 END IF;
1933
1934 IF (l_Visit_rec.org_name IS NOT NULL AND
1935 l_Visit_rec.org_name <> Fnd_Api.G_MISS_CHAR ) THEN
1936 --Assign the returned value
1937 l_Visit_rec.organization_id := l_organization_id;
1938 /* ELSE
1939 l_Visit_rec.organization_id := NULL;*/
1940 END IF;
1941
1942 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1943 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Org Name/ID' || l_Visit_rec.org_name || '-' || l_Visit_rec.organization_id );
1944 END IF;
1945
1946 -- For DEPARTMENT
1947 -- To convert Department Name to Department Id
1948 IF (l_Visit_rec.dept_name IS NOT NULL AND
1949 l_Visit_rec.dept_name <> Fnd_Api.G_MISS_CHAR ) OR
1950 (l_Visit_rec.department_id IS NOT NULL AND
1951 l_Visit_rec.department_id <> Fnd_Api.G_MISS_NUM) THEN
1952
1953 AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id
1954 (p_organization_id => l_Visit_rec.organization_id,
1955 p_dept_name => l_Visit_rec.dept_name,
1956 p_department_id => l_Visit_rec.department_id,
1957 x_department_id => l_department_id,
1958 x_return_status => l_return_status,
1959 x_error_msg_code => l_msg_data);
1960
1961 IF NVL(l_return_status,'x') <> 'S' THEN
1962 Fnd_Message.SET_NAME('AHL','AHL_VWP_DEPT_NOT_EXISTS');
1963 Fnd_Msg_Pub.ADD;
1964 RAISE Fnd_Api.G_EXC_ERROR;
1965 END IF;
1966
1967 AHL_VWP_RULES_PVT.CHECK_DEPARTMENT_SHIFT
1968 (p_dept_id => l_department_id,
1969 x_return_status => l_return_status);
1970
1971 IF NVL(l_return_status,'x') <> 'S' THEN
1972 Fnd_Message.SET_NAME('AHL','AHL_VWP_NO_DEPT_SHIFT');
1973 Fnd_Msg_Pub.ADD;
1974 RAISE Fnd_Api.G_EXC_ERROR;
1975 END IF;
1976 END IF;
1977
1978 IF (l_Visit_rec.dept_name IS NOT NULL AND l_Visit_rec.dept_name <> Fnd_Api.G_MISS_CHAR ) THEN
1979 --Assign the returned value
1980 l_Visit_rec.department_id := l_department_id;
1981 /* ELSE
1982 l_Visit_rec.department_id := NULL;*/
1983 END IF;
1984
1985 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1986 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Dept Id/Name = ' || l_Visit_rec.department_id || ' - ' || l_Visit_rec.dept_name);
1987 END IF;
1988
1989 -- For SERVICE REQUEST
1990 -- To Convert Service Request Number to Service Request Id
1991 IF (l_Visit_rec.service_request_number IS NOT NULL AND l_Visit_rec.service_request_number <> Fnd_Api.G_MISS_CHAR ) THEN
1992 AHL_VWP_RULES_PVT.Check_SR_Request_Number_Or_Id
1993 (p_service_id => l_Visit_rec.service_request_id,
1994 p_service_number => l_Visit_rec.service_request_number,
1995 x_service_id => l_service_id,
1996 x_return_status => l_return_status,
1997 x_error_msg_code => l_msg_data);
1998
1999 IF NVL(l_return_status,'x') <> 'S' THEN
2000 Fnd_Message.SET_NAME('AHL','AHL_VWP_SERVICE_REQ_NOT_EXISTS');
2001 Fnd_Msg_Pub.ADD;
2002 RAISE Fnd_Api.g_exc_error;
2003 END IF;
2004
2005 --Assign the returned value
2006 l_Visit_rec.service_request_id := l_service_id;
2007
2008 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2009 fnd_log.string(fnd_log.level_statement,L_DEBUG,'SR Id/Number = ' || l_Visit_rec.service_request_id || '-' || l_Visit_rec.service_request_number );
2010 END IF;
2011 END IF;
2012
2013 ----------- End defining and validate all LOVs on Create Visit UI Screen---
2014 -- For VISIT START DATE TIME
2015 -- Convert time stamp for start date time
2016 IF l_Visit_rec.START_DATE IS NOT NULL AND l_Visit_rec.START_DATE <> fnd_api.g_miss_date THEN
2017 IF (l_Visit_rec.START_HOUR IS NOT NULL AND l_visit_rec.START_MIN IS NOT NULL)THEN
2018 l_date := TO_CHAR(l_Visit_rec.START_DATE, 'DD-MM-YYYY ') || l_Visit_rec.start_hour ||':'|| l_visit_rec.start_min;
2019 l_Visit_rec.START_DATE := TO_DATE(l_date, 'DD-MM-YYYY HH24:MI');
2020 ELSIF l_Visit_rec.START_HOUR IS NOT NULL THEN
2021 l_date := TO_CHAR(l_Visit_rec.START_DATE, 'DD-MM-YYYY ') || l_Visit_rec.start_hour || ':00';
2022 l_Visit_rec.START_DATE := TO_DATE(l_date, 'DD-MM-YYYY HH24:MI');
2023 ELSE
2024 l_date := TO_CHAR(l_Visit_rec.START_DATE, 'DD-MM-YYYY ') || '00' || ':00';
2025 l_Visit_rec.START_DATE := TO_DATE(l_date, 'DD-MM-YYYY HH24:MI');
2026 END IF;
2027 END IF;
2028
2029 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2030 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Start Date' || l_Visit_rec.START_DATE);
2031 END IF;
2032
2033 --Added by amagrawa for Transit Visit
2034 -- For VISIT PLANNED END DATE TIME
2035 -- Convert time stamp for planned end date time
2036 IF l_Visit_rec.plan_end_date IS NOT NULL AND l_Visit_rec.plan_end_date <> fnd_api.g_miss_date THEN
2037 IF (l_Visit_rec.plan_end_HOUR IS NOT NULL AND l_visit_rec.plan_end_MIN IS NOT NULL)THEN
2038 l_date := TO_CHAR(l_Visit_rec.plan_end_date, 'DD-MM-YYYY ') || l_Visit_rec.plan_end_hour || ':'||l_visit_rec.plan_end_min;
2039 l_Visit_rec.plan_end_date := TO_DATE(l_date, 'DD-MM-YYYY HH24:MI');
2040 ELSIF l_Visit_rec.plan_end_hour IS NOT NULL THEN
2041 l_date := TO_CHAR(l_Visit_rec.plan_end_date, 'DD-MM-YYYY ') || l_Visit_rec.plan_end_hour || ':00';
2042 l_Visit_rec.plan_end_date := TO_DATE(l_date, 'DD-MM-YYYY HH24:MI');
2043 ELSE
2044 l_date := TO_CHAR(l_Visit_rec.plan_end_date, 'DD-MM-YYYY ') || '00' || ':00';
2045 l_Visit_rec.plan_end_date := TO_DATE(l_date, 'DD-MM-YYYY HH24:MI');
2046 END IF;
2047 END IF;
2048
2049 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2050 fnd_log.string(fnd_log.level_statement,L_DEBUG,'End Date' || l_Visit_rec.plan_end_date);
2051 END IF;
2052
2053 -- To validate visit start date should be less than plan end date
2054 IF l_Visit_rec.START_DATE IS NOT NULL AND l_Visit_rec.plan_end_date IS NOT NULL THEN
2055 IF (l_Visit_rec.START_DATE > l_Visit_rec.plan_end_date) THEN
2056 Fnd_Message.SET_NAME('AHL','AHL_VWP_START_DT_GTR_CLOSE_DT');
2057 Fnd_Msg_Pub.ADD;
2058 RAISE Fnd_Api.G_EXC_ERROR;
2059 END IF;
2060 END IF;
2061 -- End of changes by amagrawa
2062 -- For SIMULATION PLAN
2063 -- To check whether any primary plan exists in LTP
2064 IF l_visit_rec.SIMULATION_PLAN_ID = Fnd_Api.G_MISS_NUM THEN
2065 l_visit_rec.SIMULATION_PLAN_ID := NULL;
2066 END IF;
2067
2068 IF (l_Visit_rec.SIMULATION_PLAN_ID IS NULL) THEN
2069 -- SKPATHAK :: Bug #12856492 :: 10-Aug-2012 :: Since new simulation type (UMP) has been added recently,
2070 -- need to check for primary plans only in existing LTP siulation plans for which simulation_type is null
2071 SELECT SIMULATION_PLAN_ID INTO l_simulation_plan_id
2072 FROM AHL_SIMULATION_PLANS_VL WHERE primary_plan_flag = 'Y' AND simulation_type IS NULL;
2073
2074 l_Visit_rec.SIMULATION_PLAN_ID := l_simulation_plan_id;
2075
2076 IF l_simulation_plan_id IS NULL THEN
2077 Fnd_Message.SET_NAME('AHL','AHL_VWP_PRI_PLN_NOT_EXIST');
2078 Fnd_Msg_Pub.ADD;
2079 RAISE Fnd_Api.G_EXC_ERROR;
2080 END IF;
2081 END IF;
2082
2083 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2084 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Simulation Id' || l_Visit_rec.SIMULATION_PLAN_ID);
2085 END IF;
2086
2087 -- Post 11.5.10 Enhancements
2088 -- For PRIORITY
2089 IF l_Visit_rec.priority_value IS NOT NULL AND l_Visit_rec.priority_value <> Fnd_Api.G_MISS_CHAR THEN
2090 AHL_VWP_RULES_PVT.Check_Lookup_Name_Or_Id
2091 (p_lookup_type => 'AHL_VWP_VISIT_PRIORITY',
2092 p_lookup_code => l_Visit_rec.priority_code,
2093 p_meaning => l_Visit_rec.priority_value,
2094 p_check_id_flag => 'Y',
2095 x_lookup_code => l_priority_code,
2096 x_return_status => l_return_status);
2097
2098 IF NVL(l_return_status, 'X') <> 'S' THEN
2099 Fnd_Message.SET_NAME('AHL','AHL_VWP_PRI_NOT_EXISTS');
2100 Fnd_Msg_Pub.ADD;
2101 RAISE Fnd_Api.G_EXC_ERROR;
2102 END IF;
2103 l_visit_rec.priority_code := l_priority_code;
2104 END IF;
2105
2106 -- Post 11.5.10 Enhancements
2107 -- For PROJECT TEMPLATE
2108 --PRAKKUM ::FP PIE :: 13-OCT-2010:: BEGIN
2109 IF l_visit_rec.proj_template_name IS NOT NULL THEN
2110 IF l_visit_rec.project_name IS NOT NULL THEN
2111 Fnd_Message.SET_NAME('AHL', 'AHL_VWP_INV_PROJ_AND_TEMP');
2112 Fnd_Msg_Pub.ADD;
2113 RAISE Fnd_Api.G_EXC_ERROR;
2114 ELSE --i.e. name is null but template is not null
2115 AHL_VWP_RULES_PVT.Check_Project_Template_Or_Id
2116 ( p_proj_temp_name => l_visit_rec.proj_template_name,
2117 x_project_id => l_proj_template_id,
2118 x_return_status => l_return_status,
2119 x_error_msg_code => l_msg_data);
2120
2121 IF NVL(l_return_status, 'X') <> 'S' THEN
2122 Fnd_Message.SET_NAME('AHL','AHL_VWP_INVALID_PROTEM');
2123 Fnd_Msg_Pub.ADD;
2124 RAISE Fnd_Api.G_EXC_ERROR;
2125 END IF;
2126 l_visit_rec.proj_template_id := l_proj_template_id;
2127 END IF; --project name not null
2128 ELSE
2129 -- If Project Template Name is null
2130 IF l_visit_rec.project_name IS NULL THEN
2131 l_visit_rec.proj_template_id := FND_PROFILE.VALUE('AHL_DEFAULT_PA_TEMPLATE_ID');
2132 ELSE --project template name is null but project name is not null
2133 OPEN get_project_id_csr (l_visit_rec.project_name);
2134 FETCH get_project_id_csr INTO l_visit_rec.project_id;
2135 IF get_project_id_csr%NOTFOUND THEN
2136 Fnd_Message.SET_NAME('AHL', 'AHL_VWP_INV_PROJ_NAME');
2137 Fnd_Message.Set_Token('PROJ_NAME', l_visit_rec.project_name);
2138 Fnd_Msg_Pub.ADD;
2139 CLOSE get_project_id_csr;
2140 RAISE Fnd_Api.G_EXC_ERROR;
2141 END IF;
2142 CLOSE get_project_id_csr;
2143 END IF;
2144 END IF;
2145 IF l_visit_rec.project_id IS NOT NULL THEN
2146 OPEN validate_proj_date_csr (l_visit_rec.project_id);
2147 FETCH validate_proj_date_csr INTO l_dummy_char;
2148 IF validate_proj_date_csr%NOTFOUND THEN
2149 Fnd_Message.SET_NAME('AHL', 'AHL_VWP_INV_PROJECT');
2150 Fnd_Message.Set_Token('PROJ_NAME', l_visit_rec.project_name);
2151 Fnd_Message.Set_Token('PROJ_ID', l_visit_rec.project_id);
2152 Fnd_Msg_Pub.ADD;
2153 CLOSE validate_proj_date_csr;
2154 RAISE Fnd_Api.G_EXC_ERROR;
2155 END IF;
2156 CLOSE validate_proj_date_csr;
2157 END IF;
2158 --PRAKKUM ::FP PIE :: 13-OCT-2009 :: END
2159
2160
2161 /*Added by sowsubra - starts - Issue#86 changes*/
2162 l_dummy := NULL;
2163
2164 IF ((l_visit_rec.subinventory IS NOT NULL) AND (l_visit_rec.locator_segment IS NULL)) THEN
2165 Fnd_Message.SET_NAME('AHL','AHL_VWP_LOCATOR_NULL');
2166 Fnd_Msg_Pub.ADD;
2167 RAISE Fnd_Api.G_EXC_ERROR;
2168 ELSIF ((l_visit_rec.subinventory IS NULL) AND (l_visit_rec.locator_segment IS NOT NULL))THEN
2169 Fnd_Message.SET_NAME('AHL','AHL_VWP_SUBINVENTORY_NULL');
2170 Fnd_Msg_Pub.ADD;
2171 RAISE Fnd_Api.G_EXC_ERROR;
2172 ELSIF ((l_visit_rec.subinventory IS NOT NULL) AND (l_visit_rec.locator_segment IS NOT NULL)) THEN
2173
2174 OPEN c_subinv_validate (l_visit_rec.subinventory, l_visit_rec.organization_id);
2175 FETCH c_subinv_validate INTO l_status_id;
2176 IF (c_subinv_validate%NOTFOUND) THEN
2177 CLOSE c_subinv_validate;
2178 Fnd_Message.SET_NAME('AHL','AHL_VWP_SUBINV_NOT_EXISTS');
2179 Fnd_Msg_Pub.ADD;
2180 RAISE Fnd_Api.G_EXC_ERROR;
2181 ELSE
2182 IF l_status_id in (NVL(fnd_profile.value('AHL_MTL_MAT_STATUS_UNSERVICABLE'), -1), NVL(fnd_profile.value('AHL_MTL_MAT_STATUS_MRB'), -1)) THEN
2183 CLOSE c_subinv_validate;
2184 FND_MESSAGE.SET_NAME('AHL', 'AHL_SUBINVENTORY_NOT_SVC');
2185 FND_MESSAGE.Set_Token('INV', l_visit_rec.subinventory);
2186 FND_MSG_PUB.ADD;
2187 RAISE Fnd_Api.G_EXC_ERROR;
2188 END IF;
2189 END IF;
2190 CLOSE c_subinv_validate;
2191
2192 l_dummy := NULL;
2193
2194 OPEN c_loc_validate (l_visit_rec.organization_id, l_visit_rec.subinventory,l_visit_rec.locator_segment );
2195 FETCH c_loc_validate INTO l_inv_loc_id;
2196 IF c_loc_validate%NOTFOUND THEN
2197 Fnd_Message.SET_NAME('AHL','AHL_VWP_PHY_LOCATOR_NOT_EXISTS');
2198 Fnd_Msg_Pub.ADD;
2199 CLOSE c_loc_validate;
2200 RAISE Fnd_Api.G_EXC_ERROR;
2201 END IF;
2202 CLOSE c_loc_validate;
2203
2204 l_visit_rec.inv_locator_id := l_inv_loc_id;
2205 ELSE
2206 l_visit_rec.inv_locator_id := NULL;
2207 END IF;
2208 /*Added by sowsubra - end - FP Issue#86 changes*/
2209
2210 -- SATHAPLI::Component Maintenance Planning Project, 02-Nov-2011, start
2211 -- set the Planning and In-Repair locators in the record, before Validate_Visit call
2212 -- Planning
2213 IF (l_visit_rec.comp_planning_subinv IS NOT NULL AND l_visit_rec.comp_planning_loc_seg IS NOT NULL) THEN
2214 l_status_id := NULL;
2215 OPEN c_subinv_validate (l_visit_rec.comp_planning_subinv, l_visit_rec.organization_id);
2216 FETCH c_subinv_validate INTO l_status_id;
2217 CLOSE c_subinv_validate;
2218
2219 IF (l_status_id <> NVL(FND_PROFILE.VALUE('AHL_MTL_MAT_STATUS_UNSERVICABLE'), l_status_id)) THEN
2220 -- Planning and In-Repair Sub Inventory should be Unserviceable.
2221 FND_MESSAGE.SET_NAME('AHL', 'AHL_CMP_SUBINV_NOT_UNSVC');
2222 FND_MSG_PUB.ADD;
2223 RAISE FND_API.G_EXC_ERROR;
2224 END IF;
2225
2226 l_inv_loc_id := NULL;
2227 OPEN c_loc_validate (l_visit_rec.organization_id, l_visit_rec.comp_planning_subinv, l_visit_rec.comp_planning_loc_seg);
2228 FETCH c_loc_validate INTO l_inv_loc_id;
2229 CLOSE c_loc_validate;
2230
2231 l_visit_rec.comp_planning_loc_id := l_inv_loc_id;
2232 ELSE
2233 l_visit_rec.comp_planning_loc_id := NULL;
2234 END IF;
2235
2236 -- In-Repair
2237 IF (l_visit_rec.comp_inrepair_subinv IS NOT NULL AND l_visit_rec.comp_inrepair_loc_seg IS NOT NULL) THEN
2238 l_status_id := NULL;
2239 OPEN c_subinv_validate (l_visit_rec.comp_inrepair_subinv, l_visit_rec.organization_id);
2240 FETCH c_subinv_validate INTO l_status_id;
2241 CLOSE c_subinv_validate;
2242
2243 IF (l_status_id <> NVL(FND_PROFILE.VALUE('AHL_MTL_MAT_STATUS_UNSERVICABLE'), l_status_id)) THEN
2244 -- Planning and In-Repair Sub Inventory should be Unserviceable.
2245 FND_MESSAGE.SET_NAME('AHL', 'AHL_CMP_SUBINV_NOT_UNSVC');
2246 FND_MSG_PUB.ADD;
2247 RAISE FND_API.G_EXC_ERROR;
2248 END IF;
2249
2250 l_inv_loc_id := NULL;
2251 OPEN c_loc_validate (l_visit_rec.organization_id, l_visit_rec.comp_inrepair_subinv, l_visit_rec.comp_inrepair_loc_seg);
2252 FETCH c_loc_validate INTO l_inv_loc_id;
2253 CLOSE c_loc_validate;
2254
2255 l_visit_rec.comp_inrepair_loc_id := l_inv_loc_id;
2256 ELSE
2257 l_visit_rec.comp_inrepair_loc_id := NULL;
2258 END IF;
2259
2260 -- Physical, Planning and In-Repair locators should be different
2261 -- NOTE: 1) no need to check for NULL explicitly
2262 -- 2) ideally, physical sub inventory would be serviceable, whereas other two would be unserviceable
2263 IF (l_visit_rec.inv_locator_id = l_visit_rec.comp_planning_loc_id OR
2264 l_visit_rec.inv_locator_id = l_visit_rec.comp_inrepair_loc_id OR
2265 l_visit_rec.comp_planning_loc_id = l_visit_rec.comp_inrepair_loc_id) THEN
2266 -- Please set different locators for Physical, Planning and In-Repair Sub Inventories.
2267 FND_MESSAGE.SET_NAME('AHL', 'AHL_CMP_DIFF_LOCATORS');
2268 FND_MSG_PUB.ADD;
2269 RAISE FND_API.G_EXC_ERROR;
2270 END IF;
2271 -- SATHAPLI::Component Maintenance Planning Project, 02-Nov-2011, end
2272
2273 -------------------------------- Validate -----------------------------------------
2274 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2275 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Validate_Visit');
2276 END IF;
2277
2278 Validate_Visit (
2279 p_api_version => l_api_version,
2280 p_init_msg_list => p_init_msg_list,
2281 p_commit => Fnd_Api.g_false,
2282 p_validation_level => p_validation_level,
2283 p_Visit_rec => l_Visit_rec,
2284 x_return_status => l_return_status,
2285 x_msg_count => x_msg_count,
2286 x_msg_data => x_msg_data
2287 );
2288
2289 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2290 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Validate_Visit - l_return_status : '||l_return_status);
2291 END IF;
2292
2293 -- Check for the ID.
2294 IF (l_Visit_rec.VISIT_ID = Fnd_Api.g_miss_num OR l_Visit_rec.VISIT_ID IS Null) THEN
2295 -- If the ID is not passed into the API, then
2296 -- grab a value from the sequence.
2297 OPEN c_seq;
2298 FETCH c_seq INTO l_Visit_rec.VISIT_ID;
2299 CLOSE c_seq;
2300
2301 -- Check to be sure that the sequence does not exist.
2302 OPEN c_id_exists (l_Visit_rec.VISIT_ID);
2303 FETCH c_id_exists INTO l_dummy;
2304 CLOSE c_id_exists;
2305
2306 -- If the value for the ID already exists, then
2307 -- l_dummy would be populated with '1', otherwise, it receives NULL.
2308 IF l_dummy IS NOT NULL THEN
2309 Fnd_Message.SET_NAME('AHL','AHL_VWP_SEQUENCE_NOT_EXISTS');
2310 Fnd_Msg_Pub.ADD;
2311 END IF;
2312
2313 -- For all optional fields check if its g_miss_num/g_miss_char/g_miss_date
2314 -- then Null else the value call Default_Missing_Attribs procedure
2315 Default_Missing_Attribs
2316 ( p_x_visit_rec => l_Visit_rec );
2317
2318 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2319 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit ID : '||l_Visit_rec.VISIT_ID);
2320 END IF;
2321 END IF;
2322
2323 --Standard check to count messages
2324 l_msg_count := Fnd_Msg_Pub.count_msg;
2325
2326 IF l_msg_count > 0 THEN
2327 x_msg_count := l_msg_count;
2328 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2329 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2330 END IF;
2331
2332 -- Check for Visit Number
2333 OPEN c_visit_number;
2334 FETCH c_visit_number INTO l_visit_number;
2335 CLOSE c_visit_number;
2336
2337 IF l_visit_number IS NOT NULL THEN
2338 l_visit_number := l_visit_number + 1;
2339 ELSE
2340 l_visit_number := 1;
2341 END IF;
2342
2343 l_Visit_rec.VISIT_NUMBER := l_visit_number;
2344
2345 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2346 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit ID =' || l_Visit_rec.VISIT_ID);
2347 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit Number =' || l_Visit_rec.VISIT_NUMBER);
2348 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit Name =' || l_Visit_rec.VISIT_Name);
2349 END IF;
2350
2351 -- Transit Check Changes Senthil.
2352 IF l_Visit_rec.unit_schedule_id IS NOT NULL
2353 AND l_Visit_rec.unit_schedule_id <> FND_API.G_MISS_NUM THEN
2354
2355 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2356 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_UA_FLIGHT_SCHEDULES_PVT.Validate_Flight_Schedule');
2357 END IF;
2358
2359 -- Validate with UMP API
2360 AHL_UA_FLIGHT_SCHEDULES_PVT.Validate_Flight_Schedule
2361 (
2362 P_API_VERSION => 1.0,
2363 X_RETURN_STATUS => l_return_status,
2364 X_MSG_COUNT => l_msg_count,
2365 X_MSG_DATA => l_msg_data,
2366 P_UNIT_CONFIG_ID => l_Visit_rec.unit_header_id,
2367 P_UNIT_SCHEDULE_ID => l_Visit_rec.unit_schedule_id
2368 );
2369
2370 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2371 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_UA_FLIGHT_SCHEDULES_PVT.Validate_Flight_Schedule - l_return_status : '||l_return_status);
2372 END IF;
2373
2374 IF l_msg_count > 0 THEN
2375 X_msg_count := l_msg_count;
2376 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2377 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2378 END IF;
2379
2380 -- Instance ID is madatory for transit visit
2381 IF l_Visit_rec.item_instance_id IS NULL
2382 OR l_Visit_rec.item_instance_id = FND_API.G_MISS_NUM THEN
2383 Fnd_Message.SET_NAME('AHL','AHL_VWP_TC_UNIT_REQ');
2384 Fnd_Msg_Pub.ADD;
2385 END IF;
2386
2387 -- Planned Start Date is madatory for transit visit
2388 IF l_visit_rec.START_DATE IS NULL OR l_visit_rec.START_DATE = FND_API.g_miss_date THEN
2389 Fnd_Message.SET_NAME('AHL','AHL_VWP_TC_ST_DT_REQ');
2390 Fnd_Msg_Pub.ADD;
2391 END IF;
2392
2393 -- Planned End Date is madatory for transit visit
2394 /*
2395 IF p_module_type = 'JSP' AND ( l_visit_rec.PLAN_END_DATE IS NULL
2396 OR l_visit_rec.PLAN_END_DATE = FND_API.g_miss_date) THEN
2397 l_visit_rec.PLAN_END_DATE:= l_visit_rec.START_DATE + (FND_PROFILE.VALUE('AHL_TRANSIT_VISIT_DEFAULT_DURATION')/1440);
2398 END IF;
2399 */
2400 ELSE
2401 l_Visit_rec.unit_schedule_id := NULL;
2402 END IF;
2403
2404 --Standard check to count messages
2405 l_msg_count := Fnd_Msg_Pub.count_msg;
2406
2407 IF l_msg_count > 0 THEN
2408 x_msg_count := l_msg_count;
2409 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2410 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2411 END IF;
2412
2413 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: start
2414 -- If the start date of the visit is not null and less than sysdate, the it is past dated visit. So pass the flag value accordingly
2415 IF (l_visit_rec.START_DATE IS NOT NULL) THEN
2416 IF (l_visit_rec.START_DATE < SYSDATE ) THEN
2417 l_Visit_rec.PAST_DATED_VISIT_FLAG := 'Y';
2418 ELSE
2419 l_Visit_rec.PAST_DATED_VISIT_FLAG := 'N';
2420 END IF;
2421 END IF;
2422 IF (l_log_statement >= l_log_current_level) THEN
2423 fnd_log.string(l_log_statement,
2424 L_DEBUG,
2425 'Past date visit flag is: '||l_Visit_rec.PAST_DATED_VISIT_FLAG);
2426 END IF;
2427 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: end
2428
2429 -------------------------- Insert --------------------------
2430 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2431 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Ahl_Visits_Pkg.Insert_Row');
2432 END IF;
2433 -- Invoke the table handler to create a record
2434 -- Post 11.5.10 Enhancements
2435 -- Added Priority and Project Template Id
2436 -- Added Unit Schedule Id.
2437
2438 -- SKPATHAK :: AVF ER: 13416865 :: 25-NOV-2011
2439 IF (l_Visit_rec.VISIT_NAME = 'Auto-Visit') THEN
2440 l_Visit_rec.VISIT_NAME := l_Visit_rec.VISIT_NAME || '-' || to_char(l_visit_number);
2441 END IF;
2442
2443 Ahl_Visits_Pkg.Insert_Row (
2444 X_ROWID => l_rowid,
2445 X_VISIT_ID => l_Visit_rec.VISIT_ID,
2446 X_VISIT_NUMBER => l_visit_number,
2447 X_VISIT_TYPE_CODE => l_Visit_rec.VISIT_TYPE_CODE,
2448 X_SIMULATION_PLAN_ID => l_Visit_rec.SIMULATION_PLAN_ID,
2449 X_ITEM_INSTANCE_ID => l_Visit_rec.ITEM_INSTANCE_ID,
2450 X_INVENTORY_ITEM_ID => l_Visit_rec.INVENTORY_ITEM_ID,
2451 X_ITEM_ORGANIZATION_ID => l_Visit_rec.ITEM_ORGANIZATION_ID,
2452 X_ASSO_PRIMARY_VISIT_ID => l_Visit_rec.ASSO_PRIMARY_VISIT_ID,
2453 X_SIMULATION_DELETE_FLAG => 'N',
2454 X_TEMPLATE_FLAG => 'N',
2455 X_OUT_OF_SYNC_FLAG => l_Visit_rec.OUT_OF_SYNC_FLAG,
2456 X_PROJECT_FLAG => 'Y',
2457 X_PROJECT_ID => l_Visit_rec.PROJECT_ID,
2458 X_SERVICE_REQUEST_ID => l_Visit_rec.SERVICE_REQUEST_ID,
2459 X_SPACE_CATEGORY_CODE => l_Visit_rec.SPACE_CATEGORY_CODE,
2460 X_SCHEDULE_DESIGNATOR => NULL,
2461 X_ATTRIBUTE_CATEGORY => l_Visit_rec.ATTRIBUTE_CATEGORY,
2462 X_ATTRIBUTE1 => l_Visit_rec.ATTRIBUTE1,
2463 X_ATTRIBUTE2 => l_Visit_rec.ATTRIBUTE2,
2464 X_ATTRIBUTE3 => l_Visit_rec.ATTRIBUTE3,
2465 X_ATTRIBUTE4 => l_Visit_rec.ATTRIBUTE4,
2466 X_ATTRIBUTE5 => l_Visit_rec.ATTRIBUTE5,
2467 X_ATTRIBUTE6 => l_Visit_rec.ATTRIBUTE6,
2468 X_ATTRIBUTE7 => l_Visit_rec.ATTRIBUTE7,
2469 X_ATTRIBUTE8 => l_Visit_rec.ATTRIBUTE8,
2470 X_ATTRIBUTE9 => l_Visit_rec.ATTRIBUTE9,
2471 X_ATTRIBUTE10 => l_Visit_rec.ATTRIBUTE10,
2472 X_ATTRIBUTE11 => l_Visit_rec.ATTRIBUTE11,
2473 X_ATTRIBUTE12 => l_Visit_rec.ATTRIBUTE12,
2474 X_ATTRIBUTE13 => l_Visit_rec.ATTRIBUTE13,
2475 X_ATTRIBUTE14 => l_Visit_rec.ATTRIBUTE14,
2476 X_ATTRIBUTE15 => l_Visit_rec.ATTRIBUTE15,
2477 X_OBJECT_VERSION_NUMBER => 1,
2478 X_ORGANIZATION_ID => l_Visit_rec.ORGANIZATION_ID,
2479 X_DEPARTMENT_ID => l_Visit_rec.DEPARTMENT_ID,
2480 X_STATUS_CODE => l_Visit_rec.STATUS_CODE,
2481 X_START_DATE_TIME => l_visit_rec.START_DATE,
2482 X_CLOSE_DATE_TIME => l_visit_rec.PLAN_END_DATE,
2483 X_PRICE_LIST_ID => NULL,
2484 X_ESTIMATED_PRICE => NULL,
2485 X_ACTUAL_PRICE => NULL,
2486 X_OUTSIDE_PARTY_FLAG => 'N',
2487 X_ANY_TASK_CHG_FLAG => 'N',
2488 X_VISIT_NAME => l_Visit_rec.VISIT_NAME,
2489 X_DESCRIPTION => l_Visit_rec.DESCRIPTION,
2490 X_CREATION_DATE => SYSDATE,
2491 X_CREATED_BY => Fnd_Global.USER_ID,
2492 X_LAST_UPDATE_DATE => SYSDATE,
2493 X_LAST_UPDATED_BY => Fnd_Global.USER_ID,
2494 X_LAST_UPDATE_LOGIN => Fnd_Global.LOGIN_ID,
2495 X_PRIORITY_CODE => l_visit_rec.priority_code,
2496 X_PROJECT_TEMPLATE_ID => l_visit_rec.proj_template_id,
2497 X_UNIT_SCHEDULE_ID => l_Visit_rec.unit_schedule_id,
2498 --PRAKKUM ::FP PIE :: 13-OCT-2010
2499 X_TOP_PROJECT_TASK_ID => NULL,
2500 X_INV_LOCATOR_ID => l_Visit_rec.inv_locator_id, /*Added by sowsubra*/
2501 -- SATHAPLI::Component Maintenance Planning Project, 02-Nov-2011
2502 -- set the Planning and In-Repair locators
2503 X_COMP_PLANNING_LOC_ID => l_visit_rec.comp_planning_loc_id,
2504 X_COMP_INREPAIR_LOC_ID => l_visit_rec.comp_inrepair_loc_id,
2505 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: start
2506 X_PAST_DATED_VISIT_FLAG => l_Visit_rec.PAST_DATED_VISIT_FLAG,
2507 X_FIRMED_FLAG => 'N',
2508 X_LOCKED_FLAG => 'N',
2509 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: end
2510 --TCHIMIRA :: 14-Jun-2012 :: ER 14015560 ::added below flag
2511 X_AUTO_VISIT_TYPE_FLAG =>l_Visit_rec.AUTO_VISIT_TYPE_FLAG
2512 );
2513
2514 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2515 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Ahl_Visits_Pkg.Insert_Row');
2516 END IF;
2517
2518 -- set OUT value
2519 p_x_visit_rec.VISIT_ID := l_Visit_rec.VISIT_ID;
2520
2521 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
2522 * There is no need to create any Stage tasks for Component Visits
2523 * as there won't be any Stage associated with them.
2524 */
2525 l_is_comp_visit := AHL_CMP_UTIL_PKG.Is_Comp_Visit (l_visit_rec.visit_id);
2526 IF (l_is_comp_visit = 'N') THEN
2527
2528 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2529 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_VISITS_STAGES_PVT.CREATE_STAGES');
2530 END IF;
2531
2532 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063
2533 -- The below call is no more needed since going forward default stages need not be created during visit creation
2534 -----CREATE STAGES IF VISIT HAS BEEN CREATED SUCESSFULLY--------
2535 /*AHL_VWP_VISITS_STAGES_PVT.CREATE_STAGES
2536 ( p_api_version => p_api_version,
2537 p_init_msg_list => p_init_msg_list,
2538 p_commit => Fnd_Api.g_false,
2539 p_validation_level => p_validation_level,
2540 p_module_type => p_module_type,
2541 p_visit_id => l_Visit_rec.VISIT_ID,
2542 x_return_status => x_return_status,
2543 x_msg_count => x_msg_count,
2544 x_msg_data => x_msg_data
2545 );
2546
2547 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2548 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_VISITS_STAGES_PVT.CREATE_STAGES - x_return_status : '||x_return_status);
2549 END IF;
2550 */
2551
2552 -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125 :: START
2553 -- Create the default stage task
2554 AHL_VWP_TASKS_PVT.Create_Stage_Tasks (
2555 p_api_version => p_api_version,
2556 p_init_msg_list => Fnd_Api.G_FALSE,
2557 p_commit => Fnd_Api.G_FALSE,
2558 p_validation_level => p_validation_level,
2559 p_module_type => p_module_type,
2560 p_stage_id => null,
2561 p_visit_id => l_Visit_rec.VISIT_ID,
2562 x_return_status => l_return_status,
2563 x_msg_count => l_msg_count,
2564 x_msg_data => l_msg_data
2565 );
2566
2567 IF (l_log_statement >= l_log_current_level) THEN
2568 fnd_log.string(l_log_statement,
2569 L_DEBUG,
2570 'After Calling AHL_VWP_PROJ_PROD_PVT.plan_visit. Return Status = ' || l_return_status );
2571 END IF;
2572
2573 IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
2574 x_msg_count := l_msg_count;
2575 x_return_status := l_return_status;
2576 IF l_return_status = Fnd_Api.g_ret_sts_error THEN
2577 RAISE Fnd_Api.g_exc_error;
2578 ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2579 RAISE Fnd_Api.g_exc_unexpected_error;
2580 END IF;
2581 END IF;
2582 -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125 :: END
2583 END IF; -- if l_is_comp_visit = 'N'
2584
2585 -- TCHIMIRA :: Changes for Component Maintenance Planning :: 10-JAN-2012 :: START
2586 -- if the visit is component type then do not flag the visit as past dated irrespective of the start date
2587 IF (l_is_comp_visit = 'Y') THEN
2588 --Update the visit table and set past dated visit flag to 'N'
2589 UPDATE AHL_VISITS_B
2590 set PAST_DATED_VISIT_FLAG = 'N',
2591 OBJECT_VERSION_NUMBER = object_version_number + 1,
2592 LAST_UPDATE_DATE = SYSDATE,
2593 LAST_UPDATED_BY = Fnd_Global.USER_ID,
2594 LAST_UPDATE_LOGIN = Fnd_Global.LOGIN_ID
2595 WHERE VISIT_ID = l_visit_rec.visit_id;
2596 END IF;
2597 -- TCHIMIRA :: Changes for Component Maintenance Planning :: 10-JAN-2012 :: END
2598 IF l_Visit_rec.visit_type_code IS NOT NULL
2599 AND l_Visit_rec.visit_type_code <> FND_API.G_MISS_CHAR THEN
2600
2601 -- TCHIMIRA :: BUG 13991270 :: 26-Apr-2012
2602 -- Swapped the below two calls AHL_VWP_VISITS_STAGES_PVT.Assoc_VisitType_to_Visit and AHL_VWP_TASKS_PVT.ASSOCIATE_DEFAULT_MRS
2603 -- First we need to create stages and then associate default MRs to the visit during visit creation.
2604
2605 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
2606 * There is no need for handling anything related to Stages for Component Visits
2607 * as there won't be any Stage associated with them.
2608 */
2609 IF (l_is_comp_visit = 'N') THEN
2610
2611 --VWPE ER-12424063:: tchimira :: 15-FEB -2011 :: start
2612 -- since the visit type code is not null during creation of a visit, call the associate visit type to visit procedure
2613 -- This procedure creates stages, stage tasks, stage rules and stage-stage type association in a visit
2614 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2615 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_VISITS_STAGES_PVT.Assoc_VisitType_to_Visit');
2616 END IF;
2617
2618 AHL_VWP_VISITS_STAGES_PVT.Assoc_VisitType_to_Visit (
2619 p_api_version => 1.0,
2620 p_init_msg_list => fnd_api.g_false,
2621 p_commit => fnd_api.g_false,
2622 p_validation_level => p_validation_level,
2623 p_visit_id => l_Visit_rec.VISIT_ID,
2624 p_visit_type_code => l_Visit_rec.VISIT_TYPE_CODE,
2625 x_return_status => l_return_status,
2626 x_msg_count => x_msg_count,
2627 x_msg_data => x_msg_data
2628 );
2629 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2630 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_VISITS_STAGES_PVT.Assoc_VisitType_to_Visit - l_return_status : '||l_return_status);
2631 END IF;
2632
2633
2634 IF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2635 RAISE Fnd_Api.g_exc_unexpected_error;
2636 ELSIF l_return_status = Fnd_Api.g_ret_sts_error THEN
2637 RAISE Fnd_Api.g_exc_error;
2638 END IF;
2639 --VWPE ER-12424063:: tchimira :: 15-FEB -2011 :: start
2640
2641 END IF; -- if l_is_comp_visit = 'N'
2642
2643 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2644 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_TASKS_PVT.ASSOCIATE_DEFAULT_MRS');
2645 END IF;
2646
2647 AHL_VWP_TASKS_PVT.ASSOCIATE_DEFAULT_MRS
2648 (
2649 p_api_version => 1.0,
2650 -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: passing the module type to avoid erroneous defaulting
2651 p_module_type => p_module_type,
2652 x_return_status => x_return_status,
2653 x_msg_count => x_msg_count,
2654 x_msg_data => x_msg_data,
2655 p_visit_rec => l_Visit_rec
2656 );
2657
2658 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2659 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_TASKS_PVT.ASSOCIATE_DEFAULT_MRS - x_return_status : '||x_return_status);
2660 END IF;
2661
2662 --Standard check to count messages
2663 l_msg_count := Fnd_Msg_Pub.count_msg;
2664
2665 IF l_msg_count > 0 THEN
2666 X_msg_count := l_msg_count;
2667 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2668 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2669 END IF;
2670 END IF;--if l_Visit_rec.visit_type_code IS NOT NULL
2671
2672 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2673 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_TIMES_PVT.Calculate_Task_Times');
2674 END IF;
2675
2676 --Now adjust the times derivation for task
2677 AHL_VWP_TIMES_PVT.Calculate_Task_Times(p_api_version => 1.0,
2678 p_init_msg_list => Fnd_Api.G_FALSE,
2679 p_commit => Fnd_Api.G_FALSE,
2680 p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
2681 x_return_status => l_return_status,
2682 x_msg_count => l_msg_count,
2683 x_msg_data => l_msg_data,
2684 p_visit_id => l_visit_rec.visit_id);
2685
2686 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2687 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_TIMES_PVT.Calculate_Task_Times - l_return_status : '||l_return_status);
2688 END IF;
2689
2690 --Standard check to count messages
2691 l_msg_count := Fnd_Msg_Pub.count_msg;
2692
2693 IF l_msg_count > 0 THEN
2694 X_msg_count := l_msg_count;
2695 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2696 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2697 END IF;
2698
2699 -- Added by sjayacha as per Shailaja mail
2700 IF l_Visit_rec.unit_schedule_id IS NOT NULL
2701 AND l_Visit_rec.unit_schedule_id <> FND_API.G_MISS_NUM THEN
2702 l_date_time := NVL(NVL(l_visit_rec.PLAN_END_DATE,
2703 AHL_VWP_TIMES_PVT.get_visit_end_time(l_Visit_rec.visit_id)),
2704 l_visit_rec.START_DATE + (FND_PROFILE.VALUE('AHL_TRANSIT_VISIT_DEFAULT_DURATION')/1440));
2705
2706 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2707 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_date_time - '||l_date_time);
2708 END IF;
2709
2710 UPDATE ahl_visits_b
2711 SET close_date_time = l_date_time
2712 WHERE visit_id = l_Visit_rec.visit_id ;
2713 END IF;
2714
2715 IF l_Visit_rec.visit_create_type IS NOT NULL
2716 AND l_Visit_rec.visit_create_type <> FND_API.G_MISS_CHAR THEN
2717 IF l_Visit_rec.visit_create_type = 'PRODUCTION_RELEASED' THEN
2718 l_release_flag := 'Y';
2719 ELSIF l_Visit_rec.visit_create_type = 'PRODUCTION_UNRELEASED' THEN
2720 l_release_flag := 'N';
2721 END IF;
2722
2723 IF l_release_flag IS NOT NULL THEN
2724 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2725 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_PROJ_PROD_PVT.Release_Visit');
2726 END IF;
2727
2728 AHL_VWP_PROJ_PROD_PVT.Release_Visit (
2729 p_api_version => 1.0,
2730 /*p_init_msg_list IN VARCHAR2 := Fnd_Api.G_FALSE,
2731 p_commit IN VARCHAR2 := Fnd_Api.G_FALSE,
2732 p_validation_level IN NUMBER := Fnd_Api.G_VALID_LEVEL_FU */
2733 p_module_type => 'VWP',
2734 p_visit_id => l_Visit_rec.VISIT_ID,
2735 p_release_flag => l_release_flag,
2736 x_return_status => x_return_status,
2737 x_msg_count => x_msg_count,
2738 x_msg_data => x_msg_data);
2739
2740 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2741 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_PROJ_PROD_PVT.Release_Visit - x_return_status : '||x_return_status);
2742 END IF;
2743 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063 :: STARTS
2744 -- If visit is created in planning status, draft WOs should be automatically created for the visit tasks
2745 ELSIF l_Visit_rec.visit_create_type = 'PLANNING' THEN
2746 AHL_VWP_PROJ_PROD_PVT.plan_visit(
2747 p_api_version => l_api_version,
2748 p_init_msg_list => p_init_msg_list,
2749 p_commit => Fnd_Api.g_false,
2750 p_validation_level => p_validation_level,
2751 p_visit_id => l_Visit_rec.VISIT_ID,
2752 x_return_status => x_return_status,
2753 x_msg_count => x_msg_count,
2754 x_msg_data => x_msg_data);
2755
2756 IF (l_log_statement >= l_log_current_level) THEN
2757 fnd_log.string(l_log_statement,
2758 L_DEBUG,
2759 'After Calling AHL_VWP_PROJ_PROD_PVT.plan_visit. Return Status = ' || x_return_status );
2760 END IF;
2761
2762 END IF;
2763 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063 :: END
2764 END IF; -- l_Visit_rec.visit_create_type IS NOT NULL
2765
2766 ---------------------------End of API Body---------------------------------------
2767 --Standard check to count messages
2768 l_msg_count := Fnd_Msg_Pub.count_msg;
2769
2770 IF l_msg_count > 0 THEN
2771 X_msg_count := l_msg_count;
2772 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2773 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2774 END IF;
2775
2776 --Standard check for commit
2777 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
2778 COMMIT;
2779 END IF;
2780
2781 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
2782 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
2783 END IF;
2784 EXCEPTION
2785 WHEN Fnd_Api.g_exc_error THEN
2786 ROLLBACK TO Create_Visit;
2787 x_return_status := Fnd_Api.g_ret_sts_error;
2788 Fnd_Msg_Pub.count_and_get(
2789 p_encoded => Fnd_Api.g_false,
2790 p_count => x_msg_count,
2791 p_data => x_msg_data
2792 );
2793 WHEN Fnd_Api.g_exc_unexpected_error THEN
2794 ROLLBACK TO Create_Visit;
2795 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2796 Fnd_Msg_Pub.count_and_get (
2797 p_encoded => Fnd_Api.g_false,
2798 p_count => x_msg_count,
2799 p_data => x_msg_data
2800 );
2801 WHEN OTHERS THEN
2802 ROLLBACK TO Create_Visit;
2803 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2804 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
2805 THEN
2806 Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
2807 END IF;
2808 Fnd_Msg_Pub.count_and_get (
2809 p_encoded => Fnd_Api.g_false,
2810 p_count => x_msg_count,
2811 p_data => x_msg_data
2812 );
2813 END Create_Visit;
2814
2815 --------------------------------------------------------------------
2816 -- PROCEDURE
2817 --
2818 --
2819 -- PURPOSE
2820 -- To copy to Visit/Template from a Visit/Template
2821 --------------------------------------------------------------------
2822 PROCEDURE Copy_Visit (
2823 p_api_version IN NUMBER,
2824 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
2825 p_commit IN VARCHAR2 := Fnd_Api.g_false,
2826 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
2827 p_module_type IN VARCHAR2 := 'JSP',
2828 p_visit_id IN NUMBER,
2829 p_x_visit_rec IN OUT NOCOPY Visit_Rec_Type,
2830 x_return_status OUT NOCOPY VARCHAR2,
2831 x_msg_count OUT NOCOPY NUMBER,
2832 x_msg_data OUT NOCOPY VARCHAR2
2833 )
2834 IS
2835 -- Define local Variables
2836 L_API_VERSION CONSTANT NUMBER := 1.0;
2837 L_API_NAME CONSTANT VARCHAR2(30) := 'Copy_Visit';
2838 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
2839 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
2840
2841 l_msg_data VARCHAR2(2000);
2842 l_return_status VARCHAR2(1);
2843 l_msg_count NUMBER;
2844
2845 l_rowid VARCHAR2(30);
2846
2847 l_planned_order_flag VARCHAR2(1);
2848
2849 l_visit_id NUMBER;
2850 l_visit_number NUMBER;
2851
2852 l_price_changed VARCHAR2(1) := 'N';
2853 l_actual_price NUMBER;
2854 l_estimate_price NUMBER;
2855
2856 l_task_department_id NUMBER;
2857 l_visit_task_id NUMBER;
2858 l_parent_task_id NUMBER;
2859 l_new_parent_task_id NUMBER;
2860 l_new_task_id NUMBER;
2861
2862
2863 -- Define local record datatypes
2864 l_visit_rec Visit_Rec_Type := p_x_visit_rec;
2865
2866 -- Define local Cursors
2867 -- To find visit related information
2868 CURSOR c_visit (x_visit_id IN NUMBER) IS
2869 SELECT * FROM AHL_VISITS_VL
2870 WHERE VISIT_ID = x_visit_id;
2871 c_visit_rec c_visit%ROWTYPE;
2872
2873 -- To find task related information for a visit
2874 -- Dont copy deleted tasks to new visit.
2875 CURSOR c_task (x_visit_id IN NUMBER) IS
2876 SELECT * FROM AHL_VISIT_TASKS_VL
2877 WHERE VISIT_ID = x_visit_id AND NVL(STATUS_CODE,'X') <> 'DELETED';
2878 c_task_rec c_task%ROWTYPE;
2879
2880 -- To find task link related information for a visit
2881 CURSOR c_visit_task_links(x_visit_id IN NUMBER) IS
2882 SELECT VISIT_TASK_ID,
2883 PARENT_TASK_ID,
2884 --SECURITY_GROUP_ID,
2885 ATTRIBUTE_CATEGORY,
2886 ATTRIBUTE1,
2887 ATTRIBUTE2,
2888 ATTRIBUTE3,
2889 ATTRIBUTE4,
2890 ATTRIBUTE5,
2891 ATTRIBUTE6,
2892 ATTRIBUTE7,
2893 ATTRIBUTE8,
2894 ATTRIBUTE9,
2895 ATTRIBUTE10,
2896 ATTRIBUTE11,
2897 ATTRIBUTE12,
2898 ATTRIBUTE13,
2899 ATTRIBUTE14,
2900 ATTRIBUTE15
2901 FROM AHL_TASK_LINKS
2902 WHERE visit_task_id in ( SELECT VISIT_TASK_ID
2903 FROM AHL_VISIT_TASKS_B
2904 WHERE visit_id = x_visit_id);
2905
2906 l_task_link_rec c_visit_task_links%ROWTYPE;
2907
2908 -- To find the coresponding task id in the new visit
2909 CURSOR c_new_task_ID(x_visit_task_id IN NUMBER, x_new_visit_id IN NUMBER) IS
2910 SELECT b.VISIT_TASK_ID
2911 FROM AHL_VISIT_TASKS_B a, AHL_VISIT_TASKS_B b
2912 WHERE a.visit_task_id = x_visit_task_id
2913 AND a.visit_task_number = b.visit_task_number
2914 AND b.visit_id = x_new_visit_id;
2915
2916 BEGIN
2917 --------------------- Initialize -----------------------
2918 SAVEPOINT Copy_Visit;
2919
2920 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
2921 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure');
2922 END IF;
2923
2924 -- Initialize message list if p_init_msg_list is set to TRUE.
2925 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
2926 Fnd_Msg_Pub.initialize;
2927 END IF;
2928
2929 -- Initialize API return status to success
2930 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
2931
2932 -- Standard call to check for call compatibility.
2933 IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
2934 p_api_version,
2935 l_api_name,G_PKG_NAME) THEN
2936 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2937 END IF;
2938 ------------------------Start of API Body------------------------------------
2939 -----------------------Value/Id conversions ----------------------
2940 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2941 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit Id - '||p_visit_id);
2942 END IF;
2943
2944 OPEN c_visit(p_visit_id);
2945 FETCH c_visit INTO c_visit_rec;
2946 IF c_Visit%NOTFOUND THEN
2947 CLOSE c_Visit;
2948 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
2949 Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
2950 Fnd_Msg_Pub.ADD;
2951 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2952 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit not found for' ||l_visit_rec.visit_id );
2953 END IF;
2954 END IF;
2955 RAISE Fnd_Api.g_exc_error;
2956 ELSE
2957 CLOSE c_Visit;
2958 END IF;
2959
2960 -- Check if the visit status is deleted.display error message if so. Added in 11.5.10
2961 IF UPPER(c_visit_rec.status_code) = 'DELETED' THEN
2962 Fnd_Message.SET_NAME('AHL','AHL_VWP_INVALID_STATUS');
2963 Fnd_Msg_Pub.ADD;
2964 RAISE Fnd_Api.G_EXC_ERROR;
2965 END IF;
2966
2967 -- org/dept/start date/end date are passed from UA
2968 -- Null check and org/dept/dates validation is already done from calling API Synchronize_Visit
2969 -- If organization/Department/Start Date changed then clear up price
2970 IF l_visit_rec.organization_id <> c_Visit_rec.organization_id
2971 OR l_visit_rec.department_id <> c_Visit_rec.department_id
2972 OR l_visit_rec.START_DATE <> c_Visit_rec.START_DATE_TIME THEN
2973 l_price_changed := 'Y';
2974 l_actual_price := NULL;
2975 l_estimate_price := NULL;
2976 ELSE
2977 l_actual_price := c_Visit_rec.ACTUAL_PRICE;
2978 l_estimate_price := c_Visit_rec.ESTIMATED_PRICE;
2979 END IF;
2980
2981 -- Get ID and Number for the new visit
2982 l_visit_id := Get_Visit_Id();
2983 l_visit_number := Get_Visit_Number();
2984
2985 -- Create New Visit
2986 Ahl_Visits_Pkg.Insert_Row (
2987 X_ROWID => l_rowid,
2988 X_VISIT_ID => l_Visit_ID,
2989 X_VISIT_NUMBER => l_visit_number,
2990 X_VISIT_TYPE_CODE => c_Visit_rec.VISIT_TYPE_CODE,
2991 X_SIMULATION_PLAN_ID => c_Visit_rec.simulation_plan_id,
2992 X_ITEM_INSTANCE_ID => c_Visit_rec.item_instance_id,
2993 X_INVENTORY_ITEM_ID => c_visit_rec.INVENTORY_ITEM_ID,
2994 X_ITEM_ORGANIZATION_ID => c_Visit_rec.ITEM_ORGANIZATION_ID,
2995 X_ASSO_PRIMARY_VISIT_ID => c_Visit_rec.asso_primary_visit_id,
2996 X_SIMULATION_DELETE_FLAG=> 'N',
2997 X_TEMPLATE_FLAG => c_Visit_rec.TEMPLATE_FLAG,
2998 X_OUT_OF_SYNC_FLAG => NULL,
2999 X_PROJECT_FLAG => c_Visit_rec.PROJECT_FLAG,
3000 X_PROJECT_ID => NULL,
3001 X_SERVICE_REQUEST_ID => c_Visit_rec.SERVICE_REQUEST_ID,
3002 X_SCHEDULE_DESIGNATOR => c_Visit_rec.SCHEDULE_DESIGNATOR,
3003 X_SPACE_CATEGORY_CODE => c_Visit_rec.SPACE_CATEGORY_CODE,
3004 X_ATTRIBUTE_CATEGORY => c_visit_rec.ATTRIBUTE_CATEGORY,
3005 X_ATTRIBUTE1 => c_visit_rec.ATTRIBUTE1,
3006 X_ATTRIBUTE2 => c_visit_rec.ATTRIBUTE2,
3007 X_ATTRIBUTE3 => c_Visit_rec.ATTRIBUTE3,
3008 X_ATTRIBUTE4 => c_Visit_rec.ATTRIBUTE4,
3009 X_ATTRIBUTE5 => c_Visit_rec.ATTRIBUTE5,
3010 X_ATTRIBUTE6 => c_Visit_rec.ATTRIBUTE6,
3011 X_ATTRIBUTE7 => c_Visit_rec.ATTRIBUTE7,
3012 X_ATTRIBUTE8 => c_Visit_rec.ATTRIBUTE8,
3013 X_ATTRIBUTE9 => c_Visit_rec.ATTRIBUTE9,
3014 X_ATTRIBUTE10 => c_Visit_rec.ATTRIBUTE10,
3015 X_ATTRIBUTE11 => c_Visit_rec.ATTRIBUTE11,
3016 X_ATTRIBUTE12 => c_Visit_rec.ATTRIBUTE12,
3017 X_ATTRIBUTE13 => c_Visit_rec.ATTRIBUTE13,
3018 X_ATTRIBUTE14 => c_Visit_rec.ATTRIBUTE14,
3019 X_ATTRIBUTE15 => c_Visit_rec.ATTRIBUTE15,
3020 X_OBJECT_VERSION_NUMBER => 1,
3021 X_ORGANIZATION_ID => l_Visit_rec.ORGANIZATION_ID,
3022 X_DEPARTMENT_ID => l_Visit_rec.DEPARTMENT_ID,
3023 X_STATUS_CODE => 'PLANNING',
3024 X_START_DATE_TIME => l_Visit_rec.START_DATE,
3025 X_CLOSE_DATE_TIME => l_Visit_rec.PLAN_END_DATE,
3026 X_PRICE_LIST_ID => c_Visit_rec.PRICE_LIST_ID,
3027 X_ESTIMATED_PRICE => l_estimate_price,
3028 X_ACTUAL_PRICE => l_actual_price,
3029 X_OUTSIDE_PARTY_FLAG => c_Visit_rec.OUTSIDE_PARTY_FLAG,
3030 X_ANY_TASK_CHG_FLAG => 'N',
3031 X_VISIT_NAME => c_Visit_rec.VISIT_NAME,
3032 X_DESCRIPTION => c_Visit_rec.DESCRIPTION,
3033 X_CREATION_DATE => SYSDATE,
3034 X_CREATED_BY => Fnd_Global.USER_ID,
3035 X_LAST_UPDATE_DATE => SYSDATE,
3036 X_LAST_UPDATED_BY => Fnd_Global.USER_ID,
3037 X_LAST_UPDATE_LOGIN => Fnd_Global.LOGIN_ID,
3038 X_PRIORITY_CODE => c_Visit_rec.PRIORITY_CODE,
3039 X_PROJECT_TEMPLATE_ID => c_Visit_rec.PROJECT_TEMPLATE_ID,
3040 X_UNIT_SCHEDULE_ID => c_Visit_rec.UNIT_SCHEDULE_ID,
3041 --PRAKKUM ::FP PIE :: 13-OCT-2010
3042 X_TOP_PROJECT_TASK_ID => c_Visit_rec.TOP_PROJECT_TASK_ID,
3043 X_INV_LOCATOR_ID => l_Visit_rec.inv_locator_id, --Added by sowsubra
3044 -- SATHAPLI::Component Maintenance Planning Project, 02-Nov-2011
3045 -- set the Planning and In-Repair locators
3046 X_COMP_PLANNING_LOC_ID => c_visit_rec.comp_planning_loc_id,
3047 X_COMP_INREPAIR_LOC_ID => c_visit_rec.comp_inrepair_loc_id,
3048 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: start
3049 X_PAST_DATED_VISIT_FLAG => l_Visit_rec.PAST_DATED_VISIT_FLAG,
3050 X_FIRMED_FLAG => 'N',
3051 X_LOCKED_FLAG => 'N',
3052 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: end
3053 --TCHIMIRA :: 14-Jun-2012 :: ER 14015560 ::added below flag
3054 X_AUTO_VISIT_TYPE_FLAG =>l_Visit_rec.AUTO_VISIT_TYPE_FLAG
3055 );
3056
3057 -- Copy Tasks from originating visit
3058 OPEN c_task(p_visit_id);
3059 LOOP
3060 FETCH c_task INTO c_task_rec;
3061 EXIT WHEN c_task%NOTFOUND;
3062
3063 c_task_rec.visit_task_id := AHL_VWP_RULES_PVT.Get_Visit_Task_Id();
3064
3065 -- if visit org/dept/dates are changed, then clear up task price
3066 IF l_price_changed = 'Y' THEN
3067 l_actual_price := NULL;
3068 l_estimate_price := NULL;
3069 ELSE
3070 l_actual_price := c_task_rec.ACTUAL_PRICE;
3071 l_estimate_price := c_task_rec.ESTIMATED_PRICE;
3072 END IF;
3073
3074 -- if visit organization changed, then clear up task department
3075 IF l_visit_rec.organization_id <> c_Visit_rec.organization_id THEN
3076 l_task_department_id := NULL;
3077 ELSE
3078 l_task_department_id := c_task_rec.department_id;
3079 END IF;
3080
3081 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3082 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before AHL_VISIT_TASKS_PKG.INSERT_ROW');
3083 END IF;
3084
3085 -- Create task in new visit
3086 AHL_VISIT_TASKS_PKG.INSERT_ROW
3087 ( X_ROWID => l_rowid,
3088 X_VISIT_TASK_ID => c_task_rec.visit_task_id,
3089 X_VISIT_TASK_NUMBER => c_task_rec.visit_task_number,
3090 X_OBJECT_VERSION_NUMBER => 1,
3091 X_VISIT_ID => l_visit_id,
3092 X_PROJECT_TASK_ID => NULL,
3093 X_COST_PARENT_ID => c_task_rec.cost_parent_id,
3094 X_MR_ROUTE_ID => c_task_rec.MR_ID,
3095 X_MR_ID => c_task_rec.MR_ROUTE_ID,
3096 X_DURATION => c_task_rec.duration,
3097 X_UNIT_EFFECTIVITY_ID => c_task_rec.UNIT_EFFECTIVITY_ID,
3098 X_START_FROM_HOUR => c_task_rec.start_from_hour,
3099 X_INVENTORY_ITEM_ID => c_task_rec.inventory_item_id,
3100 X_ITEM_ORGANIZATION_ID => c_task_rec.item_organization_id,
3101 X_INSTANCE_ID => c_task_rec.instance_id,
3102 X_PRIMARY_VISIT_TASK_ID => c_task_rec.primary_visit_task_id,
3103 X_ORIGINATING_TASK_ID => c_task_rec.originating_task_id,
3104 X_SERVICE_REQUEST_ID => c_task_rec.service_request_id,
3105 X_TASK_TYPE_CODE => c_task_rec.task_type_code,
3106 -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: Service Type code added
3107 X_SERVICE_TYPE_CODE => c_task_rec.SERVICE_TYPE_CODE,
3108 X_DEPARTMENT_ID => l_task_department_id,
3109 X_SUMMARY_TASK_FLAG => c_task_rec.SUMMARY_TASK_FLAG,
3110 X_PRICE_LIST_ID => c_task_rec.PRICE_LIST_ID,
3111 X_STATUS_CODE => 'PLANNING',
3112 X_ESTIMATED_PRICE => l_estimate_price,
3113 X_ACTUAL_PRICE => l_actual_price,
3114 X_ACTUAL_COST => c_task_rec.ACTUAL_COST,
3115 X_STAGE_ID => c_task_rec.STAGE_ID,
3116 -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010
3117 -- Pass past dates too, and if it is null, pass null for all the 4 columns below
3118 X_START_DATE_TIME => c_task_rec.PAST_TASK_START_DATE,
3119 X_END_DATE_TIME => c_task_rec.PAST_TASK_END_DATE,
3120 X_PAST_TASK_START_DATE => c_task_rec.PAST_TASK_START_DATE,
3121 X_PAST_TASK_END_DATE => c_task_rec.PAST_TASK_END_DATE,
3122 --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
3123 X_TARGET_QTY => c_task_rec.target_qty,
3124 X_ATTRIBUTE_CATEGORY => c_task_rec.ATTRIBUTE_CATEGORY,
3125 X_ATTRIBUTE1 => c_task_rec.ATTRIBUTE1,
3126 X_ATTRIBUTE2 => c_task_rec.ATTRIBUTE2,
3127 X_ATTRIBUTE3 => c_task_rec.ATTRIBUTE3,
3128 X_ATTRIBUTE4 => c_task_rec.ATTRIBUTE4,
3129 X_ATTRIBUTE5 => c_task_rec.ATTRIBUTE5,
3130 X_ATTRIBUTE6 => c_task_rec.ATTRIBUTE6,
3131 X_ATTRIBUTE7 => c_task_rec.ATTRIBUTE7,
3132 X_ATTRIBUTE8 => c_task_rec.ATTRIBUTE8,
3133 X_ATTRIBUTE9 => c_task_rec.ATTRIBUTE9,
3134 X_ATTRIBUTE10 => c_task_rec.ATTRIBUTE10,
3135 X_ATTRIBUTE11 => c_task_rec.ATTRIBUTE11,
3136 X_ATTRIBUTE12 => c_task_rec.ATTRIBUTE12,
3137 X_ATTRIBUTE13 => c_task_rec.ATTRIBUTE13,
3138 X_ATTRIBUTE14 => c_task_rec.ATTRIBUTE14,
3139 X_ATTRIBUTE15 => c_task_rec.ATTRIBUTE15,
3140 X_VISIT_TASK_NAME => c_task_rec.visit_task_name,
3141 X_DESCRIPTION => c_task_rec.description,
3142 X_QUANTITY => c_task_rec.quantity, -- Added by rnahata for Issue 105
3143 X_CREATION_DATE => SYSDATE,
3144 X_CREATED_BY => Fnd_Global.USER_ID,
3145 X_LAST_UPDATE_DATE => SYSDATE,
3146 X_LAST_UPDATED_BY => Fnd_Global.USER_ID,
3147 X_LAST_UPDATE_LOGIN => Fnd_Global.LOGIN_ID );
3148
3149 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3150 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VISIT_TASKS_PKG.INSERT_ROW ');
3151 END IF;
3152
3153 -- Create Planned Material if task type is planned or unplanned
3154 IF c_task_rec.task_type_code in ('PLANNED','UNPLANNED') THEN
3155 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3156 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
3157 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Value of Visit Task ID : ' || c_task_rec.visit_task_id);
3158 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Value of Visit ID : ' || l_visit_id);
3159 END IF;
3160
3161 -- To call LTP Process Materials API for APS Integration
3162 AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials
3163 ( p_api_version => 1.0,
3164 p_init_msg_list => FND_API.g_false,
3165 p_commit => FND_API.g_false,
3166 p_validation_level => FND_API.g_valid_level_full,
3167 p_visit_id => l_Visit_Id,
3168 p_visit_task_id => c_task_rec.visit_task_id,
3169 p_org_id => NULL,
3170 p_start_date => NULL,
3171 p_operation_flag => 'C',
3172 x_planned_order_flag => l_planned_order_flag ,
3173 x_return_status => l_return_status,
3174 x_msg_count => l_msg_count,
3175 x_msg_data => l_msg_data );
3176
3177 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3178 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials : l_return_status - '||l_return_status);
3179 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Planned Order Flag : ' || l_planned_order_flag);
3180 END IF;
3181
3182 IF l_return_status <> 'S' THEN
3183 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
3184 END IF;
3185 END IF;
3186 END LOOP;
3187 CLOSE c_task;
3188
3189 -- Copy task links from originating visit
3190 OPEN c_visit_task_links(p_visit_id);
3191 LOOP
3192 --FETCH c_visit_task_links INTO l_visit_task_id, l_parent_task_id;
3193 FETCH c_visit_task_links INTO l_task_link_rec;
3194 EXIT WHEN c_visit_task_links%NOTFOUND;
3195
3196 -- Find coresponding task id in new visit
3197 --OPEN c_new_task_ID(l_visit_task_id,l_visit_id);
3198 OPEN c_new_task_ID(l_task_link_rec.visit_task_id,l_visit_id);
3199 FETCH c_new_task_ID INTO l_new_task_id;
3200 CLOSE c_new_task_ID;
3201
3202 --OPEN c_new_task_ID(l_parent_task_id,l_visit_id);
3203 OPEN c_new_task_ID(l_task_link_rec.parent_task_id,l_visit_id);
3204 FETCH c_new_task_ID INTO l_new_parent_task_id;
3205 CLOSE c_new_task_ID;
3206
3207 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3208 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before inserting into AHL_TASK_LINKS');
3209 END IF;
3210
3211 -- Create task link
3212 INSERT INTO AHL_TASK_LINKS
3213 ( TASK_LINK_ID,
3214 OBJECT_VERSION_NUMBER,
3215 LAST_UPDATE_DATE,
3216 LAST_UPDATED_BY,
3217 CREATION_DATE,
3218 CREATED_BY,
3219 LAST_UPDATE_LOGIN,
3220 VISIT_TASK_ID,
3221 PARENT_TASK_ID,
3222 --SECURITY_GROUP_ID,
3223 ATTRIBUTE_CATEGORY,
3224 ATTRIBUTE1,
3225 ATTRIBUTE2,
3226 ATTRIBUTE3,
3227 ATTRIBUTE4,
3228 ATTRIBUTE5,
3229 ATTRIBUTE6,
3230 ATTRIBUTE7,
3231 ATTRIBUTE8,
3232 ATTRIBUTE9,
3233 ATTRIBUTE10,
3234 ATTRIBUTE11,
3235 ATTRIBUTE12,
3236 ATTRIBUTE13,
3237 ATTRIBUTE14,
3238 ATTRIBUTE15
3239 )
3240 VALUES
3241 (
3242 ahl_task_links_s.nextval,
3243 1,
3244 SYSDATE,
3245 Fnd_Global.USER_ID,
3246 SYSDATE,
3247 Fnd_Global.USER_ID,
3248 Fnd_Global.USER_ID,
3249 l_new_task_id ,
3250 l_new_parent_task_id,
3251 --l_task_link_rec.SECURITY_GROUP_ID,
3252 l_task_link_rec.ATTRIBUTE_CATEGORY,
3253 l_task_link_rec.ATTRIBUTE1,
3254 l_task_link_rec.ATTRIBUTE2,
3255 l_task_link_rec.ATTRIBUTE3,
3256 l_task_link_rec.ATTRIBUTE4,
3257 l_task_link_rec.ATTRIBUTE5,
3258 l_task_link_rec.ATTRIBUTE6,
3259 l_task_link_rec.ATTRIBUTE7,
3260 l_task_link_rec.ATTRIBUTE8,
3261 l_task_link_rec.ATTRIBUTE9,
3262 l_task_link_rec.ATTRIBUTE10,
3263 l_task_link_rec.ATTRIBUTE11,
3264 l_task_link_rec.ATTRIBUTE12,
3265 l_task_link_rec.ATTRIBUTE13,
3266 l_task_link_rec.ATTRIBUTE14,
3267 l_task_link_rec.ATTRIBUTE15
3268 );
3269
3270 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3271 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After inserting into AHL_TASK_LINKS');
3272 END IF;
3273
3274 END LOOP;
3275 CLOSE c_visit_task_links;
3276
3277 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3278 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_TIMES_PVT.Calculate_Task_Times');
3279 END IF;
3280
3281 --Now adjust the times derivation for visit.
3282 AHL_VWP_TIMES_PVT.Calculate_Task_Times
3283 (p_api_version => 1.0,
3284 p_init_msg_list => Fnd_Api.G_FALSE,
3285 p_commit => Fnd_Api.G_FALSE,
3286 p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
3287 x_return_status => l_return_status,
3288 x_msg_count => l_msg_count,
3289 x_msg_data => l_msg_data,
3290 p_visit_id => l_visit_id);
3291
3292 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3293 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_TIMES_PVT.Calculate_Task_Times - l_return_status : '||l_return_status);
3294 END IF;
3295
3296 -- Return ID of the new visit
3297 p_x_Visit_rec.visit_id := l_visit_id;
3298
3299 ---------------------------End of API Body---------------------------------------
3300 --Standard check to count messages
3301 l_msg_count := Fnd_Msg_Pub.count_msg;
3302
3303 IF l_msg_count > 0 THEN
3304 X_msg_count := l_msg_count;
3305 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
3306 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
3307 END IF;
3308
3309 --Standard check for commit
3310 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
3311 COMMIT;
3312 END IF;
3313
3314 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3315 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
3316 END IF;
3317 EXCEPTION
3318 WHEN Fnd_Api.g_exc_error THEN
3319 ROLLBACK TO Copy_Visit;
3320 x_return_status := Fnd_Api.g_ret_sts_error;
3321 Fnd_Msg_Pub.count_and_get (
3322 p_encoded => Fnd_Api.g_false,
3323 p_count => x_msg_count,
3324 p_data => x_msg_data
3325 );
3326 WHEN Fnd_Api.g_exc_unexpected_error THEN
3327 ROLLBACK TO Copy_Visit;
3328 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
3329 Fnd_Msg_Pub.count_and_get (
3330 p_encoded => Fnd_Api.g_false,
3331 p_count => x_msg_count,
3332 p_data => x_msg_data
3333 );
3334 WHEN OTHERS THEN
3335 ROLLBACK TO Copy_Visit;
3336 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
3337 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
3338 THEN
3339 Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
3340 END IF;
3341 Fnd_Msg_Pub.count_and_get (
3342 p_encoded => Fnd_Api.g_false,
3343 p_count => x_msg_count,
3344 p_data => x_msg_data
3345 );
3346 END Copy_Visit;
3347
3348 --------------------------------------------------------------------
3349 -- PROCEDURE
3350 -- Update_Visit
3351 --
3352 -- PURPOSE
3353 -- To update a Maintainance Visit.
3354 --------------------------------------------------------------------
3355 PROCEDURE Update_Visit (
3356 p_api_version IN NUMBER,
3357 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
3358 p_commit IN VARCHAR2 := Fnd_Api.g_false,
3359 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
3360 p_module_type IN VARCHAR2 := 'JSP',
3361 p_x_visit_rec IN OUT NOCOPY Visit_Rec_Type,
3362 x_return_status OUT NOCOPY VARCHAR2,
3363 x_msg_count OUT NOCOPY NUMBER,
3364 x_msg_data OUT NOCOPY VARCHAR2
3365 )
3366 IS
3367 -- Define local Variables
3368 L_API_VERSION CONSTANT NUMBER := 1.0;
3369 L_API_NAME CONSTANT VARCHAR2(30) := 'Update_Visit';
3370 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
3371 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
3372
3373 l_msg_data VARCHAR2(2000);
3374 l_return_status VARCHAR2(1);
3375 l_msg_count NUMBER;
3376
3377 l_planned_order_flag VARCHAR2(1);
3378
3379
3380 l_count NUMBER;
3381 l_service_id NUMBER;
3382 l_organization_id NUMBER;
3383 l_department_id NUMBER;
3384
3385 l_visit_end_date DATE; --The visit end date
3386
3387 l_date_time_end DATE;
3388 l_date_time_start DATE;
3389
3390 space_changed_flag VARCHAR2(1):= 'N';
3391
3392 -- Post 11.5.10 Enhancements
3393 l_priority_code VARCHAR2(30);
3394 l_proj_template_id NUMBER;
3395 --PRAKKUM ::FP PIE :: 13-OCT-2010
3396 l_project_id NUMBER;
3397 l_dummy_char VARCHAR2(1);
3398
3399 --PRAKKUM :: VWPE: ER:12424063 :: 11-APR-2011
3400 l_is_start_date_changed BOOLEAN default false;
3401 l_is_close_date_changed BOOLEAN default false; -- VWPE 12730539:: PRAKKUM :: 02-AUG-2011
3402 l_is_dept_changed BOOLEAN default false;
3403
3404 -- Define local record datatypes
3405 l_visit_rec Visit_Rec_Type := p_x_visit_rec;
3406 l_workorder_rec AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
3407 l_workoper_tbl AHL_PRD_WORKORDER_PVT.PRD_WORKOPER_TBL;
3408 l_Space_Assignment_Rec ahl_ltp_space_assign_pub.Space_Assignment_Rec;
3409 --TCHIMIRA::P2P CP ER 9151144::09-DEC-2009
3410 l_is_comp_visit VARCHAR2(1) := AHL_CMP_UTIL_PKG.Is_Comp_Visit (l_visit_rec.visit_id);
3411 l_auto_visit_type_flag VARCHAR2(1);--TCHIMIRA :: 14-Jun-2012 :: ER 14015560
3412
3413 -- Define local Cursors
3414 -- To find visit related information
3415 -- TCHIMIRA :: Bug 8594339 :: 19-NOV-2009
3416 -- Modified Cursor to acquire a lock on the visit record without waiting
3417 CURSOR c_Visit(x_id IN NUMBER) IS
3418 SELECT * FROM Ahl_Visits_VL
3419 WHERE VISIT_ID = x_id
3420 FOR UPDATE OF OBJECT_VERSION_NUMBER NOWAIT;
3421
3422 c_Visit_rec c_Visit%ROWTYPE;
3423
3424 -- To find all tasks under this current visit related information
3425 CURSOR c_Task (x_id IN NUMBER) IS
3426 SELECT * FROM Ahl_Visit_Tasks_VL
3427 WHERE VISIT_ID = x_id
3428 and NVL(status_code, 'X') not in('DELETED', 'CANCELLED');
3429
3430 c_Task_rec c_Task%ROWTYPE;
3431
3432 -- To find if WIP job in Draft Status is created for the Visit
3433 CURSOR c_job(x_id IN NUMBER) IS
3434 SELECT count(*) FROM AHL_WORKORDERS
3435 WHERE VISIT_ID = x_id
3436 AND MASTER_WORKORDER_FLAG = 'Y'
3437 AND STATUS_CODE = 17;
3438
3439 CURSOR c_Visit_WO(x_id IN NUMBER) IS
3440 SELECT * FROM AHL_WORKORDERS
3441 WHERE VISIT_ID = x_id
3442 AND MASTER_WORKORDER_FLAG = 'Y'
3443 AND STATUS_CODE = 17;
3444
3445 l_workrec c_Visit_WO%ROWTYPE;
3446
3447 CURSOR c_Task_WO(x_task_id IN NUMBER) IS
3448 SELECT * FROM AHL_WORKORDERS
3449 WHERE VISIT_TASK_ID = x_task_id
3450 AND STATUS_CODE = 17;
3451
3452 l_task_workrec c_Task_WO%ROWTYPE;
3453
3454 --PRAKKUM ::FP PIE :: 13-OCT-2010
3455 --To get project id given the project name
3456 CURSOR get_project_id_csr (c_project_name IN VARCHAR2)
3457 IS
3458 SELECT project_id
3459 FROM PA_PROJECTS_ALL
3460 WHERE name = c_project_name;
3461
3462
3463 --PRAKKUM ::FP PIE :: 13-OCT-2010
3464 --To validate that the project completion is in future
3465 Cursor validate_proj_date_csr ( c_project_id IN NUMBER)
3466 IS
3467 SELECT 'X' from PA_PROJECTS_EXPEND_V
3468 WHERE project_id = c_project_id
3469 AND NVL(completion_date,SYSDATE+1)>=SYSDATE;
3470
3471 /*Added by sowsubra*/
3472 CURSOR c_subinv_validate (p_subinv_code IN VARCHAR2, p_org_id IN VARCHAR2) IS
3473 SELECT status_id
3474 FROM mtl_secondary_inventories
3475 WHERE secondary_inventory_name = p_subinv_code
3476 AND organization_id = p_org_id;
3477
3478 /*Added by sowsubra*/
3479 CURSOR c_loc_validate (p_org_id IN NUMBER, p_subinv_code IN VARCHAR2, p_loc_seg IN VARCHAR2) IS
3480 -- jaramana on Feb 14, 2008 for bug 6819370
3481 -- Made segment19 and segment20 refer to base table
3482 SELECT mil.inventory_location_id
3483 from mtl_item_locations mil, mtl_item_locations_kfv milk
3484 where mil.organization_id = p_org_id
3485 and mil.subinventory_code = p_subinv_code
3486 and milk.concatenated_segments = p_loc_seg
3487 and mil.segment19 is NULL
3488 and mil.segment20 is NULL
3489 and mil.inventory_location_id = milk.inventory_location_id;
3490
3491 l_inv_loc_id NUMBER := 0;
3492 l_dummy NUMBER := 0;
3493 l_status_id NUMBER;
3494
3495 --TCHIMIRA::P2P CP ER 9151144::09-DEC-2009
3496 --salogan::Modified the cursor to handle both request id from P2P and Cost Estimation CP ER 9299910::01-JUN-2009::BEGIN
3497 --Cursor to fetch phase
3498 CURSOR c_conc_req_phase(c_id IN NUMBER) IS
3499 SELECT 'X'
3500 FROM FND_CONCURRENT_REQUESTS FCR, AHL_VISITS_B AVB
3501 WHERE FCR.REQUEST_ID IN ( AVB.CST_EST_REQUEST_ID, AVB.REQUEST_ID )
3502 AND FCR.PHASE_CODE IN ('P', 'R')
3503 AND AVB.VISIT_ID = c_id;
3504 l_dummy_val c_conc_req_phase%ROWTYPE;
3505 --salogan::Modified the cursor to handle both request id from P2P and Cost Estimation CP ER 9299910::01-JUN-2009::END
3506 -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010
3507 -- Added this cursor to fetch visit task past dates for non-summary tasks
3508 Cursor get_visit_task_past_dates (c_visit_id IN NUMBER)
3509 IS
3510 SELECT MIN(past_task_start_date) past_task_start_date, MAX(past_task_end_date) past_task_end_date
3511 FROM ahl_visit_tasks_b
3512 WHERE visit_id = c_visit_id
3513 AND task_type_code <> 'SUMMARY'
3514 AND PAST_TASK_START_DATE IS NOT NULL
3515 AND STATUS_CODE NOT IN ('DELETED','CANCELLED');
3516 visit_task_past_dates_rec get_visit_task_past_dates%ROWTYPE;
3517
3518 --VWPE :: PRAKKUM :: 26-APR-2011 :: To count tasks ovn :: START
3519
3520 --Fetch to find whether task updation is going to happend or not
3521 CURSOR get_visit_data_csr(p_visit_id IN NUMBER) IS
3522 SELECT v.department_id , v.start_date_time
3523 FROM AHL_VISITS_B v, AHL_DEPARTMENT_SHIFTS shifts
3524 WHERE v.department_id = shifts.department_id
3525 AND v.visit_id = p_visit_id;
3526
3527 l_visit_dept_id NUMBER := NULL;
3528 l_visit_start_date DATE := NULL;
3529 l_tasks_ovn_updated_count NUMBER := 0;
3530 l_stages_ovn_updated_count NUMBER := 0;--PRAKKUM :: 06-JUL-2011 :: VWPE 12730539
3531
3532 --VWPE :: PRAKKUM :: 26-APR-2011 :: To count tasks ovn :: END
3533
3534 -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125
3535 -- Get the end date of the latest WO in this visit
3536 -- TCHIMIRA :: 17-DEC-2011 :: bug# 13000673 :: commenting the below cursor
3537 /*CURSOR get_latest_wo_end_date (c_visit_id IN NUMBER)
3538 IS
3539 SELECT max (wip.scheduled_completion_date)
3540 FROM wip_discrete_jobs wip, ahl_workorders wo
3541 WHERE wo.visit_id = c_visit_id
3542 AND wo.wip_entity_id = wip.wip_entity_id;
3543 l_latest_wo_end_date DATE; */
3544
3545 -- PRAKKUM :: 28-JUN-2011 :: VWPE :: ER 12730539 :: To find visit is old or new
3546 CURSOR c_is_old_visit(p_visit_id IN NUMBER) IS
3547 select AHL_VWP_VISITS_PVT.Is_Old_Visit(p_visit_id) IS_OLD_VISIT FROM DUAL;
3548
3549 l_is_old_visit_dets c_is_old_visit%RowType;
3550
3551 -- TCHIMIRA ::28-JUN-2011 :: VWP: ER:12673125 :: START
3552 -- Cursor to fetch mr_id of a task
3553 CURSOR get_sum_task_det(c_visit_id IN NUMBER ) IS
3554 SELECT mr_id, unit_effectivity_id,instance_id
3555 FROM ahl_visit_tasks_b task
3556 WHERE visit_id = c_visit_id
3557 AND status_code = 'PLANNING'
3558 AND task_type_code = 'SUMMARY'
3559 AND mr_id IS NOT NULL;
3560
3561
3562 BEGIN
3563
3564 --------------------- Initialize -----------------------
3565 SAVEPOINT Update_Visit;
3566
3567 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
3568 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure - Visit Id - '||l_visit_rec.visit_id ||'p_module_tyoe - '|| p_module_type);
3569 END IF;
3570
3571 -- Initialize message list if p_init_msg_list is set to TRUE.
3572 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
3573 Fnd_Msg_Pub.initialize;
3574 END IF;
3575
3576 -- Initialize API return status to success
3577 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
3578
3579 -- Standard call to check for call compatibility.
3580 IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
3581 p_api_version,
3582 l_api_name,G_PKG_NAME)
3583 THEN
3584 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
3585 END IF;
3586
3587 ------------------------Start of API Body------------------------------------
3588 OPEN c_Visit(l_Visit_rec.visit_id);
3589 FETCH c_Visit INTO c_Visit_rec;
3590 IF c_Visit%NOTFOUND THEN
3591 CLOSE c_Visit;
3592 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
3593 Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
3594 Fnd_Msg_Pub.ADD;
3595 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3596 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit not found for' ||l_visit_rec.visit_id );
3597 END IF;
3598 END IF;
3599 RAISE Fnd_Api.g_exc_error;
3600 ELSE
3601 CLOSE c_Visit;
3602 END IF;
3603
3604 --TCHIMIRA::P2P CP ER 9151144::09-DEC-2009::BEGIN
3605 --salogan::Modified the cursor fetch to handle both request id from P2P and Cost Estimation CP ER 9299910::01-JUN-2009::BEGIN
3606 OPEN c_conc_req_phase(l_visit_rec.Visit_id);
3607 FETCH c_conc_req_phase INTO l_dummy_val;
3608 IF(c_conc_req_phase%FOUND) THEN
3609 FND_MESSAGE.Set_Name('AHL','AHL_VWP_CP_P2P_IN_PROGS');
3610 FND_MSG_PUB.ADD;
3611 RAISE FND_API.G_EXC_ERROR;
3612 END IF;
3613 CLOSE c_conc_req_phase;
3614 --salogan::Modified the cursor fetch to handle both request id from P2P and Cost Estimation CP ER 9299910::01-JUN-2009::END
3615 --TCHIMIRA::P2P CP ER 9151144::09-DEC-2009::END
3616
3617
3618 -- To validate Object version number.
3619 IF (c_visit_rec.object_version_number <> l_visit_rec.object_version_number) THEN
3620 Fnd_Message.Set_Name('AHL','AHL_COM_RECORD_CHANGED');
3621 Fnd_Msg_Pub.ADD;
3622 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
3623 END IF;
3624 --------------------Value OR ID conversion---------------------------
3625 -- Commented for TC changes by Senthil
3626 -- Uncommented by yazhou
3627 IF p_module_type = 'JSP' THEN
3628 l_Visit_rec.organization_id := NULL;
3629 l_Visit_rec.department_id := NULL;
3630 l_Visit_rec.item_instance_id := NULL;
3631 l_Visit_rec.service_request_id := NULL;
3632 l_visit_rec.proj_template_id := NULL;
3633 l_visit_rec.project_id := NULL; --PRAKKUM ::FP PIE :: 13-OCT-2010
3634
3635 IF l_Visit_rec.START_DATE IS NOT NULL AND l_Visit_rec.START_DATE <> fnd_api.g_miss_date THEN
3636 l_date_time_start := TO_DATE(TO_CHAR(l_visit_rec.START_DATE, 'DD-MM-YYYY ') ||
3637 TO_CHAR(NVL(l_visit_rec.START_HOUR,'00')) || ':'||TO_CHAR(NVL(l_visit_rec.START_MIN,'00')),'DD-MM-YYYY HH24:MI');
3638 ELSE
3639 l_Visit_rec.START_DATE:= null;
3640 l_visit_rec.START_HOUR:= null;
3641 l_date_time_start := null;
3642 END IF;
3643
3644 IF l_Visit_rec.PLAN_END_DATE IS NOT NULL AND l_Visit_rec.PLAN_END_DATE <> fnd_api.g_miss_date THEN
3645 l_date_time_end := TO_DATE(TO_CHAR(l_visit_rec.PLAN_END_DATE, 'DD-MM-YYYY ') ||
3646 TO_CHAR(NVL(l_visit_rec.PLAN_END_HOUR,'00')) || ':'|| TO_CHAR(NVL(l_visit_rec.PLAN_END_MIN,'00')) ,'DD-MM-YYYY HH24:MI');
3647 ELSE
3648 l_Visit_rec.PLAN_END_DATE:= null;
3649 l_visit_rec.PLAN_END_HOUR:= null;
3650 l_date_time_end :=null;
3651 END IF;
3652 ELSE
3653 IF l_Visit_rec.START_DATE IS NOT NULL AND l_Visit_rec.START_DATE <> fnd_api.g_miss_date THEN
3654 l_date_time_start := l_visit_rec.START_DATE;
3655 ELSE
3656 l_Visit_rec.START_DATE:= null;
3657 l_date_time_start := null;
3658 END IF;
3659
3660 IF l_Visit_rec.PLAN_END_DATE IS NOT NULL AND l_Visit_rec.PLAN_END_DATE <> fnd_api.g_miss_date THEN
3661 l_date_time_end := l_visit_rec.PLAN_END_DATE;
3662 ELSE
3663 l_Visit_rec.START_DATE:= null;
3664 l_date_time_end := null;
3665 END IF;
3666 END IF;
3667
3668 -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: STARTS
3669 -- Validate that the visit past task start and end dates are withing the visit start and planned end date
3670 OPEN get_visit_task_past_dates(l_Visit_rec.visit_id);
3671 FETCH get_visit_task_past_dates INTO visit_task_past_dates_rec;
3672 CLOSE get_visit_task_past_dates;
3673
3674 IF l_date_time_start IS NOT NULL THEN
3675 IF visit_task_past_dates_rec.past_task_start_date < l_date_time_start THEN
3676 Fnd_Message.SET_NAME('AHL','AHL_VWP_VISIT_START_DATE_INVLD');
3677 Fnd_Msg_Pub.ADD;
3678 RAISE FND_API.G_EXC_ERROR;
3679 END IF;
3680 END IF;
3681 IF l_date_time_end IS NOT NULL THEN
3682 IF visit_task_past_dates_rec.past_task_end_date > l_date_time_end THEN
3683 Fnd_Message.SET_NAME('AHL','AHL_VWP_VISIT_END_DATE_INVLD');
3684 Fnd_Msg_Pub.ADD;
3685 RAISE FND_API.G_EXC_ERROR;
3686 END IF;
3687 END IF;
3688 -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: END
3689
3690 -------------------- UPDATE FOR VISIT ----------------
3691 -- Transit Visit change
3692 -- yazhou start
3693 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3694 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Status Code = ' || l_Visit_rec.status_code);
3695 END IF;
3696
3697 -- not allowed to update if status code is not planning, released or partially released.
3698 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063
3699 -- Even the visits in DRAFT status can be updated
3700 IF c_visit_rec.status_code NOT IN ('DRAFT','PLANNING','RELEASED', 'PARTIALLY RELEASED') THEN
3701 Fnd_Message.SET_NAME('AHL','AHL_VWP_INVALID_STATUS_NO_EDIT');
3702 Fnd_Msg_Pub.ADD;
3703 RAISE Fnd_Api.G_EXC_ERROR;
3704 END IF;
3705
3706 -- PRAKKUM :: 28-JUN-2011 :: VWPE :: ER 12730539
3707 OPEN c_is_old_visit(l_Visit_rec.visit_id);
3708 FETCH c_is_old_visit INTO l_is_old_visit_dets;
3709 CLOSE c_is_old_visit;
3710
3711 -- Process fields that are only updateable when visit is in Planning status
3712 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063
3713 -- Add the new DRAFT status to the below list
3714 IF c_visit_rec.status_code IN ('PLANNING','DRAFT') THEN
3715 ----- Dropdowns on Update Visit UI Screen-------------
3716 -- For SPACE CATEGORY CODE
3717 IF l_Visit_rec.space_category_code = Fnd_Api.G_MISS_CHAR THEN
3718 l_Visit_rec.space_category_code := Null;
3719 END IF;
3720
3721 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3722 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Space Category Code = ' || l_Visit_rec.space_category_code);
3723 END IF;
3724
3725 ----------- LOVs on Update Visit UI Screen---
3726 -- For VISIT TYPE
3727 -- To find Visit Type Code when Visit Type Name has input values
3728 IF l_Visit_rec.visit_type_name IS NOT NULL AND l_Visit_rec.visit_type_name <> Fnd_Api.G_MISS_CHAR THEN
3729 AHL_VWP_RULES_PVT.Check_Lookup_Name_Or_Id
3730 ( p_lookup_type => 'AHL_PLANNING_VISIT_TYPE',
3731 p_lookup_code => NULL,
3732 p_meaning => l_Visit_rec.visit_type_name,
3733 p_check_id_flag => 'Y',
3734 x_lookup_code => l_Visit_rec.visit_type_code,
3735 x_return_status => l_return_status
3736 );
3737
3738 IF NVL(l_return_status, 'X') <> 'S' THEN
3739 Fnd_Message.SET_NAME('AHL','AHL_VWP_TYPE_CODE_NOT_EXISTS');
3740 Fnd_Msg_Pub.ADD;
3741 RAISE Fnd_Api.G_EXC_ERROR;
3742 END IF;
3743 END IF;
3744
3745 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063
3746 IF ((c_Visit_rec.VISIT_TYPE_CODE IS NOT NULL) AND (NVL(l_Visit_rec.VISIT_TYPE_CODE,'X') <> c_Visit_rec.visit_type_code))
3747 THEN
3748 Fnd_Message.SET_NAME('AHL','AHL_VWP_TYPE_NOT_EDIT');
3749 Fnd_Msg_Pub.ADD;
3750 RAISE Fnd_Api.G_EXC_ERROR;
3751 END IF;
3752
3753 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3754 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit Type' || l_Visit_rec.visit_type_name || '-' || l_Visit_rec.visit_type_code);
3755 END IF;
3756
3757 -- For SERVICE REQUEST
3758 -- To Convert Service Request Number to Service Request Id
3759 IF (l_Visit_rec.service_request_number IS NOT NULL AND
3760 l_Visit_rec.service_request_number <> Fnd_Api.G_MISS_CHAR ) THEN
3761
3762 AHL_VWP_RULES_PVT.Check_SR_Request_Number_Or_Id
3763 ( p_service_id => l_Visit_rec.service_request_id,
3764 p_service_number => l_Visit_rec.service_request_number,
3765 x_service_id => l_service_id,
3766 x_return_status => l_return_status,
3767 x_error_msg_code => l_msg_data);
3768
3769 IF NVL(l_return_status,'x') <> 'S' THEN
3770 Fnd_Message.SET_NAME('AHL','AHL_VWP_SERVICE_REQ_NOT_EXISTS');
3771 Fnd_Msg_Pub.ADD;
3772 RAISE Fnd_Api.g_exc_error;
3773 END IF;
3774
3775 --Assign the returned value
3776 l_Visit_rec.service_request_id := l_service_id;
3777
3778 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3779 fnd_log.string(fnd_log.level_statement,L_DEBUG,'SR Id/Number = ' || l_Visit_rec.service_request_id || '-' || l_Visit_rec.service_request_number );
3780 END IF;
3781 END IF;
3782 ----------- End defining and validate all LOVs on Update Visit UI Screen---
3783 -- For Priority
3784 -- To Convert Priority Value to Code
3785 IF l_Visit_rec.priority_value IS NOT NULL AND l_Visit_rec.priority_value <> Fnd_Api.G_MISS_CHAR THEN
3786 AHL_VWP_RULES_PVT.Check_Lookup_Name_Or_Id
3787 (p_lookup_type => 'AHL_VWP_VISIT_PRIORITY',
3788 p_lookup_code => l_Visit_rec.priority_code,
3789 p_meaning => l_Visit_rec.priority_value,
3790 p_check_id_flag => 'Y',
3791 x_lookup_code => l_priority_code,
3792 x_return_status => l_return_status);
3793
3794 IF NVL(l_return_status, 'X') <> 'S' THEN
3795 Fnd_Message.SET_NAME('AHL','AHL_VWP_PRI_NOT_EXISTS');
3796 Fnd_Msg_Pub.ADD;
3797 RAISE Fnd_Api.G_EXC_ERROR;
3798 END IF;
3799 l_visit_rec.priority_code := l_priority_code;
3800 END IF;
3801
3802 -- For Organization
3803 -- To Convert Organization Name to ID
3804 IF (l_visit_rec.ORG_NAME IS NOT NULL AND l_visit_rec.ORG_NAME <> Fnd_Api.G_MISS_CHAR ) OR
3805 (l_visit_rec.organization_id IS NOT NULL AND l_visit_rec.organization_id <> Fnd_Api.G_MISS_NUM )
3806 THEN
3807 AHL_VWP_RULES_PVT.Check_Org_Name_Or_Id
3808 (p_organization_id => l_visit_rec.organization_id,
3809 p_org_name => l_visit_rec.ORG_NAME,
3810 x_organization_id => l_organization_id,
3811 x_return_status => l_return_status,
3812 x_error_msg_code => l_msg_data);
3813
3814 IF NVL(l_return_status,'x') <> 'S' THEN
3815 Fnd_Message.SET_NAME('AHL','AHL_VWP_ORG_NOT_EXISTS');
3816 Fnd_Msg_Pub.ADD;
3817 RAISE Fnd_Api.G_EXC_ERROR;
3818 END IF;
3819
3820 l_visit_rec.organization_id := l_organization_id;
3821
3822 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3823 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Organization ID' || l_visit_rec.organization_id);
3824 END IF;
3825 END IF;
3826
3827 IF l_visit_rec.organization_id IS NULL OR l_visit_rec.organization_id = Fnd_Api.G_MISS_NUM THEN
3828 --Assign the department to Null if organization id is null
3829 l_visit_rec.department_id := NULL;
3830 l_visit_rec.organization_id:= NULL;
3831 ELSE
3832 IF (l_visit_rec.DEPT_NAME IS NOT NULL AND l_visit_rec.DEPT_NAME <> Fnd_Api.G_MISS_CHAR )OR
3833 (l_visit_rec.department_id IS NOT NULL AND l_visit_rec.department_id <> Fnd_Api.G_MISS_NUM )
3834 THEN
3835 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3836 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Inside Dept Name/ID - '||l_visit_rec.DEPT_NAME ||' - '||l_visit_rec.department_id );
3837 END IF;
3838
3839 AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id
3840 ( p_organization_id => l_visit_rec.organization_id,
3841 p_dept_name => l_visit_rec.DEPT_NAME,
3842 p_department_id => l_visit_rec.department_id,
3843 x_department_id => l_department_id,
3844 x_return_status => l_return_status,
3845 x_error_msg_code => l_msg_data);
3846
3847 IF NVL(l_return_status,'x') <> 'S' THEN
3848 Fnd_Message.SET_NAME('AHL','AHL_VWP_DEPT_NOT_EXISTS');
3849 Fnd_Msg_Pub.ADD;
3850 RAISE Fnd_Api.G_EXC_ERROR;
3851 END IF;
3852
3853 l_visit_rec.department_id := l_department_id;
3854 AHL_VWP_RULES_PVT.CHECK_DEPARTMENT_SHIFT
3855 (p_dept_id => l_visit_rec.department_id,
3856 x_return_status => l_return_status);
3857
3858 IF NVL(l_return_status,'x') <> 'S' THEN
3859 Fnd_Message.SET_NAME('AHL','AHL_VWP_NO_DEPT_SHIFT');
3860 Fnd_Msg_Pub.ADD;
3861 RAISE Fnd_Api.G_EXC_ERROR;
3862 END IF;
3863
3864 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
3865 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Department ID' || l_visit_rec.department_id);
3866 END IF;
3867 ELSE
3868 l_visit_rec.department_id := NULL;
3869 END IF ; --Dept Not Null
3870 END IF ; --Org Not Null
3871
3872 -- For Project Template and Project Name
3873 --PRAKKUM ::FP PIE :: 13-OCT-2010 :: BEGIN
3874 IF l_visit_rec.proj_template_name IS NOT NULL THEN
3875 IF l_visit_rec.project_name IS NOT NULL THEN
3876 Fnd_Message.SET_NAME('AHL', 'AHL_VWP_INV_PROJ_AND_TEMP');
3877 Fnd_Msg_Pub.ADD;
3878 RAISE Fnd_Api.G_EXC_ERROR;
3879 ELSE --i.e. name is null but template is not null
3880 AHL_VWP_RULES_PVT.Check_Project_Template_Or_Id
3881 ( p_proj_temp_name => l_visit_rec.proj_template_name,
3882 x_project_id => l_proj_template_id,
3883 x_return_status => l_return_status,
3884 x_error_msg_code => l_msg_data);
3885
3886 IF NVL(l_return_status, 'X') <> 'S' THEN
3887 Fnd_Message.SET_NAME('AHL','AHL_VWP_INVALID_PROTEM');
3888 Fnd_Msg_Pub.ADD;
3889 RAISE Fnd_Api.G_EXC_ERROR;
3890 END IF;
3891 END IF; --project name not null
3892 ELSE
3893 -- If Project Template Name is null
3894 IF l_visit_rec.project_name IS NULL THEN
3895 IF (l_visit_rec.project_id IS NOT NULL) OR (l_visit_rec.proj_template_id IS NOT NULL) THEN
3896 l_proj_template_id := l_visit_rec.proj_template_id;
3897 l_project_id := l_visit_rec.project_id;
3898 ELSE
3899 l_proj_template_id := FND_PROFILE.VALUE('AHL_DEFAULT_PA_TEMPLATE_ID');
3900 END IF;
3901 ELSE --project template name is null but project name is not null
3902 OPEN get_project_id_csr (l_visit_rec.project_name);
3903 FETCH get_project_id_csr INTO l_project_id;
3904 IF get_project_id_csr%NOTFOUND THEN
3905 Fnd_Message.SET_NAME('AHL', 'AHL_VWP_INV_PROJ_NAME');
3906 Fnd_Message.Set_Token('PROJ_NAME', l_visit_rec.project_name);
3907 Fnd_Msg_Pub.ADD;
3908 CLOSE get_project_id_csr;
3909 RAISE Fnd_Api.G_EXC_ERROR;
3910 END IF;
3911 CLOSE get_project_id_csr;
3912 END IF;
3913 END IF;
3914
3915 -- If project has been created using project template, project name has been nullified
3916 -- Hence in this case if l_project_id is null, populate it with the value from the DB
3917 IF ((c_visit_rec.project_id IS NOT NULL)
3918 AND ((c_visit_rec.project_template_id IS NOT NULL) OR (c_visit_rec.top_project_task_id IS NOT NULL))
3919 AND (l_project_id IS NULL)) THEN
3920 l_project_id := c_visit_rec.project_id;
3921 END IF;
3922
3923 IF ((NVL(l_proj_template_id,10) <> NVL(c_visit_rec.project_template_id, 10)) OR (NVL(l_project_id,10) <> NVL(c_visit_rec.project_id,10)))
3924 AND (((c_visit_rec.project_id IS NOT NULL) AND (c_visit_rec.project_template_id IS NOT NULL))
3925 OR ((c_visit_rec.project_id IS NOT NULL) AND (c_visit_rec.top_project_task_id IS NOT NULL))) THEN
3926 -- Project Template or Project Name cannot be updated if Project has been created for the Visit
3927 Fnd_Message.SET_NAME('AHL','AHL_VWP_PROJ_CRTD');
3928 Fnd_Msg_Pub.ADD;
3929 RAISE Fnd_Api.G_EXC_ERROR;
3930 ELSE
3931 l_visit_rec.proj_template_id := l_proj_template_id;
3932 c_visit_rec.project_id := l_project_id;
3933 END IF;
3934 IF l_visit_rec.project_id IS NOT NULL THEN
3935 OPEN validate_proj_date_csr (l_visit_rec.project_id);
3936 FETCH validate_proj_date_csr INTO l_dummy_char;
3937 IF validate_proj_date_csr%NOTFOUND THEN
3938 Fnd_Message.SET_NAME('AHL', 'AHL_VWP_INV_PROJECT');
3939 Fnd_Message.Set_Token('PROJ_NAME', l_visit_rec.project_name);
3940 Fnd_Message.Set_Token('PROJ_ID', l_visit_rec.project_id);
3941 Fnd_Msg_Pub.ADD;
3942 CLOSE validate_proj_date_csr;
3943 RAISE Fnd_Api.G_EXC_ERROR;
3944 END IF;
3945 CLOSE validate_proj_date_csr;
3946 END IF;
3947 --PRAKKUM ::FP PIE :: 13-OCT-2010 :: END
3948
3949 /*BB5854712 - sowsubra - starts*/
3950 l_dummy := NULL;
3951
3952 IF ((l_visit_rec.subinventory IS NOT NULL) AND (l_visit_rec.locator_segment IS NULL)) THEN
3953 Fnd_Message.SET_NAME('AHL','AHL_VWP_LOCATOR_NULL');
3954 Fnd_Msg_Pub.ADD;
3955 RAISE Fnd_Api.G_EXC_ERROR;
3956 ELSIF ((l_visit_rec.subinventory IS NULL) AND (l_visit_rec.locator_segment IS NOT NULL))THEN
3957 Fnd_Message.SET_NAME('AHL','AHL_VWP_SUBINVENTORY_NULL');
3958 Fnd_Msg_Pub.ADD;
3959 RAISE Fnd_Api.G_EXC_ERROR;
3960 ELSIF ((l_visit_rec.subinventory IS NOT NULL) AND (l_visit_rec.locator_segment IS NOT NULL)) THEN
3961
3962 OPEN c_subinv_validate (l_visit_rec.subinventory, l_visit_rec.organization_id);
3963 FETCH c_subinv_validate INTO l_status_id;
3964 IF c_subinv_validate%NOTFOUND THEN
3965 CLOSE c_subinv_validate;
3966 Fnd_Message.SET_NAME('AHL','AHL_VWP_SUBINV_NOT_EXISTS');
3967 Fnd_Msg_Pub.ADD;
3968 RAISE Fnd_Api.G_EXC_ERROR;
3969 ELSE
3970 IF l_status_id in (NVL(fnd_profile.value('AHL_MTL_MAT_STATUS_UNSERVICABLE'), -1), NVL(fnd_profile.value('AHL_MTL_MAT_STATUS_MRB'), -1)) THEN
3971 CLOSE c_subinv_validate;
3972 FND_MESSAGE.SET_NAME('AHL', 'AHL_SUBINVENTORY_NOT_SVC');
3973 FND_MESSAGE.Set_Token('INV', l_visit_rec.subinventory);
3974 FND_MSG_PUB.ADD;
3975 RAISE Fnd_Api.G_EXC_ERROR;
3976 END IF;
3977 END IF;
3978 CLOSE c_subinv_validate;
3979
3980 l_dummy := NULL;
3981
3982 OPEN c_loc_validate (l_visit_rec.organization_id, l_visit_rec.subinventory,l_visit_rec.locator_segment );
3983 FETCH c_loc_validate INTO l_inv_loc_id;
3984 IF c_loc_validate%NOTFOUND THEN
3985 Fnd_Message.SET_NAME('AHL','AHL_VWP_PHY_LOCATOR_NOT_EXISTS');
3986 Fnd_Msg_Pub.ADD;
3987 CLOSE c_loc_validate;
3988 RAISE Fnd_Api.G_EXC_ERROR;
3989 END IF;
3990 CLOSE c_loc_validate;
3991
3992 l_visit_rec.inv_locator_id := l_inv_loc_id;
3993
3994 ELSE
3995 l_visit_rec.inv_locator_id := null;
3996 END IF;
3997 /*BB5854712 - sowsubra - ends*/
3998
3999 ELSE -- Visit in Released or Partially Released Status
4000 l_visit_rec.proj_template_id := c_visit_rec.project_template_id;
4001 l_visit_rec.priority_code := c_visit_rec.priority_code;
4002 l_Visit_rec.VISIT_TYPE_CODE :=c_Visit_rec.VISIT_TYPE_CODE;
4003 l_Visit_rec.SERVICE_REQUEST_ID := c_Visit_rec.SERVICE_REQUEST_ID;
4004 l_Visit_rec.VISIT_NAME := c_Visit_rec.VISIT_NAME;
4005 l_Visit_rec.DESCRIPTION := c_Visit_rec.DESCRIPTION;
4006 l_Visit_rec.ORGANIZATION_ID := c_Visit_rec.ORGANIZATION_ID;
4007 --Added by tchimira for Bug# 9526695 on 30-MAR-2010
4008 l_Visit_rec.INV_LOCATOR_ID := c_Visit_rec.INV_LOCATOR_ID;
4009 -------- R12 changes For Serial Number Reservations Start------------
4010 -------- AnRaj added condition on 17th June 2005 ------------
4011 IF p_module_type = 'JSP' THEN
4012 l_Visit_rec.DEPARTMENT_ID := c_Visit_rec.DEPARTMENT_ID;
4013 END IF;
4014 -------- R12 changes For Serial Number Reservations End---------------
4015 END IF; -- Visit in Planning Status
4016
4017 -- For Planned Start/End Date
4018 --- Planned start/end dates are madatory for transit visit
4019 --- AnRaj added
4020 --- Planned Start/End Dates are mandatory for visits which are in status Released/Partially Released
4021 --- as per the updates by Jay and Yan in the CMRO Forum, issue number 169
4022 IF c_visit_rec.status_code IN ('RELEASED', 'PARTIALLY RELEASED') THEN
4023 IF l_date_time_start IS NULL THEN
4024 Fnd_Message.SET_NAME('AHL','AHL_VWP_ST_DT_REQ');
4025 Fnd_Msg_Pub.ADD;
4026 RAISE FND_Api.G_EXC_ERROR;
4027 END IF;
4028
4029 IF l_date_time_end IS NULL THEN
4030 Fnd_Message.SET_NAME('AHL','AHL_VWP_END_DT_REQ');
4031 Fnd_Msg_Pub.ADD;
4032 RAISE FND_Api.G_EXC_ERROR;
4033 END IF;
4034 END IF;
4035
4036 IF c_Visit_rec.unit_schedule_id IS NOT NULL AND c_Visit_rec.unit_schedule_id <> FND_API.G_MISS_NUM
4037 THEN
4038 -- Planned Start Date is madatory for transit visit
4039 IF l_date_time_start IS NULL THEN
4040 Fnd_Message.SET_NAME('AHL','AHL_VWP_TC_ST_DT_REQ');
4041 Fnd_Msg_Pub.ADD;
4042 RAISE FND_Api.G_EXC_ERROR;
4043 END IF;
4044
4045 -- Planned End Date is madatory for transit visit
4046 IF l_date_time_end IS NULL THEN
4047 Fnd_Message.SET_NAME('AHL','AHL_VWP_TC_END_DT_REQ');
4048 Fnd_Msg_Pub.ADD;
4049 RAISE FND_Api.G_EXC_ERROR;
4050 END IF;
4051 END IF;
4052
4053 -- To validate visit start date should be less than plan end date
4054 IF l_date_time_end IS NOT NULL AND l_date_time_start IS NOT NULL THEN
4055 IF (l_date_time_start > l_date_time_end) THEN
4056 Fnd_Message.SET_NAME('AHL','AHL_VWP_START_DT_GTR_CLOSE_DT');
4057 Fnd_Msg_Pub.ADD;
4058 RAISE Fnd_Api.G_EXC_ERROR;
4059 END IF;
4060 END IF;
4061 l_visit_rec.STATUS_CODE := c_Visit_rec.STATUS_CODE;
4062
4063 -- If Visit dates are changed for a visit in released status
4064 -- then visit status needs to be changed to Partially Released
4065 IF NVL(TO_CHAR(l_date_time_start,'DD-MM-YYYY HH24:MI'),'XXX') <> NVL(TO_CHAR(c_Visit_rec.START_DATE_TIME,'DD-MM-YYYY HH24:MI'),'XXX')
4066 OR NVL(TO_CHAR(l_date_time_end,'DD-MM-YYYY HH24:MI'),'XXX') <> NVL(TO_CHAR(c_Visit_rec.CLOSE_DATE_TIME,'DD-MM-YYYY HH24:MI'),'XXX') THEN
4067 IF c_Visit_rec.STATUS_CODE = 'RELEASED' THEN
4068 l_visit_rec.STATUS_CODE := 'PARTIALLY RELEASED';
4069 END IF;
4070 END IF;
4071
4072 -- For all optional fields check if its g_miss_num/g_miss_char/g_miss_date
4073 -- then Null else the value call Default_Missing_Attribs procedure
4074 Default_Missing_Attribs
4075 (
4076 p_x_visit_rec => l_Visit_rec
4077 );
4078
4079
4080 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011, commented out
4081 * following check as it's already present in Validate_Visit API.
4082 ----------------------- Validate ----------------------
4083 IF p_validation_level >= Jtf_Plsql_Api.g_valid_level_item THEN
4084 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4085 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Check_Visit_Items');
4086 END IF;
4087
4088 Check_Visit_Items (
4089 p_Visit_rec => l_visit_rec,
4090 p_validation_mode => Jtf_Plsql_Api.g_update,
4091 x_return_status => l_return_status
4092 );
4093
4094 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4095 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Check_Visit_Items : l_return_status - '|| l_return_status);
4096 END IF;
4097 END IF;
4098 */
4099
4100 -- SATHAPLI::Component Maintenance Planning Project, 02-Nov-2011, start
4101 -- set the Planning and In-Repair locators in the record, before Validate_Visit call
4102 -- Planning
4103 IF (l_visit_rec.comp_planning_subinv IS NOT NULL AND l_visit_rec.comp_planning_loc_seg IS NOT NULL) THEN
4104 l_status_id := NULL;
4105 OPEN c_subinv_validate (l_visit_rec.comp_planning_subinv, l_visit_rec.organization_id);
4106 FETCH c_subinv_validate INTO l_status_id;
4107 CLOSE c_subinv_validate;
4108
4109 IF (l_status_id <> NVL(FND_PROFILE.VALUE('AHL_MTL_MAT_STATUS_UNSERVICABLE'), l_status_id)) THEN
4110 -- Planning and In-Repair Sub Inventory should be Unserviceable.
4111 FND_MESSAGE.SET_NAME('AHL', 'AHL_CMP_SUBINV_NOT_UNSVC');
4112 FND_MSG_PUB.ADD;
4113 RAISE FND_API.G_EXC_ERROR;
4114 END IF;
4115
4116 l_inv_loc_id := NULL;
4117 OPEN c_loc_validate (l_visit_rec.organization_id, l_visit_rec.comp_planning_subinv, l_visit_rec.comp_planning_loc_seg);
4118 FETCH c_loc_validate INTO l_inv_loc_id;
4119 CLOSE c_loc_validate;
4120
4121 l_visit_rec.comp_planning_loc_id := l_inv_loc_id;
4122 ELSE
4123 l_visit_rec.comp_planning_loc_id := NULL;
4124 END IF;
4125
4126 -- In-Repair
4127 IF (l_visit_rec.comp_inrepair_subinv IS NOT NULL AND l_visit_rec.comp_inrepair_loc_seg IS NOT NULL) THEN
4128 l_status_id := NULL;
4129 OPEN c_subinv_validate (l_visit_rec.comp_inrepair_subinv, l_visit_rec.organization_id);
4130 FETCH c_subinv_validate INTO l_status_id;
4131 CLOSE c_subinv_validate;
4132
4133 IF (l_status_id <> NVL(FND_PROFILE.VALUE('AHL_MTL_MAT_STATUS_UNSERVICABLE'), l_status_id)) THEN
4134 -- Planning and In-Repair Sub Inventory should be Unserviceable.
4135 FND_MESSAGE.SET_NAME('AHL', 'AHL_CMP_SUBINV_NOT_UNSVC');
4136 FND_MSG_PUB.ADD;
4137 RAISE FND_API.G_EXC_ERROR;
4138 END IF;
4139
4140 l_inv_loc_id := NULL;
4141 OPEN c_loc_validate (l_visit_rec.organization_id, l_visit_rec.comp_inrepair_subinv, l_visit_rec.comp_inrepair_loc_seg);
4142 FETCH c_loc_validate INTO l_inv_loc_id;
4143 CLOSE c_loc_validate;
4144
4145 l_visit_rec.comp_inrepair_loc_id := l_inv_loc_id;
4146 ELSE
4147 l_visit_rec.comp_inrepair_loc_id := NULL;
4148 END IF;
4149
4150 -- Physical, Planning and In-Repair locators should be different
4151 -- NOTE: 1) no need to check for NULL explicitly
4152 -- 2) ideally, physical sub inventory would be serviceable, whereas other two would be unserviceable
4153 IF (l_visit_rec.inv_locator_id = l_visit_rec.comp_planning_loc_id OR
4154 l_visit_rec.inv_locator_id = l_visit_rec.comp_inrepair_loc_id OR
4155 l_visit_rec.comp_planning_loc_id = l_visit_rec.comp_inrepair_loc_id) THEN
4156 -- Please set different locators for Physical, Planning and In-Repair Sub Inventories.
4157 FND_MESSAGE.SET_NAME('AHL', 'AHL_CMP_DIFF_LOCATORS');
4158 FND_MSG_PUB.ADD;
4159 RAISE FND_API.G_EXC_ERROR;
4160 END IF;
4161 -- SATHAPLI::Component Maintenance Planning Project, 02-Nov-2011, end
4162
4163 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011, added call to Validate_Visit API
4164 * similar to what happens in Create_Visit API for common validations.
4165 */
4166 IF (l_log_statement >= l_log_current_level) THEN
4167 FND_LOG.string(l_log_statement, l_debug, ' Invoking Validate_Visit API');
4168 END IF;
4169
4170 Validate_Visit
4171 (
4172 p_api_version => l_api_version,
4173 p_init_msg_list => p_init_msg_list,
4174 p_commit => FND_API.g_false,
4175 p_validation_level => p_validation_level,
4176 p_Visit_rec => l_Visit_rec,
4177 x_return_status => l_return_status,
4178 x_msg_count => l_msg_count,
4179 x_msg_data => l_msg_data
4180 );
4181
4182 IF (l_log_statement >= l_log_current_level) THEN
4183 FND_LOG.string(l_log_statement, l_debug, ' After call to Validate_Visit API, Return Status = ' || l_return_status);
4184 END IF;
4185
4186 IF ( l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
4187 x_return_status := l_return_status;
4188 x_msg_count := l_msg_count;
4189 x_msg_data := l_msg_data;
4190
4191 IF ( l_return_status = FND_API.G_RET_STS_ERROR ) THEN
4192 RAISE FND_API.G_EXC_ERROR;
4193 ELSIF ( l_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
4194 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4195 END IF;
4196 END IF;
4197
4198 -- MANESING::Component Maintenance Planning Project, 02-Nov-2011
4199 -- Once a Component Visit is Planned, none of the sub-inventories or locators can be updated.
4200 IF (l_is_comp_visit = 'Y' AND
4201 c_visit_rec.status_code <> 'DRAFT') THEN
4202
4203 IF (NVL(l_visit_rec.inv_locator_id, -777) <> NVL(c_visit_rec.inv_locator_id, -777) OR
4204 l_visit_rec.comp_planning_loc_id <> c_visit_rec.comp_planning_loc_id OR
4205 l_visit_rec.comp_inrepair_loc_id <> c_visit_rec.comp_inrepair_loc_id) THEN
4206 -- Cannot update Physical, Planning or In-Repair Sub Inventory or Locator when the Component Visit is not in Draft status.
4207 FND_MESSAGE.set_name('AHL', 'AHL_CMP_LOCATORS_NOUPDATE');
4208 FND_MSG_PUB.add;
4209 RAISE FND_API.G_EXC_ERROR;
4210 END IF;
4211 END IF;
4212
4213 -- if organization is changed, then reset all the task department and space changed flag
4214 -- and cancel all the workorders in production
4215 IF (NVL(l_visit_rec.organization_id,-777) <> NVL(c_visit_rec.organization_id,-777)) THEN
4216 -- To set department_id to NULL in case if the visit's organization is changed
4217 OPEN c_task(l_visit_rec.visit_id);
4218 LOOP
4219 FETCH c_task INTO c_task_rec;
4220 EXIT WHEN c_task%NOTFOUND;
4221 -- Tasks found for visit
4222 -- To update department_id to NULL when visit's organization is changed
4223 UPDATE AHL_VISIT_TASKS_B
4224 SET DEPARTMENT_ID = NULL,
4225 OBJECT_VERSION_NUMBER = c_task_rec.object_version_number + 1
4226 WHERE VISIT_TASK_ID = c_task_rec.visit_task_id
4227 AND DEPARTMENT_ID IS NOT NULL;
4228
4229 l_tasks_ovn_updated_count := l_tasks_ovn_updated_count +1; -- VWPE :: PRAKKUM :: 26-APR-2011
4230
4231 END LOOP;
4232 CLOSE c_task;
4233
4234 SPACE_CHANGED_FLAG := 'Y';
4235 l_is_dept_changed := true; --PRAKKUM :: VWPE: ER:12424063 :: 12-APR-2011 :: flag
4236
4237 -- To find out if visit has workorder in production store this info in rec type
4238 OPEN c_Visit_WO (l_visit_rec.visit_id);
4239 FETCH c_visit_WO INTO l_workrec;
4240 IF c_visit_WO%FOUND THEN
4241 CLOSE c_visit_WO;
4242
4243 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4244 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs');
4245 END IF;
4246
4247 AHL_PRD_WORKORDER_PVT.cancel_visit_jobs
4248 (p_api_version => 1.0,
4249 p_init_msg_list => FND_API.G_TRUE,
4250 p_commit => FND_API.G_FALSE,
4251 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4252 p_default => FND_API.G_FALSE,
4253 p_module_type => NULL,
4254 x_return_status => l_return_status,
4255 x_msg_count => l_msg_count,
4256 x_msg_data => l_msg_data,
4257 p_visit_id => l_Visit_rec.visit_id,
4258 p_unit_effectivity_id => NULL,
4259 p_workorder_id => NULL);
4260
4261 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4262 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs - l_return_status : '||l_return_status);
4263 END IF;
4264
4265 IF l_return_status <> 'S' THEN
4266 RAISE Fnd_Api.G_EXC_ERROR;
4267 END IF;
4268 ELSE
4269 CLOSE c_visit_WO;
4270 END IF;
4271 END IF;
4272
4273 IF (NVL(l_visit_rec.department_id,-777) <> NVL(c_visit_rec.department_id,-777)) THEN
4274 l_is_dept_changed := true; --PRAKKUM :: VWPE: ER:12424063 :: 12-APR-2011 :: flag
4275 END IF;
4276
4277 -- if department is changed, then set space changed flag
4278 --All the wip jobs for this visit to be updated with new department and start/end time;
4279 IF space_changed_flag <> 'Y' THEN
4280 IF (NVL(l_visit_rec.department_id,-777) <> NVL(c_visit_rec.department_id,-777)) THEN
4281 space_changed_flag := 'Y';
4282 -- cancel all the workorders for the visit if visit department is cleared up.
4283 IF l_visit_rec.department_id is null and c_visit_rec.department_id is not null THEN
4284 OPEN c_Visit_WO (l_visit_rec.visit_id);
4285 FETCH c_visit_WO INTO l_workrec;
4286 IF c_visit_WO%found THEN
4287 close c_visit_WO;
4288
4289 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4290 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs');
4291 END IF;
4292
4293 AHL_PRD_WORKORDER_PVT.cancel_visit_jobs
4294 (p_api_version => 1.0,
4295 p_init_msg_list => FND_API.G_TRUE,
4296 p_commit => FND_API.G_FALSE,
4297 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
4298 p_default => FND_API.G_FALSE,
4299 p_module_type => NULL,
4300 x_return_status => l_return_status,
4301 x_msg_count => l_msg_count,
4302 x_msg_data => l_msg_data,
4303 p_visit_id => l_Visit_rec.visit_id,
4304 p_unit_effectivity_id => NULL,
4305 p_workorder_id => NULL);
4306
4307 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4308 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs - l_return_status : '||l_return_status);
4309 END IF;
4310
4311 IF l_return_status <> 'S' THEN
4312 RAISE Fnd_Api.G_EXC_ERROR;
4313 END IF;
4314 ELSE
4315 close c_visit_WO;
4316 END IF;
4317 ELSIF l_visit_rec.department_id is not null
4318 and c_visit_rec.department_id is not null
4319 and l_visit_rec.department_id <>c_visit_rec.department_id THEN
4320
4321 l_visit_end_date:= AHL_VWP_TIMES_PVT.get_visit_end_time(l_visit_rec.visit_id);
4322 -- To find out if visit has workorder in production store this info in rec type
4323 OPEN c_Visit_WO (l_visit_rec.visit_id);
4324 FETCH c_visit_WO INTO l_workrec;
4325
4326 IF c_visit_WO%found THEN
4327 l_workorder_rec.WORKORDER_ID := l_workrec.workorder_id;
4328 l_workorder_rec.OBJECT_VERSION_NUMBER := l_workrec.object_version_number;
4329 l_workorder_rec.DEPARTMENT_ID := l_visit_rec.department_id;
4330 -- l_workorder_rec.SCHEDULED_START_DATE := l_date_time_start;
4331 -- l_workorder_rec.SCHEDULED_END_DATE := l_visit_end_date;
4332
4333 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4334 fnd_log.string(fnd_log.level_statement,L_DEBUG,'VISIT - Before calling AHL_PRD_WORKORDER_PVT.update_job API');
4335 END IF;
4336
4337 AHL_PRD_WORKORDER_PVT.update_job
4338 ( p_api_version =>1.0,
4339 p_init_msg_list =>fnd_api.g_false,
4340 p_commit =>fnd_api.g_false,
4341 p_validation_level =>p_validation_level,
4342 p_default =>fnd_api.g_false,
4343 p_module_type =>'API',
4344 x_return_status =>l_return_status,
4345 x_msg_count =>x_msg_count,
4346 x_msg_data =>x_msg_data,
4347 p_wip_load_flag =>'Y',
4348 p_x_prd_workorder_rec =>l_workorder_rec,
4349 P_X_PRD_WORKOPER_TBL =>l_workoper_tbl
4350 );
4351
4352 IF l_return_status <> 'S' THEN
4353 CLOSE c_visit_WO;
4354 RAISE Fnd_Api.G_EXC_ERROR;
4355 END IF;
4356
4357 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4358 fnd_log.string(fnd_log.level_statement,L_DEBUG,'VISIT - After calling AHL_PRD_WORKORDER_PVT.update_job API - l_return_status : '||l_return_status);
4359 END IF;
4360 END IF; -- End of visit workorder found
4361 CLOSE c_visit_WO;
4362
4363 -- To find all tasks for the visit so as to update task start and end datetime
4364 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4365 fnd_log.string(fnd_log.level_statement,L_DEBUG,'TASK - To update task start and end date time');
4366 END IF;
4367
4368 OPEN c_task(l_visit_rec.visit_id);
4369 LOOP
4370 FETCH c_task INTO c_task_rec;
4371 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4372 fnd_log.string(fnd_log.level_statement,L_DEBUG,'TASK - ID = ' || c_task_rec.visit_task_id);
4373 END IF;
4374
4375 -- Update workorder for the task only if task is using visit department
4376 IF c_task_rec.department_id is null OR c_task_rec.department_id = FND_API.g_miss_num THEN
4377 OPEN c_Task_WO(c_task_rec.visit_task_id);
4378 FETCH c_Task_WO into l_task_workrec;
4379
4380 IF c_Task_WO%found THEN
4381 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4382 fnd_log.string(fnd_log.level_statement,L_DEBUG,'TASK - Workorder found ');
4383 END IF;
4384 --Update with new times from table
4385 --l_workorder_rec.SCHEDULED_START_DATE := c_task_rec.START_DATE_TIME;
4386 --l_workorder_rec.SCHEDULED_END_DATE := c_task_rec.END_DATE_TIME;
4387 l_workorder_rec.DEPARTMENT_ID := l_visit_rec.department_id;
4388 l_workorder_rec.WORKORDER_ID := l_task_workrec.workorder_id;
4389 l_workorder_rec.OBJECT_VERSION_NUMBER := l_task_workrec.object_version_number;
4390
4391 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4392 fnd_log.string(fnd_log.level_statement,L_DEBUG,'TASK - Workorder Id = ' || l_workorder_rec.WORKORDER_ID);
4393 fnd_log.string(fnd_log.level_statement,L_DEBUG,'TASK - Before calling AHL_PRD_WORKORDER_PVT.update_job');
4394 END IF;
4395
4396 AHL_PRD_WORKORDER_PVT.update_job
4397 ( p_api_version =>1.0,
4398 p_init_msg_list =>fnd_api.g_false,
4399 p_commit =>fnd_api.g_false,
4400 p_validation_level =>p_validation_level,
4401 p_default =>fnd_api.g_false,
4402 p_module_type =>'API',
4403 x_return_status =>l_return_status,
4404 x_msg_count =>x_msg_count,
4405 x_msg_data =>x_msg_data,
4406 p_wip_load_flag =>'Y',
4407 p_x_prd_workorder_rec =>l_workorder_rec,
4408 P_X_PRD_WORKOPER_TBL =>l_workoper_tbl
4409 );
4410
4411 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4412 fnd_log.string(fnd_log.level_statement,L_DEBUG,'TASK - After calling AHL_PRD_WORKORDER_PVT.update_job - l_return_status : '||l_return_status);
4413 END IF;
4414
4415 IF l_return_status <> 'S' THEN
4416 CLOSE c_Task_WO;
4417 CLOSE c_task;
4418 RAISE Fnd_Api.G_EXC_ERROR;
4419 END IF;
4420 END IF;
4421 CLOSE c_Task_WO;
4422 END IF;
4423 EXIT WHEN c_task%NOTFOUND;
4424 END LOOP;
4425 CLOSE c_task;
4426 END IF;
4427 END IF;
4428 END IF;
4429
4430 -- if start date (hour change is not considered) is changed, then set space changed flag
4431 IF space_changed_flag <> 'Y' THEN
4432 IF NVL(TO_CHAR(l_date_time_start,'DD-MM-YYYY'),'XXX') <> NVL(TO_CHAR(c_Visit_rec.START_DATE_TIME,'DD-MM-YYYY'),'XXX') THEN
4433 space_changed_flag := 'Y';
4434 ELSIF NVL(TO_CHAR(l_date_time_end,'DD-MM-YYYY'),'XXX') <> NVL(TO_CHAR(c_Visit_rec.close_date_time,'DD-MM-YYYY'),'XXX') THEN
4435 space_changed_flag := 'Y';
4436 END IF;
4437 END IF;
4438
4439 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: start
4440 -- If the visit status is 'DRAFT', pass the Past dated visit flag value accordingly
4441 -- For NON-DRAFT statused visits, user cannot update the start date from past to future or vice-versa
4442 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4443 fnd_log.string(fnd_log.level_statement,L_DEBUG,'status of the visit is: '||c_visit_rec.status_code||' ,and start date is - '||l_date_time_start);
4444 END IF;
4445 IF c_visit_rec.status_code = 'DRAFT' THEN
4446 IF l_date_time_start IS NOT NULL THEN
4447 -- Added below condition by tchimira for CMP ER changes
4448 -- if the visit is component type then do not flag the visit as past dated irrespective of the start date
4449 IF (l_date_time_start < SYSDATE AND l_is_comp_visit <> 'Y') THEN
4450 l_Visit_rec.PAST_DATED_VISIT_FLAG := 'Y';
4451 ELSE
4452 l_Visit_rec.PAST_DATED_VISIT_FLAG := 'N';
4453 END IF;
4454 END IF;
4455
4456 ELSE
4457 l_Visit_rec.PAST_DATED_VISIT_FLAG := c_visit_rec.PAST_DATED_VISIT_FLAG;
4458 -- SKPATHAK :: 07-SEP-2011 :: VWPE ER: 12856858
4459 -- Removed the below validation
4460 /*IF (c_visit_rec.PAST_DATED_VISIT_FLAG = 'N') AND (l_date_time_start < SYSDATE) THEN
4461 Fnd_Message.SET_NAME('AHL','AHL_VWP_CANNOT_CHNG_ST');
4462 Fnd_Msg_Pub.ADD;
4463 RAISE FND_API.G_EXC_ERROR;
4464 END IF;*/
4465
4466 IF (c_visit_rec.PAST_DATED_VISIT_FLAG = 'Y') AND (l_date_time_start > SYSDATE) THEN
4467 Fnd_Message.SET_NAME('AHL','AHL_VWP_CANNOT_CHNG_ST');
4468 Fnd_Msg_Pub.ADD;
4469 RAISE FND_API.G_EXC_ERROR;
4470 END IF;
4471 END IF;
4472
4473 --VWPE ER-12424063:: tchimira :: 15-FEB -2011 :: end
4474
4475 --TCHIMIRA :: 14-Jun-2012 :: ER 14015560 ::added below flag
4476 -- From UI, if this API is called and the passed flag is null, do NOT change the auto visit type flag
4477 IF ((p_module_type = 'OAF')AND(l_auto_visit_type_flag is null)) THEN
4478 l_auto_visit_type_flag := c_visit_rec.auto_visit_type_flag;
4479 ELSE
4480 l_auto_visit_type_flag := l_Visit_rec.auto_visit_type_flag;
4481 END IF;
4482
4483 -------------------------- Update --------------------
4484 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4485 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Ahl_Visits_Pkg.UPDATE_ROW');
4486 END IF;
4487
4488 Ahl_Visits_Pkg.UPDATE_ROW (
4489 X_VISIT_ID => l_Visit_rec.VISIT_ID,
4490 X_VISIT_NUMBER => c_visit_rec.VISIT_NUMBER,
4491 X_VISIT_TYPE_CODE => l_Visit_rec.VISIT_TYPE_CODE,
4492 X_SIMULATION_PLAN_ID => c_Visit_rec.SIMULATION_PLAN_ID,
4493 X_ITEM_INSTANCE_ID => c_Visit_rec.ITEM_INSTANCE_ID,
4494 X_ITEM_ORGANIZATION_ID => c_Visit_rec.ITEM_ORGANIZATION_ID,
4495 X_INVENTORY_ITEM_ID => c_Visit_rec.INVENTORY_ITEM_ID,
4496 X_ASSO_PRIMARY_VISIT_ID => c_Visit_rec.ASSO_PRIMARY_VISIT_ID,
4497 X_SIMULATION_DELETE_FLAG => c_Visit_rec.SIMULATION_DELETE_FLAG,
4498 X_TEMPLATE_FLAG => c_Visit_rec.TEMPLATE_FLAG,
4499 X_OUT_OF_SYNC_FLAG => c_Visit_rec.OUT_OF_SYNC_FLAG,
4500 X_PROJECT_FLAG => 'Y',
4501 X_PROJECT_ID => c_Visit_rec.PROJECT_ID,
4502 X_SERVICE_REQUEST_ID => l_Visit_rec.SERVICE_REQUEST_ID,
4503 X_SPACE_CATEGORY_CODE => l_Visit_rec.SPACE_CATEGORY_CODE,
4504 X_SCHEDULE_DESIGNATOR => c_Visit_rec.SCHEDULE_DESIGNATOR,
4505 -- manisaga chnaged the record from c_Visit_rec to l_Visit_rec
4506 -- for dff implementation on 22-Feb-2010 -- Start
4507 X_ATTRIBUTE_CATEGORY => l_Visit_rec.ATTRIBUTE_CATEGORY,
4508 X_ATTRIBUTE1 => l_Visit_rec.ATTRIBUTE1,
4509 X_ATTRIBUTE2 => l_Visit_rec.ATTRIBUTE2,
4510 X_ATTRIBUTE3 => l_Visit_rec.ATTRIBUTE3,
4511 X_ATTRIBUTE4 => l_Visit_rec.ATTRIBUTE4,
4512 X_ATTRIBUTE5 => l_Visit_rec.ATTRIBUTE5,
4513 X_ATTRIBUTE6 => l_Visit_rec.ATTRIBUTE6,
4514 X_ATTRIBUTE7 => l_Visit_rec.ATTRIBUTE7,
4515 X_ATTRIBUTE8 => l_Visit_rec.ATTRIBUTE8,
4516 X_ATTRIBUTE9 => l_Visit_rec.ATTRIBUTE9,
4517 X_ATTRIBUTE10 => l_Visit_rec.ATTRIBUTE10,
4518 X_ATTRIBUTE11 => l_Visit_rec.ATTRIBUTE11,
4519 X_ATTRIBUTE12 => l_Visit_rec.ATTRIBUTE12,
4520 X_ATTRIBUTE13 => l_Visit_rec.ATTRIBUTE13,
4521 X_ATTRIBUTE14 => l_Visit_rec.ATTRIBUTE14,
4522 X_ATTRIBUTE15 => l_Visit_rec.ATTRIBUTE15,
4523 -- manisaga chnaged the record from c_Visit_rec to l_Visit_rec
4524 -- for dff implementation on 22-Feb-2010 -- End
4525 X_OBJECT_VERSION_NUMBER => l_Visit_rec.OBJECT_VERSION_NUMBER + 1,
4526 X_ORGANIZATION_ID => l_Visit_rec.ORGANIZATION_ID,
4527 X_DEPARTMENT_ID => l_Visit_rec.DEPARTMENT_ID,
4528 X_STATUS_CODE => l_Visit_rec.STATUS_CODE,
4529 X_START_DATE_TIME => l_date_time_start,
4530 X_CLOSE_DATE_TIME => l_date_time_end,
4531 X_PRICE_LIST_ID => c_Visit_rec.PRICE_LIST_ID,
4532 X_ESTIMATED_PRICE => c_Visit_rec.ESTIMATED_PRICE,
4533 X_ACTUAL_PRICE => c_Visit_rec.ACTUAL_PRICE,
4534 X_OUTSIDE_PARTY_FLAG => c_Visit_rec.OUTSIDE_PARTY_FLAG,
4535 X_ANY_TASK_CHG_FLAG => c_Visit_rec.ANY_TASK_CHG_FLAG,
4536 X_VISIT_NAME => l_Visit_rec.VISIT_NAME,
4537 X_DESCRIPTION => l_Visit_rec.DESCRIPTION,
4538 X_PRIORITY_CODE => l_visit_rec.PRIORITY_CODE,
4539 X_PROJECT_TEMPLATE_ID => l_visit_rec.PROJ_TEMPLATE_ID,
4540 X_LAST_UPDATE_DATE => SYSDATE,
4541 X_LAST_UPDATED_BY => Fnd_Global.USER_ID,
4542 X_LAST_UPDATE_LOGIN => Fnd_Global.LOGIN_ID,
4543 X_UNIT_SCHEDULE_ID => c_Visit_rec.unit_schedule_id,
4544 X_INV_LOCATOR_ID => l_visit_rec.INV_LOCATOR_ID, --Added by sowsubra
4545 -- SATHAPLI::Component Maintenance Planning Project, 02-Nov-2011
4546 -- set the Planning and In-Repair locators
4547 X_COMP_PLANNING_LOC_ID => l_visit_rec.comp_planning_loc_id,
4548 X_COMP_INREPAIR_LOC_ID => l_visit_rec.comp_inrepair_loc_id,
4549 X_TOP_PROJECT_TASK_ID => c_Visit_rec.top_project_task_id, -- PRAKKUM ::FP PIE :: 13-OCT-2010
4550 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: start
4551 X_PAST_DATED_VISIT_FLAG => l_Visit_rec.PAST_DATED_VISIT_FLAG,
4552 X_FIRMED_FLAG => l_Visit_rec.FIRMED_FLAG,
4553 X_LOCKED_FLAG => l_Visit_rec.LOCKED_FLAG,
4554 --VWPE ER-12424063 :: tchimira :: 15-FEB -2011 :: end
4555 X_ITEM_OWNER_FLAG => L_VISIT_REC.ITEM_OWNER_FLAG, --ARUNJK added for Marshalling
4556 --TCHIMIRA :: 14-Jun-2012 :: ER 14015560 ::added below flag
4557 X_AUTO_VISIT_TYPE_FLAG => l_AUTO_VISIT_TYPE_FLAG
4558 );
4559
4560
4561 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4562 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Ahl_Visits_Pkg.UPDATE_ROW');
4563 END IF;
4564
4565 -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125 :: START :: START
4566 IF c_visit_rec.status_code <> 'DRAFT' THEN
4567 -- If visit start or end dates changed then reschedule the jobs
4568 IF (c_Visit_rec.start_date_time <> l_date_time_start
4569 OR c_Visit_rec.close_date_time <> l_date_time_end) THEN
4570
4571 IF (l_log_statement >= l_log_current_level) THEN
4572 fnd_log.string(l_log_statement,
4573 L_DEBUG,
4574 'Before calling AHL_PRD_WORKORDER_PVT.reschedule_visit_jobs');
4575 END IF;
4576
4577 AHL_PRD_WORKORDER_PVT.reschedule_visit_jobs(
4578 P_API_VERSION => 1.0,
4579 x_return_status => l_return_status,
4580 x_msg_count => l_msg_count,
4581 x_msg_data => l_msg_data,
4582 P_VISIT_ID => l_Visit_rec.VISIT_ID,
4583 p_x_scheduled_start_date => l_date_time_start,
4584 p_x_scheduled_end_date => l_date_time_end);
4585
4586 IF (l_log_statement >= l_log_current_level) THEN
4587 fnd_log.string(l_log_statement,
4588 L_DEBUG,
4589 'After calling AHL_PRD_WORKORDER_PVT.reschedule_visit_jobs. Return Status = ' || l_return_status);
4590 END IF;
4591
4592 IF (l_return_status <> Fnd_Api.G_RET_STS_SUCCESS) THEN
4593 IF (l_log_statement >= l_log_current_level) THEN
4594 fnd_log.string(l_log_statement,
4595 L_DEBUG,
4596 'Errors from AHL_PRD_WORKORDER_PVT.reschedule_visit_jobs. Message count: ' ||
4597 l_msg_count || ', message data: ' || l_msg_data);
4598 END IF;
4599 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4600 RAISE FND_API.G_EXC_ERROR;
4601 ELSE
4602 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4603 END IF;
4604 END IF;
4605 END IF;
4606 END IF; --reschedule visit jobs
4607
4608 -- Now due to the call to reschedule_visit_jobs, EAM has rescheduled all the visit jobs
4609 -- Check if any of the visit's job is later than the Visit Planned end date and if so, throw an error
4610 -- TCHIMIRA :: 17-DEC-2011 :: bug# 13000673 :: commenting the below validation
4611 /*OPEN get_latest_wo_end_date (l_Visit_rec.VISIT_ID);
4612 FETCH get_latest_wo_end_date INTO l_latest_wo_end_date;
4613 CLOSE get_latest_wo_end_date;
4614 IF l_latest_wo_end_date > l_date_time_end THEN
4615 Fnd_Message.SET_NAME('AHL','AHL_VWP_PUSH_END_DATE');
4616 Fnd_Message.SET_TOKEN('END_DATE',to_char(l_latest_wo_end_date, 'DD-Mon-YYYY HH24:MI:SS'));
4617 Fnd_Msg_Pub.ADD;
4618 RAISE Fnd_Api.G_EXC_ERROR;
4619 END IF; */
4620 -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125 :: END
4621
4622 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
4623 * There is no need for handling anything related to Stages for Component Visits
4624 * as there won't be any Stage associated with them.
4625 */
4626 IF (l_is_comp_visit = 'N') THEN
4627
4628 --VWPE ER-12424063:: tchimira :: 15-FEB -2011 :: start
4629 -- If the visit status is 'DRAFT' and visit type code is not null then call the associate visit type to visit
4630 -- This procedure creates stages, stage tasks, stage rules and stage-stage type association in a visit
4631 IF c_visit_rec.status_code = 'DRAFT' THEN
4632 IF l_Visit_rec.VISIT_TYPE_CODE IS NOT NULL AND c_Visit_rec.visit_type_code IS NULL THEN
4633 IF l_is_old_visit_dets.IS_OLD_VISIT <> 'Y' THEN -- PRAKKUM :: 28-JUN-2011 :: VWPE :: ER 12730539 :: IF not an old visit
4634 AHL_VWP_VISITS_STAGES_PVT.Assoc_VisitType_to_Visit (
4635 p_api_version => 1.0,
4636 p_init_msg_list => fnd_api.g_false,
4637 p_commit => fnd_api.g_false,
4638 p_validation_level => p_validation_level,
4639 p_visit_id => l_Visit_rec.VISIT_ID,
4640 p_visit_type_code => l_Visit_rec.VISIT_TYPE_CODE,
4641 x_return_status => l_return_status,
4642 x_msg_count => x_msg_count,
4643 x_msg_data => x_msg_data
4644 );
4645 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4646 fnd_log.string(fnd_log.level_statement,L_DEBUG,'TASK - After calling AHL_VWP_VISITS_STAGES_PVT.Assoc_VisitType_to_Visit - l_return_status : '||l_return_status);
4647 END IF;
4648
4649 IF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
4650 RAISE Fnd_Api.g_exc_unexpected_error;
4651 ELSIF l_return_status = Fnd_Api.g_ret_sts_error THEN
4652 RAISE Fnd_Api.g_exc_error;
4653 END IF;
4654 END IF;
4655 END IF;
4656 END IF;
4657 --VWPE ER-12424063:: tchimira :: 15-FEB -2011 :: end
4658 END IF; -- if l_is_comp_visit = 'N'
4659
4660 --PRAKKUM :: VWPE: ER:12424063 :: 11-APR-2011 :: Space dates validation :: START
4661 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4662 fnd_log.string(fnd_log.level_statement,L_DEBUG,'c_Visit_rec.START_DATE_TIME = ' || c_Visit_rec.START_DATE_TIME);
4663 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_date_time_start = ' ||l_date_time_start);
4664 fnd_log.string(fnd_log.level_statement,L_DEBUG,'c_Visit_rec.START_DATE_TIME = ' || c_Visit_rec.close_date_time);
4665 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_date_time_start = ' ||l_date_time_end);
4666 END IF;
4667
4668 l_is_start_date_changed := false;
4669 l_is_close_date_changed := false;-- VWPE 12730539:: PRAKKUM :: 02-AUG-2011
4670 IF c_Visit_rec.START_DATE_TIME IS NOT NULL OR l_date_time_start IS NOT NULL THEN
4671 IF c_Visit_rec.START_DATE_TIME IS NOT NULL AND l_date_time_start IS NOT NULL THEN
4672 IF l_date_time_start <> c_Visit_rec.START_DATE_TIME THEN -- Dates changed, so need to validate
4673 l_is_start_date_changed := true;
4674 END IF;
4675 ELSE -- If one is null and other is not null, then consider it as updated
4676 l_is_start_date_changed := true;
4677 END IF;
4678 END IF;
4679
4680 -- VWPE 12730539:: PRAKKUM :: 02-AUG-2011 :: START
4681 IF c_Visit_rec.close_date_time IS NOT NULL OR l_date_time_end IS NOT NULL THEN
4682 IF c_Visit_rec.close_date_time IS NOT NULL AND l_date_time_end IS NOT NULL THEN
4683 IF l_date_time_end <> c_Visit_rec.close_date_time THEN -- Dates changed, so need to validate
4684 l_is_close_date_changed := true;
4685 END IF;
4686 ELSE -- If one is null and other is not null, then consider it as updated
4687 l_is_close_date_changed := true;
4688 END IF;
4689 END IF;
4690 -- VWPE 12730539:: PRAKKUM :: 02-AUG-2011 :: END
4691
4692 IF l_is_start_date_changed OR l_is_close_date_changed THEN
4693
4694 AHL_LTP_SPACE_ASSIGN_PVT.VALIDATE_SPACES_WITH_VISIT(
4695 p_api_version => p_api_version,
4696 p_init_msg_list => Fnd_Api.g_false,
4697 p_commit => Fnd_Api.g_false,
4698 p_validation_level => p_validation_level,
4699 p_module_type => p_module_type,
4700 p_visit_id => l_Visit_rec.visit_id,
4701 x_return_status => x_return_status,
4702 x_msg_count => x_msg_count,
4703 x_msg_data => x_msg_data
4704 );
4705
4706 END IF;
4707
4708 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
4709 * There is no need to update Stage hierarchy for Component Visits
4710 * as there won't be any Stage associated with them.
4711 */
4712 IF (l_is_comp_visit = 'N') THEN
4713 IF l_is_start_date_changed OR l_is_dept_changed THEN -- If start date or department changed, then need to update all stage dates
4714
4715 l_stages_ovn_updated_count := l_stages_ovn_updated_count+1;--prakkum :: 06-JUL-2011 :: VWPE 12730539 :: All stages are updated to new dates
4716
4717 AHL_VWP_VISITS_STAGES_PVT.UPDATE_STAGES_HIERARICHY (
4718 p_api_version => p_api_version,
4719 p_init_msg_list => Fnd_Api.g_false,
4720 p_commit => Fnd_Api.g_false,
4721 p_validation_level => p_validation_level,
4722 p_module_type => p_module_type,
4723 p_visit_id => l_Visit_rec.visit_id,
4724 x_return_status => x_return_status,
4725 x_msg_count => x_msg_count,
4726 x_msg_data => x_msg_data
4727 );
4728
4729 ELSIF l_is_close_date_changed THEN -- On visit end change, validate stage dates against visit end date
4730
4731 -- PRAKKUM :: 13-FEB-2011 :: Bug 13711800 :: START
4732 IF (l_log_statement >= l_log_current_level) THEN
4733 fnd_log.string(l_log_statement,L_DEBUG,'Before calling AHL_VWP_VISITS_STAGES_PVT.VALIDATE_STAGE_DATES ');
4734 END IF;
4735
4736 AHL_VWP_VISITS_STAGES_PVT.VALIDATE_STAGE_DATES( p_visit_id => l_Visit_rec.visit_id,
4737 x_return_status => l_return_status,
4738 x_msg_count => l_msg_count,
4739 x_msg_data => l_msg_data);
4740
4741 IF (l_log_statement >= l_log_current_level) THEN
4742 fnd_log.string(l_log_statement,L_DEBUG,'After calling AHL_VWP_VISITS_STAGES_PVT.VALIDATE_STAGE_DATES - l_return_status : '||l_return_status);
4743 END IF;
4744
4745 IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
4746 x_msg_count := l_msg_count;
4747 x_return_status := l_return_status;
4748 IF l_return_status = Fnd_Api.g_ret_sts_error THEN
4749 RAISE Fnd_Api.g_exc_error;
4750 ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
4751 RAISE Fnd_Api.g_exc_unexpected_error;
4752 END IF;
4753 END IF;
4754 -- PRAKKUM :: 13-FEB-2011 :: Bug 13711800 :: END
4755
4756 END IF;
4757 --PRAKKUM :: VWPE: ER:12424063 :: 11-APR-2011 :: Space dates validation :: END
4758
4759 -- PRAKKUM :: VWPE: ER:12424063 :: 11-APR-2011 :: Validation before calling this API to get tasks update count :: START
4760 -- 1. Fetch the Visit's deparment id and visit start date
4761 OPEN get_visit_data_csr(l_Visit_rec.visit_id);
4762 FETCH get_visit_data_csr INTO l_visit_dept_id, l_visit_start_date;
4763 --As per code in Calculate_Task_Times if not found, reset start dates of task to null, so it updating tasks ovn
4764 IF (get_visit_data_csr%NOTFOUND) THEN
4765 l_tasks_ovn_updated_count := l_tasks_ovn_updated_count +1;
4766 END IF;
4767 CLOSE get_visit_data_csr;
4768
4769 --Clear up previous calculated task start/end date if visit start date or dept is missing
4770 IF (l_visit_start_date IS NULL) OR (l_visit_dept_id IS NULL) THEN
4771 l_tasks_ovn_updated_count := l_tasks_ovn_updated_count +1;
4772 END IF;
4773 -- PRAKKUM :: VWPE: ER:12424063 :: 11-APR-2011 :: Validation before calling this API to get tasks update count :: END
4774 END IF; -- if l_is_comp_visit = 'N'
4775
4776 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4777 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_TIMES_PVT.Calculate_Task_Times');
4778 END IF;
4779
4780 -- Added cxcheng POST11510--------------
4781 AHL_VWP_TIMES_PVT.Calculate_Task_Times
4782 ( p_api_version => 1.0,
4783 p_init_msg_list => Fnd_Api.G_FALSE,
4784 p_commit => Fnd_Api.G_FALSE,
4785 p_validation_level=> Fnd_Api.G_VALID_LEVEL_FULL,
4786 x_return_status => l_return_status,
4787 x_msg_count => l_msg_count,
4788 x_msg_data => l_msg_data,
4789 p_visit_id => l_visit_rec.visit_id);
4790
4791 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4792 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_TIMES_PVT.Calculate_Task_Times - l_return_status : '||l_return_status);
4793 END IF;
4794
4795 IF l_return_status <> 'S' THEN
4796 RAISE Fnd_Api.G_EXC_ERROR;
4797 END IF;
4798
4799 -- To call LTP process to delete or adjust space assignments if space changed flag is set to "Y"
4800 IF space_changed_flag = 'Y' THEN
4801 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4802 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_LTP_SPACE_ASSIGN_PVT.Delete_Space_assignment');
4803 END IF;
4804
4805 l_Space_Assignment_Rec.VISIT_ID := l_Visit_rec.VISIT_ID;
4806 AHL_LTP_SPACE_ASSIGN_PVT.Delete_Space_assignment
4807 ( p_api_version => 1.0,
4808 p_init_msg_list => FND_API.g_false,
4809 p_commit => FND_API.g_false,
4810 p_validation_level => FND_API.g_valid_level_full,
4811 p_space_assign_rec => l_Space_Assignment_Rec,
4812 x_return_status => l_return_status,
4813 x_msg_count => x_msg_count,
4814 x_msg_data => x_msg_data
4815 );
4816
4817 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4818 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_LTP_SPACE_ASSIGN_PVT.Delete_Space_assignment - l_return_status : '||l_return_status);
4819 END IF;
4820
4821 IF l_return_status <> 'S' THEN
4822 RAISE Fnd_Api.G_EXC_ERROR;
4823 END IF;
4824 END IF;
4825
4826 -- If Visit DEPARTMENT or ORGANIZATION or Start Date is changed after price/cost is estimated,
4827 -- the prices associated to Visit and all the Tasks in the visit will be cleared up
4828 If space_changed_flag = 'Y' THEN
4829 OPEN c_job(l_Visit_rec.visit_id);
4830 FETCH c_job INTO l_count;
4831 CLOSE c_job;
4832
4833 IF l_count <> 0 THEN
4834 -- To update visit's prices
4835 UPDATE AHL_VISITS_B
4836 SET ACTUAL_PRICE = NULL,
4837 ESTIMATED_PRICE = NULL,
4838 OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1
4839 WHERE VISIT_ID = l_Visit_rec.visit_id;
4840
4841 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4842 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After updating actual and estimated price for the visit');
4843 END IF;
4844
4845 -- To update all tasks prices of tasks under this visit
4846 OPEN c_task(l_visit_rec.visit_id);
4847 LOOP
4848 FETCH c_task INTO c_task_rec;
4849 EXIT WHEN c_task%NOTFOUND;
4850 -- Tasks found for visit
4851 -- To set prices to NULL in case if the visit's department is changed
4852 UPDATE AHL_VISIT_TASKS_B
4853 SET ACTUAL_PRICE = NULL,
4854 ESTIMATED_PRICE = NULL,
4855 OBJECT_VERSION_NUMBER = c_task_rec.object_version_number + 1
4856 WHERE VISIT_TASK_ID = c_task_rec.visit_task_id;
4857
4858 l_tasks_ovn_updated_count := l_tasks_ovn_updated_count +1; -- VWPE :: PRAKKUM :: 26-APR-2011
4859 END LOOP;
4860 CLOSE c_task;
4861
4862 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4863 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After updating actual and estimated price for all the tasks in the visit');
4864 END IF;
4865 END IF;
4866 END IF;
4867
4868 -- To call LTP Process Materials API for APS Integration by Shbhanda 04-Dec-03
4869 -- changed the condition for fixing the issue 144 , in the CMRO Forum
4870 -- if any of start date,organization, or department is not
4871 -- is invoked with operation flag 'D'
4872 -- else if any of them is updated then AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials is invoked with operation flag 'U' as earlier.
4873
4874 IF (( c_visit_rec.organization_id IS NOT NULL AND c_visit_rec.department_id IS NOT NULL AND
4875 c_Visit_rec.START_DATE_TIME IS NOT NULL )
4876 AND ( l_date_time_start IS NULL OR l_date_time_start = Fnd_Api.G_MISS_DATE OR
4877 l_visit_rec.organization_id IS NULL OR l_visit_rec.organization_id = Fnd_Api.G_MISS_NUM OR
4878 l_visit_rec.department_id IS NULL OR l_visit_rec.department_id = Fnd_Api.G_MISS_NUM ))
4879 THEN
4880 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4881 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
4882 END IF;
4883
4884 AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials (
4885 p_api_version => 1.0,
4886 p_init_msg_list => FND_API.g_false,
4887 p_commit => FND_API.g_false,
4888 p_validation_level => FND_API.g_valid_level_full,
4889 p_visit_id => l_visit_rec.Visit_Id,
4890 p_visit_task_id => NULL,
4891 p_org_id => l_visit_rec.organization_id,
4892 p_start_date => l_date_time_start,
4893 p_operation_flag => 'D',
4894 x_planned_order_flag => l_planned_order_flag ,
4895 x_return_status => l_return_status,
4896 x_msg_count => x_msg_count,
4897 x_msg_data => x_msg_data );
4898
4899 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4900 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials - l_return_status : '||l_return_status);
4901 END IF;
4902
4903 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4904 RAISE FND_API.G_EXC_ERROR;
4905 END IF;
4906 ELSIF ( NVL(l_date_time_start,TO_DATE('01-01-1947','DD-MM-YYYY')) <> NVL(c_Visit_rec.START_DATE_TIME,TO_DATE('01-01-1947','DD-MM-YYYY'))
4907 OR NVL(l_visit_rec.organization_id,-777) <> NVL(c_visit_rec.organization_id,-777)
4908 OR NVL(l_visit_rec.department_id,-777) <> NVL(c_visit_rec.department_id,-777))
4909 AND ( l_date_time_start IS NOT NULL AND l_date_time_start <> Fnd_Api.G_MISS_DATE
4910 AND l_visit_rec.organization_id IS NOT NULL AND l_visit_rec.organization_id <> Fnd_Api.G_MISS_NUM
4911 AND l_visit_rec.department_id IS NOT NULL AND l_visit_rec.department_id <> Fnd_Api.G_MISS_NUM )
4912 THEN
4913 /*AHL_DEBUG_PUB.Debug( l_full_name ||': VISIT UPDATED - Before calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
4914 ELSIF (
4915 ( l_date_time_start <> c_Visit_rec.START_DATE_TIME)
4916 OR (l_visit_rec.organization_id <> c_visit_rec.organization_id)
4917 OR (l_visit_rec.department_id <> c_visit_rec.department_id)
4918 )*/
4919 -- Begin Changes by surrkuma on 15-JUL-2010 for Bug 9901811
4920 -- Unschedule the ATP materials when there is an Org Change
4921 IF (l_visit_rec.organization_id IS NOT NULL AND l_visit_rec.organization_id <> Fnd_Api.G_MISS_NUM AND
4922 c_visit_rec.organization_id IS NOT NULL AND c_visit_rec.organization_id <> Fnd_Api.G_MISS_NUM AND
4923 l_visit_rec.organization_id <> c_visit_rec.organization_id) THEN
4924 Handle_Visit_Org_Change(p_visit_id => l_visit_rec.Visit_Id);
4925 END IF;
4926 -- End Changes by surrkuma on 15-JUL-2010 for Bug 9901811
4927 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4928 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
4929 END IF;
4930
4931 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
4932 * There is no need to consider Stage materials for Component Visits
4933 * as there won't be any Stage associated with them.
4934 */
4935 -- SURRKUMA :: 13914410 :: 03-APR-2012 :: If visit start date has been made as non-null, then associate mtls
4936 IF (l_is_comp_visit = 'N' AND l_date_time_start IS NOT NULL) THEN
4937
4938 -- TCHIMIRA :: 16-JUL-2011 :: VWPE: ER:12730539 :: START
4939 -- For every MR of the visit, associate the materials based on the MR Profile to the stage tasks
4940 FOR l_task_detl_rec IN get_sum_task_det (l_visit_rec.Visit_Id) LOOP
4941 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4942 fnd_log.string(fnd_log.level_statement, L_DEBUG,
4943 'Before calling Associate_Stage_Materials and mr_id is : '||l_task_detl_rec.mr_id||'l_unit_eff_id: '||l_task_detl_rec.unit_effectivity_id
4944 ||'p_visit_id: '||l_visit_rec.Visit_Id||'l_instance_id: '||l_task_detl_rec.instance_id);
4945 END IF;
4946 AHL_LTP_REQST_MATRL_PVT.Associate_Stage_Materials (
4947 p_api_version => 1.0,
4948 p_init_msg_list => Fnd_Api.G_FALSE,
4949 p_commit => Fnd_Api.G_FALSE,
4950 p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
4951 p_module_type => 'VST',
4952 p_visit_id => l_visit_rec.Visit_Id,
4953 p_mr_header_id => l_task_detl_rec.mr_id,
4954 p_instance_id => l_task_detl_rec.instance_id,
4955 p_ue_id => l_task_detl_rec.unit_effectivity_id,
4956 x_return_status => l_return_status,
4957 x_msg_count => l_msg_count,
4958 x_msg_data => l_msg_data);
4959
4960 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4961 fnd_log.string(fnd_log.level_statement, L_DEBUG,
4962 'After calling Associate_Stage_Materials, Return Status: ' || l_return_status);
4963 END IF;
4964
4965 -- Check Error Message stack.
4966 IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
4967 x_msg_count := l_msg_count;
4968 x_return_status := l_return_status;
4969 IF l_return_status = Fnd_Api.g_ret_sts_error THEN
4970 RAISE Fnd_Api.g_exc_error;
4971 ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
4972 RAISE Fnd_Api.g_exc_unexpected_error;
4973 END IF;
4974 END IF;
4975 END LOOP;
4976 -- TCHIMIRA :: 16-JUL-2011 :: VWPE: ER:12730539 :: END
4977 END IF; -- if l_is_comp_visit = 'N'
4978
4979 AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials (
4980 p_api_version => 1.0,
4981 p_init_msg_list => FND_API.g_false,
4982 p_commit => FND_API.g_false,
4983 p_validation_level => FND_API.g_valid_level_full,
4984 p_visit_id => l_visit_rec.Visit_Id,
4985 p_visit_task_id => NULL,
4986 p_org_id => l_visit_rec.organization_id,
4987 p_start_date => l_date_time_start,
4988 p_operation_flag => 'U',
4989 x_planned_order_flag => l_planned_order_flag ,
4990 x_return_status => l_return_status,
4991 x_msg_count => x_msg_count,
4992 x_msg_data => x_msg_data );
4993
4994 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4995 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials - l_return_status : '||l_return_status);
4996 END IF;
4997
4998 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4999 RAISE FND_API.G_EXC_ERROR;
5000 END IF;
5001 END IF;
5002
5003 -- Set any task changed flag to "Y" if start/end date changed
5004 IF NVL(TO_CHAR(l_date_time_start,'DD-MM-YYYY HH24:MI'),'XXX') <> NVL(TO_CHAR(c_Visit_rec.START_DATE_TIME,'DD-MM-YYYY HH24:MI'),'XXX')
5005 OR NVL(TO_CHAR(l_date_time_end,'DD-MM-YYYY HH24:MI'),'XXX') <> NVL(TO_CHAR(c_Visit_rec.CLOSE_DATE_TIME,'DD-MM-YYYY HH24:MI'),'XXX') THEN
5006 AHL_VWP_RULES_PVT.Update_Visit_Task_Flag
5007 (
5008 p_visit_id => l_Visit_rec.visit_id,
5009 p_flag => 'Y',
5010 x_return_status => l_return_status);
5011
5012 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5013 RAISE FND_API.G_EXC_ERROR;
5014 END IF;
5015 END IF;
5016
5017 -- PRAKKUM :: VWPE: ER:12424063 :: 11-APR-2011 :: START
5018 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5019 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_tasks_ovn_updated_count : '||l_tasks_ovn_updated_count);
5020 END IF;
5021 --Return ovn updated count to caller
5022 p_x_visit_rec.TASKS_OVN_UPDATED_COUNT := l_tasks_ovn_updated_count;
5023 -- PRAKKUM :: VWPE: ER:12424063 :: 11-APR-2011 :: END
5024
5025 -- PRAKKUM :: VWPE: ER:12730539 :: 06-JUL-2011 :: START
5026 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5027 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_stages_ovn_updated_count : '||l_stages_ovn_updated_count);
5028 END IF;
5029 --Return ovn updated count to caller
5030 p_x_visit_rec.STAGES_OVN_UPDATED_COUNT := l_stages_ovn_updated_count;
5031 -- PRAKKUM :: VWPE: ER:12730539 :: 06-JUL-2011 :: END
5032
5033 l_msg_count := Fnd_Msg_Pub.count_msg;
5034 IF l_msg_count > 0 THEN
5035 X_msg_count := l_msg_count;
5036 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
5037 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
5038 END IF;
5039
5040 --Standard check for commit
5041 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
5042 COMMIT;
5043 END IF;
5044
5045 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5046 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
5047 END IF;
5048 EXCEPTION
5049 WHEN Fnd_Api.g_exc_error THEN
5050 ROLLBACK TO Update_Visit;
5051 x_return_status := Fnd_Api.g_ret_sts_error;
5052 Fnd_Msg_Pub.count_and_get (
5053 p_encoded => Fnd_Api.g_false,
5054 p_count => x_msg_count,
5055 p_data => x_msg_data
5056 );
5057 WHEN Fnd_Api.g_exc_unexpected_error THEN
5058 ROLLBACK TO Update_Visit;
5059 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5060 Fnd_Msg_Pub.count_and_get (
5061 p_encoded => Fnd_Api.g_false,
5062 p_count => x_msg_count,
5063 p_data => x_msg_data
5064 );
5065 WHEN OTHERS THEN
5066 ROLLBACK TO Update_Visit;
5067 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5068 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
5069 THEN
5070 Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
5071 END IF;
5072 Fnd_Msg_Pub.count_and_get (
5073 p_encoded => Fnd_Api.g_false,
5074 p_count => x_msg_count,
5075 p_data => x_msg_data
5076 );
5077 END Update_Visit;
5078 /*--------------------------------------------------------------------
5079 -- PROCEDURE
5080 -- Delete Task
5081 -- Internal procedure for deleting links for the task to be deleted.
5082
5083 --------------------------------------------------------------------
5084
5085 PROCEDURE Delete_Task (
5086 p_api_version IN NUMBER,
5087 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
5088 p_commit IN VARCHAR2 := Fnd_Api.g_false,
5089 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
5090 p_module_type IN VARCHAR2 := Null,
5091 p_Visit_Task_Id IN NUMBER,
5092 x_return_status OUT NOCOPY VARCHAR2,
5093 x_msg_count OUT NOCOPY NUMBER,
5094 x_msg_data OUT NOCOPY VARCHAR2
5095 )
5096 IS
5097 l_api_version CONSTANT NUMBER := 1.0;
5098 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Task';
5099 l_full_name CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || l_Api_name;
5100 l_task_id NUMBER;
5101 l_count NUMBER;
5102
5103 BEGIN
5104 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5105 fnd_log.string
5106 (
5107 fnd_log.level_procedure,
5108 'ahl.plsql.'||G_PKG_NAME||'.'||L_API_NAME||'.begin',
5109 'At the start of Delete_Visit -> Delete Task'
5110 );
5111 END IF;
5112
5113 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5114 fnd_log.string
5115 (
5116 fnd_log.level_statement,
5117 'ahl.plsql.'||G_PKG_NAME||'.'||L_API_NAME,
5118 'p_visit_task_id : '||p_Visit_Task_Id
5119 );
5120
5121 END IF;
5122
5123 -- Remove the originating task association of the deleted task
5124 UPDATE
5125 AHL_VISIT_TASKS_B
5126 SET
5127 ORIGINATING_TASK_ID=NULL,
5128 OBJECT_VERSION_NUMBER = object_version_number + 1
5129 WHERE
5130 ORIGINATING_TASK_ID = p_Visit_Task_Id and NVL(STATUS_CODE,'X') <> 'DELETED';
5131
5132
5133 -- Remove Cost parent associations for this task
5134 UPDATE
5135 AHL_VISIT_TASKS_B
5136 SET
5137 COST_PARENT_ID = NULL,
5138 OBJECT_VERSION_NUMBER = object_version_number + 1
5139 WHERE
5140 COST_PARENT_ID = p_Visit_Task_Id AND NVL(STATUS_CODE,'X') <> 'DELETED';
5141
5142
5143 -- Remove Primary Task Associations in simulation visit for the deleted Task
5144 UPDATE
5145 AHL_VISIT_TASKS_B
5146 SET
5147 PRIMARY_VISIT_TASK_ID = NULL,
5148 OBJECT_VERSION_NUMBER = object_version_number + 1
5149 WHERE
5150 PRIMARY_VISIT_TASK_ID = p_Visit_Task_Id AND NVL(STATUS_CODE,'X') <> 'DELETED';
5151
5152
5153 -- Remove task links of the deleted task
5154 DELETE
5155 AHL_TASK_LINKS
5156 WHERE
5157 VISIT_TASK_ID = p_Visit_Task_Id
5158 OR
5159 PARENT_TASK_ID = p_Visit_Task_Id;
5160
5161 AHL_VWP_PROJ_PROD_PVT.Delete_Task_To_project(
5162 p_api_version => p_api_version,
5163 p_init_msg_list => p_init_msg_list,
5164 p_commit => Fnd_Api.g_false,
5165 p_validation_level => p_validation_level,
5166 p_module_type => p_module_type,
5167 p_visit_task_id => p_Visit_Task_Id,
5168 x_return_status => x_return_status,
5169 x_msg_count => x_msg_count,
5170 x_msg_data => x_msg_data);
5171
5172 IF NVL(x_return_status, 'X') <> Fnd_Api.G_RET_STS_SUCCESS
5173 THEN
5174 -- Method call was not successful, raise error
5175 Fnd_Message.SET_NAME('AHL','AHL_VWP_PRJ_TASK_FAILED');
5176 Fnd_Msg_Pub.ADD;
5177 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
5178 fnd_log.string
5179 (
5180 fnd_log.level_error,
5181 'ahl.plsql.'||G_PKG_NAME||'.'||L_API_NAME,
5182 'Failed to delete project task association for task '||p_visit_task_id
5183 );
5184 END IF;
5185 RAISE Fnd_Api.G_EXC_ERROR;
5186 END IF;
5187
5188 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5189 fnd_log.string
5190 (
5191 fnd_log.level_procedure,
5192 'ahl.plsql.'||G_PKG_NAME||'.'||L_API_NAME||'.end',
5193 'At the end of Delete_Visit -> Delete Task'
5194 );
5195 END IF;
5196
5197
5198 END Delete_Task;*/
5199 --------------------------------------------------------------------
5200 -- PROCEDURE
5201 -- Delete_Visit
5202 --
5203 -- PURPOSE
5204 -- To delete a Maintainanace Visit.
5205 --------------------------------------------------------------------
5206
5207 PROCEDURE Delete_Visit (
5208 p_api_version IN NUMBER,
5209 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
5210 p_commit IN VARCHAR2 := Fnd_Api.g_false,
5211 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
5212 p_visit_id IN NUMBER,
5213 x_return_status OUT NOCOPY VARCHAR2,
5214 x_msg_count OUT NOCOPY NUMBER,
5215 x_msg_data OUT NOCOPY VARCHAR2
5216 )
5217 IS
5218 -- Define local Variables
5219 l_api_version CONSTANT NUMBER := 1.0;
5220 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Visit';
5221 l_full_name CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || l_Api_name;
5222 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
5223
5224 l_msg_data VARCHAR2(2000);
5225 l_return_status VARCHAR2(1);
5226 l_msg_count NUMBER;
5227
5228 l_default VARCHAR2(30);
5229 l_visit_id NUMBER;
5230 l_commit VARCHAR2(1) := 'F';
5231 l_init_msg_list VARCHAR2(1) := 'F';
5232
5233 l_soft_delete_flag VARCHAR2(1) := 'N';
5234 l_planned_order_flag VARCHAR2(1);
5235 l_is_comp_visit VARCHAR2(1);
5236
5237 -- Define local Cursors
5238 -- To find visit related information
5239 CURSOR c_Visit(x_id IN NUMBER) IS
5240 SELECT * FROM Ahl_Visits_VL
5241 WHERE VISIT_ID = x_id;
5242
5243 l_visit_rec c_Visit%ROWTYPE;
5244
5245 -- To find whether the visit has any materials
5246 CURSOR c_Material(x_visit_id IN NUMBER) IS
5247 /* SELECT 'X' FROM DUAL
5248 WHERE exists (select 'X' from AHL_SCHEDULE_MATERIALS_V where VISIT_ID = x_visit_id);*/
5249
5250 -- AnRaj: Changed for fixing the perf bug 4919502
5251 SELECT 'x' FROM ahl_schedule_materials
5252 WHERE status <> 'DELETED'
5253 AND visit_id = x_visit_id;
5254
5255 c_Material_rec c_Material%ROWTYPE;
5256
5257 -- To find Master Workorder associated with the given Visit in production
5258 CURSOR c_workorder_csr(x_visit_id IN NUMBER) IS
5259 SELECT workorder_id, object_version_number, status_code
5260 FROM AHL_WORKORDERS
5261 WHERE VISIT_ID = x_visit_id
5262 AND MASTER_WORKORDER_FLAG = 'Y'
5263 AND VISIT_TASK_ID IS NULL;
5264
5265 l_workorder_rec c_workorder_csr%ROWTYPE;
5266
5267 -- To find active Master Workorder associated with the given Visit in production
5268 CURSOR c_active_workorder(x_visit_id IN NUMBER) IS
5269 SELECT workorder_id, object_version_number, status_code
5270 FROM AHL_WORKORDERS
5271 WHERE VISIT_ID = x_visit_id
5272 AND MASTER_WORKORDER_FLAG = 'Y'
5273 AND VISIT_TASK_ID IS NULL
5274 AND STATUS_CODE not in ('22','7'); -- deleted, cancelled
5275
5276 l_active_workorder_rec c_active_workorder%ROWTYPE;
5277
5278 -- cursor for finding all information about the tasks
5279 CURSOR c_Tasks_csr(x_id IN NUMBER) IS
5280 -- Merge process for 11.5.10 Bug fix
5281 SELECT visit_task_id,object_version_number,visit_task_number
5282 FROM Ahl_Visit_Tasks_VL
5283 WHERE VISIT_ID = x_id AND NVL(STATUS_CODE,'X') <> 'DELETED'
5284 AND ((TASK_TYPE_CODE = 'SUMMARY' AND ORIGINATING_TASK_ID IS NULL)
5285 OR TASK_TYPE_CODE = 'UNASSOCIATED'
5286 -- SKPATHAK :: 18-Oct-2011 :: Bug 12955463 :: Need to delete the stage tasks also
5287 OR TASK_TYPE_CODE = 'STAGE'
5288 OR (TASK_TYPE_CODE = 'SUMMARY' AND MR_ID IS NULL));
5289
5290 l_tasks_rec c_tasks_csr%ROWTYPE;
5291
5292 -- Local record of Workorder used while calling update job method.
5293 l_prd_workorder_rec AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
5294 l_workorder_tbl AHL_PRD_WORKORDER_PVT.PRD_WORKOPER_TBL;
5295
5296 BEGIN
5297 --------------------- Initialize -----------------------
5298 SAVEPOINT Delete_Visit;
5299
5300 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5301 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure');
5302 END IF;
5303
5304 -- Initialize message list if p_init_msg_list is set to TRUE.
5305 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
5306 Fnd_Msg_Pub.initialize;
5307 END IF;
5308
5309 --Initialize API return status to success
5310 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
5311
5312 -- Standard call to check for call compatibility.
5313 IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
5314 p_api_version,
5315 l_api_name,G_PKG_NAME) THEN
5316 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
5317 END IF;
5318 ------------------------Start of API Body------------------------------------
5319 ------------------------ Delete ------------------------
5320 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5321 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit ID - ' ||p_visit_id );
5322 END IF;
5323
5324 OPEN c_Visit(p_visit_id);
5325 FETCH c_Visit INTO l_Visit_rec;
5326 IF c_Visit%NOTFOUND THEN
5327 CLOSE c_Visit;
5328 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
5329 Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
5330 Fnd_Msg_Pub.ADD;
5331 IF(fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5332 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Record not found for the visit with ID'||p_visit_id);
5333 END IF;
5334 END IF;
5335 RAISE Fnd_Api.g_exc_error;
5336 END IF;
5337 CLOSE c_Visit;
5338
5339 -- Check the status of visit, if 'planning' then only delete
5340 IF UPPER(l_visit_rec.status_code) NOT IN ('PLANNING','DRAFT') THEN
5341 Fnd_Message.SET_NAME('AHL','AHL_VWP_STATUS_NOT_DELETE');
5342 Fnd_Msg_Pub.ADD;
5343 IF(fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5344 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit is in invalid status for deletion. Visit ID: '||p_visit_id);
5345 END IF;
5346 RAISE Fnd_Api.G_EXC_ERROR;
5347 END IF;
5348
5349 -- To Check if any materials are schedueled for the visit
5350 OPEN c_Material(p_visit_id);
5351 FETCH c_Material INTO c_Material_rec;
5352 IF c_Material%FOUND THEN
5353 l_soft_delete_flag := 'Y';
5354
5355 IF(fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5356 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
5357 END IF;
5358
5359 -- Removing planned materials for the visit
5360 AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials
5361 (p_api_version => p_api_version,
5362 p_init_msg_list => Fnd_Api.G_FALSE,
5363 p_commit => Fnd_Api.G_FALSE,
5364 p_visit_id => p_visit_id,
5365 p_visit_task_id => NULL,
5366 p_org_id => NULL,
5367 p_start_date => NULL,
5368 p_operation_flag => 'R',
5369 x_planned_order_flag => l_planned_order_flag ,
5370 x_return_status => l_return_status,
5371 x_msg_count => x_msg_count,
5372 x_msg_data => x_msg_data);
5373
5374 IF(fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5375 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials - l_return_status : '||l_return_status);
5376 END IF;
5377
5378 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5379 CLOSE c_Material;
5380 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
5381 END IF;
5382 END IF;
5383 CLOSE c_Material;
5384
5385 IF(fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5386 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_LTP_SIMUL_PLAN_PVT.delete_simul_visits');
5387 END IF;
5388 -- Delete all associated simulated visits if the visit to be deleted is a primary visit
5389 AHL_LTP_SIMUL_PLAN_PVT.delete_simul_visits
5390 (p_api_version => l_api_version,
5391 p_init_msg_list => l_init_msg_list,
5392 p_commit => l_commit,
5393 p_validation_level => p_validation_level,
5394 p_visit_id => p_visit_id,
5395 x_return_status => l_return_status,
5396 x_msg_count => l_msg_count,
5397 x_msg_data => l_msg_data);
5398
5399 IF(fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5400 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_LTP_SIMUL_PLAN_PVT.delete_simul_visits - l_return_status : '||l_return_status);
5401 END IF;
5402
5403 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5404 -- Check Error Message stack.
5405 x_msg_count := FND_MSG_PUB.count_msg;
5406 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5407 fnd_log.string (fnd_log.level_statement,L_DEBUG,'Errors from delete_simul_visits: ' || x_msg_count );
5408 END IF;
5409 RAISE Fnd_Api.g_exc_error;
5410 END IF;
5411
5412 -- Check for to delete the visit's tasks
5413 OPEN c_Tasks_csr(p_visit_id);
5414 LOOP
5415 FETCH c_Tasks_csr INTO l_tasks_rec;
5416 EXIT WHEN c_Tasks_csr%NOTFOUND;
5417
5418 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5419 fnd_log.string (fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_TASKS_PVT.Delete_Task - visit_task_id : '||l_tasks_rec.visit_task_id);
5420 END IF;
5421
5422 l_soft_delete_flag := 'Y'; -- If tasks are set only soft delete needs to be done.
5423
5424 -- Call Delete_Task to remove all the task associations for the deleted task
5425 AHL_VWP_TASKS_PVT.Delete_Task
5426 ( p_api_version => p_api_version,
5427 p_init_msg_list => l_init_msg_list,
5428 p_commit => l_commit,
5429 p_validation_level => p_validation_level,
5430 p_module_type => NULL,
5431 p_visit_task_id => l_tasks_rec.visit_task_id,
5432 x_return_status => l_return_status,
5433 x_msg_count => x_msg_count,
5434 x_msg_data => x_msg_data);
5435
5436 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5437 fnd_log.string (fnd_log.level_statement,L_DEBUG,'After calling Delete_Task - l_return_status : '||l_return_status);
5438 END IF;
5439
5440 IF NVL(l_return_status, 'X') <> Fnd_Api.G_RET_STS_SUCCESS THEN
5441 CLOSE c_Tasks_csr;
5442 Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_DEL_FAILED');
5443 Fnd_Message.SET_TOKEN('TASK_NAME',l_tasks_rec.visit_task_number);
5444 Fnd_Msg_Pub.ADD;
5445 RAISE Fnd_Api.G_EXC_ERROR;
5446 END IF;
5447 END LOOP;
5448 CLOSE c_Tasks_csr;
5449
5450 -- 11.5.10 Change starts here
5451 -- Check if the Visit to be deleted has Master Workorder in production
5452 OPEN c_workorder_csr(p_visit_id);
5453 FETCH c_workorder_csr INTO l_workorder_rec;
5454 -- Master workorder not found
5455 IF c_workorder_csr%FOUND THEN
5456 l_soft_delete_flag := 'Y';
5457 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5458 fnd_log.string (fnd_log.level_statement,L_DEBUG,'Visit Has workorder associated with status code '||l_workorder_rec.STATUS_CODE);
5459 END IF;
5460
5461 OPEN c_active_workorder(p_visit_id);
5462 FETCH c_active_workorder INTO l_active_workorder_rec;
5463 -- Found Active Master workorder, then cancel all visit jobs.
5464 IF c_active_workorder%FOUND THEN
5465 -- delete visit master workorder
5466 l_prd_workorder_rec.workorder_id := l_active_workorder_rec.workorder_id;
5467 l_prd_workorder_rec.object_version_number := l_active_workorder_rec.object_version_number;
5468 l_prd_workorder_rec.STATUS_CODE:='22'; --Deleted Status Refer DLD to Verify.
5469
5470 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5471 fnd_log.string (fnd_log.level_statement,L_DEBUG,'before calling AHL_PRD_WORKORDER_PVT.update_job - Workorder Id : '||l_prd_workorder_rec.workorder_id);
5472 END IF;
5473
5474 AHL_PRD_WORKORDER_PVT.update_job
5475 ( p_api_version =>1.0,
5476 p_init_msg_list =>fnd_api.g_false,
5477 p_commit =>fnd_api.g_false,
5478 p_validation_level =>p_validation_level,
5479 p_default =>fnd_api.g_false,
5480 p_module_type =>NULL,
5481 x_return_status =>l_return_status,
5482 x_msg_count =>x_msg_count,
5483 x_msg_data =>x_msg_data,
5484 p_wip_load_flag =>'Y',
5485 p_x_prd_workorder_rec =>l_prd_workorder_rec,
5486 p_x_prd_workoper_tbl =>l_workorder_tbl
5487 );
5488
5489 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5490 fnd_log.string (fnd_log.level_statement,L_DEBUG,'after calling AHL_PRD_WORKORDER_PVT.update_job - l_return_status : '||l_return_status);
5491 END IF;
5492
5493 IF NVL(l_return_status, 'X') <> Fnd_Api.G_RET_STS_SUCCESS THEN
5494 CLOSE c_active_workorder;
5495 CLOSE c_workorder_csr;
5496 RAISE Fnd_Api.G_EXC_ERROR;
5497 END IF;
5498 END IF;
5499 CLOSE c_active_workorder;
5500 END IF;
5501 CLOSE c_workorder_csr;
5502
5503 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5504 fnd_log.string (fnd_log.level_statement,L_DEBUG,'PROJECT_ID : '||l_visit_rec.PROJECT_ID);
5505 END IF;
5506
5507 -- Delete or cancel project and project tasks
5508 IF l_visit_rec.PROJECT_ID IS NOT NULL THEN
5509 IF l_soft_delete_flag = 'Y' THEN
5510 -- Update the project status to 'Rejected'
5511 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5512 fnd_log.string (fnd_log.level_statement,L_DEBUG,'before calling AHL_VWP_PROJ_PROD_PVT.Update_project');
5513 END IF;
5514
5515 AHL_VWP_PROJ_PROD_PVT.Update_project
5516 ( p_api_version => p_api_version,
5517 p_init_msg_list => l_init_msg_list,
5518 p_commit => l_commit,
5519 p_validation_level => p_validation_level,
5520 p_module_type => 'DEL',
5521 p_visit_id => p_visit_id,
5522 x_return_status => l_return_status,
5523 x_msg_count => x_msg_count,
5524 x_msg_data => x_msg_data
5525 );
5526
5527 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5528 fnd_log.string (fnd_log.level_statement,L_DEBUG,'after calling AHL_VWP_PROJ_PROD_PVT.Update_project - l_return_status : '||l_return_status);
5529 END IF;
5530
5531 IF NVL(l_return_status, 'X') <> Fnd_Api.G_RET_STS_SUCCESS THEN
5532 Fnd_Message.SET_NAME('AHL','AHL_VWP_PRJ_UPDATE_FAILED'); -- Failed to update job
5533 Fnd_Msg_Pub.ADD;
5534 RAISE Fnd_Api.G_EXC_ERROR;
5535 END IF;
5536 ELSE
5537 -- When a visit is hard deleted than the related projects is also deleted
5538 -- Call Delete_Project local procedure to delete project and its tasks
5539 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5540 fnd_log.string (fnd_log.level_statement,L_DEBUG,'before calling AHL_VWP_PROJ_PROD_PVT.Delete_Project ');
5541 END IF;
5542
5543 AHL_VWP_PROJ_PROD_PVT.Delete_Project
5544 ( p_api_version => p_api_version,
5545 p_init_msg_list => l_init_msg_list,
5546 p_commit => l_commit,
5547 p_validation_level => p_validation_level,
5548 p_module_type => NULL,
5549 p_visit_id => p_visit_id,
5550 x_return_status => l_return_status,
5551 x_msg_count => x_msg_count,
5552 x_msg_data => x_msg_data);
5553
5554 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5555 fnd_log.string (fnd_log.level_statement,L_DEBUG,'after calling AHL_VWP_PROJ_PROD_PVT.Delete_Project - l_return_status : '||l_return_status);
5556 END IF;
5557
5558 IF NVL(l_return_status, 'X') <> Fnd_Api.G_RET_STS_SUCCESS THEN
5559 -- Method call was not successful, raise error
5560 Fnd_Message.SET_NAME('AHL','AHL_VWP_PRJ_DEL_FAILED');
5561 Fnd_Msg_Pub.ADD;
5562 RAISE Fnd_Api.G_EXC_ERROR;
5563 END IF;
5564 END IF; -- soft delete flag
5565 END IF; -- project id not null
5566
5567 -- delete stages in the case of physical delete
5568 IF l_soft_delete_flag = 'N' THEN
5569
5570 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
5571 * There is no need to delete Stages for Component Visits as there won't be any Stage associated with them.
5572 */
5573 l_is_comp_visit := AHL_CMP_UTIL_PKG.Is_Comp_Visit (l_visit_rec.visit_id);
5574 IF (l_is_comp_visit = 'N') THEN
5575
5576 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063 :: changed the API name from DELETE_STAGES to DELETE_ALL_STAGES
5577 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5578 fnd_log.string (fnd_log.level_statement,L_DEBUG,'before calling AHL_VWP_VISITS_STAGES_PVT.DELETE_ALL_STAGES ');
5579 END IF;
5580
5581 AHL_VWP_VISITS_STAGES_PVT.DELETE_ALL_STAGES
5582 ( p_api_version => p_api_version,
5583 p_init_msg_list => l_init_msg_list,
5584 p_commit => l_commit,
5585 p_validation_level => p_validation_level,
5586 p_module_type => NULL,
5587 p_visit_id => l_visit_rec.visit_id,
5588 x_return_status => l_return_status,
5589 x_msg_count => x_msg_count,
5590 x_msg_data => x_msg_data
5591 );
5592
5593 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5594 fnd_log.string (fnd_log.level_statement,L_DEBUG,'after calling AHL_VWP_VISITS_STAGES_PVT.DELETE_ALL_STAGES - l_return_status : '||l_return_status );
5595 END IF;
5596
5597 IF NVL(l_return_status, 'X') <> Fnd_Api.G_RET_STS_SUCCESS THEN
5598 RAISE Fnd_Api.G_EXC_ERROR;
5599 END IF;
5600
5601 END IF; -- if l_is_comp_visit = 'N'
5602
5603 DELETE FROM ahl_visit_tasks_b
5604 WHERE visit_id = p_visit_id;
5605
5606 --Delete the visit
5607 AHL_VISITS_PKG.Delete_Row( x_visit_id => p_visit_id);
5608 ELSE
5609 -- Soft Delete
5610 UPDATE AHL_VISITS_B
5611 SET STATUS_CODE = 'DELETED',
5612 SIMULATION_PLAN_ID = NULL,
5613 OBJECT_VERSION_NUMBER =OBJECT_VERSION_NUMBER + 1,
5614 --TCHIMIRA::FP BUG 12668460 for BUG 12607498 ::14-JUN-2011::UPDATE WHO COLUMNS
5615 LAST_UPDATE_DATE = SYSDATE,
5616 LAST_UPDATED_BY = Fnd_Global.USER_ID,
5617 LAST_UPDATE_LOGIN = Fnd_Global.LOGIN_ID
5618 WHERE VISIT_ID = l_visit_rec.visit_id;
5619 END IF; -- soft delete flag
5620 --------------------------End of API Body---------------------------------------
5621 --Standard check to count messages
5622 l_msg_count := Fnd_Msg_Pub.count_msg;
5623
5624 IF l_msg_count > 0 THEN
5625 X_msg_count := l_msg_count;
5626 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
5627 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
5628 END IF;
5629
5630 --Standard check for commit
5631 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
5632 COMMIT;
5633 END IF;
5634
5635 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5636 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
5637 END IF;
5638 EXCEPTION
5639 WHEN Fnd_Api.g_exc_error THEN
5640 ROLLBACK TO Delete_Visit;
5641 x_return_status := Fnd_Api.g_ret_sts_error;
5642 Fnd_Msg_Pub.count_and_get (
5643 p_encoded => Fnd_Api.g_false,
5644 p_count => x_msg_count,
5645 p_data => x_msg_data
5646 );
5647 WHEN Fnd_Api.g_exc_unexpected_error THEN
5648 ROLLBACK TO Delete_Visit;
5649 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5650 Fnd_Msg_Pub.count_and_get (
5651 p_encoded => Fnd_Api.g_false,
5652 p_count => x_msg_count,
5653 p_data => x_msg_data
5654 );
5655 WHEN OTHERS THEN
5656 ROLLBACK TO Delete_Visit;
5657 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5658 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
5659 THEN
5660 Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
5661 END IF;
5662 Fnd_Msg_Pub.count_and_get (
5663 p_encoded => Fnd_Api.g_false,
5664 p_count => x_msg_count,
5665 p_data => x_msg_data
5666 );
5667 END Delete_Visit;
5668 --------------------------------------------------------------------
5669 -- PROCEDURE
5670 -- Validate_Visit
5671 --
5672 --------------------------------------------------------------------
5673 PROCEDURE Validate_Visit (
5674 p_api_version IN NUMBER,
5675 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
5676 p_commit IN VARCHAR2 := Fnd_Api.g_false,
5677 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
5678 p_Visit_rec IN Visit_Rec_Type,
5679 x_return_status OUT NOCOPY VARCHAR2,
5680 x_msg_count OUT NOCOPY NUMBER,
5681 x_msg_data OUT NOCOPY VARCHAR2
5682 )
5683 IS
5684
5685 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011, added following cursor
5686 * Cursor to check whether it's a Component Visit given the visit type code.
5687 */
5688 CURSOR chk_comp_visit_csr (c_visit_type_code VARCHAR2) IS
5689 SELECT 'Y'
5690 FROM AHL_VISIT_TYPES_B
5691 WHERE visit_type_code = c_visit_type_code
5692 AND status_code = 'COMPLETE'
5693 AND component_visit_flag = 'Y';
5694
5695 /* MANESING::Component Maintenance Planning Project, 20-Dec-2011, added following cursor
5696 * Cursor to find all unlocked Component Visits for the given organization other than current visit.
5697 */
5698 CURSOR get_unlocked_comp_visits_csr (c_org_id NUMBER, c_visit_id NUMBER) IS
5699 SELECT AVB.visit_id,
5700 AVB.visit_number,
5701 AVB.start_date_time,
5702 AVB.close_date_time
5703
5704 FROM AHL_VISITS_B AVB,
5705 AHL_VISIT_TYPES_B AVTB
5706
5707 WHERE AVB.organization_id = c_org_id
5708 AND AVB.visit_type_code = AVTB.visit_type_code
5709 AND AVTB.status_code = 'COMPLETE'
5710 AND AVTB.component_visit_flag = 'Y'
5711 AND NVL(AVB.locked_flag, 'N') = 'N'
5712 AND AVB.visit_id <> NVL(c_visit_id, 0)
5713 AND AVB.status_code NOT IN ('CANCELLED','CLOSED','DELETED');-- PRAKKUM :: BUG 14542057 :: 31/08/2012
5714
5715 -- Define local Variables
5716 L_API_VERSION CONSTANT NUMBER := 1.0;
5717 L_API_NAME CONSTANT VARCHAR2(30) := 'Validate_Visit';
5718 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
5719 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
5720
5721 l_return_status VARCHAR2(1);
5722 l_msg_count NUMBER;
5723 l_msg_data VARCHAR2(2000);
5724
5725 l_validation_mode VARCHAR2(30);
5726 l_is_comp_visit VARCHAR2(1);
5727 l_overlap_comp_visits VARCHAR2(2000);
5728
5729 BEGIN
5730 --------------------- Initialize -----------------------
5731 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5732 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure');
5733 END IF;
5734
5735 IF Fnd_Api.to_boolean (p_init_msg_list) THEN
5736 Fnd_Msg_Pub.initialize;
5737 END IF;
5738
5739 IF NOT Fnd_Api.compatible_api_call (
5740 l_api_version,
5741 p_api_version,
5742 l_api_name,
5743 G_PKG_NAME
5744 ) THEN
5745 RAISE Fnd_Api.g_exc_unexpected_error;
5746 END IF;
5747 x_return_status := Fnd_Api.g_ret_sts_success;
5748
5749 ---------------------- validate ------------------------
5750 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5751 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Calling Check_Visit_Items');
5752 END IF;
5753
5754 IF p_validation_level >= Jtf_Plsql_Api.g_valid_level_item THEN
5755
5756 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
5757 * Assign validation mode according to the operation flag.
5758 * This change is required as this API is now called from update_visit API too for common validations.
5759 */
5760 IF (UPPER(p_Visit_rec.operation_flag) = 'C') THEN
5761 l_validation_mode := JTF_PLSQL_API.g_create;
5762 ELSIF (UPPER(p_Visit_rec.operation_flag) = 'U') THEN
5763 l_validation_mode := JTF_PLSQL_API.g_update;
5764 END IF;
5765
5766 Check_Visit_Items (
5767 p_Visit_rec => p_Visit_rec,
5768 p_validation_mode => l_validation_mode, -- Jtf_Plsql_Api.g_create,
5769 x_return_status => l_return_status
5770 );
5771
5772 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
5773 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Check_Visit_Items - l_return_status : '||l_return_status);
5774 END IF;
5775
5776 IF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
5777 RAISE Fnd_Api.g_exc_unexpected_error;
5778 ELSIF l_return_status = Fnd_Api.g_ret_sts_error THEN
5779 RAISE Fnd_Api.g_exc_error;
5780 END IF;
5781 END IF;
5782
5783 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
5784 * Check whether it's a Component Visit (two step process).
5785 */
5786 -- Step 1
5787 OPEN chk_comp_visit_csr (p_visit_rec.visit_type_code);
5788 FETCH chk_comp_visit_csr INTO l_is_comp_visit;
5789 CLOSE chk_comp_visit_csr;
5790
5791 -- Step 2
5792 IF (l_is_comp_visit = 'Y' AND
5793 AHL_VWP_VISITS_PVT.Is_Old_Visit (p_visit_rec.visit_id) = 'Y') THEN
5794 l_is_comp_visit := 'N';
5795 END IF;
5796
5797 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
5798 * Do necessary validations for creating/updating a visit.
5799 */
5800 IF (l_is_comp_visit = 'Y') THEN
5801
5802 -- 1. Validate Component Visit if it's in Draft or Planning status.
5803 IF (p_visit_rec.status_code IN ('DRAFT', 'PLANNING')) THEN
5804
5805 IF (l_log_statement >= l_log_current_level) THEN
5806 FND_LOG.string(l_log_statement, l_debug, ' Invoking Validate_Component_Visit API for visit_id = ' || p_visit_rec.visit_id);
5807 END IF;
5808
5809 Validate_Component_Visit
5810 (
5811 p_api_version => 1.0,
5812 p_init_msg_list => FND_API.G_FALSE,
5813 p_commit => FND_API.G_FALSE,
5814 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5815 p_module_type => null,
5816 p_visit_rec => p_visit_rec,
5817 x_return_status => l_return_status,
5818 x_msg_count => l_msg_count,
5819 x_msg_data => l_msg_data
5820 );
5821
5822 IF (l_log_statement >= l_log_current_level) THEN
5823 FND_LOG.string(l_log_statement, l_debug, ' After call to Validate_Component_Visit API, Return Status = ' || l_return_status);
5824 END IF;
5825
5826 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5827 x_return_status := l_return_status;
5828 x_msg_count := l_msg_count;
5829 x_msg_data := l_msg_data;
5830
5831 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
5832 RAISE FND_API.G_EXC_ERROR;
5833 ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5834 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5835 END IF;
5836 END IF;
5837
5838 END IF; -- if p_visit_rec.status_code IN ('DRAFT', 'PLANNING')
5839
5840 -- 2. Only one unlocked Component Visit per Organization can exists during any duration.
5841 IF (NVL(p_visit_rec.locked_flag, 'N') = 'N') THEN
5842
5843 -- Ensure that the current visit does not have overlapping duration with any other
5844 -- unlocked Component Visit for this organization
5845 FOR comp_visit_rec IN get_unlocked_comp_visits_csr (p_visit_rec.organization_id, p_visit_rec.visit_id) LOOP
5846
5847 -- Added the last condition below as a fix for the bug 13707528 by TCHIMIRA on 15- FEB-2012
5848 IF ((p_visit_rec.start_date BETWEEN comp_visit_rec.start_date_time AND comp_visit_rec.close_date_time) OR
5849 (p_visit_rec.plan_end_date BETWEEN comp_visit_rec.start_date_time AND comp_visit_rec.close_date_time) OR
5850 ((comp_visit_rec.start_date_time BETWEEN p_visit_rec.start_date AND p_visit_rec.plan_end_date) AND
5851 (comp_visit_rec.close_date_time BETWEEN p_visit_rec.start_date AND p_visit_rec.plan_end_date))) THEN
5852
5853 l_return_status := FND_API.G_RET_STS_ERROR;
5854 --TCHIMIRA :: 10-JAN-2012 :: Include the visit start and end dates also in the error message
5855 IF (l_overlap_comp_visits IS NULL) THEN
5856 l_overlap_comp_visits := 'visit number ' || comp_visit_rec.visit_number || ' having start date '
5857 ||comp_visit_rec.start_date_time ||' and planned end date ' ||comp_visit_rec.close_date_time;
5858 ELSE
5859 l_overlap_comp_visits := l_overlap_comp_visits || ', visit number ' || comp_visit_rec.visit_number||
5860 ' having start date '||comp_visit_rec.start_date_time|| ' and planned end date '
5861 ||comp_visit_rec.close_date_time;
5862 END IF;
5863
5864 END IF;
5865 END LOOP;
5866
5867 IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
5868 FND_MESSAGE.set_name(G_APP_NAME, 'AHL_VWP_COMP_VST_EXISTS');
5869 FND_MESSAGE.set_token('VISIT_NUM', l_overlap_comp_visits);
5870 FND_MSG_PUB.add;
5871 RAISE FND_API.G_EXC_ERROR;
5872 END IF;
5873 END IF; -- if NVL(p_visit_rec.locked_flag, 'N') = 'N'
5874
5875 ELSE
5876 -- Unit is mandatory for Non Component Visits
5877 IF (p_visit_rec.unit_name IS NULL ) THEN
5878 FND_MESSAGE.set_name(G_APP_NAME, 'AHL_VWP_NON_COMP_UC_NULL');
5879 FND_MSG_PUB.add;
5880 END IF;
5881
5882 END IF;
5883
5884 -------------------- finish --------------------------
5885 Fnd_Msg_Pub.count_and_get (
5886 p_encoded => Fnd_Api.g_false,
5887 p_count => x_msg_count,
5888 p_data => x_msg_data
5889 );
5890
5891 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
5892 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
5893 END IF;
5894
5895 EXCEPTION
5896 WHEN Fnd_Api.g_exc_error THEN
5897 x_return_status := Fnd_Api.g_ret_sts_error;
5898 Fnd_Msg_Pub.count_and_get (
5899 p_encoded => Fnd_Api.g_false,
5900 p_count => x_msg_count,
5901 p_data => x_msg_data
5902 );
5903 WHEN Fnd_Api.g_exc_unexpected_error THEN
5904 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5905 Fnd_Msg_Pub.count_and_get (
5906 p_encoded => Fnd_Api.g_false,
5907 p_count => x_msg_count,
5908 p_data => x_msg_data
5909 );
5910 WHEN OTHERS THEN
5911 x_return_status := Fnd_Api.g_ret_sts_unexp_error;
5912 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error) THEN
5913 Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
5914 END IF;
5915 Fnd_Msg_Pub.count_and_get (
5916 p_encoded => Fnd_Api.g_false,
5917 p_count => x_msg_count,
5918 p_data => x_msg_data
5919 );
5920 END Validate_Visit;
5921
5922 ------------------------------------------------------------------------------------
5923 -- MANESING::Component Maintenance Planning Project, 05-Jul-2011, added following procedure
5924 -- Start of Comments
5925 -- Procedure name : Validate_Component_Visit
5926 -- Type : Public
5927 -- Function : Procedure to validate a Component Visit. Basically it checks for all the
5928 -- mandatory attributes required for a Component Visit.
5929 --
5930 -- Pre-reqs :
5931 -- Parameters :
5932 --
5933 -- Validate_Component_Visit Parameters:
5934 -- p_visit_rec IN Given Component Visit record. Required
5935 --
5936 -- End of Comments
5937
5938 PROCEDURE Validate_Component_Visit
5939 (
5940 p_api_version IN NUMBER := 1.0,
5941 p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE,
5942 p_commit IN VARCHAR2 := FND_API.G_FALSE,
5943 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
5944 p_module_type IN VARCHAR2,
5945 p_visit_rec IN VISIT_REC_TYPE,
5946 x_return_status OUT NOCOPY VARCHAR2,
5947 x_msg_count OUT NOCOPY NUMBER,
5948 x_msg_data OUT NOCOPY VARCHAR2
5949 ) IS
5950
5951 --
5952 l_api_version CONSTANT NUMBER := 1.0;
5953 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Component_Visit';
5954 l_full_name CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || l_api_name;
5955
5956 l_msg_count NUMBER;
5957 --
5958
5959 BEGIN
5960 IF (l_log_procedure >= l_log_current_level) THEN
5961 FND_LOG.string(l_log_procedure, l_full_name || '.begin', 'At the start of the API');
5962 END IF;
5963
5964 -- Standard call to check for call compatibility
5965 IF NOT FND_API.compatible_api_call(l_api_version, p_api_version,
5966 l_api_name, G_PKG_NAME) THEN
5967 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5968 END IF;
5969
5970 -- Initialize message list if p_init_msg_list is set to TRUE
5971 IF FND_API.to_boolean(p_init_msg_list) THEN
5972 FND_MSG_PUB.initialize;
5973 END IF;
5974
5975 -- Initialize Procedure return status to success
5976 x_return_status := FND_API.G_RET_STS_SUCCESS;
5977 l_msg_count := FND_MSG_PUB.count_msg;
5978
5979 IF (l_log_statement >= l_log_current_level) THEN
5980 FND_LOG.string(l_log_statement, l_full_name, ' visit_id = ' || p_visit_rec.visit_id);
5981 END IF;
5982
5983 -- Check the mandatory attributes that are required for a Component Visit
5984 -- 1. Organization
5985 IF (p_visit_rec.organization_id IS NULL) THEN
5986 IF (l_log_statement >= l_log_current_level) THEN
5987 FND_LOG.string(l_log_statement, l_full_name, ' 1. Organization failed.');
5988 END IF;
5989 FND_MESSAGE.set_name(G_APP_NAME, 'AHL_VWP_COMP_VST_ORG_NULL');
5990 FND_MSG_PUB.add;
5991 END IF;
5992
5993 -- 2. Department
5994 IF (p_visit_rec.department_id IS NULL) THEN
5995 IF (l_log_statement >= l_log_current_level) THEN
5996 FND_LOG.string(l_log_statement, l_full_name, ' 2. Department failed.');
5997 END IF;
5998 FND_MESSAGE.set_name(G_APP_NAME, 'AHL_VWP_COMP_VST_DEPT_NULL');
5999 FND_MSG_PUB.add;
6000 END IF;
6001
6002 -- 3. Start Date
6003 IF (p_visit_rec.start_date IS NULL) THEN
6004 IF (l_log_statement >= l_log_current_level) THEN
6005 FND_LOG.string(l_log_statement, l_full_name, ' 3. Start Date.');
6006 END IF;
6007 FND_MESSAGE.set_name(G_APP_NAME, 'AHL_VWP_COMP_VST_ST_DT_NULL');
6008 FND_MSG_PUB.add;
6009 END IF;
6010
6011 -- 4. Planned End Date
6012 IF (p_visit_rec.plan_end_date IS NULL) THEN
6013 IF (l_log_statement >= l_log_current_level) THEN
6014 FND_LOG.string(l_log_statement, l_full_name, ' 4. Planned End Date.');
6015 END IF;
6016 FND_MESSAGE.set_name(G_APP_NAME, 'AHL_VWP_COMP_VST_END_DT_NULL');
6017 FND_MSG_PUB.add;
6018 END IF;
6019
6020 -- 5. Planning and In-Repair Sub Inventory and Locator
6021 IF (p_visit_rec.comp_planning_loc_id IS NULL OR p_visit_rec.comp_inrepair_loc_id IS NULL) THEN
6022 IF (l_log_statement >= l_log_current_level) THEN
6023 FND_LOG.string(l_log_statement, l_full_name, ' 5. Planning and In-Repair Sub Inventory and Locator.');
6024 END IF;
6025 FND_MESSAGE.set_name(G_APP_NAME, 'AHL_VWP_COMP_VST_SUBINV_NULL');
6026 FND_MSG_PUB.add;
6027 END IF;
6028
6029 -- Firm Visit Flag must be NO
6030 IF (p_visit_rec.firmed_flag = 'Y') THEN
6031 IF (l_log_statement >= l_log_current_level) THEN
6032 FND_LOG.string(l_log_statement, l_full_name, ' 6.Firm Visit Flag must be NO.');
6033 END IF;
6034 FND_MESSAGE.set_name(G_APP_NAME, 'AHL_VWP_COMP_VST_NO_FIRM');
6035 FND_MSG_PUB.add;
6036 END IF;
6037
6038 -- If any errors occured, then raise them.
6039 IF (FND_MSG_PUB.count_msg > l_msg_count) THEN
6040 IF (l_log_statement >= l_log_current_level) THEN
6041 FND_LOG.string(l_log_statement, l_full_name, ' Some validations in Validate_Component_Visit API failed.');
6042 END IF;
6043 RAISE FND_API.G_EXC_ERROR;
6044 END IF;
6045
6046 IF (l_log_procedure >= l_log_current_level) THEN
6047 FND_LOG.string(l_log_procedure, l_full_name || '.end', 'At the end of the API');
6048 END IF;
6049
6050 EXCEPTION
6051 WHEN FND_API.G_EXC_ERROR THEN
6052 x_return_status := FND_API.G_RET_STS_ERROR;
6053 FND_MSG_PUB.count_and_get(p_encoded => FND_API.G_FALSE,
6054 p_count => x_msg_count,
6055 p_data => x_msg_data);
6056
6057 IF (l_log_statement >= l_log_current_level) THEN
6058 FND_LOG.string(l_log_statement, l_full_name, ' Expected Exception: ' || x_msg_data);
6059 END IF;
6060
6061 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6062 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6063 FND_MSG_PUB.count_and_get(p_encoded => FND_API.G_FALSE,
6064 p_count => x_msg_count,
6065 p_data => x_msg_data);
6066
6067 IF (l_log_statement >= l_log_current_level) THEN
6068 FND_LOG.string(l_log_statement, l_full_name, ' Unexpected Exception: ' || x_msg_data);
6069 END IF;
6070
6071 WHEN OTHERS THEN
6072 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6073
6074 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6075 FND_MSG_PUB.add_exc_msg(p_pkg_name => G_PKG_NAME,
6076 p_procedure_name => l_api_name,
6077 p_error_text => SUBSTRB(SQLERRM, 1, 240));
6078 END IF;
6079 FND_MSG_PUB.count_and_get(p_encoded => FND_API.G_FALSE,
6080 p_count => x_msg_count,
6081 p_data => x_msg_data);
6082
6083 IF (l_log_statement >= l_log_current_level) THEN
6084 FND_LOG.string(l_log_statement, l_full_name, ' Other Exception: ' || x_msg_data);
6085 END IF;
6086
6087 END Validate_Component_Visit;
6088 ------------------------------------------------------------------------------------
6089
6090 ---------------------------------------------------------------------
6091 -- PROCEDURE
6092 -- Check_Visit_Items
6093 --
6094 ---------------------------------------------------------------------
6095 PROCEDURE Check_Visit_Items (
6096 p_Visit_rec IN Visit_Rec_Type,
6097 p_validation_mode IN VARCHAR2 := Jtf_Plsql_Api.g_create,
6098 x_return_status OUT NOCOPY VARCHAR2
6099 )
6100 IS
6101 BEGIN
6102 -- Validate required items.
6103 Check_Visit_Req_Items (
6104 p_Visit_rec => p_Visit_rec,
6105 x_return_status => x_return_status
6106 );
6107
6108 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
6109 RETURN;
6110 END IF;
6111
6112 -- Validate uniqueness.
6113 Check_Visit_UK_Items (
6114 p_Visit_rec => p_Visit_rec,
6115 p_validation_mode => p_validation_mode,
6116 x_return_status => x_return_status
6117 );
6118
6119 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
6120 RETURN;
6121 END IF;
6122
6123 END Check_Visit_Items;
6124
6125 ---------------------------------------------------------------------
6126 -- PROCEDURE
6127 -- Check_Visit_Req_Items
6128 ---------------------------------------------------------------------
6129 PROCEDURE Check_Visit_Req_Items (
6130 p_Visit_rec IN Visit_Rec_Type,
6131 x_return_status OUT NOCOPY VARCHAR2
6132 )
6133 IS
6134 BEGIN
6135 -- Post 11.5.10 Enhancements
6136 -- Only visit name is mandatory on create/update visit pages
6137 -- VISIT NAME
6138 IF (p_Visit_rec.visit_name IS NULL OR p_Visit_rec.visit_name = Fnd_Api.G_MISS_CHAR) THEN
6139 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
6140 Fnd_Message.set_name ('AHL', 'AHL_VWP_VST_NAME_MISSING');
6141 Fnd_Msg_Pub.ADD;
6142 END IF;
6143 x_return_status := Fnd_Api.g_ret_sts_error;
6144 RETURN;
6145 END IF;
6146
6147 /* -- VISIT TYPE ==== VISIT_TYPE_CODE
6148 IF (p_Visit_rec.visit_type_code IS NULL OR p_Visit_rec.visit_type_code = Fnd_Api.G_MISS_CHAR)THEN
6149 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
6150 Fnd_Message.set_name ('AHL', 'AHL_VWP_TYPE_MISSING');
6151 Fnd_Msg_Pub.ADD;
6152 END IF;
6153 x_return_status := Fnd_Api.g_ret_sts_error;
6154 RETURN;
6155 END IF;
6156 */
6157 /* IF p_Visit_rec.VISIT_ID IS NULL THEN
6158 -- ITEM ==== INVENTORY_ITEM_ID
6159 IF (p_Visit_rec.ITEM_NAME IS NULL OR p_Visit_rec.ITEM_NAME = Fnd_Api.G_MISS_CHAR) THEN
6160 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
6161 Fnd_Message.set_name ('AHL', 'AHL_VWP_ITEM_MISSING');
6162 Fnd_Msg_Pub.ADD;
6163 END IF;
6164 x_return_status := Fnd_Api.g_ret_sts_error;
6165 RETURN;
6166 END IF;
6167 */
6168 /* -- SERIAL NUMBER ==== ITEM_INSTANCE_ID
6169 IF (p_Visit_rec.SERIAL_NUMBER IS NULL OR p_Visit_rec.SERIAL_NUMBER = Fnd_Api.G_MISS_CHAR) THEN
6170
6171 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
6172 Fnd_Message.set_name ('AHL', 'AHL_VWP_SERIAL_MISSING');
6173 Fnd_Msg_Pub.ADD;
6174 END IF;
6175 x_return_status := Fnd_Api.g_ret_sts_error;
6176 RETURN;
6177 END IF;
6178
6179 END IF;
6180 */
6181
6182 END Check_Visit_Req_Items;
6183
6184 ---------------------------------------------------------------------
6185 -- PROCEDURE
6186 -- Check_Visit_UK_Items
6187 ---------------------------------------------------------------------
6188 PROCEDURE Check_Visit_UK_Items (
6189 p_Visit_rec IN Visit_Rec_Type,
6190 p_validation_mode IN VARCHAR2 := Jtf_Plsql_Api.g_create,
6191 x_return_status OUT NOCOPY VARCHAR2
6192 )
6193 IS
6194 l_valid_flag VARCHAR2(1);
6195 BEGIN
6196 x_return_status := Fnd_Api.g_ret_sts_success;
6197 --
6198 -- For Create_Visit, when ID is passed in, we need to
6199 -- check if this ID is unique.
6200 IF UPPER(p_Visit_rec.operation_flag) <> 'C' THEN
6201
6202 IF p_validation_mode = Jtf_Plsql_Api.g_create AND p_Visit_rec.VISIT_ID IS NOT NULL
6203 THEN
6204
6205 IF Ahl_Utility_Pvt.check_uniqueness(
6206 'Ahl_Visits_VL',
6207 'VISIT_ID = ' || p_Visit_rec.VISIT_ID
6208 ) = Fnd_Api.g_false THEN
6209
6210 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
6211 Fnd_Message.set_name ('AHL', 'AHL_VWP_DUPLICATE_VISIT_ID');
6212 Fnd_Msg_Pub.ADD;
6213 END IF;
6214 x_return_status := Fnd_Api.g_ret_sts_error;
6215 RETURN;
6216
6217 END IF;
6218 END IF;
6219 END IF;
6220
6221 -- check if VISIT NUMBER is UNIQUE
6222 IF p_validation_mode = Jtf_Plsql_Api.g_create THEN
6223 IF (p_Visit_rec.VISIT_NUMBER IS NOT NULL) THEN
6224 l_valid_flag := Ahl_Utility_Pvt.Check_Uniqueness (
6225 'Ahl_Visits_VL',
6226 'VISIT_NUMBER = ''' || p_Visit_rec.VISIT_NUMBER || ''''
6227 );
6228 END IF;
6229 ELSE
6230 IF (p_Visit_rec.VISIT_NUMBER IS NOT NULL) THEN
6231 l_valid_flag := Ahl_Utility_Pvt.Check_Uniqueness (
6232 'Ahl_Visits_VL',
6233 'VISIT_NUMBER = ''' || p_Visit_rec.VISIT_NUMBER ||
6234 ''' AND VISIT_ID <> ' || p_Visit_rec.VISIT_ID
6235 );
6236 END IF;
6237 END IF;
6238
6239 IF l_valid_flag = Fnd_Api.g_false THEN
6240 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
6241 Fnd_Message.set_name ('AHL', 'AHL_VWP_DUPLI_VISIT_NUMBER');
6242 Fnd_Msg_Pub.ADD;
6243 END IF;
6244 x_return_status := Fnd_Api.g_ret_sts_error;
6245 RETURN;
6246 END IF;
6247 END Check_Visit_UK_Items;
6248
6249
6250 --------------------------------------------------------------------
6251 -- PROCEDURE
6252 -- Close_Visit
6253 --
6254 -- PURPOSE
6255 -- To check all validations before changing status of a Visit to Close
6256 --------------------------------------------------------------------
6257 PROCEDURE Close_Visit(
6258 p_api_version IN NUMBER,
6259 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
6260 p_commit IN VARCHAR2 := Fnd_Api.g_false,
6261 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
6262 p_module_type IN VARCHAR2 := Null,
6263 p_visit_id IN NUMBER,
6264 p_x_cost_session_id IN OUT NOCOPY NUMBER,
6265 p_x_mr_session_id IN OUT NOCOPY NUMBER,
6266 x_return_status OUT NOCOPY VARCHAR2,
6267 x_msg_count OUT NOCOPY NUMBER,
6268 x_msg_data OUT NOCOPY VARCHAR2
6269 )
6270 IS
6271 -- Define local Variables
6272 L_API_VERSION CONSTANT NUMBER := 1.0;
6273 L_API_NAME CONSTANT VARCHAR2(30) := 'Close Visit';
6274 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
6275 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
6276
6277 l_msg_data VARCHAR2(2000);
6278 l_status_name VARCHAR2(80);
6279 l_status_code VARCHAR2(30);
6280 l_chr_date VARCHAR2(30);
6281 l_chk_flag VARCHAR2(1);
6282 l_return_status VARCHAR2(1);
6283
6284 l_min NUMBER;
6285 l_hour NUMBER;
6286 l_msg_count NUMBER;
6287 l_count NUMBER;
6288 i NUMBER;
6289
6290 l_Date DATE;
6291 l_planned_order_flag VARCHAR2(1);
6292 G_EXC_ERROR EXCEPTION;
6293
6294 l_cost_price_rec AHL_VWP_VISIT_CST_PR_PVT.Cost_price_rec_type;
6295 -- Define local Cursors
6296 -- To find visit related information
6297 CURSOR c_visit (x_id IN NUMBER) IS
6298 SELECT * FROM AHL_VISITS_VL
6299 WHERE VISIT_ID = x_id;
6300 c_visit_rec c_visit%ROWTYPE;
6301
6302 -- To find task related information
6303 CURSOR c_task (x_id IN NUMBER) IS
6304 SELECT * FROM AHL_VISIT_TASKS_VL
6305 WHERE VISIT_ID = x_id
6306 AND NVL(STATUS_CODE,'X') <> 'DELETED';
6307 c_task_rec c_task%ROWTYPE;
6308
6309 --yazhou 08Sep2005 starts
6310 -- 1) To find task id which has its corresponding job in shop floor
6311 -- and the job is not in complete, cancelled, closed and deferred status
6312 -- 4--->Complete; 7--->Cancelled; 12 --> Closed; 18 --> Deferred
6313 -- Filter out all Summary tasks, because Master WO will not have statuses updated
6314 --If found, then can not close job.
6315 CURSOR get_open_job_task_csr (p_visit_id IN NUMBER) IS
6316 SELECT A.VISIT_TASK_ID
6317 FROM AHL_VISIT_TASKS_VL A, AHL_WORKORDERS B
6318 WHERE A.VISIT_TASK_ID = B.VISIT_TASK_ID
6319 AND A.VISIT_ID = p_visit_id
6320 AND NVL(A.STATUS_CODE,'X') <> 'DELETED'
6321 -- Balaji added statuses complete_no_charge and deleted to the list of statuses to be
6322 -- checked for.
6323 -- COMPELTE_NO_CHARGE - 5, DELETED - 22
6324 --('4','7','12','18')
6325 AND B.STATUS_CODE NOT IN ('4','5','7','12','18','22')
6326 AND A.TASK_TYPE_CODE <> 'SUMMARY';
6327 --yazhou 08Sep2005 ends
6328
6329 --yazhou 29Sep2005 starts
6330 -- bug fix #4614587
6331 -- 2) Cursor to check that the unit effectivities are updated properly
6332 -- If there are any which is in wrong status, can not close visit
6333 -- PLANNED tasks can not be canncelled. UMP enforcing that rule
6334 CURSOR get_ue_tasks_csr (p_visit_id IN NUMBER) IS
6335 SELECT UE.unit_effectivity_id
6336 FROM ahl_unit_effectivities_b UE, ahl_visit_tasks_b VT
6337 WHERE UE.unit_effectivity_id = VT.unit_effectivity_id
6338 AND nvl(UE.status_code,'x') NOT IN
6339 -- Change by jaramana on 09-MAR-2011
6340 -- Included 'MR-TERMINATE' for bug 11848364
6341 ('ACCOMPLISHED','DEFERRED','TERMINATED','CANCELLED','MR-TERMINATE')
6342 AND (VT.task_type_code = 'UNPLANNED' OR VT.task_type_code = 'PLANNED')
6343 AND VT.visit_id = p_visit_id
6344 AND NVL(VT.STATUS_CODE,'X') <> 'DELETED';
6345 --yazhou 29Sep2005 ends
6346
6347 --Added by Srini
6348 CURSOR c_wip_entity(c_visit_id IN NUMBER) IS
6349 SELECT A.visit_task_id,workorder_id,wip_entity_id,a.object_version_number
6350 FROM ahl_visit_tasks_vl a, ahl_workorders b
6351 WHERE a.visit_task_id = b.visit_task_id
6352 AND a.visit_id = C_VISIT_ID
6353 AND NVL(A.STATUS_CODE,'X') <> 'DELETED'
6354 AND B.STATUS_CODE <> '7';
6355
6356 -- Get summary task without mr
6357 CURSOR c_summ_task (c_visit_id IN NUMBER) IS
6358 SELECT visit_task_id,object_version_number
6359 FROM ahl_visit_tasks_vl
6360 WHERE visit_id = c_visit_id
6361 AND mr_id IS NULL
6362 AND task_type_code = 'SUMMARY'
6363 AND NVL(STATUS_CODE,'X') <> 'DELETED';
6364
6365 -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125
6366 CURSOR get_default_stage_wo (c_visit_id IN NUMBER)
6367 IS
6368 SELECT wo.workorder_id
6369 FROM ahl_workorders wo, ahl_visit_tasks_b task
6370 WHERE task.visit_task_id = wo.visit_task_id
6371 AND task.visit_id = c_visit_id
6372 AND task.task_type_code = 'STAGE'
6373 AND task.stage_id IS NULL;
6374 l_workorder_id NUMBER;
6375
6376 l_wip_entity_rec c_wip_entity%ROWTYPE;
6377 l_summ_task_rec c_summ_task%ROWTYPE;
6378 l_actual_cost NUMBER;
6379 l_estimated_cost NUMBER;
6380 l_task_id NUMBER;
6381 l_ue_id NUMBER;
6382
6383 BEGIN
6384 --------------------- initialize -----------------------
6385 SAVEPOINT Close_Visit;
6386
6387 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6388 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure : Visit Id = ' || p_visit_id);
6389 END IF;
6390
6391 -- Initialize message list if p_init_msg_list is set to TRUE.
6392 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
6393 Fnd_Msg_Pub.initialize;
6394 END IF;
6395
6396 -- Initialize API return status to success
6397 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
6398
6399 -- Standard call to check for call compatibility.
6400 IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
6401 p_api_version,
6402 l_api_name,G_PKG_NAME) THEN
6403 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
6404 END IF;
6405
6406 ------------------------Start of API Body------------------------------------
6407 OPEN c_visit (p_visit_id);
6408 FETCH c_visit INTO c_visit_rec;
6409 CLOSE c_visit;
6410
6411 -- To check if the unit is quarantined
6412 -- AnRaj added for R 12.0 ACL changes in VWP, Start
6413 CHECK_UNIT_QUARANTINED( p_visit_id => p_visit_id,
6414 item_instance_id => c_visit_rec.Item_Instance_Id);
6415 -- Check Error Message stack.
6416 l_msg_count := FND_MSG_PUB.count_msg;
6417 IF l_msg_count > 0 THEN
6418 x_return_status := FND_API.G_RET_STS_ERROR;
6419 RAISE FND_API.G_EXC_ERROR;
6420 END IF;
6421
6422 /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
6423 * Default Stage task and hence workorder won't exist for the Component Visit.
6424 */
6425 IF (AHL_CMP_UTIL_PKG.Is_Comp_Visit (p_visit_id) = 'N') THEN
6426
6427 -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125 :: START
6428 -- Cancel the default stage WO
6429 OPEN get_default_stage_wo (p_visit_id);
6430 FETCH get_default_stage_wo INTO l_workorder_id;
6431 CLOSE get_default_stage_wo;
6432
6433 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6434 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs l_workorder_id= '||l_workorder_id);
6435 END IF;
6436
6437 AHL_PRD_WORKORDER_PVT.cancel_visit_jobs
6438 (p_api_version => 1.0,
6439 p_init_msg_list => FND_API.G_FALSE,
6440 p_commit => FND_API.G_FALSE,
6441 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
6442 p_default => FND_API.G_FALSE,
6443 p_module_type => NULL,
6444 x_return_status => l_return_status,
6445 x_msg_count => l_msg_count,
6446 x_msg_data => l_msg_data,
6447 p_visit_id => NULL,
6448 p_unit_effectivity_id => NULL,
6449 p_workorder_id => l_workorder_id);
6450
6451 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6452 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs - l_return_status : '||l_return_status);
6453 END IF;
6454
6455 IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
6456 x_msg_count := l_msg_count;
6457 x_return_status := l_return_status;
6458 IF l_return_status = Fnd_Api.g_ret_sts_error THEN
6459 RAISE Fnd_Api.g_exc_error;
6460 ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
6461 RAISE Fnd_Api.g_exc_unexpected_error;
6462 END IF;
6463 END IF;
6464 -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125 :: END
6465 END IF; -- if AHL_CMP_UTIL_PKG.Is_Comp_Visit (p_visit_id) = 'N'
6466
6467 -- AnRaj added for R 12.0 ACL changes in VWP, End
6468 IF c_visit_rec.status_code = 'RELEASED' THEN
6469 l_chk_flag := 'Y';
6470 --Step 1) Check if there are any workorders which has not been completed/cancelled
6471 OPEN get_open_job_task_csr(p_visit_id);
6472 FETCH get_open_job_task_csr INTO l_task_id;
6473 IF get_open_job_task_csr%FOUND THEN
6474 l_chk_flag := 'N';
6475 Fnd_Message.SET_NAME('AHL','AHL_VWP_INVALID_JOB_STATUS');
6476 Fnd_Msg_Pub.ADD;
6477 CLOSE get_open_job_task_csr;
6478 RAISE Fnd_Api.g_exc_error;
6479 END IF;
6480 CLOSE get_open_job_task_csr;
6481
6482 --2) Check that the corresponding UE records are in
6483 -- 'ACCOMPLISHED','DEFERRED','TERMINATED','CANCELLED'
6484 OPEN get_ue_tasks_csr(p_visit_id);
6485 FETCH get_ue_tasks_csr INTO l_ue_id;
6486 IF get_ue_tasks_csr%FOUND THEN
6487 l_chk_flag :='N';
6488 Fnd_Message.SET_NAME('AHL','AHL_VWP_UE_CLOSE_INV');
6489 Fnd_Msg_Pub.ADD;
6490 CLOSE get_ue_tasks_csr;
6491 RAISE Fnd_Api.g_exc_error;
6492 END IF;
6493 CLOSE get_ue_tasks_csr;
6494
6495 --Modified by srini Sep 24/2003
6496 l_cost_price_rec.visit_id := c_visit_rec.visit_id;
6497 l_cost_price_rec.cost_session_id := p_x_cost_session_id;
6498 l_cost_price_rec.mr_session_id := p_x_mr_session_id;
6499
6500 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6501 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Cost visit ID:' || l_cost_price_rec.VISIT_ID);
6502 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Cost Session ID: ' || l_cost_price_rec.COST_SESSION_ID);
6503 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Mr Session ID:' || l_cost_price_rec.MR_SESSION_ID);
6504 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before Calling AHL_VWP_COST_PVT.Calculate_WO_Cost');
6505 END IF;
6506
6507 --Call ahl_vwp_cost_pvt.calculate_wo_cost
6508 AHL_VWP_COST_PVT.Calculate_WO_Cost(
6509 p_api_version => p_api_version,
6510 p_init_msg_list => p_init_msg_list,
6511 p_commit => Fnd_Api.g_false,
6512 p_validation_level => p_validation_level,
6513 p_x_cost_price_rec => l_cost_price_rec,
6514 x_return_status => l_return_status);
6515
6516 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6517 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After Calling AHL_VWP_COST_PVT.Calculate_WO_Cost : l_return_status - '||l_return_status);
6518 END IF;
6519
6520 -- Check Error Message stack.
6521 l_msg_count := FND_MSG_PUB.count_msg;
6522 IF l_msg_count > 0 THEN
6523 x_return_status := FND_API.G_RET_STS_ERROR;
6524 RAISE FND_API.G_EXC_ERROR;
6525 END IF;
6526
6527 --Assign to out paramenter if null
6528 p_x_cost_session_id := l_cost_price_rec.cost_session_id;
6529 p_x_mr_session_id := l_cost_price_rec.mr_session_id;
6530
6531 OPEN c_wip_entity(c_visit_rec.visit_id);
6532 LOOP
6533 FETCH c_wip_entity INTO l_wip_entity_rec;
6534 EXIT WHEN c_wip_entity%NOTFOUND;
6535
6536 -- Call ahl_vwp_cost_pvt.get_wo_cost
6537 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6538 fnd_log.string(fnd_log.level_statement,L_DEBUG,'wip_entity_id - '||l_wip_entity_rec.wip_entity_id||' - '||'Visit task Id - '||l_wip_entity_rec.visit_task_id);
6539 END IF;
6540
6541 IF l_wip_entity_rec.wip_entity_id IS NOT NULL THEN
6542
6543 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6544 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before Calling AHL_VWP_COST_PVT.Get_WO_Cost for all workorers');
6545 END IF;
6546
6547 AHL_VWP_COST_PVT.Get_WO_Cost(
6548 p_Session_Id => l_cost_price_rec.mr_session_id,
6549 p_Id => l_wip_entity_rec.wip_entity_id,
6550 p_program_id => fnd_global.PROG_APPL_ID,
6551 x_actual_cost => l_actual_cost,
6552 x_estimated_cost => l_estimated_cost,
6553 x_return_status => l_return_status);
6554
6555 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6556 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After Calling AHL_VWP_COST_PVT.Get_WO_Cost : l_return_status - '||l_return_status);
6557 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Updating the actual cost of WO to - '||l_actual_cost);
6558 END IF;
6559
6560 -- Update with actual cost
6561 UPDATE ahl_visit_tasks_b
6562 SET actual_cost = l_actual_cost,
6563 object_version_number = l_wip_entity_rec.object_version_number + 1
6564 WHERE visit_task_id = l_wip_entity_rec.visit_task_id;
6565
6566 END IF;
6567 END LOOP;
6568 CLOSE c_wip_entity;
6569
6570 -- Check Error Message stack.
6571 l_msg_count := FND_MSG_PUB.count_msg;
6572 IF l_msg_count > 0 THEN
6573 x_return_status := FND_API.G_RET_STS_ERROR;
6574 RAISE FND_API.G_EXC_ERROR;
6575 END IF;
6576
6577 --Check for summary tasks without mr
6578 OPEN c_summ_task(c_visit_rec.visit_id);
6579 LOOP
6580 FETCH c_summ_task INTO l_summ_task_rec;
6581 EXIT WHEN c_summ_task%NOTFOUND;
6582 IF l_summ_task_rec.visit_task_id IS NOT NULL THEN
6583
6584 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6585 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before Calling AHL_VWP_COST_PVT.Get_WO_Cost for summary tasks without mr - l_summ_task_rec.visit_task_id : '||l_summ_task_rec.visit_task_id);
6586 END IF;
6587
6588 AHL_VWP_COST_PVT.Get_WO_Cost(
6589 p_Session_Id => l_cost_price_rec.mr_session_id,
6590 p_Id => l_summ_task_rec.visit_task_id,
6591 p_program_id => fnd_global.PROG_APPL_ID,
6592 x_actual_cost => l_actual_cost,
6593 x_estimated_cost => l_estimated_cost,
6594 x_return_status => l_return_status);
6595
6596 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6597 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After Calling AHL_VWP_COST_PVT.Get_WO_Cost : l_return_status - '||l_return_status||' : l_actual_cost - '||l_actual_cost);
6598 END IF;
6599
6600 --Update task record with actual cost
6601 UPDATE ahl_visit_tasks_b
6602 SET actual_cost = l_actual_cost,
6603 object_version_number = l_summ_task_rec.object_version_number + 1
6604 WHERE visit_task_id = l_summ_task_rec.visit_task_id;
6605
6606 END IF;
6607 END LOOP;
6608 CLOSE c_summ_task;
6609
6610 IF l_chk_flag = 'Y' THEN
6611 -- yazhou 28Sept2005 starts
6612 -- bug fix #4626717
6613 /* Call Update_Project procedure to update project status to CLOSED
6614 AHL_VWP_PROJ_PROD_PVT.Update_Project (
6615 p_api_version => p_api_version,
6616 p_init_msg_list => p_init_msg_list,
6617 p_commit => Fnd_Api.g_false,
6618 p_validation_level => p_validation_level,
6619 p_module_type => p_module_type,
6620 p_visit_id => p_visit_id,
6621 x_return_status => x_return_status,
6622 x_msg_count => x_msg_count,
6623 x_msg_data => x_msg_data);*/
6624
6625 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6626 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before Calling AHL_COMPLETIONS_PVT.complete_master_wo');
6627 END IF;
6628
6629 x_return_status := AHL_COMPLETIONS_PVT.complete_master_wo
6630 (
6631 p_visit_id => p_visit_id,
6632 p_workorder_id => null,
6633 p_ue_id => null
6634 );
6635
6636 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6637 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After Calling AHL_COMPLETIONS_PVT.complete_master_wo');
6638 END IF;
6639
6640 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6641 -- Check Error Message stack.
6642 x_msg_count := FND_MSG_PUB.count_msg;
6643 RAISE Fnd_Api.g_exc_error;
6644 END IF;
6645 -- yazhou 28Sept2005 ends
6646
6647 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6648 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Updating Visit Status to CLOSED..');
6649 END IF;
6650
6651 -- To update visit to CLOSED status
6652 UPDATE AHL_VISITS_B
6653 SET STATUS_CODE = 'CLOSED',
6654 SIMULATION_PLAN_ID = NULL,
6655 OBJECT_VERSION_NUMBER = c_visit_rec.object_version_number + 1,
6656 --TCHIMIRA::FP BUG 12668460 for BUG 12607498 ::14-JUN-2011::UPDATE WHO COLUMNS
6657 LAST_UPDATE_DATE = SYSDATE,
6658 LAST_UPDATED_BY = Fnd_Global.USER_ID,
6659 LAST_UPDATE_LOGIN = Fnd_Global.LOGIN_ID
6660 WHERE VISIT_ID = p_visit_id;
6661
6662 -- To update all tasks to CLOSED status
6663 OPEN c_task(p_visit_id);
6664 LOOP
6665 FETCH c_task INTO c_task_rec;
6666 EXIT WHEN c_task%NOTFOUND;
6667
6668 UPDATE AHL_VISIT_TASKS_B
6669 SET STATUS_CODE = 'CLOSED',
6670 OBJECT_VERSION_NUMBER = c_task_rec.object_version_number + 1,
6671 --TCHIMIRA::FP BUG 12668460 for BUG 12607498 ::14-JUN-2011::UPDATE WHO COLUMNS
6672 LAST_UPDATE_DATE = SYSDATE,
6673 LAST_UPDATED_BY = Fnd_Global.USER_ID,
6674 LAST_UPDATE_LOGIN = Fnd_Global.LOGIN_ID
6675 WHERE VISIT_TASK_ID = c_task_rec.visit_task_id;
6676 END LOOP;
6677 CLOSE c_task;
6678
6679 -- Call Process_Planned_Materials API for APS Integration
6680 -- Start Code on 17th Feb 2004 by shbhanda
6681 OPEN c_visit (p_visit_id);
6682 FETCH c_visit INTO c_visit_rec;
6683 CLOSE c_visit;
6684
6685 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6686 fnd_log.string(fnd_log.level_statement,L_DEBUG,'VISIT STATUS - ' || c_visit_rec.status_code);
6687 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
6688 END IF;
6689
6690 AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials (
6691 p_api_version => 1.0,
6692 p_init_msg_list => FND_API.g_false,
6693 p_commit => FND_API.g_false,
6694 p_validation_level => FND_API.g_valid_level_full,
6695 p_visit_id => p_visit_id,
6696 p_visit_task_id => NULL,
6697 p_org_id => NULL,
6698 p_start_date => NULL,
6699 p_visit_status => c_visit_rec.status_code,
6700 p_operation_flag => NULL,
6701 x_planned_order_flag => l_planned_order_flag ,
6702 x_return_status => x_return_status,
6703 x_msg_count => x_msg_count,
6704 x_msg_data => x_msg_data );
6705
6706 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6707 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials : x_return_status - '||x_return_status);
6708 END IF;
6709
6710 l_msg_count := FND_MSG_PUB.count_msg;
6711 IF l_msg_count > 0 THEN
6712 X_msg_count := l_msg_count;
6713 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6714 RAISE FND_API.G_EXC_ERROR;
6715 END IF;
6716
6717 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6718 fnd_log.string(fnd_log.level_statement,L_DEBUG,'l_planned_order_flag - '||l_planned_order_flag);
6719 END IF;
6720 -- End Code on 17th Feb 2004 by shbhanda
6721 END IF;
6722 ELSE
6723 Fnd_Message.SET_NAME('AHL','AHL_VWP_STATUS_NOT_RELEASED');
6724 Fnd_Msg_Pub.ADD;
6725 RAISE Fnd_Api.g_exc_error;
6726 END IF;
6727
6728 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6729 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Cost Session ID: ' || p_x_cost_session_id);
6730 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Mr Session ID:' || p_x_mr_session_id);
6731 END IF;
6732 ---------------------------End of API Body-------------------------------------
6733
6734 -- Standard check of p_commit.
6735 IF Fnd_Api.To_Boolean ( p_commit ) THEN
6736 COMMIT WORK;
6737 END IF;
6738
6739 Fnd_Msg_Pub.count_and_get(
6740 p_encoded => Fnd_Api.g_false,
6741 p_count => x_msg_count,
6742 p_data => x_msg_data);
6743
6744 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6745 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
6746 END IF;
6747 EXCEPTION
6748 WHEN Fnd_Api.g_exc_error THEN
6749 ROLLBACK TO Close_Visit;
6750 x_return_status := Fnd_Api.g_ret_sts_error;
6751 Fnd_Msg_Pub.count_and_get (
6752 p_encoded => Fnd_Api.g_false,
6753 p_count => x_msg_count,
6754 p_data => x_msg_data
6755 );
6756 WHEN Fnd_Api.g_exc_unexpected_error THEN
6757 ROLLBACK TO Close_Visit;
6758 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
6759 Fnd_Msg_Pub.count_and_get (
6760 p_encoded => Fnd_Api.g_false,
6761 p_count => x_msg_count,
6762 p_data => x_msg_data
6763 );
6764 WHEN OTHERS THEN
6765 ROLLBACK TO Close_Visit;
6766 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
6767 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
6768 THEN
6769 Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
6770 END IF;
6771 Fnd_Msg_Pub.count_and_get (
6772 p_encoded => Fnd_Api.g_false,
6773 p_count => x_msg_count,
6774 p_data => x_msg_data
6775 );
6776 END Close_Visit;
6777
6778 --------------------------------------------------------------------
6779 -- PROCEDURE
6780 -- Cancel_Visit
6781 --
6782 -- Post 11.5.10 Reema
6783 -- Transit check changes by shbhanda on Jun 25rd 2004
6784 -- Transit Check chagnes by yazhou Aug-06-2004
6785 --
6786 -- PURPOSE
6787 -- To check all validations before changing status of a Visit to Cancel
6788 --------------------------------------------------------------------
6789 PROCEDURE Cancel_Visit(
6790 p_api_version IN NUMBER := 1.0,
6791 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
6792 p_commit IN VARCHAR2 := Fnd_Api.g_false,
6793 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
6794 p_module_type IN VARCHAR2 := Null,
6795 p_visit_id IN NUMBER,
6796 p_obj_ver_num IN NUMBER,
6797 x_return_status OUT NOCOPY VARCHAR2,
6798 x_msg_count OUT NOCOPY NUMBER,
6799 x_msg_data OUT NOCOPY VARCHAR2)
6800 IS
6801 -- Define local Variables
6802 L_API_VERSION CONSTANT NUMBER := 1.0;
6803 L_API_NAME CONSTANT VARCHAR2(30) := 'Cancel_Visit';
6804 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
6805 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
6806
6807 l_chk_project VARCHAR2(1);
6808 l_error_flag VARCHAR2(1) := 'N';
6809
6810 l_return_status VARCHAR2(1);
6811 l_msg_count NUMBER;
6812 l_msg_data VARCHAR2(2000);
6813
6814 l_planned_order_flag VARCHAR2(1);
6815 l_service_request_id NUMBER;
6816 l_interaction_id NUMBER;
6817
6818 l_dummy VARCHAR2(1);
6819
6820 -- SKPATHAK :: Bug 9096318 :: 09-NOV-2009
6821 -- Added a table type and then an instance of it
6822 TYPE t_ue_id_tbl IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
6823 l_ue_id_inst_tbl t_ue_id_tbl;
6824
6825 -- Define local Cursors
6826 -- To find visit related information
6827 CURSOR c_visit (x_visit_id IN NUMBER) IS
6828 SELECT * FROM AHL_VISITS_VL
6829 WHERE VISIT_ID = x_visit_id;
6830 c_visit_rec c_visit%ROWTYPE;
6831
6832 -- To find task related information for a visit
6833 CURSOR c_task (x_visit_id IN NUMBER) IS
6834 SELECT * FROM AHL_VISIT_TASKS_VL
6835 WHERE VISIT_ID = x_visit_id
6836 AND NVL(STATUS_CODE,'X') <> 'DELETED';
6837 c_task_rec c_task%ROWTYPE;
6838
6839 -- transit check change
6840 -- yazhou start
6841 -- To find all the SRs associated to a visit
6842 -- Modified by Sjayacha to check if its not null.
6843 CURSOR c_service_request (x_visit_id IN NUMBER) IS
6844 SELECT distinct service_request_id FROM AHL_VISIT_TASKS_B
6845 WHERE VISIT_ID = x_visit_id
6846 AND service_request_id IS NOT NULL
6847 AND NVL(STATUS_CODE,'X') <> 'DELETED';
6848
6849 -- To check if any other active visits have this SR associated
6850 CURSOR c_check_SR (x_visit_id IN NUMBER, x_sr_id IN NUMBER) IS
6851 SELECT 'X' FROM DUAL
6852 WHERE exists ( select a.visit_id
6853 from ahl_visits_b a, ahl_visit_tasks_b b
6854 where a.visit_id <> x_visit_id
6855 and a.visit_id = b.visit_id
6856 and b.visit_id <> x_visit_id
6857 AND NVL(a.STATUS_CODE,'X') not in ('DELETED','CLOSED')
6858 AND b.service_request_id = x_sr_id);
6859
6860 CURSOR c_sr_ovn(x_sr_id IN NUMBER) IS
6861 SELECT object_version_number, incident_number
6862 FROM cs_incidents_all_b
6863 WHERE INCIDENT_ID = x_sr_id;
6864 c_sr_ovn_rec c_sr_ovn%ROWTYPE;
6865 -- yazhou end
6866
6867 -- Added by jaramana and skpathak on 05-NOV-2009 for Bug 9095324
6868 -- Get only the top level UEs for all manually planned unit effectivities
6869 CURSOR c_unplanned_task_UEs(p_visit_id IN NUMBER) IS
6870 SELECT TSK.UNIT_EFFECTIVITY_ID
6871 FROM AHL_VISIT_TASKS_B TSK, AHL_UNIT_EFFECTIVITIES_B UE
6872 WHERE TSK.VISIT_ID = p_visit_id
6873 AND TSK.STATUS_CODE <> 'DELETED'
6874 AND TSK.TASK_TYPE_CODE = 'SUMMARY'
6875 AND TSK.ORIGINATING_TASK_ID IS NULL
6876 -- Added by jaramana on 08-NOV-2009 for bug 9096318
6877 -- Delete UEs only with null, INIT-DUE and EXCEPTION status
6878 AND UE.UNIT_EFFECTIVITY_ID = TSK.UNIT_EFFECTIVITY_ID
6879 AND NVL(UE.STATUS_CODE, 'OPEN') IN ('OPEN', 'INIT-DUE', 'EXCEPTION')
6880 AND EXISTS (SELECT 'X'
6881 FROM AHL_VISIT_TASKS_B TSKI
6882 WHERE TSKI.VISIT_ID = p_visit_id
6883 AND TSKI.STATUS_CODE <> 'DELETED'
6884 AND TSKI.TASK_TYPE_CODE = 'UNPLANNED'
6885 -- SKPATHAK :: Bug 10376643 :: 21-DEC-2010
6886 -- Compare UE ID and not MR ID since same MR can be added twice to a visit
6887 AND TSKI.UNIT_EFFECTIVITY_ID = TSK.UNIT_EFFECTIVITY_ID);
6888
6889 -- SKPATHAK :: Bug 9096318 :: 09-NOV-2009
6890 -- Cursor to fetch the UE ID of all unplanned tasks
6891 -- For planned tasks, fetch the UE ID only if the status is null, INIT-DUE or EXCEPTION
6892 CURSOR c_get_ue_id (c_visit_id IN NUMBER) IS
6893 SELECT AUE.UNIT_EFFECTIVITY_ID
6894 FROM AHL_UNIT_EFFECTIVITIES_B AUE, AHL_VISIT_TASKS_B AVT
6895 WHERE AVT.VISIT_ID = c_visit_id
6896 AND AUE.UNIT_EFFECTIVITY_ID = AVT.UNIT_EFFECTIVITY_ID
6897 AND (NVL(AUE.STATUS_CODE, 'OPEN') IN ('OPEN', 'INIT-DUE', 'EXCEPTION')
6898 OR AVT.TASK_TYPE_CODE = 'UNPLANNED');
6899 get_ue_id_rec c_get_ue_id%ROWTYPE;
6900
6901 l_ue_id NUMBER;
6902
6903 BEGIN
6904 --------------------- initialize -----------------------
6905 SAVEPOINT Cancel_Visit;
6906
6907 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6908 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure : Visit Id = ' || p_visit_id);
6909 END IF;
6910
6911 -- Initialize message list if p_init_msg_list is set to TRUE.
6912 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
6913 Fnd_Msg_Pub.initialize;
6914 END IF;
6915
6916 -- Initialize API return status to success
6917 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
6918
6919 -- Standard call to check for call compatibility.
6920 IF NOT Fnd_Api.COMPATIBLE_API_CALL( l_api_version,
6921 p_api_version,
6922 l_api_name,G_PKG_NAME) THEN
6923 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
6924 END IF;
6925
6926 ---------------------------Start of API Body-------------------------------------
6927 OPEN c_visit(p_visit_id);
6928 FETCH c_visit INTO c_visit_rec;
6929 CLOSE c_visit;
6930
6931 IF c_visit_rec.OBJECT_VERSION_NUMBER <> p_obj_ver_num THEN
6932 Fnd_Message.Set_Name('AHL','AHL_COM_RECORD_CHANGED');
6933 Fnd_Msg_Pub.ADD;
6934 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
6935 END IF;
6936
6937 -- Changed by jaramana on 05-NOV-2009
6938 -- Removed the validations added for the bug 9087120
6939 -- All work order status validation will now be done by AHL_PRD_WORKORDER_PVT.cancel_visit_jobs
6940
6941 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6942 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs');
6943 END IF;
6944 -- Added by shbhanda for Transit check changes on 06/25/2004
6945 -- Code Start
6946 -- Call Cancel_Visit_Jobs API
6947 AHL_PRD_WORKORDER_PVT.cancel_visit_jobs
6948 (p_api_version => 1.0,
6949 -- SKPATHAK :: Bug 9115894 :: 20-NOV-2009 :: pass p_init_msg_list as false not true
6950 p_init_msg_list => FND_API.G_FALSE,
6951 p_commit => FND_API.G_FALSE,
6952 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
6953 -- SKPATHAK :: Bug 9115894 :: 20-NOV-2009 :: pass p_default as true not false
6954 p_default => FND_API.G_TRUE,
6955 p_module_type => NULL,
6956 x_return_status => l_return_status,
6957 x_msg_count => l_msg_count,
6958 x_msg_data => l_msg_data,
6959 p_visit_id => p_visit_id,
6960 p_unit_effectivity_id => NULL,
6961 p_workorder_id => NULL);
6962
6963 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6964 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs - l_return_status : '||l_return_status);
6965 END IF;
6966 -- SKPATHAK :: Bug 9115894 :: 13-NOV-2009
6967 -- If return status is V, same should be carried over to the caller
6968 IF l_return_status = G_VALIDATION_ERROR_STATUS THEN
6969 RAISE G_VALIDATION_EXCEPTION;
6970 END IF;
6971
6972 -- Check return status.
6973 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6974 RAISE FND_API.G_EXC_ERROR;
6975 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6976 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6977 END IF;
6978
6979 -- SKPATHAK :: Bug 9096318 :: 09-NOV-2009
6980 -- Store all the fetched UE IDs in the table l_ue_id_inst_tbl
6981 OPEN c_get_ue_id(p_visit_id);
6982 FETCH c_get_ue_id BULK COLLECT INTO l_ue_id_inst_tbl;
6983 CLOSE c_get_ue_id;
6984
6985 -- Added by jaramana on 05-NOV-2009 for Bug 9095324
6986 -- For Unplanned Tasks, do a delete of Unit Effectivities when canceling a visit
6987 OPEN c_unplanned_task_UEs(p_visit_id);
6988 LOOP
6989 FETCH c_unplanned_task_UEs INTO l_ue_id;
6990 EXIT WHEN c_unplanned_task_UEs%NOTFOUND;
6991 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
6992 fnd_log.string(fnd_log.level_statement, L_DEBUG, 'About to call AHL_UMP_UNPLANNED_PVT.DELETE_UNIT_EFFECTIVITY with p_unit_effectivity_id = ' || l_ue_id);
6993 END IF;
6994 AHL_UMP_UNPLANNED_PVT.DELETE_UNIT_EFFECTIVITY
6995 (
6996 p_api_version => 1.0,
6997 p_init_msg_list => FND_API.G_FALSE,
6998 p_commit => FND_API.G_FALSE,
6999 x_return_status => l_return_status,
7000 x_msg_count => l_msg_count,
7001 x_msg_data => x_msg_data,
7002 p_unit_effectivity_id => l_ue_id
7003 );
7004 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7005 fnd_log.string(fnd_log.level_statement, L_DEBUG, 'Returned from AHL_UMP_UNPLANNED_PVT.DELETE_UNIT_EFFECTIVITY, l_return_status = ' || l_return_status);
7006 END IF;
7007 IF ((l_msg_count > 0) OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS) THEN
7008 CLOSE c_unplanned_task_UEs;
7009 RAISE FND_API.G_EXC_ERROR;
7010 END IF;
7011 END LOOP;
7012 CLOSE c_unplanned_task_UEs;
7013
7014 -- SKPATHAK :: Bug 9096318 :: 09-NOV-2009
7015 -- Modified this update statement
7016 -- For all UNPLANNED tasks, nullify the unit effectivity id
7017 -- For PLANNED tasks, nullify the ue_id only if the status is null, INIT-DUE or EXCEPTION
7018 IF (l_ue_id_inst_tbl.COUNT > 0) THEN
7019 FOR i IN l_ue_id_inst_tbl.FIRST..l_ue_id_inst_tbl.LAST LOOP
7020 UPDATE AHL_VISIT_TASKS_B
7021 SET UNIT_EFFECTIVITY_ID = NULL,
7022 OBJECT_VERSION_NUMBER = object_version_number + 1,
7023 LAST_UPDATE_DATE = SYSDATE,
7024 LAST_UPDATED_BY = Fnd_Global.USER_ID,
7025 LAST_UPDATE_LOGIN = Fnd_Global.LOGIN_ID
7026 WHERE VISIT_ID = p_visit_id
7027 AND NVL(UNIT_EFFECTIVITY_ID, -1) = l_ue_id_inst_tbl(i);
7028 END LOOP;
7029 END IF;
7030
7031
7032 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7033 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
7034 END IF;
7035
7036 -- Call AHL_LTP_REQST_MATRL_PVT.Process_Planned_Material
7037 AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials
7038 (p_api_version => 1.0,
7039 p_init_msg_list => FND_API.g_false,
7040 p_commit => FND_API.g_false,
7041 p_validation_level => FND_API.g_valid_level_full,
7042 p_visit_id => p_visit_id,
7043 p_visit_task_id => NULL,
7044 p_org_id => NULL,
7045 p_start_date => NULL,
7046 p_visit_status => 'CANCELLED',
7047 p_operation_flag => NULL,
7048 x_planned_order_flag => l_planned_order_flag,
7049 x_return_status => l_return_status,
7050 x_msg_count => l_msg_count,
7051 x_msg_data => l_msg_data);
7052
7053 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7054 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials - l_return_status : '||l_return_status);
7055 END IF;
7056
7057 -- Check return status.
7058 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7059 RAISE FND_API.G_EXC_ERROR;
7060 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7061 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7062 END IF;
7063
7064 -- update task status
7065 OPEN c_task(p_visit_id);
7066 LOOP
7067 FETCH c_task INTO c_task_rec;
7068 EXIT WHEN c_task%NOTFOUND;
7069 -- update the task status to cancelled
7070
7071 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7072 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Updating the task status to CANCELLED for task ID - c_task_rec.visit_task_id : '||c_task_rec.visit_task_id);
7073 END IF;
7074
7075 UPDATE AHL_VISIT_TASKS_B
7076 SET STATUS_CODE = 'CANCELLED',
7077 OBJECT_VERSION_NUMBER = c_task_rec.object_version_number + 1,
7078 --TCHIMIRA::FP BUG 12668460 for BUG 12607498 ::14-JUN-2011::UPDATE WHO COLUMNS
7079 LAST_UPDATE_DATE = SYSDATE,
7080 LAST_UPDATED_BY = Fnd_Global.USER_ID,
7081 LAST_UPDATE_LOGIN = Fnd_Global.LOGIN_ID
7082 WHERE VISIT_TASK_ID = c_task_rec.visit_task_id;
7083 END LOOP;
7084 CLOSE c_task;
7085
7086 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7087 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Updating the visit status to CANCELLED..');
7088 END IF;
7089 -- update visit status
7090 UPDATE AHL_VISITS_B
7091 SET STATUS_CODE = 'CANCELLED',
7092 OBJECT_VERSION_NUMBER = c_visit_rec.object_version_number + 1,
7093 --TCHIMIRA::FP BUG 12668460 for BUG 12607498 ::14-JUN-2011::UPDATE WHO COLUMNS
7094 LAST_UPDATE_DATE = SYSDATE,
7095 LAST_UPDATED_BY = Fnd_Global.USER_ID,
7096 LAST_UPDATE_LOGIN = Fnd_Global.LOGIN_ID
7097 WHERE VISIT_ID = p_visit_id;
7098
7099 -- ****** cancelled check has to be added to production api
7100 -- Check if visit project id is null
7101 -- if not null then update PA_PROJECTS_ALL and set the
7102 -- project status code to 'CLOSED'
7103 IF c_visit_rec.PROJECT_ID IS NOT NULL THEN
7104 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7105 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_PROJ_PROD_PVT.Update_Project');
7106 END IF;
7107
7108 AHL_VWP_PROJ_PROD_PVT.Update_Project(
7109 p_api_version => p_api_version,
7110 p_init_msg_list => p_init_msg_list,
7111 p_commit => Fnd_Api.g_false,
7112 p_validation_level => p_validation_level,
7113 p_module_type => p_module_type,
7114 p_visit_id => p_visit_id,
7115 x_return_status => x_return_status,
7116 x_msg_count => x_msg_count,
7117 x_msg_data => x_msg_data);
7118 --The following END IF was commented out by jeli on 07/27/04, otherwise it couldn't pass the compilation.
7119
7120 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7121 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_PROJ_PROD_PVT.Update_Project - x_return_status : '||x_return_status);
7122 END IF;
7123
7124 IF NVL(x_return_status, 'X') <> Fnd_Api.G_RET_STS_SUCCESS THEN
7125 -- Method call was not successful, raise error
7126 Fnd_Message.SET_NAME('AHL','AHL_VWP_PRJ_UPDATE_FAILED'); -- Failed to update job
7127 Fnd_Msg_Pub.ADD;
7128 IF (fnd_log.level_error >= fnd_log.g_current_runtime_level)THEN
7129 fnd_log.string( fnd_log.level_error,'ahl.plsql.'||G_PKG_NAME||'.'||L_API_NAME,
7130 'Cant update the project to Rejected status');
7131 END IF;
7132 RAISE Fnd_Api.G_EXC_ERROR;
7133 END IF;
7134 END IF;
7135
7136 -- transit check change
7137 -- yazhou start
7138 -- Set SR status back to OPEN if no other active visit has reference to it
7139 OPEN c_service_request(p_visit_id);
7140 LOOP
7141 FETCH c_service_request INTO l_service_request_id;
7142 EXIT WHEN c_service_request%NOTFOUND;
7143 -- Check if any other active visits have reference to this SR
7144 OPEN c_check_SR(p_visit_id,l_service_request_id);
7145 FETCH c_check_SR into l_dummy;
7146 IF c_check_SR %NOTFOUND THEN
7147 -- Set SR status back to OPEN
7148 OPEN c_sr_ovn(l_service_request_id);
7149 FETCH c_sr_ovn into c_sr_ovn_rec;
7150 CLOSE c_sr_ovn;
7151
7152 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7153 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling CS_ServiceRequest_PUB.Update_Status - SR Id : '||l_service_request_id);
7154 END IF;
7155 -- yazhou 29-Jun-2006 starts
7156 -- bug#5359943
7157 -- Pass p_status_id as 1 (OPEN)
7158 CS_ServiceRequest_PUB.Update_Status
7159 ( p_api_version => 2.0,
7160 p_init_msg_list => p_init_msg_list,
7161 p_commit => FND_API.G_FALSE,
7162 p_resp_appl_id => NULL,
7163 p_resp_id => NULL,
7164 p_user_id => NULL,
7165 p_login_id => NULL,
7166 p_status_id => 1,
7167 p_closed_date => NULL,
7168 p_audit_comments => NULL,
7169 p_called_by_workflow => FND_API.G_FALSE,
7170 p_workflow_process_id => NULL,
7171 p_comments => NULL,
7172 p_public_comment_flag => FND_API.G_FALSE,
7173 p_validate_sr_closure => 'N',
7174 p_auto_close_child_entities => 'N',
7175 p_request_id => NULL,
7176 p_request_number => c_sr_ovn_rec.incident_number,
7177 x_return_status => l_return_status,
7178 x_msg_count => l_msg_count,
7179 x_msg_data => l_msg_data,
7180 p_object_version_number => c_sr_ovn_rec.object_version_number,
7181 -- p_status => 'OPEN',
7182 x_interaction_id => l_interaction_id
7183 );
7184
7185 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7186 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling CS_ServiceRequest_PUB.Update_Status - l_return_status : '||l_return_status);
7187 END IF;
7188 -- yazhou 29-Jun-2006 ends
7189 -- Check return status.
7190 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7191 CLOSE c_check_SR;
7192 CLOSE c_service_request;
7193 RAISE FND_API.G_EXC_ERROR;
7194 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7195 CLOSE c_check_SR;
7196 CLOSE c_service_request;
7197 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7198 END IF;
7199 END IF;
7200 CLOSE c_check_SR;
7201 END LOOP;
7202 CLOSE c_service_request;
7203
7204
7205 ---------------------------End of API Body-------------------------------------
7206 -- Standard check of p_commit.
7207
7208 IF Fnd_Api.To_Boolean ( p_commit ) THEN
7209 COMMIT WORK;
7210 END IF;
7211
7212 Fnd_Msg_Pub.count_and_get(
7213 p_encoded => Fnd_Api.g_false,
7214 p_count => x_msg_count,
7215 p_data => x_msg_data);
7216
7217 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7218 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
7219 END IF;
7220 EXCEPTION
7221 -- SKPATHAK :: Bug 9115894 :: 13-NOV-2009
7222 WHEN G_VALIDATION_EXCEPTION THEN
7223 ROLLBACK TO Cancel_Visit;
7224 x_return_status := G_VALIDATION_ERROR_STATUS ;
7225 Fnd_Msg_Pub.count_and_get (
7226 p_encoded => Fnd_Api.g_false,
7227 p_count => x_msg_count,
7228 p_data => x_msg_data
7229 );
7230
7231 WHEN Fnd_Api.g_exc_error THEN
7232 ROLLBACK TO Cancel_Visit;
7233 x_return_status := Fnd_Api.g_ret_sts_error;
7234 Fnd_Msg_Pub.count_and_get (
7235 p_encoded => Fnd_Api.g_false,
7236 p_count => x_msg_count,
7237 p_data => x_msg_data
7238 );
7239
7240 WHEN Fnd_Api.g_exc_unexpected_error THEN
7241 ROLLBACK TO Cancel_Visit;
7242 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7243 Fnd_Msg_Pub.count_and_get (
7244 p_encoded => Fnd_Api.g_false,
7245 p_count => x_msg_count,
7246 p_data => x_msg_data
7247 );
7248
7249 WHEN OTHERS THEN
7250 ROLLBACK TO Cancel_Visit;
7251 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7252 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
7253 THEN
7254 Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
7255 END IF;
7256 Fnd_Msg_Pub.count_and_get (
7257 p_encoded => Fnd_Api.g_false,
7258 p_count => x_msg_count,
7259 p_data => x_msg_data
7260 );
7261
7262 END Cancel_Visit;
7263
7264 ----------------------------------------------------------------------
7265 -- END: Defining procedures BODY, which are called from UI screen --
7266 ----------------------------------------------------------------------
7267
7268 -- Transit Visit Change
7269 -- yazhou start
7270
7271 --------------------------------------------------------------------
7272 -- PROCEDURE
7273 -- Synchronize_Visit
7274 --
7275 -- PURPOSE
7276 -- Will be called from UA
7277 -- To Synchronize visit with flight schedule change
7278 --------------------------------------------------------------------
7279 PROCEDURE Synchronize_Visit (
7280 p_api_version IN NUMBER,
7281 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
7282 p_commit IN VARCHAR2 := Fnd_Api.g_false,
7283 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
7284 p_module_type IN VARCHAR2 := NULL,
7285 p_x_visit_rec IN OUT NOCOPY Visit_Rec_Type,
7286 x_return_status OUT NOCOPY VARCHAR2,
7287 x_msg_count OUT NOCOPY NUMBER,
7288 x_msg_data OUT NOCOPY VARCHAR2
7289 )
7290 IS
7291 -- Define local Variables
7292 L_API_VERSION CONSTANT NUMBER := 1.0;
7293 L_API_NAME CONSTANT VARCHAR2(30) := 'Synchronize_Visit';
7294 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
7295 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
7296
7297 l_msg_data VARCHAR2(2000);
7298 l_return_status VARCHAR2(1);
7299 l_msg_count NUMBER;
7300
7301 l_visit_rec Visit_Rec_Type := p_x_visit_rec;
7302
7303 -- Define local Cursors
7304
7305 -- To find visit related information
7306 CURSOR c_Visit(x_visit_id IN NUMBER) IS
7307 SELECT * FROM Ahl_Visits_VL
7308 WHERE VISIT_ID = x_visit_id;
7309
7310 c_Visit_rec c_Visit%ROWTYPE;
7311 l_org_id NUMBER;
7312
7313 BEGIN
7314 --------------------- Initialize -----------------------
7315 SAVEPOINT Synchronize_Visit;
7316
7317 -- Check if API is called in debug mode. If yes, enable debug.
7318 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7319 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure : Visit Id - '||l_visit_rec.visit_id);
7320 END IF;
7321
7322 -- Initialize message list if p_init_msg_list is set to TRUE.
7323 IF Fnd_Api.to_boolean(p_init_msg_list) THEN
7324 Fnd_Msg_Pub.initialize;
7325 END IF;
7326
7327 -- Initialize API return status to success
7328 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
7329
7330 -- Standard call to check for call compatibility.
7331 IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
7332 p_api_version,
7333 l_api_name,G_PKG_NAME)
7334 THEN
7335 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7336 END IF;
7337
7338 ------------------------Start of API Body------------------------------------
7339 OPEN c_Visit(l_visit_rec.visit_id);
7340 FETCH c_Visit INTO c_Visit_rec;
7341 IF c_Visit%NOTFOUND THEN
7342 CLOSE c_Visit;
7343 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
7344 Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
7345 Fnd_Msg_Pub.ADD;
7346 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7347 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit not found for - ' ||l_visit_rec.visit_id );
7348 END IF;
7349 END IF;
7350 RAISE Fnd_Api.g_exc_error;
7351 ELSE
7352 CLOSE c_Visit;
7353 END IF;
7354
7355 -- Complete Visit Record
7356 p_x_visit_rec.VISIT_TYPE_CODE := c_Visit_rec.VISIT_TYPE_CODE;
7357 p_x_visit_rec.SERVICE_REQUEST_ID := c_Visit_rec.SERVICE_REQUEST_ID;
7358 p_x_visit_rec.SPACE_CATEGORY_CODE := c_Visit_rec.SPACE_CATEGORY_CODE;
7359 p_x_visit_rec.OBJECT_VERSION_NUMBER := c_Visit_rec.OBJECT_VERSION_NUMBER;
7360 p_x_visit_rec.VISIT_NAME := c_Visit_rec.VISIT_NAME;
7361 p_x_visit_rec.DESCRIPTION := c_Visit_rec.DESCRIPTION;
7362 p_x_visit_rec.PRIORITY_CODE := c_Visit_rec.PRIORITY_CODE;
7363 p_x_visit_rec.PROJ_TEMPLATE_ID := c_Visit_rec.PROJECT_TEMPLATE_ID;
7364
7365 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7366 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Visit Status : '||c_Visit_rec.status_code);
7367 END IF;
7368
7369 IF c_Visit_rec.status_code IN ('PLANNING','DRAFT') THEN
7370 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7371 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Update_Visit');
7372 END IF;
7373
7374 Update_Visit
7375 (
7376 p_api_version => l_api_version,
7377 p_init_msg_list => p_init_msg_list,
7378 p_commit => Fnd_Api.g_false,
7379 p_validation_level => p_validation_level,
7380 p_module_type => p_module_type,
7381 p_x_Visit_rec => p_x_visit_rec,
7382 x_return_status => l_return_status,
7383 x_msg_count => l_msg_count,
7384 x_msg_data => l_msg_data
7385 );
7386
7387 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7388 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Update_Visit - l_return_status : '||l_return_status);
7389 END IF;
7390
7391 IF l_return_status <> 'S' THEN
7392 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7393 END IF;
7394 ELSIF c_Visit_rec.status_code = 'RELEASED' OR c_Visit_rec.status_code = 'PARTIALLY RELEASED' THEN
7395 -------------- R12 changes For Serial Number Reservations Start-------------------
7396 ---------------AnRaj added on 19th June 2005-------------------
7397 -- R12: Department is made mandatory
7398 IF l_visit_rec.department_id IS NULL OR l_visit_rec.department_id = Fnd_Api.G_MISS_NUM THEN
7399 Fnd_Message.SET_NAME('AHL','AHL_VWP_RELSD_DEPT_MAND');
7400 Fnd_Msg_Pub.ADD;
7401 RAISE Fnd_Api.G_EXC_ERROR;
7402 END IF;
7403
7404 -- R12: Department change does not require to cancel current visit and Create a new visit
7405 -- R12: Removed the Department change check here
7406 -- If orgnization changed, then cancel the visit and create a new one.
7407 IF l_visit_rec.organization_id IS NOT NULL
7408 AND l_visit_rec.organization_id <> Fnd_Api.G_MISS_NUM
7409 AND l_visit_rec.organization_id <> c_Visit_rec.organization_id
7410 THEN
7411 -- Validate org/dept/dates
7412 -- Planned Start Date is madatory for transit visit
7413 IF l_visit_rec.START_DATE IS NULL
7414 OR l_visit_rec.START_DATE = FND_API.g_miss_date
7415 THEN
7416 Fnd_Message.SET_NAME('AHL','AHL_VWP_TC_ST_DT_REQ');
7417 Fnd_Msg_Pub.ADD;
7418 RAISE Fnd_Api.G_EXC_ERROR;
7419 END IF;
7420
7421 -- Planned End Date is madatory for transit visit
7422 IF l_visit_rec.PLAN_END_DATE IS NULL
7423 OR l_visit_rec.PLAN_END_DATE = FND_API.g_miss_date
7424 THEN
7425 Fnd_Message.SET_NAME('AHL','AHL_VWP_TC_END_DT_REQ');
7426 Fnd_Msg_Pub.ADD;
7427 RAISE Fnd_Api.G_EXC_ERROR;
7428 END IF;
7429
7430 -- Planned End Date must be greater than or equal to Planned Start Date
7431 IF (l_visit_rec.START_DATE > l_visit_rec.PLAN_END_DATE) THEN
7432 Fnd_Message.SET_NAME('AHL','AHL_VWP_START_DT_GTR_CLOSE_DT');
7433 Fnd_Msg_Pub.ADD;
7434 RAISE Fnd_Api.G_EXC_ERROR;
7435 END IF;
7436
7437 -- If visit start date is earlier than SYSDATE then use sysdate to create new visit
7438 IF (l_visit_rec.START_DATE < SYSDATE ) THEN
7439 l_visit_rec.START_DATE := SYSDATE;
7440 END IF;
7441
7442 -- Organization belongs to user's operating unit
7443 AHL_VWP_RULES_PVT.Check_Org_Name_Or_Id
7444 ( p_organization_id => l_visit_rec.organization_id,
7445 p_org_name => null,
7446 x_organization_id => l_org_id,
7447 x_return_status => l_return_status,
7448 x_error_msg_code => l_msg_data);
7449
7450 l_visit_rec.organization_id := l_org_id;
7451
7452 IF NVL(l_return_status,'x') <> 'S' THEN
7453 Fnd_Message.SET_NAME('AHL','AHL_VWP_ORG_NOT_EXISTS');
7454 Fnd_Msg_Pub.ADD;
7455 RAISE Fnd_Api.G_EXC_ERROR;
7456 END IF;
7457
7458 -- Department must have shift defined
7459 AHL_VWP_RULES_PVT.CHECK_DEPARTMENT_SHIFT
7460 (p_dept_id => l_visit_rec.department_id,
7461 x_return_status => l_return_status);
7462
7463 IF NVL(l_return_status,'x') <> 'S' THEN
7464 Fnd_Message.SET_NAME('AHL','AHL_VWP_NO_DEPT_SHIFT');
7465 Fnd_Msg_Pub.ADD;
7466 RAISE Fnd_Api.G_EXC_ERROR;
7467 END IF;
7468
7469 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7470 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling COPY_VISIT');
7471 END IF;
7472
7473 COPY_VISIT(
7474 p_api_version => l_api_version,
7475 p_init_msg_list => p_init_msg_list,
7476 p_commit => Fnd_Api.g_false,
7477 p_validation_level => p_validation_level,
7478 p_module_type => p_module_type,
7479 P_VISIT_ID => c_visit_rec.visit_id,
7480 p_x_Visit_rec => l_visit_rec,
7481 x_return_status => l_return_status,
7482 x_msg_count => l_msg_count,
7483 x_msg_data => l_msg_data
7484 );
7485
7486 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7487 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling COPY_VISIT l_return_status - '||l_return_status);
7488 END IF;
7489
7490 IF l_return_status <> 'S' THEN
7491 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7492 END IF;
7493
7494 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7495 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_VWP_PROJ_PROD_PVT.Release_Visit');
7496 END IF;
7497
7498 AHL_VWP_PROJ_PROD_PVT.Release_Visit (
7499 p_api_version => l_api_version,
7500 p_visit_id => l_visit_rec.visit_id,
7501 p_module_type => 'VWP',
7502 p_release_flag => NUll,
7503 p_orig_visit_id => c_visit_rec.visit_id,
7504 X_RETURN_STATUS => l_return_status,
7505 X_MSG_COUNT => l_msg_count,
7506 X_MSG_DATA => l_msg_data
7507 );
7508
7509 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7510 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_VWP_PROJ_PROD_PVT.Release_Visit : l_return_status - '||l_return_status);
7511 END IF;
7512
7513 IF l_return_status <> 'S' THEN
7514 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7515 END IF;
7516
7517 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7518 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Cancel_Visit');
7519 END IF;
7520
7521 Cancel_Visit
7522 (
7523 p_Visit_id => c_visit_rec.visit_id,
7524 p_obj_ver_num => c_visit_rec.object_version_number,
7525 x_return_status => l_return_status,
7526 x_msg_count => l_msg_count,
7527 x_msg_data => l_msg_data
7528 );
7529
7530 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7531 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Cancel_Visit : l_return_status - '||l_return_status);
7532 END IF;
7533
7534 IF l_return_status <> 'S' THEN
7535 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7536 END IF;
7537 -- The Organization did not change
7538 -- Only there is change in the date and time of the visit
7539 -- R12 OR the department has changed., added the condition
7540 -- R12 AnRaj
7541 ELSIF l_visit_rec.START_DATE IS NOT NULL
7542 AND l_visit_rec.START_DATE <> FND_API.g_miss_date
7543 AND l_visit_rec.PLAN_END_DATE IS NOT NULL
7544 AND l_visit_rec.PLAN_END_DATE <> FND_API.g_miss_date
7545 AND ( l_visit_rec.START_DATE <> c_Visit_rec.START_DATE_TIME
7546 OR l_visit_rec.PLAN_END_DATE <> c_Visit_rec.CLOSE_DATE_TIME
7547 OR l_visit_rec.department_id <> c_Visit_rec.department_id
7548 )
7549 THEN
7550 ------------ R12 changes For Serial Number Reservations End-----------------
7551
7552 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7553 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling Update_Visit');
7554 END IF;
7555
7556 Update_Visit
7557 (
7558 p_api_version => l_api_version,
7559 p_init_msg_list => p_init_msg_list,
7560 p_commit => Fnd_Api.g_false,
7561 p_validation_level => p_validation_level,
7562 p_module_type => p_module_type,
7563 p_x_Visit_rec => p_x_visit_rec,
7564 x_return_status => l_return_status,
7565 x_msg_count => l_msg_count,
7566 x_msg_data => l_msg_data
7567 );
7568
7569 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7570 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling Update_Visit - l_return_status : '||l_return_status);
7571 END IF;
7572
7573 IF l_return_status <> 'S' THEN
7574 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7575 END IF;
7576
7577 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7578 fnd_log.string(fnd_log.level_statement,L_DEBUG,'Before calling AHL_PRD_WORKORDER_PVT.RESCHEDULE_VISIT_JOBS');
7579 END IF;
7580
7581 AHL_PRD_WORKORDER_PVT.RESCHEDULE_VISIT_JOBS(
7582 P_API_VERSION => l_api_version,
7583 X_RETURN_STATUS => l_return_status,
7584 X_MSG_COUNT => l_msg_count,
7585 X_MSG_DATA => l_msg_data,
7586 P_VISIT_ID => c_visit_rec.visit_id,
7587 p_x_scheduled_start_date => l_visit_rec.START_DATE,
7588 p_x_scheduled_end_date => l_visit_rec.PLAN_END_DATE);
7589
7590 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7591 fnd_log.string(fnd_log.level_statement,L_DEBUG,'After calling AHL_PRD_WORKORDER_PVT.RESCHEDULE_VISIT_JOBS - l_return_status : '||l_return_status);
7592 END IF;
7593
7594 IF l_return_status <> 'S' THEN
7595 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7596 END IF;
7597 END IF;
7598 END IF;
7599
7600 l_msg_count := Fnd_Msg_Pub.count_msg;
7601
7602 IF l_msg_count > 0 THEN
7603 X_msg_count := l_msg_count;
7604 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7605 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7606 END IF;
7607 --Standard check for commit
7608 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
7609 COMMIT;
7610 END IF;
7611
7612 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7613 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PLSQL procedure');
7614 END IF;
7615 EXCEPTION
7616 WHEN Fnd_Api.g_exc_error THEN
7617 ROLLBACK TO Synchronize_Visit;
7618 x_return_status := Fnd_Api.g_ret_sts_error;
7619 Fnd_Msg_Pub.count_and_get (
7620 p_encoded => Fnd_Api.g_false,
7621 p_count => x_msg_count,
7622 p_data => x_msg_data
7623 );
7624 WHEN Fnd_Api.g_exc_unexpected_error THEN
7625 ROLLBACK TO Synchronize_Visit;
7626 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7627 Fnd_Msg_Pub.count_and_get (
7628 p_encoded => Fnd_Api.g_false,
7629 p_count => x_msg_count,
7630 p_data => x_msg_data
7631 );
7632 WHEN OTHERS THEN
7633 ROLLBACK TO Synchronize_Visit;
7634 x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7635 IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
7636 THEN
7637 Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
7638 END IF;
7639 Fnd_Msg_Pub.count_and_get (
7640 p_encoded => Fnd_Api.g_false,
7641 p_count => x_msg_count,
7642 p_data => x_msg_data
7643 );
7644 END Synchronize_Visit;
7645
7646 -- yazhou end
7647
7648 ---------------------------------------------------------------------
7649 -- pbarman begin
7650 -- procedure to delete the Unit Schedule Id from Visits records
7651 --when the Flight schedule is deleted.
7652 ---------------------------------------------------------------------
7653 PROCEDURE DELETE_FLIGHT_ASSOC(
7654 p_unit_schedule_id IN NUMBER,
7655 x_return_status OUT NOCOPY VARCHAR2
7656 )
7657 IS
7658 BEGIN
7659 SAVEPOINT delete_flight_assoc;
7660
7661 -- Initialize return status to success initially
7662 x_return_status:=FND_API.G_RET_STS_SUCCESS;
7663
7664 UPDATE AHL_VISITS_B
7665 SET UNIT_SCHEDULE_ID = NULL
7666 WHERE UNIT_SCHEDULE_ID = p_unit_schedule_id ;
7667
7668 EXCEPTION
7669 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7670 ROLLBACK TO delete_flight_assoc;
7671 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7672 WHEN FND_API.G_EXC_ERROR THEN
7673 ROLLBACK TO delete_flight_assoc;
7674 x_return_status := FND_API.G_RET_STS_ERROR;
7675 WHEN OTHERS THEN
7676 ROLLBACK TO delete_flight_assoc;
7677 x_return_status := FND_API.G_RET_STS_ERROR;
7678 END DELETE_FLIGHT_ASSOC;
7679
7680 -- AnRaj added for R 12.0 ACL changes in VWP
7681 -- Bug number 4297066
7682 -------------------------------------------------------------------
7683 -- Procedure name : check_unit_quarantined
7684 -- Type : Private
7685 -- Function : To check whether the Unit is quarantined
7686 -- Parameters : item_instance_id
7687 ----------------------------------------------------------------------
7688 PROCEDURE check_unit_quarantined(
7689 p_visit_id IN NUMBER,
7690 item_instance_id IN NUMBER
7691 )
7692 IS
7693 l_api_name CONSTANT VARCHAR2(30) := 'check_unit_quarantined';
7694 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
7695 L_DEBUG CONSTANT VARCHAR2(90) := 'ahl.plsql.'||L_FULL_NAME;
7696
7697 l_unit_name VARCHAR2(80);
7698 l_task_number NUMBER(15);
7699 l_instance_id NUMBER;
7700 l_quarantined VARCHAR2(1);
7701
7702 CURSOR c_get_tasknumbers (x_visit_id IN NUMBER) IS
7703 SELECT visit_task_number,instance_id
7704 FROM ahl_visit_tasks_vl
7705 WHERE visit_id = x_visit_id
7706 AND NVL(STATUS_CODE,'X') NOT IN ('DELETED','RELEASED')
7707 AND TASK_TYPE_CODE <> 'SUMMARY';
7708
7709 BEGIN
7710 -- log at the begining of the procedure
7711 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7712 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.begin','At the start of PLSQL procedure - Visit Id : '||p_visit_id||' - '||'item_instance_id : '||item_instance_id);
7713 END IF;
7714
7715 IF item_instance_id IS NOT NULL THEN
7716 -- If the Visit header has an instance id, check for the corresponding Unit
7717 l_quarantined := ahl_util_uc_pkg.is_unit_quarantined(null,item_instance_id);
7718 IF l_quarantined = FND_API.G_TRUE THEN
7719 l_unit_name := ahl_util_uc_pkg.get_unit_name(item_instance_id);
7720 Fnd_Message.SET_NAME('AHL','AHL_VWP_CLOSE_HDR_UNIT_QRNT');
7721 -- The Unit for this Visit (UNIT_NAME-1) is quarantined.
7722 Fnd_Message.Set_Token('UNIT_NAME',l_unit_name);
7723 Fnd_Msg_Pub.ADD;
7724 -- log message
7725 IF (l_log_statement >= l_log_current_level)THEN
7726 fnd_log.string(fnd_log.level_statement,L_DEBUG,l_unit_name || 'Unit is quarantined, Error message added');
7727 END IF; -- log
7728 END IF; -- l_quarantined not true
7729 ELSE -- instance id is null
7730 -- If the visit does not have a unit at the header , then check for the units of all tasks
7731 OPEN c_get_tasknumbers (p_visit_id);
7732 LOOP
7733 FETCH c_get_tasknumbers INTO l_task_number,l_instance_id;
7734 EXIT WHEN c_get_tasknumbers%NOTFOUND;
7735 l_quarantined := ahl_util_uc_pkg.is_unit_quarantined(null,l_instance_id);
7736 IF l_quarantined = FND_API.G_TRUE THEN
7737 Fnd_Message.SET_NAME('AHL','AHL_VWP_CLOSE_TSK_UNIT_QRNT');
7738 -- The Unit for the Task (UNIT_NAME-1) is quarantined.
7739 Fnd_Message.Set_Token('TASK_NUMBER',l_task_number);
7740 Fnd_Msg_Pub.ADD;
7741 -- log message
7742 IF (l_log_statement >= l_log_current_level)THEN
7743 fnd_log.string(fnd_log.level_statement,L_DEBUG,l_task_number || 'Unit for this task is quarantined.');
7744 END IF; -- log
7745 END IF; -- l_quarantined not true
7746 END LOOP; -- c_get_tasknumbers
7747 END IF;
7748
7749 -- log at the end of the procedure
7750 IF (l_log_procedure >= l_log_current_level) THEN
7751 fnd_log.string(fnd_log.level_procedure,L_DEBUG||'.end','At the end of PL SQL procedure');
7752 END IF;
7753 END check_unit_quarantined;
7754
7755 -- SKPATHAK :: Bug 9115894 :: 23-NOV-2009 :: START
7756 -- Added this procedure to get the messages from message stack and store it in a table
7757 PROCEDURE Get_Message_Stack (
7758 x_message_stack_tbl OUT NOCOPY G_MESSAGE_STACK_TBL
7759 )
7760 IS
7761 l_msg_count NUMBER;
7762 l_msg_data VARCHAR2(2000);
7763 l_msg_index_out NUMBER;
7764
7765 BEGIN
7766
7767 l_msg_count := Fnd_Msg_Pub.count_msg;
7768 IF (l_msg_count > 0 ) THEN
7769 FOR i IN 1..l_msg_count
7770 LOOP
7771 fnd_msg_pub.get( p_msg_index => i,
7772 p_encoded => FND_API.G_FALSE,
7773 p_data => l_msg_data,
7774 p_msg_index_out => l_msg_index_out);
7775
7776 x_message_stack_tbl(i) := l_msg_data;
7777 IF (l_log_statement >= l_log_current_level) THEN
7778 fnd_log.string(l_log_statement,'ahl.plsql.AHL_VWP_VISITS_PVT.Get_Message_Stack',
7779 'Error - '||l_msg_data);
7780 END IF;
7781 END LOOP;
7782 END IF;
7783
7784 END Get_Message_Stack;
7785
7786 -- Added this procedure to put the messages stored above back to the message stack
7787 PROCEDURE Set_Message_Stack (
7788 p_message_stack_tbl IN G_MESSAGE_STACK_TBL
7789 )
7790 IS
7791 l_token VARCHAR2(2000);
7792
7793 BEGIN
7794
7795 IF (p_message_stack_tbl.COUNT > 0) THEN
7796 FOR i IN p_message_stack_tbl.FIRST..p_message_stack_tbl.LAST LOOP
7797 FND_MESSAGE.SET_NAME('AHL','AHL_LTP_ATP_ERROR');
7798 FND_MESSAGE.SET_TOKEN('ERROR',p_message_stack_tbl(i));
7799 FND_MSG_PUB.Add;
7800 END LOOP;
7801 END IF;
7802
7803 END Set_Message_Stack;
7804 -- SKPATHAK :: Bug 9115894 :: 23-NOV-2009 :: END
7805
7806
7807 -- New Procedure added by surrkuma on 15-JUL-2010 for bug 9901811
7808 -- Unschedule ATP Materials when a visit undergoes an org Change
7809 PROCEDURE Handle_Visit_Org_Change(p_visit_id IN NUMBER)
7810 IS
7811 L_API_NAME CONSTANT VARCHAR2(30) := 'Handle_Visit_Org_Change';
7812 L_FULL_NAME CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || L_API_NAME;
7813 L_DEBUG_KEY CONSTANT VARCHAR2(99) := 'ahl.plsql.'||L_FULL_NAME;
7814
7815 CURSOR visit_mtrls_cur IS
7816 SELECT vtm.visit_id,
7817 vtm.visit_task_id,
7818 vtm.schedule_material_id,
7819 vtm.object_version_number,
7820 vtm.inventory_item_id,
7821 vtm.scheduled_date,
7822 vtm.scheduled_quantity,
7823 vtm.item_number,
7824 asm.organization_id,
7825 asm.requested_quantity,
7826 asm.uom,
7827 asm.requested_date,
7828 asm.scheduled_date asm_scheduled_date
7829 FROM ahl_visit_task_matrl_v vtm,
7830 ahl_schedule_materials asm
7831 WHERE vtm.visit_id = p_visit_id
7832 AND asm.scheduled_material_id = vtm.schedule_material_id;
7833
7834 l_visit_mtrls_rec visit_mtrls_cur%ROWTYPE;
7835 l_unsched_mtl_tbl AHL_LTP_MATRL_AVAL_PUB.Planned_Matrl_Tbl;
7836 l_unsched_mtl_index NUMBER := 1;
7837 l_return_status VARCHAR2(1);
7838 l_msg_count NUMBER;
7839 l_msg_data VARCHAR2(2000);
7840
7841 BEGIN
7842 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
7843 fnd_log.string(fnd_log.level_procedure, L_DEBUG_KEY||'.begin', 'At the start of PLSQL procedure. p_visit_id: '|| p_visit_id);
7844 END IF;
7845 -- Retrieve the materials for all tasks in the visit
7846 OPEN visit_mtrls_cur;
7847 LOOP
7848 FETCH visit_mtrls_cur INTO l_visit_mtrls_rec;
7849 EXIT WHEN visit_mtrls_cur%NOTFOUND;
7850 IF l_visit_mtrls_rec.schedule_material_id IS NOT NULL THEN
7851 -- Add this requirement to l_unsched_mtl_tbl for ATP unscheduling
7852 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7853 fnd_log.string(fnd_log.level_statement, L_DEBUG_KEY,
7854 'l_unsched_mtl_index = ' || l_unsched_mtl_index ||
7855 ', Adding Requirement with id ' || l_visit_mtrls_rec.schedule_material_id || ' to l_unsched_mtl_tbl for Unscheduling.');
7856 END IF;
7857 l_unsched_mtl_tbl(l_unsched_mtl_index).visit_id := l_visit_mtrls_rec.visit_id;
7858 l_unsched_mtl_tbl(l_unsched_mtl_index).visit_task_id := l_visit_mtrls_rec.visit_task_id;
7859 l_unsched_mtl_tbl(l_unsched_mtl_index).inventory_item_id := l_visit_mtrls_rec.inventory_item_id;
7860 l_unsched_mtl_tbl(l_unsched_mtl_index).item_description := l_visit_mtrls_rec.item_number;
7861 l_unsched_mtl_tbl(l_unsched_mtl_index).organization_id := l_visit_mtrls_rec.organization_id;
7862 l_unsched_mtl_tbl(l_unsched_mtl_index).schedule_material_id := l_visit_mtrls_rec.schedule_material_id;
7863 l_unsched_mtl_tbl(l_unsched_mtl_index).required_quantity := l_visit_mtrls_rec.requested_quantity;
7864 l_unsched_mtl_tbl(l_unsched_mtl_index).primary_uom_code := l_visit_mtrls_rec.uom;
7865 l_unsched_mtl_tbl(l_unsched_mtl_index).requested_date := l_visit_mtrls_rec.requested_date;
7866 l_unsched_mtl_index := l_unsched_mtl_index + 1;
7867 END IF; --Schedule material not null
7868 END LOOP;
7869 CLOSE visit_mtrls_cur;
7870 IF (l_unsched_mtl_tbl.COUNT > 0) THEN
7871 -- Call ATP to unschedule the soft Deleted requirements
7872 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7873 fnd_log.string(fnd_log.level_statement, L_DEBUG_KEY,
7874 'Before calling AHL_LTP_MATRL_AVAL_PVT.Unschedule_deleted_materials. l_unsched_mtl_tbl.COUNT = ' || l_unsched_mtl_tbl.COUNT);
7875 END IF;
7876 AHL_LTP_MATRL_AVAL_PVT.Unschedule_deleted_materials(p_api_version => 1.0,
7877 p_deleted_matrl_tbl => l_unsched_mtl_tbl,
7878 x_return_status => l_return_status,
7879 x_msg_count => l_msg_count,
7880 x_msg_data => l_msg_data);
7881 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7882 fnd_log.string(fnd_log.level_statement, L_DEBUG_KEY,
7883 'After returning from AHL_LTP_MATRL_AVAL_PVT.Unschedule_deleted_materials, l_return_status = ' || l_return_status);
7884 END IF;
7885 END IF;
7886 IF (l_log_procedure >= l_log_current_level) THEN
7887 fnd_log.string(fnd_log.level_procedure, L_DEBUG_KEY||'.end', 'At the end of PL SQL procedure');
7888 END IF;
7889
7890 END Handle_Visit_Org_Change;
7891
7892 -- PRAKKUM :: VWPE: ER:12730539 :: 23-JUN-2011 :: START
7893
7894 ---------------------------------------------------------------------------------------
7895 -- FUNCTION
7896 -- Is_Old_Visit
7897 -- Type : Public
7898 -- PURPOSE
7899 -- To find out whether visit got created earlier to enhancements (ER:12730539) or not
7900 ----------------------------------------------------------------------------------------
7901
7902 FUNCTION Is_Old_Visit(p_visit_id IN NUMBER)
7903 RETURN VARCHAR2
7904 IS
7905 -- To find out the maximum task number value in the visit
7906 CURSOR c_is_old_visit IS
7907 select sum(1) from AHL_VISITS_B VST,
7908 ahl_vwp_stages_b STG
7909 WHERE VST.visit_id = STG.VISIT_ID AND VST.VISIT_ID = p_visit_id
7910 AND nvl2(STG.stage_status_code,'Y','N') = 'N';
7911
7912 l_is_old_visit VARCHAR2(1) := 'N';
7913 l_new_vst_count NUMBER := NULL;
7914 L_API_NAME CONSTANT VARCHAR2(30) := 'Is_Old_Visit';
7915 L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
7916
7917 BEGIN
7918
7919 IF (l_log_procedure >= l_log_current_level) THEN
7920 fnd_log.string(l_log_procedure,
7921 L_DEBUG_KEY ||'.begin',
7922 'At the start of PL SQL function.');
7923 END IF;
7924
7925 IF (l_log_statement >= l_log_current_level) THEN
7926 fnd_log.string(l_log_statement,L_DEBUG_KEY, ' Visit Id = ' || p_visit_id);
7927 END IF;
7928
7929 -- Check for Stage Number
7930 OPEN c_is_old_visit;
7931 FETCH c_is_old_visit INTO l_new_vst_count;
7932 CLOSE c_is_old_visit;
7933
7934 -- A visit is considered as old visit only if visit is holding stages with status code as null.
7935 IF l_new_vst_count is NOT NULL THEN
7936 l_is_old_visit := 'Y';
7937 ELSE
7938 l_is_old_visit := 'N';
7939 END IF;
7940
7941 IF (l_log_statement >= l_log_current_level) THEN
7942 fnd_log.string(l_log_statement,L_DEBUG_KEY, ' l_is_old_visit = ' || l_is_old_visit);
7943 END IF;
7944
7945 IF (l_log_procedure >= l_log_current_level) THEN
7946 fnd_log.string(l_log_procedure,
7947 L_DEBUG_KEY ||'.end',
7948 'At the end of PL SQL function.');
7949 END IF;
7950 RETURN l_is_old_visit;
7951
7952 END Is_Old_Visit;
7953
7954 -- PRAKKUM :: VWPE: ER:12730539 :: 23-JUN-2011 :: END
7955
7956 END AHL_VWP_VISITS_PVT;