DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_VWP_TASKS_PVT

Source


1 PACKAGE BODY AHL_VWP_TASKS_PVT AS
2 /* $Header: AHLVTSKB.pls 120.29.12020000.2 2012/12/07 15:31:47 sareepar ship $ */
3 -----------------------------------------------------------
4 -- PACKAGE
5 --    Ahl_Vwp_Tasks_Pvt
6 --
7 -- PURPOSE
8 --    This package body is a Private API for managing VWP Tasks procedures
9 --    in Complex Maintainance, Repair and Overhauling(CMRO).
10 --    It defines global constants, various local functions and procedures.
11 --
12 -- PROCEDURES
13 --      Check_Task_Items          --      Complete_Visit_Task_Rec
14 --      Check_Visit_Task_Req_Items--      Check_Visit_Task_UK_Items
15 --      Validate_Visit_Task       --      Default_Missing_Attribs
16 
17 --      Create_Task               --      Update_Task
18 --      Create_Summary_Task       --      Update_summary_Task
19 --      Create_Unassociated_Task  --      Update_Unassociated_Task
20 --      Update_Tasks_in_Production
21 
22 --      Delete_Task               --      Get_Task_Details
23 --      Delete_Summary_Task       --      Delete_Unassociated_Task
24 --
25 -- NOTES
26 --
27 --
28 -- HISTORY
29 -- 12-MAY-2002    Shbhanda      Created.
30 -- 06-AUG-2003    SHBHANDA      11.5.10 Changes.
31 --
32 -- 21-AUG-2003    RTADIKON      Changes to reflect VWP/Costing Changes.
33 -- 13-Sep-2004    SJAYACHA      Commented call to update_project as this
34 --                               needs to be done before deleting the Visit.
35 -- 02-NOV-2007    RBHAVSAR      Added PROCEDURE level logs when entering and exiting a procedure.
36 --                              Returned the status before returning from the procedure.
37 --                              Replaced all fnd_log.level_procedure with STATEMENT
38 --                              level logs and added more STATEMENT level logs at
39 --                              key decision points.
40 -- 18-FEB-2010    MANISAGA      Added attribute for DFF enablement and Route_id for navigation
41 --                              to route page
42 -----------------------------------------------------------------
43 --   Define Global CONSTANTS                                   --
44 -----------------------------------------------------------------
45 G_PKG_NAME  CONSTANT    VARCHAR2(30) := 'AHL_VWP_TASKS_PVT';
46 G_APP_NAME  CONSTANT    VARCHAR2(3)  := 'AHL';
47 -----------------------------------------------------------------
48 -- Common constants and variables --
49 ------------------------------------
50 l_log_current_level   NUMBER   := fnd_log.g_current_runtime_level;
51 l_log_statement       NUMBER   := fnd_log.level_statement;
52 l_log_procedure       NUMBER   := fnd_log.level_procedure;
53 l_log_error           NUMBER   := fnd_log.level_error;
54 l_log_unexpected      NUMBER   := fnd_log.level_unexpected;
55 ---------------------------------------------------------------------
56 --   Define Record Types for record structures needed by the APIs  --
57 ---------------------------------------------------------------------
58 -- NO RECORD TYPES
59 
60 --------------------------------------------------------------------
61 -- Define Table Type for Records Structures                       --
62 --------------------------------------------------------------------
63 -- NO RECORD TYPES
64 
65 --------------------------------------------------------------------
66 --  START: Defining local functions and procedures SIGNATURES     --
67 --------------------------------------------------------------------
68 --  To Check_Visit_Task_Req_Items
69 PROCEDURE Check_Visit_Task_Req_Items (
70    p_task_rec        IN         AHL_VWP_RULES_PVT.Task_Rec_Type,
71    --Added by rnahata for Issue 105
72    p_validation_mode IN         VARCHAR2 := Jtf_Plsql_Api.g_create,
73    x_return_status   OUT NOCOPY VARCHAR2
74 );
75 
76 --  To Check_Visit_Task_UK_Items
77 PROCEDURE Check_Visit_Task_UK_Items (
78    p_task_rec         IN         AHL_VWP_RULES_PVT.Task_Rec_Type,
79    p_validation_mode  IN         VARCHAR2 := Jtf_Plsql_Api.g_create,
80    x_return_status    OUT NOCOPY VARCHAR2
81 );
82 
83 --  To Check_Task_Items
84 PROCEDURE Check_Task_Items (
85    p_Task_rec        IN  AHL_VWP_RULES_PVT.task_rec_type,
86    p_validation_mode IN  VARCHAR2 := Jtf_Plsql_Api.g_create,
87    x_return_status   OUT NOCOPY VARCHAR2
88 );
89 
90 -- To Validate_Visit_Task
91 PROCEDURE Validate_Visit_Task (
92    p_api_version       IN  NUMBER,
93    p_init_msg_list     IN  VARCHAR2  := Fnd_Api.g_false,
94    p_commit            IN  VARCHAR2  := Fnd_Api.g_false,
95    p_validation_level  IN  NUMBER    := Fnd_Api.g_valid_level_full,
96    p_Task_rec          IN  AHL_VWP_RULES_PVT.task_rec_type,
97    x_return_status     OUT NOCOPY VARCHAR2,
98    x_msg_count         OUT NOCOPY NUMBER,
99    x_msg_data          OUT NOCOPY VARCHAR2
100 );
101 
102 --  To assign Null to missing attributes of visit while creation/updation.
103 PROCEDURE Default_Missing_Attribs(
104  p_x_task_rec IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type
105 );
106 
107 -- To Create Unassociated Task
108 PROCEDURE Create_Unassociated_Task(
109    p_api_version      IN            NUMBER,
110    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
111    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
112    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
113    p_module_type      IN            VARCHAR2  := 'JSP',
114    p_x_task_Rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
115    x_return_status       OUT NOCOPY VARCHAR2,
116    x_msg_count           OUT NOCOPY NUMBER,
117    x_msg_data            OUT NOCOPY VARCHAR2
118    );
119 
120 -- To Create Summary Task
121 PROCEDURE Create_Summary_Task(
122    p_api_version      IN            NUMBER,
123    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
124    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
125    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
126    p_module_type      IN            VARCHAR2  :='JSP',
127    p_x_task_Rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
128    x_return_status       OUT NOCOPY VARCHAR2,
129    x_msg_count           OUT NOCOPY NUMBER,
130    x_msg_data            OUT NOCOPY VARCHAR2
131    );
132 
133 -- To Delete SR Task
134 PROCEDURE Delete_SR_Task (
135    p_api_version      IN  NUMBER,
136    p_init_msg_list    IN  VARCHAR2  := Fnd_Api.g_false,
137    p_commit           IN  VARCHAR2  := Fnd_Api.g_false,
138    p_validation_level IN  NUMBER    := Fnd_Api.g_valid_level_full,
139    p_module_type      IN  VARCHAR2:= 'JSP',
140    p_visit_task_ID    IN  NUMBER,
141    x_return_status    OUT NOCOPY VARCHAR2,
142    x_msg_count        OUT NOCOPY NUMBER,
143    x_msg_data         OUT NOCOPY VARCHAR2
144 );
145 
146 -- To Update Summary Task
147 PROCEDURE Update_Summary_Task(
148    p_api_version      IN            NUMBER,
149    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
150    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
151    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
152    p_module_type      IN            VARCHAR2  := 'JSP',
153    p_x_task_Rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
154    x_return_status       OUT NOCOPY VARCHAR2,
155    x_msg_count           OUT NOCOPY NUMBER,
156    x_msg_data            OUT NOCOPY VARCHAR2
157    );
158 
159 -- To Update Unassociated Task
160 
161 PROCEDURE Update_Unassociated_Task(
162    p_api_version      IN            NUMBER,
163    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
164    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
165    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
166    p_module_type      IN            VARCHAR2  := 'JSP',
167    p_x_task_Rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
168    x_return_status       OUT NOCOPY VARCHAR2,
169    x_msg_count           OUT NOCOPY NUMBER,
170    x_msg_data            OUT NOCOPY VARCHAR2
171    );
172 
173 -- To Delete Unassociated Task
174 PROCEDURE Delete_Unassociated_Task (
175    p_api_version      IN         NUMBER,
176    p_init_msg_list    IN         VARCHAR2  := Fnd_Api.g_false,
177    p_commit           IN         VARCHAR2  := Fnd_Api.g_false,
178    p_validation_level IN         NUMBER    := Fnd_Api.g_valid_level_full,
179    p_module_type      IN         VARCHAR2  := 'JSP',
180    p_Visit_Task_Id    IN         NUMBER,
181    x_return_status    OUT NOCOPY VARCHAR2,
182    x_msg_count        OUT NOCOPY NUMBER,
183    x_msg_data         OUT NOCOPY VARCHAR2
184    );
185 
186 PROCEDURE Get_WorkOrder_Attribs(
187   p_x_prd_workorder_rec   IN OUT NOCOPY AHL_PRD_WORKORDER_PVT.prd_workorder_rec
188   );
189 
190 PROCEDURE Update_Tasks_in_Planning(
191   p_api_version      IN            NUMBER  := 1.0,
192   p_init_msg_list    IN            VARCHAR2:= FND_API.G_FALSE,
193   p_commit           IN            VARCHAR2:= FND_API.G_FALSE,
194   p_validation_level IN            NUMBER  := FND_API.G_VALID_LEVEL_FULL,
195   p_module_type      IN            VARCHAR2:= 'JSP',
196   p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
197   x_return_status       OUT NOCOPY VARCHAR2,
198   x_msg_count           OUT NOCOPY NUMBER,
199   x_msg_data            OUT NOCOPY VARCHAR2
200 );
201 
202 PROCEDURE Update_Tasks_in_Production(
203   p_api_version      IN            NUMBER  := 1.0,
204   p_init_msg_list    IN            VARCHAR2:=  FND_API.G_FALSE,
205   p_commit           IN            VARCHAR2:=  FND_API.G_FALSE,
206   p_validation_level IN            NUMBER  :=  FND_API.G_VALID_LEVEL_FULL,
207   p_module_type      IN            VARCHAR2:=  'JSP',
208   p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
209   x_return_status       OUT NOCOPY VARCHAR2,
210   x_msg_count           OUT NOCOPY NUMBER,
211   x_msg_data            OUT NOCOPY VARCHAR2
212 );
213 
214 --salogan added the following for supplier warranty starts
215 PROCEDURE Get_Entl_rec_for_Delete(
216         p_task_id           IN         NUMBER,
217         x_warranty_entl_tbl OUT NOCOPY AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type
218 );
219 --salogan added the following for supplier warranty ends
220 
221 -- VWPE 12730539:: PRAKKUM :: 26-JUL-2011 :: start
222 -- To Delete Stage Task
223 PROCEDURE Delete_Stage_Task(
224    p_api_version      IN         NUMBER,
225    p_init_msg_list    IN         VARCHAR2  := Fnd_Api.g_false,
226    p_commit           IN         VARCHAR2  := Fnd_Api.g_false,
227    p_validation_level IN         NUMBER    := Fnd_Api.g_valid_level_full,
228    p_module_type      IN         VARCHAR2  := 'JSP',
229    p_visit_task_ID    IN         NUMBER,
230    x_return_status    OUT NOCOPY VARCHAR2,
231    x_msg_count        OUT NOCOPY NUMBER,
232    x_msg_data         OUT NOCOPY VARCHAR2
233 );
234 -- VWPE 12730539:: PRAKKUM :: 26-JUL-2011 :: end
235 --------------------------------------------------------------------
236 --  END: Defining local functions and procedures SIGNATURES     --
237 --------------------------------------------------------------------
238 
239 --------------------------------------------------------------------
240 -- START: Defining local functions and procedures BODY            --
241 --------------------------------------------------------------------
242 --------------------------------------------------------------------
243 -- PROCEDURE
244 --    Default_Missing_Attribs
245 --
246 -- PURPOSE
247 --    For all optional fields check if its g_miss_num/g_miss_char/
248 --    g_miss_date then Null else the value
249 
250 --------------------------------------------------------------------
251 -- Start default attributes for workorder
252 PROCEDURE Get_WorkOrder_Attribs(
253   p_x_prd_workorder_rec   IN OUT NOCOPY AHL_PRD_WORKORDER_PVT.prd_workorder_rec
254 )
255 AS
256 
257 CURSOR get_workorder_rec(c_workorder_id NUMBER)
258 IS
259 /*SELECT *
260 FROM   AHL_ALL_WORKORDERS_V
261 WHERE  workorder_id=c_workorder_id;
262 */
263 -- AnRaj: Changed query for perf issue#1, Bug 4919465
264 SELECT   WO.OBJECT_VERSION_NUMBER OBJECT_VERSION_NUMBER,
265          WO.WORKORDER_NAME JOB_NUMBER,
266          WO.ROUTE_ID ROUTE_ID,
267          VST.ORGANIZATION_ID ORGANIZATION_ID,
268          WIP.FIRM_PLANNED_FLAG FIRM_PLANNED_FLAG,
269          WIP.CLASS_CODE CLASS_CODE,
270          WIP.OWNING_DEPARTMENT DEPARTMENT_ID ,
271          WO.STATUS_CODE JOB_STATUS_CODE,
272          WIP.SCHEDULED_START_DATE SCHEDULED_START_DATE,
273          WIP.SCHEDULED_COMPLETION_DATE SCHEDULED_END_DATE,
274          WO.ACTUAL_START_DATE ACTUAL_START_DATE,
275          WO.ACTUAL_END_DATE ACTUAL_END_DATE,
276          NVL2( WO.VISIT_TASK_ID,
277                nvl(VST.INVENTORY_ITEM_ID, (select inventory_item_id from ahl_visit_tasks_b where visit_id = vst.visit_id and rownum = 1) ),
278                VST.INVENTORY_ITEM_ID) INVENTORY_ITEM_ID,
279          NVL2( WO.VISIT_TASK_ID,
280                nvl (VST.ITEM_INSTANCE_ID, (select instance_id from ahl_visit_tasks_b where visit_id = vst.visit_id and rownum = 1) ),
281                VST.ITEM_INSTANCE_ID) ITEM_INSTANCE_ID,
282          WO.MASTER_WORKORDER_FLAG MASTER_WORKORDER_FLAG,
283          VST.PROJECT_ID PROJECT_ID,
284          NVL2( WO.VISIT_TASK_ID,VTS.PROJECT_TASK_ID,TO_NUMBER(NULL)) PROJECT_TASK_ID,
285          NVL2( WO.VISIT_TASK_ID,VTS.SERVICE_REQUEST_ID,TO_NUMBER(NULL)) INCIDENT_ID
286 FROM     AHL_WORKORDERS WO,
287          AHL_VISITS_B   VST,
288          AHL_VISIT_TASKS_B VTS,
289          WIP_DISCRETE_JOBS WIP
290 WHERE    WIP.WIP_ENTITY_ID=WO.WIP_ENTITY_ID
291 AND      WO.VISIT_ID = VST.VISIT_ID
292 AND      WO.VISIT_ID = VTS.VISIT_ID(+)
293 AND      WO.VISIT_TASK_ID = VTS.VISIT_TASK_ID(+)
294 AND      WO.STATUS_CODE <> '22'
295 AND      WORKORDER_ID = c_workorder_id;
296 l_prd_workorder_rec   get_workorder_rec%ROWTYPE;
297 
298 L_API_NAME  CONSTANT VARCHAR2(30) := 'Get_WorkOrder_Attribs';
299 L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
300 BEGIN
301   IF (l_log_procedure >= l_log_current_level) THEN
302      fnd_log.string(l_log_procedure,
303                     L_DEBUG_KEY ||'.begin',
304                     'At the start of PL SQL procedure.' ||
305                     ' p_x_prd_workorder_rec.workorder_id : ' || p_x_prd_workorder_rec.workorder_id);
306   END IF;
307   p_x_prd_workorder_rec.DML_OPERATION := 'U';
308 
309   OPEN  get_workorder_rec(p_x_prd_workorder_rec.workorder_id);
310   FETCH get_workorder_rec INTO l_prd_workorder_rec;
311   IF get_workorder_rec%NOTFOUND THEN
312      FND_MESSAGE.SET_NAME('AHL','AHL_PRD_WO_NOT_FOUND');
313      FND_MSG_PUB.ADD;
314      CLOSE get_workorder_rec;
315   END IF;
316   CLOSE get_workorder_rec;
317   p_x_prd_workorder_rec.OBJECT_VERSION_NUMBER :=l_prd_workorder_rec.OBJECT_VERSION_NUMBER;
318   p_x_prd_workorder_rec.JOB_NUMBER            :=l_prd_workorder_rec.JOB_NUMBER;
319   p_x_prd_workorder_rec.ROUTE_ID              :=l_prd_workorder_rec.ROUTE_ID;
320   p_x_prd_workorder_rec.ORGANIZATION_ID       :=l_prd_workorder_rec.ORGANIZATION_ID;
321   p_x_prd_workorder_rec.FIRM_PLANNED_FLAG     :=l_prd_workorder_rec.FIRM_PLANNED_FLAG;
322   p_x_prd_workorder_rec.CLASS_CODE            :=l_prd_workorder_rec.CLASS_CODE;
323   p_x_prd_workorder_rec.DEPARTMENT_ID         :=l_prd_workorder_rec.DEPARTMENT_ID;
324   p_x_prd_workorder_rec.STATUS_CODE           :=l_prd_workorder_rec.job_STATUS_CODE;
325   p_x_prd_workorder_rec.SCHEDULED_START_DATE  :=l_prd_workorder_rec.SCHEDULED_START_DATE;
326   p_x_prd_workorder_rec.SCHEDULED_END_DATE    :=l_prd_workorder_rec.SCHEDULED_END_DATE;
327   p_x_prd_workorder_rec.ACTUAL_START_DATE     :=l_prd_workorder_rec.ACTUAL_START_DATE;
328   p_x_prd_workorder_rec.ACTUAL_END_DATE       :=l_prd_workorder_rec.ACTUAL_END_DATE;
329   p_x_prd_workorder_rec.INVENTORY_ITEM_ID     :=l_prd_workorder_rec.INVENTORY_ITEM_ID;
330   p_x_prd_workorder_rec.ITEM_INSTANCE_ID      :=l_prd_workorder_rec.ITEM_INSTANCE_ID;
331   p_x_prd_workorder_rec.MASTER_WORKORDER_FLAG :=l_prd_workorder_rec.MASTER_WORKORDER_FLAG;
332   p_x_prd_workorder_rec.PROJECT_ID            :=l_prd_workorder_rec.PROJECT_ID;
333   p_x_prd_workorder_rec.PROJECT_TASK_ID       :=l_prd_workorder_rec.PROJECT_TASK_ID;
334   p_x_prd_workorder_rec.INCIDENT_ID           :=l_prd_workorder_rec.INCIDENT_ID;
335 
336   IF (l_log_procedure >= l_log_current_level) THEN
337      fnd_log.string(l_log_procedure,
338                     L_DEBUG_KEY ||'.end',
339                     'At the end of PL SQL procedure.');
340   END IF;
341 END Get_WorkOrder_Attribs;
342 
343 -- end of the local procedure to set default attribs.
344 
345 PROCEDURE Default_Missing_Attribs
346 ( p_x_task_rec         IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type)
347 AS
348   L_API_NAME  CONSTANT VARCHAR2(30) := 'Default_Missing_Attribs';
349   L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
350 BEGIN
351          IF (l_log_procedure >= l_log_current_level) THEN
352              fnd_log.string(l_log_procedure,
353                             L_DEBUG_KEY ||'.begin',
354                             'At the start of PL SQL procedure.');
355          END IF;
356          IF p_x_task_rec.DURATION = Fnd_Api.G_MISS_NUM THEN
357             p_x_task_rec.DURATION := NULL;
358          ELSE
359             p_x_task_rec.DURATION := p_x_task_rec.DURATION;
360          END IF;
361 
362          IF p_x_task_rec.PROJECT_TASK_ID = Fnd_Api.G_MISS_NUM THEN
363             p_x_task_rec.PROJECT_TASK_ID := NULL;
364          ELSE
365             p_x_task_rec.PROJECT_TASK_ID := p_x_task_rec.PROJECT_TASK_ID;
366          END IF;
367 
368          IF p_x_task_rec.COST_PARENT_ID = Fnd_Api.G_MISS_NUM THEN
369             p_x_task_rec.COST_PARENT_ID := NULL;
370          ELSE
371             p_x_task_rec.COST_PARENT_ID := p_x_task_rec.COST_PARENT_ID;
372          END IF;
373 
374          IF p_x_task_rec.MR_ROUTE_ID = Fnd_Api.G_MISS_NUM THEN
375             p_x_task_rec.MR_ROUTE_ID := NULL;
376          ELSE
377             p_x_task_rec.MR_ROUTE_ID := p_x_task_rec.MR_ROUTE_ID;
378          END IF;
379 
380          IF p_x_task_rec.MR_ID = Fnd_Api.G_MISS_NUM THEN
381             p_x_task_rec.MR_ID := NULL;
382          ELSE
383             p_x_task_rec.MR_ID := p_x_task_rec.MR_ID;
384          END IF;
385 
386          IF p_x_task_rec.UNIT_EFFECTIVITY_ID = Fnd_Api.G_MISS_NUM THEN
387             p_x_task_rec.UNIT_EFFECTIVITY_ID := NULL;
388          ELSE
389             p_x_task_rec.UNIT_EFFECTIVITY_ID := p_x_task_rec.UNIT_EFFECTIVITY_ID;
390          END IF;
391 
392          IF p_x_task_rec.START_FROM_HOUR = Fnd_Api.G_MISS_NUM THEN
393             p_x_task_rec.START_FROM_HOUR := NULL;
394          ELSE
395             p_x_task_rec.START_FROM_HOUR := p_x_task_rec.START_FROM_HOUR;
396          END IF;
397 
398          IF p_x_task_rec.PRIMARY_VISIT_TASK_ID = Fnd_Api.G_MISS_NUM THEN
399             p_x_task_rec.PRIMARY_VISIT_TASK_ID := NULL;
400          ELSE
401             p_x_task_rec.PRIMARY_VISIT_TASK_ID := p_x_task_rec.PRIMARY_VISIT_TASK_ID;
402          END IF;
403 
404          IF p_x_task_rec.ORIGINATING_TASK_ID = Fnd_Api.G_MISS_NUM THEN
405             p_x_task_rec.ORIGINATING_TASK_ID := NULL;
406          ELSE
407             p_x_task_rec.ORIGINATING_TASK_ID := p_x_task_rec.ORIGINATING_TASK_ID;
408          END IF;
409 
410          IF p_x_task_rec.SERVICE_REQUEST_ID = Fnd_Api.G_MISS_NUM THEN
411             p_x_task_rec.SERVICE_REQUEST_ID := NULL;
412          ELSE
413             p_x_task_rec.SERVICE_REQUEST_ID := p_x_task_rec.SERVICE_REQUEST_ID;
414          END IF;
415 
416          IF p_x_task_rec.attribute_category = Fnd_Api.G_MISS_CHAR THEN
417             p_x_task_rec.attribute_category := NULL;
418          ELSE
419             p_x_task_rec.attribute_category := p_x_task_rec.attribute_category;
420          END IF;
421 
422          --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
423          IF p_x_task_rec.TARGET_QTY = Fnd_Api.G_MISS_NUM THEN
424             p_x_task_rec.TARGET_QTY := NULL;
425          END IF;
426          --
427          IF (l_log_procedure >= l_log_current_level) THEN
428        fnd_log.string(l_log_procedure,
429                       L_DEBUG_KEY ||'.end',
430                       'At the end of PL SQL procedure.');
431          END IF;
432 
433 END Default_Missing_Attribs;
434 
435 --------------------------------------------------------------------
436 -- PROCEDURE
437 --    Get_Task_Details
438 --
439 -- PURPOSE
440 --    To display all task details for the update task UI screen
441 --------------------------------------------------------------------
442 PROCEDURE Get_Task_Details (
443    p_api_version      IN         NUMBER,
444    p_init_msg_list    IN         VARCHAR2 := Fnd_Api.g_false,
445    p_commit           IN         VARCHAR2 := Fnd_Api.g_false,
446    p_validation_level IN         NUMBER   := Fnd_Api.g_valid_level_full,
447    p_module_type      IN         VARCHAR2 :='JSP',
448    p_task_id          IN         NUMBER,
449    x_task_rec         OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
450    x_return_status    OUT NOCOPY VARCHAR2,
451    x_msg_count        OUT NOCOPY NUMBER,
452    x_msg_data         OUT NOCOPY VARCHAR2
453 )
454 IS
455    L_API_VERSION CONSTANT NUMBER := 1.0;
456    L_API_NAME    CONSTANT VARCHAR2(30) := 'Get_Task_Details';
457    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
458 
459    -- local variables defined for the procedure
460    l_task_rec         AHL_VWP_RULES_PVT.Task_Rec_Type := NULL;
461    l_zone             VARCHAR2(30);
462    l_sub_zone         VARCHAR2(30);
463    l_uom              VARCHAR2(30);
464    l_route_id         NUMBER;
465    l_tol_after        NUMBER;
466    l_tol_before       NUMBER;
467    l_parent_num       NUMBER;
468    l_origin_num       NUMBER;
469    l_duration         NUMBER;
470    l_proj_task_number   VARCHAR(25);  --PRAKKUM :: PIE :: 13-OCT-2010 :: Change l_proj_task_number type from NUMBER to VARCHAR2
471    l_task_start_date  DATE;
472    l_task_end_date    DATE;
473    l_due_by_date      DATE;
474    l_msg_count        NUMBER;
475 
476    -- Define local cursors
477    -- To find visit related information
478    CURSOR c_visit (x_id IN NUMBER) IS
479     SELECT * FROM AHL_VISITS_VL
480     WHERE VISIT_ID = x_id;
481     c_visit_rec c_visit%ROWTYPE;
482 
483    -- To find task related information when its for a visit
484    /*
485    CURSOR c_task (x_T_id IN NUMBER) IS
486     SELECT * FROM AHL_SEARCH_VISIT_TASK_V
487     WHERE TASK_ID = x_T_id;
488    c_task_rec c_task%ROWTYPE;
489    */
490 
491    CURSOR c_task_type (x_T_id IN NUMBER) IS
492       SELECT   TASK_TYPE_CODE,MR_ID
493       FROM     ahl_visit_tasks_b
494       WHERE    VISIT_TASK_ID = x_T_id;
495    c_task_type_rec c_task_type%ROWTYPE;
496 
497    -- PRAKKUM :: FP:PIE :: 13-OCT-2010
498    -- Modify the following three task cursors to fetch Service Type code and meaning
499    CURSOR c_non_summary_task_details(x_T_id IN NUMBER) IS
500       SELECT AVTS.VISIT_ID VISIT_ID,
501              AVTS.VISIT_NUMBER VISIT_NUMBER,
502              AVTS.TEMPLATE_FLAG TEMPLATE_FLAG,
503              AVTS.STATUS_CODE VISIT_STATUS_CODE,
504              ATSK.VISIT_TASK_ID TASK_ID,
505              ATSK.VISIT_TASK_NUMBER TASK_NUMBER,
506              ATSKL.VISIT_TASK_NAME TASK_NAME,
507              ATSK.INVENTORY_ITEM_ID ITEM_ID,
508              MTSB.CONCATENATED_SEGMENTS ITEM_NAME,
509              ATSK.ITEM_ORGANIZATION_ID ITEM_ORGANIZATION_ID,
510              ATSK.INSTANCE_ID UNIT_ID,
511              ATSK.QUANTITY QUANTITY, --Added by rnahata for Issue 105
512              CSIS.SERIAL_NUMBER UNIT_NAME,
513              CSIS.INSTANCE_NUMBER INSTANCE_NUMBER, --Added by rnahata for Issue 105
514              CSIS.UNIT_OF_MEASURE UOM, --Added by rnahata for Issue 105
515              ATSK.MR_ROUTE_ID MR_ROUTE_ID,
516              AMRH.TITLE MR_NAME,
517              ARV.ROUTE_NO ROUTE_NAME,
518              ARV.ROUTE_TYPE_CODE ROUTE_TYPE_CODE,
519              LKUP4.MEANING ROUTE_TYPE,
520              AWO.WORKORDER_ID WORK_ORDER_ID,
521              AWO.WORKORDER_NAME WORKORDER_NAME,
522              AWO.STATUS_CODE WORKORDER_STATUS,
523              LKUP2.MEANING WORKORDER_STATUS_MEANING,
524              AWO.ACTUAL_START_DATE WORKORDER_START_DATE,
525              AWO.ACTUAL_END_DATE WORKORDER_END_DATE,
526              ATSK.SERVICE_REQUEST_ID SERVICE_REQ_ID,
527              SR.INCIDENT_NUMBER SERVICE_REQ_NAME,
528              ATSK.START_DATE_TIME START_DATE_TIME,
529              ATSK.END_DATE_TIME END_DATE_TIME,
530              -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Fetch past start and end dates too
531              ATSK.PAST_TASK_START_DATE,
532              ATSK.PAST_TASK_END_DATE,
533              ATSK.TASK_TYPE_CODE TASK_TYPE_CODE,
534              LKUP1.MEANING TASK_TYPE_NAME,
535              ATSK.STATUS_CODE TASK_STATUS_CODE,
536              LKUP3.MEANING TASK_STATUS_NAME,
537              ATSK.STAGE_ID STAGE_ID,
538              ASTG.STAGE_NUM STAGE_NUM,
539              ASTG.STAGE_NAME STAGE_NAME,
540              AUEF.DUE_DATE DUE_BY_DATE,
541              ATSK.DEPARTMENT_ID DEPARTMENT_ID,
542              BDPT.DESCRIPTION DEPARTMENT_NAME,
543              ATSK.ORIGINATING_TASK_ID ORIGINATING_TASK_ID,
544              ORIGTSK.VISIT_TASK_NUMBER ORIGINATING_TASK_NUMBER,
545              ORIGTSK.VISIT_TASK_NAME ORIGINATING_TASK_NAME,
546              ATSK.MR_ID MR_ID,
547              ATSK.UNIT_EFFECTIVITY_ID UNIT_EFFECTIVITY_ID,
548              AMRH.DESCRIPTION  MR_DESCRIPTION,
549              ATSK.SERVICE_TYPE_CODE SERVICE_TYPE_CODE,
550              PA.MEANING SERVICE_TYPE,
551              --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
552              ATSK.target_qty,
553              --manisaga added all the attributes and ROUTE_ID as part of DFF Enablement 0n 18-Feb-2010--Start
554              AMRR.ROUTE_ID,
555              ATSK.attribute_category,
556              ATSK.Attribute1,
557              ATSK.Attribute2,
558              ATSK.Attribute3,
559              ATSK.Attribute4,
560              ATSK.Attribute5,
561              ATSK.Attribute6,
562              ATSK.Attribute7,
563              ATSK.Attribute8,
564              ATSK.Attribute9,
565              ATSK.Attribute10,
566              ATSK.Attribute11,
567              ATSK.Attribute12,
568              ATSK.Attribute13,
569              ATSK.Attribute14,
570              ATSK.Attribute15
571              --manisaga added all the attributes and ROUTE_ID as part of DFF Enablement 0n 18-Feb-2010--End
572       FROM   AHL_VISITS_B AVTS,
573              AHL_VISIT_TASKS_B ATSK,
574              AHL_VISIT_TASKS_TL ATSKL,
575              AHL_VISIT_TASKS_VL ORIGTSK,
576              AHL_MR_ROUTES AMRR,
577              AHL_MR_HEADERS_VL AMRH,
578              AHL_UNIT_EFFECTIVITIES_B AUEF,
579              CSI_ITEM_INSTANCES CSIS,
580              CS_INCIDENTS_ALL_B SR,
581              BOM_DEPARTMENTS BDPT,
582              FND_LOOKUP_VALUES LKUP1,
583              FND_LOOKUP_VALUES LKUP2,
584              FND_LOOKUP_VALUES LKUP3,
585              FND_LOOKUP_VALUES LKUP4,
586              AHL_VWP_STAGES_VL ASTG,
587              MTL_SYSTEM_ITEMS_B_KFV MTSB,
588              AHL_ROUTES_B ARV,
589              AHL_WORKORDERS AWO,
590              PA_LOOKUPS PA
591       WHERE  ATSK.INSTANCE_ID = CSIS.INSTANCE_ID (+)
592       AND    ATSK.ORIGINATING_TASK_ID = ORIGTSK.VISIT_TASK_ID(+)
593       AND    ATSK.MR_ROUTE_ID = AMRR.MR_ROUTE_ID (+)
594       AND    AMRR.MR_HEADER_ID= AMRH.MR_HEADER_ID (+)
595       AND    AMRR.ROUTE_ID = ARV.ROUTE_ID (+)
596       AND    LKUP4.LOOKUP_TYPE (+) = 'AHL_ROUTE_TYPE'
597       AND    LKUP4.LOOKUP_CODE (+) = ARV.ROUTE_TYPE_CODE
598       AND    LKUP4.LANGUAGE (+) = userenv('LANG')
599       AND    ATSK.SERVICE_REQUEST_ID=SR.INCIDENT_ID (+)
600       AND    ATSK.UNIT_EFFECTIVITY_ID=AUEF.UNIT_EFFECTIVITY_ID(+)
601       AND    ATSK. INVENTORY_ITEM_ID = MTSB.INVENTORY_ITEM_ID(+)
602       AND    ATSK. ITEM_ORGANIZATION_ID = MTSB.ORGANIZATION_ID(+)
603       AND    LKUP1.LOOKUP_TYPE(+) = 'AHL_VWP_TASK_TYPE'
604       AND    LKUP1.LANGUAGE (+) = userenv('LANG')
605       AND    LKUP1.LOOKUP_CODE(+) = ATSK.TASK_TYPE_CODE
606       AND    LKUP3.LOOKUP_TYPE(+) = 'AHL_VWP_TASK_STATUS'
607       AND    LKUP3.LOOKUP_CODE(+) = ATSK.STATUS_CODE
608       AND    LKUP3.LANGUAGE (+) = userenv('LANG')
609       AND    AVTS.VISIT_ID = ATSK.VISIT_ID
610       AND    AVTS.TEMPLATE_FLAG = 'N'
611       AND    ATSK.DEPARTMENT_ID = BDPT.DEPARTMENT_ID(+)
612       AND    ATSK.VISIT_TASK_ID = AWO.VISIT_TASK_ID(+)
613       AND    NVL(ATSK.STATUS_CODE,'X') <> 'DELETED'
614       AND    ATSK.TASK_TYPE_CODE <> 'SUMMARY'
615       AND    LKUP2.LOOKUP_TYPE(+) = 'AHL_JOB_STATUS'
616       AND    LKUP2.LOOKUP_CODE(+) = AWO.STATUS_CODE
617       AND    LKUP2.LANGUAGE (+) = userenv('LANG')
618       AND    ATSK.STAGE_ID = ASTG.STAGE_ID(+)
619       AND    ATSK.VISIT_TASK_ID = ATSKL.VISIT_TASK_ID
620       AND    ATSKL.LANGUAGE(+) = USERENV('LANG')
621       AND    PA.LOOKUP_TYPE(+) = 'SERVICE TYPE'
622       AND    PA.LOOKUP_CODE(+) = ATSK.SERVICE_TYPE_CODE
623       AND    ATSK.VISIT_TASK_ID = x_T_id;
624 
625       c_task_rec c_non_summary_task_details%ROWTYPE;
626 
627     CURSOR c_mr_task_details (x_T_id IN NUMBER) IS
628          SELECT   AVTS.VISIT_ID VISIT_ID,
629                   AVTS.VISIT_NUMBER VISIT_NUMBER,
630                   AVTS.TEMPLATE_FLAG TEMPLATE_FLAG,
631                   AVTS.STATUS_CODE VISIT_STATUS_CODE,
632                   ATSK.VISIT_TASK_ID TASK_ID,
633                   ATSK.VISIT_TASK_NUMBER TASK_NUMBER,
634                   ATSKL.VISIT_TASK_NAME TASK_NAME,
635                   ATSK.INVENTORY_ITEM_ID ITEM_ID,
636                   MTSB.CONCATENATED_SEGMENTS ITEM_NAME,
637                   ATSK.ITEM_ORGANIZATION_ID ITEM_ORGANIZATION_ID,
638                   ATSK.INSTANCE_ID UNIT_ID,
639                   ATSK.QUANTITY QUANTITY, --Added by rnahata for Issue 105
640                   CSIS.SERIAL_NUMBER UNIT_NAME,
641                   CSIS.INSTANCE_NUMBER INSTANCE_NUMBER, --Added by rnahata for Issue 105
642                   CSIS.UNIT_OF_MEASURE UOM, --Added by rnahata for Issue 105
643                   ATSK.MR_ROUTE_ID MR_ROUTE_ID,
644                   AMRH.TITLE MR_NAME,
645                   to_char(NULL) ROUTE_NAME,
646                   to_char(NULL) ROUTE_TYPE_CODE,
647                   to_char(NULL) ROUTE_TYPE,
648                   AWO.WORKORDER_ID WORK_ORDER_ID,
649                   AWO.WORKORDER_NAME WORKORDER_NAME,
650                   AWO.STATUS_CODE WORKORDER_STATUS,
651                   LKUP2.MEANING WORKORDER_STATUS_MEANING,
652                   AWO.ACTUAL_START_DATE WORKORDER_START_DATE,
653                   AWO.ACTUAL_END_DATE WORKORDER_END_DATE,
654                   ATSK.SERVICE_REQUEST_ID SERVICE_REQ_ID,
655                   SR.INCIDENT_NUMBER SERVICE_REQ_NAME,
656                   ATSK.START_DATE_TIME START_DATE_TIME,
657                   ATSK.END_DATE_TIME END_DATE_TIME,
658                   -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010  :: Fetch past start and end dates too
659                   ATSK.PAST_TASK_START_DATE,
660                   ATSK.PAST_TASK_END_DATE,
661                   ATSK.TASK_TYPE_CODE TASK_TYPE_CODE,
662                   LKUP1.MEANING TASK_TYPE_NAME,
663                   ATSK.STATUS_CODE TASK_STATUS_CODE,
664                   LKUP3.MEANING TASK_STATUS_NAME,
665                   ATSK.STAGE_ID STAGE_ID,
666                   ASTG.STAGE_NUM STAGE_NUM,
667                   ASTG.STAGE_NAME STAGE_NAME,
668                   AUEF.DUE_DATE DUE_BY_DATE,
669                   ATSK.DEPARTMENT_ID,
670                   BDPT.DESCRIPTION DEPARTMENT_NAME,
671                   ATSK.ORIGINATING_TASK_ID ORIGINATING_TASK_ID,
672                   ORIGTSK.VISIT_TASK_NUMBER ORIGINATING_TASK_NUMBER,
673                   ORIGTSK.VISIT_TASK_NAME ORIGINATING_TASK_NAME,
674                   ATSK.MR_ID MR_ID,
675                   ATSK.UNIT_EFFECTIVITY_ID UNIT_EFFECTIVITY_ID,
676                   AMRH.DESCRIPTION MR_DESCRIPTION,
677                   ATSK.SERVICE_TYPE_CODE SERVICE_TYPE_CODE,
678                   PA.MEANING SERVICE_TYPE,
679                   --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
680                   ATSK.target_qty,
681                   --manisaga added all the attributes and ROUTE_ID as part of DFF Enablement 0n 18-Feb-2010--Start
682                   to_number(NULL) ROUTE_ID,
683                   ATSK.attribute_category,
684                   ATSK.Attribute1,
685                   ATSK.Attribute2,
686                   ATSK.Attribute3,
687                   ATSK.Attribute4,
688                   ATSK.Attribute5,
689                   ATSK.Attribute6,
690                   ATSK.Attribute7,
691                   ATSK.Attribute8,
692                   ATSK.Attribute9,
693                   ATSK.Attribute10,
694                   ATSK.Attribute11,
695                   ATSK.Attribute12,
696                   ATSK.Attribute13,
697                   ATSK.Attribute14,
698                   ATSK.Attribute15
699                   --manisaga added all the attributes and ROUTE_ID as part of DFF Enablement 0n 18-Feb-2010--End
700          FROM     AHL_VISITS_B AVTS,
701                   AHL_VISIT_TASKS_B ATSK,
702                   AHL_VISIT_TASKS_TL ATSKL,
703                   AHL_VISIT_TASKS_VL ORIGTSK,
704                   AHL_MR_HEADERS_VL AMRH,
705                   AHL_UNIT_EFFECTIVITIES_B AUEF,
706                   CSI_ITEM_INSTANCES CSIS,
707                   CS_INCIDENTS_ALL_B SR,
708                   AHL_VWP_STAGES_VL ASTG,
709                   BOM_DEPARTMENTS BDPT,
710                   FND_LOOKUP_VALUES LKUP1,
711                   FND_LOOKUP_VALUES LKUP2,
712                   FND_LOOKUP_VALUES LKUP3,
713                   MTL_SYSTEM_ITEMS_B_KFV MTSB,
714                   AHL_WORKORDERS AWO,
715                   PA_LOOKUPS PA
716          WHERE    ATSK.INSTANCE_ID = CSIS.INSTANCE_ID (+)
717          AND      ATSK.ORIGINATING_TASK_ID = ORIGTSK.VISIT_TASK_ID(+)
718          AND      ATSK.SERVICE_REQUEST_ID = SR.INCIDENT_ID(+)
719          AND      ATSK.UNIT_EFFECTIVITY_ID = AUEF.UNIT_EFFECTIVITY_ID(+)
720          AND      ATSK.INVENTORY_ITEM_ID = MTSB.INVENTORY_ITEM_ID(+)
721          AND      ATSK.ITEM_ORGANIZATION_ID = MTSB.ORGANIZATION_ID(+)
722          AND      LKUP1.LOOKUP_TYPE(+) = 'AHL_VWP_TASK_TYPE'
723          AND      LKUP1.LOOKUP_CODE(+) = ATSK.TASK_TYPE_CODE
724          AND      LKUP1.LANGUAGE (+) = userenv('LANG')
725          AND      LKUP3.LOOKUP_TYPE(+) = 'AHL_VWP_TASK_STATUS'
726          AND      LKUP3.LOOKUP_CODE(+) = ATSK.STATUS_CODE
727          AND      LKUP3.LANGUAGE (+) = userenv('LANG')
728          AND      AVTS.VISIT_ID = ATSK.VISIT_ID
729          AND      AVTS.TEMPLATE_FLAG = 'N'
730          AND      ATSK.DEPARTMENT_ID = BDPT.DEPARTMENT_ID(+)
731          AND      ATSK.VISIT_TASK_ID = AWO.VISIT_TASK_ID(+)
732          AND      ATSK.MR_ID IS NOT NULL
733          AND      NVL(ATSK.STATUS_CODE,'X') <> 'DELETED'
734          AND      ATSK.TASK_TYPE_CODE = 'SUMMARY'
735          AND      AMRH.MR_HEADER_ID = ATSK.MR_ID
736          AND      LKUP2.LOOKUP_TYPE(+) = 'AHL_JOB_STATUS'
737          AND      LKUP2.LOOKUP_CODE(+) = AWO.STATUS_CODE
738          AND      LKUP2.LANGUAGE (+) = userenv('LANG')
739          AND      ATSK.STAGE_ID = ASTG.STAGE_ID(+)
740          AND      ATSK.VISIT_TASK_ID = ATSKL.VISIT_TASK_ID
741          AND      ATSKL.LANGUAGE(+) = USERENV('LANG')
742          AND      PA.LOOKUP_TYPE(+) = 'SERVICE TYPE'
743          AND      PA.LOOKUP_CODE(+) = ATSK.SERVICE_TYPE_CODE
744          AND      ATSK.VISIT_TASK_ID = x_T_id;
745 
746    CURSOR  c_sr_task_details (x_T_id IN NUMBER) IS
747          SELECT   AVTS.VISIT_ID VISIT_ID,
748                   AVTS.VISIT_NUMBER VISIT_NUMBER,
749                   AVTS.TEMPLATE_FLAG TEMPLATE_FLAG,
750                   AVTS.STATUS_CODE VISIT_STATUS_CODE,
751                   ATSK.VISIT_TASK_ID TASK_ID,
752                   ATSK.VISIT_TASK_NUMBER TASK_NUMBER,
753                   ATSK.VISIT_TASK_NAME TASK_NAME,
754                   ATSK.INVENTORY_ITEM_ID ITEM_ID,
755                   MTSB.CONCATENATED_SEGMENTS ITEM_NAME,
756                   ATSK.ITEM_ORGANIZATION_ID ITEM_ORGANIZATION_ID,
757                   ATSK.INSTANCE_ID UNIT_ID,
758                   ATSK.QUANTITY QUANTITY, --Added by rnahata for Issue 105
759                   CSIS.SERIAL_NUMBER UNIT_NAME,
760                   CSIS.INSTANCE_NUMBER INSTANCE_NUMBER, --Added by rnahata for Issue 105
761                   CSIS.UNIT_OF_MEASURE UOM, --Added by rnahata for Issue 105
762                   to_number(null) MR_ROUTE_ID,
763                   to_char(NULL) MR_NAME,
764                   to_char(NULL) ROUTE_NAME,
765                   to_char(NULL) ROUTE_TYPE_CODE,
766                   to_char(NULL) ROUTE_TYPE,
767                   AWO.WORKORDER_ID WORK_ORDER_ID,
768                   AWO.WORKORDER_NAME WORKORDER_NAME,
769                   AWO.STATUS_CODE WORKORDER_STATUS,
770                   LKUP3.MEANING WORKORDER_STATUS_MEANING,
771                   AWO.ACTUAL_START_DATE WORKORDER_START_DATE,
772                   AWO.ACTUAL_END_DATE WORKORDER_END_DATE,
773                   ATSK.SERVICE_REQUEST_ID SERVICE_REQ_ID,
774                   SR.INCIDENT_NUMBER SERVICE_REQ_NAME,
775                   ATSK.START_DATE_TIME START_DATE_TIME,
776                   ATSK.END_DATE_TIME END_DATE_TIME,
777                   -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010  :: Fetch past start and end dates too
778                   ATSK.PAST_TASK_START_DATE,
779                   ATSK.PAST_TASK_END_DATE,
780                   ATSK.TASK_TYPE_CODE TASK_TYPE_CODE,
781                   LKUP1.MEANING TASK_TYPE_NAME,
782                   ATSK.STATUS_CODE TASK_STATUS_CODE,
783                   LKUP2.MEANING TASK_STATUS_NAME,
784                   ATSK.STAGE_ID STAGE_ID,
785                   ASTG.STAGE_NUM STAGE_NUM,
786                   ASTG.STAGE_NAME STAGE_NAME,
787                   to_date(NULL) DUE_BY_DATE,
788                   ATSK.DEPARTMENT_ID DEPARTMENT_ID,
789                   BDPT.DESCRIPTION DEPARTMENT_NAME,
790                   ATSK.ORIGINATING_TASK_ID ORIGINATING_TASK_ID,
791                   ORIGTSK.VISIT_TASK_NUMBER ORIGINATING_TASK_NUMBER,
792                   ORIGTSK.VISIT_TASK_NAME ORIGINATING_TASK_NAME,
793                   to_number(null) MR_ID,
794                   ATSK.UNIT_EFFECTIVITY_ID UNIT_EFFECTIVITY_ID,
795                   to_char(NULL) MR_DESCRIPTION,
796                   ATSK.SERVICE_TYPE_CODE SERVICE_TYPE_CODE,
797                   PA.MEANING SERVICE_TYPE,
798                   --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
799                   ATSK.target_qty,
800                   --manisaga added all the attributes and ROUTE_ID as part of DFF Enablement 0n 18-Feb-2010--Start
801                   to_number(NULL) ROUTE_ID,
802                   ATSK.attribute_category,
803                   ATSK.Attribute1,
804                   ATSK.Attribute2,
805                   ATSK.Attribute3,
806                   ATSK.Attribute4,
807                   ATSK.Attribute5,
808                   ATSK.Attribute6,
809                   ATSK.Attribute7,
810                   ATSK.Attribute8,
811                   ATSK.Attribute9,
812                   ATSK.Attribute10,
813                   ATSK.Attribute11,
814                   ATSK.Attribute12,
815                   ATSK.Attribute13,
816                   ATSK.Attribute14,
817                   ATSK.Attribute15
818                   --manisaga added all the attributes and ROUTE_ID as part of DFF Enablement 0n 18-Feb-2010--End
819          FROM     AHL_VISITS_VL AVTS,
820                   AHL_VISIT_TASKS_VL ATSK,
821                   AHL_VISIT_TASKS_VL ORIGTSK,
822                   CSI_ITEM_INSTANCES CSIS,
823                   CS_INCIDENTS_ALL_B SR,
824                   AHL_VWP_STAGES_VL ASTG,
825                   BOM_DEPARTMENTS BDPT,
826                   FND_LOOKUP_VALUES_VL LKUP1,
827                   FND_LOOKUP_VALUES_VL LKUP2,
828                   FND_LOOKUP_VALUES_VL LKUP3,
829                   MTL_SYSTEM_ITEMS_B_KFV MTSB,
830                   AHL_WORKORDERS AWO,
831                   PA_LOOKUPS PA
832          WHERE    ATSK.INSTANCE_ID = CSIS.INSTANCE_ID (+)
833          AND      ATSK.ORIGINATING_TASK_ID = ORIGTSK.VISIT_TASK_ID(+)
834          AND      ATSK.SERVICE_REQUEST_ID = SR.INCIDENT_ID(+)
835          AND      ATSK.INVENTORY_ITEM_ID = MTSB.INVENTORY_ITEM_ID(+)
836          AND      ATSK.ITEM_ORGANIZATION_ID = MTSB.ORGANIZATION_ID(+)
837          AND      ATSK.VISIT_TASK_ID = AWO.VISIT_TASK_ID(+)
838          AND      LKUP1.LOOKUP_TYPE(+) = 'AHL_VWP_TASK_TYPE'
839          AND      LKUP1.LOOKUP_CODE(+) = ATSK.TASK_TYPE_CODE
840          AND      LKUP2.LOOKUP_TYPE(+) = 'AHL_VWP_TASK_STATUS'
841          AND      LKUP2.LOOKUP_CODE(+) = ATSK.STATUS_CODE
842          AND      LKUP3.LOOKUP_TYPE(+) = 'AHL_JOB_STATUS'
843          AND      LKUP3.LOOKUP_CODE(+) = AWO.STATUS_CODE
844          AND      AVTS.VISIT_ID = ATSK.VISIT_ID
845          AND      AVTS.TEMPLATE_FLAG = 'N'
846          AND      ATSK.DEPARTMENT_ID = BDPT.DEPARTMENT_ID(+)
847          AND      ATSK.MR_ID IS NULL
848          AND      NVL(ATSK.STATUS_CODE,'X') <> 'DELETED'
849          AND      ATSK.TASK_TYPE_CODE = 'SUMMARY'
850          AND      ATSK.STAGE_ID = ASTG.STAGE_ID(+)
851          AND      PA.LOOKUP_TYPE(+) = 'SERVICE TYPE'
852          AND      PA.LOOKUP_CODE(+) = ATSK.SERVICE_TYPE_CODE
853          AND      ATSK.VISIT_TASK_ID = x_T_id;
854 
855   -- To find all task related information which is not in visit/template search views
856     CURSOR c_task_data(p_task_id IN NUMBER) IS
857       SELECT T1.*, T2.TEMPLATE_FLAG, T2.ORGANIZATION_ID
858       FROM AHL_VISIT_TASKS_VL T1, AHL_VISITS_VL T2
859       WHERE T1.visit_task_id = p_task_id
860       AND T1.VISIT_ID = T2.VISIT_ID;
861       c_task_data_rec c_task_data%ROWTYPE;
862 
863   -- To find task's unit effectivity related information
864     CURSOR c_unit_effectivity (p_ue_id IN NUMBER) IS
865       SELECT MR_Interval_Id, Due_Date FROM AHL_UNIT_EFFECTIVITIES_VL
866       WHERE (STATUS_CODE IS NULL OR STATUS_CODE IN ('INIT-DUE', 'DEFERRED'))
867       AND UNIT_EFFECTIVITY_ID = p_ue_id;
868       c_unit_effectivity_rec c_unit_effectivity%ROWTYPE;
869 
870  -- To find task's route related information
871     CURSOR c_zone (p_route_id IN NUMBER) IS
872       /*
873       SELECT ZONE_CODE, SUB_ZONE_CODE, TIME_SPAN FROM AHL_ROUTES_V
874       WHERE ROUTE_ID = p_route_id;
875       */
876       /*
877       Modified by rnahata for Bug 6447221 / 6512871
878       Removed timespan fron cursor, since task duration will be calculated
879       based on route time span as well as resource requirements
880       */
881       -- AnRaj: Changed query for perf issue#4, Bug 4919465
882       SELECT   ZONE_CODE, SUB_ZONE_CODE
883       FROM     AHL_ROUTES_APP_V
884       WHERE    ROUTE_ID = p_route_id;
885 
886  -- To find task's route related information
887     CURSOR c_route (p_mr_route_id IN NUMBER) IS
888      SELECT A.ROUTE_ID
889       FROM AHL_MR_ROUTES A, AHL_MR_HEADERS_APP_V B
890       WHERE A.MR_HEADER_ID=B.MR_HEADER_ID
891       AND A.MR_ROUTE_ID = p_mr_route_id;
892 
893  -- To find task's unit effectivity tolerance related information
894     CURSOR c_tolerance (p_interval_id IN NUMBER) IS
895       SELECT Tolerance_Before, Tolerance_After
896       FROM Ahl_MR_Intervals_APP_V WHERE MR_Interval_Id=p_interval_id;
897       c_tolerance_rec c_tolerance%ROWTYPE;
898 
899  -- To find task's unit effectivity unit of measure related information
900  /*   CURSOR c_unitofmeasure (l_tol_before IN NUMBER, l_tol_after IN NUMBER) IS
901       SELECT UOM.Unit_of_Measure
902       FROM MTL_Units_Of_Measure_vl UOM, CS_Counters C, Ahl_MR_Intervals_APP_V MRI
903       WHERE UOM.Uom_Code = C.Uom_Code AND C.Counter_Id = MRI.Counter_Id AND
904       Tolerance_Before = l_tol_before AND Tolerance_After = l_tol_after;
905 */
906 -- AnRaj: Changed query for perf issue#5, Bug 4919465
907    CURSOR c_unitofmeasure (p_interval_id IN NUMBER) IS
908       SELECT   UOM.Unit_of_Measure
909       FROM     MTL_Units_Of_Measure UOM,
910                csi_counter_template_b C,
911                AHL_MR_INTERVALS MRI
912       WHERE    UOM.Uom_Code = C.Uom_Code
913       AND      C.Counter_Id = MRI.Counter_Id
914       AND      MR_INTERVAL_ID =  p_interval_id;
915    c_unitofmeasure_rec c_unitofmeasure%ROWTYPE;
916 
917  -- To find task number for cost_parent_id and originating task id
918    CURSOR c_number(x_id IN NUMBER) IS
919      SELECT Visit_Task_Number FROM Ahl_Visit_Tasks_B
920      WHERE Visit_Task_Id = x_id;
921 
922  -- To find project task nubmer for project's task
923    CURSOR c_proj_task (x_id IN NUMBER) IS
924      SELECT TASK_NUMBER FROM PA_TASKS WHERE TASK_ID = x_id;
925 
926  -- Added by Senthil for 11.5.10 enhancements.
927    CURSOR c_workorders (p_visit_id IN NUMBER, p_visit_task_id IN NUMBER)
928    IS
929    SELECT
930 /*  scheduled_start_date,
931     scheduled_end_date
932     FROM
933     ahl_workorders_v
934     WHERE visit_id = p_visit_id
935     AND visit_task_id = p_visit_task_id;
936 */
937 -- AnRaj: Changed query for perf issue#2, Bug 4919465
938          wdj.scheduled_start_date scheduled_start_date,
939          wdj.scheduled_completion_date  scheduled_end_date
940 FROM     wip_discrete_jobs wdj,
941          ahl_workorders wo
942 WHERE    wdj.wip_entity_id = wo.wip_entity_id
943 AND      visit_id = p_visit_id
944 AND      visit_task_id = p_visit_task_id;
945 
946    -- salogan added for supplier warranty starts
947    -- Cursor to fetch entitlement records
948    CURSOR c_warranty_record (p_task_id IN NUMBER)
949    IS
950    SELECT ASWE.WARRANTY_ENTITLEMENT_ID,
951           AWCB.CONTRACT_NUMBER,
952           LKUP1.MEANING ENTITLEMENT_STATUS,
953           ASWE.ENTITLEMENT_STATUS_CODE,
954           AWCL.CLAIM_NAME,
955           LKUP2.MEANING CLAIM_STATUS,
956           AWCL.CLAIM_STATUS_CODE,
957           AHL_WARRANTY_ENTL_PVT.IS_TASK_WARRANTY_AVAILABLE(ATSK.VISIT_TASK_ID) TASK_WARRANTY_FLAG,
958           AHL_WARRANTY_CONTRACTS_PVT.IS_INSTANCE_WARRANTY_AVAILABLE(ATSK.INSTANCE_ID) INSTANCE_WARRANTY_FLAG,
959           NVL2(TO_NUMBER(ASWE.WARRANTY_ENTITLEMENT_ID)
960           , DECODE(ASWE.ENTITLEMENT_STATUS_CODE, 'NOT_APPLICABLE', 'Y', 'N')
961           , 'Y') WARRANTY_NOT_APPL_FLAG
962     FROM AHL_VISIT_TASKS_VL ATSK,
963          AHL_WARRANTY_ENTITLEMENTS ASWE,
964          AHL_WARRANTY_CLAIMS_B AWCL,
965          AHL_WARRANTY_CONTRACTS_B AWCB,
966          FND_LOOKUP_VALUES_VL LKUP1,
967          FND_LOOKUP_VALUES_VL LKUP2
968     WHERE ATSK.VISIT_TASK_ID      = ASWE.VISIT_TASK_ID(+)
969     AND ASWE.WARRANTY_CONTRACT_ID = AWCB.WARRANTY_CONTRACT_ID(+)
970     AND ASWE.WARRANTY_CLAIM_ID    = AWCL.WARRANTY_CLAIM_ID(+)
971     AND LKUP1.LOOKUP_TYPE(+)      = 'AHL_WARRANTY_ENTLMNT_STATUS'
972     AND lkup1.lookup_code(+)      = ASWE.entitlement_status_code
973     AND LKUP2.LOOKUP_TYPE(+)      = 'AHL_WARRANTY_CLAIM_STATUS'
974     AND LKUP2.LOOKUP_CODE(+)      = AWCL.CLAIM_STATUS_CODE
975     AND NVL(ATSK.STATUS_CODE,'X') <> 'DELETED'
976     AND ATSK.VISIT_TASK_ID = p_task_id;
977     c_warranty_rec c_warranty_record%ROWTYPE;
978     -- salogan added for supplier warranty ends
979 
980 BEGIN
981   IF (l_log_procedure >= l_log_current_level) THEN
982      fnd_log.string(l_log_procedure,
983                     L_DEBUG_KEY ||'.begin',
984                     'At the start of PL SQL procedure.' ||
985                     ', p_task_id = ' || p_task_id);
986   END IF;
987 
988   -- Standard start of API savepoint
989   SAVEPOINT Get_Task_Details;
990 
991    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
992       Fnd_Msg_Pub.initialize;
993    END IF;
994 
995    --  Initialize API return status to success
996     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
997 
998    -- Standard call to check for call compatibility.
999    IF NOT Fnd_Api.compatible_api_call(
1000          l_api_version,
1001          p_api_version,
1002          l_api_name,
1003          G_PKG_NAME
1004    ) THEN
1005       RAISE Fnd_Api.g_exc_unexpected_error;
1006    END IF;
1007 
1008    ------------------------Start of API Body------------------------------------
1009    ------------------------Cursor------------------------------------
1010 
1011       -- Cursor for task related information in search task view
1012       /*
1013       OPEN c_task(p_task_id);
1014       FETCH c_task INTO c_task_rec;
1015       CLOSE c_task;
1016       */
1017 
1018       OPEN c_task_type(p_task_id);
1019       FETCH c_task_type INTO c_task_type_rec;
1020       CLOSE c_task_type;
1021 
1022       IF c_task_type_rec.task_type_code <> 'SUMMARY' THEN
1023          OPEN  c_non_summary_task_details(p_task_id);
1024          FETCH c_non_summary_task_details INTO c_task_rec;
1025          CLOSE c_non_summary_task_details;
1026       ELSIF c_task_type_rec.task_type_code = 'SUMMARY' AND c_task_type_rec.mr_id  IS NOT NULL THEN
1027          OPEN  c_mr_task_details(p_task_id);
1028          FETCH c_mr_task_details INTO c_task_rec;
1029          CLOSE c_mr_task_details;
1030       ELSIF c_task_type_rec.task_type_code = 'SUMMARY' AND c_task_type_rec.mr_id  IS NULL THEN
1031          OPEN  c_sr_task_details(p_task_id);
1032          FETCH c_sr_task_details INTO c_task_rec;
1033          CLOSE c_sr_task_details;
1034       END IF;
1035 
1036       -- Cursor for task related information not in search task view
1037       OPEN c_task_data(p_task_id);
1038       FETCH c_task_data INTO c_task_data_rec;
1039       CLOSE c_task_data;
1040 
1041       -- Cursor to find visit information
1042       OPEN c_visit (c_task_data_rec.visit_id);
1043       FETCH c_visit INTO c_visit_rec;
1044       CLOSE c_visit;
1045 
1046       -- For Debug Messages
1047       IF (l_log_statement >= l_log_current_level) THEN
1048           fnd_log.string(l_log_statement,
1049                          L_DEBUG_KEY,
1050                          ': task id = ' || p_task_id ||
1051                          ': version, task name, task number = ' || c_task_data_rec.object_version_number || '---' || c_task_rec.task_name || '---' || c_task_rec.task_number ||
1052                          ': item id, org id, itemname = ' || c_task_rec.item_id || '-' || c_task_rec.item_organization_id || '-' || c_task_rec.item_name ||
1053                          ': mr_routeid, route_name, mr_name= ' || c_task_rec.mr_route_id || '-' || c_task_rec.route_name || '-' || c_task_rec.mr_name ||
1054                          ': serial number = ' || c_task_rec.unit_name ||
1055                          ': instance = ' || c_task_rec.instance_number ||
1056                          ': quantity = ' || c_task_rec.quantity ||
1057                          ': uom = ' || c_task_rec.uom ||
1058                          ': servicenubmer, starthour, = ' || c_task_rec.service_req_name || '-' || c_task_data_rec.start_from_hour ||
1059                          ': l_duration = ' || l_duration ||
1060                          ': costid, originatingid = ' || c_task_data_rec.cost_parent_id  || '-' || c_task_data_rec.originating_task_id ||
1061                          ': task type code, value = ' || c_task_rec.task_type_code || '-' || c_task_rec.task_type_name ||
1062                          ': department_id  = ' || c_task_data_rec.department_id);
1063       END IF;
1064 
1065       -- Check the Task Type code
1066       -- For PLANNED in case then get required data for Unit Effectivity
1067       IF c_task_rec.TASK_TYPE_CODE = 'PLANNED' THEN
1068            OPEN c_unit_effectivity(c_task_data_rec.unit_effectivity_id);
1069            FETCH c_unit_effectivity INTO c_unit_effectivity_rec;
1070            CLOSE c_unit_effectivity;
1071 
1072            OPEN c_tolerance (c_unit_effectivity_rec.mr_interval_id);
1073            FETCH c_tolerance INTO c_tolerance_rec;
1074            CLOSE c_tolerance;
1075 
1076            OPEN c_unitofmeasure (c_unit_effectivity_rec.mr_interval_id);
1077            FETCH c_unitofmeasure INTO c_unitofmeasure_rec;
1078            CLOSE c_unitofmeasure;
1079 
1080            l_tol_after   := c_tolerance_rec.tolerance_after ;
1081            l_tol_before  := c_tolerance_rec.tolerance_before;
1082            l_due_by_date := TRUNC(c_unit_effectivity_rec.due_date) ;
1083            l_uom         := c_unitofmeasure_rec.unit_of_measure ;
1084       ELSE
1085            l_tol_after   := NULL ;
1086            l_tol_before  := NULL ;
1087            l_due_by_date := NULL ;
1088            l_uom         := NULL ;
1089       END IF;
1090 
1091       IF c_task_rec.TASK_TYPE_CODE = 'PLANNED' OR c_task_rec.TASK_TYPE_CODE = 'UNPLANNED' THEN
1092            OPEN c_route(c_task_rec.mr_route_id);
1093            FETCH c_route INTO l_route_id;
1094            CLOSE c_route;
1095 
1096            OPEN c_zone(l_route_id);
1097            FETCH c_zone INTO l_zone, l_sub_zone ;
1098            CLOSE c_zone;
1099            /*
1100            Added by rnahata for Bug 6447221 / 6512871
1101            Task duration will be calculated based on route time span as well as resource requirements
1102            */
1103            l_duration := AHL_VWP_TIMES_PVT.Get_task_duration(c_task_rec.quantity,l_route_id);
1104        ELSE
1105             l_zone             := NULL;
1106             l_sub_zone         := NULL;
1107             l_duration         := c_task_data_rec.duration;
1108        END IF;
1109 
1110   -- For finding visit task number for originating task id
1111   IF c_task_data_rec.originating_task_id IS NOT NULL AND c_task_data_rec.originating_task_id <> Fnd_Api.g_miss_num THEN
1112        OPEN c_number(c_task_data_rec.originating_task_id);
1113        FETCH c_number INTO l_origin_num;
1114        CLOSE c_number;
1115   ELSE
1116      l_origin_num := NULL;
1117   END IF;
1118 
1119   -- For finding visit task number for cost parent id
1120   IF c_task_data_rec.cost_parent_id IS NOT NULL AND c_task_data_rec.cost_parent_id <> Fnd_Api.g_miss_num THEN
1121        OPEN c_number(c_task_data_rec.cost_parent_id);
1122        FETCH c_number INTO l_parent_num;
1123        CLOSE c_number;
1124   ELSE
1125       l_parent_num := NULL;
1126   END IF;
1127 
1128   -- Added by Senthil for 11.5.10 Changes
1129   -- SKPATHAK :: 02-MAY-2011 :: VWPE
1130   -- Need to consider DRAFT status also
1131   IF ( upper(c_task_rec.visit_status_code) IN ('PLANNING','DRAFT') or
1132        (upper(c_task_rec.visit_status_code) = 'PARTIALLY RELEASED' and upper(c_task_rec.task_status_code) = 'PLANNING')) THEN
1133         --Fetch directly from visit task record
1134          l_task_start_date := c_task_rec.START_DATE_TIME;
1135          l_task_end_date := c_task_rec.END_DATE_TIME;
1136 
1137   ELSE
1138         --Fetch from the workorder
1139   OPEN c_workorders(c_task_rec.visit_id,p_task_id);
1140   FETCH c_workorders INTO l_task_start_date,l_task_end_date;
1141   CLOSE c_workorders;
1142 
1143   -- Added by sowsubra on July 24, 2007 for B6032334
1144   OPEN c_proj_task(c_task_data_rec.project_task_id);
1145   FETCH c_proj_task INTO l_proj_task_number;
1146   CLOSE c_proj_task;
1147   -- End Changes by sowsubra on July 24, 2007 for B6032334
1148 
1149   END IF;
1150 
1151      -- For Debug Messages
1152      IF (l_log_statement >= l_log_current_level) THEN
1153          fnd_log.string(l_log_statement,
1154                         L_DEBUG_KEY,
1155                         'l_origin_num = ' ||  l_origin_num ||
1156                         'l_parent_num = ' || l_parent_num ||
1157                         'l_task_start_date = ' || l_task_start_date ||
1158                         'l_task_end_date = '|| l_task_end_date ||
1159                         'l_proj_task_number = ' || l_proj_task_number );
1160      END IF;
1161 
1162    -- salogan added for supplier warranty starts
1163    -- Open/fetch the values into the cursor type
1164    OPEN c_warranty_record (p_task_id);
1165    FETCH c_warranty_record INTO c_warranty_rec;
1166    CLOSE c_warranty_record;
1167 
1168       IF (l_log_statement >= l_log_current_level) THEN
1169           fnd_log.string(l_log_statement,
1170                          L_DEBUG_KEY,
1171                          ': task id = ' || p_task_id ||
1172                          ': WARRANTY ENTITLEMENT ID, MEANING ENTITLEMENT STATUS , ENTITLEMENT STATUS CODE = ' || c_warranty_rec.WARRANTY_ENTITLEMENT_ID || '-' || c_warranty_rec.ENTITLEMENT_STATUS || '-' || c_warranty_rec.ENTITLEMENT_STATUS_CODE ||
1173                          ': CONTRACT NUMBER, CLAIM NAME, CLAIM STATUS , CLAIM STATUS CODE = ' || c_warranty_rec.CONTRACT_NUMBER || '-' || c_warranty_rec.CLAIM_NAME || '-' || c_warranty_rec.CLAIM_STATUS || '-' || c_warranty_rec.CLAIM_STATUS_CODE ||
1174                          ': TASK WARRANTY FLAG, INSTANCE WARRANTY FLAG, WARRANTY NOT APPLICABLE FLAG= ' || c_warranty_rec.TASK_WARRANTY_FLAG || '-' || c_warranty_rec.INSTANCE_WARRANTY_FLAG || '-' || c_warranty_rec.WARRANTY_NOT_APPL_FLAG);
1175       END IF;
1176     -- salogan added for supplier warranty ends
1177 
1178         -- For assigning all values of visit to output record type
1179         l_task_rec.visit_id               :=  c_task_rec.visit_id ;
1180         l_task_rec.template_flag          :=  c_task_rec.template_flag ;
1181         l_task_rec.visit_task_id          :=  c_task_rec.task_id ;
1182         l_task_rec.visit_task_number      :=  c_task_rec.task_number ;
1183         l_task_rec.visit_task_name        :=  c_task_rec.task_name ;
1184         l_task_rec.object_version_number  :=  c_task_data_rec.object_version_number ;
1185         l_task_rec.duration               :=  l_duration ;
1186         l_task_rec.inventory_item_id      :=  c_task_rec.item_id ;
1187         l_task_rec.item_organization_id   :=  c_task_rec.item_organization_id ;
1188         l_task_rec.item_name              :=  c_task_rec.item_name ;
1189         l_task_rec.department_id          :=  c_task_rec.department_id ;
1190         l_task_rec.dept_name              :=  c_task_rec.department_name;
1191         l_task_rec.serial_number          :=  c_task_rec.unit_name ;
1192         l_task_rec.mr_route_id            :=  c_task_rec.mr_route_id ;
1193         l_task_rec.route_number           :=  c_task_rec.route_name ;
1194         l_task_rec.mr_title               :=  c_task_rec.mr_name ;
1195         l_task_rec.mr_id                  :=  c_task_rec.mr_id;
1196         l_task_rec.zone_name              :=  l_zone;
1197         l_task_rec.sub_zone_name          :=  l_sub_zone;
1198         l_task_rec.tolerance_after        :=  l_tol_after;
1199         l_task_rec.tolerance_before       :=  l_tol_before;
1200         l_task_rec.tolerance_UOM          :=  l_uom;
1201         l_task_rec.service_request_number :=  c_task_rec.service_req_name;
1202         l_task_rec.start_from_hour        :=  c_task_data_rec.start_from_hour;
1203         l_task_rec.cost_parent_number     :=  l_parent_num ;
1204         l_task_rec.orginating_task_number :=  l_origin_num ;
1205         l_task_rec.task_type_code         :=  c_task_rec.task_type_code ;
1206         l_task_rec.task_type_value        :=  c_task_rec.task_type_name;
1207         l_task_rec.due_by_date            :=  l_due_by_date;
1208         --Post 11.5.10 Changed by cxcheng
1209         l_task_rec.task_start_date        :=  l_task_start_date ;
1210         l_task_rec.task_end_date          :=  l_task_end_date ;
1211         -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Populate the past date details into the out param
1212         l_task_rec.past_task_start_date   :=  c_task_rec.past_task_start_date;
1213         l_task_rec.past_task_end_date     :=  c_task_rec.past_task_end_date;
1214         l_task_rec.description            :=  c_task_data_rec.description ;
1215         l_task_rec.project_task_id        :=  c_task_data_rec.project_task_id ;
1216         l_task_rec.project_task_number    :=  l_proj_task_number ;
1217         l_task_rec.WO_Name                :=  c_task_rec.workorder_name ;
1218         l_task_rec.WO_Status              :=  c_task_rec.workorder_status_meaning ;
1219         l_task_rec.WO_Start_Date          :=  c_task_rec.workorder_start_date ;
1220         l_task_rec.WO_End_Date            :=  c_task_rec.workorder_end_date ;
1221         -- Post 11.5.10 Changes by Senthil.
1222         l_task_rec.STAGE_ID               :=   c_task_rec.STAGE_ID;
1223         l_task_rec.STAGE_NAME             :=   c_task_rec.STAGE_NAME;
1224         l_task_rec.TASK_TYPE_CODE         :=   c_task_rec.TASK_TYPE_CODE;
1225         l_task_rec.TASK_TYPE_VALUE        :=   c_task_rec.TASK_TYPE_NAME;
1226         l_task_rec.TASK_STATUS_CODE       :=   c_task_rec.TASK_STATUS_CODE;
1227         l_task_rec.TASK_STATUS_VALUE      :=   c_task_rec.TASK_STATUS_NAME;
1228         l_task_rec.instance_id            :=   c_task_data_rec.instance_id;
1229         -- Begin changes by rnahata for Issue 105
1230         l_task_rec.quantity               :=   c_task_rec.quantity;
1231         l_task_rec.UOM                    :=   c_task_rec.uom;
1232         l_task_rec.Instance_number        :=   c_task_rec.instance_number;
1233         -- End changes by rnahata for Issue 105
1234 
1235         -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: populate the Service Type attributes too, in the OUT parameter
1236         l_task_rec.service_type_code      :=   c_task_rec.service_type_code;
1237         l_task_rec.service_type           :=   c_task_rec.service_type;
1238 
1239         --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
1240         l_task_rec.target_qty             :=   c_task_rec.target_qty;
1241 
1242         --manisaga assigned all the attributes from c_task_rec to output record and ROUTE_ID as part of DFF Enablement 0n 18-Feb-2010--Start
1243         l_task_rec.attribute_category   :=   c_task_rec.attribute_category;
1244         l_task_rec.attribute1           :=   c_task_rec.attribute1;
1245         l_task_rec.attribute2           :=   c_task_rec.attribute2;
1246         l_task_rec.attribute3           :=   c_task_rec.attribute3;
1247         l_task_rec.attribute4           :=   c_task_rec.attribute4;
1248         l_task_rec.attribute5           :=   c_task_rec.attribute5;
1249         l_task_rec.attribute6           :=   c_task_rec.attribute6;
1250         l_task_rec.attribute7           :=   c_task_rec.attribute7;
1251         l_task_rec.attribute8           :=   c_task_rec.attribute8;
1252         l_task_rec.attribute9           :=   c_task_rec.attribute9;
1253         l_task_rec.attribute10          :=   c_task_rec.attribute10;
1254         l_task_rec.attribute11          :=   c_task_rec.attribute11;
1255         l_task_rec.attribute12          :=   c_task_rec.attribute12;
1256         l_task_rec.attribute13          :=   c_task_rec.attribute13;
1257         l_task_rec.attribute14          :=   c_task_rec.attribute14;
1258         l_task_rec.attribute15          :=   c_task_rec.attribute15;
1259         l_task_rec.route_id             :=   c_task_rec.route_id;
1260         --manisaga assigned all the attributes from c_task_rec to output record and ROUTE_ID as part of DFF Enablement 0n 18-Feb-2010--End
1261 
1262         -- salogan added for supplier warranty starts
1263         --populate the out record type with entitlemet details
1264         l_task_rec.WARRANTY_ENTITLEMENT_ID  :=   c_warranty_rec.WARRANTY_ENTITLEMENT_ID;
1265         l_task_rec.CONTRACT_NUMBER          :=   c_warranty_rec.CONTRACT_NUMBER;
1266         l_task_rec.ENTITLEMENT_STATUS       :=   c_warranty_rec.ENTITLEMENT_STATUS;
1267         l_task_rec.ENTITLEMENT_STATUS_CODE  :=   c_warranty_rec.ENTITLEMENT_STATUS_CODE;
1268         l_task_rec.CLAIM_NAME               :=   c_warranty_rec.CLAIM_NAME;
1269         l_task_rec.CLAIM_STATUS             :=   c_warranty_rec.CLAIM_STATUS;
1270         l_task_rec.CLAIM_STATUS_CODE        :=   c_warranty_rec.CLAIM_STATUS_CODE;
1271         l_task_rec.TASK_WARRANTY            :=   c_warranty_rec.TASK_WARRANTY_FLAG;
1272         l_task_rec.INSTANCE_WARRANTY        :=   c_warranty_rec.INSTANCE_WARRANTY_FLAG;
1273         l_task_rec.WARRANTY_NOT_APPL_FLAG   :=   c_warranty_rec.WARRANTY_NOT_APPL_FLAG;
1274         -- salogan added for supplier warranty ends
1275 
1276         x_task_rec := l_task_rec;
1277 
1278    ------------------------End of API Body------------------------------------
1279     -- Standard call to get message count and if count is 1, get message info
1280        /* Fnd_Msg_Pub.Count_And_Get
1281         ( p_count => x_msg_count,
1282           p_data  => x_msg_data,
1283           p_encoded => Fnd_Api.g_false); */
1284 
1285      --Standard check to count messages
1286      l_msg_count := Fnd_Msg_Pub.count_msg;
1287 
1288      IF l_msg_count > 0  THEN
1289       x_msg_count := l_msg_count;
1290       x_return_status := Fnd_Api.G_RET_STS_ERROR;
1291       RAISE Fnd_Api.G_EXC_ERROR;
1292      END IF;
1293 
1294     -- Debug info.
1295      IF (l_log_procedure >= l_log_current_level) THEN
1296          fnd_log.string(l_log_procedure,
1297                         L_DEBUG_KEY ||'.end',
1298                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
1299      END IF;
1300 EXCEPTION
1301  WHEN Fnd_Api.G_EXC_ERROR THEN
1302    x_return_status := Fnd_Api.G_RET_STS_ERROR;
1303    ROLLBACK TO Get_Task_Details;
1304    Fnd_Msg_Pub.count_and_get( p_count => x_msg_count,
1305                               p_data  => x_msg_data,
1306                               p_encoded => Fnd_Api.g_false);
1307  WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
1308    x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1309    ROLLBACK TO Get_Task_Details;
1310    Fnd_Msg_Pub.count_and_get( p_count => x_msg_count,
1311                               p_data  => x_msg_data,
1312                                p_encoded => Fnd_Api.g_false);
1313  WHEN OTHERS THEN
1314       ROLLBACK TO Get_Task_Details;
1315       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1316       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
1317     THEN
1318          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
1319       END IF;
1320       Fnd_Msg_Pub.count_and_get (
1321             p_encoded => Fnd_Api.g_false,
1322             p_count   => x_msg_count,
1323             p_data    => x_msg_data  );
1324 END Get_Task_Details;
1325 
1326 --------------------------------------------------------------------
1327 -- PROCEDURE
1328 --    Create_Task
1329 -- PURPOSE
1330 --    To create all types of tasks i.e Unassociated/Summary/Unplanned/Planned
1331 --------------------------------------------------------------------
1332 PROCEDURE Create_Task (
1333    p_api_version      IN            NUMBER,
1334    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
1335    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
1336    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
1337    p_module_type      IN            VARCHAR2  := 'JSP',
1338    p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
1339    x_return_status       OUT NOCOPY VARCHAR2,
1340    x_msg_count           OUT NOCOPY NUMBER,
1341    x_msg_data            OUT NOCOPY VARCHAR2
1342 )
1343 IS
1344   -- Define local variables
1345   L_API_VERSION CONSTANT NUMBER := 1.0;
1346   L_API_NAME    CONSTANT VARCHAR2(30) := 'CREATE TASK';
1347   L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
1348   l_msg_count            NUMBER;
1349   l_msg_data             VARCHAR2(2000);
1350   l_return_status        VARCHAR2(1);
1351   l_task_rec             AHL_VWP_RULES_PVT.Task_Rec_Type := p_x_task_rec;
1352 
1353      -- To find visit related information
1354    CURSOR c_visit(x_id IN NUMBER) IS
1355        SELECT * FROM AHL_VISITS_VL
1356        WHERE VISIT_ID = x_id;
1357    c_visit_rec c_visit%ROWTYPE;
1358 
1359   --Kasridha:Changes for Component Maintenance Planning Begins
1360    l_is_comp_visit        VARCHAR2(1);
1361    l_rpr_batch_task_id    NUMBER;
1362    l_target_qty           NUMBER := 0;
1363    l_summary_task_id      NUMBER;
1364    l_task_type            VARCHAR2(30);
1365    l_instance_id          NUMBER;
1366    l_repair_batch_name    VARCHAR2(100);
1367 
1368    -- To find the repair batch task ID for a given instance
1369    CURSOR c_get_rprbatch_task (p_instance_id IN NUMBER,
1370                                p_org_id IN NUMBER) IS
1371    SELECT visit_task_id FROM ahl_visit_tasks_b
1372    WHERE repair_batch_name = (AHL_CMP_UTIL_PKG.Get_Rpr_Batch_For_Inst(p_instance_id,
1373                                                     p_org_id));
1374    CURSOR c_task_dtls (p_task_id IN NUMBER) IS
1375    SELECT task_type_code, cost_parent_id, instance_id FROM ahl_visit_tasks_b
1376    WHERE visit_task_id = p_task_id;
1377 
1378    --Cursor to get the repair batch name for a given task
1379    CURSOR c_get_repair_batch_name(p_task_id IN NUMBER) IS
1380    SELECT repair_batch_name FROM ahl_visit_tasks_b WHERE
1381    visit_task_id = p_task_id
1382    AND repair_batch_name IS NOT NULL;
1383 
1384    --Kasridha:Changes for Component Maintenance Planning Ends
1385 
1386 BEGIN
1387    IF (l_log_procedure >= l_log_current_level) THEN
1388       fnd_log.string(l_log_procedure,
1389                      L_DEBUG_KEY ||'.begin',
1390                      'At the start of PL SQL procedure.');
1391    END IF;
1392 
1393    --------------------- initialize -----------------------
1394    SAVEPOINT Create_Task;
1395 
1396    -- Initialize message list if p_init_msg_list is set to TRUE.
1397    IF Fnd_Api.to_boolean(p_init_msg_list)
1398    THEN
1399      Fnd_Msg_Pub.initialize;
1400    END IF;
1401 
1402    --  Initialize API return status to success
1403     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1404 
1405    -- Standard call to check for call compatibility.
1406    IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
1407                                       p_api_version,
1408                                       l_api_name,G_PKG_NAME)
1409    THEN
1410        RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
1411    END IF;
1412 
1413   --------------------Start of API Body-----------------------------------
1414   -------------------Cursor values------------------------------------
1415    OPEN c_visit(l_task_rec.visit_id);
1416    FETCH c_visit INTO c_visit_rec;
1417    CLOSE c_visit;
1418 
1419    IF (l_log_statement >= l_log_current_level) THEN
1420        fnd_log.string(l_log_statement,
1421                       L_DEBUG_KEY,
1422                       'Visit Id = ' || c_visit_rec.visit_id ||
1423                       ', Status Code = ' || c_visit_rec.status_code);
1424    END IF;
1425    -- Kasridha: Changes for Component Maintenance Planning
1426    l_is_comp_visit := AHL_CMP_UTIL_PKG.Is_Comp_Visit(l_task_rec.visit_id);
1427    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: STARTS
1428    IF (l_task_rec.PAST_TASK_START_DATE IS NOT NULL
1429       AND l_task_rec.PAST_TASK_START_DATE <> Fnd_Api.G_MISS_DATE) THEN
1430        IF (l_task_rec.PAST_TASK_END_DATE IS NULL
1431           OR l_task_rec.PAST_TASK_START_DATE = Fnd_Api.G_MISS_DATE) THEN
1432           -- if start date is entered but not end date, throw error
1433         Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_MAND');
1434         Fnd_Msg_Pub.ADD;
1435         RAISE FND_API.G_EXC_ERROR;
1436        END IF;
1437        IF (l_task_rec.PAST_TASK_START_DATE >= SYSDATE) THEN
1438          -- Throw error if start date is not in past
1439          Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_PAST_ST_DATE_INV');
1440          Fnd_Msg_Pub.ADD;
1441          RAISE FND_API.G_EXC_ERROR;
1442        END IF;
1443        IF (l_task_rec.PAST_TASK_START_DATE < NVL(c_visit_rec.START_DATE_TIME, l_task_rec.PAST_TASK_START_DATE)) THEN
1444            -- Throw error if past task start date is before the visit start date
1445            Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_START_DATE_INVLD');
1446            Fnd_Msg_Pub.ADD;
1447            RAISE FND_API.G_EXC_ERROR;
1448        END IF;
1449        IF (l_task_rec.PAST_TASK_START_DATE > l_task_rec.PAST_TASK_END_DATE) THEN
1450            -- Throw error if past task start date is after the past task end date
1451            Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_INVLD');
1452            Fnd_Msg_Pub.ADD;
1453            RAISE FND_API.G_EXC_ERROR;
1454        END IF;
1455        IF (l_task_rec.PAST_TASK_END_DATE > NVL(c_visit_rec.CLOSE_DATE_TIME,l_task_rec.PAST_TASK_END_DATE)) THEN
1456           -- Throw error if visit ends before the task
1457           Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_END_DATE_INVLD');
1458           Fnd_Msg_Pub.ADD;
1459           RAISE FND_API.G_EXC_ERROR;
1460        END IF;
1461        -- SKPATHAK :: Bug #9402556 :: 24-FEB-2010 :: Added call to Validate_Past_Task_Dates
1462        -- Validate past dates against visit stages, task hierarchy and cost parent hierarchy
1463        AHL_VWP_RULES_PVT.Validate_Past_Task_Dates ( p_task_rec => l_Task_rec,
1464                                                     x_return_status => l_return_status);
1465        IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1466          IF (l_log_statement >= l_log_current_level) THEN
1467            fnd_log.string(l_log_statement,
1468                           L_DEBUG_KEY,
1469                           'Returned success from AHL_VWP_RULES_PVT.Validate_Past_Task_Dates');
1470          END IF;
1471        ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1472          RAISE FND_API.G_EXC_ERROR;
1473        ELSE
1474          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1475        END IF;
1476 
1477    ELSE -- PAST_TASK_START_DATE is null
1478        -- SKPATHAK :: Bug #9402279 :: 24-FEB-2010
1479        -- Changed the condition from l_task_rec.PAST_TASK_START_DATE <> Fnd_Api.G_MISS_DATE
1480        -- to l_task_rec.PAST_TASK_END_DATE <> Fnd_Api.G_MISS_DATE
1481        IF (l_task_rec.PAST_TASK_END_DATE IS NOT NULL
1482           AND l_task_rec.PAST_TASK_END_DATE <> Fnd_Api.G_MISS_DATE) THEN
1483         Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_MAND');
1484         Fnd_Msg_Pub.ADD;
1485         RAISE FND_API.G_EXC_ERROR;
1486        END IF;
1487        l_task_rec.PAST_TASK_START_DATE := NULL;
1488        l_task_rec.PAST_TASK_END_DATE := NULL;
1489    END IF;
1490    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: END
1491 
1492    IF c_visit_rec.status_code IN ('CLOSED','CANCELLED') THEN
1493       Fnd_Message.SET_NAME('AHL','AHL_VWP_NOT_USE_VISIT');
1494       Fnd_Msg_Pub.ADD;
1495       RAISE Fnd_Api.G_EXC_ERROR;
1496    ELSE
1497       IF l_task_rec.task_type_code = 'SUMMARY' THEN
1498          IF (l_log_statement >= l_log_current_level) THEN
1499              fnd_log.string(l_log_statement,
1500                             L_DEBUG_KEY,
1501                             'Before Calling to Create_Summary_Task, TASK TYPE = ' || l_task_rec.task_type_code);
1502          END IF;
1503          Create_Summary_Task
1504           (
1505             p_api_version      => l_api_version,
1506             p_init_msg_list    => p_init_msg_list,
1507             p_commit           => Fnd_Api.g_false,
1508             p_validation_level => p_validation_level,
1509             p_module_type      => p_module_type,
1510             p_x_task_rec       => l_task_rec,
1511             x_return_status    => l_return_status,
1512             x_msg_count        => l_msg_count,
1513             x_msg_data         => l_msg_data
1514           );
1515 
1516          IF (l_log_statement >= l_log_current_level) THEN
1517              fnd_log.string(l_log_statement,
1518                             L_DEBUG_KEY,
1519                             'After Calling Create_Summary_Task' ||
1520                             ', TASK ID =  ' || l_task_rec.visit_task_id ||
1521                             ', TASK NUMBER = ' || l_task_rec.visit_task_number ||
1522                             ', Return Status = ' || l_return_status );
1523          END IF;
1524          -- set OUT value
1525          p_x_task_rec.Visit_Task_ID := l_task_rec.Visit_Task_ID;
1526          p_x_task_rec.Visit_Task_Number := l_task_rec.Visit_Task_Number;
1527       ELSIF l_task_rec.task_type_code = 'PLANNED' THEN
1528          -- Call AHL_VWP_PLAN_TASKS_PVT
1529          IF (l_log_statement >= l_log_current_level) THEN
1530              fnd_log.string(l_log_statement,
1531                             L_DEBUG_KEY,
1532                             'Before Calling to AHL_VWP_PLAN_TASKS_PVT.Create_Planned_Task, TASK TYPE = ' || l_task_rec.task_type_code);
1533          END IF;
1534          AHL_VWP_PLAN_TASKS_PVT.Create_Planned_Task (
1535             p_api_version      => l_api_version,
1536             p_init_msg_list    => p_init_msg_list,
1537             p_commit           => Fnd_Api.g_false,
1538             p_validation_level => p_validation_level,
1539             p_module_type      => p_module_type,
1540             p_x_task_rec       => l_task_rec,
1541             x_return_status    => l_return_status,
1542             x_msg_count        => l_msg_count,
1543             x_msg_data         => l_msg_data
1544          );
1545          IF (l_log_statement >= l_log_current_level) THEN
1546              fnd_log.string(l_log_statement,
1547                             L_DEBUG_KEY,
1548                             'After Calling AHL_VWP_PLAN_TASKS_PVT.Create_Planned_Task' ||
1549                             ', TASK ID =  ' || l_task_rec.visit_task_id ||
1550                             ', TASK NUMBER = ' || l_task_rec.visit_task_number ||
1551                             ', Return Status = ' || l_return_status );
1552          END IF;
1553       ELSIF l_task_rec.task_type_code = 'UNPLANNED' THEN
1554          -- Call AHL_VWP_UNPLAN_TASKS_PVT
1555          IF (l_log_statement >= l_log_current_level) THEN
1556              fnd_log.string(l_log_statement,
1557                             L_DEBUG_KEY,
1558                             'Before Calling AHL_VWP_UNPLAN_TASKS_PVT.Create_Unplanned_Task, TASK TYPE = ' || l_task_rec.task_type_code);
1559          END IF;
1560          AHL_VWP_UNPLAN_TASKS_PVT.Create_Unplanned_Task (
1561             p_api_version      => l_api_version,
1562             p_init_msg_list    => p_init_msg_list,
1563             p_commit           => Fnd_Api.g_false,
1564             p_validation_level => p_validation_level,
1565             p_module_type      => p_module_type,
1566             p_x_task_rec       => l_task_rec,
1567             x_return_status    => l_return_status,
1568             x_msg_count        => l_msg_count,
1569             x_msg_data         => l_msg_data
1570          );
1571          IF (l_log_statement >= l_log_current_level) THEN
1572              fnd_log.string(l_log_statement,
1573                             L_DEBUG_KEY,
1574                             'After Calling AHL_VWP_UNPLAN_TASKS_PVT.Create_Unplanned_Task' ||
1575                             ', TASK ID =  ' || l_task_rec.visit_task_id ||
1576                             ', TASK NUMBER = ' || l_task_rec.visit_task_number ||
1577                             ', Return Status = ' || l_return_status );
1578          END IF;
1579       ELSE
1580          IF (l_log_statement >= l_log_current_level) THEN
1581              fnd_log.string(l_log_statement,
1582                             L_DEBUG_KEY,
1583                             'Before Calling Create_Unassociated_Task, TASK TYPE = ' || l_task_rec.task_type_code);
1584          END IF;
1585          Create_Unassociated_Task
1586          (
1587             p_api_version      => l_api_version,
1588             p_init_msg_list    => p_init_msg_list,
1589             p_commit           => Fnd_Api.g_false,
1590             p_validation_level => p_validation_level,
1591             p_module_type      => p_module_type,
1592             p_x_task_rec       => l_task_rec,
1593             x_return_status    => l_return_status,
1594             x_msg_count        => l_msg_count,
1595             x_msg_data         => l_msg_data
1596           );
1597          -- set OUT value
1598          p_x_task_rec.Visit_Task_ID := l_task_rec.Visit_Task_ID;
1599          p_x_task_rec.Visit_Task_Number := l_task_rec.Visit_Task_Number;
1600          IF (l_log_statement >= l_log_current_level) THEN
1601              fnd_log.string(l_log_statement,
1602                             L_DEBUG_KEY,
1603                             'After Calling Create_Unassociated_Task' ||
1604                             'Task Id =  ' || l_task_rec.visit_task_id ||
1605                             'Task Number = ' || l_task_rec.visit_task_number ||
1606                             'Return Status = ' || l_return_status );
1607          END IF;
1608       END IF;  -- task type code check
1609    END IF; -- Visit check
1610 
1611     --SKPATHAK :: Bug 13874699 :: 22-MAR-2012 :: Moved the below piece of code from after the plan visit call to before that call
1612     IF c_visit_rec.STATUS_CODE = 'RELEASED' THEN
1613       UPDATE AHL_VISITS_B
1614         SET  STATUS_CODE = 'PARTIALLY RELEASED',
1615              OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER +1
1616         WHERE VISIT_ID =c_visit_rec.VISIT_ID ;
1617     END IF;
1618 
1619 
1620     -- SATHAPLI::Component Maintenance Planning Project, 18-JUL_2011
1621     -- If it's a component visit, then plan it for the repair batch SUMMARY tasks (workscope parent tasks)
1622     IF (l_is_comp_visit           = 'Y'       AND
1623         l_task_rec.task_type_code = 'SUMMARY' AND
1624         l_task_rec.mr_id          IS NULL) THEN
1625         AHL_VWP_PROJ_PROD_PVT.plan_visit(
1626             p_api_version           => l_api_version,
1627             p_init_msg_list         => Fnd_Api.g_false,
1628             p_commit                => Fnd_Api.g_false,
1629             p_validation_level      => p_validation_level,
1630             p_caller                => NULL,
1631             p_visit_id              => l_task_rec.visit_id,
1632             x_return_status         => l_return_status,
1633             x_msg_count             => l_msg_count,
1634             x_msg_data              => l_msg_data);
1635 
1636           IF (l_log_statement >= l_log_current_level) THEN
1637              fnd_log.string(l_log_statement,
1638                             L_DEBUG_KEY,
1639                             'After Calling AHL_VWP_PROJ_PROD_PVT.plan_visit. Return Status = ' || l_return_status );
1640           END IF;
1641 
1642           IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
1643             x_msg_count := l_msg_count;
1644             x_return_status := l_return_status;
1645             IF l_return_status = Fnd_Api.g_ret_sts_error THEN
1646               RAISE Fnd_Api.g_exc_error;
1647             ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
1648               RAISE Fnd_Api.g_exc_unexpected_error;
1649             END IF;
1650           END IF;
1651     ELSE
1652         -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: STARTS
1653         -- If tasks are added to a visit in below mentioned statuses, draft WOs should be automatically created for the visit tasks
1654         IF ((c_visit_rec.status_code IN ('PLANNING', 'PARTIALLY RELEASED', 'RELEASED')) AND (l_task_rec.task_type_code <> 'SUMMARY') AND (l_return_status='S')) THEN
1655           AHL_VWP_PROJ_PROD_PVT.plan_visit(
1656             p_api_version           => l_api_version,
1657             p_init_msg_list         => Fnd_Api.g_false,
1658             p_commit                => Fnd_Api.g_false,
1659             p_validation_level      => p_validation_level,
1660             -- SKPATHAK :: 16-JUL-2011 :: VWPE: ER:12730539
1661             -- If this API is called during creation of an unassociated task, then need to necessarily call RELEASE_VISIT, so passing UNA as module type
1662             p_caller                => 'UNA',
1663             p_visit_id              => l_task_rec.visit_id,
1664             x_return_status         => l_return_status,
1665             x_msg_count             => l_msg_count,
1666             x_msg_data              => l_msg_data);
1667 
1668           IF (l_log_statement >= l_log_current_level) THEN
1669              fnd_log.string(l_log_statement,
1670                             L_DEBUG_KEY,
1671                             'After Calling AHL_VWP_PROJ_PROD_PVT.plan_visit. Return Status = ' || l_return_status );
1672           END IF;
1673 
1674           IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
1675             x_msg_count := l_msg_count;
1676             x_return_status := l_return_status;
1677             IF l_return_status = Fnd_Api.g_ret_sts_error THEN
1678               RAISE Fnd_Api.g_exc_error;
1679             ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
1680               RAISE Fnd_Api.g_exc_unexpected_error;
1681             END IF;
1682           END IF;
1683         END IF;
1684        -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: END
1685     END IF;
1686 
1687 -- post 115.10 changes end
1688 
1689     -- SATHAPLI::Component Maintenance Planning Project, 13-DEC-2011
1690     -- Commenting out the entire cost parent id update done by KASRIDHA below, because:
1691     -- 1) This piece of code updates the second repair batch and subsequent ones with wrong cost parent id.
1692     -- 2) This piece of code will be called only if the user creates SUMMARY or UNASSOCIATED tasks from
1693     --    VWP UIs, in which case, the tasks should be created in the Visit only, and not in any repair batch.
1694     /*
1695     -- Kasridha : Changes for Component Maintenance Planning begins
1696     -- Set the cost parent ID for the summary task
1697     -- to the task ID of the repair batch.
1698     -- This is used to maintain the hierarchy for
1699     -- deriving the tasks in a repair batch
1700 
1701     IF (l_log_statement >= l_log_current_level) THEN
1702       fnd_log.string(l_log_statement, L_DEBUG_KEY, 'Before setting the ' ||
1703                                        'repair batch task id to cost_parent_id');
1704     END IF;
1705 
1706     IF l_is_comp_visit     = 'Y' THEN
1707       IF (l_log_statement >= l_log_current_level) THEN
1708         fnd_log.string(l_log_statement, L_DEBUG_KEY, 'l_task_rec.TASK_TYPE_CODE'
1709                                                   || l_task_rec.TASK_TYPE_CODE
1710                                                   || 'l_task_rec.COST_PARENT_ID :: '
1711                                                   || l_task_rec.COST_PARENT_ID);
1712       END IF;
1713 
1714       IF (l_log_statement >= l_log_current_level) THEN
1715         fnd_log.string(l_log_statement, L_DEBUG_KEY, 'l_task_rec.instance_id'
1716                                                   || l_task_rec.instance_id
1717                                                   || 'l_task_rec.visit_task_id :: '
1718                                                   || l_task_rec.visit_task_id);
1719       END IF;
1720 
1721       OPEN c_task_dtls (l_task_rec.visit_task_id);
1722       FETCH c_task_dtls INTO l_task_type, l_summary_task_id, l_instance_id;
1723       CLOSE c_task_dtls;
1724 
1725       IF(l_summary_task_id IS NULL) THEN
1726         l_summary_task_id  := l_task_rec.visit_task_id;
1727       END IF;
1728 
1729       OPEN c_get_rprbatch_task (l_instance_id, c_visit_rec.organization_id);
1730       FETCH c_get_rprbatch_task INTO l_rpr_batch_task_id;
1731       CLOSE c_get_rprbatch_task;
1732 
1733       IF (l_log_statement >= l_log_current_level) THEN
1734         fnd_log.string(l_log_statement, L_DEBUG_KEY, 'RepairBatch Task ID: '
1735                                                   || l_rpr_batch_task_id);
1736       END IF;
1737 
1738       IF( l_summary_task_id IS NOT NULL AND l_rpr_batch_task_id IS NOT NULL
1739             AND l_rpr_batch_task_id <> l_task_rec.VISIT_TASK_ID) THEN
1740         UPDATE AHL_VISIT_TASKS_B
1741         SET cost_parent_id   = l_rpr_batch_task_id
1742         WHERE visit_task_id  = l_summary_task_id;
1743 
1744         IF (l_log_statement >= l_log_current_level) THEN
1745           fnd_log.string(l_log_statement, L_DEBUG_KEY, 'Cost_parent_id set to : '
1746                                                    || l_rpr_batch_task_id
1747                                                    || ' for : ' || l_summary_task_id);
1748         END IF;
1749 
1750       END IF;
1751 
1752     END IF;
1753 
1754     IF (l_log_statement >= l_log_current_level) THEN
1755       fnd_log.string(l_log_statement, L_DEBUG_KEY, 'After setting the repair batch'
1756                                                  || ' task id to cost_parent_id');
1757     END IF;
1758     -- Kasridha : Changes for Component Maintenance Planning Ends
1759     */
1760 
1761     --------------------End of API Body-------------------------------------
1762    --Standard check to count messages
1763    l_msg_count := Fnd_Msg_Pub.count_msg;
1764 
1765    -- AJPRASAN :: VWPE :: Bug# 12424063 - Added the check for NOT overwriting x_return_status,
1766    -- if l_return_status is 'V'
1767    IF (l_return_status = 'V') THEN
1768       x_msg_count := l_msg_count;
1769       x_return_status := l_return_status;
1770    -- Raise Expected Error if l_return_status is 'E'
1771    ELSIF l_return_status = Fnd_Api.G_RET_STS_ERROR THEN
1772       x_msg_count := l_msg_count;
1773       x_return_status := Fnd_Api.G_RET_STS_ERROR;
1774       RAISE Fnd_Api.G_EXC_ERROR;
1775    -- Raise Unexpected Error on all other cases
1776    ELSIF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
1777       x_msg_count := l_msg_count;
1778       x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
1779       RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
1780    END IF;
1781 
1782    --Standard check for commit
1783    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
1784       COMMIT;
1785    END IF;
1786 
1787    IF (l_log_procedure >= l_log_current_level) THEN
1788          fnd_log.string(l_log_procedure,
1789                         L_DEBUG_KEY ||'.end',
1790                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
1791    END IF;
1792 
1793 EXCEPTION
1794    WHEN Fnd_Api.g_exc_error THEN
1795       ROLLBACK TO Create_Task;
1796       x_return_status := Fnd_Api.g_ret_sts_error;
1797       Fnd_Msg_Pub.count_and_get(
1798             p_encoded => Fnd_Api.g_false,
1799             p_count   => x_msg_count,
1800             p_data    => x_msg_data
1801       );
1802    WHEN Fnd_Api.g_exc_unexpected_error THEN
1803       ROLLBACK TO Create_Task;
1804       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1805       Fnd_Msg_Pub.count_and_get (
1806             p_encoded => Fnd_Api.g_false,
1807             p_count   => x_msg_count,
1808             p_data    => x_msg_data
1809       );
1810    WHEN OTHERS THEN
1811       ROLLBACK TO Create_Task;
1812       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
1813       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
1814     THEN
1815          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
1816       END IF;
1817       Fnd_Msg_Pub.count_and_get (
1818             p_encoded => Fnd_Api.g_false,
1819             p_count   => x_msg_count,
1820             p_data    => x_msg_data
1821       );
1822 END Create_Task;
1823 
1824 --------------------------------------------------------------------
1825 -- PROCEDURE
1826 --    Create_Unassociated_Task
1827 -- PURPOSE
1828 --    To create Unassociated Task for the maintainance visit
1829 --------------------------------------------------------------------
1830 PROCEDURE Create_Unassociated_Task (
1831    p_api_version      IN            NUMBER,
1832    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
1833    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
1834    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
1835    p_module_type      IN            VARCHAR2  := 'JSP',
1836    p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
1837    x_return_status       OUT NOCOPY VARCHAR2,
1838    x_msg_count           OUT NOCOPY NUMBER,
1839    x_msg_data            OUT NOCOPY VARCHAR2
1840 )
1841 IS
1842    L_API_VERSION CONSTANT NUMBER := 1.0;
1843    L_API_NAME    CONSTANT VARCHAR2(30) := 'CREATE UNASSOCIATED TASK';
1844    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
1845 
1846    -- Local variables defined for the procedure
1847    l_task_rec            AHL_VWP_RULES_PVT.Task_Rec_Type := p_x_task_rec;
1848    l_msg_data            VARCHAR2(2000);
1849    l_item_name           VARCHAR2(40);
1850    l_rowid               VARCHAR2(30);
1851    l_return_status       VARCHAR2(1);
1852    l_msg_count           NUMBER;
1853    l_item_id             NUMBER;
1854    l_serial_id           NUMBER;
1855    l_task_number         NUMBER;
1856    l_org_id              NUMBER;
1857    l_visit_task_id       NUMBER;
1858    l_service_id          NUMBER;
1859    l_cost_parent_id      NUMBER;
1860    l_originating_task_id NUMBER;
1861    l_department_id       NUMBER;
1862    l_entl_rec_tbl        AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type; --salogan added for supplier warranty
1863 
1864   -- To find visit related information
1865    CURSOR c_visit(x_id IN NUMBER) IS
1866     SELECT * FROM AHL_VISITS_VL
1867     WHERE VISIT_ID = x_id;
1868    c_visit_rec c_visit%ROWTYPE;
1869 
1870   -- To find Item ID and Item OrgID for Instance Id
1871   -- while creating unassociated task for a non-routine job
1872     CURSOR c_Serial (p_serial_id IN NUMBER) IS
1873      SELECT Inventory_Item_Id, Inv_Master_Organization_Id
1874      FROM CSI_ITEM_INSTANCES
1875      WHERE Instance_Id  = p_serial_id;
1876 
1877    -- Begin changes by rnahata for Issue 105
1878    --Cursor to fetch instance id when instance number is passed
1879    -- jaramana on Feb 14, 2008
1880    -- Changed data type to VARCHAR2
1881    CURSOR c_get_instance_id(p_instance_number IN VARCHAR2) IS
1882     SELECT instance_id FROM csi_item_instances csii
1883     WHERE instance_number = p_instance_number;
1884 
1885    --Cursor to fetch instance quantity
1886    CURSOR c_get_instance_qty(p_instance_id IN NUMBER) IS
1887     SELECT quantity FROM csi_item_instances csii
1888     WHERE instance_id = p_instance_id;
1889 
1890     l_instance_qty             NUMBER := 0;
1891    -- End changes by rnahata for Issue 105
1892 
1893 BEGIN
1894   --------------------Start of API Body-----------------------------------
1895    IF (l_log_procedure >= l_log_current_level) THEN
1896       fnd_log.string(l_log_procedure,
1897                      L_DEBUG_KEY ||'.begin',
1898                      'At the start of PL SQL procedure.' ||
1899                      'Module Type = ' || p_module_type );
1900    END IF;
1901 
1902    SAVEPOINT Create_Unassociated_Task;
1903 
1904    -- Initialize message list if p_init_msg_list is set to TRUE.
1905    IF Fnd_Api.to_boolean(p_init_msg_list)
1906    THEN
1907      Fnd_Msg_Pub.initialize;
1908    END IF;
1909 
1910    --  Initialize API return status to success
1911     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1912 
1913    -- Standard call to check for call compatibility.
1914    IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
1915                                       p_api_version,
1916                                       l_api_name,G_PKG_NAME)
1917    THEN
1918        RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
1919    END IF;
1920 
1921   -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: validate Service Type attributes
1922   AHL_VWP_RULES_PVT.Validate_Service_Type(
1923     p_service_type        => l_task_rec.service_type,
1924     p_module_type         => p_module_type,
1925     p_unit_effectivity_id => l_task_rec.unit_effectivity_id,
1926     p_x_service_type_code => l_task_rec.service_type_code
1927   );
1928 
1929   --------------------Value OR ID conversion---------------------------
1930    --Start API Body
1931    IF p_module_type = 'JSP' THEN
1932       --l_Task_rec.instance_id       := NULL;
1933       l_Task_rec.cost_parent_id      := NULL;
1934       l_Task_rec.originating_task_id := NULL;
1935       l_Task_rec.department_id       := NULL;
1936    END IF;
1937 
1938   -------------------Cursor values------------------------------------
1939    OPEN c_visit(l_task_rec.visit_id);
1940    FETCH c_visit INTO c_visit_rec;
1941    CLOSE c_visit;
1942 
1943    IF (l_log_statement >= l_log_current_level) THEN
1944        fnd_log.string(l_log_statement,
1945                       L_DEBUG_KEY,
1946                       'Visit Id = ' || l_task_rec.visit_id || ', Status Code = ' || c_visit_rec.status_code );
1947    END IF;
1948 
1949    IF c_visit_rec.status_code IN ('CLOSED','CANCELLED') THEN
1950        Fnd_Message.SET_NAME('AHL','AHL_VWP_NOT_USE_VISIT');
1951        Fnd_Msg_Pub.ADD;
1952        RAISE Fnd_Api.G_EXC_ERROR;
1953    /*
1954    Commented to fix bug # 4029318
1955    ELSIF c_visit_rec.status_code = 'RELEASED' OR c_visit_rec.status_code = 'PARTIALLY RELEASED' THEN
1956    Added the below condition for the call from Production for SR creation
1957    */
1958    ELSIF p_module_type = 'SR' THEN
1959 
1960       IF (l_log_statement >= l_log_current_level) THEN
1961           fnd_log.string(l_log_statement,
1962                          L_DEBUG_KEY,
1963                          'Inside status code check = ' || c_visit_rec.status_code ||
1964                          ', Instance ID = ' || l_Task_rec.instance_id );
1965       END IF;
1966 
1967       OPEN c_serial(l_Task_rec.instance_id);
1968       FETCH c_serial INTO l_item_id, l_org_id;
1969       CLOSE c_serial;
1970 
1971       --Assign the returned value
1972       l_Task_rec.inventory_item_id := l_item_id;
1973       l_Task_rec.item_organization_id := l_org_id;
1974    ELSE
1975       -- Visit in planning status --
1976       IF (l_log_statement >= l_log_current_level) THEN
1977           fnd_log.string(l_log_statement,
1978                          L_DEBUG_KEY,
1979                          'Before Convert Item Item ID= ' || l_Task_rec.inventory_item_id ||
1980                          ', Item Org ID= ' || l_Task_rec.item_organization_id ||
1981                          ', Item Name= ' || l_Task_rec.item_name );
1982       END IF;
1983       -- Post 11.5.10 Changes by Senthil.
1984       AHL_VWP_VISITS_STAGES_PVT.Check_Stage_Name_Or_Id(
1985        P_VISIT_ID         =>  l_Task_rec.visit_id,
1986        P_STAGE_NAME       =>  L_task_rec.STAGE_NAME,
1987        X_STAGE_ID         =>  L_task_rec.STAGE_ID,
1988        X_RETURN_STATUS    =>  l_return_status,
1989        x_error_msg_code   =>  l_msg_data  );
1990 
1991      IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success THEN
1992               Fnd_Message.SET_NAME('AHL','AHL_VWP_STAGE_NOT_EXISTS');
1993               Fnd_Msg_Pub.ADD;
1994          RAISE Fnd_Api.G_EXC_ERROR;
1995      END IF;
1996      --
1997      -- For ITEM
1998      -- Convert item name to item id
1999       IF (l_Task_rec.inventory_item_id IS NOT NULL AND
2000           l_Task_rec.inventory_item_id <> Fnd_Api.G_MISS_NUM) AND
2001          (l_Task_rec.item_organization_id IS NOT NULL AND
2002           l_Task_rec.item_organization_id <> Fnd_Api.G_MISS_NUM) THEN
2003 
2004          AHL_VWP_RULES_PVT.Check_Item_Name_Or_Id
2005             (p_item_id       => l_Task_rec.inventory_item_id,
2006              p_org_id        => l_Task_rec.item_organization_id,
2007              p_item_name     => l_Task_rec.item_name,
2008              x_item_id       => l_item_id,
2009              x_org_id        => l_org_id,
2010              x_item_name     => l_item_name,
2011              x_return_status    => l_return_status,
2012              x_error_msg_code   => l_msg_data);
2013 
2014          IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success THEN
2015             Fnd_Message.SET_NAME('AHL','AHL_VWP_ITEM_NOT_EXISTS');
2016             Fnd_Msg_Pub.ADD;
2017             RAISE Fnd_Api.G_EXC_ERROR;
2018          END IF;
2019 
2020          IF UPPER(l_Task_rec.item_name) <> UPPER(l_item_name) THEN
2021             IF (l_log_statement >= l_log_current_level) THEN
2022                 fnd_log.string(l_log_statement,
2023                                L_DEBUG_KEY,
2024                                ': Compare item name');
2025             END IF;
2026 
2027             Fnd_Message.SET_NAME('AHL','AHL_VWP_ITEM_USE_LOV');
2028             Fnd_Msg_Pub.ADD;
2029             RAISE Fnd_Api.G_EXC_ERROR;
2030          END IF;
2031       ELSE
2032          IF (l_log_statement >= l_log_current_level) THEN
2033              fnd_log.string(l_log_statement,
2034                             L_DEBUG_KEY,
2035                             ': Check item else loop');
2036          END IF;
2037          Fnd_Message.SET_NAME('AHL','AHL_VWP_ITEM_USE_LOV');
2038          Fnd_Msg_Pub.ADD;
2039          RAISE Fnd_Api.G_EXC_ERROR;
2040       END IF;
2041 
2042       --Assign the returned value
2043       l_Task_rec.inventory_item_id := l_item_id;
2044       l_Task_rec.item_organization_id := l_org_id;
2045 
2046       IF (l_log_statement >= l_log_current_level) THEN
2047           fnd_log.string(l_log_statement,
2048                          L_DEBUG_KEY,
2049                          ': Item ID= ' || l_Task_rec.inventory_item_id ||
2050                          ': Item Org ID= ' || l_Task_rec.item_organization_id ||
2051                          ': Item Name= ' || l_Task_rec.item_name ||
2052                          ': Serial Number= ' || l_Task_rec.serial_number );
2053       END IF;
2054 
2055    END IF; -- End of status_code check
2056 
2057    ----------- Start defining and validate all LOVs on Create Visit's Task UI Screen---
2058    --
2059    -- For DEPARTMENT
2060    -- Convert department name to department id
2061    IF (l_task_rec.dept_name IS NOT NULL AND l_task_rec.dept_name <> Fnd_Api.G_MISS_CHAR ) THEN
2062 
2063         IF (l_log_statement >= l_log_current_level) THEN
2064             fnd_log.string(l_log_statement,
2065                            L_DEBUG_KEY,
2066                            'Calling AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id');
2067         END IF;
2068 
2069         AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id
2070               (p_organization_id => c_visit_rec.organization_id,
2071                p_dept_name       => l_task_rec.dept_name,
2072                p_department_id   => NULL,
2073                x_department_id   => l_department_id,
2074                x_return_status   => l_return_status,
2075                x_error_msg_code  => l_msg_data);
2076 
2077         IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
2078         THEN
2079             Fnd_Message.SET_NAME('AHL','AHL_VWP_DEPT_NOT_EXISTS');
2080             Fnd_Msg_Pub.ADD;
2081             RAISE Fnd_Api.G_EXC_ERROR;
2082         END IF;
2083 
2084         -- Changes for Post 11.5.10 by amagrawa
2085         Ahl_vwp_rules_pvt.CHECK_DEPARTMENT_SHIFT
2086           ( P_DEPT_ID       => l_department_id,
2087             X_RETURN_STATUS => l_return_status);
2088 
2089         IF (NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS)  THEN
2090             Fnd_Message.SET_NAME('AHL','AHL_VWP_NO_DEPT_SHIFT');
2091           Fnd_Msg_Pub.ADD;
2092               RAISE Fnd_Api.G_EXC_ERROR;
2093         END IF;
2094         --Assign the returned value
2095         l_task_rec.department_id := l_department_id;
2096      END IF;
2097 
2098      IF (l_log_statement >= l_log_current_level) THEN
2099          fnd_log.string(l_log_statement,
2100                         L_DEBUG_KEY,
2101                           ': Dept ID= ' || l_Task_rec.department_id );
2102      END IF;
2103 
2104      -- For SERIAL NUMBER
2105      -- Convert serial number to instance/ serial id
2106      IF (l_Task_rec.serial_number IS NOT NULL AND
2107         l_Task_rec.serial_number <> Fnd_Api.G_MISS_CHAR) THEN
2108         IF (l_log_statement >= l_log_current_level) THEN
2109             fnd_log.string(l_log_statement,
2110                            L_DEBUG_KEY,
2111                            ': AHL_VWP_RULES_PVT.Check_Serial_Name_Or_Id ' );
2112         END IF;
2113         AHL_VWP_RULES_PVT.Check_Serial_Name_Or_Id
2114              (p_item_id        => l_Task_rec.inventory_item_id,
2115               p_org_id         => l_Task_rec.item_organization_id,
2116               p_serial_id      => l_Task_rec.instance_id,
2117               p_serial_number  => l_Task_rec.serial_number,
2118               x_serial_id      => l_serial_id,
2119               x_return_status  => l_return_status,
2120               x_error_msg_code => l_msg_data);
2121 
2122         IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success THEN
2123            Fnd_Message.SET_NAME('AHL','AHL_VWP_SERIAL_NOT_EXISTS');
2124            Fnd_Msg_Pub.ADD;
2125            RAISE Fnd_Api.G_EXC_ERROR;
2126         ELSE
2127            --Assign the returned value
2128            l_Task_rec.instance_id := l_serial_id;
2129 
2130            IF (l_log_statement >= l_log_current_level) THEN
2131                fnd_log.string(l_log_statement,
2132                               L_DEBUG_KEY,
2133                               ': Before UC Check Serial ID= ' || l_Task_rec.instance_id ||
2134                               ': Before UC Item ID= ' || l_Task_rec.inventory_item_id ||
2135                               ': Before UC Item Org ID= ' || l_Task_rec.item_organization_id );
2136            END IF;
2137            /* sowsubra - start
2138            --BEGIN: jeli added for bug 3777720
2139            IF (AHL_VWP_RULES_PVT.instance_in_config_tree(l_task_rec.visit_id, l_task_rec.instance_id)
2140             = FND_API.G_RET_STS_ERROR) THEN
2141            --END: jeli added for bug 3777720
2142                Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_SERIAL');
2143                Fnd_Msg_Pub.ADD;
2144                RAISE Fnd_Api.G_EXC_ERROR;
2145            END IF;
2146            sowsubra - end */
2147         END IF;
2148      END IF;
2149 
2150      IF (l_log_statement >= l_log_current_level) THEN
2151          fnd_log.string(l_log_statement,
2152                         L_DEBUG_KEY,
2153                         ': Serial ID= ' || l_Task_rec.instance_id ||
2154                         ': Service Number= ' || l_Task_rec.service_request_number );
2155          -- Additional debug statement added by jaramana on Feb 14, 2008
2156          fnd_log.string(l_log_statement, L_DEBUG_KEY,
2157                         'l_task_rec.instance_number = ' || l_Task_rec.instance_number ||
2158                         ', l_task_rec.quantity = ' || l_Task_rec.quantity);
2159      END IF;
2160 
2161      -- Begin changes by rnahata for Issue 105
2162      IF (l_Task_rec.instance_id IS NULL) THEN
2163         OPEN c_get_instance_id (l_Task_rec.instance_number);
2164         FETCH c_get_instance_id INTO l_Task_rec.instance_id;
2165         CLOSE c_get_instance_id;
2166      END IF;
2167 
2168      OPEN c_get_instance_qty(l_Task_rec.instance_id);
2169      FETCH c_get_instance_qty INTO l_instance_qty;
2170      CLOSE c_get_instance_qty;
2171 
2172      IF (l_Task_rec.QUANTITY is null) THEN
2173        Fnd_Message.SET_NAME('AHL','AHL_TASK_QTY_NULL');
2174        Fnd_Msg_Pub.ADD;
2175        RAISE Fnd_Api.G_EXC_ERROR;
2176      END IF;
2177 
2178      IF (l_Task_rec.QUANTITY <= 0) THEN
2179        Fnd_Message.SET_NAME('AHL','AHL_POSITIVE_TSK_QTY');
2180        Fnd_Msg_Pub.ADD;
2181        RAISE Fnd_Api.G_EXC_ERROR;
2182      END IF;
2183 
2184      IF (l_Task_rec.QUANTITY > l_instance_qty ) THEN
2185        Fnd_Message.SET_NAME('AHL','AHL_INCORRECT_TSK_QTY');
2186        Fnd_Msg_Pub.ADD;
2187        RAISE Fnd_Api.G_EXC_ERROR;
2188      END IF;
2189      -- End changes by rnahata for Issue 105
2190 
2191      -- For COST PARENT TASK
2192      -- Convert cost parent number to id
2193      IF (l_Task_rec.cost_parent_number IS NOT NULL AND
2194         l_Task_rec.cost_parent_number <> Fnd_Api.G_MISS_NUM ) THEN
2195         IF (l_log_statement >= l_log_current_level) THEN
2196             fnd_log.string(l_log_statement,
2197                            L_DEBUG_KEY,
2198                            'Calling AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID ' );
2199         END IF;
2200         AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
2201              (p_visit_task_id     => l_Task_rec.cost_parent_id,
2202               p_visit_task_number => l_Task_rec.cost_parent_number,
2203               p_visit_id          => l_Task_rec.visit_id,
2204               x_visit_task_id     => l_cost_parent_id,
2205               x_return_status     => l_return_status,
2206               x_error_msg_code    => l_msg_data);
2207 
2208         IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
2209         THEN
2210             Fnd_Message.SET_NAME('AHL','AHL_VWP_PARENT_NOT_EXISTS');
2211             Fnd_Msg_Pub.ADD;
2212             RAISE Fnd_Api.g_exc_error;
2213         END IF;
2214 
2215         --Assign the returned value
2216         l_Task_rec.cost_parent_id := l_cost_parent_id;
2217      END IF;
2218 
2219      IF (l_log_statement >= l_log_current_level) THEN
2220          fnd_log.string(l_log_statement,
2221                         L_DEBUG_KEY,
2222                         ': Cost parent ID = ' || l_Task_rec.cost_parent_id);
2223      END IF;
2224 
2225      -- To Check for cost parent task id not forming loop
2226      IF (l_Task_rec.cost_parent_id IS NOT NULL AND
2227         l_Task_rec.cost_parent_id <> Fnd_Api.G_MISS_NUM ) THEN
2228 
2229         IF (l_log_statement >= l_log_current_level) THEN
2230             fnd_log.string(l_log_statement,
2231                            L_DEBUG_KEY,
2232                            'Calling AHL_VWP_RULES_PVT.Check_Cost_Parent_Loop ' );
2233         END IF;
2234         AHL_VWP_RULES_PVT.Check_Cost_Parent_Loop
2235             (p_visit_id        => l_Task_rec.visit_id,
2236              p_visit_task_id   => l_Task_rec.visit_task_id ,
2237              p_cost_parent_id  => l_Task_rec.cost_parent_id
2238             );
2239      END IF;
2240 
2241      IF (l_log_statement >= l_log_current_level) THEN
2242          fnd_log.string(l_log_statement,
2243                         L_DEBUG_KEY,
2244                         ': Originating Number = ' || l_Task_rec.orginating_task_number);
2245      END IF;
2246 
2247      -- For ORIGINATING TASK
2248      -- Convert originating task number to id
2249      IF (l_Task_rec.orginating_task_number IS NOT NULL AND
2250         l_Task_rec.orginating_task_number <> Fnd_Api.G_MISS_NUM ) THEN
2251         IF (l_log_statement >= l_log_current_level) THEN
2252             fnd_log.string(l_log_statement,
2253                            L_DEBUG_KEY,
2254                            'Calling AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID ' );
2255         END IF;
2256         AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
2257              (p_visit_task_id     => l_Task_rec.originating_task_id,
2258               p_visit_task_number => l_Task_rec.orginating_task_number,
2259               p_visit_id          => l_Task_rec.visit_id,
2260               x_visit_task_id     => l_originating_task_id,
2261               x_return_status     => l_return_status,
2262               x_error_msg_code    => l_msg_data);
2263 
2264         IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
2265         THEN
2266             Fnd_Message.SET_NAME('AHL','AHL_VWP_ORIGINATING_NOT_EXISTS');
2267             Fnd_Msg_Pub.ADD;
2268             RAISE Fnd_Api.g_exc_error;
2269         END IF;
2270         --Assign the returned value
2271         l_Task_rec.originating_task_id := l_originating_task_id;
2272      END IF;
2273 
2274      IF (l_log_statement >= l_log_current_level) THEN
2275          fnd_log.string(l_log_statement,
2276                         L_DEBUG_KEY,
2277                         ': Originating Task ID= ' || l_Task_rec.originating_task_id);
2278      END IF;
2279 
2280      -- To Check for originating task id not forming loop
2281      IF (l_Task_rec.originating_task_id IS NOT NULL AND
2282          l_Task_rec.originating_task_id <> Fnd_Api.G_MISS_NUM ) THEN
2283 
2284         AHL_VWP_RULES_PVT.Check_Origin_Task_Loop
2285             (p_visit_id            => l_Task_rec.visit_id ,
2286              p_visit_task_id       => l_Task_rec.visit_task_id ,
2287              p_originating_task_id => l_Task_rec.originating_task_id
2288             );
2289 
2290      END IF;
2291     ----------- End defining and validate all LOVs on Create Visit's Task UI Screen---
2292 
2293     ----------------------------------------------  Validate ----------------------------------------------
2294     -- IF c_visit_rec.status_code = 'PLANNING' THEN
2295     --Added the below condition for the call from Production for SR creation
2296     IF p_module_type <> 'SR' THEN
2297        IF (l_log_statement >= l_log_current_level) THEN
2298            fnd_log.string(l_log_statement,
2299                           L_DEBUG_KEY,
2300                           ': :ValidateCalling Validate_Visit_Task ');
2301        END IF;
2302        Validate_Visit_Task (
2303           p_api_version      => l_api_version,
2304           p_init_msg_list    => p_init_msg_list,
2305           p_commit           => Fnd_Api.g_false,
2306           p_validation_level => p_validation_level,
2307           p_task_rec         => l_task_rec,
2308           x_return_status    => l_return_status,
2309           x_msg_count        => x_msg_count,
2310           x_msg_data         => x_msg_data
2311        );
2312 
2313        IF l_return_status = Fnd_Api.g_ret_sts_error THEN
2314           RAISE Fnd_Api.g_exc_error;
2315        ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
2316           RAISE Fnd_Api.g_exc_unexpected_error;
2317        END IF;
2318     END IF;
2319 /*   ELSE   Commented to fix bug # 4029318 Senthil
2320      -- TASK NAME ==== NAME
2321      IF (l_task_rec.visit_task_name IS NULL OR l_task_rec.visit_task_name = Fnd_Api.G_MISS_CHAR) THEN
2322         Fnd_Message.set_name ('AHL', 'AHL_VWP_NAME_MISSING');
2323         Fnd_Msg_Pub.ADD;
2324         RAISE Fnd_Api.g_exc_error;
2325      END IF;
2326      END IF;
2327 */
2328      -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: STARTS
2329      -- If task id or task number is null, generate the same
2330      IF ((l_task_rec.visit_task_ID = Fnd_Api.g_miss_num ) OR (l_task_rec.visit_task_ID IS NULL)) THEN
2331        l_Visit_Task_ID := AHL_VWP_RULES_PVT.Get_Visit_Task_Id();
2332        l_task_rec.visit_task_ID := l_Visit_Task_ID;
2333      END IF;
2334 
2335      -- Check for the Visit Number.
2336      IF ((l_task_rec.visit_task_number = Fnd_Api.g_miss_num ) OR (l_task_rec.visit_task_number IS NULL)) THEN
2337        l_task_number := AHL_VWP_RULES_PVT.Get_Visit_Task_Number(l_task_rec.visit_id);
2338        l_task_rec.visit_task_number := l_task_number;
2339      END IF;
2340      -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: ENDS
2341 
2342      IF (l_log_statement >= l_log_current_level) THEN
2343          fnd_log.string(l_log_statement,
2344                         L_DEBUG_KEY,
2345                         ': Task ID= ' || l_Task_rec.visit_task_id ||
2346                         ': Task number= ' || l_Task_rec.visit_task_number);
2347      END IF;
2348 
2349      ----------------------- check miss_num/miss_char/miss_date-----------------------
2350      -- For all optional fields check if its g_miss_num/g_miss_char/g_miss_date
2351      -- then Null else the value call Default_Missing_Attribs procedure
2352      Default_Missing_Attribs
2353      (
2354      p_x_task_rec             => l_Task_rec
2355      );
2356 
2357    -------------------------- Insert --------------------------
2358    IF (l_log_statement >= l_log_current_level) THEN
2359        fnd_log.string(l_log_statement,
2360                       L_DEBUG_KEY,
2361                       'Before Calling Ahl_Visit_Tasks_Pkg.Insert_Row');
2362    END IF;
2363 
2364    -- Invoke the table handler to create a record
2365    Ahl_Visit_Tasks_Pkg.Insert_Row (
2366       X_ROWID                 => l_rowid,
2367       X_VISIT_TASK_ID         => l_task_rec.visit_task_id,
2368       X_VISIT_TASK_NUMBER     => l_task_rec.visit_task_number,
2369       X_OBJECT_VERSION_NUMBER => 1,
2370       X_VISIT_ID              => l_task_rec.visit_id,
2371       X_PROJECT_TASK_ID       => NULL, --l_task_rec.project_task_id,
2372       X_COST_PARENT_ID        => l_task_rec.cost_parent_id,
2373       X_MR_ROUTE_ID           => NULL,
2374       X_MR_ID                 => NULL,
2375       X_DURATION              => l_task_rec.duration,
2376       X_UNIT_EFFECTIVITY_ID   => l_task_rec.unit_effectivity_id,
2377       X_START_FROM_HOUR       => l_task_rec.start_from_hour,
2378       X_INVENTORY_ITEM_ID     => l_task_rec.inventory_item_id,
2379       X_ITEM_ORGANIZATION_ID  => l_task_rec.item_organization_id,
2380       X_INSTANCE_ID           => l_task_rec.instance_id,
2381       X_PRIMARY_VISIT_TASK_ID => NULL, --l_task_rec.primary_visit_task_id,
2382       X_ORIGINATING_TASK_ID   => l_task_rec.originating_task_id,
2383       X_SERVICE_REQUEST_ID    => l_task_rec.service_request_id,
2384       X_TASK_TYPE_CODE        => l_task_rec.task_type_code,
2385       -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: Service Type code added
2386       X_SERVICE_TYPE_CODE     => l_task_rec.service_type_code,
2387       X_DEPARTMENT_ID         => l_task_rec.department_id,
2388       X_SUMMARY_TASK_FLAG     => 'N',
2389       X_PRICE_LIST_ID         => NULL,
2390       X_STATUS_CODE           => 'PLANNING',
2391       X_ESTIMATED_PRICE       => NULL,
2392       X_ACTUAL_PRICE          => NULL,
2393       X_ACTUAL_COST           => NULL,
2394       --  Post 11.5.10 Changes by Senthil.
2395       X_STAGE_ID              => l_task_rec.STAGE_ID,
2396       -- Added cxcheng POST11510--------------
2397       -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010
2398       -- Pass past dates for the below 4 coloumns, and if it is null, pass null for all the 4 columns
2399       X_START_DATE_TIME       => l_task_rec.PAST_TASK_START_DATE,
2400       X_END_DATE_TIME         => l_task_rec.PAST_TASK_END_DATE,
2401       X_PAST_TASK_START_DATE  => l_task_rec.PAST_TASK_START_DATE,
2402       X_PAST_TASK_END_DATE    => l_task_rec.PAST_TASK_END_DATE,
2403       X_ATTRIBUTE_CATEGORY    => l_task_rec.ATTRIBUTE_CATEGORY,
2404       X_ATTRIBUTE1            => l_task_rec.ATTRIBUTE1,
2405       X_ATTRIBUTE2            => l_task_rec.ATTRIBUTE2,
2406       X_ATTRIBUTE3            => l_task_rec.ATTRIBUTE3,
2407       X_ATTRIBUTE4            => l_task_rec.ATTRIBUTE4,
2408       X_ATTRIBUTE5            => l_task_rec.ATTRIBUTE5,
2409       X_ATTRIBUTE6            => l_task_rec.ATTRIBUTE6,
2410       X_ATTRIBUTE7            => l_task_rec.ATTRIBUTE7,
2411       X_ATTRIBUTE8            => l_task_rec.ATTRIBUTE8,
2412       X_ATTRIBUTE9            => l_task_rec.ATTRIBUTE9,
2413       X_ATTRIBUTE10           => l_task_rec.ATTRIBUTE10,
2414       X_ATTRIBUTE11           => l_task_rec.ATTRIBUTE11,
2415       X_ATTRIBUTE12           => l_task_rec.ATTRIBUTE12,
2416       X_ATTRIBUTE13           => l_task_rec.ATTRIBUTE13,
2417       X_ATTRIBUTE14           => l_task_rec.ATTRIBUTE14,
2418       X_ATTRIBUTE15           => l_task_rec.ATTRIBUTE15,
2419       X_VISIT_TASK_NAME       => l_task_rec.visit_task_name,
2420       X_DESCRIPTION           => l_task_rec.description,
2421       X_QUANTITY              => l_Task_rec.quantity, -- Added by rnahata for Issue 105
2422       X_CREATION_DATE         => SYSDATE,
2423       X_CREATED_BY            => Fnd_Global.USER_ID,
2424       X_LAST_UPDATE_DATE      => SYSDATE,
2425       X_LAST_UPDATED_BY       => Fnd_Global.USER_ID,
2426       X_LAST_UPDATE_LOGIN     => Fnd_Global.LOGIN_ID );
2427 
2428    ------------------------- finish -------------------------------
2429 
2430    -- salogan added for supplier warranty starts
2431    -- calling AHL_VWP_RULES_PVT.Get_Warranty_Rec_for_Create
2432    AHL_VWP_RULES_PVT.Get_Warranty_Rec_for_Create(
2433        p_task_id             => l_task_rec.visit_task_id,
2434        p_instance_id         => l_task_rec.instance_id,
2435        x_warranty_entl_tbl   => l_entl_rec_tbl);
2436 
2437    IF (l_log_statement >= l_log_current_level) THEN
2438        fnd_log.string(l_log_statement,
2439                       L_DEBUG_KEY,
2440                       'Before calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements.');
2441    END IF;
2442 
2443    --Not passing p_commit the main API commits the data at the end
2444    AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements(
2445        p_api_version                 => l_api_version,
2446        p_validation_level            => p_validation_level,
2447        p_module_type                 => p_module_type,
2448        p_user_role                   => AHL_WARRANTY_ENTL_PVT.G_USER_PLANNER,
2449        p_x_warranty_entl_tbl         => l_entl_rec_tbl,
2450        x_return_status               => l_return_status,
2451        x_msg_count                   => l_msg_count,
2452        x_msg_data                    => l_msg_data);
2453 
2454    IF (l_log_statement >= l_log_current_level) THEN
2455        fnd_log.string(l_log_statement,
2456                       L_DEBUG_KEY,
2457                      'After calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements. Return Status = ' ||
2458                       l_return_status);
2459    END IF;
2460 
2461    l_msg_count := Fnd_Msg_Pub.count_msg;
2462    IF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
2463        x_msg_count := l_msg_count;
2464        x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2465        RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2466    END IF;
2467    -- salogan added for supplier warranty ends
2468 
2469    -- Added cxcheng POST11510--------------
2470    --Now adjust the times derivation for task
2471    IF (l_log_statement >= l_log_current_level) THEN
2472        fnd_log.string(l_log_statement,
2473                       L_DEBUG_KEY,
2474                       'Before Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times' );
2475    END IF;
2476 
2477    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Call Adjust_Task_Times only if past date is null
2478    IF l_task_rec.PAST_TASK_START_DATE IS NULL THEN
2479      AHL_VWP_TIMES_PVT.Adjust_Task_Times(p_api_version      => 1.0,
2480                                          p_init_msg_list    => Fnd_Api.G_FALSE,
2481                                          p_commit           => Fnd_Api.G_FALSE,
2482                                          p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
2483                                          x_return_status    => l_return_status,
2484                                          x_msg_count        => l_msg_count,
2485                                          x_msg_data         => l_msg_data,
2486                                          p_task_id          => l_task_rec.visit_task_id);
2487    END IF;
2488 
2489    IF (l_log_statement >= l_log_current_level) THEN
2490        fnd_log.string(l_log_statement,
2491                       L_DEBUG_KEY,
2492                       'After Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times, Return Status = '|| l_return_status );
2493    END IF;
2494 
2495    --Standard check to count messages
2496    l_msg_count := Fnd_Msg_Pub.count_msg;
2497 
2498    IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
2499       x_msg_count := l_msg_count;
2500       x_return_status := Fnd_Api.G_RET_STS_ERROR;
2501       RAISE Fnd_Api.G_EXC_ERROR;
2502    END IF;
2503 
2504    -- set OUT value
2505    p_x_task_rec.Visit_Task_ID := l_task_rec.Visit_Task_ID;
2506    --TCHIMIRA::BUG 9303368 :: 02-02-2010::Fetch the regenerated visit task number from DB using visit task ID
2507    --p_x_task_rec.Visit_Task_Number := l_task_rec.Visit_Task_Number;
2508    select VISIT_TASK_NUMBER INTO p_x_task_rec.Visit_Task_Number from AHL_VISIT_TASKS_B where VISIT_TASK_ID = p_x_task_rec.Visit_Task_ID;
2509 
2510    IF (c_visit_rec.Any_Task_Chg_Flag = 'N') THEN
2511 
2512       AHL_VWP_RULES_PVT.update_visit_task_flag(
2513         p_visit_id         =>c_visit_rec.visit_id,
2514         p_flag             =>'Y',
2515         x_return_status    =>x_return_status);
2516 
2517       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2518          RAISE FND_API.G_EXC_ERROR;
2519       END IF;
2520    END IF;
2521 
2522    IF (l_log_statement >= l_log_current_level) THEN
2523        fnd_log.string(l_log_statement,
2524                       L_DEBUG_KEY,
2525                       ': After Insert ' || 'Task ID= ' || p_x_Task_rec.visit_task_id ||
2526                       ', Task Number= ' || p_x_Task_rec.visit_task_number);
2527    END IF;
2528 
2529    -- PRAKKUM :: FP:PIE :: 13-OCT-2010 ::
2530    -- Commented out the call to AHL_VWP_PROJ_PROD_PVT.Add_Task_to_Project as it is no longer in use
2531      /*
2532    -- Calling  projects api to create project task for the newly added service request
2533    IF (l_task_rec.Visit_Task_ID IS NOT NULL AND p_module_type = 'SR' )THEN
2534       IF (l_log_statement >= l_log_current_level) THEN
2535           fnd_log.string(l_log_statement,
2536                          L_DEBUG_KEY,
2537                          'Before Calling AHL_VWP_PROJ_PROD_PVT.Add_Task_to_Project ' ||
2538                          'Visit Task Id = ' ||  l_task_rec.Visit_Task_ID);
2539       END IF;
2540 
2541       AHL_VWP_PROJ_PROD_PVT.Add_Task_to_Project(
2542           p_api_version      => l_api_version,
2543           p_init_msg_list    => p_init_msg_list,
2544           p_commit           => Fnd_Api.g_false,
2545           p_validation_level => p_validation_level,
2546           p_module_type      => p_module_type,
2547           p_visit_task_id    => l_task_rec.Visit_Task_ID,
2548           x_return_status    => l_return_status,
2549           x_msg_count        => x_msg_count,
2550           x_msg_data         => x_msg_data);
2551 
2552       IF (l_log_statement >= l_log_current_level) THEN
2553           fnd_log.string(l_log_statement,
2554                          L_DEBUG_KEY,
2555                          'After Calling AHL_VWP_PROJ_PROD_PVT.Add_Task_to_Project, Return Status = ' ||l_return_status );
2556       END IF;
2557    END IF;
2558 */
2559   ---------------------------End of API Body---------------------------------------
2560     --Standard check to count messages
2561    l_msg_count := Fnd_Msg_Pub.count_msg;
2562 
2563    IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
2564       x_msg_count := l_msg_count;
2565       x_return_status := Fnd_Api.G_RET_STS_ERROR;
2566       RAISE Fnd_Api.G_EXC_ERROR;
2567    END IF;
2568 
2569    --Standard check for commit
2570    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
2571       COMMIT;
2572    END IF;
2573 
2574    IF (l_log_procedure >= l_log_current_level) THEN
2575       fnd_log.string(l_log_procedure,
2576                      L_DEBUG_KEY ||'.end',
2577                      'At the end of PL SQL procedure. Return Status = ' || x_return_status);
2578    END IF;
2579 
2580 EXCEPTION
2581    WHEN Fnd_Api.g_exc_error THEN
2582       ROLLBACK TO Create_Unassociated_Task;
2583       x_return_status := Fnd_Api.g_ret_sts_error;
2584       Fnd_Msg_Pub.count_and_get(
2585             p_encoded => Fnd_Api.g_false,
2586             p_count   => x_msg_count,
2587             p_data    => x_msg_data
2588       );
2589 
2590    WHEN Fnd_Api.g_exc_unexpected_error THEN
2591       ROLLBACK TO Create_Unassociated_Task;
2592       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2593       Fnd_Msg_Pub.count_and_get (
2594             p_encoded => Fnd_Api.g_false,
2595             p_count   => x_msg_count,
2596             p_data    => x_msg_data
2597       );
2598 
2599    WHEN OTHERS THEN
2600       ROLLBACK TO Create_Unassociated_Task;
2601       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
2602       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
2603     THEN
2604          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
2605       END IF;
2606       Fnd_Msg_Pub.count_and_get (
2607             p_encoded => Fnd_Api.g_false,
2608             p_count   => x_msg_count,
2609             p_data    => x_msg_data
2610       );
2611 
2612 END Create_Unassociated_Task;
2613 
2614 --------------------------------------------------------------------
2615 -- PROCEDURE
2616 --    Create_Summary_Task
2617 -- PURPOSE
2618 --    To create Summary Task for the maintainance visit
2619 --------------------------------------------------------------------
2620 PROCEDURE Create_Summary_Task (
2621    p_api_version      IN            NUMBER,
2622    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
2623    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
2624    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
2625    p_module_type      IN            VARCHAR2  := 'JSP',
2626    p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
2627    x_return_status       OUT NOCOPY VARCHAR2,
2628    x_msg_count           OUT NOCOPY NUMBER,
2629    x_msg_data            OUT NOCOPY VARCHAR2
2630 )
2631 IS
2632    L_API_VERSION CONSTANT NUMBER := 1.0;
2633    L_API_NAME    CONSTANT VARCHAR2(30) := 'Create_Summary_Task';
2634    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
2635 
2636    -- Local variables defined for the procedure
2637    l_task_rec            AHL_VWP_RULES_PVT.Task_Rec_Type := p_x_task_rec;
2638    l_msg_data            VARCHAR2(2000);
2639    l_item_name           VARCHAR2(40);
2640    l_rowid               VARCHAR2(30);
2641    l_return_status       VARCHAR2(1);
2642    l_msg_count           NUMBER;
2643    l_item_id             NUMBER;
2644    l_serial_id           NUMBER;
2645    l_task_number         NUMBER;
2646    l_org_id              NUMBER;
2647    l_visit_task_id       NUMBER;
2648    l_service_id          NUMBER;
2649    l_cost_parent_id      NUMBER;
2650    l_originating_task_id NUMBER;
2651    l_department_id       NUMBER;
2652    --salogan added the following for supplier warranty
2653    l_entl_rec_tbl        AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type;
2654 
2655   -- To find visit related information
2656    CURSOR c_visit(x_id IN NUMBER) IS
2657        SELECT * FROM AHL_VISITS_VL
2658        WHERE VISIT_ID = x_id;
2659    c_visit_rec c_visit%ROWTYPE;
2660 
2661    -- bug fix #4181411
2662    -- yazhou 17-Feb-2005
2663    CURSOR get_task_inst_dtls(c_visit_id IN NUMBER) IS
2664    SELECT inventory_item_id,item_organization_id
2665    FROM ahl_visit_tasks_b
2666    WHERE visit_id = c_visit_id
2667    AND nvl(status_code,'x') <> 'DELETED'
2668    AND ROWNUM = 1;
2669 
2670    get_task_inst_rec  get_task_inst_dtls%ROWTYPE;
2671 
2672 BEGIN
2673    --------------------Start of API Body-----------------------------------
2674    IF (l_log_procedure >= l_log_current_level) THEN
2675       fnd_log.string(l_log_procedure,
2676                      L_DEBUG_KEY ||'.begin',
2677                      'At the start of PL SQL procedure.');
2678    END IF;
2679 
2680    SAVEPOINT Create_Summary_Task;
2681 
2682    -- Initialize message list if p_init_msg_list is set to TRUE.
2683    IF Fnd_Api.to_boolean(p_init_msg_list)
2684    THEN
2685      Fnd_Msg_Pub.initialize;
2686    END IF;
2687 
2688    --  Initialize API return status to success
2689     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
2690 
2691    -- Standard call to check for call compatibility.
2692    IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
2693                                       p_api_version,
2694                                       l_api_name,G_PKG_NAME)
2695    THEN
2696        RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
2697    END IF;
2698 
2699   --------------------Value OR ID conversion---------------------------
2700    --Start API Body
2701    IF p_module_type = 'JSP'
2702    THEN
2703        l_Task_rec.instance_id          := NULL;
2704        l_Task_rec.cost_parent_id       := NULL;
2705        l_Task_rec.originating_task_id  := NULL;
2706        l_Task_rec.department_id        := NULL;
2707    END IF;
2708 
2709   -------------------Cursor values------------------------------------
2710    OPEN c_visit(l_task_rec.visit_id);
2711    FETCH c_visit INTO c_visit_rec;
2712    CLOSE c_visit;
2713 
2714    IF (l_log_statement >= l_log_current_level) THEN
2715        fnd_log.string(l_log_statement,
2716                       L_DEBUG_KEY,
2717                       ': Visit Id = ' || l_task_rec.visit_id ||
2718                       ': Status Code ' || c_visit_rec.status_code);
2719    END IF;
2720 
2721    IF c_visit_rec.status_code IN ('CLOSED','CANCELLED') THEN
2722       Fnd_Message.SET_NAME('AHL','AHL_VWP_NOT_USE_VISIT');
2723       Fnd_Msg_Pub.ADD;
2724       RAISE Fnd_Api.G_EXC_ERROR;
2725    ELSE
2726       ----------- Start defining and validate all LOVs on Create Visit's Task UI Screen---
2727       --
2728       -- For DEPARTMENT
2729       -- Convert department name to department id
2730       IF (l_task_rec.dept_name IS NOT NULL AND l_task_rec.dept_name <> Fnd_Api.G_MISS_CHAR ) THEN
2731          IF (l_log_statement >= l_log_current_level) THEN
2732              fnd_log.string(l_log_statement,
2733                             L_DEBUG_KEY,
2734                             'Calling AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id ');
2735          END IF;
2736          AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id
2737                (p_organization_id  => c_visit_rec.organization_id,
2738                 p_dept_name        => l_task_rec.dept_name,
2739                 p_department_id    => NULL,
2740                 x_department_id    => l_department_id,
2741                 x_return_status    => l_return_status,
2742                 x_error_msg_code   => l_msg_data);
2743 
2744          IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
2745          THEN
2746              Fnd_Message.SET_NAME('AHL','AHL_VWP_DEPT_NOT_EXISTS');
2747              Fnd_Msg_Pub.ADD;
2748              RAISE Fnd_Api.G_EXC_ERROR;
2749          END IF;
2750 
2751          -- Changes for Post 11.5.10 by amagrawa
2752          Ahl_vwp_rules_pvt.CHECK_DEPARTMENT_SHIFT
2753            ( P_DEPT_ID    => l_department_id,
2754              X_RETURN_STATUS  => l_return_status);
2755 
2756          IF (NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS)  THEN
2757              Fnd_Message.SET_NAME('AHL','AHL_VWP_NO_DEPT_SHIFT');
2758            Fnd_Msg_Pub.ADD;
2759                RAISE Fnd_Api.G_EXC_ERROR;
2760          END IF;
2761 
2762          --Assign the returned value
2763          l_task_rec.department_id := l_department_id;
2764       END IF;
2765 
2766       IF (l_log_statement >= l_log_current_level) THEN
2767           fnd_log.string(l_log_statement,
2768                          L_DEBUG_KEY,
2769                          ': Dept ID= ' || l_Task_rec.department_id ||
2770                          ': Before Convert Item Item ID= ' || l_Task_rec.inventory_item_id ||
2771                          ', Org ID= ' || l_Task_rec.item_organization_id ||
2772                          ', Item Name= ' || l_Task_rec.item_name );
2773       END IF;
2774 
2775       --
2776       -- For ITEM
2777       -- Convert item name to item id
2778 
2779       IF (l_Task_rec.inventory_item_id IS NOT NULL AND
2780            l_Task_rec.inventory_item_id <> Fnd_Api.G_MISS_NUM) AND
2781            (l_Task_rec.item_organization_id IS NOT NULL AND
2782             l_Task_rec.item_organization_id <> Fnd_Api.G_MISS_NUM) THEN
2783 
2784           IF (l_log_statement >= l_log_current_level) THEN
2785               fnd_log.string(l_log_statement,
2786                              L_DEBUG_KEY,
2787                              'Calling AHL_VWP_RULES_PVT.Check_Item_Name_Or_Id ' );
2788           END IF;
2789           AHL_VWP_RULES_PVT.Check_Item_Name_Or_Id
2790              (p_item_id        => l_Task_rec.inventory_item_id,
2791               p_org_id         => l_Task_rec.item_organization_id,
2792               p_item_name      => l_Task_rec.item_name,
2793               x_item_id        => l_item_id,
2794               x_org_id         => l_org_id,
2795               x_item_name      => l_item_name,
2796               x_return_status  => l_return_status,
2797               x_error_msg_code => l_msg_data);
2798 
2799           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
2800           THEN
2801               Fnd_Message.SET_NAME('AHL','AHL_VWP_ITEM_NOT_EXISTS');
2802               Fnd_Msg_Pub.ADD;
2803               RAISE Fnd_Api.G_EXC_ERROR;
2804           END IF;
2805 
2806           IF UPPER(l_Task_rec.item_name) <> UPPER(l_item_name) THEN
2807               Fnd_Message.SET_NAME('AHL','AHL_VWP_ITEM_USE_LOV');
2808               Fnd_Msg_Pub.ADD;
2809               RAISE Fnd_Api.G_EXC_ERROR;
2810           END IF;
2811 
2812           --Assign the returned value
2813           l_Task_rec.inventory_item_id := l_item_id;
2814           l_Task_rec.item_organization_id := l_org_id;
2815 
2816           /* Commented as Item is not mandatory for Summary Task
2817              Post 11.5.10 Changes done by Senthil.
2818              ELSE
2819                 Fnd_Message.SET_NAME('AHL','AHL_VWP_ITEM_USE_LOV');
2820                 Fnd_Msg_Pub.ADD;
2821                 RAISE Fnd_Api.G_EXC_ERROR;
2822           */
2823 
2824    ELSE
2825       -- bug fix #4181411
2826       -- yazhou 17-Feb-2005
2827       IF (c_visit_rec.inventory_item_id IS NOT NULL AND
2828            c_visit_rec.inventory_item_id <> Fnd_Api.G_MISS_NUM) AND
2829            (c_visit_rec.item_organization_id IS NOT NULL AND
2830             c_visit_rec.item_organization_id <> Fnd_Api.G_MISS_NUM) THEN
2831 
2832           l_Task_rec.inventory_item_id :=  c_visit_rec.inventory_item_id;
2833           l_Task_rec.item_organization_id := c_visit_rec.item_organization_id;
2834       ELSE
2835 
2836          OPEN get_task_inst_dtls(l_task_rec.visit_id);
2837          FETCH get_task_inst_dtls INTO get_task_inst_rec;
2838          IF get_task_inst_dtls%NOTFOUND THEN
2839             Fnd_Message.SET_NAME('AHL','AHL_VWP_SUM_TASK_ITEM');
2840             Fnd_Msg_Pub.ADD;
2841             CLOSE get_task_inst_dtls;
2842             RAISE Fnd_Api.G_EXC_ERROR;
2843          END IF;
2844 
2845          l_Task_rec.inventory_item_id :=  get_task_inst_rec.inventory_item_id;
2846          l_Task_rec.item_organization_id := get_task_inst_rec.item_organization_id;
2847 
2848          CLOSE get_task_inst_dtls;
2849 
2850       END IF;
2851 
2852    END IF;
2853 
2854      IF (l_log_statement >= l_log_current_level) THEN
2855          fnd_log.string(l_log_statement,
2856                         L_DEBUG_KEY,
2857                         'Item ID= ' || l_Task_rec.inventory_item_id ||
2858                         ', Item Org ID= ' || l_Task_rec.item_organization_id ||
2859                         ', Item Name= ' || l_Task_rec.item_name ||
2860                         ', Serial Number= ' || l_Task_rec.serial_number);
2861      END IF;
2862 
2863      -- For SERIAL NUMBER
2864      -- Convert serial number to instance/ serial id
2865       IF (l_Task_rec.serial_number IS NOT NULL AND
2866               l_Task_rec.serial_number <> Fnd_Api.G_MISS_CHAR) THEN
2867 
2868               AHL_VWP_RULES_PVT.Check_Serial_Name_Or_Id
2869                    (p_item_id        => l_Task_rec.inventory_item_id,
2870                     p_org_id         => l_Task_rec.item_organization_id,
2871                     p_serial_id      => l_Task_rec.instance_id,
2872                     p_serial_number  => l_Task_rec.serial_number,
2873                     x_serial_id      => l_serial_id,
2874                     x_return_status  => l_return_status,
2875                     x_error_msg_code => l_msg_data);
2876 
2877           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success THEN
2878              Fnd_Message.SET_NAME('AHL','AHL_VWP_SERIAL_NOT_EXISTS');
2879              Fnd_Msg_Pub.ADD;
2880              RAISE Fnd_Api.G_EXC_ERROR;
2881           ELSE
2882              --Assign the returned value
2883              l_Task_rec.instance_id := l_serial_id;
2884 
2885              IF (l_log_statement >= l_log_current_level) THEN
2886                 fnd_log.string(l_log_statement,
2887                                      L_DEBUG_KEY,
2888                                      ': Before UC Check Serial ID= ' || l_Task_rec.instance_id ||
2889                                      ', Item ID= ' || l_Task_rec.inventory_item_id ||
2890                                      ', Org ID= ' || l_Task_rec.item_organization_id);
2891               END IF;
2892               /* sowsubra - start
2893               --BEGIN: jeli added for bug 3777720
2894               IF (AHL_VWP_RULES_PVT.instance_in_config_tree(l_task_rec.visit_id, l_task_rec.instance_id) = FND_API.G_RET_STS_ERROR) THEN
2895               --END: jeli added for bug 3777720
2896                   Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_SERIAL');
2897                   Fnd_Msg_Pub.ADD;
2898                   RAISE Fnd_Api.G_EXC_ERROR;
2899               END IF;
2900               sowsubra - end */
2901            END IF;
2902         END IF;
2903 
2904         IF (l_log_statement >= l_log_current_level) THEN
2905             fnd_log.string(l_log_statement,
2906                            L_DEBUG_KEY,
2907                            ': Serial ID= ' || l_Task_rec.instance_id ||
2908                            ': Cost parent= ' || l_Task_rec.cost_parent_number);
2909         END IF;
2910 
2911      --
2912      -- For COST PARENT TASK
2913      -- Convert cost parent number to id
2914       IF (l_Task_rec.cost_parent_number IS NOT NULL AND
2915           l_Task_rec.cost_parent_number <> Fnd_Api.G_MISS_NUM ) THEN
2916 
2917           AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
2918                (p_visit_task_id      => l_Task_rec.cost_parent_id,
2919                 p_visit_task_number  => l_Task_rec.cost_parent_number,
2920                 p_visit_id           => l_Task_rec.visit_id,
2921                 x_visit_task_id      => l_cost_parent_id,
2922                 x_return_status      => l_return_status,
2923                 x_error_msg_code     => l_msg_data);
2924 
2925           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
2926           THEN
2927               Fnd_Message.SET_NAME('AHL','AHL_VWP_PARENT_NOT_EXISTS');
2928               Fnd_Msg_Pub.ADD;
2929               RAISE Fnd_Api.g_exc_error;
2930           END IF;
2931 
2932            --Assign the returned value
2933            l_Task_rec.cost_parent_id := l_cost_parent_id;
2934      END IF;
2935 
2936      IF (l_log_statement >= l_log_current_level) THEN
2937          fnd_log.string(l_log_statement,
2938                         L_DEBUG_KEY,
2939                         ': Cost parent ID = ' || l_Task_rec.cost_parent_id);
2940      END IF;
2941 
2942        -- To Check for cost parent task id not forming loop
2943      IF (l_Task_rec.cost_parent_id IS NOT NULL AND
2944         l_Task_rec.cost_parent_id <> Fnd_Api.G_MISS_NUM ) THEN
2945 
2946         AHL_VWP_RULES_PVT.Check_Cost_Parent_Loop
2947             (p_visit_id        => l_Task_rec.visit_id,
2948              p_visit_task_id   => l_Task_rec.visit_task_id ,
2949              p_cost_parent_id  => l_Task_rec.cost_parent_id
2950              );
2951 
2952      END IF;
2953 
2954      IF (l_log_statement >= l_log_current_level) THEN
2955          fnd_log.string(l_log_statement,
2956                         L_DEBUG_KEY,
2957                         ': Originating Number = ' || l_Task_rec.orginating_task_number);
2958      END IF;
2959 
2960      --
2961      -- For ORIGINATING TASK
2962     -- Convert originating task number to id
2963      IF (l_Task_rec.orginating_task_number IS NOT NULL AND
2964           l_Task_rec.orginating_task_number <> Fnd_Api.G_MISS_NUM ) THEN
2965 
2966           AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
2967                (p_visit_task_id      => l_Task_rec.originating_task_id,
2968                 p_visit_task_number  => l_Task_rec.orginating_task_number,
2969                 p_visit_id           => l_Task_rec.visit_id,
2970                 x_visit_task_id      => l_originating_task_id,
2971                 x_return_status      => l_return_status,
2972                 x_error_msg_code     => l_msg_data);
2973 
2974           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
2975           THEN
2976               Fnd_Message.SET_NAME('AHL','AHL_VWP_ORIGINATING_NOT_EXISTS');
2977               Fnd_Msg_Pub.ADD;
2978               RAISE Fnd_Api.g_exc_error;
2979           END IF;
2980 
2981           --Assign the returned value
2982           l_Task_rec.originating_task_id := l_originating_task_id;
2983      END IF;
2984 
2985      IF (l_log_statement >= l_log_current_level) THEN
2986          fnd_log.string(l_log_statement,
2987                         L_DEBUG_KEY,
2988                         ': Originating Task ID= ' || l_Task_rec.originating_task_id);
2989      END IF;
2990 
2991      -- To Check for originating task id not forming loop
2992      IF (l_Task_rec.originating_task_id IS NOT NULL AND
2993          l_Task_rec.originating_task_id <> Fnd_Api.G_MISS_NUM ) THEN
2994 
2995          AHL_VWP_RULES_PVT.Check_Origin_Task_Loop
2996              (p_visit_id             => l_Task_rec.visit_id ,
2997               p_visit_task_id        => l_Task_rec.visit_task_id ,
2998               p_originating_task_id  => l_Task_rec.originating_task_id
2999               );
3000 
3001      END IF;
3002 
3003      -- Validate target quantity
3004      IF (l_Task_rec.target_qty IS NOT NULL           AND
3005          l_Task_rec.target_qty <> Fnd_Api.G_MISS_NUM AND
3006          l_Task_rec.target_qty < 0) THEN
3007          FND_MESSAGE.set_name(G_APP_NAME, 'AHL_CMP_TARGET_QTY_INVLD');
3008          FND_MSG_PUB.add;
3009          RAISE FND_API.G_EXC_ERROR;
3010      END IF;
3011     ----------- End defining and validate all LOVs on Create Visit's Task UI Screen---
3012 
3013     ----------------------------------------------  Validate ----------------------------------------------
3014 
3015      IF (l_log_statement >= l_log_current_level) THEN
3016          fnd_log.string(l_log_statement,
3017                         L_DEBUG_KEY,
3018                         'Before Calling Validate_Visit_Task');
3019      END IF;
3020 
3021        Validate_Visit_Task (
3022           p_api_version        => l_api_version,
3023           p_init_msg_list      => p_init_msg_list,
3024           p_commit             => Fnd_Api.g_false,
3025           p_validation_level   => p_validation_level,
3026           p_task_rec           => l_task_rec,
3027           x_return_status      => l_return_status,
3028           x_msg_count          => x_msg_count,
3029           x_msg_data           => x_msg_data
3030        );
3031 
3032        IF l_return_status = Fnd_Api.g_ret_sts_error THEN
3033           RAISE Fnd_Api.g_exc_error;
3034        ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
3035           RAISE Fnd_Api.g_exc_unexpected_error;
3036        END IF;
3037 
3038        -- Check for the ID.
3039        IF l_task_rec.Visit_Task_ID = Fnd_Api.g_miss_num OR l_task_rec.Visit_Task_ID IS NULL THEN
3040           -- Check for the ID.
3041           l_Visit_Task_ID := AHL_VWP_RULES_PVT.Get_Visit_Task_Id();
3042           l_task_rec.visit_task_ID := l_Visit_Task_ID;
3043 
3044        END IF;
3045 
3046        -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: Check for the Task Number
3047        IF l_task_rec.visit_task_number = Fnd_Api.g_miss_num OR l_task_rec.visit_task_number IS NULL THEN
3048           l_task_number := AHL_VWP_RULES_PVT.Get_Visit_Task_Number(l_task_rec.visit_id);
3049           l_task_rec.visit_task_number := l_task_number;
3050        END IF;
3051 
3052        IF (l_log_statement >= l_log_current_level) THEN
3053            fnd_log.string(l_log_statement,
3054                           L_DEBUG_KEY,
3055                           ': Task ID= ' || l_Task_rec.visit_task_id ||
3056                           ': Task number= ' || l_Task_rec.visit_task_number ||
3057                           ': Repair batch name= ' || l_Task_rec.REPAIR_BATCH_NAME);
3058        END IF;
3059 
3060 
3061 
3062    ----------------------- Check miss_num/miss_char/miss_date-----------------------
3063     -- For all optional fields check if its g_miss_num/g_miss_char/g_miss_date
3064     -- then Null else the value call Default_Missing_Attribs procedure
3065         Default_Missing_Attribs
3066         (p_x_task_rec => l_Task_rec);
3067 
3068    -------------------------- Insert ------------------------------------------------
3069 
3070     IF (l_log_statement >= l_log_current_level) THEN
3071         fnd_log.string(l_log_statement,
3072                        L_DEBUG_KEY,
3073                        'Before Calling Ahl_Visit_Tasks_Pkg.Insert_Row' );
3074     END IF;
3075 
3076    -- Invoke the table handler to create a record
3077    Ahl_Visit_Tasks_Pkg.Insert_Row (
3078       X_ROWID                 => l_rowid,
3079       X_VISIT_TASK_ID         => l_task_rec.visit_task_id,
3080       X_VISIT_TASK_NUMBER     => l_task_rec.visit_task_number,
3081       X_OBJECT_VERSION_NUMBER => 1,
3082       X_VISIT_ID              => l_task_rec.visit_id,
3083       X_PROJECT_TASK_ID       => NULL, --l_task_rec.project_task_id,
3084       X_COST_PARENT_ID        => l_task_rec.cost_parent_id,
3085       X_MR_ROUTE_ID           => NULL,
3086       X_MR_ID                 => NULL,
3087       X_DURATION              => NULL,
3088       X_UNIT_EFFECTIVITY_ID   => NULL,
3089       X_START_FROM_HOUR       => NULL,
3090       X_INVENTORY_ITEM_ID     => l_task_rec.inventory_item_id,
3091       X_ITEM_ORGANIZATION_ID  => l_task_rec.item_organization_id,
3092       X_INSTANCE_ID           => l_task_rec.instance_id,
3093       X_PRIMARY_VISIT_TASK_ID => NULL, --l_task_rec.primary_visit_task_id,
3094       X_ORIGINATING_TASK_ID   => l_task_rec.originating_task_id,
3095       X_SERVICE_REQUEST_ID    => l_task_rec.service_request_id,
3096       X_TASK_TYPE_CODE        => l_task_rec.task_type_code,
3097       -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: Service Type code added, as this modified handler requires it
3098       X_SERVICE_TYPE_CODE     => NULL,
3099       X_DEPARTMENT_ID         => l_task_rec.department_id,
3100       X_SUMMARY_TASK_FLAG     => 'Y',
3101       X_PRICE_LIST_ID         => NULL,
3102       X_STATUS_CODE           => 'PLANNING',
3103       X_ESTIMATED_PRICE       => NULL,
3104       X_ACTUAL_PRICE          => NULL,
3105       X_ACTUAL_COST           => NULL,
3106       --  Post 11.5.10 Changes by Senthil.
3107       X_STAGE_ID              =>  l_task_rec.STAGE_ID,
3108       -- Added cxcheng POST11510--------------
3109    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Pass past dates too
3110       X_START_DATE_TIME       => NULL,
3111       X_END_DATE_TIME         => NULL,
3112       X_PAST_TASK_START_DATE  => NULL,
3113       X_PAST_TASK_END_DATE    => NULL,
3114       --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
3115       X_TARGET_QTY            => l_task_rec.TARGET_QTY,
3116       X_ATTRIBUTE_CATEGORY    => l_task_rec.ATTRIBUTE_CATEGORY,
3117       X_ATTRIBUTE1            => l_task_rec.ATTRIBUTE1,
3118       X_ATTRIBUTE2            => l_task_rec.ATTRIBUTE2,
3119       X_ATTRIBUTE3            => l_task_rec.ATTRIBUTE3,
3120       X_ATTRIBUTE4            => l_task_rec.ATTRIBUTE4,
3121       X_ATTRIBUTE5            => l_task_rec.ATTRIBUTE5,
3122       X_ATTRIBUTE6            => l_task_rec.ATTRIBUTE6,
3123       X_ATTRIBUTE7            => l_task_rec.ATTRIBUTE7,
3124       X_ATTRIBUTE8            => l_task_rec.ATTRIBUTE8,
3125       X_ATTRIBUTE9            => l_task_rec.ATTRIBUTE9,
3126       X_ATTRIBUTE10           => l_task_rec.ATTRIBUTE10,
3127       X_ATTRIBUTE11           => l_task_rec.ATTRIBUTE11,
3128       X_ATTRIBUTE12           => l_task_rec.ATTRIBUTE12,
3129       X_ATTRIBUTE13           => l_task_rec.ATTRIBUTE13,
3130       X_ATTRIBUTE14           => l_task_rec.ATTRIBUTE14,
3131       X_ATTRIBUTE15           => l_task_rec.ATTRIBUTE15,
3132       X_VISIT_TASK_NAME       => l_task_rec.visit_task_name,
3133       X_DESCRIPTION           => l_task_rec.description,
3134       -- Added by rnahata for Issue 105 - Qty is zero for manully created summary tasks
3135       X_QUANTITY              => 0,
3136       X_CREATION_DATE         => SYSDATE,
3137       X_CREATED_BY            => Fnd_Global.USER_ID,
3138       X_LAST_UPDATE_DATE      => SYSDATE,
3139       X_LAST_UPDATED_BY       => Fnd_Global.USER_ID,
3140       X_LAST_UPDATE_LOGIN     => Fnd_Global.LOGIN_ID,
3141       X_REPAIR_BATCH_NAME     => l_task_rec.REPAIR_BATCH_NAME  --PRAKKUM :: 13/06/2012 :: Bug 14068468
3142       );
3143 
3144     IF (l_log_statement >= l_log_current_level) THEN
3145         fnd_log.string(l_log_statement,
3146                        L_DEBUG_KEY,
3147                        'After Calling Ahl_Visit_Tasks_Pkg.Insert_Row' );
3148     END IF;
3149 
3150    ------------------------- finish -------------------------------
3151 
3152    -- salogan added for supplier warranty starts
3153    -- calling AHL_VWP_RULES_PVT.Get_Warranty_Rec_for_Create
3154    AHL_VWP_RULES_PVT.Get_Warranty_Rec_for_Create(
3155        p_task_id             => l_task_rec.visit_task_id,
3156        p_instance_id         => l_task_rec.instance_id,
3157        x_warranty_entl_tbl   => l_entl_rec_tbl);
3158 
3159    IF (l_log_statement >= l_log_current_level) THEN
3160        fnd_log.string(l_log_statement,
3161                       L_DEBUG_KEY,
3162                       'Before calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements.');
3163    END IF;
3164 
3165    --Not passing p_commit the main API commits the data at the end
3166    AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements(
3167        p_api_version                 => l_api_version,
3168        p_validation_level            => p_validation_level,
3169        p_module_type                 => p_module_type,
3170        p_user_role                   => AHL_WARRANTY_ENTL_PVT.G_USER_PLANNER,
3171        p_x_warranty_entl_tbl         => l_entl_rec_tbl,
3172        x_return_status               => l_return_status,
3173        x_msg_count                   => l_msg_count,
3174        x_msg_data                    => l_msg_data);
3175 
3176    IF (l_log_statement >= l_log_current_level) THEN
3177        fnd_log.string(l_log_statement,
3178                       L_DEBUG_KEY,
3179                       'After calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements. Return Status = ' ||
3180                       l_return_status);
3181    END IF;
3182 
3183    l_msg_count := Fnd_Msg_Pub.count_msg;
3184    IF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
3185       x_msg_count := l_msg_count;
3186       x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
3187       RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
3188    END IF;
3189    -- salogan added for supplier warranty ends
3190 
3191    -- Added cxcheng POST11510--------------
3192    --Now adjust the times derivation for task
3193    IF (l_log_statement >= l_log_current_level) THEN
3194        fnd_log.string(l_log_statement,
3195                       L_DEBUG_KEY,
3196                       'Before Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times' );
3197    END IF;
3198 
3199    AHL_VWP_TIMES_PVT.Adjust_Task_Times(p_api_version => 1.0,
3200                                     p_init_msg_list => Fnd_Api.G_FALSE,
3201                                     p_commit        => Fnd_Api.G_FALSE,
3202                                     p_validation_level      => Fnd_Api.G_VALID_LEVEL_FULL,
3203                                     x_return_status      => l_return_status,
3204                                     x_msg_count          => l_msg_count,
3205                                     x_msg_data           => l_msg_data,
3206                                     p_task_id            => l_task_rec.visit_task_id);
3207 
3208    IF (l_log_statement >= l_log_current_level) THEN
3209        fnd_log.string(l_log_statement,
3210                       L_DEBUG_KEY,
3211                       'After Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times, Return Status = '|| l_return_status );
3212    END IF;
3213 
3214    --Standard check to count messages
3215    l_msg_count := Fnd_Msg_Pub.count_msg;
3216 
3217    IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
3218       x_msg_count := l_msg_count;
3219       x_return_status := Fnd_Api.G_RET_STS_ERROR;
3220       RAISE Fnd_Api.G_EXC_ERROR;
3221    END IF;
3222 
3223      -- set OUT value
3224      p_x_task_rec.Visit_Task_ID := l_task_rec.Visit_Task_ID;
3225      --TCHIMIRA::BUG 9246386 :: 02-02-2010::Fetch the regenerated visit task number from DB using visit task ID
3226      --p_x_task_rec.Visit_Task_Number := l_task_rec.Visit_Task_Number;
3227      select VISIT_TASK_NUMBER INTO p_x_task_rec.Visit_Task_Number from AHL_VISIT_TASKS_B where VISIT_TASK_ID = p_x_task_rec.Visit_Task_ID;
3228 
3229        IF c_visit_rec.Any_Task_Chg_Flag='N' THEN
3230          AHL_VWP_RULES_PVT.update_visit_task_flag(
3231          p_visit_id         =>c_visit_rec.visit_id,
3232          p_flag             =>'Y',
3233          x_return_status    =>x_return_status);
3234          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3235            RAISE FND_API.G_EXC_ERROR;
3236          END IF;
3237        END IF;
3238 
3239     IF (l_log_statement >= l_log_current_level) THEN
3240         fnd_log.string(l_log_statement,
3241                        L_DEBUG_KEY,
3242                        ': After Insert ' || 'Task ID= ' || p_x_Task_rec.visit_task_id ||
3243                        ': After Insert ' || 'Task Number= ' || p_x_Task_rec.visit_task_number);
3244     END IF;
3245 
3246 END IF; -- Check for visit status code in case if closed or any other
3247 
3248   ---------------------------End of API Body---------------------------------------
3249     --Standard check to count messages
3250    l_msg_count := Fnd_Msg_Pub.count_msg;
3251 
3252    IF l_msg_count > 0 THEN
3253       x_msg_count := l_msg_count;
3254       x_return_status := Fnd_Api.G_RET_STS_ERROR;
3255       RAISE Fnd_Api.G_EXC_ERROR;
3256    END IF;
3257 
3258    --Standard check for commit
3259    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
3260       COMMIT;
3261    END IF;
3262 
3263    IF (l_log_procedure >= l_log_current_level) THEN
3264          fnd_log.string(l_log_procedure,
3265                         L_DEBUG_KEY ||'.end',
3266                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
3267    END IF;
3268 EXCEPTION
3269    WHEN Fnd_Api.g_exc_error THEN
3270       ROLLBACK TO Create_Summary_Task;
3271       x_return_status := Fnd_Api.g_ret_sts_error;
3272       Fnd_Msg_Pub.count_and_get(
3273             p_encoded => Fnd_Api.g_false,
3274             p_count   => x_msg_count,
3275             p_data    => x_msg_data
3276       );
3277    WHEN Fnd_Api.g_exc_unexpected_error THEN
3278       ROLLBACK TO Create_Summary_Task;
3279       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
3280       Fnd_Msg_Pub.count_and_get (
3281             p_encoded => Fnd_Api.g_false,
3282             p_count   => x_msg_count,
3283             p_data    => x_msg_data
3284       );
3285    WHEN OTHERS THEN
3286       ROLLBACK TO Create_Summary_Task;
3287       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
3288       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
3289     THEN
3290          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
3291       END IF;
3292       Fnd_Msg_Pub.count_and_get (
3293             p_encoded => Fnd_Api.g_false,
3294             p_count   => x_msg_count,
3295             p_data    => x_msg_data
3296       );
3297 END Create_Summary_Task;
3298 
3299 --------------------------------------------------------------------
3300 -- PROCEDURE
3301 --    Update_Task
3302 --
3303 -- PURPOSE
3304 --  To update all types of tasks i.e Unassociated/Summary/Unplanned/Planned Tasks.
3305 --------------------------------------------------------------------
3306 PROCEDURE Update_Task (
3307    p_api_version      IN            NUMBER,
3308    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
3309    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
3310    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
3311    p_module_type      IN            VARCHAR2  := 'JSP',
3312    p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
3313    x_return_status       OUT NOCOPY VARCHAR2,
3314    x_msg_count           OUT NOCOPY NUMBER,
3315    x_msg_data            OUT NOCOPY VARCHAR2
3316 )
3317 IS
3318    L_API_VERSION CONSTANT NUMBER := 1.0;
3319    L_API_NAME    CONSTANT VARCHAR2(30) := 'Update_Task';
3320    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
3321 
3322    -- local variables defined for the procedure
3323    l_task_rec             AHL_VWP_RULES_PVT.Task_Rec_Type := p_x_task_rec;
3324    l_msg_data             VARCHAR2(2000);
3325    l_return_status        VARCHAR2(1);
3326    l_msg_count            NUMBER;
3327    l_visit_end_date       DATE;
3328 
3329    -- PRAKKUM :: FP PIE :: 13-OCT-2010
3330    -- Adding a new local variable.
3331    l_new_structure_flag   VARCHAR2(1);
3332 
3333    -- To find task related information
3334    CURSOR c_Task (x_id IN NUMBER) IS
3335       SELECT * FROM  Ahl_Visit_Tasks_VL
3336       WHERE  VISIT_TASK_ID = x_id;
3337    c_Task_rec    c_Task%ROWTYPE;
3338 
3339     -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010
3340     -- get the start date and planned end date of the visit
3341     CURSOR c_Visit (x_id IN NUMBER) IS
3342     SELECT start_date_time, close_date_time FROM  ahl_visits_b
3343     WHERE  VISIT_ID = x_id;
3344     c_visit_rec    c_Visit%ROWTYPE;
3345 
3346 
3347  BEGIN
3348    IF (l_log_procedure >= l_log_current_level) THEN
3349       fnd_log.string(l_log_procedure,
3350                      L_DEBUG_KEY ||'.begin',
3351                      'At the start of PL SQL procedure.');
3352    END IF;
3353 
3354    --------------------- initialize -----------------------
3355    SAVEPOINT Update_Task;
3356 
3357    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
3358       Fnd_Msg_Pub.initialize;
3359    END IF;
3360 
3361    --  Initialize API return status to success
3362     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
3363 
3364    -- Standard call to check for call compatibility.
3365    IF NOT Fnd_Api.compatible_api_call(
3366          l_api_version,
3367          p_api_version,
3368          l_api_name,
3369          G_PKG_NAME
3370    ) THEN
3371       RAISE Fnd_Api.g_exc_unexpected_error;
3372    END IF;
3373  --------------------Start of API Body-----------------------------------
3374 
3375  -------------------Cursor values------------------------------------
3376 
3377    OPEN c_Task(l_Task_rec.visit_task_id);
3378    FETCH c_Task INTO c_Task_rec;
3379    CLOSE c_Task;
3380 
3381    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: STARTS
3382    OPEN c_Visit(l_Task_rec.visit_id);
3383    FETCH c_Visit INTO c_visit_rec;
3384    CLOSE c_Visit;
3385 
3386    ---------------------------------------------- Start----------------------------------------------------------
3387 
3388    IF c_Task_rec.status_code = 'RELEASED' THEN
3389      l_task_rec.PAST_TASK_START_DATE := c_Task_rec.PAST_TASK_START_DATE;
3390      l_task_rec.PAST_TASK_END_DATE   := c_Task_rec.PAST_TASK_END_DATE;
3391    END IF;
3392 
3393 
3394    IF (l_task_rec.PAST_TASK_START_DATE IS NOT NULL
3395       AND l_task_rec.PAST_TASK_START_DATE <> Fnd_Api.G_MISS_DATE) THEN
3396        IF (l_task_rec.PAST_TASK_END_DATE IS NULL
3397           OR l_task_rec.PAST_TASK_START_DATE = Fnd_Api.G_MISS_DATE) THEN
3398           -- if start date is entered but not end date, throw error
3399         Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_MAND');
3400         Fnd_Msg_Pub.ADD;
3401         RAISE FND_API.G_EXC_ERROR;
3402        END IF;
3403        IF (l_Task_rec.PAST_TASK_START_DATE >= SYSDATE) THEN
3404          -- Throw error if start date is not in past
3405          Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_PAST_ST_DATE_INV');
3406          Fnd_Msg_Pub.ADD;
3407          RAISE FND_API.G_EXC_ERROR;
3408        END IF;
3409        IF (l_task_rec.PAST_TASK_START_DATE < NVL(c_visit_rec.START_DATE_TIME, l_task_rec.PAST_TASK_START_DATE)) THEN
3410            -- Throw error if past task start date is before the visit start date
3411            Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_START_DATE_INVLD');
3412            Fnd_Msg_Pub.ADD;
3413            RAISE FND_API.G_EXC_ERROR;
3414        END IF;
3415        IF (l_task_rec.PAST_TASK_START_DATE > l_task_rec.PAST_TASK_END_DATE) THEN
3416            -- Throw error if past task start date is after the past task end date
3417            Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_INVLD');
3418            Fnd_Msg_Pub.ADD;
3419            RAISE FND_API.G_EXC_ERROR;
3420        END IF;
3421        IF (l_Task_rec.PAST_TASK_END_DATE > NVL(c_visit_rec.CLOSE_DATE_TIME, l_Task_rec.PAST_TASK_END_DATE)) THEN
3422           -- Throw error if visit ends before the task
3423           Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_END_DATE_INVLD');
3424           Fnd_Msg_Pub.ADD;
3425           RAISE FND_API.G_EXC_ERROR;
3426        END IF;
3427        -- Validate past dates against visit stages, task hierarchy and cost parent hierarchy
3428        AHL_VWP_RULES_PVT.Validate_Past_Task_Dates ( p_task_rec => l_Task_rec,
3429                                                     x_return_status => l_return_status);
3430        IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
3431          IF (l_log_statement >= l_log_current_level) THEN
3432            fnd_log.string(l_log_statement,
3433                           L_DEBUG_KEY,
3434                           'Returned success from AHL_VWP_RULES_PVT.Validate_Past_Task_Dates');
3435          END IF;
3436        ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3437          RAISE FND_API.G_EXC_ERROR;
3438        ELSE
3439          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3440        END IF;
3441    ELSE -- PAST_TASK_START_DATE is null
3442      -- SKPATHAK :: Bug #9402279 :: 24-FEB-2010
3443      -- Changed the condition from l_task_rec.PAST_TASK_START_DATE <> Fnd_Api.G_MISS_DATE
3444      -- to l_task_rec.PAST_TASK_END_DATE <> Fnd_Api.G_MISS_DATE
3445      IF (l_Task_rec.PAST_TASK_END_DATE IS NOT NULL
3446          AND l_Task_rec.PAST_TASK_END_DATE <> Fnd_Api.G_MISS_DATE) THEN
3447        Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_MAND');
3448        Fnd_Msg_Pub.ADD;
3449        RAISE FND_API.G_EXC_ERROR;
3450      END IF;
3451      -- If the earlier value of past task date is not null, cannot nullify the past date now
3452      IF c_Task_rec.PAST_TASK_START_DATE IS NOT NULL THEN
3453        Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_DATE_NOT_NULL');
3454        Fnd_Msg_Pub.ADD;
3455        RAISE FND_API.G_EXC_ERROR;
3456      END IF;
3457      l_Task_rec.PAST_TASK_START_DATE := NULL;
3458      l_Task_rec.PAST_TASK_END_DATE := NULL;
3459    END IF;
3460    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: END
3461 
3462 
3463    IF (l_log_statement >= l_log_current_level) THEN
3464        fnd_log.string(l_log_statement,
3465                       L_DEBUG_KEY,
3466                       'Status Code = ' || c_Task_rec.status_code);
3467    END IF;
3468 
3469    IF c_Task_rec.status_code = 'RELEASED' THEN
3470      IF (l_log_statement >= l_log_current_level) THEN
3471          fnd_log.string(l_log_statement,
3472                         L_DEBUG_KEY,
3473                         'Before calling Update_Tasks_in_Production');
3474      END IF;
3475 
3476     Update_Tasks_in_Production
3477       (p_api_version      => l_api_version,
3478        p_init_msg_list    => p_init_msg_list,
3479        p_commit           => Fnd_Api.g_false,
3480        p_validation_level => p_validation_level,
3481        p_module_type      => p_module_type,
3482        p_x_task_rec       => l_task_rec,
3483        x_return_status    => l_return_status,
3484        x_msg_count        => l_msg_count,
3485        x_msg_data         => l_msg_data
3486        );
3487      IF (l_log_statement >= l_log_current_level) THEN
3488          fnd_log.string(l_log_statement,
3489                         L_DEBUG_KEY,
3490                         'After calling Update_Tasks_in_Production, Return Status = ' || l_return_status);
3491      END IF;
3492 
3493    ELSE
3494         IF (l_log_statement >= l_log_current_level) THEN
3495             fnd_log.string(l_log_statement,
3496                            L_DEBUG_KEY,
3497                            'Before calling Update_Tasks_in_Planning');
3498         END IF;
3499         Update_Tasks_in_Planning
3500         (p_api_version      => l_api_version,
3501          p_init_msg_list    => p_init_msg_list,
3502          p_commit           => Fnd_Api.g_false,
3503          p_validation_level => p_validation_level,
3504          p_module_type      => p_module_type,
3505          p_x_task_rec       => l_task_rec,
3506          x_return_status    => l_return_status,
3507          x_msg_count        => l_msg_count,
3508          x_msg_data         => l_msg_data
3509           );
3510         IF (l_log_statement >= l_log_current_level) THEN
3511             fnd_log.string(l_log_statement,
3512                            L_DEBUG_KEY,
3513                            'After calling Update_Tasks_in_Planning,Return Status = '|| l_return_status);
3514         END IF;
3515    END IF;
3516 
3517    -- PRAKKUM ::FP PIE :: 13-OCT-2010 :: BEGIN
3518 
3519    IF (l_log_statement >= l_log_current_level) THEN
3520      fnd_log.string(l_log_statement, L_DEBUG_KEY, 'Before calling Use_New_Task_Structure.');
3521    END IF;
3522 
3523    AHL_VWP_PROJ_PROD_PVT.Use_New_Task_Structure
3524      ( p_visit_id            =>  c_Task_rec.visit_id,
3525        x_new_structure_flag  =>  l_new_structure_flag
3526      );
3527 
3528    IF l_new_structure_flag = 'Y' THEN
3529      IF c_Task_rec.project_task_id IS NOT NULL THEN
3530        IF ((NVL(c_Task_rec.cost_parent_id, -5) <> NVL(l_task_rec.COST_PARENT_ID,-5))) THEN
3531          IF (l_log_statement >= l_log_current_level) THEN
3532            fnd_log.string(l_log_statement,
3533                         L_DEBUG_KEY,
3534                         'Before calling AHL_VWP_PROJ_PROD_PVT.Update_Project_Task l_return_status= '|| l_return_status);
3535          END IF;
3536 
3537          AHL_VWP_PROJ_PROD_PVT.Update_Project_Task (
3538              p_task_id        => l_Task_rec.visit_task_id,
3539              x_return_status  => l_return_status,
3540              x_msg_count      => l_msg_count,
3541              x_msg_data       => l_msg_data
3542              );
3543          IF (l_log_statement >= l_log_current_level) THEN
3544            fnd_log.string(l_log_statement,
3545                         L_DEBUG_KEY,
3546                         'After calling AHL_VWP_PROJ_PROD_PVT.Update_Project_Task l_return_status= '|| l_return_status);
3547          END IF;
3548 
3549           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3550             x_msg_count := FND_MSG_PUB.count_msg;
3551             IF (l_log_statement >= l_log_current_level) THEN
3552               fnd_log.string(l_log_statement, L_DEBUG_KEY, 'Errors from Update_Project_Task. Message count: ' || x_msg_count);
3553             END IF;
3554             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3555               RAISE FND_API.G_EXC_ERROR;
3556             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3557               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3558             END IF;
3559           ELSE
3560             IF (l_log_statement >= l_log_current_level) THEN
3561               fnd_log.string(l_log_statement, L_DEBUG_KEY, 'Returned Success from Update_Project_Task.');
3562             END IF;
3563           END IF;
3564 
3565        END IF;
3566      END IF;
3567    END IF;
3568    -- PRAKKUM :: FP  PIE :: 13-OCT-2010 :: END
3569 
3570    -- Added to raise errors after calling respective API's
3571    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3572      RAISE FND_API.G_EXC_ERROR;
3573    END IF;
3574 
3575 ------------------------End of API Body------------------------------------
3576    --Standard check to count messages
3577    l_msg_count := Fnd_Msg_Pub.count_msg;
3578 
3579    IF l_msg_count > 0 THEN
3580       x_msg_count := l_msg_count;
3581       x_return_status := Fnd_Api.G_RET_STS_ERROR;
3582       RAISE Fnd_Api.G_EXC_ERROR;
3583    END IF;
3584 
3585    --Standard check for commit
3586    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
3587       COMMIT;
3588    END IF;
3589 
3590    IF (l_log_procedure >= l_log_current_level) THEN
3591        fnd_log.string(l_log_procedure,
3592                       L_DEBUG_KEY ||'.end',
3593                       'At the end of PL SQL procedure. Return Status = ' || x_return_status);
3594    END IF;
3595 
3596 EXCEPTION
3597    WHEN Fnd_Api.g_exc_error THEN
3598       ROLLBACK TO Update_Task;
3599       x_return_status := Fnd_Api.g_ret_sts_error;
3600       Fnd_Msg_Pub.count_and_get (
3601             p_encoded => Fnd_Api.g_false,
3602             p_count   => x_msg_count,
3603             p_data    => x_msg_data
3604       );
3605    WHEN Fnd_Api.g_exc_unexpected_error THEN
3606       ROLLBACK TO Update_Task;
3607       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
3608       Fnd_Msg_Pub.count_and_get (
3609             p_encoded => Fnd_Api.g_false,
3610             p_count   => x_msg_count,
3611             p_data    => x_msg_data
3612       );
3613    WHEN OTHERS THEN
3614       ROLLBACK TO Update_Task;
3615       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
3616       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
3617     THEN
3618          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
3619       END IF;
3620       Fnd_Msg_Pub.count_and_get (
3621             p_encoded => Fnd_Api.g_false,
3622             p_count   => x_msg_count,
3623             p_data    => x_msg_data
3624       );
3625 END Update_Task;
3626 
3627 --------------------------------------------------------------------
3628 -- PROCEDURE
3629 --    Update_Tasks_in_Planning
3630 --
3631 -- PURPOSE
3632 --    To update visit task when in planning status
3633 --------------------------------------------------------------------
3634 
3635 PROCEDURE Update_Tasks_in_Planning(
3636   p_api_version      IN            NUMBER  := 1.0,
3637   p_init_msg_list    IN            VARCHAR2:= FND_API.G_FALSE,
3638   p_commit           IN            VARCHAR2:= FND_API.G_FALSE,
3639   p_validation_level IN            NUMBER  := FND_API.G_VALID_LEVEL_FULL,
3640   p_module_type      IN            VARCHAR2:= 'JSP',
3641   p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
3642   x_return_status       OUT NOCOPY VARCHAR2,
3643   x_msg_count           OUT NOCOPY NUMBER,
3644   x_msg_data            OUT NOCOPY VARCHAR2
3645 
3646 ) IS
3647    L_API_VERSION CONSTANT NUMBER := 1.0;
3648    L_API_NAME    CONSTANT VARCHAR2(30) := 'Update_Tasks_in_Planning';
3649    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
3650    l_return_status        VARCHAR2(1);
3651    l_msg_data             VARCHAR2(2000);
3652    l_msg_count            NUMBER;
3653    l_count                NUMBER;
3654    l_workorder_rec        AHL_PRD_WORKORDER_PVT.prd_workorder_rec;
3655    l_workoper_tbl         AHL_PRD_WORKORDER_PVT.prd_workoper_tbl;
3656 
3657 -- To find visit related information
3658 CURSOR c_Visit (p_visit_id IN NUMBER) IS
3659  SELECT ROW_ID                ,
3660         VISIT_ID              ,
3661         VISIT_NUMBER          ,
3662         OBJECT_VERSION_NUMBER ,
3663         LAST_UPDATE_DATE      ,
3664         LAST_UPDATED_BY       ,
3665         CREATION_DATE         ,
3666         CREATED_BY            ,
3667         LAST_UPDATE_LOGIN     ,
3668         ORGANIZATION_ID       ,
3669         DEPARTMENT_ID         ,
3670         STATUS_CODE           ,
3671         START_DATE_TIME       ,
3672         VISIT_TYPE_CODE       ,
3673         SIMULATION_PLAN_ID    ,
3674         ITEM_INSTANCE_ID      ,
3675         ITEM_ORGANIZATION_ID  ,
3676         INVENTORY_ITEM_ID     ,
3677         ASSO_PRIMARY_VISIT_ID ,
3678         SIMULATION_DELETE_FLAG,
3679         TEMPLATE_FLAG         ,
3680         OUT_OF_SYNC_FLAG      ,
3681         PROJECT_FLAG          ,
3682         PROJECT_ID            ,
3683         VISIT_NAME            ,
3684         DESCRIPTION           ,
3685         SERVICE_REQUEST_ID    ,
3686         SPACE_CATEGORY_CODE   ,
3687         CLOSE_DATE_TIME       ,
3688         SCHEDULE_DESIGNATOR   ,
3689         PRICE_LIST_ID         ,
3690         ESTIMATED_PRICE       ,
3691         ACTUAL_PRICE          ,
3692         OUTSIDE_PARTY_FLAG    ,
3693         ANY_TASK_CHG_FLAG     ,
3694         ATTRIBUTE_CATEGORY    ,
3695         ATTRIBUTE1            ,
3696         ATTRIBUTE2            ,
3697         ATTRIBUTE3            ,
3698         ATTRIBUTE4            ,
3699         ATTRIBUTE5            ,
3700         ATTRIBUTE6            ,
3701         ATTRIBUTE7            ,
3702         ATTRIBUTE8            ,
3703         ATTRIBUTE9            ,
3704         ATTRIBUTE10           ,
3705         ATTRIBUTE11           ,
3706         ATTRIBUTE12           ,
3707         ATTRIBUTE13           ,
3708         ATTRIBUTE14           ,
3709         ATTRIBUTE15
3710    FROM Ahl_Visits_VL
3711    WHERE VISIT_ID = p_visit_id;
3712 
3713   l_Visit_rec c_Visit%ROWTYPE;
3714   l_Task_rec  AHL_VWP_RULES_PVT.Task_Rec_Type default p_x_task_rec;
3715 
3716     Cursor c_visit_task_det(p_visit_task_id in number)
3717       is
3718       Select ROW_ID        ,
3719     VISIT_TASK_ID          ,
3720     VISIT_TASK_NUMBER      ,
3721     OBJECT_VERSION_NUMBER  ,
3722     CREATION_DATE          ,
3723     CREATED_BY             ,
3724     LAST_UPDATE_DATE       ,
3725     LAST_UPDATED_BY        ,
3726     LAST_UPDATE_LOGIN      ,
3727     VISIT_ID               ,
3728     PROJECT_TASK_ID        ,
3729     COST_PARENT_ID         ,
3730     MR_ROUTE_ID            ,
3731     MR_ID                  ,
3732     DURATION               ,
3733     UNIT_EFFECTIVITY_ID    ,
3734     VISIT_TASK_NAME        ,
3735     DESCRIPTION            ,
3736     START_FROM_HOUR        ,
3737     INVENTORY_ITEM_ID      ,
3738     ITEM_ORGANIZATION_ID   ,
3739     INSTANCE_ID            ,
3740     PRIMARY_VISIT_TASK_ID  ,
3741     SUMMARY_TASK_FLAG      ,
3742     ORIGINATING_TASK_ID    ,
3743     SECURITY_GROUP_ID      ,
3744     SERVICE_REQUEST_ID     ,
3745     TASK_TYPE_CODE         ,
3746     DEPARTMENT_ID          ,
3747     PRICE_LIST_ID          ,
3748     STATUS_CODE            ,
3749     ACTUAL_COST            ,
3750     ESTIMATED_PRICE        ,
3751     ACTUAL_PRICE           ,
3752     ATTRIBUTE_CATEGORY     ,
3753     ATTRIBUTE1             ,
3754     ATTRIBUTE2             ,
3755     ATTRIBUTE3             ,
3756     ATTRIBUTE4             ,
3757     ATTRIBUTE5             ,
3758     ATTRIBUTE6             ,
3759     ATTRIBUTE7             ,
3760     ATTRIBUTE8             ,
3761     ATTRIBUTE9             ,
3762     ATTRIBUTE10            ,
3763     ATTRIBUTE11            ,
3764     ATTRIBUTE12            ,
3765     ATTRIBUTE13            ,
3766     ATTRIBUTE14            ,
3767     ATTRIBUTE15            ,
3768     QUANTITY               , --Added by rnahata for Issue 105
3769     STAGE_ID
3770     from ahl_visit_tasks_vl
3771     where visit_task_id = p_visit_task_id;
3772 
3773  l_old_Task_rec   c_visit_task_det%rowtype;
3774 
3775        -- To find if WIP job is created for the Visit
3776     CURSOR c_job(x_id IN NUMBER) IS
3777      SELECT COUNT(*) FROM AHL_WORKORDERS
3778      WHERE VISIT_ID = x_id
3779      AND MASTER_WORKORDER_FLAG = 'Y'
3780      AND STATUS_CODE = 17;
3781 
3782     CURSOR c_Task_WO(x_task_id IN NUMBER) IS
3783      SELECT * FROM AHL_WORKORDERS
3784      WHERE VISIT_TASK_ID = x_task_id
3785      AND STATUS_CODE = 17;
3786      l_task_workrec c_Task_WO%ROWTYPE;
3787 
3788   -- To find all tasks under this current visit related information
3789     CURSOR c_all_Task (x_id IN NUMBER) IS
3790      SELECT *
3791      FROM Ahl_Visit_Tasks_VL
3792      WHERE VISIT_TASK_ID = x_id;
3793     l_all_Task_rec c_all_Task%ROWTYPE;
3794 
3795     l_workrec AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
3796 
3797 BEGIN
3798    IF (l_log_procedure >= l_log_current_level) THEN
3799        fnd_log.string(l_log_procedure,
3800                       L_DEBUG_KEY ||'.begin',
3801                       'At the start of PL SQL procedure.' ||
3802                       'Visit ID ' || l_task_rec.visit_id ||
3803                       'Visit Task ID ' || l_Task_rec.visit_task_id);
3804    END IF;
3805 
3806    --------------------- initialize -----------------------
3807    SAVEPOINT Update_Tasks_in_Planning;
3808 
3809    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
3810       Fnd_Msg_Pub.initialize;
3811    END IF;
3812 
3813    --  Initialize API return status to success
3814     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
3815 
3816    -- Standard call to check for call compatibility.
3817    IF NOT Fnd_Api.compatible_api_call(
3818          l_api_version,
3819          p_api_version,
3820          l_api_name,
3821          G_PKG_NAME
3822    ) THEN
3823       RAISE Fnd_Api.g_exc_unexpected_error;
3824    END IF;
3825 
3826   -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: validate Service Type attributes, before calling any other update API
3827   AHL_VWP_RULES_PVT.Validate_Service_Type(
3828     p_service_type        => l_task_rec.service_type,
3829     p_module_type         => p_module_type,
3830     p_unit_effectivity_id => l_task_rec.unit_effectivity_id,
3831     p_x_service_type_code => l_task_rec.service_type_code
3832   );
3833 
3834   OPEN c_visit(l_task_rec.visit_id);
3835   FETCH c_visit INTO l_visit_rec;
3836   CLOSE c_visit;
3837 
3838   OPEN c_visit_task_det(l_Task_rec.visit_task_id);
3839   FETCH c_visit_task_det INTO l_old_Task_rec;
3840   CLOSE c_visit_task_det;
3841 
3842   IF (l_log_statement >= l_log_current_level) THEN
3843       fnd_log.string(l_log_statement,
3844                      L_DEBUG_KEY,
3845                      'Task type code = ' || l_old_Task_rec.task_type_code);
3846   END IF;
3847 
3848   IF (l_old_Task_rec.task_type_code <>  'SUMMARY'
3849            AND l_Task_rec.stage_name IS NOT NULL) THEN
3850 
3851     IF (l_log_statement >= l_log_current_level) THEN
3852         fnd_log.string(l_log_statement,
3853                        L_DEBUG_KEY,
3854                        ' Call AHL_VWP_VISITS_STAGES_PVT.VALIDATE_STAGE_UPDATES ');
3855     END IF;
3856     AHL_VWP_VISITS_STAGES_PVT.VALIDATE_STAGE_UPDATES(
3857      P_API_VERSION      =>  1.0,
3858      P_VISIT_ID         =>  l_Task_rec.visit_id,
3859      P_VISIT_TASK_ID    =>  l_Task_rec.visit_task_id,
3860      P_STAGE_NAME       =>  L_task_rec.STAGE_NAME,
3861      X_STAGE_ID         =>  L_task_rec.STAGE_ID,
3862      X_RETURN_STATUS    =>  l_return_status,
3863      X_MSG_COUNT        =>  l_msg_count,
3864      X_MSG_DATA         =>  l_msg_data  );
3865 
3866          IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
3867               x_msg_count := l_msg_count;
3868              x_return_status := Fnd_Api.G_RET_STS_ERROR;
3869               RAISE Fnd_Api.G_EXC_ERROR;
3870          END IF;
3871 END IF;
3872 
3873             -- Code added to make sure that department name to id conversion takes place
3874             -- Irrespective of above API Being Called.
3875       IF (l_task_rec.dept_name IS NOT NULL AND l_task_rec.dept_name <> Fnd_Api.G_MISS_CHAR ) THEN
3876       AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id
3877       (p_organization_id  => l_visit_rec.organization_id,
3878        p_dept_name        => l_task_rec.dept_name,
3879        p_department_id    => NULL,
3880        x_department_id    => l_task_rec.department_id,
3881        x_return_status    => l_return_status,
3882        x_error_msg_code   => l_msg_data);
3883 
3884           IF (NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS)  THEN
3885     Fnd_Message.SET_NAME('AHL','AHL_VWP_DEPT_NOT_EXISTS');
3886     Fnd_Msg_Pub.ADD;
3887                 RAISE Fnd_Api.G_EXC_ERROR;
3888           END IF;
3889 
3890           -- Changes for Post 11.5.10 by cxcheng
3891           Ahl_vwp_rules_pvt.CHECK_DEPARTMENT_SHIFT
3892             ( P_DEPT_ID    => l_task_rec.department_id,
3893                 X_RETURN_STATUS  => l_return_status);
3894 
3895           IF (NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS)  THEN
3896               Fnd_Message.SET_NAME('AHL','AHL_VWP_NO_DEPT_SHIFT');
3897             Fnd_Msg_Pub.ADD;
3898                 RAISE Fnd_Api.G_EXC_ERROR;
3899           END IF;
3900         ELSE
3901           l_task_rec.department_id := NULL;
3902       END IF;
3903 
3904            IF (l_log_statement >= l_log_current_level) THEN
3905                fnd_log.string(l_log_statement,
3906                               L_DEBUG_KEY,
3907                              ' In Update task... ' ||
3908                              ' l_task_rec.department_id '|| l_task_rec.department_id ||
3909                              ' l_old_Task_rec.department_id'|| l_old_Task_rec.department_id);
3910            END IF;
3911 
3912        -- If Task DEPARTMENT is changed after price/cost is estimated,
3913 
3914        IF (NVL(l_task_rec.department_id, -999 ) <> NVL(l_old_Task_rec.department_id, -999)) THEN
3915 
3916     -- If Task DEPARTMENT is changed after price/cost is estimated,
3917     -- the prices associated to Visit and all the Tasks in the visit will be cleared up
3918              OPEN c_job(l_visit_rec.visit_id);
3919              FETCH c_job INTO l_count;
3920              CLOSE c_job;
3921 
3922       IF l_count > 0 THEN
3923           -- To update visit's prices
3924           UPDATE AHL_VISITS_B
3925         SET ACTUAL_PRICE = NULL, ESTIMATED_PRICE = NULL,
3926         OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1
3927           WHERE VISIT_ID = l_visit_rec.visit_id;
3928 
3929           IF (l_log_statement >= l_log_current_level) THEN
3930              fnd_log.string(l_log_statement,
3931                             L_DEBUG_KEY,
3932                             ' After Update Price for Visit');
3933           END IF;
3934 
3935           -- To update all tasks prices of tasks under this visit
3936           OPEN c_all_task(l_visit_rec.visit_id);
3937           LOOP
3938              FETCH c_all_task INTO l_all_task_rec;
3939              EXIT WHEN c_all_task%NOTFOUND;
3940          -- Tasks found for visit
3941          -- To set prices to NULL in case if the visit's department is changed
3942         UPDATE AHL_VISIT_TASKS_B
3943           SET ACTUAL_PRICE = NULL, ESTIMATED_PRICE = NULL,
3944               OBJECT_VERSION_NUMBER = l_all_task_rec.object_version_number + 1
3945         WHERE VISIT_TASK_ID = l_all_task_rec.visit_task_id;
3946           END LOOP;
3947           CLOSE c_all_task;
3948 
3949           IF (l_log_statement >= l_log_current_level) THEN
3950              fnd_log.string(l_log_statement,
3951                             L_DEBUG_KEY,
3952                             ' After Update Price for all Tasks');
3953           END IF;
3954 
3955       END IF;
3956 
3957         -- TASK DEPARTMENT UPDATED THEN
3958         -- Wip job for the current task to be updated with new department
3959         OPEN  c_Task_WO(l_Task_rec.visit_task_id);
3960         FETCH c_Task_WO INTO l_task_workrec;
3961         IF c_Task_WO%FOUND THEN
3962            l_workorder_rec.WORKORDER_ID              := l_task_workrec.workorder_id;
3963            l_workorder_rec.OBJECT_VERSION_NUMBER     := l_task_workrec.object_version_number;
3964            IF l_Task_rec.department_id is NULL THEN
3965                l_workorder_rec.DEPARTMENT_ID    := l_visit_rec.department_id;
3966            ELSE
3967                l_workorder_rec.DEPARTMENT_ID    := l_Task_rec.department_id;
3968            END IF;
3969            CLOSE c_Task_WO;
3970 
3971            IF (l_log_statement >= l_log_current_level) THEN
3972                fnd_log.string(l_log_statement,
3973                               L_DEBUG_KEY,
3974                               'Before Calling AHL_PRD_WORKORDER_PVT.update_job');
3975            END IF;
3976            AHL_PRD_WORKORDER_PVT.update_job
3977             (p_api_version          =>1.0,
3978              p_init_msg_list        =>fnd_api.g_false,
3979              p_commit               =>fnd_api.g_false,
3980              p_validation_level     =>p_validation_level,
3981              p_default              =>fnd_api.g_false,
3982              p_module_type          =>'API',
3983              x_return_status        =>x_return_status,
3984              x_msg_count            =>x_msg_count,
3985              x_msg_data             =>x_msg_data,
3986              p_wip_load_flag        =>'Y',
3987              p_x_prd_workorder_rec  =>l_workorder_rec,
3988              P_X_PRD_WORKOPER_TBL   =>l_workoper_tbl
3989             );
3990 
3991            IF (l_log_statement >= l_log_current_level) THEN
3992                fnd_log.string(l_log_statement,
3993                               L_DEBUG_KEY,
3994                               'After Calling AHL_PRD_WORKORDER_PVT.update_job, Return Status = ' || x_return_status);
3995            END IF;
3996 
3997            IF l_return_status <> Fnd_Api.g_ret_sts_success THEN
3998              RAISE Fnd_Api.G_EXC_ERROR;
3999            END IF;
4000 
4001         --SKPATHAK :: VWPE: ER:12424063 :: 08-JUN-2011 :: close the cursor only if %notfound
4002         ELSE --c_Task_WO%FOUND
4003            CLOSE c_Task_wO;
4004         END IF;
4005 
4006         END IF; -- Check for Dept change
4007 
4008        IF (l_log_statement >= l_log_current_level) THEN
4009            fnd_log.string(l_log_statement,
4010                           L_DEBUG_KEY,
4011                           ': After calling update task for costing changes');
4012        END IF;
4013 
4014     IF l_task_rec.task_type_code = 'SUMMARY' THEN
4015        IF (l_log_statement >= l_log_current_level)THEN
4016            fnd_log.string(l_log_statement,
4017                           L_DEBUG_KEY,
4018                           'Before Calling Update_Summary_Task, TASK TYPE = ' || l_task_rec.task_type_code);
4019        END IF;
4020 
4021                 Update_Summary_Task
4022                 (
4023                  p_api_version      => l_api_version,
4024                  p_init_msg_list    => p_init_msg_list,
4025                  p_commit           => Fnd_Api.g_false,
4026                  p_validation_level => p_validation_level,
4027                  p_module_type      => p_module_type,
4028                  p_x_task_rec       => l_task_rec,
4029                  x_return_status    => l_return_status,
4030                  x_msg_count        => l_msg_count,
4031                  x_msg_data         => l_msg_data
4032                );
4033        IF (l_log_statement >= l_log_current_level)THEN
4034            fnd_log.string(l_log_statement,
4035                           L_DEBUG_KEY,
4036                           'After Calling Update_Summary_Task, Return Status = ' || l_return_status);
4037        END IF;
4038     ELSIF l_task_rec.task_type_code = 'PLANNED' THEN
4039          -- Call AHL_VWP_PLAN_TASKS_PVT
4040 
4041          IF (l_log_statement >= l_log_current_level)THEN
4042              fnd_log.string(l_log_statement,
4043                             L_DEBUG_KEY,
4044                             'Calling Update_Planned_Task, TASK TYPE = ' || l_task_rec.task_type_code);
4045          END IF;
4046 
4047                 AHL_VWP_PLAN_TASKS_PVT.Update_Planned_Task
4048                 (
4049                  p_api_version      => l_api_version,
4050                  p_init_msg_list    => p_init_msg_list,
4051                  p_commit           => Fnd_Api.g_false,
4052                  p_validation_level => p_validation_level,
4053                  p_module_type      => p_module_type,
4054                  p_x_task_rec       => l_task_rec,
4055                  x_return_status    => l_return_status,
4056                  x_msg_count        => l_msg_count,
4057                  x_msg_data         => l_msg_data
4058                );
4059    ELSIF l_task_rec.task_type_code = 'UNPLANNED' THEN
4060          -- Call AHL_VWP_UNPLAN_TASKS_PVT
4061          IF (l_log_statement >= l_log_current_level)THEN
4062              fnd_log.string(l_log_statement,
4063                             L_DEBUG_KEY,
4064                             'Calling Update_Unplanned_Task, TASK TYPE = ' || l_task_rec.task_type_code);
4065          END IF;
4066 
4067          AHL_VWP_UNPLAN_TASKS_PVT.Update_Unplanned_Task
4068          (p_api_version      => l_api_version,
4069           p_init_msg_list    => p_init_msg_list,
4070           p_commit           => Fnd_Api.g_false,
4071           p_validation_level => p_validation_level,
4072           p_module_type      => p_module_type,
4073           p_x_task_rec       => l_task_rec,
4074           x_return_status    => l_return_status,
4075           x_msg_count        => l_msg_count,
4076           x_msg_data         => l_msg_data
4077          );
4078    ELSIF l_task_rec.task_type_code = 'UNASSOCIATED' THEN
4079          -- Call AHL_VWP_UNPLAN_TASKS_PVT
4080          IF (l_log_statement >= l_log_current_level)THEN
4081              fnd_log.string(l_log_statement,
4082                             L_DEBUG_KEY,
4083                             'Before Calling Update_Unassociated_Task');
4084          END IF;
4085 
4086          Update_Unassociated_Task
4087          (p_api_version      => l_api_version,
4088           p_init_msg_list    => p_init_msg_list,
4089           p_commit           => Fnd_Api.g_false,
4090           p_validation_level => p_validation_level,
4091           p_module_type      => p_module_type,
4092           p_x_task_rec       => l_task_rec,
4093           x_return_status    => l_return_status,
4094           x_msg_count        => l_msg_count,
4095           x_msg_data         => l_msg_data
4096          );
4097 
4098          IF (l_log_statement >= l_log_current_level)THEN
4099              fnd_log.string(l_log_statement,
4100                             L_DEBUG_KEY,
4101                              'After Calling Update_Unassociated_Task, Return Status = ' ||l_return_status );
4102          END IF;
4103    END IF;
4104 
4105    -- Added to raise errors after calling respective API's
4106    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4107      RAISE FND_API.G_EXC_ERROR;
4108    END IF;
4109 
4110         --------------------------------------------------------------------------
4111         ----                     START   11.5.10 CHANGES FOR COSTING          ----
4112         --------------------------------------------------------------------------
4113 
4114        -- Conversion is done to make sure that the number to id conversion takes place
4115        -- Irrespective of above Update API Calls.
4116        -- Convert cost parent number to id
4117        IF (p_x_task_rec.cost_parent_number IS NOT NULL AND
4118       p_x_task_rec.cost_parent_number <> Fnd_Api.G_MISS_NUM ) THEN
4119 
4120       IF (l_log_statement >= l_log_current_level)THEN
4121                 fnd_log.string(l_log_statement,
4122                                L_DEBUG_KEY,
4123                                'Calling AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID ');
4124       END IF;
4125 
4126       AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
4127       (p_visit_task_id     => p_x_task_rec.cost_parent_id,
4128        p_visit_task_number => p_x_task_rec.cost_parent_number,
4129        p_visit_id          => p_x_task_rec.visit_id,
4130        x_visit_task_id     => p_x_task_rec.cost_parent_id,
4131        x_return_status     => l_return_status,
4132        x_error_msg_code    => l_msg_data);
4133 
4134           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4135              RAISE FND_API.G_EXC_ERROR;
4136           END IF;
4137          ELSE
4138            p_x_task_rec.cost_parent_id := null;
4139        END IF;
4140 
4141         -- Updating Cost Parent should update the any_task_chg_flag
4142         IF (NVL(p_x_task_rec.cost_parent_id, -999 ) <> NVL(l_old_Task_rec.cost_parent_id, -999)) THEN
4143          IF l_visit_rec.any_task_chg_flag = 'N' THEN
4144             IF (l_log_statement >= l_log_current_level)THEN
4145                 fnd_log.string(l_log_statement,
4146                                L_DEBUG_KEY,
4147                                'Before Calling AHL_VWP_RULES_PVT.Update_Visit_Task_Flag ' ||
4148                                'Any_task_chg_flag = ' ||l_visit_rec.any_task_chg_flag);
4149             END IF;
4150 
4151             AHL_VWP_RULES_PVT.Update_Visit_Task_Flag
4152                (p_visit_id      => l_old_Task_rec.visit_id,
4153                 p_flag          => 'Y',
4154                 x_return_status => x_return_status);
4155 
4156             IF (l_log_statement >= l_log_current_level)THEN
4157                 fnd_log.string(l_log_statement,
4158                                L_DEBUG_KEY,
4159                                'After Calling AHL_VWP_RULES_PVT.Update_Visit_Task_Flag, Return Status = ' ||x_return_status);
4160             END IF;
4161 
4162             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4163                RAISE FND_API.G_EXC_ERROR;
4164             END IF;
4165          END IF;
4166         END IF; -- for cost_parent_id check
4167 
4168         --------------------------------------------------------------------------
4169         ----                  END   11.5.10 CHANGES FOR COSTING               ----
4170         --------------------------------------------------------------------------
4171 
4172 ------------------------End of API Body------------------------------------
4173    --Standard check to count messages
4174    l_msg_count := Fnd_Msg_Pub.count_msg;
4175 
4176    IF l_msg_count > 0 THEN
4177       x_msg_count := l_msg_count;
4178       x_return_status := Fnd_Api.G_RET_STS_ERROR;
4179       RAISE Fnd_Api.G_EXC_ERROR;
4180    END IF;
4181 
4182    --Standard check for commit
4183    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
4184       COMMIT;
4185    END IF;
4186 
4187    IF (l_log_procedure >= l_log_current_level) THEN
4188          fnd_log.string(l_log_procedure,
4189                         L_DEBUG_KEY ||'.end',
4190                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
4191    END IF;
4192 
4193 EXCEPTION
4194    WHEN Fnd_Api.g_exc_error THEN
4195       ROLLBACK TO Update_Tasks_in_Planning;
4196       x_return_status := Fnd_Api.g_ret_sts_error;
4197       Fnd_Msg_Pub.count_and_get (
4198             p_encoded => Fnd_Api.g_false,
4199             p_count   => x_msg_count,
4200             p_data    => x_msg_data
4201       );
4202    WHEN Fnd_Api.g_exc_unexpected_error THEN
4203       ROLLBACK TO Update_Tasks_in_Planning;
4204       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
4205       Fnd_Msg_Pub.count_and_get (
4206             p_encoded => Fnd_Api.g_false,
4207             p_count   => x_msg_count,
4208             p_data    => x_msg_data
4209       );
4210    WHEN OTHERS THEN
4211       ROLLBACK TO Update_Tasks_in_Planning;
4212       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
4213       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
4214     THEN
4215          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
4216       END IF;
4217       Fnd_Msg_Pub.count_and_get (
4218             p_encoded => Fnd_Api.g_false,
4219             p_count   => x_msg_count,
4220             p_data    => x_msg_data
4221       );
4222 
4223 END Update_Tasks_in_Planning;
4224 
4225 --------------------------------------------------------------------
4226 -- PROCEDURE
4227 --    Update_Tasks_in_Production
4228 --
4229 -- PURPOSE
4230 --    To update visit task which are relaesed
4231 --------------------------------------------------------------------
4232 
4233 PROCEDURE Update_Tasks_in_Production(
4234   p_api_version      IN            NUMBER  := 1.0,
4235   p_init_msg_list    IN            VARCHAR2:=  FND_API.G_FALSE,
4236   p_commit           IN            VARCHAR2:=  FND_API.G_FALSE,
4237   p_validation_level IN            NUMBER  :=  FND_API.G_VALID_LEVEL_FULL,
4238   p_module_type      IN            VARCHAR2:=  'JSP',
4239   p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
4240   x_return_status       OUT NOCOPY VARCHAR2,
4241   x_msg_count           OUT NOCOPY NUMBER,
4242   x_msg_data            OUT NOCOPY VARCHAR2
4243 
4244 ) IS
4245 
4246    L_API_VERSION CONSTANT NUMBER := 1.0;
4247    L_API_NAME    CONSTANT VARCHAR2(30) := 'Update_Tasks_in_Production';
4248    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
4249    l_Task_rec             AHL_VWP_RULES_PVT.Task_Rec_Type default p_x_task_rec;
4250 
4251    Cursor c_visit_task_det(p_visit_task_id in number)
4252    is
4253    Select ROW_ID                 ,
4254   VISIT_TASK_ID          ,
4255   VISIT_TASK_NUMBER      ,
4256   OBJECT_VERSION_NUMBER  ,
4257   CREATION_DATE          ,
4258   CREATED_BY             ,
4259   LAST_UPDATE_DATE       ,
4260   LAST_UPDATED_BY        ,
4261   LAST_UPDATE_LOGIN      ,
4262   VISIT_ID               ,
4263   PROJECT_TASK_ID        ,
4264   COST_PARENT_ID         ,
4265   MR_ROUTE_ID            ,
4266   MR_ID                  ,
4267   DURATION               ,
4268   UNIT_EFFECTIVITY_ID    ,
4269   VISIT_TASK_NAME        ,
4270   DESCRIPTION            ,
4271   START_FROM_HOUR        ,
4272   -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Fetch past dates too
4273   PAST_TASK_START_DATE   ,
4274   PAST_TASK_END_DATE     ,
4275   INVENTORY_ITEM_ID      ,
4276   ITEM_ORGANIZATION_ID   ,
4277   INSTANCE_ID            ,
4278   PRIMARY_VISIT_TASK_ID  ,
4279   SUMMARY_TASK_FLAG      ,
4280   ORIGINATING_TASK_ID    ,
4281   SECURITY_GROUP_ID      ,
4282   SERVICE_REQUEST_ID     ,
4283   TASK_TYPE_CODE         ,
4284   SERVICE_TYPE_CODE      , -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: fetch Service Type code too
4285   DEPARTMENT_ID          ,
4286   PRICE_LIST_ID          ,
4287   STATUS_CODE            ,
4288   ACTUAL_COST            ,
4289   ESTIMATED_PRICE        ,
4290   ACTUAL_PRICE           ,
4291   ATTRIBUTE_CATEGORY     ,
4292   ATTRIBUTE1             ,
4293   ATTRIBUTE2             ,
4294   ATTRIBUTE3             ,
4295   ATTRIBUTE4             ,
4296   ATTRIBUTE5             ,
4297   ATTRIBUTE6             ,
4298   ATTRIBUTE7             ,
4299   ATTRIBUTE8             ,
4300   ATTRIBUTE9             ,
4301   ATTRIBUTE10            ,
4302   ATTRIBUTE11            ,
4303   ATTRIBUTE12            ,
4304   ATTRIBUTE13            ,
4305   ATTRIBUTE14            ,
4306   ATTRIBUTE15            ,
4307   QUANTITY               , --Added by rnahata for Issue 105
4308   STAGE_ID
4309  from ahl_visit_tasks_vl
4310  where visit_task_id = p_visit_task_id;
4311 
4312  l_old_Task_rec   c_visit_task_det%rowtype;
4313 
4314  Cursor c_any_task_flg(p_visit_id in number)
4315  is
4316  Select any_task_chg_flag
4317  from   ahl_visits_b
4318  where visit_id = p_visit_id;
4319 
4320  l_any_task_chg_flag ahl_visits_b.any_task_chg_flag%type;
4321 
4322    l_return_status        VARCHAR2(1);
4323    l_cost_parent_id       NUMBER;
4324    l_msg_data             VARCHAR2(2000);
4325    l_msg_count          NUMBER;
4326 
4327 BEGIN
4328 
4329    IF (l_log_procedure >= l_log_current_level) THEN
4330        fnd_log.string(l_log_procedure,
4331                       L_DEBUG_KEY ||'.begin',
4332                       'At the start of PL SQL procedure.' ||
4333                       'Visit Task Id = ' || l_Task_rec.visit_task_id );
4334    END IF;
4335 
4336    --------------------- initialize -----------------------
4337    SAVEPOINT Update_Tasks_in_Production;
4338 
4339    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
4340       Fnd_Msg_Pub.initialize;
4341    END IF;
4342 
4343    --  Initialize API return status to success
4344     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
4345 
4346    -- Standard call to check for call compatibility.
4347    IF NOT Fnd_Api.compatible_api_call(
4348          l_api_version,
4349          p_api_version,
4350          l_api_name,
4351          G_PKG_NAME
4352    ) THEN
4353       RAISE Fnd_Api.g_exc_unexpected_error;
4354    END IF;
4355 
4356   OPEN c_visit_task_det(l_Task_rec.visit_task_id);
4357   FETCH c_visit_task_det INTO l_old_Task_rec;
4358   CLOSE c_visit_task_det;
4359 
4360   IF (l_Task_rec.cost_parent_number IS NOT NULL AND
4361             l_Task_rec.cost_parent_number <> Fnd_Api.G_MISS_NUM ) THEN
4362 
4363             AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
4364                  (p_visit_task_id      => l_Task_rec.cost_parent_id,
4365                   p_visit_task_number  => l_Task_rec.cost_parent_number,
4366                   p_visit_id           => l_Task_rec.visit_id,
4367                   x_visit_task_id      => l_cost_parent_id,
4368                   x_return_status      => l_return_status,
4369                   x_error_msg_code     => l_msg_data);
4370 
4371             -- PRAKKUM :: FP  PIE :: 13-OCT-2010 :: Pass the cost parent to the in out param
4372             p_x_task_rec.cost_parent_id := l_cost_parent_id;
4373 
4374             IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
4375             THEN
4376             Fnd_Message.SET_NAME('AHL','AHL_VWP_PARENT_NOT_EXISTS');
4377                 Fnd_Msg_Pub.ADD;
4378                 RAISE Fnd_Api.g_exc_error;
4379             END IF;
4380              --Assign the returned value
4381              l_Task_rec.cost_parent_id := l_cost_parent_id;
4382    ELSE
4383              l_Task_rec.cost_parent_id := NULL;
4384    END IF;
4385 
4386   -- To Check for cost parent task id not forming loop
4387    IF (l_Task_rec.cost_parent_id IS NOT NULL AND
4388         l_Task_rec.cost_parent_id <> Fnd_Api.G_MISS_NUM ) THEN
4389 
4390         AHL_VWP_RULES_PVT.Check_Cost_Parent_Loop
4391             (p_visit_id        => l_Task_rec.visit_id,
4392              p_visit_task_id   => l_Task_rec.visit_task_id ,
4393              p_cost_parent_id  => l_Task_rec.cost_parent_id
4394              );
4395    END IF;
4396 
4397     -- Validate target quantity
4398     IF (l_Task_rec.target_qty IS NOT NULL           AND
4399         l_Task_rec.target_qty <> Fnd_Api.G_MISS_NUM AND
4400         l_Task_rec.target_qty < 0) THEN
4401         FND_MESSAGE.set_name(G_APP_NAME, 'AHL_CMP_TARGET_QTY_INVLD');
4402         FND_MSG_PUB.add;
4403         RAISE FND_API.G_EXC_ERROR;
4404     END IF;
4405 
4406     IF (l_log_statement >= l_log_current_level) THEN
4407         fnd_log.string(l_log_statement,
4408                        L_DEBUG_KEY,
4409                       'Before Calling Ahl_Visit_Tasks_Pkg.UPDATE_ROW');
4410     END IF;
4411 
4412     Ahl_Visit_Tasks_Pkg.UPDATE_ROW (
4413       X_VISIT_TASK_ID         => l_task_rec.visit_task_id,
4414       X_VISIT_TASK_NUMBER     => l_old_Task_rec.visit_task_number,
4415       X_OBJECT_VERSION_NUMBER => l_task_rec.OBJECT_VERSION_NUMBER + 1,
4416       X_VISIT_ID              => l_old_Task_rec.visit_id,
4417       X_PROJECT_TASK_ID       => l_old_Task_rec.project_task_id,
4418       X_COST_PARENT_ID        => l_task_rec.cost_parent_id,
4419       X_MR_ROUTE_ID           => l_old_Task_rec.mr_route_id,
4420       X_MR_ID                 => l_old_Task_rec.mr_id,
4421       X_DURATION              => l_task_rec.duration,
4422       X_UNIT_EFFECTIVITY_ID   => l_old_Task_rec.unit_effectivity_id,
4423       X_START_FROM_HOUR       => l_task_rec.start_from_hour,
4424       X_INVENTORY_ITEM_ID     => l_old_Task_rec.inventory_item_id,
4425       X_ITEM_ORGANIZATION_ID  => l_old_Task_rec.item_organization_id,
4426       X_INSTANCE_ID           => l_Task_rec.instance_id,
4427       X_PRIMARY_VISIT_TASK_ID => l_old_Task_rec.primary_visit_task_id,
4428       X_ORIGINATING_TASK_ID   => l_task_rec.originating_task_id,
4429       X_SERVICE_REQUEST_ID    => l_task_rec.service_request_id,
4430       X_TASK_TYPE_CODE        => l_task_rec.task_type_code,
4431       -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: update Service Type code too, as this modified handler requires it
4432       X_SERVICE_TYPE_CODE     => l_old_Task_rec.service_type_code,
4433       X_DEPARTMENT_ID         => l_task_rec.department_id,
4434       X_SUMMARY_TASK_FLAG     => 'N',
4435       X_PRICE_LIST_ID         => l_old_Task_rec.price_list_id,
4436       X_STATUS_CODE           => l_old_Task_rec.status_code,
4437       X_ESTIMATED_PRICE       => l_old_Task_rec.estimated_price,
4438       X_ACTUAL_PRICE          => l_old_Task_rec.actual_price,
4439       X_ACTUAL_COST           => l_old_Task_rec.actual_cost,
4440 --  Post 11.5.10 Changes by Senthil.
4441       X_STAGE_ID              => l_Task_rec.stage_id,
4442    -- Added cxcheng POST11510--------------
4443    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010
4444    -- Pass past dates too, and if it is null, pass null for all the 4 columns below
4445       X_START_DATE_TIME       => l_old_Task_rec.PAST_TASK_START_DATE,
4446       X_END_DATE_TIME         => l_old_Task_rec.PAST_TASK_END_DATE,
4447       X_PAST_TASK_START_DATE  => l_old_Task_rec.PAST_TASK_START_DATE,
4448       X_PAST_TASK_END_DATE    => l_old_Task_rec.PAST_TASK_END_DATE,
4449       --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
4450       X_TARGET_QTY            => l_Task_rec.target_qty,
4451 
4452    -- manisaga commented the attribute from from l_old_task_rec and and added from
4453    -- l_task_rec for DFF implementation on 19-Feb-2010  --- Start
4454    /*
4455       X_ATTRIBUTE_CATEGORY    => l_old_Task_rec.ATTRIBUTE_CATEGORY,
4456       X_ATTRIBUTE1            => l_old_Task_rec.ATTRIBUTE1,
4457       X_ATTRIBUTE2            => l_old_Task_rec.ATTRIBUTE2,
4458       X_ATTRIBUTE3            => l_old_Task_rec.ATTRIBUTE3,
4459       X_ATTRIBUTE4            => l_old_Task_rec.ATTRIBUTE4,
4460       X_ATTRIBUTE5            => l_old_Task_rec.ATTRIBUTE5,
4461       X_ATTRIBUTE6            => l_old_Task_rec.ATTRIBUTE6,
4462       X_ATTRIBUTE7            => l_old_Task_rec.ATTRIBUTE7,
4463       X_ATTRIBUTE8            => l_old_Task_rec.ATTRIBUTE8,
4464       X_ATTRIBUTE9            => l_old_Task_rec.ATTRIBUTE9,
4465       X_ATTRIBUTE10           => l_old_Task_rec.ATTRIBUTE10,
4466       X_ATTRIBUTE11           => l_old_Task_rec.ATTRIBUTE11,
4467       X_ATTRIBUTE12           => l_old_Task_rec.ATTRIBUTE12,
4468       X_ATTRIBUTE13           => l_old_Task_rec.ATTRIBUTE13,
4469       X_ATTRIBUTE14           => l_old_Task_rec.ATTRIBUTE14,
4470       X_ATTRIBUTE15           => l_old_Task_rec.ATTRIBUTE15,
4471    */
4472       X_ATTRIBUTE_CATEGORY    => l_task_rec.ATTRIBUTE_CATEGORY,
4473       X_ATTRIBUTE1            => l_task_rec.ATTRIBUTE1,
4474       X_ATTRIBUTE2            => l_task_rec.ATTRIBUTE2,
4475       X_ATTRIBUTE3            => l_task_rec.ATTRIBUTE3,
4476       X_ATTRIBUTE4            => l_task_rec.ATTRIBUTE4,
4477       X_ATTRIBUTE5            => l_task_rec.ATTRIBUTE5,
4478       X_ATTRIBUTE6            => l_task_rec.ATTRIBUTE6,
4479       X_ATTRIBUTE7            => l_task_rec.ATTRIBUTE7,
4480       X_ATTRIBUTE8            => l_task_rec.ATTRIBUTE8,
4481       X_ATTRIBUTE9            => l_task_rec.ATTRIBUTE9,
4482       X_ATTRIBUTE10           => l_task_rec.ATTRIBUTE10,
4483       X_ATTRIBUTE11           => l_task_rec.ATTRIBUTE11,
4484       X_ATTRIBUTE12           => l_task_rec.ATTRIBUTE12,
4485       X_ATTRIBUTE13           => l_task_rec.ATTRIBUTE13,
4486       X_ATTRIBUTE14           => l_task_rec.ATTRIBUTE14,
4487       X_ATTRIBUTE15           => l_task_rec.ATTRIBUTE15,
4488    -- manisaga commented the attribute from from l_old_task_rec and and added from
4489    -- l_task_rec for DFF implementation on 19-Feb-2010  --- End
4490 
4491       X_VISIT_TASK_NAME       => l_task_rec.visit_task_name,
4492       X_DESCRIPTION           => l_task_rec.description,
4493       X_QUANTITY              => l_old_Task_rec.quantity, -- Added by rnahata for Issue 105
4494       X_LAST_UPDATE_DATE      => SYSDATE,
4495       X_LAST_UPDATED_BY       => Fnd_Global.USER_ID,
4496       X_LAST_UPDATE_LOGIN     => Fnd_Global.LOGIN_ID );
4497 
4498     IF (l_log_statement >= l_log_current_level) THEN
4499         fnd_log.string(l_log_statement,
4500                        L_DEBUG_KEY,
4501                       'After Calling Ahl_Visit_Tasks_Pkg.UPDATE_ROW');
4502     END IF;
4503 
4504    -- Added cxcheng POST11510--------------
4505    --Now adjust the times derivation for task
4506    IF (l_log_statement >= l_log_current_level) THEN
4507        fnd_log.string(l_log_statement,
4508                       L_DEBUG_KEY,
4509                      'Before Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times');
4510    END IF;
4511 
4512    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Call Adjust_Task_Times only if past date is null
4513    IF l_old_Task_rec.PAST_TASK_START_DATE IS NULL THEN
4514      AHL_VWP_TIMES_PVT.Adjust_Task_Times(p_api_version      => 1.0,
4515                                          p_init_msg_list    => Fnd_Api.G_FALSE,
4516                                          p_commit           => Fnd_Api.G_FALSE,
4517                                          p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
4518                                          x_return_status    => l_return_status,
4519                                          x_msg_count        => l_msg_count,
4520                                          x_msg_data         => l_msg_data,
4521                                          p_task_id          => l_task_rec.visit_task_id);
4522    END IF;
4523 
4524    IF (l_log_statement >= l_log_current_level) THEN
4525        fnd_log.string(l_log_statement,
4526                       L_DEBUG_KEY,
4527                      'After Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times, Return Status = '|| l_return_status );
4528    END IF;
4529 
4530    --Standard check to count messages
4531    l_msg_count := Fnd_Msg_Pub.count_msg;
4532 
4533    IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
4534       x_msg_count := l_msg_count;
4535       x_return_status := Fnd_Api.G_RET_STS_ERROR;
4536       RAISE Fnd_Api.G_EXC_ERROR;
4537    END IF;
4538 
4539 IF NVL(l_task_rec.cost_parent_id,-30) <> NVL(l_old_Task_rec.cost_parent_id,-30)
4540 THEN
4541   OPEN c_any_task_flg(l_old_Task_rec.visit_id);
4542   FETCH c_any_task_flg INTO l_any_task_chg_flag;
4543   CLOSE c_any_task_flg;
4544 
4545   IF l_any_task_chg_flag = 'N' THEN
4546           AHL_VWP_RULES_PVT.Update_Visit_Task_Flag
4547     (p_visit_id      => l_old_Task_rec.visit_id,
4548      p_flag          => 'Y',
4549      x_return_status => x_return_status);
4550   END IF;
4551 END IF;
4552 
4553    --Standard check to count messages
4554    l_msg_count := Fnd_Msg_Pub.count_msg;
4555 
4556    IF l_msg_count > 0 THEN
4557       x_msg_count := l_msg_count;
4558       x_return_status := Fnd_Api.G_RET_STS_ERROR;
4559       RAISE Fnd_Api.G_EXC_ERROR;
4560    END IF;
4561 
4562    --Standard check for commit
4563    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
4564       COMMIT;
4565    END IF;
4566 
4567    IF (l_log_procedure >= l_log_current_level) THEN
4568          fnd_log.string(l_log_procedure,
4569                         L_DEBUG_KEY ||'.end',
4570                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
4571    END IF;
4572 EXCEPTION
4573    WHEN Fnd_Api.g_exc_error THEN
4574       ROLLBACK TO Update_Tasks_in_Production;
4575       x_return_status := Fnd_Api.g_ret_sts_error;
4576       Fnd_Msg_Pub.count_and_get (
4577             p_encoded => Fnd_Api.g_false,
4578             p_count   => x_msg_count,
4579             p_data    => x_msg_data
4580       );
4581    WHEN Fnd_Api.g_exc_unexpected_error THEN
4582       ROLLBACK TO Update_Tasks_in_Production;
4583       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
4584       Fnd_Msg_Pub.count_and_get (
4585             p_encoded => Fnd_Api.g_false,
4586             p_count   => x_msg_count,
4587             p_data    => x_msg_data
4588       );
4589    WHEN OTHERS THEN
4590       ROLLBACK TO Update_Tasks_in_Production;
4591       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
4592       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
4593     THEN
4594          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
4595       END IF;
4596       Fnd_Msg_Pub.count_and_get (
4597             p_encoded => Fnd_Api.g_false,
4598             p_count   => x_msg_count,
4599             p_data    => x_msg_data
4600       );
4601 END Update_Tasks_in_Production;
4602 
4603 --------------------------------------------------------------------
4604 -- PROCEDURE
4605 --    Update_Unassociated_Task
4606 --
4607 -- PURPOSE
4608 --    To update Unassociated task for the Maintainance visit.
4609 --------------------------------------------------------------------
4610 PROCEDURE Update_Unassociated_Task (
4611    p_api_version      IN            NUMBER,
4612    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
4613    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
4614    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
4615    p_module_type      IN            VARCHAR2  := 'JSP',
4616    p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
4617    x_return_status       OUT NOCOPY VARCHAR2,
4618    x_msg_count           OUT NOCOPY NUMBER,
4619    x_msg_data            OUT NOCOPY VARCHAR2
4620 )
4621 IS
4622    L_API_VERSION CONSTANT NUMBER := 1.0;
4623    L_API_NAME    CONSTANT VARCHAR2(30) := 'Update_Unassociated_Task';
4624    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
4625    -- local variables defined for the procedure
4626    l_task_rec             AHL_VWP_RULES_PVT.Task_Rec_Type := p_x_task_rec;
4627    l_return_status        VARCHAR2(1);
4628    l_msg_data             VARCHAR2(2000);
4629    l_msg_count            NUMBER;
4630    l_serial_ID            NUMBER;
4631    l_cost_parent_id       NUMBER;
4632    l_originating_task_id  NUMBER;
4633    l_department_id        NUMBER;
4634    l_planned_order_flag   VARCHAR2(1);
4635    l_entl_rec_tbl         AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type; --salogan added for supplier warranty
4636 
4637    -- To find task related information
4638    CURSOR c_Task (x_id IN NUMBER) IS
4639       SELECT * FROM  Ahl_Visit_Tasks_VL
4640       WHERE  VISIT_TASK_ID = x_id;
4641    c_Task_rec    c_Task%ROWTYPE;
4642    c_upd_Task_rec    c_Task%ROWTYPE;
4643 
4644    -- To find visit related information
4645    CURSOR c_Visit (x_id IN NUMBER) IS
4646       SELECT * FROM Ahl_Visits_VL
4647       WHERE  VISIT_ID = x_id;
4648    c_Visit_rec    c_Visit%ROWTYPE;
4649 
4650  BEGIN
4651    IF (l_log_procedure >= l_log_current_level) THEN
4652       fnd_log.string(l_log_procedure,
4653                      L_DEBUG_KEY ||'.begin',
4654                      'At the start of PL SQL procedure.');
4655    END IF;
4656 
4657    --------------------- initialize -----------------------
4658    SAVEPOINT Update_Unassociated_Task;
4659 
4660    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
4661       Fnd_Msg_Pub.initialize;
4662    END IF;
4663 
4664    --  Initialize API return status to success
4665     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
4666 
4667    -- Standard call to check for call compatibility.
4668    IF NOT Fnd_Api.compatible_api_call(
4669          l_api_version,
4670          p_api_version,
4671          l_api_name,
4672          G_PKG_NAME
4673    ) THEN
4674       RAISE Fnd_Api.g_exc_unexpected_error;
4675    END IF;
4676 
4677    ---------------------------------------------- Start----------------------------------------------------------
4678    OPEN c_Visit(l_Task_rec.visit_id);
4679    FETCH c_Visit INTO c_Visit_rec;
4680    CLOSE c_Visit;
4681 
4682    OPEN c_Task(l_Task_rec.visit_task_id);
4683    FETCH c_Task INTO c_Task_rec;
4684    CLOSE c_Task;
4685 
4686    IF (l_log_statement >= l_log_current_level) THEN
4687        fnd_log.string(l_log_statement,
4688                       L_DEBUG_KEY,
4689                       ': Visit Id/Task Id  = ' || l_task_rec.visit_id || '-' || l_task_rec.visit_task_id ||
4690                       ': Inventory Id /org/name =' || l_task_rec.inventory_item_id || '-' || l_task_rec.item_organization_id || '-' || l_task_rec.item_name ||
4691                       ': Cost Id -- Number=' || l_task_rec.cost_parent_id || '**' || l_task_rec.cost_parent_number ||
4692                       ': Originating Id/Number=' || l_task_rec.originating_task_id  || '**' || l_task_rec.orginating_task_number ||
4693                       ': Object version number = ' || l_task_rec.object_version_number ||
4694                       ': Duration from record = ' || l_task_rec.duration ||
4695                       ': Visit start from hour/duration=' || '-' || l_task_rec.start_from_hour || '-' || l_task_rec.duration ||
4696                       ': Task Type code/value=' ||  l_task_rec.task_type_code || '-' || l_task_rec.task_type_value ||
4697                       ': department_id = ' ||  l_task_rec.department_id );
4698    END IF;
4699 
4700   ----------- Start defining and validate all LOVs on Create Visit's Task UI Screen---
4701      --
4702      -- For DEPARTMENT
4703      -- Convert department name to department id
4704      IF (l_task_rec.dept_name IS NOT NULL AND l_task_rec.dept_name <> Fnd_Api.G_MISS_CHAR ) THEN
4705 
4706           AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id
4707                 (p_organization_id  => c_visit_rec.organization_id,
4708                  p_dept_name        => l_task_rec.dept_name,
4709                  p_department_id    => NULL,
4710                  x_department_id    => l_department_id,
4711                  x_return_status    => l_return_status,
4712                  x_error_msg_code   => l_msg_data);
4713 
4714           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
4715           THEN
4716               Fnd_Message.SET_NAME('AHL','AHL_VWP_DEPT_NOT_EXISTS');
4717               Fnd_Msg_Pub.ADD;
4718               RAISE Fnd_Api.G_EXC_ERROR;
4719           END IF;
4720 
4721           --Assign the returned value
4722           l_task_rec.department_id := l_department_id;
4723 
4724     END IF;
4725 
4726     IF (l_log_statement >= l_log_current_level) THEN
4727         fnd_log.string(l_log_statement,
4728                        L_DEBUG_KEY,
4729                        ': Dept ID= ' || l_Task_rec.department_id ||
4730                        ': Serial Number= ' || l_Task_rec.serial_number);
4731 
4732     END IF;
4733      --
4734      -- For SERIAL NUMBER
4735      -- Convert serial number to instance/ serial id
4736       IF (l_Task_rec.serial_number IS NOT NULL AND
4737               l_Task_rec.serial_number <> Fnd_Api.G_MISS_CHAR) THEN
4738 
4739               IF (l_log_statement >= l_log_current_level) THEN
4740                   fnd_log.string(l_log_statement,
4741                                  L_DEBUG_KEY,
4742                                  ' Calling  AHL_VWP_RULES_PVT.Check_Serial_Name_Or_Id' );
4743               END IF;
4744 
4745               AHL_VWP_RULES_PVT.Check_Serial_Name_Or_Id
4746                    (p_item_id          => l_Task_rec.inventory_item_id,
4747                     p_org_id           => l_Task_rec.item_organization_id,
4748                     p_serial_id        => l_Task_rec.instance_id,
4749                     p_serial_number    => l_Task_rec.serial_number,
4750                     x_serial_id        => l_serial_id,
4751                     x_return_status    => l_return_status,
4752                     x_error_msg_code   => l_msg_data);
4753 
4754           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success THEN
4755                     Fnd_Message.SET_NAME('AHL','AHL_VWP_SERIAL_NOT_EXISTS');
4756                     Fnd_Msg_Pub.ADD;
4757                     RAISE Fnd_Api.G_EXC_ERROR;
4758           ELSE
4759 
4760               --Assign the returned value
4761               l_Task_rec.instance_id := l_serial_id;
4762 
4763               IF (l_log_statement >= l_log_current_level) THEN
4764                   fnd_log.string(l_log_statement,
4765                                  L_DEBUG_KEY,
4766                                  ': Before UC Check Serial ID= ' || l_Task_rec.instance_id ||
4767                                  ': Before UC Item ID= ' || l_Task_rec.inventory_item_id ||
4768                                  ': Before UC Item Org ID= ' || l_Task_rec.item_organization_id);
4769               END IF;
4770               /* sowsubra - start
4771               IF c_Visit_rec.item_instance_id IS NOT NULL THEN
4772 
4773                       --BEGIN: jeli added for bug 3777720
4774                       IF (AHL_VWP_RULES_PVT.instance_in_config_tree(l_task_rec.visit_id, l_task_rec.instance_id) = FND_API.G_RET_STS_ERROR) THEN
4775                      --END: jeli added for bug 3777720
4776                         Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_SERIAL');
4777                         Fnd_Msg_Pub.ADD;
4778                         RAISE Fnd_Api.G_EXC_ERROR;
4779                       END IF;
4780               END IF;
4781               sowsubra - end */
4782           END IF;
4783 
4784         END IF;
4785 
4786         IF (l_log_statement >= l_log_current_level) THEN
4787             fnd_log.string(l_log_statement,
4788                            L_DEBUG_KEY,
4789                            ': Serial ID= ' || l_Task_rec.instance_id ||
4790                            ': Cost parent= ' || l_Task_rec.cost_parent_number);
4791         END IF;
4792      --
4793      -- For COST PARENT TASK
4794      -- Convert cost parent number to id
4795       IF (l_Task_rec.cost_parent_number IS NOT NULL AND
4796           l_Task_rec.cost_parent_number <> Fnd_Api.G_MISS_NUM ) THEN
4797 
4798           AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
4799                (p_visit_task_id      => l_Task_rec.cost_parent_id,
4800                 p_visit_task_number  => l_Task_rec.cost_parent_number,
4801                 p_visit_id           => l_Task_rec.visit_id,
4802                 x_visit_task_id      => l_cost_parent_id,
4803                 x_return_status      => l_return_status,
4804                 x_error_msg_code     => l_msg_data);
4805 
4806           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
4807           THEN
4808               Fnd_Message.SET_NAME('AHL','AHL_VWP_PARENT_NOT_EXISTS');
4809               Fnd_Msg_Pub.ADD;
4810               RAISE Fnd_Api.g_exc_error;
4811           END IF;
4812 
4813            --Assign the returned value
4814            l_Task_rec.cost_parent_id := l_cost_parent_id;
4815      END IF;
4816 
4817      IF (l_log_statement >= l_log_current_level) THEN
4818          fnd_log.string(l_log_statement,
4819                         L_DEBUG_KEY,
4820                         ': Cost parent ID = ' || l_Task_rec.cost_parent_id ||
4821                         ': Validation: Start -- For COST PARENT ');
4822      END IF;
4823 
4824       -- To Check for cost parent task id not forming loop
4825      IF (l_Task_rec.cost_parent_id IS NOT NULL AND
4826         l_Task_rec.cost_parent_id <> Fnd_Api.G_MISS_NUM ) THEN
4827 
4828         AHL_VWP_RULES_PVT.Check_Cost_Parent_Loop
4829             (p_visit_id        => l_Task_rec.visit_id,
4830              p_visit_task_id   => l_Task_rec.visit_task_id ,
4831              p_cost_parent_id  => l_Task_rec.cost_parent_id
4832              );
4833 
4834      END IF;
4835 
4836      IF (l_log_statement >= l_log_current_level) THEN
4837          fnd_log.string(l_log_statement,
4838                         L_DEBUG_KEY,
4839                         ': Validation: End -- For COST PARENT ' ||
4840                         ': Originating Number = ' || l_Task_rec.orginating_task_number);
4841      END IF;
4842 
4843      --
4844      -- For ORIGINATING TASK
4845      -- Convert originating task number to id
4846       IF (l_Task_rec.orginating_task_number IS NOT NULL AND
4847           l_Task_rec.orginating_task_number <> Fnd_Api.G_MISS_NUM ) THEN
4848 
4849           IF (l_log_statement >= l_log_current_level) THEN
4850               fnd_log.string(l_log_statement,
4851                              L_DEBUG_KEY,
4852                              ' Calling AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID');
4853           END IF;
4854 
4855           AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
4856                (p_visit_task_id      => l_Task_rec.originating_task_id,
4857                 p_visit_task_number  => l_Task_rec.orginating_task_number,
4858                 p_visit_id           => l_Task_rec.visit_id,
4859                 x_visit_task_id      => l_originating_task_id,
4860                 x_return_status      => l_return_status,
4861                 x_error_msg_code     => l_msg_data);
4862 
4863           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
4864           THEN
4865               Fnd_Message.SET_NAME('AHL','AHL_VWP_ORIGINATING_NOT_EXISTS');
4866               Fnd_Msg_Pub.ADD;
4867               RAISE Fnd_Api.g_exc_error;
4868           END IF;
4869 
4870           --Assign the returned value
4871           l_Task_rec.originating_task_id := l_originating_task_id;
4872      END IF;
4873 
4874      IF (l_log_statement >= l_log_current_level) THEN
4875          fnd_log.string(l_log_statement,
4876                         L_DEBUG_KEY,
4877                         ': Originating Task ID= ' || l_Task_rec.originating_task_id ||
4878                         ': Validation: Start -- For ORIGINATING TASK');
4879      END IF;
4880 
4881    -- To Check for originating task id not forming loop
4882     IF (l_Task_rec.originating_task_id IS NOT NULL AND
4883         l_Task_rec.originating_task_id <> Fnd_Api.G_MISS_NUM ) THEN
4884 
4885         AHL_VWP_RULES_PVT.Check_Origin_Task_Loop
4886             (p_visit_id             => l_Task_rec.visit_id ,
4887              p_visit_task_id        => l_Task_rec.visit_task_id ,
4888              p_originating_task_id  => l_Task_rec.originating_task_id
4889              );
4890     END IF;
4891 
4892     IF (l_log_statement >= l_log_current_level) THEN
4893         fnd_log.string(l_log_statement,
4894                        L_DEBUG_KEY,
4895                        ': Validation: End -- For ORIGINATING TASK');
4896     END IF;
4897 
4898     ----------- End defining and validate all LOVs on Create Visit's Task UI Screen---
4899 
4900    ----------------------- validate ----------------------
4901     IF (l_log_statement >= l_log_current_level) THEN
4902         fnd_log.string(l_log_statement,
4903                        L_DEBUG_KEY,
4904                       ':Validate ');
4905     END IF;
4906 
4907   -- For all optional fields check if its g_miss_num/g_miss_char/g_miss_date
4908   -- then Null else the value call Default_Missing_Attribs procedure
4909         Default_Missing_Attribs
4910         (
4911         p_x_task_rec             => l_Task_rec
4912         );
4913 
4914 -- Post 11.5.10 Changes by Senthil.
4915    IF(L_task_rec.STAGE_ID IS NOT NULL OR L_task_rec.STAGE_NAME IS NOT NULL) THEN
4916       IF (l_log_statement >= l_log_current_level) THEN
4917           fnd_log.string(l_log_statement,
4918                          L_DEBUG_KEY,
4919                         'Before Calling AHL_VWP_VISITS_STAGES_PVT.VALIDATE_STAGE_UPDATES');
4920       END IF;
4921       AHL_VWP_VISITS_STAGES_PVT.VALIDATE_STAGE_UPDATES(
4922       P_API_VERSION      =>  1.0,
4923       P_VISIT_ID         =>  l_Task_rec.visit_id,
4924       P_VISIT_TASK_ID    =>  l_Task_rec.visit_task_id,
4925       P_STAGE_NAME       =>  L_task_rec.STAGE_NAME,
4926       X_STAGE_ID         =>  L_task_rec.STAGE_ID,
4927       X_RETURN_STATUS    =>  l_return_status,
4928       X_MSG_COUNT        =>  l_msg_count,
4929       X_MSG_DATA         =>  l_msg_data  );
4930       IF (l_log_statement >= l_log_current_level) THEN
4931           fnd_log.string(l_log_statement,
4932                          L_DEBUG_KEY,
4933                         'After Calling AHL_VWP_VISITS_STAGES_PVT.VALIDATE_STAGE_UPDATES, Return Status = ' || l_return_status );
4934       END IF;
4935 
4936    END IF;
4937 
4938    IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
4939       x_msg_count := l_msg_count;
4940       x_return_status := Fnd_Api.G_RET_STS_ERROR;
4941       RAISE Fnd_Api.G_EXC_ERROR;
4942    END IF;
4943 
4944 -- post 11.5.10 changes by Senthil end
4945 
4946    IF p_validation_level >= Jtf_Plsql_Api.g_valid_level_item THEN
4947       Check_Task_Items (
4948          p_task_rec => p_x_task_rec,
4949          p_validation_mode    => Jtf_Plsql_Api.g_update,
4950          x_return_status      => l_return_status
4951       );
4952       IF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
4953          RAISE Fnd_Api.g_exc_unexpected_error;
4954       ELSIF l_return_status = Fnd_Api.g_ret_sts_error THEN
4955          RAISE Fnd_Api.g_exc_error;
4956       END IF;
4957    END IF;
4958 
4959     -- Check Object version number.
4960    IF (c_task_rec.object_version_number <> l_task_rec.object_version_number) THEN
4961        Fnd_Message.Set_Name('AHL','AHL_COM_RECORD_CHANGED');
4962        Fnd_Msg_Pub.ADD;
4963        RAISE Fnd_Api.G_EXC_ERROR;
4964    END IF;
4965 
4966     --Standard check to count messages
4967    l_msg_count := Fnd_Msg_Pub.count_msg;
4968 
4969    IF l_msg_count > 0 THEN
4970       x_msg_count := l_msg_count;
4971       x_return_status := Fnd_Api.G_RET_STS_ERROR;
4972       RAISE Fnd_Api.G_EXC_ERROR;
4973    END IF;
4974 
4975  -------------------------- update --------------------
4976     IF (l_log_statement >= l_log_current_level) THEN
4977         fnd_log.string(l_log_statement,
4978                        L_DEBUG_KEY,
4979                        'Before Calling Ahl_Visit_Tasks_Pkg.UPDATE_ROW');
4980     END IF;
4981 
4982     Ahl_Visit_Tasks_Pkg.UPDATE_ROW (
4983       X_VISIT_TASK_ID         => l_task_rec.visit_task_id,
4984       X_VISIT_TASK_NUMBER     => c_task_rec.visit_task_number,
4985       X_OBJECT_VERSION_NUMBER => l_task_rec.OBJECT_VERSION_NUMBER + 1,
4986       X_VISIT_ID              => l_task_rec.visit_id,
4987       X_PROJECT_TASK_ID       => c_task_rec.project_task_id,
4988       X_COST_PARENT_ID        => l_task_rec.cost_parent_id,
4989       X_MR_ROUTE_ID           => c_task_rec.mr_route_id,
4990       X_MR_ID                 => c_task_rec.mr_id,
4991       X_DURATION              => l_task_rec.duration,
4992       X_UNIT_EFFECTIVITY_ID   => c_task_rec.unit_effectivity_id,
4993       X_START_FROM_HOUR       => l_task_rec.start_from_hour,
4994       X_INVENTORY_ITEM_ID     => c_task_rec.inventory_item_id,
4995       X_ITEM_ORGANIZATION_ID  => c_task_rec.item_organization_id,
4996       X_INSTANCE_ID           => l_Task_rec.instance_id,
4997       X_PRIMARY_VISIT_TASK_ID => c_task_rec.primary_visit_task_id,
4998       X_ORIGINATING_TASK_ID   => l_task_rec.originating_task_id,
4999       X_SERVICE_REQUEST_ID    => l_task_rec.service_request_id,
5000       X_TASK_TYPE_CODE        => l_task_rec.task_type_code,
5001       -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: update Service Type code too
5002       X_SERVICE_TYPE_CODE     => l_task_rec.service_type_code,
5003       X_DEPARTMENT_ID         => l_task_rec.department_id,
5004       X_SUMMARY_TASK_FLAG     => 'N',
5005       X_PRICE_LIST_ID         => c_task_rec.price_list_id,
5006       X_STATUS_CODE           => c_task_rec.status_code,
5007       X_ESTIMATED_PRICE       => c_task_rec.estimated_price,
5008       X_ACTUAL_PRICE          => c_task_rec.actual_price,
5009       X_ACTUAL_COST           => c_task_rec.actual_cost,
5010 --  Post 11.5.10 Changes by Senthil.
5011       X_STAGE_ID              =>  l_task_rec.STAGE_ID,
5012   -- Added cxcheng POST11510--------------
5013   -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010
5014   -- Pass past dates too, and if it is null, pass null for all the 4 columns below
5015       X_START_DATE_TIME       => NVL(l_task_rec.PAST_TASK_START_DATE,c_task_rec.START_DATE_TIME), --SKPATHAK :: Bug 13890788
5016       X_END_DATE_TIME         => NVL(l_task_rec.PAST_TASK_END_DATE,c_task_rec.END_DATE_TIME), --SKPATHAK :: Bug 13890788
5017       X_PAST_TASK_START_DATE  => l_task_rec.PAST_TASK_START_DATE,
5018       X_PAST_TASK_END_DATE    => l_task_rec.PAST_TASK_END_DATE,
5019       --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
5020       X_TARGET_QTY            => c_task_rec.target_qty,
5021 
5022   --  manisaga commented the attribute from c_task_rec and added attributes from
5023   --  l_tasc_rec for DFF implementation on 19-Feb-2010  -- Start
5024   /*
5025       X_ATTRIBUTE_CATEGORY    => c_task_rec.ATTRIBUTE_CATEGORY,
5026       X_ATTRIBUTE1            => c_task_rec.ATTRIBUTE1,
5027       X_ATTRIBUTE2            => c_task_rec.ATTRIBUTE2,
5028       X_ATTRIBUTE3            => c_task_rec.ATTRIBUTE3,
5029       X_ATTRIBUTE4            => c_task_rec.ATTRIBUTE4,
5030       X_ATTRIBUTE5            => c_task_rec.ATTRIBUTE5,
5031       X_ATTRIBUTE6            => c_task_rec.ATTRIBUTE6,
5032       X_ATTRIBUTE7            => c_task_rec.ATTRIBUTE7,
5033       X_ATTRIBUTE8            => c_task_rec.ATTRIBUTE8,
5034       X_ATTRIBUTE9            => c_task_rec.ATTRIBUTE9,
5035       X_ATTRIBUTE10           => c_task_rec.ATTRIBUTE10,
5036       X_ATTRIBUTE11           => c_task_rec.ATTRIBUTE11,
5037       X_ATTRIBUTE12           => c_task_rec.ATTRIBUTE12,
5038       X_ATTRIBUTE13           => c_task_rec.ATTRIBUTE13,
5039       X_ATTRIBUTE14           => c_task_rec.ATTRIBUTE14,
5040       X_ATTRIBUTE15           => c_task_rec.ATTRIBUTE15,
5041   */
5042       X_ATTRIBUTE_CATEGORY    => l_task_rec.ATTRIBUTE_CATEGORY,
5043       X_ATTRIBUTE1            => l_task_rec.ATTRIBUTE1,
5044       X_ATTRIBUTE2            => l_task_rec.ATTRIBUTE2,
5045       X_ATTRIBUTE3            => l_task_rec.ATTRIBUTE3,
5046       X_ATTRIBUTE4            => l_task_rec.ATTRIBUTE4,
5047       X_ATTRIBUTE5            => l_task_rec.ATTRIBUTE5,
5048       X_ATTRIBUTE6            => l_task_rec.ATTRIBUTE6,
5049       X_ATTRIBUTE7            => l_task_rec.ATTRIBUTE7,
5050       X_ATTRIBUTE8            => l_task_rec.ATTRIBUTE8,
5051       X_ATTRIBUTE9            => l_task_rec.ATTRIBUTE9,
5052       X_ATTRIBUTE10           => l_task_rec.ATTRIBUTE10,
5053       X_ATTRIBUTE11           => l_task_rec.ATTRIBUTE11,
5054       X_ATTRIBUTE12           => l_task_rec.ATTRIBUTE12,
5055       X_ATTRIBUTE13           => l_task_rec.ATTRIBUTE13,
5056       X_ATTRIBUTE14           => l_task_rec.ATTRIBUTE14,
5057       X_ATTRIBUTE15           => l_task_rec.ATTRIBUTE15,
5058   --  manisaga commented the attribute from c_task_rec and added attributes from
5059   --  l_tasc_rec for DFF implementation on 19-Feb-2010  -- End
5060 
5061       X_VISIT_TASK_NAME       => l_task_rec.visit_task_name,
5062       X_DESCRIPTION           => l_task_rec.description,
5063       X_QUANTITY              => c_task_rec.quantity, -- Added by rnahata for Issue 105
5064       X_LAST_UPDATE_DATE      => SYSDATE,
5065       X_LAST_UPDATED_BY       => Fnd_Global.USER_ID,
5066       X_LAST_UPDATE_LOGIN     => Fnd_Global.LOGIN_ID );
5067 
5068     IF (l_log_statement >= l_log_current_level) THEN
5069         fnd_log.string(l_log_statement,
5070                        L_DEBUG_KEY,
5071                        'After Calling Ahl_Visit_Tasks_Pkg.UPDATE_ROW');
5072     END IF;
5073 
5074     --salogan added for supplier warranty starts
5075     -- calling AHL_VWP_RULES_PVT.Get_Warranty_Rec_for_Update
5076     AHL_VWP_RULES_PVT.Get_Warranty_Rec_for_Update(
5077         p_task_rec          => l_task_rec,
5078         x_warranty_entl_tbl => l_entl_rec_tbl);
5079 
5080     IF (l_log_statement >= l_log_current_level) THEN
5081         fnd_log.string(l_log_statement,
5082                        L_DEBUG_KEY,
5083                        'Before calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements.');
5084     END IF;
5085 
5086     --Not passing p_commit the main API commits the data at the end
5087     AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements(
5088         p_api_version                 => l_api_version,
5089         p_validation_level            => p_validation_level,
5090         p_module_type                 => p_module_type,
5091         p_user_role                   => AHL_WARRANTY_ENTL_PVT.G_USER_PLANNER,
5092         p_x_warranty_entl_tbl         => l_entl_rec_tbl,
5093         x_return_status               => l_return_status,
5094         x_msg_count                   => l_msg_count,
5095         x_msg_data                    => l_msg_data);
5096 
5097     IF (l_log_statement >= l_log_current_level) THEN
5098         fnd_log.string(l_log_statement,
5099                        L_DEBUG_KEY,
5100                        'After calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements. Return Status = ' ||
5101                        l_return_status);
5102     END IF;
5103 
5104     l_msg_count := Fnd_Msg_Pub.count_msg;
5105     IF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
5106         x_msg_count := l_msg_count;
5107         x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
5108         RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
5109     END IF;
5110     --salogan added for supplier warranty ends
5111 
5112    -- Added cxcheng POST11510--------------
5113    --Now adjust the times derivation for task
5114    IF (l_log_statement >= l_log_current_level) THEN
5115        fnd_log.string(l_log_statement,
5116                       L_DEBUG_KEY,
5117                       'Before Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times');
5118    END IF;
5119 
5120    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Call Adjust_Task_Times only if past date is null
5121    IF l_task_rec.PAST_TASK_START_DATE IS NULL THEN
5122      AHL_VWP_TIMES_PVT.Adjust_Task_Times(p_api_version      => 1.0,
5123                                          p_init_msg_list    => Fnd_Api.G_FALSE,
5124                                          p_commit           => Fnd_Api.G_FALSE,
5125                                          p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
5126                                          x_return_status    => l_return_status,
5127                                          x_msg_count        => l_msg_count,
5128                                          x_msg_data         => l_msg_data,
5129                                          p_task_id          => l_task_rec.visit_task_id);
5130    END IF;
5131 
5132    IF (l_log_statement >= l_log_current_level) THEN
5133        fnd_log.string(l_log_statement,
5134                       L_DEBUG_KEY,
5135                       'After Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times, Return Status = ' || l_return_status);
5136    END IF;
5137 
5138    --Standard check to count messages
5139    l_msg_count := Fnd_Msg_Pub.count_msg;
5140 
5141    IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
5142       x_msg_count := l_msg_count;
5143       x_return_status := Fnd_Api.G_RET_STS_ERROR;
5144       RAISE Fnd_Api.G_EXC_ERROR;
5145    END IF;
5146 
5147     IF  NVL(l_task_rec.Duration, -10) <> NVL(c_task_rec.Duration, -10) OR
5148       NVL(l_task_rec.start_from_hour, -20) <> NVL(c_task_rec.start_from_hour, -20) OR
5149       NVL(l_task_rec.department_id, -20) <> NVL(c_task_rec.department_id, -20)   OR
5150       NVL(l_task_rec.stage_id, -20) <> NVL(c_task_rec.stage_id, -20)
5151     THEN
5152 
5153        OPEN c_Task(l_Task_rec.visit_task_id);
5154        FETCH c_Task INTO c_upd_Task_rec;
5155        CLOSE c_Task;
5156 
5157        IF c_upd_Task_rec.start_date_time IS NOT NULL THEN
5158 
5159          IF (l_log_statement >= l_log_current_level) THEN
5160              fnd_log.string(l_log_statement,
5161                             L_DEBUG_KEY,
5162                             'Before Calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
5163          END IF;
5164 
5165          AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials (
5166               p_api_version        => 1.0,
5167               p_init_msg_list      => FND_API.g_false,
5168               p_commit             => FND_API.g_false,
5169               p_validation_level   => FND_API.g_valid_level_full,
5170               p_visit_id           => l_task_rec.visit_id,
5171               p_visit_task_id      => NULL,
5172               p_org_id             => NULL,
5173               p_start_date         => NULL,
5174               p_operation_flag     => 'U',
5175               x_planned_order_flag => l_planned_order_flag ,
5176               x_return_status      => l_return_status,
5177               x_msg_count          => l_msg_count,
5178               x_msg_data           => l_msg_data );
5179 
5180           IF (l_log_statement >= l_log_current_level) THEN
5181               fnd_log.string(l_log_statement,
5182                              L_DEBUG_KEY,
5183                              'After Calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials' ||
5184                              'Planned Order Flag : ' || l_planned_order_flag ||
5185                              'Return Status = ' || l_return_status );
5186           END IF;
5187 
5188           IF l_return_status <> 'S' THEN
5189             RAISE Fnd_Api.G_EXC_ERROR;
5190           END IF;
5191 
5192         END IF; -- Start_date_time check.
5193 
5194         IF c_visit_rec.any_task_chg_flag = 'N' THEN
5195            AHL_VWP_RULES_PVT.Update_Visit_Task_Flag
5196                (p_visit_id      => l_task_rec.visit_id,
5197           p_flag          =>  'Y',
5198                 x_return_status => x_return_status);
5199           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5200             RAISE FND_API.G_EXC_ERROR;
5201           END IF;
5202         END IF;
5203     END IF;
5204 
5205    -------------------- finish --------------------------
5206 
5207    ------------------------End of API Body------------------------------------
5208    --Standard check to count messages
5209    l_msg_count := Fnd_Msg_Pub.count_msg;
5210 
5211    IF l_msg_count > 0 THEN
5212       x_msg_count := l_msg_count;
5213       x_return_status := Fnd_Api.G_RET_STS_ERROR;
5214       RAISE Fnd_Api.G_EXC_ERROR;
5215    END IF;
5216 
5217    --Standard check for commit
5218    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
5219       COMMIT;
5220    END IF;
5221 
5222    IF (l_log_procedure >= l_log_current_level) THEN
5223          fnd_log.string(l_log_procedure,
5224                         L_DEBUG_KEY ||'.end',
5225                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
5226    END IF;
5227 EXCEPTION
5228    WHEN Fnd_Api.g_exc_error THEN
5229       ROLLBACK TO Update_Unassociated_Task;
5230       x_return_status := Fnd_Api.g_ret_sts_error;
5231       Fnd_Msg_Pub.count_and_get (
5232             p_encoded => Fnd_Api.g_false,
5233             p_count   => x_msg_count,
5234             p_data    => x_msg_data
5235       );
5236    WHEN Fnd_Api.g_exc_unexpected_error THEN
5237       ROLLBACK TO Update_Unassociated_Task;
5238       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5239       Fnd_Msg_Pub.count_and_get (
5240             p_encoded => Fnd_Api.g_false,
5241             p_count   => x_msg_count,
5242             p_data    => x_msg_data
5243       );
5244    WHEN OTHERS THEN
5245       ROLLBACK TO Update_Unassociated_Task;
5246       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5247       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
5248     THEN
5249          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
5250       END IF;
5251       Fnd_Msg_Pub.count_and_get (
5252             p_encoded => Fnd_Api.g_false,
5253             p_count   => x_msg_count,
5254             p_data    => x_msg_data
5255       );
5256 END Update_Unassociated_Task;
5257 
5258 --------------------------------------------------------------------
5259 -- PROCEDURE
5260 --    Update_Summary_Task
5261 --
5262 -- PURPOSE
5263 --    To update Summary task for the Maintainance visit.
5264 --------------------------------------------------------------------
5265 PROCEDURE Update_Summary_Task (
5266    p_api_version      IN            NUMBER,
5267    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
5268    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
5269    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
5270    p_module_type      IN            VARCHAR2  := 'JSP',
5271    p_x_task_rec       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type,
5272    x_return_status       OUT NOCOPY VARCHAR2,
5273    x_msg_count           OUT NOCOPY NUMBER,
5274    x_msg_data            OUT NOCOPY VARCHAR2
5275 )
5276 IS
5277    L_API_VERSION CONSTANT NUMBER := 1.0;
5278    L_API_NAME    CONSTANT VARCHAR2(30) := 'Update_Summary_Task';
5279    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
5280 
5281    -- local variables defined for the procedure
5282    l_task_rec             AHL_VWP_RULES_PVT.Task_Rec_Type := p_x_task_rec;
5283    l_return_status        VARCHAR2(1);
5284    l_msg_data             VARCHAR2(2000);
5285 
5286    l_msg_count            NUMBER;
5287    l_serial_ID            NUMBER;
5288    l_cost_parent_id       NUMBER;
5289    l_originating_task_id  NUMBER;
5290    l_department_id        NUMBER;
5291    l_entl_rec_tbl         AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type; --salogan added for supplier warranty
5292 
5293    -- To find task related information
5294    CURSOR c_Task (x_id IN NUMBER) IS
5295       SELECT * FROM  Ahl_Visit_Tasks_VL
5296       WHERE  VISIT_TASK_ID = x_id;
5297    c_Task_rec    c_Task%ROWTYPE;
5298 
5299    -- To find visit related information
5300    CURSOR c_Visit (x_id IN NUMBER) IS
5301       SELECT * FROM Ahl_Visits_VL
5302       WHERE  VISIT_ID = x_id;
5303    c_Visit_rec    c_Visit%ROWTYPE;
5304 
5305  BEGIN
5306    IF (l_log_procedure >= l_log_current_level) THEN
5307       fnd_log.string(l_log_procedure,
5308                      L_DEBUG_KEY ||'.begin',
5309                      'At the start of PL SQL procedure.');
5310    END IF;
5311    --------------------- initialize -----------------------
5312    SAVEPOINT Update_Summary_Task;
5313 
5314    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
5315       Fnd_Msg_Pub.initialize;
5316    END IF;
5317 
5318    --  Initialize API return status to success
5319     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
5320 
5321    -- Standard call to check for call compatibility.
5322    IF NOT Fnd_Api.compatible_api_call(
5323          l_api_version,
5324          p_api_version,
5325          l_api_name,
5326          G_PKG_NAME
5327    ) THEN
5328       RAISE Fnd_Api.g_exc_unexpected_error;
5329    END IF;
5330 
5331    ------------------------Start of API Body------------------------------------
5332    OPEN c_Visit(l_Task_rec.visit_id);
5333    FETCH c_Visit INTO c_Visit_rec;
5334    CLOSE c_Visit;
5335 
5336    OPEN c_Task(l_Task_rec.visit_task_id);
5337    FETCH c_Task INTO c_Task_rec;
5338    CLOSE c_Task;
5339 
5340    IF (l_log_statement >= l_log_current_level) THEN
5341        fnd_log.string(l_log_statement,
5342                       L_DEBUG_KEY,
5343                       ': Visit Id/Task Id  = ' || l_task_rec.visit_id || '-' || l_task_rec.visit_task_id ||
5344                       ': Inventory Id /org/name =' || l_task_rec.inventory_item_id || '-' || l_task_rec.item_organization_id || '-' || l_task_rec.item_name ||
5345                       ': Cost Id -- Number=' || l_task_rec.cost_parent_id || '**' || l_task_rec.cost_parent_number ||
5346                       ': Originating Id/Number=' || l_task_rec.originating_task_id  || '**' || l_task_rec.orginating_task_number ||
5347                       ': Object version number = ' || l_task_rec.object_version_number ||
5348                       ': Duration from record = ' || l_task_rec.duration ||
5349                       ': Visit start from hour/duration=' || '-' || l_task_rec.start_from_hour || '-' || l_task_rec.duration ||
5350                       ': Task Type code/value=' ||  l_task_rec.task_type_code || '-' || l_task_rec.task_type_value ||
5351                       ': department_id = ' ||  l_task_rec.department_id );
5352    END IF;
5353 
5354      ----------- Start defining and validate all LOVs on Create Visit's Task UI Screen---
5355      --
5356      -- For DEPARTMENT
5357      -- Convert department name to department id
5358      IF (l_task_rec.dept_name IS NOT NULL AND l_task_rec.dept_name <> Fnd_Api.G_MISS_CHAR ) THEN
5359 
5360           AHL_VWP_RULES_PVT.Check_Dept_Desc_Or_Id
5361                 (p_organization_id  => c_visit_rec.organization_id,
5362                  p_dept_name        => l_task_rec.dept_name,
5363                  p_department_id    => NULL,
5364                  x_department_id    => l_department_id,
5365                  x_return_status    => l_return_status,
5366                  x_error_msg_code   => l_msg_data);
5367 
5368           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
5369           THEN
5370               Fnd_Message.SET_NAME('AHL','AHL_VWP_DEPT_NOT_EXISTS');
5371               Fnd_Msg_Pub.ADD;
5372               RAISE Fnd_Api.G_EXC_ERROR;
5373           END IF;
5374 
5375           --Assign the returned value
5376           l_task_rec.department_id := l_department_id;
5377     END IF;
5378 
5379     IF (l_log_statement >= l_log_current_level) THEN
5380         fnd_log.string(l_log_statement,
5381                        L_DEBUG_KEY,
5382                        ': Dept ID= ' || l_Task_rec.department_id );
5383     END IF;
5384 
5385     -- Called only when updating serial number for manually created summary task
5386     -- which are without MR i.e MR_Id in cursor record c_task_rec will be Null
5387     IF c_Task_rec.MR_Id IS NULL THEN
5388 
5389       IF (l_log_statement >= l_log_current_level) THEN
5390           fnd_log.string(l_log_statement,
5391                          L_DEBUG_KEY,
5392                          ': Serial Number= ' || l_Task_rec.serial_number);
5393       END IF;
5394 
5395      --
5396      -- For SERIAL NUMBER
5397      -- Convert serial number to instance/ serial id
5398       IF (l_Task_rec.serial_number IS NOT NULL AND
5399           l_Task_rec.serial_number <> Fnd_Api.G_MISS_CHAR) THEN
5400 
5401               AHL_VWP_RULES_PVT.Check_Serial_Name_Or_Id
5402                    (p_item_id          => l_Task_rec.inventory_item_id,
5403                     p_org_id           => l_Task_rec.item_organization_id,
5404                     p_serial_id        => l_Task_rec.instance_id,
5405                     p_serial_number    => l_Task_rec.serial_number,
5406                     x_serial_id        => l_serial_id,
5407                     x_return_status    => l_return_status,
5408                     x_error_msg_code   => l_msg_data);
5409 
5410           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success THEN
5411                     Fnd_Message.SET_NAME('AHL','AHL_VWP_SERIAL_NOT_EXISTS');
5412                     Fnd_Msg_Pub.ADD;
5413                     RAISE Fnd_Api.G_EXC_ERROR;
5414           ELSE
5415 
5416               --Assign the returned value
5417               l_Task_rec.instance_id := l_serial_id;
5418 
5419               IF (l_log_statement >= l_log_current_level) THEN
5420                   fnd_log.string(l_log_statement,
5421                                  L_DEBUG_KEY,
5422                                  ': Before UC Check Serial ID= ' || l_Task_rec.instance_id ||
5423                                  ': Before UC Item ID= ' || l_Task_rec.inventory_item_id ||
5424                                  ': Before UC Item Org ID= ' || l_Task_rec.item_organization_id);
5425               END IF;
5426               /* sowsubra - start
5427               --BEGIN: jeli added for bug 3777720
5428               IF (AHL_VWP_RULES_PVT.instance_in_config_tree(l_task_rec.visit_id, l_task_rec.instance_id) = FND_API.G_RET_STS_ERROR) THEN
5429               --END: jeli added for bug 3777720
5430                   Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_SERIAL');
5431                   Fnd_Msg_Pub.ADD;
5432                   RAISE Fnd_Api.G_EXC_ERROR;
5433               END IF;
5434               sowsubra - end */
5435 
5436           END IF; -- End of l_return_status success check
5437 
5438         END IF; -- End of l_Task_rec.serial_number Null check
5439 
5440         IF (l_log_statement >= l_log_current_level) THEN
5441             fnd_log.string(l_log_statement,
5442                            L_DEBUG_KEY,
5443                            ': Serial ID= ' || l_Task_rec.instance_id);
5444         END IF;
5445 
5446     ELSE
5447         l_Task_rec.instance_id := c_Task_rec.instance_id;
5448     END IF; -- End of c_Task_rec.MR_Id Null check
5449 
5450     IF (l_log_statement >= l_log_current_level) THEN
5451         fnd_log.string(l_log_statement,
5452                        L_DEBUG_KEY,
5453                        ': Cost parent= ' || l_Task_rec.cost_parent_number);
5454     END IF;
5455 
5456      --
5457      -- For COST PARENT TASK
5458      -- Convert cost parent number to id
5459       IF (l_Task_rec.cost_parent_number IS NOT NULL AND
5460           l_Task_rec.cost_parent_number <> Fnd_Api.G_MISS_NUM ) THEN
5461 
5462           IF (l_log_statement >= l_log_current_level) THEN
5463               fnd_log.string(l_log_statement,
5464                              L_DEBUG_KEY,
5465                              ' Calling AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID');
5466           END IF;
5467 
5468           AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
5469                (p_visit_task_id      => l_Task_rec.cost_parent_id,
5470                 p_visit_task_number  => l_Task_rec.cost_parent_number,
5471                 p_visit_id           => l_Task_rec.visit_id,
5472                 x_visit_task_id      => l_cost_parent_id,
5473                 x_return_status      => l_return_status,
5474                 x_error_msg_code     => l_msg_data);
5475 
5476           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
5477           THEN
5478               Fnd_Message.SET_NAME('AHL','AHL_VWP_PARENT_NOT_EXISTS');
5479               Fnd_Msg_Pub.ADD;
5480               RAISE Fnd_Api.g_exc_error;
5481           END IF;
5482 
5483            --Assign the returned value
5484            l_Task_rec.cost_parent_id := l_cost_parent_id;
5485      ELSE
5486            l_Task_rec.cost_parent_id := NULL;
5487      END IF;
5488 
5489       -- To Check for cost parent task id not forming loop
5490    IF (l_Task_rec.cost_parent_id IS NOT NULL AND
5491         l_Task_rec.cost_parent_id <> Fnd_Api.G_MISS_NUM ) THEN
5492 
5493         AHL_VWP_RULES_PVT.Check_Cost_Parent_Loop
5494             (p_visit_id        => l_Task_rec.visit_id,
5495              p_visit_task_id   => l_Task_rec.visit_task_id ,
5496              p_cost_parent_id  => l_Task_rec.cost_parent_id
5497              );
5498    END IF;
5499 
5500    IF (l_log_statement >= l_log_current_level) THEN
5501        fnd_log.string(l_log_statement,
5502                       L_DEBUG_KEY,
5503                       ': Cost parent ID = ' || l_Task_rec.cost_parent_id);
5504    END IF;
5505 
5506    IF c_Task_rec.MR_Id IS NULL THEN
5507      IF (l_log_statement >= l_log_current_level) THEN
5508          fnd_log.string(l_log_statement,
5509                         L_DEBUG_KEY,
5510                         ': Originating Number = ' || l_Task_rec.orginating_task_number);
5511      END IF;
5512 
5513      --
5514      -- For ORIGINATING TASK
5515      -- Convert originating task number to id
5516       IF (l_Task_rec.orginating_task_number IS NOT NULL AND
5517           l_Task_rec.orginating_task_number <> Fnd_Api.G_MISS_NUM ) THEN
5518 
5519           IF (l_log_statement >= l_log_current_level) THEN
5520               fnd_log.string(l_log_statement,
5521                              L_DEBUG_KEY,
5522                              ' Calling AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID');
5523           END IF;
5524 
5525           AHL_VWP_RULES_PVT.Check_Visit_Task_Number_OR_ID
5526                (p_visit_task_id      => l_Task_rec.originating_task_id,
5527                 p_visit_task_number  => l_Task_rec.orginating_task_number,
5528                 p_visit_id           => l_Task_rec.visit_id,
5529                 x_visit_task_id      => l_originating_task_id,
5530                 x_return_status      => l_return_status,
5531                 x_error_msg_code     => l_msg_data);
5532 
5533           IF NVL(l_return_status,'x') <> Fnd_Api.g_ret_sts_success
5534           THEN
5535               Fnd_Message.SET_NAME('AHL','AHL_VWP_ORIGINATING_NOT_EXISTS');
5536               Fnd_Msg_Pub.ADD;
5537               RAISE Fnd_Api.g_exc_error;
5538           END IF;
5539 
5540           --Assign the returned value
5541           l_Task_rec.originating_task_id := l_originating_task_id;
5542      ELSE
5543           l_Task_rec.originating_task_id := NULL;
5544      END IF;
5545 
5546      IF (l_log_statement >= l_log_current_level) THEN
5547          fnd_log.string(l_log_statement,
5548                         L_DEBUG_KEY,
5549                         ': Originating Task ID= ' || l_Task_rec.originating_task_id);
5550      END IF;
5551 
5552         -- To Check for originating task id not forming loop
5553      IF (l_Task_rec.originating_task_id IS NOT NULL AND
5554         l_Task_rec.originating_task_id <> Fnd_Api.G_MISS_NUM ) THEN
5555 
5556         AHL_VWP_RULES_PVT.Check_Origin_Task_Loop
5557             (p_visit_id             => l_Task_rec.visit_id ,
5558              p_visit_task_id        => l_Task_rec.visit_task_id ,
5559              p_originating_task_id  => l_Task_rec.originating_task_id
5560             );
5561 
5562      END IF;
5563 
5564    ELSE
5565       l_Task_rec.originating_task_id := c_Task_rec.originating_task_id;
5566    END IF;
5567 
5568    -- Validate target quantity
5569    IF (l_Task_rec.target_qty IS NOT NULL           AND
5570        l_Task_rec.target_qty <> Fnd_Api.G_MISS_NUM AND
5571        l_Task_rec.target_qty < 0) THEN
5572        FND_MESSAGE.set_name(G_APP_NAME, 'AHL_CMP_TARGET_QTY_INVLD');
5573        FND_MSG_PUB.add;
5574        RAISE FND_API.G_EXC_ERROR;
5575    END IF;
5576    ----------- End defining and validate all LOVs on Create Visit's Task UI Screen---
5577 
5578    ----------------------- validate ----------------------
5579 
5580    IF (l_log_statement >= l_log_current_level) THEN
5581        fnd_log.string(l_log_statement,
5582                       L_DEBUG_KEY,
5583                       ':Validate');
5584    END IF;
5585 
5586    -- For all optional fields check if its g_miss_num/g_miss_char/g_miss_date
5587    -- then Null else the value call Default_Missing_Attribs procedure
5588    Default_Missing_Attribs
5589    (
5590    p_x_task_rec             => l_Task_rec
5591    );
5592 
5593    IF p_validation_level >= Jtf_Plsql_Api.g_valid_level_item THEN
5594       Check_Task_Items (
5595          p_task_rec => p_x_task_rec,
5596          p_validation_mode    => Jtf_Plsql_Api.g_update,
5597          x_return_status      => l_return_status
5598       );
5599       IF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
5600          RAISE Fnd_Api.g_exc_unexpected_error;
5601       ELSIF l_return_status = Fnd_Api.g_ret_sts_error THEN
5602          RAISE Fnd_Api.g_exc_error;
5603       END IF;
5604    END IF;
5605 
5606     -- Check Object version number.
5607    IF (c_task_rec.object_version_number <> l_task_rec.object_version_number) THEN
5608        Fnd_Message.Set_Name('AHL','AHL_COM_RECORD_CHANGED');
5609        Fnd_Msg_Pub.ADD;
5610        RAISE Fnd_Api.G_EXC_ERROR;
5611    END IF;
5612 
5613     --Standard check to count messages
5614    l_msg_count := Fnd_Msg_Pub.count_msg;
5615 
5616    IF l_msg_count > 0 THEN
5617       x_msg_count := l_msg_count;
5618       x_return_status := Fnd_Api.G_RET_STS_ERROR;
5619       RAISE Fnd_Api.G_EXC_ERROR;
5620    END IF;
5621 
5622  -------------------------- update --------------------
5623    IF (l_log_statement >= l_log_current_level) THEN
5624        fnd_log.string(l_log_statement,
5625                       L_DEBUG_KEY,
5626                       'Before Calling Ahl_Visit_Tasks_Pkg.UPDATE_ROW');
5627    END IF;
5628 
5629   Ahl_Visit_Tasks_Pkg.UPDATE_ROW (
5630       X_VISIT_TASK_ID         => l_task_rec.visit_task_id,
5631       X_VISIT_TASK_NUMBER     => c_task_rec.visit_task_number,
5632       X_OBJECT_VERSION_NUMBER => l_task_rec.OBJECT_VERSION_NUMBER + 1,
5633       X_VISIT_ID              => l_task_rec.visit_id,
5634       X_PROJECT_TASK_ID       => c_task_rec.project_task_id,
5635       X_COST_PARENT_ID        => l_task_rec.cost_parent_id,
5636       X_MR_ROUTE_ID           => c_task_rec.mr_route_id,
5637       X_MR_ID                 => c_task_rec.mr_id,
5638       X_DURATION              => c_task_rec.duration,
5639       X_UNIT_EFFECTIVITY_ID   => c_task_rec.unit_effectivity_id,
5640       X_START_FROM_HOUR       => l_task_rec.start_from_hour,
5641       X_INVENTORY_ITEM_ID     => c_task_rec.inventory_item_id,
5642       X_ITEM_ORGANIZATION_ID  => c_task_rec.item_organization_id,
5643       X_INSTANCE_ID           => l_Task_rec.instance_id,
5644       X_PRIMARY_VISIT_TASK_ID => c_task_rec.primary_visit_task_id,
5645       X_ORIGINATING_TASK_ID   => l_task_rec.originating_task_id,
5646       X_SERVICE_REQUEST_ID    => c_task_rec.service_request_id,
5647       X_TASK_TYPE_CODE        => l_task_rec.task_type_code,
5648       -- PRAKKUM :: FP:PIE :: 13-OCT-2010 :: Service Type code added, as this modified handler requires it
5649       X_SERVICE_TYPE_CODE     => NULL,
5650       X_DEPARTMENT_ID         => l_task_rec.department_id,
5651       X_SUMMARY_TASK_FLAG     => 'N',
5652       X_PRICE_LIST_ID         => c_task_rec.price_list_id,
5653       X_STATUS_CODE           => c_task_rec.status_code,
5654       X_ESTIMATED_PRICE       => c_task_rec.estimated_price,
5655       X_ACTUAL_PRICE          => c_task_rec.actual_price,
5656       X_ACTUAL_COST           => c_task_rec.actual_cost,
5657 --  Post 11.5.10 Changes by Senthil.
5658       X_STAGE_ID              =>  l_task_rec.STAGE_ID,
5659        -- Added cxcheng POST11510--------------
5660    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Pass past dates too
5661       X_START_DATE_TIME       => NULL,
5662       X_END_DATE_TIME         => NULL,
5663       X_PAST_TASK_START_DATE  => NULL,
5664       X_PAST_TASK_END_DATE    => NULL,
5665       --MANESING::Component Maintenance Planning Project, 07-Aug-2011, added target quantity
5666       X_TARGET_QTY            => l_task_rec.target_qty,
5667 
5668    -- manisaga removed attributes addition from c_task_rec and added from
5669    -- l_task_rec for DFF implementation on 19-Feb-2010  -- Start
5670    /*
5671       X_ATTRIBUTE_CATEGORY    => c_task_rec.ATTRIBUTE_CATEGORY,
5672       X_ATTRIBUTE1            => c_task_rec.ATTRIBUTE1,
5673       X_ATTRIBUTE2            => c_task_rec.ATTRIBUTE2,
5674       X_ATTRIBUTE3            => c_task_rec.ATTRIBUTE3,
5675       X_ATTRIBUTE4            => c_task_rec.ATTRIBUTE4,
5676       X_ATTRIBUTE5            => c_task_rec.ATTRIBUTE5,
5677       X_ATTRIBUTE6            => c_task_rec.ATTRIBUTE6,
5678       X_ATTRIBUTE7            => c_task_rec.ATTRIBUTE7,
5679       X_ATTRIBUTE8            => c_task_rec.ATTRIBUTE8,
5680       X_ATTRIBUTE9            => c_task_rec.ATTRIBUTE9,
5681       X_ATTRIBUTE10           => c_task_rec.ATTRIBUTE10,
5682       X_ATTRIBUTE11           => c_task_rec.ATTRIBUTE11,
5683       X_ATTRIBUTE12           => c_task_rec.ATTRIBUTE12,
5684       X_ATTRIBUTE13           => c_task_rec.ATTRIBUTE13,
5685       X_ATTRIBUTE14           => c_task_rec.ATTRIBUTE14,
5686       X_ATTRIBUTE15           => c_task_rec.ATTRIBUTE15,
5687    */
5688       X_ATTRIBUTE_CATEGORY    => l_task_rec.ATTRIBUTE_CATEGORY,
5689       X_ATTRIBUTE1            => l_task_rec.ATTRIBUTE1,
5690       X_ATTRIBUTE2            => l_task_rec.ATTRIBUTE2,
5691       X_ATTRIBUTE3            => l_task_rec.ATTRIBUTE3,
5692       X_ATTRIBUTE4            => l_task_rec.ATTRIBUTE4,
5693       X_ATTRIBUTE5            => l_task_rec.ATTRIBUTE5,
5694       X_ATTRIBUTE6            => l_task_rec.ATTRIBUTE6,
5695       X_ATTRIBUTE7            => l_task_rec.ATTRIBUTE7,
5696       X_ATTRIBUTE8            => l_task_rec.ATTRIBUTE8,
5697       X_ATTRIBUTE9            => l_task_rec.ATTRIBUTE9,
5698       X_ATTRIBUTE10           => l_task_rec.ATTRIBUTE10,
5699       X_ATTRIBUTE11           => l_task_rec.ATTRIBUTE11,
5700       X_ATTRIBUTE12           => l_task_rec.ATTRIBUTE12,
5701       X_ATTRIBUTE13           => l_task_rec.ATTRIBUTE13,
5702       X_ATTRIBUTE14           => l_task_rec.ATTRIBUTE14,
5703       X_ATTRIBUTE15           => l_task_rec.ATTRIBUTE15,
5704    -- manisaga removed attributes addition from c_task_rec and added from
5705    -- l_task_rec for DFF implementation on 19-Feb-2010  -- End
5706 
5707       X_VISIT_TASK_NAME       => l_task_rec.visit_task_name,
5708       X_DESCRIPTION           => l_task_rec.description,
5709       -- Added by rnahata for Issue 105 - qty is zero for manually created summary tasks
5710       X_QUANTITY              => 0,
5711       X_LAST_UPDATE_DATE      => SYSDATE,
5712       X_LAST_UPDATED_BY       => Fnd_Global.USER_ID,
5713       X_LAST_UPDATE_LOGIN     => Fnd_Global.LOGIN_ID );
5714 
5715    IF (l_log_statement >= l_log_current_level) THEN
5716        fnd_log.string(l_log_statement,
5717                       L_DEBUG_KEY,
5718                       'After Calling Ahl_Visit_Tasks_Pkg.UPDATE_ROW');
5719    END IF;
5720 
5721    --salogan added for supplier warranty starts
5722    -- calling AHL_VWP_RULES_PVT.Get_Warranty_Rec_for_Update
5723    AHL_VWP_RULES_PVT.Get_Warranty_Rec_for_Update(
5724        p_task_rec          => l_task_rec,
5725        x_warranty_entl_tbl => l_entl_rec_tbl);
5726 
5727    IF (l_log_statement >= l_log_current_level) THEN
5728        fnd_log.string(l_log_statement,
5729                       L_DEBUG_KEY,
5730                       'Before calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements.');
5731    END IF;
5732 
5733    --Not passing p_commit the main API commits the data at the end
5734    AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements(
5735         p_api_version                 => l_api_version,
5736         p_validation_level            => p_validation_level,
5737         p_module_type                 => p_module_type,
5738         p_user_role                   => AHL_WARRANTY_ENTL_PVT.G_USER_PLANNER,
5739         p_x_warranty_entl_tbl         => l_entl_rec_tbl,
5740         x_return_status               => l_return_status,
5741         x_msg_count                   => l_msg_count,
5742         x_msg_data                    => l_msg_data);
5743 
5744    IF (l_log_statement >= l_log_current_level) THEN
5745        fnd_log.string(l_log_statement,
5746                       L_DEBUG_KEY,
5747                       'After calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements. Return Status = ' ||
5748                       l_return_status);
5749    END IF;
5750 
5751    l_msg_count := Fnd_Msg_Pub.count_msg;
5752    IF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
5753       x_msg_count := l_msg_count;
5754       x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
5755       RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
5756    END IF;
5757    --salogan added for supplier warranty ends
5758 
5759 ------------------------End of API Body------------------------------------
5760    -- Added cxcheng POST11510--------------
5761    --Now adjust the times derivation for task
5762    IF (l_log_statement >= l_log_current_level) THEN
5763        fnd_log.string(l_log_statement,
5764                       L_DEBUG_KEY,
5765                       'Before calling AHL_VWP_TIMES_PVT.Adjust_Task_Times');
5766    END IF;
5767    AHL_VWP_TIMES_PVT.Adjust_Task_Times(p_api_version      => 1.0,
5768                                        p_init_msg_list    => Fnd_Api.G_FALSE,
5769                                        p_commit           => Fnd_Api.G_FALSE,
5770                                        p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
5771                                        x_return_status    => l_return_status,
5772                                        x_msg_count        => l_msg_count,
5773                                        x_msg_data         => l_msg_data,
5774                                        p_task_id          =>l_task_rec.visit_task_id);
5775    IF (l_log_statement >= l_log_current_level) THEN
5776        fnd_log.string(l_log_statement,
5777                       L_DEBUG_KEY,
5778                       'After Calling AHL_VWP_TIMES_PVT.Adjust_Task_Times, Return Status = ' || l_return_status);
5779    END IF;
5780 
5781     --Standard check to count messages
5782    l_msg_count := Fnd_Msg_Pub.count_msg;
5783 
5784    IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
5785       x_msg_count := l_msg_count;
5786       x_return_status := Fnd_Api.G_RET_STS_ERROR;
5787       RAISE Fnd_Api.G_EXC_ERROR;
5788    END IF;
5789 
5790    --Standard check for commit
5791    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
5792       COMMIT;
5793    END IF;
5794 
5795    IF (l_log_procedure >= l_log_current_level) THEN
5796          fnd_log.string(l_log_procedure,
5797                         L_DEBUG_KEY ||'.end',
5798                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
5799    END IF;
5800 
5801 EXCEPTION
5802    WHEN Fnd_Api.g_exc_error THEN
5803       ROLLBACK TO Update_Summary_Task;
5804       x_return_status := Fnd_Api.g_ret_sts_error;
5805       Fnd_Msg_Pub.count_and_get (
5806             p_encoded => Fnd_Api.g_false,
5807             p_count   => x_msg_count,
5808             p_data    => x_msg_data
5809       );
5810    WHEN Fnd_Api.g_exc_unexpected_error THEN
5811       ROLLBACK TO Update_Summary_Task;
5812       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5813       Fnd_Msg_Pub.count_and_get (
5814             p_encoded => Fnd_Api.g_false,
5815             p_count   => x_msg_count,
5816             p_data    => x_msg_data
5817       );
5818    WHEN OTHERS THEN
5819       ROLLBACK TO Update_Summary_Task;
5820       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
5821       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
5822     THEN
5823          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
5824       END IF;
5825       Fnd_Msg_Pub.count_and_get (
5826             p_encoded => Fnd_Api.g_false,
5827             p_count   => x_msg_count,
5828             p_data    => x_msg_data
5829       );
5830 END Update_Summary_Task;
5831 
5832 --------------------------------------------------------------------
5833 -- PROCEDURE
5834 --    Delete_Task
5835 --
5836 -- PURPOSE
5837 --    To delete all types of tasks i.e Unassociated/Summary/Planned/Unplanned tasks.
5838 --------------------------------------------------------------------
5839 PROCEDURE Delete_Task (
5840    p_api_version      IN  NUMBER,
5841    p_init_msg_list    IN  VARCHAR2  := Fnd_Api.g_false,
5842    p_commit           IN  VARCHAR2  := Fnd_Api.g_false,
5843    p_validation_level IN  NUMBER    := Fnd_Api.g_valid_level_full,
5844    p_module_type      IN  VARCHAR2  := 'JSP',
5845    p_Visit_Task_Id    IN  NUMBER,
5846    x_return_status    OUT NOCOPY VARCHAR2,
5847    x_msg_count        OUT NOCOPY NUMBER,
5848    x_msg_data         OUT NOCOPY VARCHAR2
5849 )
5850 IS
5851    L_API_VERSION CONSTANT NUMBER := 1.0;
5852    L_API_NAME    CONSTANT VARCHAR2(30) := 'Delete_Task';
5853    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
5854    -- local variables defined for the procedure
5855    l_msg_data             VARCHAR2(2000);
5856    l_return_status        VARCHAR2(1);
5857    l_interaction_id       NUMBER;
5858    l_msg_count            NUMBER;
5859 
5860    -- To find task related information
5861    CURSOR c_Task (x_id IN NUMBER) IS
5862       SELECT * FROM  Ahl_Visit_Tasks_VL
5863       WHERE  VISIT_TASK_ID = x_id;
5864    c_Task_rec    c_Task%ROWTYPE;
5865 
5866    -- To find visit related information
5867    CURSOR c_Visit (x_id IN NUMBER) IS
5868       SELECT * FROM Ahl_Visits_VL
5869       WHERE  VISIT_ID = x_id;
5870    c_Visit_rec    c_Visit%ROWTYPE;
5871 
5872    CURSOR c_sr_ovn(c_sr_id IN NUMBER) IS
5873       SELECT object_version_number, incident_number
5874       FROM cs_incidents_all_b
5875       WHERE INCIDENT_ID = c_sr_id;
5876    c_sr_ovn_rec c_sr_ovn%ROWTYPE;
5877 
5878 -- post 11.5.10
5879 -- yazhou start
5880 
5881   CURSOR c_visit_task_exists(p_visit_id IN NUMBER)
5882   IS
5883     SELECT 'x'
5884     FROM   ahl_visit_tasks_b
5885     WHERE  visit_id = p_visit_id
5886     AND  STATUS_CODE = 'PLANNING';
5887 
5888 -- yazhou end
5889 -- amagrawa start
5890 CURSOR c_get_wo_details(x_id IN NUMBER)
5891  IS
5892  SELECT
5893         scheduled_start_date,
5894         SCHEDULED_COMPLETION_DATE
5895  FROM   wip_discrete_jobs WHERE wip_entity_id =
5896         (
5897          SELECT
5898          wip_entity_id
5899          FROM ahl_workorders
5900          WHERE
5901            master_workorder_flag = 'Y' AND
5902            visit_task_id IS null AND
5903            status_code not in (22,7) and
5904            visit_id=x_id
5905           );
5906    c_get_wo_details_rec  c_get_wo_details%ROWTYPE;
5907 -- amagrawa end
5908 
5909 -- MANESING::Bug 13713141, 16-Apr-2012, added following cursors
5910 -- Cursor to find out the Repair Batch for the given task
5911 CURSOR get_rpr_batch_for_task_csr (c_visit_task_id NUMBER) IS
5912     SELECT repair_batch_name, status_code
5913     FROM   AHL_VISIT_TASKS_B
5914     WHERE  cost_parent_id  IS NULL
5915     START WITH visit_task_id = c_visit_task_id
5916     CONNECT BY visit_task_id = Prior cost_parent_id;
5917 
5918 -- Cursor to check if Repair Batch has planned tasks
5919 CURSOR chk_rpr_batch_has_planed_tasks (c_repair_batch_name VARCHAR2) IS
5920     SELECT 'X'
5921     FROM   AHL_VISIT_TASKS_B
5922     WHERE  cost_parent_id  IS NOT NULL  -- to filter repair batch task
5923     AND    status_code     = 'PLANNING'
5924     START WITH repair_batch_name = c_repair_batch_name
5925     CONNECT BY cost_parent_id    = Prior visit_task_id;
5926 
5927    l_dummy                 VARCHAR2(1);
5928    l_planned_order_flag    VARCHAR2(1);
5929    l_repair_batch_name     VARCHAR2(240);
5930    l_rpr_batch_status_code VARCHAR2(30);
5931 
5932  BEGIN
5933 
5934    IF (l_log_procedure >= l_log_current_level) THEN
5935       fnd_log.string(l_log_procedure,
5936                      L_DEBUG_KEY ||'.begin',
5937                      'At the start of PL SQL procedure.');
5938    END IF;
5939    --------------------- initialize -----------------------
5940    SAVEPOINT Delete_Task;
5941 
5942    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
5943       Fnd_Msg_Pub.initialize;
5944    END IF;
5945 
5946    --  Initialize API return status to success
5947     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
5948 
5949    -- Standard call to check for call compatibility.
5950    IF NOT Fnd_Api.compatible_api_call(
5951          l_api_version,
5952          p_api_version,
5953          l_api_name,
5954          G_PKG_NAME
5955    ) THEN
5956       RAISE Fnd_Api.g_exc_unexpected_error;
5957    END IF;
5958  --------------------Start of API Body-----------------------------------
5959 
5960  -------------------Cursor values------------------------------------
5961    OPEN c_Task(p_visit_task_id);
5962    FETCH c_Task INTO c_Task_rec;
5963    CLOSE c_Task;
5964 
5965    OPEN c_visit(c_task_rec.visit_id);
5966    FETCH c_visit INTO c_visit_rec;
5967    CLOSE c_visit;
5968 
5969    OPEN c_sr_ovn(c_task_rec.service_request_id);
5970    FETCH c_sr_ovn into c_sr_ovn_rec;
5971    CLOSE c_sr_ovn;
5972 
5973    IF (l_log_statement >= l_log_current_level) THEN
5974        fnd_log.string(l_log_statement,
5975                       L_DEBUG_KEY,
5976                       ': Visit Id = ' || c_visit_rec.visit_id ||
5977                       ': Status Code ' || c_visit_rec.status_code ||
5978                       ': Visit Id = ' || c_task_rec.visit_task_id);
5979    END IF;
5980 
5981    ---------------------------------------------- Start----------------------------------------------------------
5982 
5983    IF c_visit_rec.status_code IN ('CLOSED','CANCELLED') THEN
5984        Fnd_Message.SET_NAME('AHL','AHL_VWP_NOT_USE_VISIT');
5985        Fnd_Msg_Pub.ADD;
5986        RAISE Fnd_Api.G_EXC_ERROR;
5987    ELSIF c_task_rec.status_code = 'PLANNING' THEN
5988         IF c_task_rec.task_type_code = 'SUMMARY' THEN
5989 
5990          IF (l_log_statement >= l_log_current_level) THEN
5991              fnd_log.string(l_log_statement,
5992                             L_DEBUG_KEY,
5993                            'Before Calling Delete_Summary_Task');
5994          END IF;
5995          Delete_Summary_Task
5996           ( p_api_version      => l_api_version,
5997             p_init_msg_list    => p_init_msg_list,
5998             p_commit           => Fnd_Api.g_false,
5999             p_validation_level => p_validation_level,
6000             p_module_type      => p_module_type,
6001             p_visit_task_id    => p_visit_task_id,
6002             x_return_status    => l_return_status,
6003             x_msg_count        => l_msg_count,
6004             x_msg_data         => l_msg_data
6005           );
6006 
6007          IF (l_log_statement >= l_log_current_level) THEN
6008              fnd_log.string(l_log_statement,
6009                             L_DEBUG_KEY,
6010                            'After Calling Delete_Summary_Task, Return Status = ' || l_return_status );
6011          END IF;
6012 
6013        ELSIF c_task_rec.task_type_code = 'PLANNED' THEN
6014 
6015           IF (l_log_statement >= l_log_current_level) THEN
6016               fnd_log.string(l_log_statement,
6017                              L_DEBUG_KEY,
6018                             'Before Calling AHL_VWP_PLAN_TASKS_PVT.Delete_Planned_Task');
6019           END IF;
6020           AHL_VWP_PLAN_TASKS_PVT.Delete_Planned_Task
6021           ( p_api_version      => l_api_version,
6022             p_init_msg_list    => p_init_msg_list,
6023             p_commit           => Fnd_Api.g_false,
6024             p_validation_level => p_validation_level,
6025             p_module_type      => p_module_type,
6026             p_visit_task_id    => p_visit_task_id,
6027             x_return_status    => l_return_status,
6028             x_msg_count        => l_msg_count,
6029             x_msg_data         => l_msg_data
6030           );
6031 
6032           IF (l_log_statement >= l_log_current_level) THEN
6033               fnd_log.string(l_log_statement,
6034                              L_DEBUG_KEY,
6035                             'After Calling AHL_VWP_PLAN_TASKS_PVT.Delete_Planned_Task, Return Status = ' || l_return_status);
6036           END IF;
6037 
6038        ELSIF c_task_rec.task_type_code = 'UNPLANNED' THEN
6039 
6040           IF (l_log_statement >= l_log_current_level) THEN
6041               fnd_log.string(l_log_statement,
6042                              L_DEBUG_KEY,
6043                             'Before Calling AHL_VWP_UNPLAN_TASKS_PVT.Delete_Unplanned_Task');
6044           END IF;
6045           AHL_VWP_UNPLAN_TASKS_PVT.Delete_Unplanned_Task
6046           ( p_api_version      => l_api_version,
6047             p_init_msg_list    => p_init_msg_list,
6048             p_commit           => Fnd_Api.g_false,
6049             p_validation_level => p_validation_level,
6050             p_module_type      => p_module_type,
6051             p_visit_task_id    => p_visit_task_id,
6052             x_return_status    => l_return_status,
6053             x_msg_count        => l_msg_count,
6054             x_msg_data         => l_msg_data
6055           );
6056 
6057           IF (l_log_statement >= l_log_current_level) THEN
6058               fnd_log.string(l_log_statement,
6059                              L_DEBUG_KEY,
6060                             'After Calling AHL_VWP_UNPLAN_TASKS_PVT.Delete_Unplanned_Task, Return Status = ' || l_return_status );
6061           END IF;
6062            ELSIF c_task_rec.task_type_code = 'STAGE' THEN -- VWPE 12730539:: PRAKKUM :: 26-JUL-2011 :: to delete stage tasks
6063 
6064           IF (l_log_statement >= l_log_current_level) THEN
6065               fnd_log.string(l_log_statement,
6066                              L_DEBUG_KEY,
6067                             'Before Calling Delete_Stage_Task');
6068           END IF;
6069           Delete_Stage_Task
6070           ( p_api_version      => l_api_version,
6071             p_init_msg_list    => p_init_msg_list,
6072             p_commit           => Fnd_Api.g_false,
6073             p_validation_level => p_validation_level,
6074             p_module_type      => p_module_type,
6075             p_visit_task_id    => p_visit_task_id,
6076             x_return_status    => l_return_status,
6077             x_msg_count        => l_msg_count,
6078             x_msg_data         => l_msg_data
6079           );
6080 
6081           IF (l_log_statement >= l_log_current_level) THEN
6082               fnd_log.string(l_log_statement,
6083                              L_DEBUG_KEY,
6084                             'After Calling Delete_Stage_Task, Return Status = ' || l_return_status
6085                             ||', l_msg_data= '||l_msg_data);
6086           END IF;
6087 
6088        ELSE
6089 
6090          IF (l_log_statement >= l_log_current_level) THEN
6091              fnd_log.string(l_log_statement,
6092                             L_DEBUG_KEY,
6093                            'Before Calling Delete_Unassociated_Task');
6094          END IF;
6095          Delete_Unassociated_Task
6096          (p_api_version      => l_api_version,
6097           p_init_msg_list    => p_init_msg_list,
6098           p_commit           => Fnd_Api.g_false,
6099           p_validation_level => p_validation_level,
6100           p_module_type      => p_module_type,
6101           p_visit_task_id    => p_visit_task_id,
6102           x_return_status    => l_return_status,
6103           x_msg_count        => l_msg_count,
6104           x_msg_data         => l_msg_data
6105           );
6106           IF (l_log_statement >= l_log_current_level) THEN
6107               fnd_log.string(l_log_statement,
6108                              L_DEBUG_KEY,
6109                              'After Calling Delete_Unassociated_Task, Return Status = ' || l_return_status);
6110           END IF;
6111 
6112     END IF;
6113 
6114    l_msg_count := Fnd_Msg_Pub.count_msg;
6115 
6116     IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
6117       x_msg_count := l_msg_count;
6118       x_return_status := Fnd_Api.G_RET_STS_ERROR;
6119       RAISE Fnd_Api.G_EXC_ERROR;
6120     END IF;
6121 
6122   -- Added cxcheng POST11510--------------
6123    --Now adjust the times derivation for entire visit task could delete at
6124    --MR level
6125 
6126      IF (l_log_statement >= l_log_current_level) THEN
6127          fnd_log.string(l_log_statement,
6128                         L_DEBUG_KEY,
6129                         'Before Calling AHL_VWP_TIMES_PVT.calculate_Task_Times');
6130      END IF;
6131 
6132      AHL_VWP_TIMES_PVT.calculate_Task_Times(p_api_version      => 1.0,
6133                                             p_init_msg_list    => Fnd_Api.G_FALSE,
6134                                             p_commit           => Fnd_Api.G_FALSE,
6135                                             p_validation_level => Fnd_Api.G_VALID_LEVEL_FULL,
6136                                             x_return_status    => l_return_status,
6137                                             x_msg_count        => l_msg_count,
6138                                             x_msg_data         => l_msg_data,
6139                                             p_visit_id         => c_task_rec.visit_id);
6140 
6141      IF (l_log_statement >= l_log_current_level) THEN
6142          fnd_log.string(l_log_statement,
6143                         L_DEBUG_KEY,
6144                         'After Calling AHL_VWP_TIMES_PVT.calculate_Task_Times, Return Status = ' || l_return_status);
6145      END IF;
6146 
6147   IF (l_log_statement >= l_log_current_level) THEN
6148       fnd_log.string(l_log_statement,
6149                      L_DEBUG_KEY,
6150                      'Before Calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials');
6151   END IF;
6152 
6153   /* Operation flag changed to 'U' From 'R' by mpothuku on 02/07/05 */
6154   AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials
6155     (p_api_version        => p_api_version,
6156      p_init_msg_list      => Fnd_Api.G_FALSE,
6157      p_commit             => Fnd_Api.G_FALSE,
6158      p_visit_id           => c_task_rec.visit_id,
6159      p_visit_task_id      => NULL,
6160      p_org_id             => NULL,
6161      p_start_date         => NULL,
6162      p_operation_flag     => 'U',
6163      x_planned_order_flag => l_planned_order_flag ,
6164      x_return_status      => l_return_status,
6165      x_msg_count          => l_msg_count,
6166      x_msg_data           => l_msg_data);
6167 
6168   IF (l_log_statement >= l_log_current_level) THEN
6169       fnd_log.string(l_log_statement,
6170                      L_DEBUG_KEY,
6171                      'After Calling AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials, Return Status =  ' || l_return_status);
6172   END IF;
6173 
6174   IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
6175     x_msg_count := l_msg_count;
6176     x_return_status := Fnd_Api.G_RET_STS_ERROR;
6177     RAISE Fnd_Api.G_EXC_ERROR;
6178   END IF;
6179 
6180         -- post 11.5.10
6181         --yazhou start
6182         -- If visit is in partially released status
6183         -- and after this task is deleted, no other task is in Planning status
6184         -- then set the visit status to RELEASED
6185         IF c_visit_rec.status_code = 'PARTIALLY RELEASED' THEN
6186         -- yazhou end
6187 
6188            OPEN c_visit_task_exists(c_visit_rec.visit_id);
6189            FETCH c_visit_task_exists INTO l_dummy;
6190            OPEN c_get_wo_details(c_task_rec.visit_id);
6191            FETCH c_get_wo_details into c_get_wo_details_rec;
6192 
6193            IF (c_visit_task_exists%NOTFOUND and
6194            c_visit_rec.start_date_time = c_get_wo_details_rec.scheduled_start_date and
6195            c_visit_rec.close_date_time = c_get_wo_details_rec.scheduled_completion_date)
6196            THEN
6197                UPDATE ahl_visits_b
6198                  SET status_code = 'RELEASED',
6199                      object_version_number = object_version_number + 1
6200                 WHERE visit_id = c_visit_rec.visit_id;
6201            END IF;
6202            CLOSE c_visit_task_exists;
6203            CLOSE c_get_wo_details;
6204 
6205     -- post 11.5.10
6206     -- yazhou start
6207 
6208         END IF;
6209 
6210 -- yazhou end
6211 
6212     /* MANESING::Bug 13713141, 16-Apr-2012, For Component Visits, Repair Batch status should also
6213      * change similar to the way Visit status changes as Repair Batches are like mini-visits.
6214      * So, if Repair Batch is in 'PARTIALLY RELEASED' status and after task deletion,
6215      * no other task is in Planning status, then change Repair Batch status to RELEASED.
6216      */
6217     IF (AHL_CMP_UTIL_PKG.Is_Comp_Visit (c_visit_rec.visit_id) = 'Y') THEN
6218 
6219         -- find which Repair Batch, the deleted task belongs to
6220         OPEN get_rpr_batch_for_task_csr (p_visit_task_id);
6221         FETCH get_rpr_batch_for_task_csr INTO l_repair_batch_name, l_rpr_batch_status_code;
6222         IF (get_rpr_batch_for_task_csr%FOUND) THEN
6223 
6224             -- change Repair Batch status as mentioned above
6225             IF (l_rpr_batch_status_code = 'PARTIALLY RELEASED') THEN
6226 
6227                 OPEN chk_rpr_batch_has_planed_tasks (l_repair_batch_name);
6228                 FETCH chk_rpr_batch_has_planed_tasks INTO l_dummy;
6229                 IF (chk_rpr_batch_has_planed_tasks%NOTFOUND) THEN
6230 
6231                     IF (l_log_statement >= l_log_current_level) THEN
6232                         FND_LOG.string(l_log_statement, l_debug_key, 'Repair Batch ' || l_repair_batch_name || ' has no planned tasks.');
6233                     END IF;
6234 
6235                     UPDATE AHL_VISIT_TASKS_B
6236                     SET    status_code           = 'RELEASED',
6237                            object_version_number = object_version_number + 1,
6238                            last_update_date      = SYSDATE,
6239                            last_updated_by       = Fnd_Global.USER_ID,
6240                            last_update_login     = Fnd_Global.LOGIN_ID
6241                     WHERE  repair_batch_name = l_repair_batch_name;
6242 
6243                 END IF;
6244                 CLOSE chk_rpr_batch_has_planed_tasks;
6245 
6246             END IF; -- IF l_rpr_batch_status_code = 'PARTIALLY RELEASED'
6247         END IF;
6248         CLOSE get_rpr_batch_for_task_csr;
6249 
6250     END IF;  -- IF Component Visit
6251 
6252 -- yazhou 29-Jun-2006 starts
6253 -- bug#5359943
6254 -- Pass p_status_id as 1 (OPEN)
6255 
6256     -- If SR Id of task is not null
6257     -- then update the status of the SR to OPEN
6258     IF (l_log_statement >= l_log_current_level) THEN
6259         fnd_log.string(l_log_statement,
6260                        L_DEBUG_KEY,
6261                        'Service Request Id = ' || c_task_rec.service_request_id);
6262     END IF;
6263     IF c_task_rec.service_request_id IS NOT NULL THEN
6264       IF (l_log_statement >= l_log_current_level) THEN
6265           fnd_log.string(l_log_statement,
6266                          L_DEBUG_KEY,
6267                          'Before Calling CS_ServiceRequest_PUB.Update_Status');
6268       END IF;
6269 
6270       CS_ServiceRequest_PUB.Update_Status
6271       (
6272         p_api_version => 2.0,
6273         p_init_msg_list => p_init_msg_list,
6274         p_commit => FND_API.G_FALSE,
6275         p_resp_appl_id => NULL,
6276         p_resp_id => NULL,
6277         p_user_id => NULL,
6278         p_login_id => NULL,
6279         p_status_id => 1,   --OPEN
6280         p_closed_date => NULL,
6281         p_audit_comments => NULL,
6282         p_called_by_workflow => FND_API.G_FALSE,
6283         p_workflow_process_id => NULL,
6284         p_comments => NULL,
6285         p_public_comment_flag => FND_API.G_FALSE,
6286         p_validate_sr_closure => 'N',
6287         p_auto_close_child_entities => 'N',
6288         p_request_id => NULL,
6289         p_request_number => c_sr_ovn_rec.incident_number,
6290         x_return_status => l_return_status,
6291         x_msg_count => l_msg_count,
6292         x_msg_data => l_msg_data,
6293         p_object_version_number => c_sr_ovn_rec.object_version_number,
6294 --      p_status => 'OPEN',
6295         x_interaction_id => l_interaction_id
6296       );
6297 -- yazhou 29-Jun-2006 ends
6298 
6299         IF (l_log_statement >= l_log_current_level) THEN
6300             fnd_log.string(l_log_statement,
6301                            L_DEBUG_KEY,
6302                            'After Calling CS_ServiceRequest_PUB.Update_Status, Return Status = ' || l_return_status);
6303         END IF;
6304 
6305   l_msg_count := Fnd_Msg_Pub.count_msg;
6306 
6307       IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
6308           x_msg_count := l_msg_count;
6309           x_return_status := Fnd_Api.G_RET_STS_ERROR;
6310           RAISE Fnd_Api.G_EXC_ERROR;
6311       END IF;
6312      END IF;
6313 
6314 END IF;
6315 
6316   -- Bug fix #4187213
6317   -- yazhou 16-Feb-2005
6318     IF c_visit_rec.Any_Task_Chg_Flag='N' THEN
6319      AHL_VWP_RULES_PVT.update_visit_task_flag(
6320     p_visit_id         =>c_visit_rec.visit_id,
6321     p_flag             =>'Y',
6322     x_return_status    =>x_return_status);
6323 
6324       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6325         RAISE FND_API.G_EXC_ERROR;
6326       END IF;
6327     END IF;
6328   ------------------------End of API Body------------------------------------
6329 
6330    --Standard check to count messages
6331    l_msg_count := Fnd_Msg_Pub.count_msg;
6332 
6333    IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
6334       x_msg_count := l_msg_count;
6335       x_return_status := Fnd_Api.G_RET_STS_ERROR;
6336       RAISE Fnd_Api.G_EXC_ERROR;
6337    END IF;
6338 
6339    --Standard check for commit
6340    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
6341       COMMIT;
6342    END IF;
6343 
6344    IF (l_log_procedure >= l_log_current_level) THEN
6345          fnd_log.string(l_log_procedure,
6346                         L_DEBUG_KEY ||'.end',
6347                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
6348    END IF;
6349 
6350 EXCEPTION
6351    WHEN Fnd_Api.g_exc_error THEN
6352       ROLLBACK TO Delete_Task;
6353       x_return_status := Fnd_Api.g_ret_sts_error;
6354       Fnd_Msg_Pub.count_and_get (
6355             p_encoded => Fnd_Api.g_false,
6356             p_count   => x_msg_count,
6357             p_data    => x_msg_data
6358       );
6359    WHEN Fnd_Api.g_exc_unexpected_error THEN
6360       ROLLBACK TO Delete_Task;
6361       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
6362       Fnd_Msg_Pub.count_and_get (
6363             p_encoded => Fnd_Api.g_false,
6364             p_count   => x_msg_count,
6365             p_data    => x_msg_data
6366       );
6367    WHEN OTHERS THEN
6368       ROLLBACK TO Delete_Task;
6369       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
6370       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
6371     THEN
6372          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
6373       END IF;
6374       Fnd_Msg_Pub.count_and_get (
6375             p_encoded => Fnd_Api.g_false,
6376             p_count   => x_msg_count,
6377             p_data    => x_msg_data
6378       );
6379 END Delete_Task;
6380 
6381 --------------------------------------------------------------------
6382 -- PROCEDURE
6383 --    Delete_Unassociated_Task
6384 --
6385 -- PURPOSE
6386 --    To delete Unassociated tasks for the Maintenace visit.
6387 --------------------------------------------------------------------
6388 
6389 PROCEDURE Delete_Unassociated_Task (
6390    p_api_version      IN         NUMBER,
6391    p_init_msg_list    IN         VARCHAR2  := Fnd_Api.g_false,
6392    p_commit           IN         VARCHAR2  := Fnd_Api.g_false,
6393    p_validation_level IN         NUMBER    := Fnd_Api.g_valid_level_full,
6394    p_module_type      IN         VARCHAR2  := 'JSP',
6395    p_visit_task_ID    IN         NUMBER,
6396    x_return_status    OUT NOCOPY VARCHAR2,
6397    x_msg_count        OUT NOCOPY NUMBER,
6398    x_msg_data         OUT NOCOPY VARCHAR2
6399 )
6400 
6401 IS
6402    l_api_version CONSTANT NUMBER       := 1.0;
6403    l_api_name    CONSTANT VARCHAR2(30) := 'Delete_Unassociated_Task';
6404    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
6405    -- local variables defined for the procedure
6406    l_visit_id             NUMBER;
6407    l_task_id              NUMBER;
6408    x_task_id              NUMBER;
6409    l_est_price            NUMBER;
6410    l_act_price            NUMBER;
6411    l_count                NUMBER;
6412    l_msg_count            NUMBER;
6413    l_msg_data             VARCHAR2(2000);
6414    l_return_status        VARCHAR2(1);
6415 
6416   -- To find all tasks related information
6417    CURSOR c_Task (x_id IN NUMBER) IS
6418       SELECT * FROM Ahl_Visit_Tasks_VL
6419       WHERE Visit_Task_ID = x_id;
6420       c_task_rec    c_Task%ROWTYPE;
6421 
6422   -- To find visit related information
6423    CURSOR c_Visit (x_id IN NUMBER) IS
6424       SELECT *
6425       FROM  Ahl_Visits_VL
6426       WHERE VISIT_ID = x_id;
6427       c_visit_rec      c_Visit%ROWTYPE;
6428 
6429   -- To find any task which have primary visit task id as deleted task id
6430     --CURSOR c_primary (x_visit_id IN NUMBER, x_task_id IN NUMBER) IS
6431   CURSOR c_primary (x_task_id IN NUMBER) IS
6432       SELECT Visit_Task_Id, Object_Version_Number,visit_id
6433       FROM  Ahl_Visit_Tasks_VL
6434       WHERE --VISIT_ID = x_visit_id AND
6435     PRIMARY_VISIT_TASK_ID = x_task_id
6436       AND status_code <> 'DELETED';
6437      c_primary_rec     c_primary%ROWTYPE;
6438 
6439  -- To find any task links for a deleted task
6440     CURSOR c_links (x_id IN NUMBER) IS
6441       SELECT COUNT(*) FROM Ahl_Task_Links L ,Ahl_Visit_Tasks_B T
6442       WHERE (T.VISIT_TASK_ID = L.VISIT_TASK_ID OR T.VISIT_TASK_ID = L.PARENT_TASK_ID)
6443       AND T.VISIT_TASK_ID = x_id;
6444 
6445     -- To find if WIP job is created for the Visit
6446     CURSOR c_wo_exist(x_task_id IN NUMBER)
6447     IS
6448     select 'X' from ahl_workorders
6449                   where VISIT_TASK_ID=x_task_id;
6450 
6451     -- To find if WIP job is created for the Visit
6452     CURSOR c_workorders(x_task_id IN NUMBER)
6453     IS
6454     SELECT * FROM AHL_WORKORDERS
6455     WHERE VISIT_TASK_ID=x_task_id
6456     AND STATUS_CODE<>'22' AND STATUS_CODE<> '7';
6457 
6458     l_workrec           c_workorders%ROWTYPE;
6459     l_workorder_rec     AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
6460     l_workoper_tbl      AHL_PRD_WORKORDER_PVT.PRD_WORKOPER_TBL;
6461     l_wip_load_flag     VARCHAR2(1):= 'Y';
6462     l_workorder_present VARCHAR2(1);
6463     l_entl_rec_tbl        AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type; --salogan added for supplier warranty
6464 
6465 BEGIN
6466    IF (l_log_procedure >= l_log_current_level) THEN
6467        fnd_log.string(l_log_procedure,
6468                       L_DEBUG_KEY ||'.begin',
6469                       'At the start of PL SQL procedure.');
6470    END IF;
6471 
6472    --------------------- initialize -----------------------
6473    SAVEPOINT Delete_Unassociated_Task;
6474 
6475    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
6476       Fnd_Msg_Pub.initialize;
6477    END IF;
6478 
6479    --  Initialize API return status to success
6480     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
6481 
6482    -- Standard call to check for call compatibility.
6483    IF NOT Fnd_Api.compatible_api_call(
6484          l_api_version,
6485          p_api_version,
6486          l_api_name,
6487          G_PKG_NAME
6488    ) THEN
6489       RAISE Fnd_Api.g_exc_unexpected_error;
6490    END IF;
6491 
6492 ------------------------Start of API Body------------------------------------
6493    IF (l_log_statement >= l_log_current_level) THEN
6494        fnd_log.string(l_log_statement,
6495                       L_DEBUG_KEY,
6496                       ':Task Id' || p_visit_task_ID);
6497    END IF;
6498 
6499    -- To check if the input taskid exists in task entity.
6500    OPEN c_Task(p_Visit_Task_ID);
6501    FETCH c_Task INTO c_task_rec;
6502 
6503    IF c_Task%NOTFOUND THEN
6504       CLOSE c_Task;
6505       IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
6506              Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
6507              Fnd_Msg_Pub.ADD;
6508       END IF;
6509       RAISE Fnd_Api.g_exc_error;
6510    END IF;
6511    CLOSE c_Task;
6512 
6513       -- To find the visit related information
6514       OPEN c_Visit(c_task_rec.visit_id);
6515       FETCH c_Visit INTO c_visit_rec;
6516       CLOSE c_Visit;
6517 
6518       OPEN  c_workorders(c_task_rec.visit_task_id);
6519       FETCH c_workorders INTO l_workrec;
6520 
6521       IF c_workorders%FOUND THEN
6522 
6523         IF l_workrec.status_code='17' THEN
6524             l_workorder_rec.workorder_id:=l_workrec.workorder_id;
6525             l_workorder_rec.visit_task_id:=p_visit_task_id;
6526 
6527             Get_WorkOrder_Attribs(
6528               p_x_prd_workorder_rec => l_workorder_rec
6529             );
6530 
6531             l_msg_count := FND_MSG_PUB.count_msg;
6532              IF l_msg_count > 0 THEN
6533                 x_msg_count := l_msg_count;
6534                 x_return_status := FND_API.G_RET_STS_ERROR;
6535                 RAISE FND_API.G_EXC_ERROR;
6536              END IF;
6537 
6538             l_workorder_rec.wip_entity_id := null;
6539             l_workorder_rec.STATUS_CODE:='22'; --Deleted Status Refer DLD to Verify.
6540 
6541             IF (l_log_statement >= l_log_current_level) THEN
6542                 fnd_log.string(l_log_statement,
6543                                L_DEBUG_KEY,
6544                                'Before Calling AHL_PRD_WORKORDER_PVT.update_job');
6545             END IF;
6546             AHL_PRD_WORKORDER_PVT.update_job
6547             (
6548              p_api_version         => 1.0,
6549              p_init_msg_list       => fnd_api.g_false,
6550              p_commit              => fnd_api.g_false,
6551              p_validation_level    => p_validation_level,
6552              p_default             => fnd_api.g_false,
6553              p_module_type         => NULL,
6554              x_return_status       => x_return_status,
6555              x_msg_count           => x_msg_count,
6556              x_msg_data            => x_msg_data,
6557              p_wip_load_flag       => 'Y',
6558              p_x_prd_workorder_rec => l_workorder_rec,
6559              p_x_prd_workoper_tbl  => l_workoper_tbl
6560              );
6561 
6562              IF (l_log_statement >= l_log_current_level) THEN
6563                  fnd_log.string(l_log_statement,
6564                                 L_DEBUG_KEY,
6565                                 'After Calling AHL_PRD_WORKORDER_PVT.update_job, Return Status = ' || x_return_status);
6566              END IF;
6567 
6568              l_msg_count := FND_MSG_PUB.count_msg;
6569              IF l_msg_count > 0 OR NVL(x_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
6570                 x_msg_count := l_msg_count;
6571                 x_return_status := FND_API.G_RET_STS_ERROR;
6572                 RAISE FND_API.G_EXC_ERROR;
6573              END IF;
6574 
6575         ELSE
6576         -- if status is not draft
6577               Fnd_Message.set_name ('AHL', 'AHL_VWP_TSK_CANNOT_DEL');
6578               Fnd_Msg_Pub.ADD;
6579               RAISE FND_API.G_EXC_ERROR;
6580         END IF; -- End of Job Status
6581         CLOSE c_workorders;
6582 
6583       ELSE
6584 
6585          CLOSE c_workorders;
6586 
6587       END IF; -- End of check if the job is for the task
6588 
6589       OPEN  c_wo_exist(c_task_rec.visit_task_id);
6590       FETCH c_wo_exist INTO l_workorder_present;
6591 
6592       IF c_wo_exist%FOUND THEN
6593          l_workorder_present :='Y';
6594       ELSE
6595          l_workorder_present :='N';
6596       END IF;
6597       CLOSE c_wo_exist;
6598 
6599             l_visit_id := c_task_rec.visit_id;
6600             l_task_id  := p_Visit_Task_ID;
6601 
6602          --To update all tasks which have the deleting task as cost or originating task
6603             AHL_VWP_RULES_PVT.Update_Cost_Origin_Task
6604                 (p_visit_task_id  =>l_task_Id,
6605                  x_return_status  =>x_return_status
6606                 );
6607 
6608                 IF NVL(x_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
6609                    x_msg_count := l_msg_count;
6610                    x_return_status := FND_API.G_RET_STS_ERROR;
6611                    RAISE FND_API.G_EXC_ERROR;
6612                 END IF;
6613 
6614             -- To find if task deleted from a visit in the Primary Plan,
6615             -- then any task associated to it in a simulation visit must have the association removed.
6616             --OPEN c_primary (l_visit_id, l_task_id);
6617       IF(c_visit_rec.ASSO_PRIMARY_VISIT_ID is null) THEN
6618         OPEN c_primary (l_task_id);
6619         LOOP
6620           FETCH c_primary INTO c_primary_rec;
6621           EXIT WHEN c_primary%NOTFOUND;
6622           IF c_primary_rec.visit_task_id IS NOT NULL THEN
6623             UPDATE AHL_VISIT_TASKS_B SET PRIMARY_VISIT_TASK_ID = NULL,
6624             OBJECT_VERSION_NUMBER = c_primary_rec.object_version_number + 1
6625             WHERE --VISIT_ID = l_visit_id AND
6626             VISIT_TASK_ID = c_primary_rec.visit_task_id;
6627             IF (l_log_statement >= l_log_current_level) THEN
6628                 fnd_log.string(l_log_statement,
6629                                L_DEBUG_KEY,
6630                                'Updated AHL_VISIT_TASKS_B for Visit Task Id =  ' || c_primary_rec.visit_task_id);
6631             END IF;
6632           END IF;
6633         END LOOP;
6634         CLOSE c_primary;
6635       END IF;
6636 
6637             -- To find if a task deleted has associated Children Tasks, tasks that define it as a parent,
6638             -- the association must be removed.
6639             OPEN c_links (l_task_id);
6640             FETCH c_links INTO l_count;
6641                 IF l_count > 0 THEN
6642                     DELETE Ahl_Task_Links
6643                     WHERE VISIT_TASK_ID = l_task_id
6644            OR PARENT_TASK_ID = l_task_id;
6645                 END IF;
6646             CLOSE c_links;
6647 
6648             IF (l_log_statement >= l_log_current_level) THEN
6649                 fnd_log.string(l_log_statement,
6650                                L_DEBUG_KEY,
6651                                'Project Task Id = ' || c_task_rec.PROJECT_TASK_ID);
6652             END IF;
6653 
6654             -- When a visit's task is deleted than the related projects's task is also deleted
6655             IF c_task_rec.PROJECT_TASK_ID IS NOT NULL THEN
6656 
6657                 IF (l_log_statement >= l_log_current_level) THEN
6658                     fnd_log.string(l_log_statement,
6659                                    L_DEBUG_KEY,
6660                                    'Before Calling AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project');
6661                 END IF;
6662                 AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project(
6663                      /*p_api_version    => l_api_version,
6664                      p_init_msg_list    => p_init_msg_list,
6665                      p_commit           => Fnd_Api.g_false,
6666                      p_validation_level => p_validation_level,
6667                      p_module_type      => p_module_type,*/
6668                      p_visit_task_id    => c_task_rec.Visit_Task_ID,
6669                      x_return_status    => l_return_status);
6670                      /*x_msg_count      => x_msg_count,
6671                      x_msg_data         => x_msg_data);*/
6672 
6673                 l_msg_count := FND_MSG_PUB.count_msg;
6674                 IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
6675                        x_msg_count := l_msg_count;
6676                        x_return_status := FND_API.G_RET_STS_ERROR;
6677                        RAISE FND_API.G_EXC_ERROR;
6678                 END IF;
6679            END IF;
6680 
6681         IF (l_log_statement >= l_log_current_level) THEN
6682             fnd_log.string(l_log_statement,
6683                            L_DEBUG_KEY,
6684                            'Value of l_workorder_present = ' || l_workorder_present);
6685         END IF;
6686 
6687         IF l_workorder_present = 'N' THEN
6688 
6689                      -- Delete task translation (AHL_VISIT_TASKS_TL) table data
6690                         DELETE FROM Ahl_Visit_Tasks_TL
6691                         WHERE  Visit_Task_ID = l_task_id;
6692 
6693                          IF (SQL%NOTFOUND) THEN
6694                             IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
6695                                 Fnd_Message.set_name ('AHL', 'AHL_API_RECORD_NOT_FOUND');
6696                                 Fnd_Msg_Pub.ADD;
6697                             END IF;
6698                             RAISE Fnd_Api.g_exc_error;
6699                          END IF;
6700 
6701                        -- Delete task base (AHL_VISIT_TASKS_B) table data
6702                          DELETE FROM Ahl_Visit_Tasks_B
6703                          WHERE  Visit_Task_ID = l_task_id;
6704 
6705                          IF (SQL%NOTFOUND) THEN
6706                                 Fnd_Message.set_name ('AHL', 'AHL_API_RECORD_NOT_FOUND');
6707                                 Fnd_Msg_Pub.ADD;
6708                             RAISE Fnd_Api.g_exc_error;
6709                         END IF;
6710 
6711        ELSE
6712                                 UPDATE AHL_VISIT_TASKS_B
6713                                     SET STATUS_CODE='DELETED',UNIT_EFFECTIVITY_ID=NULL,
6714                                         OBJECT_VERSION_NUMBER=OBJECT_VERSION_NUMBER+1
6715                                 WHERE VISIT_TASK_ID=l_task_id;
6716 
6717             --salogan added the following code for supplier warranty starts
6718             Get_Entl_rec_for_Delete(
6719                 p_task_id           => l_task_id,
6720                 x_warranty_entl_tbl => l_entl_rec_tbl);
6721             IF (l_log_statement >= l_log_current_level) THEN
6722                 fnd_log.string(l_log_statement,
6723                                L_DEBUG_KEY,
6724                                'Before calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements.');
6725             END IF;
6726 
6727             --Not passing p_commit the main API commits the data at the end
6728             AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements(
6729                 p_api_version                 => p_api_version,
6730                 p_validation_level            => p_validation_level,
6731                 p_module_type                 => p_module_type,
6732                 p_user_role                   => AHL_WARRANTY_ENTL_PVT.G_USER_PLANNER,
6733                 p_x_warranty_entl_tbl         => l_entl_rec_tbl,
6734                 x_return_status               => l_return_status,
6735                 x_msg_count                   => l_msg_count,
6736                 x_msg_data                    => l_msg_data);
6737 
6738             IF (l_log_statement >= l_log_current_level) THEN
6739                 fnd_log.string(l_log_statement,
6740                                L_DEBUG_KEY,
6741                                'After calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements. Return Status = ' ||
6742                                l_return_status);
6743             END IF;
6744 
6745             l_msg_count := Fnd_Msg_Pub.count_msg;
6746             IF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
6747                 x_msg_count := l_msg_count;
6748                 x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6749                 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
6750             END IF;
6751             -- salogan added for supplier warranty ends
6752 
6753                                 IF (l_log_statement >= l_log_current_level) THEN
6754                                     fnd_log.string(l_log_statement,
6755                                                    L_DEBUG_KEY,
6756                                                    'Updation of the status to DELETED');
6757                                 END IF;
6758 
6759        END IF; -- End of l_workorder_present flag check
6760 
6761  ------------------------End of API Body------------------------------------
6762    IF Fnd_Api.to_boolean (p_commit) THEN
6763       COMMIT;
6764    END IF;
6765 
6766    Fnd_Msg_Pub.count_and_get (
6767          p_encoded => Fnd_Api.g_false,
6768          p_count   => x_msg_count,
6769          p_data    => x_msg_data
6770    );
6771 
6772    IF (l_log_procedure >= l_log_current_level) THEN
6773          fnd_log.string(l_log_procedure,
6774                         L_DEBUG_KEY ||'.end',
6775                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
6776    END IF;
6777 EXCEPTION
6778    WHEN Fnd_Api.g_exc_error THEN
6779       ROLLBACK TO Delete_Unassociated_Task;
6780       x_return_status := Fnd_Api.g_ret_sts_error;
6781       Fnd_Msg_Pub.count_and_get (
6782             p_encoded => Fnd_Api.g_false,
6783             p_count   => x_msg_count,
6784             p_data    => x_msg_data
6785       );
6786    WHEN Fnd_Api.g_exc_unexpected_error THEN
6787       ROLLBACK TO Delete_Unassociated_Task;
6788       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
6789       Fnd_Msg_Pub.count_and_get (
6790             p_encoded => Fnd_Api.g_false,
6791             p_count   => x_msg_count,
6792             p_data    => x_msg_data
6793       );
6794    WHEN OTHERS THEN
6795       ROLLBACK TO Delete_Unassociated_Task;
6796       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
6797       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
6798     THEN
6799          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
6800       END IF;
6801       Fnd_Msg_Pub.count_and_get (
6802             p_encoded => Fnd_Api.g_false,
6803             p_count   => x_msg_count,
6804             p_data    => x_msg_data
6805       );
6806 END Delete_Unassociated_Task;
6807 
6808 --------------------------------------------------------------------
6809 -- PROCEDURE
6810 --    Delete_SR_Task
6811 --
6812 -- PURPOSE
6813 -- Added for VWP Post 11.5.10 enhancements
6814 --    To delete SR tasks for the Maintenace visit.
6815 --------------------------------------------------------------------
6816 
6817 PROCEDURE Delete_SR_Task (
6818    p_api_version       IN  NUMBER,
6819    p_init_msg_list     IN  VARCHAR2  := Fnd_Api.g_false,
6820    p_commit            IN  VARCHAR2  := Fnd_Api.g_false,
6821    p_validation_level  IN  NUMBER    := Fnd_Api.g_valid_level_full,
6822    p_module_type       IN  VARCHAR2:= 'JSP',
6823    p_visit_task_ID     IN  NUMBER,
6824    x_return_status     OUT NOCOPY VARCHAR2,
6825    x_msg_count         OUT NOCOPY NUMBER,
6826    x_msg_data          OUT NOCOPY VARCHAR2
6827 )
6828 IS
6829 l_api_version CONSTANT NUMBER       := 1.0;
6830    l_api_name    CONSTANT VARCHAR2(30) := 'Delete SR Task';
6831    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
6832 
6833    -- local variables defined for the procedure
6834    l_orgin_id    NUMBER;
6835    l_visit_id    NUMBER;
6836    l_mr_id       NUMBER;
6837    l_task_id     NUMBER;
6838    l_cost_id     NUMBER;
6839    l_est_price   NUMBER;
6840    l_act_price   NUMBER;
6841    l_count       NUMBER;
6842    l_msg_count   NUMBER;
6843    l_msg_data    VARCHAR2(2000);
6844 
6845     l_workorder_rec         AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
6846     l_workoper_tbl          AHL_PRD_WORKORDER_PVT.PRD_WORKOPER_TBL;
6847 
6848    l_return_status     VARCHAR2(1);
6849    l_workorder_present VARCHAR2(1) := 'N';
6850    l_planned_order_flag VARCHAR2(1);
6851    l_entl_rec_tbl        AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type; --salogan added for supplier warranty
6852 
6853   -- To find all tasks related information
6854    CURSOR c_Task (x_id IN NUMBER) IS
6855       SELECT *
6856       FROM Ahl_Visit_Tasks_VL
6857       WHERE Visit_Task_ID = x_id;
6858       c_task_rec    c_Task%ROWTYPE;
6859 
6860   -- To find visit related information
6861    CURSOR c_Visit (x_id IN NUMBER) IS
6862       SELECT *
6863       FROM  Ahl_Visits_VL
6864       WHERE VISIT_ID = x_id;
6865       c_visit_rec      c_Visit%ROWTYPE;
6866 
6867   -- To find any task which have primary visit task id as deleted task id
6868     --CURSOR c_primary (x_visit_id IN NUMBER, x_task_id IN NUMBER) IS
6869   CURSOR c_primary (x_task_id IN NUMBER) IS
6870       SELECT Visit_Task_Id, Object_Version_Number
6871       FROM  Ahl_Visit_Tasks_VL
6872       WHERE --VISIT_ID = x_visit_id AND
6873     PRIMARY_VISIT_TASK_ID = x_task_id
6874       AND   STATUS_CODE <> 'DELETED';
6875      c_primary_rec     c_primary%ROWTYPE;
6876 
6877   -- To find any task links for a deleted task
6878     CURSOR c_links (x_id IN NUMBER) IS
6879       SELECT COUNT(*) FROM Ahl_Task_Links L ,Ahl_Visit_Tasks_B T
6880       WHERE (T.VISIT_TASK_ID = L.VISIT_TASK_ID
6881       OR T.VISIT_TASK_ID = L.PARENT_TASK_ID)
6882       AND T.VISIT_TASK_ID = x_id;
6883 
6884  -- To find if WIP job is created for the Visit
6885     CURSOR c_workorders(x_task_id IN NUMBER) IS
6886       SELECT * FROM AHL_WORKORDERS
6887       WHERE VISIT_TASK_ID=x_task_id
6888       AND STATUS_CODE<>'22' AND STATUS_CODE<> '7';
6889        c_workrec      c_workorders%ROWTYPE;
6890 
6891     CURSOR c_SR_tasks(c_visit_id NUMBER, c_sr_id NUMBER)
6892     IS
6893     SELECT visit_task_id
6894     FROM ahl_visit_tasks_b
6895     WHERE visit_id = c_visit_id
6896     -- SKPATHAK :: Bug 9745921 :: 31-MAY-2010
6897     -- Added the below condition as the tasks fetched should not be in deleted status
6898     AND status_code <> 'DELETED'
6899     START WITH originating_task_id IS NULL
6900     AND SERVICE_REQUEST_ID = c_sr_id
6901     CONNECT BY PRIOR visit_task_id = originating_task_id
6902       order by visit_task_id desc;
6903 
6904 BEGIN
6905   IF (l_log_procedure >= l_log_current_level) THEN
6906      fnd_log.string(l_log_procedure,
6907                     L_DEBUG_KEY ||'.begin',
6908                     'At the start of PL SQL procedure.');
6909   END IF;
6910 
6911   SAVEPOINT Delete_SR_Task;
6912 
6913         IF Fnd_Api.to_boolean (p_init_msg_list) THEN
6914                 Fnd_Msg_Pub.initialize;
6915         END IF;
6916 
6917    --  Initialize API return status to success
6918 
6919         x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
6920 
6921    -- Standard call to check for call compatibility.
6922         IF NOT Fnd_Api.compatible_api_call(L_api_version,p_api_version,
6923          l_api_name, G_PKG_NAME)
6924         THEN
6925                 RAISE Fnd_Api.g_exc_unexpected_error;
6926         END IF;
6927 
6928    ------------------------Start of API Body------------------------------------
6929    IF (l_log_statement >= l_log_current_level) THEN
6930        fnd_log.string(l_log_statement,
6931                       L_DEBUG_KEY,
6932                       ':Task Id' || p_visit_task_ID);
6933    END IF;
6934 
6935    -- To check if the input taskid exists in task entity.
6936    OPEN c_Task(p_Visit_Task_ID);
6937    FETCH c_Task INTO c_task_rec;
6938 
6939    IF c_Task%NOTFOUND THEN
6940       CLOSE c_Task;
6941 
6942       IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error)
6943       THEN
6944              Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
6945              Fnd_Msg_Pub.ADD;
6946       END IF;
6947       RAISE Fnd_Api.g_exc_error;
6948    ELSE
6949         l_orgin_id   :=c_task_rec.ORIGINATING_TASK_ID;
6950         l_cost_id    :=c_task_rec.cost_parent_id;
6951         l_visit_id   :=c_task_rec.visit_id;
6952         l_mr_id      :=c_task_rec.MR_ID;
6953         l_act_price  :=c_task_rec.actual_price;
6954         l_est_price  :=c_task_rec.estimated_price;
6955 
6956         CLOSE c_Task;
6957 
6958       -- To find the visit related information
6959       OPEN c_Visit(c_task_rec.visit_id);
6960       FETCH c_Visit INTO c_visit_rec;
6961       CLOSE c_Visit;
6962 
6963       IF c_task_rec.service_request_id IS NOT NULL THEN
6964 
6965       OPEN c_SR_tasks(c_task_rec.visit_id,c_task_rec.service_request_id);
6966       LOOP
6967       FETCH c_SR_tasks INTO l_task_id;
6968       EXIT WHEN c_SR_tasks%NOTFOUND;
6969 
6970                     OPEN c_workorders(l_task_id);
6971                     FETCH c_workorders INTO c_workrec;
6972 
6973                     IF C_WORKORDERS%FOUND THEN
6974                         IF (l_log_statement >= l_log_current_level) THEN
6975                             fnd_log.string(l_log_statement,
6976                                            L_DEBUG_KEY,
6977                                            'Check Workorder Status = ' || c_workrec.status_code);
6978                         END IF;
6979                         IF c_workrec.status_code<>'17'
6980                         THEN
6981                              -- ADD THIS MESSAGE TO SEED115
6982                              Fnd_Message.set_name ('AHL', 'AHL_VWP_TSK_CANNOT_DEL');
6983                FND_MESSAGE.SET_TOKEN('Task_Number',c_task_rec.visit_task_number);
6984                              Fnd_Msg_Pub.ADD;
6985                              CLOSE c_workorders;
6986                              CLOSE c_SR_tasks;
6987                              RAISE fnd_Api.g_exc_error;
6988                              -- IF STATUS IS NOT DRAFT RAISE ERROR.
6989                         ELSIF c_workrec.status_code='17'
6990                         THEN
6991 
6992                             l_workorder_present :='Y';
6993                             l_workorder_rec.workorder_id:=c_workrec.workorder_id;
6994                             l_workorder_rec.visit_task_id:=l_task_id;
6995                             Get_WorkOrder_Attribs
6996                             (
6997                              p_x_prd_workorder_rec =>l_workorder_rec
6998                             );
6999 
7000                             l_msg_count := FND_MSG_PUB.count_msg;
7001 
7002                             IF l_msg_count > 0 THEN
7003                                 CLOSE c_workorders;
7004                                 CLOSE c_SR_tasks;
7005                                 x_msg_count := l_msg_count;
7006                                 x_return_status := FND_API.G_RET_STS_ERROR;
7007                                 RAISE FND_API.G_EXC_ERROR;
7008                             END IF;
7009                             l_workorder_rec.wip_entity_id := null;
7010                             l_workorder_rec.STATUS_CODE:='22'; --Deleted Status Refer DLD to Verify.
7011 
7012                             -- SKPATHAK :: 18-JUL-2011 :: VWPE 12730539
7013                             -- Rather than calling update_job, call cancel_visit_jobs
7014                             IF (l_log_statement >= l_log_current_level)THEN
7015                               fnd_log.string(l_log_statement,
7016                                              L_DEBUG_KEY,
7017                                              'Before Calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs. Visit Id: '||c_visit_rec.visit_id||',p_unit_effectivity_id:  '||c_task_rec.unit_effectivity_id||', p_workorder_id: '||c_workrec.workorder_id);
7018                             END IF;
7019 
7020                             /*AHL_PRD_WORKORDER_PVT.update_job
7021                             (
7022                                 p_api_version          =>1.0,
7023                                 p_init_msg_list        =>fnd_api.g_false,
7024                                 p_commit               =>fnd_api.g_false,
7025                                 p_validation_level     =>p_validation_level,
7026                                 p_default              =>fnd_api.g_false,
7027                                 p_module_type          =>NULL,
7028 
7029                                 x_return_status        =>x_return_status,
7030                                 x_msg_count            =>x_msg_count,
7031                                 x_msg_data             =>x_msg_data,
7032 
7033                                 p_wip_load_flag        =>'Y',
7034                                 p_x_prd_workorder_rec  =>l_workorder_rec,
7035                                 p_x_prd_workoper_tbl   =>l_workoper_tbl
7036                             );
7037 
7038                             IF (l_log_statement >= l_log_current_level) THEN
7039                                 fnd_log.string(l_log_statement,
7040                                                L_DEBUG_KEY,
7041                                                'After Calling AHL_PRD_WORKORDER_PVT.update_job, Return Status = ' || x_return_status);
7042                             END IF;*/
7043 
7044                             AHL_PRD_WORKORDER_PVT.cancel_visit_jobs
7045                             (
7046                              p_api_version         =>1.0,
7047                              p_init_msg_list       =>fnd_api.g_false,
7048                              p_commit              =>fnd_api.g_false,
7049                              p_validation_level    =>p_validation_level,
7050                              p_default             =>fnd_api.g_false,
7051                              p_module_type         =>NULL,
7052                              x_return_status       =>l_return_status,
7053                              x_msg_count           =>l_msg_count,
7054                              x_msg_data            =>l_msg_data,
7055                              p_visit_id            =>c_task_rec.visit_id,
7056                              p_unit_effectivity_id =>c_task_rec.unit_effectivity_id,
7057                              p_workorder_id        =>NULL
7058                             );
7059 
7060                             IF (l_log_statement >= l_log_current_level)THEN
7061                               fnd_log.string(l_log_statement,
7062                                              L_DEBUG_KEY,
7063                                              'After Calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs, Return Status =  ' || l_return_status );
7064                             END IF;
7065 
7066                             l_msg_count := FND_MSG_PUB.count_msg;
7067                             IF l_msg_count > 0 OR NVL(x_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
7068                              CLOSE c_workorders;
7069                              CLOSE c_SR_tasks;
7070                                 x_msg_count := l_msg_count;
7071                                 x_return_status := FND_API.G_RET_STS_ERROR;
7072                                 RAISE FND_API.G_EXC_ERROR;
7073                             END IF;
7074 
7075                      END IF; -- End of If c_workrec.status_code<>'17' check
7076 
7077                    END IF; -- End of if c_workorders%found check
7078 
7079                   CLOSE c_workorders;
7080 
7081                 IF (l_log_statement >= l_log_current_level) THEN
7082                     fnd_log.string(l_log_statement,
7083                                    L_DEBUG_KEY,
7084                                    ' Calling Update_Cost_Origin_Task, task id : '||l_task_ID );
7085                 END IF;
7086 
7087                 -- To update all tasks which have the deleting task as cost or originating task
7088                         AHL_VWP_RULES_PVT.Update_Cost_Origin_Task
7089                         (
7090                         p_visit_task_id    =>l_task_ID,
7091                         x_return_status    =>x_return_status
7092                         );
7093 
7094         IF FND_MSG_PUB.count_msg>0 or NVL(x_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
7095           CLOSE c_SR_tasks;
7096           RAISE Fnd_Api.g_exc_error;
7097         END IF;
7098 
7099         IF (l_log_statement >= l_log_current_level) THEN
7100             fnd_log.string(l_log_statement,
7101                            L_DEBUG_KEY,
7102                            'Check for Primary Visit');
7103         END IF;
7104 
7105         --OPEN c_primary (l_visit_id, l_task_id);
7106         IF(c_visit_rec.ASSO_PRIMARY_VISIT_ID is null) THEN
7107           OPEN c_primary (l_task_id);
7108           LOOP
7109             FETCH c_primary INTO c_primary_rec;
7110             EXIT WHEN c_primary%NOTFOUND;
7111             IF c_primary_rec.visit_task_id IS NOT NULL
7112             THEN
7113               UPDATE AHL_VISIT_TASKS_B
7114                 SET PRIMARY_VISIT_TASK_ID = NULL,
7115                 OBJECT_VERSION_NUMBER = c_primary_rec.object_version_number + 1
7116               WHERE --VISIT_ID = l_visit_id AND
7117               VISIT_TASK_ID = c_primary_rec.visit_task_id;
7118             END IF;
7119           END LOOP;
7120           CLOSE c_primary;
7121           END IF;
7122 
7123         IF c_task_rec.PROJECT_TASK_ID IS NOT NULL THEN
7124            IF (l_log_statement >= l_log_current_level) THEN
7125          fnd_log.string(l_log_statement,
7126                         L_DEBUG_KEY,
7127                         'Before Calling AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project');
7128            END IF;
7129 
7130            AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project(
7131 /*           p_api_version      => l_api_version,
7132            p_init_msg_list    => p_init_msg_list,
7133            p_commit           => Fnd_Api.g_false,
7134            p_validation_level => p_validation_level,
7135            p_module_type      => p_module_type,*/
7136            p_visit_task_id    => l_task_id,
7137            x_return_status    => l_return_status);
7138            /*x_msg_count        => x_msg_count,
7139            x_msg_data         => x_msg_data);*/
7140 
7141            IF (l_log_statement >= l_log_current_level) THEN
7142                fnd_log.string(l_log_statement,
7143                               L_DEBUG_KEY,
7144                               'After Calling AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project, Return Status = ' || l_return_status);
7145            END IF;
7146 
7147            IF (fnd_msg_pub.count_msg > 0) OR
7148               NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
7149               CLOSE c_SR_tasks;
7150               RAISE Fnd_Api.g_exc_error;
7151            END IF;
7152 
7153       END IF;
7154 
7155           IF (l_log_statement >= l_log_current_level) THEN
7156               fnd_log.string(l_log_statement,
7157                              L_DEBUG_KEY,
7158                             'Before deleting from AHL_TASK_LINKS table');
7159           END IF;
7160 
7161           OPEN c_links (l_task_id);
7162           FETCH c_links INTO l_count;
7163           IF l_count > 0 THEN
7164              DELETE Ahl_Task_Links
7165              WHERE VISIT_TASK_ID = l_task_id
7166              OR PARENT_TASK_ID = l_task_id;
7167           END IF;
7168           CLOSE c_links;
7169 
7170           IF (l_log_statement >= l_log_current_level) THEN
7171               fnd_log.string(l_log_statement,
7172                              L_DEBUG_KEY,
7173                             'Before updating task status to DELETED');
7174           END IF;
7175 
7176           --IF NVL(l_workorder_present,'X') ='Y' THEN
7177           IF  c_task_rec.service_request_id IS NOT NULL THEN
7178           UPDATE AHL_VISIT_TASKS_B
7179               SET STATUS_CODE='DELETED',UNIT_EFFECTIVITY_ID=NULL,
7180             OBJECT_VERSION_NUMBER=OBJECT_VERSION_NUMBER+1
7181           WHERE VISIT_TASK_ID=l_task_id;
7182 
7183           --salogan added the following code for supplier warranty starts
7184           Get_Entl_rec_for_Delete(
7185               p_task_id           => l_task_id,
7186               x_warranty_entl_tbl => l_entl_rec_tbl);
7187 
7188           IF (l_log_statement >= l_log_current_level) THEN
7189               fnd_log.string(l_log_statement,
7190                              L_DEBUG_KEY,
7191                              'Before calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements.');
7192           END IF;
7193 
7194           --Not passing p_commit the main API commits the data at the end
7195           AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements(
7196               p_api_version                 => p_api_version,
7197               p_validation_level            => p_validation_level,
7198               p_module_type                 => p_module_type,
7199               p_user_role                   => AHL_WARRANTY_ENTL_PVT.G_USER_PLANNER,
7200               p_x_warranty_entl_tbl         => l_entl_rec_tbl,
7201               x_return_status               => l_return_status,
7202               x_msg_count                   => l_msg_count,
7203               x_msg_data                    => l_msg_data);
7204 
7205           IF (l_log_statement >= l_log_current_level) THEN
7206               fnd_log.string(l_log_statement,
7207                              L_DEBUG_KEY,
7208                              'After calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements. Return Status = ' ||
7209                              l_return_status);
7210           END IF;
7211 
7212           l_msg_count := Fnd_Msg_Pub.count_msg;
7213           IF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
7214              x_msg_count := l_msg_count;
7215              x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7216              RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7217           END IF;
7218           -- salogan added for supplier warranty ends
7219                                 ELSE
7220               DELETE FROM Ahl_Visit_Tasks_TL
7221           WHERE  Visit_Task_ID = l_task_id;
7222 
7223           IF (SQL%NOTFOUND) THEN
7224             IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error)
7225             THEN
7226               Fnd_Message.set_name ('AHL', 'AHL_API_RECORD_NOT_FOUND');
7227               Fnd_Msg_Pub.ADD;
7228             END IF;
7229              CLOSE c_SR_tasks;
7230             RAISE Fnd_Api.g_exc_error;
7231           END IF;
7232 
7233              -- Delete task base (AHL_VISIT_TASKS_B) table data
7234 
7235           IF (l_log_statement >= l_log_current_level) THEN
7236              fnd_log.string(l_log_statement,
7237                             L_DEBUG_KEY,
7238                             ':Delete from base task table');
7239           END IF;
7240 
7241           DELETE FROM Ahl_Visit_Tasks_B
7242           WHERE  Visit_Task_ID = l_task_id;
7243 
7244           IF (SQL%NOTFOUND) THEN
7245             IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error)
7246             THEN
7247               Fnd_Message.set_name ('AHL', 'AHL_API_RECORD_NOT_FOUND');
7248               Fnd_Msg_Pub.ADD;
7249             END IF;
7250              CLOSE c_SR_tasks;
7251             RAISE Fnd_Api.g_exc_error;
7252           END IF;
7253                                 END IF;
7254 
7255                                 IF NVL(c_visit_rec.actual_price,0) <> 0
7256                                     OR NVL(c_visit_rec.estimated_price,0) <> 0
7257                                 THEN
7258 
7259                                     IF (l_log_statement >= l_log_current_level) THEN
7260                                         fnd_log.string(l_log_statement,
7261                                         L_DEBUG_KEY,
7262                                         'Before updating visit price by deducting task price');
7263                                     END IF;
7264 
7265                                     l_act_price:= NVL(c_visit_rec.actual_price,0)    -   NVL(l_act_price,0);
7266                                     l_est_price:= NVL(c_visit_rec.estimated_price,0) -   NVL(l_est_price,0);
7267 
7268                                     UPDATE ahl_visits_b
7269                                         SET actual_price=l_act_price,
7270                                             estimated_price=l_est_price,
7271                                             OBJECT_VERSION_NUMBER=OBJECT_VERSION_NUMBER+1
7272                                     WHERE visit_id=l_visit_id;
7273                                 END IF;
7274 
7275           END LOOP;  -- End of c_SR_task Loop
7276                 CLOSE c_SR_tasks;
7277 
7278     END IF;  --End of if c_task_rec.service_request is not null check
7279 
7280   END IF;  -- Task Null Check
7281 
7282   IF (l_log_procedure >= l_log_current_level) THEN
7283       fnd_log.string(l_log_procedure,
7284                      L_DEBUG_KEY ||'.end',
7285                      'At the end of PL SQL procedure. Return Status = ' || x_return_status);
7286   END IF;
7287 EXCEPTION
7288    WHEN Fnd_Api.g_exc_error THEN
7289       ROLLBACK TO Delete_SR_Task;
7290       x_return_status := Fnd_Api.g_ret_sts_error;
7291       Fnd_Msg_Pub.count_and_get (
7292             p_encoded => Fnd_Api.g_false,
7293             p_count   => x_msg_count,
7294             p_data    => x_msg_data
7295       );
7296    WHEN Fnd_Api.g_exc_unexpected_error THEN
7297       ROLLBACK TO Delete_SR_Task;
7298       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7299       Fnd_Msg_Pub.count_and_get (
7300             p_encoded => Fnd_Api.g_false,
7301             p_count   => x_msg_count,
7302             p_data    => x_msg_data
7303       );
7304    WHEN OTHERS THEN
7305       ROLLBACK TO Delete_SR_Task;
7306       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
7307       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
7308     THEN
7309          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
7310       END IF;
7311       Fnd_Msg_Pub.count_and_get (
7312             p_encoded => Fnd_Api.g_false,
7313             p_count   => x_msg_count,
7314             p_data    => x_msg_data
7315       );
7316 END Delete_SR_Task;
7317 
7318 --------------------------------------------------------------------
7319 -- PROCEDURE
7320 --    Delete_Summary_Task
7321 --
7322 -- PURPOSE
7323 --    To delete Summary tasks for the Maintenace visit.
7324 --------------------------------------------------------------------
7325 PROCEDURE Delete_Summary_Task (
7326    p_api_version       IN  NUMBER,
7327    p_init_msg_list     IN  VARCHAR2  := Fnd_Api.g_false,
7328    p_commit            IN  VARCHAR2  := Fnd_Api.g_false,
7329    p_validation_level  IN  NUMBER    := Fnd_Api.g_valid_level_full,
7330    p_module_type       IN  VARCHAR2:= 'JSP',
7331    p_visit_task_ID     IN  NUMBER,
7332    x_return_status     OUT NOCOPY VARCHAR2,
7333    x_msg_count         OUT NOCOPY NUMBER,
7334    x_msg_data          OUT NOCOPY VARCHAR2
7335 )
7336 IS
7337    l_api_version CONSTANT NUMBER       := 1.0;
7338    l_api_name    CONSTANT VARCHAR2(30) := 'Delete Summary Task';
7339    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
7340 
7341    -- local variables defined for the procedure
7342    l_origin_id   NUMBER;
7343    l_visit_id    NUMBER;
7344    l_mr_id       NUMBER;
7345    l_task_id     NUMBER;
7346    l_cost_id     NUMBER;
7347    l_est_price   NUMBER;
7348    l_act_price   NUMBER;
7349    l_count       NUMBER;
7350    l_msg_count   NUMBER;
7351    l_msg_data    VARCHAR2(2000);
7352    l_dummy       VARCHAR2(1);
7353 
7354    l_workorder_rec         AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
7355    l_workoper_tbl          AHL_PRD_WORKORDER_PVT.PRD_WORKOPER_TBL;
7356 
7357    l_return_status       VARCHAR2(1);
7358    l_workorder_present   VARCHAR2(1) := 'N';
7359    l_planned_order_flag  VARCHAR2(1);
7360    l_task_type           VARCHAR2(80);
7361    l_unit_effectivity_id NUMBER;
7362    l_entl_rec_tbl        AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type; --salogan added for supplier warranty
7363 
7364   -- To find all tasks related information
7365    CURSOR c_Task (x_id IN NUMBER) IS
7366       SELECT *
7367       FROM Ahl_Visit_Tasks_VL
7368       WHERE Visit_Task_ID = x_id;
7369       c_task_rec    c_Task%ROWTYPE;
7370     l_task_rec    c_Task%ROWTYPE;
7371   -- To find visit related information
7372    CURSOR c_Visit (x_id IN NUMBER) IS
7373       SELECT *
7374       FROM  Ahl_Visits_VL
7375       WHERE VISIT_ID = x_id;
7376       c_visit_rec      c_Visit%ROWTYPE;
7377 
7378   -- To find any task which have primary visit task id as deleted task id
7379     --CURSOR c_primary (x_visit_id IN NUMBER, x_task_id IN NUMBER) IS
7380     -- SKPATHAK :: Bug 10414592 :: 21-DEC-2010
7381     -- Added Planned_Flag to this cursor to denote if the simulated visit's task belongs to a planned MR or not
7382   CURSOR c_primary (x_task_id IN NUMBER) IS
7383       SELECT task.Visit_Task_Id, task.object_version_number,  task.unit_effectivity_id,
7384       NVL((SELECT distinct 'Y' FROM ahl_visit_tasks_b avt
7385                 WHERE avt.unit_effectivity_id = task.unit_effectivity_id
7386                 AND avt.task_type_code = 'PLANNED'), 'N') Planned_Flag
7387       FROM  Ahl_Visit_Tasks_B task
7388       WHERE task.PRIMARY_VISIT_TASK_ID = x_task_id
7389       AND task.STATUS_CODE <> 'DELETED';
7390       c_primary_rec     c_primary%ROWTYPE;
7391 
7392   -- To find any task links for a deleted task
7393     CURSOR c_links (x_id IN NUMBER) IS
7394       SELECT COUNT(*) FROM Ahl_Task_Links L ,Ahl_Visit_Tasks_B T
7395       WHERE (T.VISIT_TASK_ID = L.VISIT_TASK_ID
7396       OR T.VISIT_TASK_ID = L.PARENT_TASK_ID)
7397       AND T.VISIT_TASK_ID = x_id;
7398 
7399  -- To find if WIP job is created for the Visit
7400     CURSOR c_workorders(x_task_id IN NUMBER) IS
7401       SELECT * FROM AHL_WORKORDERS
7402       WHERE VISIT_TASK_ID=x_task_id
7403       AND STATUS_CODE <> '22' AND STATUS_CODE <> '7';
7404        c_workrec      c_workorders%ROWTYPE;
7405 
7406     -- yazhou 11Nov2005 starts
7407     -- Bug fix#4508169
7408 
7409     --Dup-MR ER#6338208 - sowsubra
7410     CURSOR c_all_tasks(c_visit_id NUMBER, c_task_id NUMBER) IS
7411     SELECT visit_task_id
7412     FROM ahl_visit_tasks_b
7413     WHERE visit_id = c_visit_id
7414     AND  STATUS_CODE <> 'DELETED'
7415     START WITH visit_task_id = c_task_id
7416     CONNECT BY PRIOR visit_task_id = originating_task_id
7417     order by visit_task_id desc;
7418 
7419     -- yazhou 11Nov2005 ends
7420 
7421 --Added by mpothuku on 02/03/05
7422 --To check if the unplanned tasks UE is associated with any other visits other than itself before its deletion.
7423   CURSOR check_unplanned_ue_assoc(c_ue_id IN NUMBER) IS
7424   SELECT 'X' from ahl_visit_tasks_b where unit_effectivity_id = c_ue_id and
7425       status_code <> 'DELETED';
7426 BEGIN
7427   IF (l_log_procedure >= l_log_current_level) THEN
7428       fnd_log.string(l_log_procedure,
7429                      L_DEBUG_KEY ||'.begin',
7430                      'At the start of PL SQL procedure.');
7431   END IF;
7432 
7433    --------------------- initialize -----------------------
7434    SAVEPOINT Delete_Summary_Task;
7435    -- Check if API is called in debug mode. If yes, enable debug.
7436 
7437     IF Fnd_Api.to_boolean (p_init_msg_list) THEN
7438                 Fnd_Msg_Pub.initialize;
7439         END IF;
7440 
7441    --  Initialize API return status to success
7442 
7443         x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
7444 
7445    -- Standard call to check for call compatibility.
7446         IF NOT Fnd_Api.compatible_api_call(L_api_version,p_api_version,
7447          l_api_name, G_PKG_NAME)
7448         THEN
7449                 RAISE Fnd_Api.g_exc_unexpected_error;
7450         END IF;
7451 
7452    ------------------------Start of API Body------------------------------------
7453 
7454    IF (l_log_statement >= l_log_current_level)THEN
7455        fnd_log.string(l_log_statement,
7456                       L_DEBUG_KEY,
7457                       ':Task Id' || p_visit_task_ID);
7458    END IF;
7459 
7460    -- To check if the input taskid exists in task entity.
7461    OPEN c_Task(p_Visit_Task_Id);
7462    FETCH c_Task INTO c_task_rec;
7463 
7464    IF c_Task%NOTFOUND THEN
7465       CLOSE c_Task;
7466 
7467       IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error)
7468       THEN
7469              Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
7470              Fnd_Msg_Pub.ADD;
7471       END IF;
7472       RAISE Fnd_Api.g_exc_error;
7473 
7474     END IF; -- End of if c_task%notfound then check
7475     CLOSE c_Task;
7476 
7477         l_origin_id   :=c_task_rec.ORIGINATING_TASK_ID;
7478         l_cost_id    :=c_task_rec.cost_parent_id;
7479         l_visit_id   :=c_task_rec.visit_id;
7480         l_mr_id      :=c_task_rec.MR_ID;
7481         l_act_price  :=c_task_rec.actual_price;
7482         l_est_price  :=c_task_rec.estimated_price;
7483         l_task_id    := p_Visit_Task_Id;
7484 
7485    IF (l_log_statement >= l_log_current_level)THEN
7486        fnd_log.string(l_log_statement,
7487                       L_DEBUG_KEY,
7488                       ':Visit Id' || l_visit_id);
7489    END IF;
7490 
7491    /* MANESING::Component Maintenance Planning Project, 05-Jul-2011
7492     * There is no need to consider Stage materials for Component Visits
7493     * as there won't be any Stage associated with them.
7494     */
7495    IF (AHL_CMP_UTIL_PKG.Is_Comp_Visit (l_visit_id) = 'N') THEN
7496 
7497      -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125 :: START
7498      -- For every MR, dis-associate the materials based on the MR Profile to the stage tasks
7499      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
7500          fnd_log.string (fnd_log.level_statement,
7501          l_debug_key,
7502          'Before calling AHL_LTP_REQST_MATRL_PVT.Remove_Stage_Materials, c_task_rec.task_type_code= '||c_task_rec.task_type_code
7503        );
7504      END IF;
7505 
7506      IF c_task_rec.task_type_code = 'SUMMARY' THEN
7507         AHL_LTP_REQST_MATRL_PVT.Remove_Stage_Materials (
7508                 p_api_version           => 1.0,
7509                 p_init_msg_list         => Fnd_Api.G_FALSE,
7510                 p_commit                => Fnd_Api.G_FALSE,
7511                 p_validation_level      => Fnd_Api.G_VALID_LEVEL_FULL,
7512                 p_module_type           => 'VST',
7513                 p_visit_id              => l_visit_id,
7514                 p_mr_header_id          => c_task_rec.MR_ID,
7515                 p_instance_id           => c_task_rec.instance_id,
7516                 p_ue_id                 => c_task_rec.unit_effectivity_id,
7517                 x_return_status         => l_return_status,
7518                 x_msg_count             => l_msg_count,
7519                 x_msg_data              => l_msg_data);
7520      END IF;
7521 
7522      IF (l_log_statement >= fnd_log.g_current_runtime_level) THEN
7523          fnd_log.string(fnd_log.level_statement,
7524                         L_DEBUG_KEY,
7525                        'After callingAHL_LTP_REQST_MATRL_PVT.Remove_Stage_Materials. l_return_status = ' || l_return_status);
7526      END IF;
7527 
7528      -- Check Error Message stack.
7529      IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
7530        x_msg_count := l_msg_count;
7531        x_return_status := l_return_status;
7532        IF l_return_status = Fnd_Api.g_ret_sts_error THEN
7533          RAISE Fnd_Api.g_exc_error;
7534        ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
7535          RAISE Fnd_Api.g_exc_unexpected_error;
7536        END IF;
7537      END IF;
7538      -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125 :: END
7539 
7540    END IF; -- if AHL_CMP_UTIL_PKG.Is_Comp_Visit (l_visit_id) = 'N'
7541 
7542    IF l_origin_id is not null THEN
7543          IF (l_log_statement >= l_log_current_level)THEN
7544              fnd_log.string(l_log_statement,
7545                             L_DEBUG_KEY,
7546                             'Before Calling Delete_Summary_Task' );
7547          END IF;
7548          Delete_Summary_Task(
7549                 p_api_version          =>p_api_version,
7550                 p_init_msg_list        =>Fnd_Api.g_false,
7551                 p_commit               =>Fnd_Api.g_false,
7552                 p_validation_level     =>Fnd_Api.g_valid_level_full,
7553                 p_module_type          =>NULL,
7554                 p_Visit_Task_Id        =>l_origin_id,
7555                 x_return_status        =>x_return_status,
7556                 x_msg_count            =>x_msg_count,
7557                 x_msg_data             =>x_msg_data);
7558 
7559          IF (l_log_statement >= l_log_current_level)THEN
7560              fnd_log.string(l_log_statement,
7561                             L_DEBUG_KEY,
7562                             'After Calling Delete_Summary_Task, Return Status = ' || x_return_status);
7563          END IF;
7564 
7565                 IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
7566                   RAISE Fnd_Api.G_EXC_ERROR;
7567                 END IF;
7568    Else
7569       -- To find the visit related information
7570       OPEN c_Visit(c_task_rec.visit_id);
7571       FETCH c_Visit INTO c_visit_rec;
7572       CLOSE c_Visit;
7573 
7574       -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: Need to consider DRAFT status also
7575       IF  (c_visit_rec.status_code NOT IN ('PLANNING', 'DRAFT', 'PARTIALLY RELEASED'))
7576       THEN
7577             Fnd_Message.set_name ('AHL', 'AHL_VWP_PLANNING_OPER');
7578             Fnd_Msg_Pub.ADD;
7579             RAISE fnd_Api.g_exc_error;
7580       END IF;
7581 
7582     l_unit_effectivity_id := null;
7583     l_task_type := null;
7584 
7585       IF c_task_rec.mr_id IS NOT NULL THEN
7586         -- yazhou 11Nov2005 starts
7587         -- Bug fix#4508169
7588         --Dup-MR ER#6338208 - sowsubra
7589         /*The cursor was fetching all the tasks, which had the same mr id. With this enhacement since
7590         we have multiple MR's associated to the same visit where each of it may either be already
7591         pushed to production or still needs to be pushed.  Since the cursor returns all the tasks
7592         regardless whether or not they have been pushed to production, the cursor leads in throwing an
7593         error to the user not allowing them to delete the second occurrence of the MR which is not been
7594         pushed to production. Hence modified the cursor to take visit_id and the MR task_id that is
7595         being deleted.*/
7596 
7597         OPEN c_all_tasks(c_task_rec.visit_id,p_visit_task_ID);
7598         -- yazhou 11Nov2005 ends
7599         LOOP
7600           FETCH c_all_tasks INTO l_task_id;
7601           EXIT WHEN c_all_tasks%NOTFOUND;
7602           OPEN c_workorders(l_task_id);
7603           FETCH c_workorders INTO c_workrec;
7604 
7605           IF c_workorders%found THEN
7606 
7607             IF (l_log_statement >= l_log_current_level)THEN
7608                 fnd_log.string(l_log_statement,
7609                                L_DEBUG_KEY,
7610                                'Check Workorder Status = ' || c_workrec.status_code);
7611             END IF;
7612 
7613             IF c_workrec.status_code<>'17'
7614             THEN
7615                -- ADD THIS MESSAGE TO SEED115
7616                Fnd_Message.set_name ('AHL', 'AHL_VWP_TSK_CANNOT_DEL');
7617                FND_MESSAGE.SET_TOKEN('Task_Number',c_task_rec.visit_task_number);
7618                Fnd_Msg_Pub.ADD;
7619                CLOSE c_workorders;
7620                CLOSE c_all_tasks;
7621                RAISE fnd_Api.g_exc_error;
7622             -- IF STATUS IS NOT DRAFT RAISE ERROR.
7623             ELSIF c_workrec.status_code='17' THEN
7624                 l_workorder_present :='Y';
7625                 l_workorder_rec.workorder_id:=c_workrec.workorder_id;
7626                 l_workorder_rec.visit_task_id:=l_task_id;
7627                 Get_WorkOrder_Attribs
7628                 (
7629                  p_x_prd_workorder_rec =>l_workorder_rec
7630                 );
7631 
7632                 l_msg_count := FND_MSG_PUB.count_msg;
7633 
7634                 IF l_msg_count > 0 THEN
7635                   x_msg_count := l_msg_count;
7636                   x_return_status := FND_API.G_RET_STS_ERROR;
7637                   CLOSE c_workorders;
7638                   CLOSE c_all_tasks;
7639                   RAISE FND_API.G_EXC_ERROR;
7640                 END IF;
7641 
7642                 l_workorder_rec.wip_entity_id := null;
7643                 l_workorder_rec.STATUS_CODE:='22'; --Deleted Status Refer DLD to Verify.
7644 
7645                 IF (l_log_statement >= l_log_current_level)THEN
7646                     fnd_log.string(l_log_statement,
7647                                    L_DEBUG_KEY,
7648                                    'Before Calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs. Visit Id: '||c_visit_rec.visit_id||',p_unit_effectivity_id:  '||c_task_rec.unit_effectivity_id||', p_workorder_id: '||c_workrec.workorder_id);
7649                 END IF;
7650 
7651                 -- TCHIMIRA :: 01-JUL-2011 :: VWP: ER:12673125
7652                 -- Commented the below call to AHL_PRD_WORKORDER_PVT.update_job as part of VWPE
7653                 -- Instead call AHL_PRD_WORKORDER_PVT.Cancel_Visit_Jobs to cancel MR work orders
7654 
7655                 /*AHL_PRD_WORKORDER_PVT.update_job
7656                 (
7657                 p_api_version         =>1.0,
7658                 p_init_msg_list       =>fnd_api.g_false,
7659                 p_commit              =>fnd_api.g_false,
7660                 p_validation_level    =>p_validation_level,
7661                 p_default             =>fnd_api.g_false,
7662                 p_module_type         =>NULL,
7663                 x_return_status       =>x_return_status,
7664                 x_msg_count           =>x_msg_count,
7665                 x_msg_data            =>x_msg_data,
7666                 p_wip_load_flag       =>'Y',
7667                 p_x_prd_workorder_rec =>l_workorder_rec,
7668                 p_x_prd_workoper_tbl  =>l_workoper_tbl
7669                 );*/
7670 
7671                 AHL_PRD_WORKORDER_PVT.cancel_visit_jobs
7672                 (
7673                 p_api_version         =>1.0,
7674                 p_init_msg_list       =>fnd_api.g_false,
7675                 p_commit              =>fnd_api.g_false,
7676                 p_validation_level    =>p_validation_level,
7677                 p_default             =>fnd_api.g_false,
7678                 p_module_type         =>NULL,
7679                 x_return_status       =>l_return_status,
7680                 x_msg_count           =>l_msg_count,
7681                 x_msg_data            =>l_msg_data,
7682                 p_visit_id            =>c_task_rec.visit_id,
7683                 p_unit_effectivity_id =>c_task_rec.unit_effectivity_id,
7684                 p_workorder_id        =>NULL
7685                 );
7686 
7687                 IF (l_log_statement >= l_log_current_level)THEN
7688                     fnd_log.string(l_log_statement,
7689                                    L_DEBUG_KEY,
7690                                    'After Calling AHL_PRD_WORKORDER_PVT.cancel_visit_jobs, Return Status =  ' || l_return_status );
7691                 END IF;
7692 
7693             l_msg_count := FND_MSG_PUB.count_msg;
7694             IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
7695               x_msg_count := l_msg_count;
7696               x_return_status := FND_API.G_RET_STS_ERROR;
7697               CLOSE c_workorders;
7698               CLOSE c_all_tasks;
7699               RAISE FND_API.G_EXC_ERROR;
7700             END IF;
7701         END IF; -- End of If c_workrec.status_code<>'17' check
7702       END IF; -- End of if c_workorders%found check
7703       CLOSE c_workorders;
7704 
7705       IF (l_log_statement >= l_log_current_level)THEN
7706           fnd_log.string(l_log_statement,
7707                          L_DEBUG_KEY,
7708                          ' Calling AHL_VWP_RULES_PVT.Update_Cost_Origin_Task');
7709       END IF;
7710 
7711       -- To update all tasks which have the deleting task as cost or originating task
7712       AHL_VWP_RULES_PVT.Update_Cost_Origin_Task
7713       (
7714       p_visit_task_id    =>l_task_ID,
7715       x_return_status    =>x_return_status
7716       );
7717 
7718       IF NVL(x_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
7719         x_return_status := FND_API.G_RET_STS_ERROR;
7720         CLOSE c_all_tasks;
7721         RAISE FND_API.G_EXC_ERROR;
7722       END IF;
7723 
7724       IF (l_log_statement >= l_log_current_level)THEN
7725           fnd_log.string(l_log_statement,
7726                          L_DEBUG_KEY,
7727                          'Check for Primary Visit');
7728       END IF;
7729 
7730       /* mpothuku changed on 02/08/05 */
7731       --OPEN c_primary (l_visit_id, l_task_id);
7732       IF(c_visit_rec.ASSO_PRIMARY_VISIT_ID is null) THEN
7733         OPEN c_primary (l_task_id);
7734         LOOP
7735           FETCH c_primary INTO c_primary_rec;
7736           EXIT WHEN c_primary%NOTFOUND;
7737           IF c_primary_rec.visit_task_id IS NOT NULL
7738           THEN
7739             -- SKPATHAK :: Bug 10414592 :: 21-DEC-2010
7740             -- If the simulated visit's task belongs to a planned requirement, dis-associate all such tasks' UE and set the status as 'DELETED'
7741             IF (c_primary_rec.Planned_Flag = 'Y') THEN
7742               UPDATE AHL_VISIT_TASKS_B
7743                 SET PRIMARY_VISIT_TASK_ID = NULL,
7744                 OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1,
7745                 UNIT_EFFECTIVITY_ID = NULL,
7746                 STATUS_CODE = 'DELETED'
7747               WHERE UNIT_EFFECTIVITY_ID = c_primary_rec.UNIT_EFFECTIVITY_ID
7748               AND PRIMARY_VISIT_TASK_ID IS NOT NULL;
7749             ELSE
7750               UPDATE AHL_VISIT_TASKS_B
7751                 SET PRIMARY_VISIT_TASK_ID = NULL,
7752                 OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1
7753               WHERE VISIT_TASK_ID = c_primary_rec.visit_task_id
7754                 AND PRIMARY_VISIT_TASK_ID IS NOT NULL;
7755             END IF; -- else of Planned_Flag = 'Y'
7756           END IF; -- visit_task_id IS NOT NULL
7757         END LOOP;
7758         CLOSE c_primary;
7759       END IF;
7760 
7761       IF c_task_rec.PROJECT_TASK_ID IS NOT NULL THEN
7762 
7763            IF (l_log_statement >= l_log_current_level)THEN
7764                fnd_log.string(l_log_statement,
7765                               L_DEBUG_KEY,
7766                              ' Calling AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project API');
7767            END IF;
7768 
7769            AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project(
7770            /* p_api_version      => l_api_version,
7771               p_init_msg_list    => p_init_msg_list,
7772               p_commit           => Fnd_Api.g_false,
7773               p_validation_level => p_validation_level,
7774               p_module_type      => p_module_type,*/
7775               p_visit_task_id    => l_task_id,
7776               x_return_status    => l_return_status);
7777            /* x_msg_count        => x_msg_count,
7778               x_msg_data         => x_msg_data);*/
7779 
7780         IF (fnd_msg_pub.count_msg > 0) OR NVL(x_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
7781           x_return_status := FND_API.G_RET_STS_ERROR;
7782           CLOSE c_all_tasks;
7783           RAISE FND_API.G_EXC_ERROR;
7784         END IF;
7785 
7786       END IF;
7787 
7788         IF (l_log_statement >= l_log_current_level)THEN
7789             fnd_log.string(l_log_statement,
7790                            L_DEBUG_KEY,
7791                            'Before deleting from AHL_TASK_LINKS table');
7792         END IF;
7793 
7794         OPEN c_links (l_task_id);
7795         FETCH c_links INTO l_count;
7796         IF l_count > 0 THEN
7797             DELETE Ahl_Task_Links
7798             WHERE VISIT_TASK_ID = l_task_id
7799             OR PARENT_TASK_ID = l_task_id;
7800         END IF;
7801         CLOSE c_links;
7802 
7803         IF (l_log_statement >= l_log_current_level)THEN
7804             fnd_log.string(l_log_statement,
7805                            L_DEBUG_KEY,
7806                            'Before updating task status to DELETED');
7807         END IF;
7808 
7809         --IF NVL(l_workorder_present,'X') ='Y' THEN
7810         IF c_task_rec.mr_id IS NOT NULL OR c_task_rec.service_request_id IS NOT NULL THEN
7811           /* Change by mpothuku on 02/03/05 to delete the unit effectivities for Unplanned tasks after removing the association */
7812           IF (l_task_type IS NULL) THEN
7813             OPEN c_task(l_task_id);
7814             FETCH c_task INTO l_task_rec;
7815             CLOSE c_task;
7816             IF(l_task_rec.TASK_TYPE_CODE <> 'SUMMARY') THEN
7817             /*  Find out if the UE is associated with any other Active Visits
7818               Ideally if any are found they should be Simulation Visits only */
7819                 l_task_type := l_task_rec.TASK_TYPE_CODE;
7820                 l_unit_effectivity_id := l_task_rec.UNIT_EFFECTIVITY_ID;
7821             END IF;
7822           END IF;
7823           UPDATE AHL_VISIT_TASKS_B
7824             SET STATUS_CODE='DELETED',UNIT_EFFECTIVITY_ID=NULL,
7825             OBJECT_VERSION_NUMBER=OBJECT_VERSION_NUMBER+1
7826           WHERE VISIT_TASK_ID=l_task_id;
7827 
7828           --salogan added the following code for supplier warranty starts
7829           Get_Entl_rec_for_Delete(
7830               p_task_id           => l_task_id,
7831               x_warranty_entl_tbl => l_entl_rec_tbl);
7832 
7833           IF (l_log_statement >= l_log_current_level) THEN
7834               fnd_log.string(l_log_statement,
7835                              L_DEBUG_KEY,
7836                              'Before calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements.');
7837           END IF;
7838 
7839           --Not passing p_commit the main API commits the data at the end
7840           AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements(
7841               p_api_version                 => p_api_version,
7842               p_validation_level            => p_validation_level,
7843               p_module_type                 => p_module_type,
7844               p_user_role                   => AHL_WARRANTY_ENTL_PVT.G_USER_PLANNER,
7845               p_x_warranty_entl_tbl         => l_entl_rec_tbl,
7846               x_return_status               => l_return_status,
7847               x_msg_count                   => l_msg_count,
7848               x_msg_data                    => l_msg_data);
7849 
7850           IF (l_log_statement >= l_log_current_level) THEN
7851               fnd_log.string(l_log_statement,
7852                              L_DEBUG_KEY,
7853                              'After calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements. Return Status = ' ||
7854                              l_return_status);
7855           END IF;
7856 
7857           l_msg_count := Fnd_Msg_Pub.count_msg;
7858           IF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
7859              x_msg_count := l_msg_count;
7860              x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
7861              RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
7862           END IF;
7863           -- salogan added for supplier warranty ends
7864         ELSE
7865 
7866           IF (l_log_statement >= l_log_current_level)THEN
7867               fnd_log.string(l_log_statement,
7868                              L_DEBUG_KEY,
7869                             'Before DELETE');
7870           END IF;
7871           DELETE FROM Ahl_Visit_Tasks_TL WHERE  Visit_Task_ID = l_task_id;
7872           IF (SQL%NOTFOUND) THEN
7873             IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error)
7874             THEN
7875               Fnd_Message.set_name ('AHL', 'AHL_API_RECORD_NOT_FOUND');
7876               Fnd_Msg_Pub.ADD;
7877             END IF;
7878             CLOSE c_all_tasks;
7879             RAISE Fnd_Api.g_exc_error;
7880           END IF;
7881 
7882            -- Delete task base (AHL_VISIT_TASKS_B) table data
7883           IF (l_log_statement >= l_log_current_level)THEN
7884              fnd_log.string(l_log_statement,
7885                             L_DEBUG_KEY,
7886                             ':Delete from base task table');
7887           END IF;
7888 
7889           DELETE FROM Ahl_Visit_Tasks_B
7890           WHERE  Visit_Task_ID = l_task_id;
7891 
7892           IF (SQL%NOTFOUND) THEN
7893             IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error)
7894             THEN
7895               Fnd_Message.set_name ('AHL', 'AHL_API_RECORD_NOT_FOUND');
7896               Fnd_Msg_Pub.ADD;
7897             END IF;
7898             CLOSE c_all_tasks;
7899             RAISE Fnd_Api.g_exc_error;
7900           END IF;
7901         END IF;
7902 
7903         IF NVL(c_visit_rec.actual_price,0) <> 0
7904           OR NVL(c_visit_rec.estimated_price,0) <> 0
7905         THEN
7906 
7907           IF (l_log_statement >= l_log_current_level)THEN
7908              fnd_log.string(l_log_statement,
7909                             L_DEBUG_KEY,
7910                             'Before updating visit price by deducting task price');
7911           END IF;
7912 
7913           l_act_price:= NVL(c_visit_rec.actual_price,0)    -   NVL(l_act_price,0);
7914           l_est_price:= NVL(c_visit_rec.estimated_price,0) -   NVL(l_est_price,0);
7915 
7916           UPDATE ahl_visits_b
7917             SET actual_price=l_act_price,
7918               estimated_price=l_est_price,
7919               OBJECT_VERSION_NUMBER=OBJECT_VERSION_NUMBER+1
7920           WHERE visit_id=l_visit_id;
7921         END IF;
7922 
7923         END LOOP;  -- End of c_all_task Loop
7924         CLOSE c_all_tasks;
7925 
7926     --Added by mpothuku on 02/07/05. After the collection of the UE, delete it.
7927     IF(l_task_type = 'UNPLANNED') THEN
7928       OPEN check_unplanned_ue_assoc(l_unit_effectivity_id);
7929       FETCH check_unplanned_ue_assoc INTO l_dummy;
7930       IF (check_unplanned_ue_assoc%NOTFOUND) THEN
7931         CLOSE check_unplanned_ue_assoc;
7932 
7933         IF (l_log_statement >= l_log_current_level)THEN
7934             fnd_log.string(l_log_statement,
7935                            L_DEBUG_KEY,
7936                            'Before DELETE_UNIT_EFFECTIVITY');
7937         END IF;
7938 
7939         AHL_UMP_UNPLANNED_PVT.DELETE_UNIT_EFFECTIVITY
7940         (
7941           P_API_VERSION         => p_api_version,
7942           p_init_msg_list       => FND_API.G_FALSE,
7943           p_commit              => FND_API.G_FALSE,
7944 
7945           X_RETURN_STATUS       => l_return_status,
7946           X_MSG_COUNT           => l_msg_count,
7947           X_MSG_DATA            => x_msg_data,
7948           P_UNIT_EFFECTIVITY_ID => l_unit_effectivity_id
7949         );
7950         IF (l_log_statement >= l_log_current_level)THEN
7951             fnd_log.string(l_log_statement,
7952                            L_DEBUG_KEY,
7953                            'After DELETE_UNIT_EFFECTIVITY');
7954         END IF;
7955         IF (l_msg_count > 0) OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
7956           x_return_status := FND_API.G_RET_STS_ERROR;
7957           RAISE FND_API.G_EXC_ERROR;
7958         END IF;
7959       ELSE
7960         CLOSE check_unplanned_ue_assoc;
7961       END IF;
7962     END IF;
7963        ----------TO DELETE SR TASKS-------
7964 
7965        ELSIF c_task_rec.mr_id IS NULL AND c_task_rec.unit_effectivity_id is not null
7966        THEN
7967             IF (l_log_statement >= l_log_current_level)THEN
7968                    fnd_log.string(l_log_statement,
7969                                   L_DEBUG_KEY,
7970                                   'Before Delete_SR_Task');
7971             END IF;
7972             Delete_SR_Task(
7973                    p_api_version       => p_api_version,
7974                    p_init_msg_list     => p_init_msg_list,
7975                    p_commit            => Fnd_Api.g_false,
7976                    p_validation_level  => p_validation_level,
7977                    p_module_type       => p_module_type,
7978                    p_visit_task_ID     => p_visit_task_ID,
7979                    x_return_status     => x_return_status,
7980                    x_msg_count         => x_msg_count,
7981                    x_msg_data          => x_msg_data
7982                 );
7983            IF (l_log_statement >= l_log_current_level)THEN
7984                fnd_log.string(l_log_statement,
7985                               L_DEBUG_KEY,
7986                               'After Delete_SR_Task');
7987            END IF;
7988            IF (fnd_msg_pub.count_msg > 0 ) THEN
7989 
7990                              IF (l_log_statement >= l_log_current_level)THEN
7991                                  fnd_log.string(l_log_statement,
7992                                  L_DEBUG_KEY,
7993                                  'Error raised in  Delete_SR_Task');
7994                              END IF;
7995                              RAISE Fnd_Api.G_EXC_ERROR;
7996            END IF;
7997 
7998       ----------TO DELETE MANUALLY CREATED SUMMARY TASKS-------
7999       ELSIF L_MR_ID IS NULL
8000       THEN
8001 
8002          l_visit_id := c_task_rec.visit_id;
8003          l_task_id  := p_Visit_Task_Id;
8004 
8005          IF (l_log_statement >= l_log_current_level) THEN
8006              fnd_log.string(l_log_statement,
8007                             L_DEBUG_KEY,
8008                             'Before AHL_VWP_RULES_PVT.Update_Cost_Origin_Task Call');
8009          END IF;
8010 
8011          -- To update all tasks which have the deleting task as cost or originating task
8012          AHL_VWP_RULES_PVT.Update_Cost_Origin_Task
8013          (
8014          p_visit_task_id    =>l_task_ID,
8015          x_return_status    =>x_return_status
8016          );
8017 
8018          IF (l_log_statement >= l_log_current_level) THEN
8019              fnd_log.string(l_log_statement,
8020                             L_DEBUG_KEY,
8021                             'Check for primary Visit');
8022          END IF;
8023          --OPEN c_primary (l_visit_id, l_task_id);
8024          IF (c_visit_rec.ASSO_PRIMARY_VISIT_ID is null) THEN
8025             OPEN c_primary (l_task_id);
8026             LOOP
8027             FETCH c_primary INTO c_primary_rec;
8028             EXIT WHEN c_primary%NOTFOUND;
8029             IF c_primary_rec.visit_task_id IS NOT NULL THEN
8030                UPDATE AHL_VISIT_TASKS_B
8031                SET PRIMARY_VISIT_TASK_ID = NULL,
8032                    OBJECT_VERSION_NUMBER = c_primary_rec.object_version_number + 1
8033                WHERE --VISIT_ID = l_visit_id AND
8034                VISIT_TASK_ID = c_primary_rec.visit_task_id;
8035             END IF;
8036             END LOOP;
8037             CLOSE c_primary;
8038          END IF;
8039          IF (l_log_statement >= l_log_current_level) THEN
8040              fnd_log.string(l_log_statement,
8041                             L_DEBUG_KEY,
8042                             'Before deletion from Ahl_Task_Links table');
8043          END IF;
8044          OPEN c_links (l_task_id);
8045          FETCH c_links INTO l_count;
8046               IF l_count > 0 THEN
8047                       DELETE Ahl_Task_Links
8048                       WHERE VISIT_TASK_ID = l_task_id
8049                       OR PARENT_TASK_ID = l_task_id;
8050               END IF;
8051          CLOSE c_links;
8052 
8053          IF c_task_rec.PROJECT_TASK_ID IS NOT NULL
8054          THEN
8055             IF (l_log_statement >= l_log_current_level) THEN
8056                 fnd_log.string(l_log_statement,
8057                                L_DEBUG_KEY,
8058                                ' Calling AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project');
8059             END IF;
8060             AHL_VWP_PROJ_PROD_PVT.Delete_Task_to_Project
8061             (
8062              /* p_api_version      => l_api_version,
8063                 p_init_msg_list    => p_init_msg_list,
8064                 p_commit           => Fnd_Api.g_false,
8065                 p_validation_level => p_validation_level,
8066                 p_module_type      => p_module_type,*/
8067                 p_visit_task_id    => l_task_id,
8068                 x_return_status    => l_return_status);
8069              /* x_msg_count        => x_msg_count,
8070                 x_msg_data         => x_msg_data);*/
8071 
8072             IF l_return_status <> Fnd_Api.g_ret_sts_success THEN
8073                x_return_status := Fnd_Api.g_ret_sts_error;
8074                RAISE Fnd_Api.G_EXC_ERROR;
8075             END IF;
8076 
8077             -- Update Task status to 'DELETED'
8078             UPDATE AHL_VISIT_TASKS_B
8079             SET STATUS_CODE='DELETED',UNIT_EFFECTIVITY_ID=NULL,
8080                 OBJECT_VERSION_NUMBER=OBJECT_VERSION_NUMBER+1
8081             WHERE VISIT_TASK_ID=l_task_id;
8082 
8083             --salogan added the following code for supplier warranty starts
8084             Get_Entl_rec_for_Delete(
8085                 p_task_id           => l_task_id,
8086                 x_warranty_entl_tbl => l_entl_rec_tbl);
8087 
8088             IF (l_log_statement >= l_log_current_level) THEN
8089                 fnd_log.string(l_log_statement,
8090                                L_DEBUG_KEY,
8091                                'Before calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements.');
8092             END IF;
8093 
8094             --Not passing p_commit the main API commits the data at the end
8095             AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements(
8096                 p_api_version                 => p_api_version,
8097                 p_validation_level            => p_validation_level,
8098                 p_module_type                 => p_module_type,
8099                 p_user_role                   => AHL_WARRANTY_ENTL_PVT.G_USER_PLANNER,
8100                 p_x_warranty_entl_tbl         => l_entl_rec_tbl,
8101                 x_return_status               => l_return_status,
8102                 x_msg_count                   => l_msg_count,
8103                 x_msg_data                    => l_msg_data);
8104 
8105             IF (l_log_statement >= l_log_current_level) THEN
8106                 fnd_log.string(l_log_statement,
8107                                L_DEBUG_KEY,
8108                                'After calling AHL_WARRANTY_ENTL_PVT.Process_Warranty_Entitlements. Return Status = ' ||
8109                                l_return_status);
8110             END IF;
8111 
8112             l_msg_count := Fnd_Msg_Pub.count_msg;
8113             IF l_msg_count > 0 OR l_return_status <> Fnd_Api.g_ret_sts_success THEN
8114                x_msg_count := l_msg_count;
8115                x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
8116                RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
8117             END IF;
8118             -- salogan added for supplier warranty ends
8119          ELSE
8120 
8121             DELETE FROM Ahl_Visit_Tasks_TL
8122             WHERE  Visit_Task_ID = l_task_id;
8123 
8124             IF (SQL%NOTFOUND) THEN
8125                Fnd_Message.set_name ('AHL', 'AHL_API_RECORD_NOT_FOUND');
8126                Fnd_Msg_Pub.ADD;
8127                RAISE Fnd_Api.g_exc_error;
8128             END IF;
8129 
8130             -- Delete task base (AHL_VISIT_TASKS_B) table data
8131             IF (l_log_statement >= l_log_current_level) THEN
8132                 fnd_log.string(l_log_statement,
8133                                L_DEBUG_KEY,
8134                                ':Delete from base task table');
8135             END IF;
8136 
8137             DELETE FROM Ahl_Visit_Tasks_B
8138             WHERE  Visit_Task_ID = l_task_id;
8139 
8140             IF (SQL%NOTFOUND) THEN
8141                Fnd_Message.set_name ('AHL', 'AHL_API_RECORD_NOT_FOUND');
8142                Fnd_Msg_Pub.ADD;
8143                RAISE Fnd_Api.g_exc_error;
8144             END IF;
8145 
8146             END IF;
8147 
8148             -- Removed call to AHL_LTP_REQST_MATRL_PVT.Process_Planned_Materials
8149             -- for mannually created summary task.
8150 
8151        END IF;  --End of if c_task_rec.mr_id is not null check
8152    END IF; --l_origin_id is null check
8153 
8154 ------------------------End of API Body------------------------------------
8155    IF Fnd_Api.to_boolean (p_commit) THEN
8156       COMMIT;
8157    END IF;
8158 
8159    Fnd_Msg_Pub.count_and_get (
8160          p_encoded => Fnd_Api.g_false,
8161          p_count   => x_msg_count,
8162          p_data    => x_msg_data
8163    );
8164 
8165    IF (l_log_procedure >= l_log_current_level) THEN
8166          fnd_log.string(l_log_procedure,
8167                         L_DEBUG_KEY ||'.end',
8168                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
8169    END IF;
8170 
8171 EXCEPTION
8172    WHEN Fnd_Api.g_exc_error THEN
8173       ROLLBACK TO Delete_Summary_Task;
8174       x_return_status := Fnd_Api.g_ret_sts_error;
8175       Fnd_Msg_Pub.count_and_get (
8176             p_encoded => Fnd_Api.g_false,
8177             p_count   => x_msg_count,
8178             p_data    => x_msg_data
8179       );
8180    WHEN Fnd_Api.g_exc_unexpected_error THEN
8181       ROLLBACK TO Delete_Summary_Task;
8182       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
8183       Fnd_Msg_Pub.count_and_get (
8184             p_encoded => Fnd_Api.g_false,
8185             p_count   => x_msg_count,
8186             p_data    => x_msg_data
8187       );
8188    WHEN OTHERS THEN
8189       ROLLBACK TO Delete_Summary_Task;
8190       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
8191       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
8192     THEN
8193          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
8194       END IF;
8195       Fnd_Msg_Pub.count_and_get (
8196             p_encoded => Fnd_Api.g_false,
8197             p_count   => x_msg_count,
8198             p_data    => x_msg_data
8199       );
8200 END Delete_Summary_Task;
8201 
8202 --------------------------------------------------------------------
8203 -- PROCEDURE
8204 --    Search_Task
8205 --
8206 --------------------------------------------------------------------
8207 PROCEDURE Search_Task (
8208    p_api_version          IN  NUMBER,
8209    p_init_msg_list        IN  VARCHAR2  := Fnd_Api.g_false,
8210    p_commit               IN  VARCHAR2  := Fnd_Api.g_false,
8211    p_validation_level     IN  NUMBER    := Fnd_Api.g_valid_level_full,
8212    p_module_type          IN  VARCHAR2  := 'JSP',
8213    p_visit_id             IN  NUMBER,
8214 
8215    p_x_srch_task_tbl      IN OUT NOCOPY Srch_Task_Tbl_Type,
8216    x_return_status        OUT NOCOPY VARCHAR2,
8217    x_msg_count            OUT NOCOPY NUMBER,
8218    x_msg_data             OUT NOCOPY VARCHAR2
8219   )
8220 IS
8221 
8222    L_API_VERSION          CONSTANT NUMBER := 1.0;
8223    L_API_NAME             CONSTANT VARCHAR2(30) := 'Search_Task';
8224    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
8225 
8226    -- Local variables defined for the procedure
8227    l_tasks_tbl            Srch_Task_Tbl_Type := p_x_srch_task_tbl;
8228    l_task_type_code       VARCHAR2(80);
8229    l_msg_count            NUMBER;
8230    l_count                NUMBER;
8231    x                      NUMBER:=0;
8232    z                      NUMBER:=0;
8233 
8234 -- To find the task's related visit information
8235    CURSOR c_visit (x_id IN NUMBER) IS
8236     SELECT * FROM AHL_VISITS_VL
8237     WHERE VISIT_ID = x_id;
8238     c_visit_rec c_visit%ROWTYPE;
8239 
8240   -- To find task type code, start, end time of a task
8241   --POST 11.5.10 cxcheng change --------------
8242    CURSOR get_task_times_csr (p_task_id IN NUMBER) IS
8243     SELECT task_type_code, start_date_time, end_date_time
8244     FROM AHL_VISIT_TASKS_B
8245     WHERE VISIT_TASK_ID = p_task_id;
8246 
8247 BEGIN
8248     --------------------- initialize -----------------------
8249    SAVEPOINT Search_Task;
8250 
8251    IF (l_log_procedure >= l_log_current_level) THEN
8252        fnd_log.string(l_log_procedure,
8253                       L_DEBUG_KEY ||'.begin',
8254                       'At the start of PL SQL procedure.');
8255    END IF;
8256 
8257    -- Initialize message list if p_init_msg_list is set to TRUE.
8258    IF Fnd_Api.to_boolean(p_init_msg_list)
8259    THEN
8260      Fnd_Msg_Pub.initialize;
8261    END IF;
8262 
8263    --  Initialize API return status to success
8264     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
8265 
8266    -- Standard call to check for call compatibility.
8267    IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
8268                                       p_api_version,
8269                                       l_api_name,G_PKG_NAME)
8270    THEN
8271        RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
8272    END IF;
8273   ---------------------------Start of Body-------------------------------------
8274     IF (l_log_statement >= l_log_current_level) THEN
8275         fnd_log.string(l_log_statement,
8276                        L_DEBUG_KEY,
8277                        ': Visit Id ' || p_visit_id);
8278     END IF;
8279     OPEN c_visit (p_visit_id);
8280     FETCH c_visit INTO c_visit_rec;
8281     CLOSE c_visit;
8282 
8283     IF (c_visit_rec.START_DATE_TIME IS NOT NULL
8284         AND c_visit_rec.START_DATE_TIME <> Fnd_Api.G_MISS_DATE
8285         AND c_visit_rec.DEPARTMENT_ID IS NOT NULL
8286         AND c_visit_rec.DEPARTMENT_ID <> FND_API.G_MISS_NUM) THEN
8287 
8288         IF l_tasks_tbl.COUNT > 0 THEN
8289            x := l_tasks_tbl.FIRST;
8290            LOOP
8291               OPEN get_task_times_csr(l_tasks_tbl(x).TASK_ID);
8292               FETCH get_task_times_csr INTO l_task_type_code,
8293                                  l_tasks_tbl(x).TASK_START_TIME,
8294                                  l_tasks_tbl(x).TASK_END_TIME  ;
8295               CLOSE get_task_times_csr;
8296 
8297               EXIT WHEN x = l_tasks_tbl.LAST ;
8298               x := l_tasks_tbl.NEXT(x);
8299            END LOOP;
8300         END IF;
8301         p_x_srch_task_tbl := l_tasks_tbl;
8302      ELSE
8303         IF (l_log_statement >= l_log_current_level) THEN
8304             fnd_log.string(l_log_statement,
8305                            L_DEBUG_KEY,
8306                            ': Either Visit Start End Time Missing' || c_visit_rec.START_DATE_TIME ||
8307                            ': Or Visit Department Missing' || c_visit_rec.DEPARTMENT_ID ||
8308                            ': Or Department Shift for a Dept Missing' || l_count);
8309         END IF;
8310         IF l_tasks_tbl.COUNT > 0 THEN
8311                 z := l_tasks_tbl.FIRST;
8312                 LOOP
8313                   l_tasks_tbl(z).TASK_START_TIME := NULL;
8314                   l_tasks_tbl(z).TASK_END_TIME   := NULL;
8315                   EXIT WHEN z = l_tasks_tbl.LAST ;
8316                   z :=l_tasks_tbl.NEXT(z);
8317                 END LOOP;
8318         END IF;
8319         p_x_srch_task_tbl := l_tasks_tbl;
8320      END IF;
8321 
8322      IF l_tasks_tbl.COUNT > 0 THEN
8323         X := l_tasks_tbl.FIRST;
8324         LOOP
8325            IF (l_log_statement >= l_log_current_level) THEN
8326                fnd_log.string(l_log_statement,
8327                               L_DEBUG_KEY,
8328                               'Value of Task Id : ' || l_tasks_tbl(X).Task_Id ||
8329                               'Value of Start Date : ' || TO_CHAR(l_tasks_tbl(X).TASK_START_TIME, 'MM/DD/YY HH24:MI:SS') ||
8330                               'Value of End Date : ' || TO_CHAR(l_tasks_tbl(X).TASK_END_TIME, 'MM/DD/YY HH24:MI:SS'));
8331            END IF;
8332 
8333            EXIT WHEN X = l_tasks_tbl.LAST ;
8334            X := l_tasks_tbl.NEXT(X);
8335         END LOOP;
8336      END IF;
8337 
8338 ---------------------------End of Body---------------------------------------
8339   --Standard check to count messages
8340    l_msg_count := Fnd_Msg_Pub.count_msg;
8341 
8342    IF l_msg_count > 0 THEN
8343       x_msg_count := l_msg_count;
8344       x_return_status := Fnd_Api.G_RET_STS_ERROR;
8345       RAISE Fnd_Api.G_EXC_ERROR;
8346    END IF;
8347 
8348   --Standard check for commit
8349    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
8350       COMMIT;
8351    END IF;
8352 
8353    IF (l_log_procedure >= l_log_current_level) THEN
8354          fnd_log.string(l_log_procedure,
8355                         L_DEBUG_KEY ||'.end',
8356                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
8357    END IF;
8358 
8359 EXCEPTION
8360    WHEN Fnd_Api.g_exc_error THEN
8361       ROLLBACK TO Search_Task;
8362       x_return_status := Fnd_Api.g_ret_sts_error;
8363       Fnd_Msg_Pub.count_and_get(
8364             p_encoded => Fnd_Api.g_false,
8365             p_count   => x_msg_count,
8366             p_data    => x_msg_data
8367       );
8368    WHEN Fnd_Api.g_exc_unexpected_error THEN
8369       ROLLBACK TO Search_Task;
8370       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
8371       Fnd_Msg_Pub.count_and_get (
8372             p_encoded => Fnd_Api.g_false,
8373             p_count   => x_msg_count,
8374             p_data    => x_msg_data
8375       );
8376    WHEN OTHERS THEN
8377       ROLLBACK TO Search_Task;
8378       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
8379       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
8380     THEN
8381          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
8382       END IF;
8383       Fnd_Msg_Pub.count_and_get (
8384             p_encoded => Fnd_Api.g_false,
8385             p_count   => x_msg_count,
8386             p_data    => x_msg_data
8387       );
8388 END Search_Task;
8389 
8390 --------------------------------------------------------------------
8391 -- PROCEDURE
8392 --   Validate_Visit_Task
8393 --
8394 -- PURPOSE
8395 --
8396 --------------------------------------------------------------------
8397 PROCEDURE Validate_Visit_Task (
8398    p_api_version       IN  NUMBER,
8399    p_init_msg_list     IN  VARCHAR2  := Fnd_Api.g_false,
8400    p_commit            IN  VARCHAR2  := Fnd_Api.g_false,
8401    p_validation_level  IN  NUMBER    := Fnd_Api.g_valid_level_full,
8402    p_task_rec          IN  AHL_VWP_RULES_PVT.Task_Rec_Type,
8403 
8404    x_return_status     OUT NOCOPY VARCHAR2,
8405    x_msg_count         OUT NOCOPY NUMBER,
8406    x_msg_data          OUT NOCOPY VARCHAR2
8407 )
8408 IS
8409    L_API_VERSION       CONSTANT NUMBER := 1.0;
8410    L_API_NAME          CONSTANT VARCHAR2(30) := 'Validate_Visit_Task';
8411    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
8412 
8413    l_return_status     VARCHAR2(1);
8414 BEGIN
8415    --------------------- initialize -----------------------
8416 
8417    IF (l_log_procedure >= l_log_current_level) THEN
8418       fnd_log.string(l_log_procedure,
8419                      L_DEBUG_KEY ||'.begin',
8420                      'At the start of PL SQL procedure.');
8421    END IF;
8422 
8423    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
8424       Fnd_Msg_Pub.initialize;
8425    END IF;
8426 
8427    IF NOT Fnd_Api.compatible_api_call (
8428          l_api_version,
8429          p_api_version,
8430          l_api_name,
8431          G_PKG_NAME
8432    ) THEN
8433       RAISE Fnd_Api.g_exc_unexpected_error;
8434    END IF;
8435    x_return_status := Fnd_Api.g_ret_sts_success;
8436 
8437    ---------------------- validate ------------------------
8438 
8439    IF (l_log_statement >= l_log_current_level) THEN
8440        fnd_log.string(l_log_statement,
8441                       L_DEBUG_KEY,
8442                       ':Check items1');
8443    END IF;
8444 
8445    IF p_validation_level >= Jtf_Plsql_Api.g_valid_level_item THEN
8446       Check_Task_Items (
8447          p_task_rec           => p_task_rec,
8448          p_validation_mode    => Jtf_Plsql_Api.g_create,
8449          x_return_status      => l_return_status
8450       );
8451       IF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
8452          RAISE Fnd_Api.g_exc_unexpected_error;
8453       ELSIF l_return_status = Fnd_Api.g_ret_sts_error THEN
8454          RAISE Fnd_Api.g_exc_error;
8455       END IF;
8456    END IF;
8457 
8458    IF (l_log_statement >= l_log_current_level) THEN
8459        fnd_log.string(l_log_statement,
8460                       L_DEBUG_KEY,
8461                       ':Check items2');
8462    END IF;
8463 
8464  -------------------- finish --------------------------
8465   -- Standard call to get message count and if count is 1, get message info
8466    Fnd_Msg_Pub.count_and_get (
8467          p_encoded => Fnd_Api.g_false,
8468          p_count   => x_msg_count,
8469          p_data    => x_msg_data
8470    );
8471 
8472    IF (l_log_procedure >= l_log_current_level) THEN
8473          fnd_log.string(l_log_procedure,
8474                         L_DEBUG_KEY ||'.end',
8475                         'At the end of PL SQL procedure. Return Status = ' || l_return_status);
8476    END IF;
8477 EXCEPTION
8478    WHEN Fnd_Api.g_exc_error THEN
8479       x_return_status := Fnd_Api.g_ret_sts_error;
8480       Fnd_Msg_Pub.count_and_get (
8481             p_encoded => Fnd_Api.g_false,
8482             p_count   => x_msg_count,
8483             p_data    => x_msg_data
8484       );
8485    WHEN Fnd_Api.g_exc_unexpected_error THEN
8486       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
8487       Fnd_Msg_Pub.count_and_get (
8488             p_encoded => Fnd_Api.g_false,
8489             p_count   => x_msg_count,
8490             p_data    => x_msg_data
8491       );
8492    WHEN OTHERS THEN
8493       x_return_status := Fnd_Api.g_ret_sts_unexp_error;
8494       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
8495     THEN
8496          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
8497       END IF;
8498       Fnd_Msg_Pub.count_and_get (
8499             p_encoded => Fnd_Api.g_false,
8500             p_count   => x_msg_count,
8501             p_data    => x_msg_data
8502       );
8503 END Validate_Visit_Task;
8504 
8505 ---------------------------------------------------------------------
8506 -- PROCEDURE
8507 --    Check_Task_Items
8508 --
8509 -- PURPOSE
8510 --
8511 ---------------------------------------------------------------------
8512 PROCEDURE Check_Task_Items (
8513    p_task_rec        IN  AHL_VWP_RULES_PVT.Task_Rec_Type,
8514    p_validation_mode IN  VARCHAR2 := Jtf_Plsql_Api.g_create,
8515 
8516    x_return_status   OUT NOCOPY VARCHAR2
8517 )
8518 IS
8519    L_API_NAME  CONSTANT VARCHAR2(30) := 'Check_Task_Items';
8520    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
8521 BEGIN
8522    --
8523    IF (l_log_procedure >= l_log_current_level) THEN
8524        fnd_log.string(l_log_procedure,
8525                       L_DEBUG_KEY ||'.begin',
8526                       'At the start of PL SQL procedure.');
8527    END IF;
8528    x_return_status := Fnd_Api.g_ret_sts_success;
8529    -- Validate required items.
8530 
8531    IF (l_log_statement >= l_log_current_level) THEN
8532        fnd_log.string(l_log_statement,
8533                       L_DEBUG_KEY,
8534                       'Check_Task_Items:Before Check_Visit_Task_Req_Items');
8535    END IF;
8536 
8537    Check_Visit_Task_Req_Items (
8538       p_task_rec        => p_task_rec,
8539       /* Added by rnahata for Issue 105 - serial number validation should be performed only at
8540       the time of creation of tasks as once created serial number cannot be edited.*/
8541       p_validation_mode => p_validation_mode,
8542       x_return_status   => x_return_status
8543    );
8544    IF x_return_status <> Fnd_Api.g_ret_sts_success THEN
8545       RETURN;
8546    END IF;
8547 
8548    --
8549    -- Validate uniqueness.
8550 
8551    IF (l_log_statement >= l_log_current_level) THEN
8552        fnd_log.string(l_log_statement,
8553                       L_DEBUG_KEY,
8554                       'Check_Task_Items:Before Check_Visit_Task_UK_Items');
8555    END IF;
8556    Check_Visit_Task_UK_Items (
8557       p_task_rec => p_task_rec,
8558       p_validation_mode    => p_validation_mode,
8559       x_return_status      => x_return_status
8560    );
8561 
8562    IF (l_log_procedure >= l_log_current_level) THEN
8563        fnd_log.string(l_log_procedure,
8564                       L_DEBUG_KEY ||'.begin',
8565                       'At the end of PL SQL procedure. Return Status ' ||x_return_status);
8566    END IF;
8567 
8568 END Check_Task_Items;
8569 
8570 ---------------------------------------------------------------------
8571 -- PROCEDURE
8572 --    Complete_Visit_Task_Rec
8573 --
8574 -- PURPOSE
8575 --
8576 ---------------------------------------------------------------------
8577 /*
8578 PROCEDURE Complete_Visit_Task_Rec (
8579    p_task_rec      IN  AHL_VWP_RULES_PVT.Task_Rec_Type,
8580    x_complete_rec  OUT NOCOPY AHL_VWP_RULES_PVT.Task_Rec_Type
8581 )
8582 IS
8583    CURSOR c_Visit_Task IS
8584       SELECT   *
8585       FROM     Ahl_Visit_Tasks_vl
8586       WHERE    Visit_Task_ID = p_task_rec.Visit_Task_ID;
8587    --
8588    -- This is the only exception for using %ROWTYPE.
8589    -- We are selecting from the VL view, which may
8590    -- have some denormalized columns as compared to
8591    -- the base tables.
8592    l_task_rec    c_Visit_Task%ROWTYPE;
8593 BEGIN
8594    x_complete_rec := p_task_rec;
8595    OPEN c_Visit_Task;
8596    FETCH c_Visit_Task INTO l_task_rec;
8597    IF c_Visit_Task%NOTFOUND THEN
8598       CLOSE c_Visit_Task;
8599       IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
8600          Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
8601          Fnd_Msg_Pub.ADD;
8602       END IF;
8603       RAISE Fnd_Api.g_exc_error;
8604    END IF;
8605    CLOSE c_Visit_Task;
8606 
8607 END Complete_Visit_Task_Rec;
8608 */
8609 
8610 ---------------------------------------------------------------------
8611 -- PROCEDURE
8612 --    Check_Visit_Task_Req_Items
8613 --
8614 -- PURPOSE
8615 --
8616 ---------------------------------------------------------------------
8617 PROCEDURE Check_Visit_Task_Req_Items (
8618    p_task_rec        IN         AHL_VWP_RULES_PVT.Task_Rec_Type,
8619    -- Added by rnahata for Issue 105 - validation mode parameter
8620    p_validation_mode IN         VARCHAR2 := Jtf_Plsql_Api.g_create,
8621    x_return_status   OUT NOCOPY VARCHAR2
8622 )
8623 IS
8624    L_API_NAME  CONSTANT VARCHAR2(30) := 'Check_Visit_Task_Req_Items';
8625    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
8626 
8627    -- Added by rnahata for Issue 105
8628    -- To fetch if the instance is serial controlled/non-serial controlled.
8629    CURSOR c_check_inst_nonserial(c_instance_id IN NUMBER) IS
8630     SELECT 'X'
8631     FROM mtl_system_items_b mtl, csi_item_instances csi
8632     WHERE csi.instance_id = c_instance_id
8633     AND csi.inventory_item_id = mtl.inventory_item_id
8634     AND NVL(csi.inv_organization_id, csi.inv_master_organization_id) = mtl.organization_id
8635     AND mtl.serial_number_control_code = 1;
8636 
8637     l_serial_ctrl     VARCHAR2(2) := NULL;
8638 BEGIN
8639 
8640   IF (l_log_procedure >= l_log_current_level) THEN
8641      fnd_log.string(l_log_procedure,
8642                     L_DEBUG_KEY ||'.begin',
8643                     'At the start of PL SQL procedure.');
8644   END IF;
8645 
8646   x_return_status := Fnd_Api.g_ret_sts_success;
8647 
8648   -- TASK NAME ==== NAME
8649   IF (p_task_rec.VISIT_TASK_NAME IS NULL OR p_Task_rec.VISIT_TASK_NAME = Fnd_Api.G_MISS_CHAR) THEN
8650      Fnd_Message.set_name ('AHL', 'AHL_VWP_NAME_MISSING');
8651      Fnd_Msg_Pub.ADD;
8652      x_return_status := Fnd_Api.g_ret_sts_error;
8653   END IF;
8654 
8655    IF UPPER(p_task_rec.TASK_TYPE_CODE) = 'UNASSOCIATED' THEN
8656 
8657       -- ITEM ==== INVENTORY_ITEM_ID
8658       IF (p_Task_rec.item_name IS NULL OR p_Task_rec.item_name = Fnd_Api.G_MISS_CHAR ) THEN
8659           IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
8660              Fnd_Message.set_name ('AHL', 'AHL_VWP_ITEM_MISSING');
8661              Fnd_Msg_Pub.ADD;
8662           END IF;
8663           x_return_status := Fnd_Api.g_ret_sts_error;
8664       END IF;
8665 
8666       -- TASK DURATION ==== DURATION
8667       IF (p_task_rec.DURATION IS NULL OR p_Task_rec.DURATION = Fnd_Api.G_MISS_NUM) THEN
8668         Fnd_Message.set_name ('AHL', 'AHL_VWP_DURATION_MISSING');
8669         Fnd_Msg_Pub.ADD;
8670         x_return_status := Fnd_Api.g_ret_sts_error;
8671       END IF;
8672 
8673       IF (p_task_rec.DURATION IS NOT NULL AND p_Task_rec.DURATION <> Fnd_Api.G_MISS_NUM) THEN
8674         IF p_task_rec.DURATION < 0 OR FLOOR(p_task_rec.DURATION) <> p_task_rec.DURATION THEN
8675           Fnd_Message.set_name ('AHL', 'AHL_VWP_ONLY_POSITIVE_VALUE');
8676           Fnd_Msg_Pub.ADD;
8677           x_return_status := Fnd_Api.g_ret_sts_error;
8678         END IF;
8679       END IF;
8680 
8681       IF ( p_validation_mode = Jtf_Plsql_Api.g_create ) THEN
8682          -- Begin changes by rnahata for Issue 105
8683          -- Check if the serial number is present only for serialised instances.
8684          OPEN c_check_inst_nonserial (p_task_rec.instance_id);
8685          FETCH c_check_inst_nonserial INTO l_serial_ctrl;
8686          IF c_check_inst_nonserial%NOTFOUND THEN
8687             IF (p_Task_rec.SERIAL_NUMBER IS NULL OR p_Task_rec.SERIAL_NUMBER = Fnd_Api.G_MISS_CHAR) THEN
8688                Fnd_Message.set_name ('AHL', 'AHL_VWP_SERIAL_MISSING');
8689                Fnd_Msg_Pub.ADD;
8690                x_return_status := Fnd_Api.g_ret_sts_error;
8691             END IF;
8692          ELSE
8693             IF (p_Task_rec.SERIAL_NUMBER IS NOT NULL) THEN
8694                Fnd_Message.set_name ('AHL', 'AHL_VWP_SERIAL_NOT_NEEDED');
8695                Fnd_Msg_Pub.ADD;
8696                x_return_status := Fnd_Api.g_ret_sts_error;
8697             END IF;
8698          END IF;
8699          CLOSE c_check_inst_nonserial;
8700          -- End changes by rnahata for Issue 105
8701       END IF;
8702 
8703    END IF;
8704 
8705    IF (p_task_rec.START_FROM_HOUR IS NOT NULL AND p_Task_rec.START_FROM_HOUR <> Fnd_Api.G_MISS_NUM) THEN
8706       IF p_task_rec.START_FROM_HOUR < 0 OR FLOOR(p_task_rec.START_FROM_HOUR) <> p_task_rec.START_FROM_HOUR THEN
8707              Fnd_Message.set_name ('AHL', 'AHL_VWP_ONLY_POSITIVE_VALUE');
8708              Fnd_Msg_Pub.ADD;
8709              x_return_status := Fnd_Api.g_ret_sts_error;
8710          END IF;
8711    END IF;
8712 
8713    IF (l_log_procedure >= l_log_current_level) THEN
8714          fnd_log.string(l_log_procedure,
8715                         L_DEBUG_KEY ||'.end',
8716                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
8717    END IF;
8718 END Check_Visit_Task_Req_Items;
8719 
8720 ---------------------------------------------------------------------
8721 -- PROCEDURE
8722 --    Check_Visit_Task_UK_Items
8723 --
8724 -- PURPOSE
8725 --
8726 ---------------------------------------------------------------------
8727 PROCEDURE Check_Visit_Task_UK_Items (
8728    p_task_rec        IN    AHL_VWP_RULES_PVT.Task_Rec_Type,
8729    p_validation_mode IN    VARCHAR2 := Jtf_Plsql_Api.g_create,
8730    x_return_status   OUT   NOCOPY VARCHAR2
8731 )
8732 IS
8733    l_valid_flag   VARCHAR2(1);
8734    L_API_NAME  CONSTANT VARCHAR2(30) := 'Check_Visit_Task_UK_Items';
8735    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
8736 BEGIN
8737    x_return_status := Fnd_Api.g_ret_sts_success;
8738 
8739   IF (l_log_procedure >= l_log_current_level) THEN
8740      fnd_log.string(l_log_procedure,
8741                     L_DEBUG_KEY ||'.begin',
8742                     'At the start of PL SQL procedure.');
8743   END IF;
8744   --
8745   -- For Task, when ID is passed in, we need to
8746   -- check if this ID is unique.
8747 
8748   IF p_validation_mode = Jtf_Plsql_Api.g_create
8749      AND p_task_rec.Visit_Task_ID IS NOT NULL
8750   THEN
8751 
8752      IF (l_log_statement >= l_log_current_level) THEN
8753          fnd_log.string(l_log_statement,
8754                         L_DEBUG_KEY,
8755                         ': = Check_Visit_Task_UK_Items Uniqueness Of ID');
8756      END IF;
8757 
8758      -- FOR CREATION
8759      IF Ahl_Utility_Pvt.check_uniqueness(
8760          'Ahl_Visit_Tasks_vl',
8761        'Visit_Task_ID = ' || p_task_rec.Visit_Task_ID
8762      ) = Fnd_Api.g_false
8763      THEN
8764         IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_error) THEN
8765            Fnd_Message.set_name ('AHL', 'AHL_VWP_DUPLICATE_TASK_ID');
8766            Fnd_Msg_Pub.ADD;
8767         END IF;
8768         x_return_status := Fnd_Api.g_ret_sts_error;
8769         RETURN;
8770      END IF;
8771   END IF;
8772 
8773   IF (l_log_procedure >= l_log_current_level) THEN
8774      fnd_log.string(l_log_procedure,
8775                     L_DEBUG_KEY ||'.end',
8776                     'At the end of PL SQL procedure. Return Status = ' || x_return_status);
8777   END IF;
8778 END Check_Visit_Task_UK_Items;
8779 
8780 --------------------------------------------------------------------
8781 -- PROCEDURE
8782 --    Create_PUP_Tasks
8783 -- PURPOSE
8784 --    To create all types of tasks i.e Unassociated/Summary/Unplanned/Planned
8785 --------------------------------------------------------------------
8786 PROCEDURE Create_PUP_Tasks (
8787    p_api_version      IN            NUMBER,
8788    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
8789    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
8790    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
8791    p_module_type      IN            VARCHAR2  := 'JSP',
8792    p_x_task_tbl       IN OUT NOCOPY AHL_VWP_RULES_PVT.Task_Tbl_Type,
8793    x_return_status       OUT NOCOPY VARCHAR2,
8794    x_msg_count           OUT NOCOPY NUMBER,
8795    x_msg_data            OUT NOCOPY VARCHAR2
8796 )
8797 IS
8798    -- Define local variables
8799    L_API_VERSION   CONSTANT NUMBER := 1.0;
8800    L_API_NAME      CONSTANT VARCHAR2(30) := 'CREATE PUP TASKS';
8801    L_DEBUG_KEY     CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
8802    l_msg_count              NUMBER;
8803    l_msg_data               VARCHAR2(2000);
8804    l_return_status          VARCHAR2(1);
8805    l_task_tbl               AHL_VWP_RULES_PVT.Task_Tbl_Type := p_x_task_tbl;
8806    -- Begin changes by rnahata for Issue 105
8807    l_instance_qty           NUMBER := 0;
8808    l_instance_id            NUMBER := 0;
8809    l_task_type              VARCHAR2(30);
8810    -- End changes by rnahata for Issue 105
8811 
8812    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010
8813    -- Flag to decide if call to AHL_VWP_TIMES_PVT.Calculate_Task_Times is needed
8814    l_past_dates_flag  VARCHAR(1):= 'N' ;
8815 
8816    -- To find visit related information
8817    CURSOR c_visit(x_id IN NUMBER) IS
8818     SELECT * FROM AHL_VISITS_VL
8819     WHERE VISIT_ID = x_id;
8820    c_visit_rec c_visit%ROWTYPE;
8821 
8822    -- Begin changes by rnahata for Issue 105
8823    --To fetch instance quantity
8824    CURSOR c_get_instance_qty(p_instance_id IN NUMBER) IS
8825     SELECT quantity FROM csi_item_instances csii
8826     WHERE instance_id = p_instance_id;
8827 
8828    --To fetch instance id for 'Planned' MRs
8829    CURSOR c_get_instance_id (p_unit_effectivity IN NUMBER) IS
8830     SELECT csi_item_instance_id FROM AHL_UNIT_EFFECTIVITIES_VL
8831     WHERE UNIT_EFFECTIVITY_ID = p_unit_effectivity;
8832    -- End changes by rnahata for Issue 105
8833 
8834    --Kasridha:Changes for Component Maintenance Planning Begins
8835    l_is_comp_visit               VARCHAR2(1);
8836    l_rts_wip_id                  NUMBER;
8837    l_rpr_batch_task_id           NUMBER;
8838    l_target_qty                  NUMBER := 0;
8839    l_summary_task_id             NUMBER;
8840    l_task_data                   AHL_VWP_RULES_PVT.Task_Tbl_Type := p_x_task_tbl;
8841    l_repair_batch_name           VARCHAR2(100);
8842    l_task_status_code            VARCHAR2(30);
8843    l_is_cost_parent_setting_done BOOLEAN;
8844    l_repair_batch_task_id        NUMBER;
8845 
8846    --To fetch the repair batch quantity for a given instance
8847    CURSOR c_get_target_qty (p_instance_id IN NUMBER, p_org_id IN NUMBER) IS
8848      SELECT target_qty
8849      FROM ahl_visit_tasks_b
8850      WHERE repair_batch_name =
8851                  AHL_CMP_UTIL_PKG.Get_Rpr_Batch_For_Inst(p_instance_id,
8852                                                          p_org_id);
8853    -- To find the repair batch task ID for a given instance
8854    CURSOR c_get_rprbatch_task (p_instance_id IN NUMBER, p_org_id NUMBER) IS
8855    SELECT visit_task_id FROM ahl_visit_tasks_b
8856    WHERE repair_batch_name = (AHL_CMP_UTIL_PKG.Get_Rpr_Batch_For_Inst(p_instance_id,
8857                                                                       p_org_id));
8858    CURSOR c_task_dtls (p_task_id IN NUMBER) IS
8859    SELECT task_type_code, cost_parent_id, instance_id, status_code FROM ahl_visit_tasks_b
8860    WHERE visit_task_id = p_task_id;
8861 
8862    -- Cursor to get the RTS workorder for a repair batch
8863    CURSOR c_get_rts_wo_id(p_rpr_batch_task_id NUMBER, p_instance_id NUMBER) IS
8864    SELECT wip_entity_id FROM ahl_workorders
8865    WHERE status_code IN ('1', '3', '6', '19', '20', '17')
8866    --unreleased, released, on-hold, parts hold and pending QA approval(open workorders)
8867    AND visit_task_id IN
8868    (SELECT vt.visit_task_id FROM AHL_VISIT_TASKS_B vt
8869     WHERE vt.cost_parent_id              IS NOT NULL
8870     AND NVL(vt.return_to_supply_flag,'N') = 'Y'
8871     AND vt.instance_id = p_instance_id
8872     START WITH vt.visit_task_id         = p_rpr_batch_task_id
8873     CONNECT BY PRIOR vt.visit_task_id = vt.cost_parent_id
8874     );
8875    --Cursor to get the repair batch name for a given task
8876    CURSOR c_get_repair_batch_name(p_task_id IN NUMBER) IS
8877    SELECT repair_batch_name FROM ahl_visit_tasks_b WHERE
8878    visit_task_id = p_task_id
8879    AND repair_batch_name IS NOT NULL;
8880    --Kasridha:Changes for Component Maintenance Planning Ends
8881 
8882 BEGIN
8883    --------------------- initialize -----------------------
8884    SAVEPOINT Create_PUP_Tasks;
8885 
8886    IF (l_log_procedure >= l_log_current_level) THEN
8887       fnd_log.string(l_log_procedure,
8888                      L_DEBUG_KEY ||'.begin',
8889                      'At the start of PL SQL procedure.');
8890    END IF;
8891 
8892    -- Initialize message list if p_init_msg_list is set to TRUE.
8893    IF Fnd_Api.to_boolean(p_init_msg_list)
8894    THEN
8895       Fnd_Msg_Pub.initialize;
8896    END IF;
8897 
8898    --  Initialize API return status to success
8899     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
8900 
8901    -- Standard call to check for call compatibility.
8902    IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
8903                                       p_api_version,
8904                                       l_api_name,G_PKG_NAME)
8905    THEN
8906        RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
8907    END IF;
8908 
8909   --------------------Start of API Body-----------------------------------
8910   -------------------Cursor values------------------------------------
8911    -- if table has no data then return as there is nothing to input
8912    IF l_task_tbl.count = 0
8913    THEN
8914       RETURN;
8915    END IF;
8916 
8917    OPEN c_visit(l_task_tbl(1).visit_id);
8918    FETCH c_visit INTO c_visit_rec;
8919    CLOSE c_visit;
8920 
8921    IF (l_log_statement >= l_log_current_level) THEN
8922       fnd_log.string(l_log_statement,
8923                      L_DEBUG_KEY,
8924                      ': Visit Id = ' || c_visit_rec.visit_id ||
8925                      ': Status Code ' || c_visit_rec.status_code );
8926    END IF;
8927 
8928    -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: Tasks cannot be created for locked visits
8929    -- Added for Component maintenance Planning project
8930    -- Flag to identify whether its a component visit
8931    -- Added for Bug #13737408
8932    l_is_comp_visit := AHL_CMP_UTIL_PKG.Is_Comp_Visit (c_visit_rec.visit_id);
8933    IF l_is_comp_visit = 'N' AND c_visit_rec.locked_flag = 'Y' THEN
8934       Fnd_Message.SET_NAME('AHL','AHL_VWP_LOCKED_VISIT');
8935       Fnd_Msg_Pub.ADD;
8936       RAISE Fnd_Api.G_EXC_ERROR;
8937    END IF;
8938 
8939    IF c_visit_rec.status_code IN ('CLOSED','CANCELLED') THEN
8940       Fnd_Message.SET_NAME('AHL','AHL_VWP_NOT_USE_VISIT');
8941       Fnd_Msg_Pub.ADD;
8942       RAISE Fnd_Api.G_EXC_ERROR;
8943    ELSE
8944       FOR i IN p_x_task_tbl.first .. p_x_task_tbl.last
8945       LOOP
8946         -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: STARTS
8947         IF (l_task_tbl(i).PAST_TASK_START_DATE IS NOT NULL
8948            AND l_task_tbl(i).PAST_TASK_START_DATE <> Fnd_Api.G_MISS_DATE) THEN
8949             IF (l_task_tbl(i).PAST_TASK_END_DATE IS NULL
8950                OR l_task_tbl(i).PAST_TASK_START_DATE = Fnd_Api.G_MISS_DATE) THEN
8951                 -- if start date is entered but not end date, throw error
8952              Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_MAND');
8953              Fnd_Msg_Pub.ADD;
8954              RAISE FND_API.G_EXC_ERROR;
8955             END IF;
8956             -- If both past task start and end dates are non-null
8957             l_past_dates_flag := 'Y';
8958             IF (l_task_tbl(i).PAST_TASK_START_DATE >= SYSDATE) THEN
8959               -- Throw error if start date is not in past
8960               Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_PAST_ST_DATE_INV');
8961               Fnd_Msg_Pub.ADD;
8962               RAISE FND_API.G_EXC_ERROR;
8963             END IF;
8964             IF (l_task_tbl(i).PAST_TASK_START_DATE < NVL(c_visit_rec.START_DATE_TIME, l_task_tbl(i).PAST_TASK_START_DATE)) THEN
8965                 -- Throw error if past task start date is before the visit start date
8966                 Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_START_DATE_INVLD');
8967                 Fnd_Msg_Pub.ADD;
8968                 RAISE FND_API.G_EXC_ERROR;
8969             END IF;
8970             IF (l_task_tbl(i).PAST_TASK_START_DATE > l_task_tbl(i).PAST_TASK_END_DATE) THEN
8971                 -- Throw error if past task start date is after the past task end date
8972                 Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_INVLD');
8973                 Fnd_Msg_Pub.ADD;
8974                 RAISE FND_API.G_EXC_ERROR;
8975             END IF;
8976             IF (l_task_tbl(i).PAST_TASK_END_DATE > NVL(c_visit_rec.CLOSE_DATE_TIME, l_task_tbl(i).PAST_TASK_END_DATE)) THEN
8977                -- Throw error if visit ends before the task
8978                Fnd_Message.SET_NAME('AHL','AHL_VWP_TASK_END_DATE_INVLD');
8979                Fnd_Msg_Pub.ADD;
8980                RAISE FND_API.G_EXC_ERROR;
8981             END IF;
8982         ELSE -- PAST_TASK_START_DATE is null
8983             -- SKPATHAK :: Bug #9402279 :: 24-FEB-2010 :: Replaced l_task_tbl(1) with l_task_tbl(i)
8984             -- Also changed the condition from l_task_tbl(i).PAST_TASK_START_DATE <> Fnd_Api.G_MISS_DATE
8985             -- to l_task_tbl(i).PAST_TASK_END_DATE <> Fnd_Api.G_MISS_DATE
8986             IF (l_task_tbl(i).PAST_TASK_END_DATE IS NOT NULL
8987                AND l_task_tbl(i).PAST_TASK_END_DATE <> Fnd_Api.G_MISS_DATE) THEN
8988              Fnd_Message.SET_NAME('AHL','AHL_VWP_PAST_TASK_DATE_MAND');
8989              Fnd_Msg_Pub.ADD;
8990              RAISE FND_API.G_EXC_ERROR;
8991             END IF;
8992             l_task_tbl(i).PAST_TASK_START_DATE := NULL;
8993             l_task_tbl(i).PAST_TASK_END_DATE := NULL;
8994         END IF;
8995         -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: END
8996 
8997           IF l_task_tbl(i).task_type_code = 'PLANNED' THEN
8998              -- Begin changes by rnahata for Issue 105
8999              OPEN c_get_instance_id (p_x_task_tbl(i).unit_effectivity_id);
9000              FETCH c_get_instance_id INTO l_instance_id;
9001              CLOSE c_get_instance_id;
9002 
9003              OPEN c_get_instance_qty(l_instance_id);
9004              FETCH c_get_instance_qty INTO l_instance_qty;
9005              CLOSE c_get_instance_qty;
9006 
9007              IF (l_task_tbl(i).QUANTITY is null) THEN
9008                 l_task_tbl(i).QUANTITY := l_instance_qty;
9009              ELSE
9010                 /*Kasridha : Changes for Component Maintenance Planning Begins
9011                Throw error only when the quantity is greater than
9012                repair quantity , for component visits */
9013 
9014                /* Changes for Component Maintenance Planning
9015                   Reverting the logic to check for instance quantity based on
9016                   latest proposal
9017 
9018                IF(l_is_comp_visit = 'Y')
9019                 THEN
9020                   OPEN c_get_target_qty (l_instance_id, c_visit_rec.organization_id);
9021                     FETCH c_get_target_qty INTO l_target_qty;
9022                   CLOSE c_get_target_qty;
9023 
9024                   IF(l_task_tbl(i).QUANTITY > NVL(l_target_qty, 0)) THEN
9025                     Fnd_Message.SET_NAME('AHL','AHL_CMP_TSK_QTY_RPR_QTY');
9026                     Fnd_Msg_Pub.ADD;
9027                     RAISE Fnd_Api.G_EXC_ERROR;
9028                   END IF;
9029 
9030                ELSIF(l_task_tbl(i).QUANTITY > l_instance_qty ) THEN
9031                  Fnd_Message.SET_NAME('AHL','AHL_INCORRECT_TSK_QTY');
9032                  Fnd_Msg_Pub.ADD;
9033                  RAISE Fnd_Api.G_EXC_ERROR;
9034                END IF;
9035                 */
9036                IF(l_task_tbl(i).QUANTITY > l_instance_qty ) THEN
9037                  Fnd_Message.SET_NAME('AHL','AHL_INCORRECT_TSK_QTY');
9038                  Fnd_Msg_Pub.ADD;
9039                  RAISE Fnd_Api.G_EXC_ERROR;
9040                END IF;
9041 
9042              END IF;
9043 
9044              -- Kasridha : Changes for Component Maintenance Planning Ends
9045 
9046              -- Call AHL_VWP_PLAN_TASKS_PVT
9047              IF (l_log_statement >= l_log_current_level) THEN
9048                  fnd_log.string(l_log_statement,
9049                                 L_DEBUG_KEY,
9050                                 'Before calling Create_Planned_Task, TASK TYPE = ' || l_task_tbl(i).task_type_code ||
9051                                 ', l_task_tbl(i).task_start_date = ' || l_task_tbl(i).task_start_date);
9052              END IF;
9053 
9054        -- SKPATHAK :: Bug 8343599 :: 14_APR-2009
9055        -- Check if the user entered task start date is between the visit start and end dates
9056        IF (l_task_tbl(i).task_start_date < c_visit_rec.START_DATE_TIME OR
9057            l_task_tbl(i).task_start_date > c_visit_rec.CLOSE_DATE_TIME) THEN
9058          FND_MESSAGE.SET_NAME ('AHL', 'AHL_VWP_TSK_START_DATE_INVLD');
9059          FND_MESSAGE.SET_TOKEN('DATE', l_task_tbl(i).task_start_date);
9060          FND_MSG_PUB.ADD;
9061          RAISE FND_API.G_EXC_ERROR;
9062        END IF;
9063 
9064              AHL_VWP_PLAN_TASKS_PVT.Create_Planned_Task (
9065                 p_api_version             => l_api_version,
9066                 p_init_msg_list           => p_init_msg_list,
9067                 p_commit                  => FND_API.G_FALSE,
9068                 p_validation_level        => p_validation_level,
9069                 p_module_type             => p_module_type,
9070                 p_x_task_rec              => l_task_tbl(i),
9071                 x_return_status           => l_return_status,
9072                 x_msg_count               => l_msg_count,
9073                 x_msg_data                => l_msg_data
9074              );
9075 
9076              IF (l_log_statement >= l_log_current_level) THEN
9077                  fnd_log.string(l_log_statement,
9078                                 L_DEBUG_KEY,
9079                                 'After calling Create_Planned_Task, Return Status = ' ||
9080                                 l_return_status);
9081              END IF;
9082              l_msg_count := Fnd_Msg_Pub.count_msg;
9083 
9084              IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
9085                 x_msg_count := l_msg_count;
9086                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
9087                 RAISE Fnd_Api.G_EXC_ERROR;
9088              END IF;
9089 
9090           ELSIF l_task_tbl(i).task_type_code = 'UNPLANNED' THEN
9091              -- Begin changes by rnahata for Issue 105
9092              OPEN c_get_instance_qty(l_task_tbl(i).instance_id);
9093              FETCH c_get_instance_qty INTO l_instance_qty;
9094              CLOSE c_get_instance_qty;
9095 
9096              IF (l_task_tbl(i).QUANTITY is null) THEN
9097                 Fnd_Message.SET_NAME('AHL','AHL_TASK_QTY_NULL');
9098                 Fnd_Msg_Pub.ADD;
9099                 RAISE Fnd_Api.G_EXC_ERROR;
9100              END IF;
9101 
9102              IF (l_task_tbl(i).QUANTITY <= 0 ) THEN
9103                 Fnd_Message.SET_NAME('AHL','AHL_POSITIVE_TSK_QTY');
9104                 Fnd_Msg_Pub.ADD;
9105                 RAISE Fnd_Api.G_EXC_ERROR;
9106              END IF;
9107              /*Kasridha : Changes for Component Maintenance Planning Begins
9108                Throw error only when the quantity is greater than
9109                repair quantity , for component visits */
9110              /* Kasridha:  commented this validation as per
9111              the new proposal, for unplanned MRs this validation should
9112              not be present
9113              IF(l_is_comp_visit = 'Y')
9114                 THEN
9115                   OPEN c_get_target_qty (l_task_tbl(i).instance_id, c_visit_rec.organization_id);
9116                     FETCH c_get_target_qty INTO l_target_qty;
9117                   CLOSE c_get_target_qty;
9118 
9119                   IF(l_task_tbl(i).QUANTITY > NVL(l_target_qty, 0)) THEN
9120                     Fnd_Message.SET_NAME('AHL','AHL_CMP_TSK_QTY_RPR_QTY');
9121                     Fnd_Msg_Pub.ADD;
9122                     RAISE Fnd_Api.G_EXC_ERROR;
9123                   END IF;
9124 
9125 
9126              ELSIF(l_task_tbl(i).QUANTITY > l_instance_qty ) THEN
9127                Fnd_Message.SET_NAME('AHL','AHL_INCORRECT_TSK_QTY');
9128                Fnd_Msg_Pub.ADD;
9129                RAISE Fnd_Api.G_EXC_ERROR;
9130              END IF;
9131              */
9132 
9133              IF(l_task_tbl(i).QUANTITY > l_instance_qty ) THEN
9134                Fnd_Message.SET_NAME('AHL','AHL_INCORRECT_TSK_QTY');
9135                Fnd_Msg_Pub.ADD;
9136                RAISE Fnd_Api.G_EXC_ERROR;
9137              END IF;
9138 
9139              -- Kasridha : Changes for Component Maintenance Planning Ends
9140 
9141              -- Call AHL_VWP_UNPLAN_TASKS_PVT
9142              IF (l_log_statement >= l_log_current_level) THEN
9143                  fnd_log.string(l_log_statement,
9144                                 L_DEBUG_KEY,
9145                                 'Before Calling Create_Unplanned_Task,  TASK TYPE = ' || l_task_tbl(i).task_type_code);
9146              END IF;
9147 
9148              AHL_VWP_UNPLAN_TASKS_PVT.Create_Unplanned_Task (
9149                 p_api_version             => l_api_version,
9150                 p_init_msg_list           => p_init_msg_list,
9151                 p_commit                  => FND_API.G_FALSE,
9152                 p_validation_level        => p_validation_level,
9153                 p_module_type             => p_module_type,
9154                 p_x_task_rec              => l_task_tbl(i),
9155                 x_return_status           => l_return_status,
9156                 x_msg_count               => l_msg_count,
9157                 x_msg_data                => l_msg_data
9158              );
9159 
9160              IF (l_log_statement >= l_log_current_level) THEN
9161                  fnd_log.string(l_log_statement,
9162                                 L_DEBUG_KEY,
9163                                 'After Calling Create_Unplanned_Task, Return Status = ' || l_return_status );
9164              END IF;
9165 
9166              l_msg_count := Fnd_Msg_Pub.count_msg;
9167 
9168              IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
9169                 x_msg_count := l_msg_count;
9170                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
9171                 RAISE Fnd_Api.G_EXC_ERROR;
9172              END IF;
9173           END IF;
9174       END LOOP;
9175    END IF;
9176    l_task_data := l_task_tbl;
9177    -- SKPATHAK :: Bug 8343599 :: 14_APR-2009 :: Begin
9178    -- Skip calling AHL_VWP_TIMES_PVT.Calculate_Task_Times if
9179    -- the user has entered task start date for Non Routine
9180    -- SKPATHAK :: ER: 9147951 :: 11-JAN-2010 :: Added one more condition (l_past_dates_flag = 'N')
9181    IF (p_module_type <> 'SR' OR l_task_tbl(1).task_start_date IS NULL) AND (l_past_dates_flag = 'N') THEN
9182     IF (l_log_statement >= l_log_current_level) THEN
9183        fnd_log.string(l_log_statement,
9184                       L_DEBUG_KEY,
9185                       'Before Calling AHL_VWP_TIMES_PVT.Calculate_Task_Times');
9186     END IF;
9187     AHL_VWP_TIMES_PVT.Calculate_Task_Times(p_api_version => 1.0,
9188                       p_init_msg_list => Fnd_Api.G_FALSE,
9189                       p_commit        => Fnd_Api.G_FALSE,
9190                       p_validation_level      => Fnd_Api.G_VALID_LEVEL_FULL,
9191                       x_return_status      => l_return_status,
9192                       x_msg_count          => l_msg_count,
9193                       x_msg_data           => l_msg_data,
9194                       p_visit_id            => c_visit_rec.VISIT_ID);
9195 
9196     IF (l_log_statement >= l_log_current_level) THEN
9197        fnd_log.string(l_log_statement,
9198                       L_DEBUG_KEY,
9199                       'After Calling AHL_VWP_TIMES_PVT.Calculate_Task_Times. Return Status = ' || l_return_status );
9200     END IF;
9201 
9202     IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
9203       x_msg_count := l_msg_count;
9204       x_return_status := Fnd_Api.G_RET_STS_ERROR;
9205       RAISE Fnd_Api.G_EXC_ERROR;
9206     END IF;
9207    END IF;
9208    -- SKPATHAK :: Bug 8343599 :: 14_APR-2009 :: End
9209 
9210    --VWPE :: tchimira :: 19-FEB -2011 :: start
9211    -- We are making this call after AHL_VWP_TIMES_PVT.Calculate_Task_Times, so that by this point of time, we can access all the already validated task rules and task related info from the DB.
9212    IF (l_log_statement >= l_log_current_level) THEN
9213        fnd_log.string(l_log_statement,
9214                       L_DEBUG_KEY,
9215                       'Before Calling AHL_VWP_RULES_PVT.Handle_Task_Dependency');
9216    END IF;
9217    AHL_VWP_RULES_PVT.Handle_Task_Dependency(p_api_version => 1.0,
9218                       p_init_msg_list     => Fnd_Api.G_FALSE,
9219                       p_commit            => Fnd_Api.G_FALSE,
9220                       p_validation_level  => Fnd_Api.G_VALID_LEVEL_FULL,
9221                       p_visit_id          => c_visit_rec.VISIT_ID,
9222                       p_task_tbl          => l_task_tbl,
9223                       x_return_status     => l_return_status,
9224                       x_msg_count         => l_msg_count,
9225                       x_msg_data          => l_msg_data);
9226 
9227    IF (l_log_statement >= l_log_current_level) THEN
9228        fnd_log.string(l_log_statement,
9229                       L_DEBUG_KEY,
9230                       'After Calling AHL_VWP_RULES_PVT.Handle_Task_Dependency. Return Status = ' || l_return_status );
9231    END IF;
9232    IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
9233      x_msg_count := l_msg_count;
9234      l_return_status := Fnd_Api.G_RET_STS_ERROR;
9235      x_return_status := l_return_status;
9236      IF l_return_status = Fnd_Api.g_ret_sts_error THEN
9237        RAISE Fnd_Api.g_exc_error;
9238      ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9239        RAISE Fnd_Api.g_exc_unexpected_error;
9240      END IF;
9241    END IF;
9242    --VWPE :: tchimira :: 19-FEB -2011 :: end
9243 
9244    IF c_visit_rec.STATUS_CODE = 'RELEASED' THEN
9245       UPDATE AHL_VISITS_B
9246       SET  STATUS_CODE = 'PARTIALLY RELEASED',
9247            OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER +1
9248       WHERE VISIT_ID =c_visit_rec.VISIT_ID ;
9249    END IF;
9250 
9251    IF (l_log_statement >= l_log_current_level) THEN
9252       fnd_log.string(l_log_statement,
9253                      L_DEBUG_KEY,
9254                      'Successful updation of the status');
9255    END IF;
9256     p_x_task_tbl:=l_task_tbl; --Added by rnahata for Bug 6939329
9257 
9258     /*
9259     -- Kasridha: Changes for component Maintenance Planning Begins
9260     -- Before creating workorders, check whether an RTS workorder already exist.
9261     IF l_is_comp_visit = 'Y' AND l_task_tbl IS NOT NULL AND l_task_tbl.count <> 0 THEN
9262 
9263         IF l_instance_id = 0 THEN
9264             FOR i IN l_task_data.FIRST .. l_task_data.LAST
9265             LOOP
9266                 OPEN c_task_dtls (l_task_data(i).visit_task_id);
9267                 FETCH c_task_dtls INTO l_task_type, l_summary_task_id, l_instance_id, l_task_status_code;
9268                 CLOSE c_task_dtls;
9269             END LOOP;
9270         END IF;
9271 
9272         OPEN c_get_rprbatch_task (l_instance_id, c_visit_rec.organization_id);
9273           FETCH c_get_rprbatch_task INTO l_rpr_batch_task_id;
9274         CLOSE c_get_rprbatch_task;
9275 
9276         OPEN c_get_rts_wo_id(l_rpr_batch_task_id, l_instance_id);
9277         FETCH c_get_rts_wo_id INTO l_rts_wip_id;
9278         CLOSE c_get_rts_wo_id;
9279 
9280         IF (l_log_statement >= l_log_current_level) THEN
9281             fnd_log.string(l_log_statement,
9282                      L_DEBUG_KEY,
9283                      'RTS Workorder existing in RB::' || l_rts_wip_id );
9284         END IF;
9285     END IF;
9286 
9287     -- Kasridha: Changes for component Maintenance Planning Ends
9288     */
9289 
9290     /* Kasridha : Changes for Component Maintenance Planning begins
9291     * Set the cost parent ID for the summary task
9292     * to the task ID of the repair batch.
9293     * This is used to maintain the hierarchy for
9294     * deriving the tasks in a repair batch
9295     */
9296     IF l_is_comp_visit = 'Y' AND l_task_tbl IS NOT NULL THEN
9297 
9298       IF (l_log_statement >= l_log_current_level) THEN
9299        fnd_log.string(l_log_statement,
9300                       L_DEBUG_KEY,
9301                       'Before setting the repair batch task id to cost_parent_id');
9302       END IF;
9303 
9304       l_is_cost_parent_setting_done := FALSE;
9305       FOR i IN l_task_tbl.first .. l_task_tbl.last
9306       LOOP
9307         IF (l_log_statement >= l_log_current_level) THEN
9308           fnd_log.string(l_log_statement,
9309                          L_DEBUG_KEY,
9310                          'l_task_tbl(i).TASK_TYPE_CODE' ||
9311                          l_task_tbl(i).TASK_TYPE_CODE ||
9312                          'l_task_tbl(i).COST_PARENT_ID :: ' ||
9313                          l_task_tbl(i).COST_PARENT_ID);
9314         END IF;
9315 
9316         IF (l_log_statement >= l_log_current_level) THEN
9317           fnd_log.string(l_log_statement,
9318                          L_DEBUG_KEY,
9319                          'l_task_tbl(i).instance_id' ||
9320                          l_task_tbl(i).instance_id ||
9321                          'l_task_tbl(i).visit_task_id :: ' ||
9322                          l_task_tbl(i).visit_task_id);
9323         END IF;
9324 
9325         OPEN c_task_dtls (l_task_tbl(i).visit_task_id);
9326           FETCH c_task_dtls INTO l_task_type, l_summary_task_id, l_instance_id, l_task_status_code;
9327         CLOSE c_task_dtls;
9328 
9329         IF(l_task_type = 'SUMMARY' AND l_summary_task_id IS NULL) THEN
9330           l_summary_task_id := l_task_tbl(i).visit_task_id;
9331         END IF;
9332 
9333         OPEN c_get_rprbatch_task (l_instance_id, c_visit_rec.organization_id);
9334           FETCH c_get_rprbatch_task INTO l_rpr_batch_task_id;
9335         CLOSE c_get_rprbatch_task;
9336         IF (l_log_statement >= l_log_current_level) THEN
9337           fnd_log.string(l_log_statement,
9338                          L_DEBUG_KEY,
9339                          'RepairBatch Task ID: ' || l_rpr_batch_task_id);
9340         END IF;
9341         IF( l_summary_task_id IS NOT NULL AND
9342             l_rpr_batch_task_id IS NOT NULL AND
9343             l_rpr_batch_task_id <> l_task_tbl(i).VISIT_TASK_ID) THEN
9344 
9345           UPDATE AHL_VISIT_TASKS_B SET cost_parent_id = l_rpr_batch_task_id
9346           WHERE visit_task_id = l_summary_task_id;
9347 
9348           l_is_cost_parent_setting_done := TRUE;
9349           l_repair_batch_task_id := l_rpr_batch_task_id;
9350 
9351           IF (l_log_statement >= l_log_current_level) THEN
9352             fnd_log.string(l_log_statement,
9353                            L_DEBUG_KEY,
9354                            'Cost_parent_id set to : '
9355                            || l_rpr_batch_task_id
9356                            || ' for : ' || l_summary_task_id);
9357           END IF;
9358 
9359         END IF;
9360 
9361       END LOOP;
9362 
9363       IF (l_log_statement >= l_log_current_level) THEN
9364       fnd_log.string(l_log_statement,
9365                       L_DEBUG_KEY,
9366                       'Cost parent changes ends' );
9367       END IF;
9368 
9369 
9370       /* MANESING::Bug 13713141, 16-Apr-2012, For Component Visits, Repair Batch status should also
9371        * change similar to the way Visit status changes as Repair Batches are like mini-visits.
9372        * So, if any new tasks are added to a Repair Batch which is in 'RELEASED' status, then its status
9373        * should be changed to 'PARTIALLY RELEASED'.
9374        */
9375       IF (l_is_cost_parent_setting_done) THEN
9376 
9377           -- check Repair Batch status
9378           OPEN c_task_dtls (l_repair_batch_task_id);
9379           FETCH c_task_dtls INTO l_task_type, l_summary_task_id, l_instance_id, l_task_status_code;
9380           CLOSE c_task_dtls;
9381 
9382           IF (l_task_status_code = 'RELEASED') THEN
9383 
9384               IF (l_log_statement >= l_log_current_level) THEN
9385                   FND_LOG.string(l_log_statement, l_debug_key, 'Changing Repair Batch ' || l_repair_batch_task_id || ' status to Partially Implemented.');
9386               END IF;
9387 
9388               UPDATE AHL_VISIT_TASKS_B
9389               SET    status_code           = 'PARTIALLY RELEASED',
9390                      object_version_number = object_version_number + 1,
9391                      last_update_date      = SYSDATE,
9392                      last_updated_by       = Fnd_Global.USER_ID,
9393                      last_update_login     = Fnd_Global.LOGIN_ID
9394               WHERE  visit_task_id = l_repair_batch_task_id;
9395           END IF;
9396 
9397       END IF;  -- IF l_is_cost_parent_setting_done
9398 
9399       --PRAKKUM :: 12/06/2012 :: Bug 14068468 :: Moved plan visit call to happen after cost parent is set
9400       -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: Automatically create draft WOs if tasks are added to a visit that is in any of the below three statuses
9401       IF ((c_visit_rec.status_code IN ('PLANNING', 'PARTIALLY RELEASED', 'RELEASED')) AND (p_module_type <> 'SR')) THEN
9402         AHL_VWP_PROJ_PROD_PVT.plan_visit(
9403           p_api_version           => l_api_version,
9404           p_init_msg_list         => Fnd_Api.G_FALSE,
9405           p_commit                => Fnd_Api.G_FALSE,
9406           p_validation_level      => p_validation_level,
9407           p_visit_id              => l_task_tbl(1).visit_id,
9408           x_return_status         => l_return_status,
9409           x_msg_count             => l_msg_count,
9410           x_msg_data              => l_msg_data);
9411 
9412         IF (l_log_statement >= l_log_current_level) THEN
9413            fnd_log.string(l_log_statement,
9414                           L_DEBUG_KEY,
9415                             'After Calling AHL_VWP_PROJ_PROD_PVT.plan_visit. Return Status = ' || l_return_status );
9416         END IF;
9417 
9418         IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
9419           x_msg_count := l_msg_count;
9420           x_return_status := l_return_status;
9421           IF l_return_status = Fnd_Api.g_ret_sts_error THEN
9422             RAISE Fnd_Api.g_exc_error;
9423           ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9424             RAISE Fnd_Api.g_exc_unexpected_error;
9425           END IF;
9426         END IF;
9427       END IF;
9428 
9429 
9430       FOR i IN l_task_tbl.first .. l_task_tbl.last
9431       LOOP
9432         /* Kasridha : Call API for moving materials from planning to in-repair locator
9433         *  when adding an MR to the repair batch.
9434         */
9435         IF c_visit_rec.status_code IN ('PLANNING', 'PARTIALLY RELEASED', 'RELEASED')
9436          THEN
9437 
9438           IF (l_log_statement >= l_log_current_level) THEN
9439             fnd_log.string(l_log_statement,
9440                               L_DEBUG_KEY,
9441                               'Before Calling AHL_VWP_PROJ_PROD_PVT.Move_To_InRepair_Locator.');
9442           END IF;
9443           -- Get the task Details
9444           OPEN c_task_dtls (l_task_tbl(i).visit_task_id);
9445           FETCH c_task_dtls INTO l_task_type, l_summary_task_id, l_instance_id, l_task_status_code;
9446           CLOSE c_task_dtls;
9447 
9448           -- Get the repair batch task Id
9449           OPEN c_get_rprbatch_task (l_instance_id, c_visit_rec.organization_id);
9450           FETCH c_get_rprbatch_task INTO l_rpr_batch_task_id;
9451           CLOSE c_get_rprbatch_task;
9452 
9453           IF (l_log_statement >= l_log_current_level) THEN
9454             fnd_log.string(l_log_statement,
9455                          L_DEBUG_KEY,
9456                          'RepairBatch Task ID: ' || l_rpr_batch_task_id);
9457           END IF;
9458 
9459           -- Get the RTS workorder ID
9460           OPEN c_get_rts_wo_id(l_rpr_batch_task_id, l_instance_id);
9461           FETCH c_get_rts_wo_id INTO l_rts_wip_id;
9462           CLOSE c_get_rts_wo_id;
9463 
9464           -- Get the repair batch name
9465           OPEN c_get_repair_batch_name(l_rpr_batch_task_id);
9466           FETCH c_get_repair_batch_name INTO l_repair_batch_name;
9467           CLOSE c_get_repair_batch_name;
9468 
9469 
9470           IF l_rts_wip_id IS NOT NULL
9471              AND l_repair_batch_name IS NOT NULL THEN
9472             IF (l_log_statement >= l_log_current_level) THEN
9473                   fnd_log.string(l_log_statement,
9474                           L_DEBUG_KEY,
9475                           'Calling AHL_CMP_PVT.Move_To_InRepair_Locator');
9476             END IF;
9477 
9478             AHL_CMP_PVT.Move_To_InRepair_Locator(
9479                 p_api_version           => l_api_version,
9480                 p_init_msg_list         => Fnd_Api.g_false,
9481                 p_commit                => Fnd_Api.g_false,
9482                 p_validation_level      => p_validation_level,
9483                 p_wip_entity_id         => l_rts_wip_id,
9484                 p_instance_id           => l_instance_id,
9485                 p_repair_batch_name     => l_repair_batch_name,
9486                 x_return_status         => l_return_status,
9487                 x_msg_count             => l_msg_count,
9488                 x_msg_data              => l_msg_data);
9489 
9490 
9491             IF (l_log_statement >= l_log_current_level) THEN
9492              fnd_log.string(l_log_statement,
9493                                 L_DEBUG_KEY,
9494                                 'After Calling AHL_VWP_PROJ_PROD_PVT.Move_To_InRepair_Locator.' ||
9495                                 'Return Status = ' || l_return_status );
9496             END IF;
9497             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9498               x_msg_count := l_msg_count;
9499               x_return_status := l_return_status;
9500               IF l_return_status = Fnd_Api.g_ret_sts_error THEN
9501                   RAISE Fnd_Api.g_exc_error;
9502               ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9503                   RAISE Fnd_Api.g_exc_unexpected_error;
9504               END IF;
9505             ELSE
9506                 FND_MSG_PUB.Initialize;
9507             END IF;
9508           END IF;
9509         END IF;
9510       END LOOP;
9511 
9512     ELSE -- IF not component visit :: PRAKKUM :: 03/07/2012 :: Bug Internal :: Fixed issue in creating workorders on normal visits
9513 
9514         IF (l_log_statement >= l_log_current_level) THEN
9515                 fnd_log.string(l_log_statement,
9516                       L_DEBUG_KEY,
9517                       'Not a component visit - so create draft work orders');
9518         END IF;
9519 
9520         -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: Automatically create draft WOs if tasks are added to a visit that is in any of the below three statuses
9521         IF ((c_visit_rec.status_code IN ('PLANNING', 'PARTIALLY RELEASED', 'RELEASED')) AND (p_module_type <> 'SR')) THEN
9522                 AHL_VWP_PROJ_PROD_PVT.plan_visit(
9523                 p_api_version           => l_api_version,
9524                 p_init_msg_list         => Fnd_Api.G_FALSE,
9525                 p_commit                => Fnd_Api.G_FALSE,
9526                 p_validation_level      => p_validation_level,
9527                 p_visit_id              => l_task_tbl(1).visit_id,
9528                 x_return_status         => l_return_status,
9529                 x_msg_count             => l_msg_count,
9530                 x_msg_data              => l_msg_data);
9531 
9532                 IF (l_log_statement >= l_log_current_level) THEN
9533                  fnd_log.string(l_log_statement,
9534                                 L_DEBUG_KEY,
9535                                 'After Calling AHL_VWP_PROJ_PROD_PVT.plan_visit. Return Status = ' || l_return_status );
9536                 END IF;
9537 
9538                 IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
9539                         x_msg_count := l_msg_count;
9540                         x_return_status := l_return_status;
9541                         IF l_return_status = Fnd_Api.g_ret_sts_error THEN
9542                           RAISE Fnd_Api.g_exc_error;
9543                         ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
9544                           RAISE Fnd_Api.g_exc_unexpected_error;
9545                         END IF;
9546                 END IF;
9547         END IF;
9548 
9549     END IF;
9550 
9551     IF (l_log_statement >= l_log_current_level) THEN
9552       fnd_log.string(l_log_statement,
9553                       L_DEBUG_KEY,
9554                       'Component Maintenance changes ends' );
9555     END IF;
9556     -- Kasridha : Changes for Component Maintenance Planning Ends
9557     --------------------End of API Body-------------------------------------
9558    --Standard check to count messages
9559    l_msg_count := Fnd_Msg_Pub.count_msg;
9560 
9561    IF l_msg_count > 0 THEN
9562       x_msg_count := l_msg_count;
9563       x_return_status := Fnd_Api.G_RET_STS_ERROR;
9564       RAISE Fnd_Api.G_EXC_ERROR;
9565    END IF;
9566 
9567    --Standard check for commit
9568    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
9569       COMMIT;
9570    END IF;
9571 
9572    IF (l_log_procedure >= l_log_current_level) THEN
9573       fnd_log.string(l_log_procedure,
9574                      L_DEBUG_KEY ||'.end',
9575                      'At the end of PL SQL procedure. Return Status = ' || x_return_status);
9576    END IF;
9577 EXCEPTION
9578    WHEN Fnd_Api.g_exc_error THEN
9579       ROLLBACK TO Create_PUP_Tasks;
9580       x_return_status := Fnd_Api.g_ret_sts_error;
9581       Fnd_Msg_Pub.count_and_get(
9582             p_encoded => Fnd_Api.g_false,
9583             p_count   => x_msg_count,
9584             p_data    => x_msg_data
9585       );
9586    WHEN Fnd_Api.g_exc_unexpected_error THEN
9587       ROLLBACK TO Create_PUP_Tasks;
9588       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
9589       Fnd_Msg_Pub.count_and_get (
9590             p_encoded => Fnd_Api.g_false,
9591             p_count   => x_msg_count,
9592             p_data    => x_msg_data
9593       );
9594    WHEN OTHERS THEN
9595       ROLLBACK TO Create_PUP_Tasks;
9596       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
9597       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
9598     THEN
9599          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
9600       END IF;
9601       Fnd_Msg_Pub.count_and_get (
9602             p_encoded => Fnd_Api.g_false,
9603             p_count   => x_msg_count,
9604             p_data    => x_msg_data
9605       );
9606 END Create_PUP_Tasks;
9607 
9608 -------------------------------------------------------------------
9609 --  Procedure name    : Associate_Default_MRs
9610 --  Type              : Private
9611 --  Function          : To create Unassociated/Summary/Non-Routine task for a visit
9612 --  Parameters  :
9613 --
9614 --  Standard IN  Parameters :
9615 --      p_api_version                   IN      NUMBER       Required
9616 --      p_init_msg_list                 IN      VARCHAR2     Default  FND_API.G_FALSE
9617 --      p_commit                        IN      VARCHAR2     Default  FND_API.G_FALSE
9618 --      p_validation_level              IN      NUMBER       Default  FND_API.G_VALID_LEVEL_FULL
9619 --      p_module_type                   IN      VARCHAR2     Default  NULL.
9620 --      p_visit_rec                     IN      AHL_VWP_VISITS_PVT.Visit_Rec_Type,
9621 --
9622 --  Standard OUT Parameters :
9623 --      x_return_status                 OUT     VARCHAR2     Required
9624 --      x_msg_count                     OUT     NUMBER       Required
9625 --      x_msg_data                      OUT     VARCHAR2     Required
9626 --
9627 --    Purpose:
9628 --         To associate default MR's during Transit Check Visit creation.
9629 --  Version :
9630 --      Initial Version   1.0
9631 -------------------------------------------------------------------
9632 PROCEDURE associate_default_mrs (
9633    p_api_version          IN  NUMBER,
9634    p_init_msg_list        IN  VARCHAR2  := Fnd_Api.g_false,
9635    p_commit               IN  VARCHAR2  := Fnd_Api.g_false,
9636    p_validation_level     IN  NUMBER    := Fnd_Api.g_valid_level_full,
9637    p_module_type          IN  VARCHAR2  := 'JSP',
9638    x_return_status        OUT NOCOPY VARCHAR2,
9639    x_msg_count            OUT NOCOPY NUMBER,
9640    x_msg_data             OUT NOCOPY VARCHAR2,
9641    p_visit_rec            IN  AHL_VWP_VISITS_PVT.Visit_Rec_Type
9642 ) AS
9643 
9644   -- Define local variables
9645    L_API_VERSION          CONSTANT NUMBER := 1.0;
9646    L_API_NAME             CONSTANT VARCHAR2(30) := 'ASSOCIATE_DEFAULT_MRS';
9647    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
9648 
9649   l_msg_count             NUMBER;
9650   l_msg_data              VARCHAR2(2000);
9651   l_return_status         VARCHAR2(1);
9652   l_instance_id           NUMBER;
9653 
9654   J NUMBER;
9655 
9656   CURSOR c_get_Item_Instance(p_visit_id NUMBER) IS
9657   SELECT ITEM_INSTANCE_ID
9658    FROM  ahl_visits_b
9659   WHERE  visit_id = p_visit_id;
9660 
9661   -- SKPATHAK :: AVF ER: 13416865 :: 25-NOV-2011
9662   -- Do not fetch the planned MRs for automatic addition to visits
9663   CURSOR c_get_visit_applicable_mrs IS
9664   SELECT distinct appl_mr.mr_header_id
9665    FROM  ahl_applicable_mrs appl_mr, ahl_mr_headers_b mr
9666    WHERE appl_mr.mr_header_id = mr.mr_header_id
9667    AND mr.implement_status_code NOT IN ('MANDATORY', 'OPTIONAL_IMPLEMENT');
9668 
9669   -- Begin changes by rnahata for Issue 105
9670   --Cursor to fetch instance quantity
9671   CURSOR c_get_instance_qty(p_instance_id IN NUMBER) IS
9672   SELECT quantity FROM csi_item_instances csii
9673    WHERE instance_id = p_instance_id;
9674 
9675   l_instance_qty   NUMBER := 0;
9676   -- End changes by rnahata for Issue 105
9677 
9678   l_Task_tbl       AHL_VWP_RULES_PVT.Task_Tbl_Type;
9679 
9680 BEGIN
9681    --------------------- initialize -----------------------
9682    SAVEPOINT associate_default_mrs;
9683 
9684     -- Check if API is called in debug mode. If yes, enable debug.
9685    IF (l_log_procedure >= l_log_current_level) THEN
9686        fnd_log.string(l_log_procedure,
9687                       L_DEBUG_KEY ||'.begin',
9688                       'At the start of PL SQL procedure.');
9689    END IF;
9690 
9691    -- Initialize message list if p_init_msg_list is set to TRUE.
9692    IF Fnd_Api.to_boolean(p_init_msg_list)
9693    THEN
9694      Fnd_Msg_Pub.initialize;
9695    END IF;
9696 
9697    --  Initialize API return status to success
9698     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
9699 
9700    -- Standard call to check for call compatibility.
9701    IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
9702                                       p_api_version,
9703                                       l_api_name,G_PKG_NAME)
9704    THEN
9705        RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
9706    END IF;
9707 
9708   --------------------Start of API Body-----------------------------------
9709 
9710   IF p_visit_rec.visit_type_code IS NOT NULL
9711      AND p_visit_rec.visit_id IS NOT NULL THEN
9712   OPEN   c_get_Item_Instance(p_visit_rec.visit_id);
9713   FETCH c_get_Item_Instance INTO l_instance_id;
9714   CLOSE c_get_Item_Instance;
9715 
9716   IF l_instance_id IS NOT NULL THEN
9717 
9718     IF (l_log_statement >= l_log_current_level) THEN
9719         fnd_log.string(l_log_statement,
9720                        L_DEBUG_KEY,
9721                        ' Before calling AHL_FMP_PVT.GET_VISIT_APPLICABLE_MRS, l_instance_id = ' || l_instance_id);
9722     END IF;
9723     AHL_FMP_PVT.GET_VISIT_APPLICABLE_MRS(
9724       P_API_VERSION             => 1.0,
9725       X_RETURN_STATUS        => L_RETURN_STATUS,
9726       X_MSG_COUNT            => L_MSG_COUNT,
9727       X_MSG_DATA             => L_MSG_DATA,
9728       P_ITEM_INSTANCE_ID     => l_instance_id,
9729       P_VISIT_TYPE_CODE      => p_visit_rec.visit_type_code);
9730       --X_APPLICABLE_MR_TBL    => l_mr_item_instance_tbl);
9731 
9732     IF (l_log_statement >= l_log_current_level) THEN
9733         fnd_log.string(l_log_statement,
9734                        L_DEBUG_KEY,
9735                        'After calling AHL_FMP_PVT.GET_VISIT_APPLICABLE_MRS. Return status =  ' || L_RETURN_STATUS || ', l_instance_id = ' || l_instance_id);
9736     END IF;
9737 
9738     l_msg_count := Fnd_Msg_Pub.count_msg;
9739 
9740     IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
9741        x_msg_count := l_msg_count;
9742        x_return_status := Fnd_Api.G_RET_STS_ERROR;
9743        RAISE Fnd_Api.G_EXC_ERROR;
9744     END IF;
9745 
9746     -- Begin changes by rnahata for Issue 105
9747     OPEN c_get_instance_qty(l_instance_id);
9748     FETCH c_get_instance_qty INTO l_instance_qty;
9749     CLOSE c_get_instance_qty;
9750     IF (l_log_statement >= l_log_current_level) THEN
9751         fnd_log.string(l_log_statement,
9752                        L_DEBUG_KEY,
9753                        'Richa -- l_instance_id = ' || l_instance_id || ', l_instance_qty = ' || l_instance_qty);
9754     END IF;
9755     -- End changes by rnahata for Issue 105
9756 
9757     J := 0;
9758     FOR I in c_get_visit_applicable_mrs
9759     LOOP
9760          J := J+1;
9761          l_task_tbl(J).mr_id := I.mr_header_id;
9762          -- Begin changes by rnahata for Issue 105
9763          l_task_tbl(J).instance_id := l_instance_id;
9764          l_task_tbl(J).quantity := l_instance_qty;
9765          -- End changes by rnahata for Issue 105
9766          l_task_tbl(J).visit_id := p_visit_rec.visit_id;
9767          l_task_tbl(J).task_type_code := 'UNPLANNED';
9768          l_task_tbl(J).dept_name := p_visit_rec.dept_name;
9769          l_task_tbl(J).department_id := p_visit_rec.department_id;
9770          l_task_tbl(J).inventory_item_id := p_visit_rec.inventory_item_id;
9771          l_task_tbl(J).item_organization_id := p_visit_rec.item_organization_id;
9772          l_task_tbl(J).item_name      := p_visit_rec.item_name;
9773          l_task_tbl(J).serial_number  := p_visit_rec.serial_number;
9774          END LOOP;
9775 
9776          IF (l_log_statement >= l_log_current_level) THEN
9777              fnd_log.string(l_log_statement,
9778                             L_DEBUG_KEY,
9779                             ' Calling AHL_VWP_TASKS_PVT.CREATE_PUP_TASKS ');
9780          END IF;
9781          AHL_VWP_TASKS_PVT.CREATE_PUP_TASKS(
9782             p_api_version   => 1.0,
9783             p_module_type   => p_module_type,
9784             p_x_task_tbl    => l_task_tbl,
9785             x_return_status => l_return_status,
9786             x_msg_count     => l_msg_count,
9787             x_msg_data      => l_msg_data);
9788 
9789      l_msg_count := Fnd_Msg_Pub.count_msg;
9790 
9791      IF l_msg_count > 0 OR NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
9792         x_msg_count := l_msg_count;
9793         x_return_status := Fnd_Api.G_RET_STS_ERROR;
9794         RAISE Fnd_Api.G_EXC_ERROR;
9795      END IF;
9796 
9797         END IF;  -- Instance ID is not null.
9798 
9799       END IF;  -- Visit id and Visit type is not null.
9800   --------------------End of API Body-------------------------------------
9801    --Standard check to count messages
9802    l_msg_count := Fnd_Msg_Pub.count_msg;
9803 
9804    IF l_msg_count > 0 THEN
9805       x_msg_count := l_msg_count;
9806       x_return_status := Fnd_Api.G_RET_STS_ERROR;
9807       RAISE Fnd_Api.G_EXC_ERROR;
9808    END IF;
9809 
9810    IF (l_log_procedure >= l_log_current_level) THEN
9811          fnd_log.string(l_log_procedure,
9812                         L_DEBUG_KEY ||'.end',
9813                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
9814    END IF;
9815 EXCEPTION
9816    WHEN Fnd_Api.g_exc_error THEN
9817       ROLLBACK TO associate_default_mrs;
9818       x_return_status := Fnd_Api.g_ret_sts_error;
9819       Fnd_Msg_Pub.count_and_get(
9820             p_encoded => Fnd_Api.g_false,
9821             p_count   => x_msg_count,
9822             p_data    => x_msg_data
9823       );
9824    WHEN Fnd_Api.g_exc_unexpected_error THEN
9825       ROLLBACK TO associate_default_mrs;
9826       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
9827       Fnd_Msg_Pub.count_and_get (
9828             p_encoded => Fnd_Api.g_false,
9829             p_count   => x_msg_count,
9830             p_data    => x_msg_data
9831       );
9832    WHEN OTHERS THEN
9833       ROLLBACK TO associate_default_mrs;
9834       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
9835       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
9836     THEN
9837          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
9838       END IF;
9839       Fnd_Msg_Pub.count_and_get (
9840             p_encoded => Fnd_Api.g_false,
9841             p_count   => x_msg_count,
9842             p_data    => x_msg_data
9843       );
9844 END associate_default_mrs;
9845 
9846 -- salogan added for supplier warranty starts
9847 ------------------------------------------------------------------------------------
9848 -- Start of Comments
9849 --  Procedure name    : Get_Entl_rec_for_Delete
9850 --  Type              : Private
9851 --  Function          : To delete the corresponding entitlement record from the Visit Task.
9852 --  Pre-reqs          :
9853 --  Parameters        : p_task_id      IN  NUMBER
9854 --                    : x_warranty_entl_tbl OUT AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type
9855 --
9856 --  End of Comments
9857 
9858 PROCEDURE Get_Entl_rec_for_Delete(
9859         p_task_id           IN         NUMBER,
9860         x_warranty_entl_tbl OUT NOCOPY AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type
9861 ) IS
9862    -- Standard variables
9863    L_API_NAME  CONSTANT VARCHAR2(30)  := 'Get_Entl_rec_for_Delete';
9864    L_DEBUG_KEY CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
9865    -- Local variables defined for the procedure
9866    l_warranty_entl_id     NUMBER      := null;
9867    l_sr_incident_id       NUMBER      := null;
9868    l_ovn                  NUMBER;
9869    l_entitlement_rec      AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Rec_Type;
9870 
9871    -- Cursors defined for the procedure
9872    -- Cursor to fetch entitlemet details
9873    CURSOR c_get_warranty_entl_id (c_task_id IN NUMBER) IS
9874    SELECT AWSE.WARRANTY_ENTITLEMENT_ID, AWSE.SR_INCIDENT_ID, AWSE.OBJECT_VERSION_NUMBER
9875    FROM   AHL_WARRANTY_ENTITLEMENTS AWSE
9876    WHERE  AWSE.VISIT_TASK_ID = c_task_id;
9877 
9878 BEGIN
9879    --------------------Start of API Body-----------------------------------
9880    IF(l_log_procedure >= l_log_current_level) THEN
9881       fnd_log.string(l_log_procedure,
9882                       L_DEBUG_KEY ||'.begin',
9883                       'At the start of PL SQL procedure.');
9884    END IF;
9885 
9886    --------------------Get Entitlements Record For Update-------------------
9887    IF(p_task_id is null) THEN
9888     IF(l_log_statement >= l_log_current_level) THEN
9889        fnd_log.string(l_log_statement,
9890                        L_DEBUG_KEY,
9891                        'Passed task id is null');
9892     END IF;
9893     FND_MSG_PUB.add;
9894    END IF;
9895 
9896    OPEN c_get_warranty_entl_id(p_task_id);
9897    FETCH c_get_warranty_entl_id into l_warranty_entl_id, l_sr_incident_id, l_ovn;
9898    CLOSE c_get_warranty_entl_id;
9899 
9900    IF(l_warranty_entl_id IS NOT NULL) THEN --warranty entitlement exists
9901     IF(l_sr_incident_id IS NULL) THEN
9902         l_entitlement_rec.warranty_entitlement_id := l_warranty_entl_id;
9903         l_entitlement_rec.operation_flag          := AHL_WARRANTY_ENTL_PVT.G_OP_DELETE;
9904     ELSE
9905         l_entitlement_rec.warranty_entitlement_id := l_warranty_entl_id;
9906         l_entitlement_rec.visit_task_id           := FND_API.G_MISS_NUM;
9907         l_entitlement_rec.object_version_number   := l_ovn;
9908         l_entitlement_rec.operation_flag          := AHL_WARRANTY_ENTL_PVT.G_OP_UPDATE;
9909     END IF;
9910     x_warranty_entl_tbl(0) := l_entitlement_rec;
9911    END IF;
9912 
9913    IF(l_log_procedure >= l_log_current_level) THEN
9914       fnd_log.string(l_log_procedure,
9915                      L_DEBUG_KEY ||'.begin',
9916                      ' Task Id : '|| l_entitlement_rec.visit_task_id ||
9917                      ' Entitlement Id : '|| l_warranty_entl_id ||
9918                      ' SR Incident Id : '|| l_sr_incident_id ||
9919                      ' Operation Flag : '|| l_entitlement_rec.operation_flag ||
9920                      ' End of API.');
9921    END IF;
9922 
9923 END Get_Entl_rec_for_Delete;
9924 -- salogan added for supplier warranty ends
9925 
9926 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: STARTS
9927 --------------------------------------------------------------------
9928 -- PROCEDURE
9929 --    Create_Stage_Tasks
9930 -- PURPOSE
9931 --    To create visit tasks for visit stages
9932 --------------------------------------------------------------------
9933 PROCEDURE Create_Stage_Tasks (
9934    p_api_version      IN            NUMBER,
9935    p_init_msg_list    IN            VARCHAR2  := Fnd_Api.g_false,
9936    p_commit           IN            VARCHAR2  := Fnd_Api.g_false,
9937    p_validation_level IN            NUMBER    := Fnd_Api.g_valid_level_full,
9938    p_module_type      IN            VARCHAR2  := null,
9939    p_stage_id         IN NUMBER,
9940    p_visit_id         IN NUMBER,
9941    x_return_status       OUT NOCOPY VARCHAR2,
9942    x_msg_count           OUT NOCOPY NUMBER,
9943    x_msg_data            OUT NOCOPY VARCHAR2
9944 )
9945 IS
9946    -- Define local variables
9947    L_API_VERSION   CONSTANT NUMBER := 1.0;
9948    L_API_NAME      CONSTANT VARCHAR2(30) := 'Create_Stage_Tasks';
9949    L_DEBUG_KEY     CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
9950    l_msg_count              NUMBER;
9951    l_msg_data               VARCHAR2(2000);
9952    l_return_status          VARCHAR2(1);
9953    l_visit_task_id          NUMBER;
9954    l_visit_task_number      NUMBER;
9955    l_dummy                  VARCHAR2(1);
9956    l_rowid                  ROWID;
9957 
9958 
9959    -- To validate the passed stage id
9960    Cursor val_visit_stage (x_visit_id IN NUMBER, x_stage_id IN NUMBER)
9961    IS
9962    SELECT 'X'
9963    FROM ahl_vwp_stages_b
9964    WHERE visit_id = x_visit_id
9965    AND stage_id = x_stage_id;
9966 
9967    -- To validate the passed visit id
9968    Cursor val_visit (x_visit_id IN NUMBER)
9969    IS
9970    SELECT 'X'
9971    FROM ahl_visits_b
9972    WHERE visit_id = x_visit_id;
9973 
9974    -- To fetch visit details
9975    CURSOR Get_Visit_Details (x_visit_id IN NUMBER) IS
9976    SELECT item_organization_id item_org_id, inventory_item_id item_id, item_instance_id instance_id, status_code
9977    FROM ahl_visits_b
9978    WHERE visit_id = x_visit_id;
9979 
9980    -- TCHIMIRA :: 04-May-2012 :: Bug 14009280 :: START
9981    Cursor get_stage_dates (c_stage_id IN NUMBER) IS
9982     SELECT planned_start_date, planned_end_date
9983     FROM ahl_vwp_stages_b
9984     WHERE stage_id = c_stage_id;
9985 
9986    Cursor get_visit_dates (c_visit_id IN NUMBER) IS
9987    SELECT start_date_time, close_date_time
9988    FROM ahl_visits_b
9989    WHERE visit_id = c_visit_id;
9990 
9991    l_task_start_date DATE;
9992    l_task_end_date DATE;
9993    -- TCHIMIRA :: 04-May-2012 :: Bug 14009280 :: END
9994 
9995 
9996    visit_details_rec Get_Visit_Details%ROWTYPE;
9997 
9998 
9999 BEGIN
10000    --------------------- initialize -----------------------
10001    SAVEPOINT Create_Stage_Tasks;
10002 
10003    IF (l_log_procedure >= l_log_current_level) THEN
10004       fnd_log.string(l_log_procedure,
10005                      L_DEBUG_KEY ||'.begin',
10006                      'At the start of PL SQL procedure. p_stage_id= '||p_stage_id||' and p_visit_id= '||p_visit_id);
10007    END IF;
10008 
10009    -- Initialize message list if p_init_msg_list is set to TRUE.
10010    IF Fnd_Api.to_boolean(p_init_msg_list)
10011    THEN
10012       Fnd_Msg_Pub.initialize;
10013    END IF;
10014 
10015    --  Initialize API return status to success
10016     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
10017 
10018    -- Standard call to check for call compatibility.
10019    IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
10020                                       p_api_version,
10021                                       l_api_name,G_PKG_NAME)
10022    THEN
10023        RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
10024    END IF;
10025 
10026   --------------------Start of API Body-----------------------------------
10027 
10028    IF(p_visit_id IS NULL OR p_visit_id = FND_API.G_MISS_NUM) THEN
10029       FND_MESSAGE.Set_Name('AHL','AHL_VWP_CST_INPUT_MISS');
10030       FND_MSG_PUB.ADD;
10031       IF (l_log_statement >= l_log_current_level) THEN
10032           fnd_log.string(l_log_statement,
10033                          L_DEBUG_KEY,
10034                          'Visit id is mandatory but found null in input  ');
10035       END IF;
10036       RAISE FND_API.G_EXC_ERROR;
10037    END IF;
10038 
10039     -- Validate the visit id
10040    OPEN val_visit(p_visit_id);
10041    FETCH val_visit INTO l_dummy;
10042    IF (val_visit%NOTFOUND) THEN
10043       FND_MESSAGE.Set_Name('AHL','AHL_STAGE_ID_INVALID');
10044       FND_MSG_PUB.ADD;
10045 
10046       IF (l_log_statement >= l_log_current_level) THEN
10047           fnd_log.string(l_log_statement,
10048                          L_DEBUG_KEY,
10049                          'Input visit id is INVALID ');
10050       END IF;
10051       CLOSE val_visit;
10052       RAISE FND_API.G_EXC_ERROR;
10053    END IF;
10054    CLOSE val_visit;
10055 
10056    -- Validate the visit id + stage id combination
10057    -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125
10058    -- Validate stage id only if stage id is not null
10059    IF p_stage_id IS NOT NULL THEN
10060      OPEN val_visit_stage(p_visit_id, p_stage_id);
10061      FETCH val_visit_stage INTO l_dummy;
10062      IF (val_visit_stage%NOTFOUND) THEN
10063        FND_MESSAGE.Set_Name('AHL','AHL_STAGE_ID_INVALID');
10064        FND_MSG_PUB.ADD;
10065 
10066        IF (l_log_statement >= l_log_current_level) THEN
10067           fnd_log.string(l_log_statement,
10068                          L_DEBUG_KEY,
10069                          'Input stage id is INVALID ');
10070        END IF;
10071        CLOSE val_visit_stage;
10072        RAISE FND_API.G_EXC_ERROR;
10073      END IF;
10074      CLOSE val_visit_stage;
10075    END IF;
10076 
10077    OPEN Get_Visit_Details (P_VISIT_ID);
10078    FETCH Get_Visit_Details INTO visit_details_rec;
10079    IF (Get_Visit_Details%NOTFOUND) THEN
10080       FND_MESSAGE.Set_Name('AHL','AHL_VISIT_ID_INVALID');
10081       FND_MSG_PUB.ADD;
10082 
10083       IF (l_log_statement >= l_log_current_level) THEN
10084           fnd_log.string(l_log_statement,
10085                          L_DEBUG_KEY,
10086                          'Input visit id is INVALID ');
10087       END IF;
10088       CLOSE Get_Visit_Details;
10089       RAISE FND_API.G_EXC_ERROR;
10090    END IF;
10091    CLOSE Get_Visit_Details;
10092 
10093    l_visit_task_id := AHL_VWP_RULES_PVT.Get_Visit_Task_Id();
10094    l_visit_task_number  := AHL_VWP_RULES_PVT.Get_Visit_Task_Number(P_VISIT_ID);
10095 
10096    -- TCHIMIRA :: 04-May-2012 :: Bug 14009280 :: START
10097    IF p_stage_id IS NOT NULL THEN
10098      OPEN get_stage_dates (p_stage_id);
10099      FETCH get_stage_dates INTO l_task_start_date, l_task_end_date;
10100      CLOSE get_stage_dates;
10101    ELSE
10102      OPEN get_visit_dates (p_visit_id);
10103      FETCH get_visit_dates INTO l_task_start_date, l_task_end_date;
10104      CLOSE get_visit_dates;
10105    END IF;
10106    -- TCHIMIRA :: 04-May-2012 :: Bug 14009280 :: END
10107 
10108    -- Invoke the table handler to create a record of visit task for the above stage
10109    Ahl_Visit_Tasks_Pkg.Insert_Row (
10110       X_ROWID                 => l_rowid,
10111       X_VISIT_TASK_ID         => l_visit_task_id,
10112       X_VISIT_TASK_NUMBER     => l_visit_task_number,
10113       X_OBJECT_VERSION_NUMBER => 1,
10114       X_VISIT_ID              => P_VISIT_ID,
10115       X_PROJECT_TASK_ID       => NULL,
10116       X_COST_PARENT_ID        => NULL,
10117       X_MR_ROUTE_ID           => NULL,
10118       X_MR_ID                 => NULL,
10119       X_DURATION              => NULL,
10120       X_UNIT_EFFECTIVITY_ID   => NULL,
10121       X_START_FROM_HOUR       => NULL,
10122       X_INVENTORY_ITEM_ID     => visit_details_rec.item_id,
10123       X_ITEM_ORGANIZATION_ID  => visit_details_rec.item_org_id,
10124       X_INSTANCE_ID           => visit_details_rec.instance_id,
10125       X_PRIMARY_VISIT_TASK_ID => NULL,
10126       X_ORIGINATING_TASK_ID   => NULL,
10127       X_SERVICE_REQUEST_ID    => NULL,
10128       X_TASK_TYPE_CODE        => 'STAGE',
10129       X_SERVICE_TYPE_CODE     => NULL,
10130       X_DEPARTMENT_ID         => NULL,
10131       X_SUMMARY_TASK_FLAG     => 'N',
10132       X_PRICE_LIST_ID         => NULL,
10133       X_STATUS_CODE           => 'PLANNING',
10134       X_ESTIMATED_PRICE       => NULL,
10135       X_ACTUAL_PRICE          => NULL,
10136       X_ACTUAL_COST           => NULL,
10137       -- If the task type is stage, then the stage_id corresponds to the stage for which task is created
10138       X_STAGE_ID              => p_stage_id,
10139       -- TCHIMIRA :: 04-May-2012 :: Bug 14009280 :: populate the task dates
10140       X_START_DATE_TIME       => l_task_start_date,
10141       X_END_DATE_TIME         => l_task_end_date,
10142       X_PAST_TASK_START_DATE  => NULL,
10143       X_PAST_TASK_END_DATE    => NULL,
10144       X_ATTRIBUTE_CATEGORY    => NULL,
10145       X_ATTRIBUTE1            => NULL,
10146       X_ATTRIBUTE2            => NULL,
10147       X_ATTRIBUTE3            => NULL,
10148       X_ATTRIBUTE4            => NULL,
10149       X_ATTRIBUTE5            => NULL,
10150       X_ATTRIBUTE6            => NULL,
10151       X_ATTRIBUTE7            => NULL,
10152       X_ATTRIBUTE8            => NULL,
10153       X_ATTRIBUTE9            => NULL,
10154       X_ATTRIBUTE10           => NULL,
10155       X_ATTRIBUTE11           => NULL,
10156       X_ATTRIBUTE12           => NULL,
10157       X_ATTRIBUTE13           => NULL,
10158       X_ATTRIBUTE14           => NULL,
10159       X_ATTRIBUTE15           => NULL,
10160       X_VISIT_TASK_NAME       => 'Stage Task',
10161       X_DESCRIPTION           => NULL,
10162       X_QUANTITY              => 1,
10163       X_CREATION_DATE         => SYSDATE,
10164       X_CREATED_BY            => Fnd_Global.USER_ID,
10165       X_LAST_UPDATE_DATE      => SYSDATE,
10166       X_LAST_UPDATED_BY       => Fnd_Global.USER_ID,
10167       X_LAST_UPDATE_LOGIN     => Fnd_Global.LOGIN_ID );
10168 
10169 
10170 
10171     --------------------End of API Body-------------------------------------
10172    --Standard check to count messages
10173    l_msg_count := Fnd_Msg_Pub.count_msg;
10174 
10175    -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: Automatically create draft WOs if tasks are added to a visit that is in any of the below three statuses
10176    IF visit_details_rec.status_code IN ('PLANNING', 'PARTIALLY RELEASED', 'RELEASED') THEN
10177      -- If the visit status is released, then change the status to partially released due to the addition of stage task to the visit
10178      UPDATE AHL_VISITS_B
10179      SET    STATUS_CODE = 'PARTIALLY RELEASED',
10180             OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1,
10181            LAST_UPDATE_DATE      = SYSDATE,
10182            LAST_UPDATED_BY       = Fnd_Global.USER_ID,
10183            LAST_UPDATE_LOGIN     = Fnd_Global.LOGIN_ID
10184      WHERE  VISIT_ID = p_visit_id
10185      AND STATUS_CODE = 'RELEASED';
10186 
10187      AHL_VWP_PROJ_PROD_PVT.plan_visit(
10188        p_api_version           => l_api_version,
10189        p_init_msg_list         => p_init_msg_list,
10190        p_commit                => Fnd_Api.g_false,
10191        p_validation_level      => p_validation_level,
10192        -- SKPATHAK :: 20-JUN-2011 :: VWPE: ER:12673125
10193        -- If caller is create stage task API, then necessarily call RELEASE_VISIT
10194        p_caller                => 'STG',
10195        p_visit_id              => p_visit_id,
10196        x_return_status         => l_return_status,
10197        x_msg_count             => l_msg_count,
10198        x_msg_data              => l_msg_data);
10199 
10200      IF (l_log_statement >= l_log_current_level) THEN
10201         fnd_log.string(l_log_statement,
10202                        L_DEBUG_KEY,
10203                        'After Calling AHL_VWP_PROJ_PROD_PVT.plan_visit. Return Status = ' || l_return_status );
10204      END IF;
10205 
10206      IF NVL(l_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
10207        x_msg_count := l_msg_count;
10208        x_return_status := l_return_status;
10209        IF l_return_status = Fnd_Api.g_ret_sts_error THEN
10210          RAISE Fnd_Api.g_exc_error;
10211        ELSIF l_return_status = Fnd_Api.g_ret_sts_unexp_error THEN
10212          RAISE Fnd_Api.g_exc_unexpected_error;
10213        END IF;
10214      END IF;
10215    END IF;
10216 
10217    IF l_msg_count > 0 THEN
10218       x_msg_count := l_msg_count;
10219       RAISE Fnd_Api.G_EXC_ERROR;
10220    END IF;
10221 
10222    --Standard check for commit
10223    IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
10224       COMMIT;
10225    END IF;
10226 
10227    IF (l_log_procedure >= l_log_current_level) THEN
10228       fnd_log.string(l_log_procedure,
10229                      L_DEBUG_KEY ||'.end',
10230                      'At the end of PL SQL procedure. Return Status = ' || x_return_status);
10231    END IF;
10232 EXCEPTION
10233    WHEN Fnd_Api.g_exc_error THEN
10234       ROLLBACK TO Create_Stage_Tasks;
10235       x_return_status := Fnd_Api.g_ret_sts_error;
10236       Fnd_Msg_Pub.count_and_get(
10237             p_encoded => Fnd_Api.g_false,
10238             p_count   => x_msg_count,
10239             p_data    => x_msg_data
10240       );
10241    WHEN Fnd_Api.g_exc_unexpected_error THEN
10242       ROLLBACK TO Create_Stage_Tasks;
10243       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
10244       Fnd_Msg_Pub.count_and_get (
10245             p_encoded => Fnd_Api.g_false,
10246             p_count   => x_msg_count,
10247             p_data    => x_msg_data
10248       );
10249    WHEN OTHERS THEN
10250       ROLLBACK TO Create_Stage_Tasks;
10251       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
10252       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
10253     THEN
10254          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
10255       END IF;
10256       Fnd_Msg_Pub.count_and_get (
10257             p_encoded => Fnd_Api.g_false,
10258             p_count   => x_msg_count,
10259             p_data    => x_msg_data
10260       );
10261 END Create_Stage_Tasks;
10262 -- SKPATHAK :: 02-MAY-2011 :: VWPE: ER:12424063  :: ENDS
10263 
10264 -- VWPE 12730539:: PRAKKUM :: 26-JUL-2011 :: start
10265 --------------------------------------------------------------------
10266 -- PROCEDURE
10267 --    Delete_Stage_Task
10268 --
10269 -- PURPOSE
10270 --    To delete stage task
10271 --------------------------------------------------------------------
10272 
10273 PROCEDURE Delete_Stage_Task (
10274    p_api_version      IN         NUMBER,
10275    p_init_msg_list    IN         VARCHAR2  := Fnd_Api.g_false,
10276    p_commit           IN         VARCHAR2  := Fnd_Api.g_false,
10277    p_validation_level IN         NUMBER    := Fnd_Api.g_valid_level_full,
10278    p_module_type      IN         VARCHAR2  := 'JSP',
10279    p_visit_task_ID    IN         NUMBER,
10280    x_return_status    OUT NOCOPY VARCHAR2,
10281    x_msg_count        OUT NOCOPY NUMBER,
10282    x_msg_data         OUT NOCOPY VARCHAR2
10283 )
10284 
10285 IS
10286    l_api_version CONSTANT NUMBER       := 1.0;
10287    l_api_name    CONSTANT VARCHAR2(30) := 'Delete_Stage_Task';
10288    L_DEBUG_KEY   CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || L_API_NAME;
10289    -- local variables defined for the procedure
10290    l_visit_id             NUMBER;
10291    l_task_id              NUMBER;
10292    l_count                NUMBER;
10293    l_msg_count            NUMBER;
10294    l_msg_data             VARCHAR2(2000);
10295    l_return_status        VARCHAR2(1);
10296 
10297   -- To find all tasks related information
10298    CURSOR c_Task (x_id IN NUMBER) IS
10299       SELECT * FROM Ahl_Visit_Tasks_VL
10300       WHERE Visit_Task_ID = x_id;
10301       c_task_rec    c_Task%ROWTYPE;
10302 
10303   -- To find visit related information
10304    CURSOR c_Visit (x_id IN NUMBER) IS
10305       SELECT *
10306       FROM  Ahl_Visits_VL
10307       WHERE VISIT_ID = x_id;
10308       c_visit_rec      c_Visit%ROWTYPE;
10309 
10310   -- To find any task which have primary visit task id as deleted task id
10311     --CURSOR c_primary (x_visit_id IN NUMBER, x_task_id IN NUMBER) IS
10312   CURSOR c_primary (x_task_id IN NUMBER) IS
10313       SELECT Visit_Task_Id, Object_Version_Number,visit_id
10314       FROM  Ahl_Visit_Tasks_VL
10315       WHERE --VISIT_ID = x_visit_id AND
10316     PRIMARY_VISIT_TASK_ID = x_task_id
10317       AND status_code <> 'DELETED';
10318      c_primary_rec     c_primary%ROWTYPE;
10319 
10320  -- To find any task links for a deleted task
10321     CURSOR c_links (x_id IN NUMBER) IS
10322       SELECT COUNT(*) FROM Ahl_Task_Links L ,Ahl_Visit_Tasks_B T
10323       WHERE (T.VISIT_TASK_ID = L.VISIT_TASK_ID OR T.VISIT_TASK_ID = L.PARENT_TASK_ID)
10324       AND T.VISIT_TASK_ID = x_id;
10325 
10326     -- To find if WIP job is created for the Visit
10327     CURSOR c_wo_exist(x_task_id IN NUMBER)
10328     IS
10329     select 'X' from ahl_workorders
10330                   where VISIT_TASK_ID=x_task_id;
10331 
10332     -- To find if WIP job is created for the Visit
10333     CURSOR c_workorders(x_task_id IN NUMBER)
10334     IS
10335     SELECT * FROM AHL_WORKORDERS
10336     WHERE VISIT_TASK_ID=x_task_id
10337     AND STATUS_CODE<>'22' AND STATUS_CODE<> '7';
10338 
10339     -- SKPATHAK :: 12-DEC-2010 :: ER 13416865
10340     -- Comment the below since this validation is not needed as this API is only called in visit cancellation flow
10341     /*CURSOR c_stage_tasks_count (c_visit_id IN NUMBER, c_stage_id IN NUMBER)
10342     IS
10343         select count(1) as TASK_COUNT
10344         from AHL_VISIT_TASKS_VL
10345         where VISIT_ID = c_visit_id
10346         AND TASK_TYPE_CODE <> 'STAGE'
10347         AND STAGE_ID = c_stage_id;
10348 
10349     l_stage_tasks_count NUMBER :=0;*/
10350 
10351     l_workrec           c_workorders%ROWTYPE;
10352     l_workorder_rec     AHL_PRD_WORKORDER_PVT.PRD_WORKORDER_REC;
10353     l_workoper_tbl      AHL_PRD_WORKORDER_PVT.PRD_WORKOPER_TBL;
10354     l_wip_load_flag     VARCHAR2(1):= 'Y';
10355     l_workorder_present VARCHAR2(1);
10356     l_entl_rec_tbl        AHL_WARRANTY_ENTL_PVT.Warranty_Entl_Tbl_Type; --salogan added for supplier warranty
10357 
10358 BEGIN
10359    IF (l_log_procedure >= l_log_current_level) THEN
10360        fnd_log.string(l_log_procedure,
10361                       L_DEBUG_KEY ||'.begin',
10362                       'At the start of PL SQL procedure.');
10363    END IF;
10364 
10365    --------------------- initialize -----------------------
10366    SAVEPOINT Delete_Stage_Task;
10367 
10368    IF Fnd_Api.to_boolean (p_init_msg_list) THEN
10369       Fnd_Msg_Pub.initialize;
10370    END IF;
10371 
10372    --  Initialize API return status to success
10373     x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
10374 
10375    -- Standard call to check for call compatibility.
10376    IF NOT Fnd_Api.compatible_api_call(
10377          l_api_version,
10378          p_api_version,
10379          l_api_name,
10380          G_PKG_NAME
10381    ) THEN
10382       RAISE Fnd_Api.g_exc_unexpected_error;
10383    END IF;
10384 
10385 ------------------------Start of API Body------------------------------------
10386    IF (l_log_statement >= l_log_current_level) THEN
10387        fnd_log.string(l_log_statement,
10388                       L_DEBUG_KEY,
10389                       ':Task Id' || p_visit_task_ID);
10390    END IF;
10391 
10392    -- To check if the input taskid exists in task entity.
10393    OPEN c_Task(p_Visit_Task_ID);
10394    FETCH c_Task INTO c_task_rec;
10395 
10396    IF c_Task%NOTFOUND THEN
10397       CLOSE c_Task;
10398       IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.g_msg_lvl_error) THEN
10399              Fnd_Message.set_name('AHL', 'AHL_API_RECORD_NOT_FOUND');
10400              Fnd_Msg_Pub.ADD;
10401       END IF;
10402       RAISE Fnd_Api.g_exc_error;
10403    END IF;
10404    CLOSE c_Task;
10405 
10406    l_visit_id := c_task_rec.visit_id;
10407    l_task_id  := p_Visit_Task_Id;
10408 
10409       -- To find the visit related information
10410       OPEN c_Visit(c_task_rec.visit_id);
10411       FETCH c_Visit INTO c_visit_rec;
10412       CLOSE c_Visit;
10413 
10414       -- SKPATHAK :: 12-DEC-2010 :: ER 13416865
10415       -- Comment the below since this validation is not needed as this API is only called in vis1t cancellation flow
10416       /*OPEN c_stage_tasks_count (c_visit_rec.visit_id, c_task_rec.STAGE_ID);
10417       FETCH c_stage_tasks_count INTO l_stage_tasks_count;
10418       CLOSE c_stage_tasks_count;
10419 
10420       IF l_stage_tasks_count>0 THEN
10421         Fnd_Message.SET_NAME('AHL','AHL_VWP_STG_NO_DEL_HAV_TASKS');
10422         Fnd_Msg_Pub.ADD;
10423         RAISE FND_API.G_EXC_ERROR;
10424       END IF;*/
10425 
10426 
10427       OPEN  c_workorders(c_task_rec.visit_task_id);
10428       FETCH c_workorders INTO l_workrec;
10429 
10430       IF c_workorders%FOUND THEN
10431 
10432         IF l_workrec.status_code='17' THEN
10433             l_workorder_rec.workorder_id:=l_workrec.workorder_id;
10434             l_workorder_rec.visit_task_id:=p_visit_task_id;
10435 
10436             Get_WorkOrder_Attribs(
10437               p_x_prd_workorder_rec => l_workorder_rec
10438             );
10439 
10440             l_msg_count := FND_MSG_PUB.count_msg;
10441              IF l_msg_count > 0 THEN
10442                 x_msg_count := l_msg_count;
10443                 x_return_status := FND_API.G_RET_STS_ERROR;
10444                 RAISE FND_API.G_EXC_ERROR;
10445              END IF;
10446 
10447             l_workorder_rec.wip_entity_id := null;
10448             l_workorder_rec.STATUS_CODE:='22'; --Deleted Status Refer DLD to Verify.
10449 
10450             IF (l_log_statement >= l_log_current_level) THEN
10451                 fnd_log.string(l_log_statement,
10452                                L_DEBUG_KEY,
10453                                'Before Calling AHL_PRD_WORKORDER_PVT.update_job');
10454             END IF;
10455             AHL_PRD_WORKORDER_PVT.update_job
10456             (
10457              p_api_version         => 1.0,
10458              p_init_msg_list       => fnd_api.g_false,
10459              p_commit              => fnd_api.g_false,
10460              p_validation_level    => p_validation_level,
10461              p_default             => fnd_api.g_false,
10462              p_module_type         => NULL,
10463              x_return_status       => x_return_status,
10464              x_msg_count           => x_msg_count,
10465              x_msg_data            => x_msg_data,
10466              p_wip_load_flag       => 'Y',
10467              p_x_prd_workorder_rec => l_workorder_rec,
10468              p_x_prd_workoper_tbl  => l_workoper_tbl
10469              );
10470 
10471              IF (l_log_statement >= l_log_current_level) THEN
10472                  fnd_log.string(l_log_statement,
10473                                 L_DEBUG_KEY,
10474                                 'After Calling AHL_PRD_WORKORDER_PVT.update_job, Return Status = ' || x_return_status);
10475              END IF;
10476 
10477              l_msg_count := FND_MSG_PUB.count_msg;
10478              IF l_msg_count > 0 OR NVL(x_return_status,'x') <> FND_API.G_RET_STS_SUCCESS THEN
10479                 x_msg_count := l_msg_count;
10480                 x_return_status := FND_API.G_RET_STS_ERROR;
10481                 RAISE FND_API.G_EXC_ERROR;
10482              END IF;
10483 
10484         ELSE
10485         -- if status is not draft
10486               Fnd_Message.set_name ('AHL', 'AHL_VWP_TSK_CANNOT_DEL');
10487               Fnd_Msg_Pub.ADD;
10488               RAISE FND_API.G_EXC_ERROR;
10489         END IF; -- End of Job Status
10490         CLOSE c_workorders;
10491 
10492       ELSE
10493 
10494          CLOSE c_workorders;
10495 
10496       END IF; -- End of check if the job is for the task
10497 
10498       OPEN  c_wo_exist(c_task_rec.visit_task_id);
10499       FETCH c_wo_exist INTO l_workorder_present;
10500 
10501       IF c_wo_exist%FOUND THEN
10502          l_workorder_present :='Y';
10503       ELSE
10504          l_workorder_present :='N';
10505       END IF;
10506       CLOSE c_wo_exist;
10507 
10508         IF (l_log_statement >= l_log_current_level) THEN
10509             fnd_log.string(l_log_statement,
10510                            L_DEBUG_KEY,
10511                            'Value of l_workorder_present = ' || l_workorder_present);
10512         END IF;
10513 
10514         UPDATE AHL_VISIT_TASKS_B
10515             SET STATUS_CODE='DELETED',UNIT_EFFECTIVITY_ID=NULL,
10516                 OBJECT_VERSION_NUMBER=OBJECT_VERSION_NUMBER+1
10517         WHERE VISIT_TASK_ID=l_task_id;
10518 
10519         IF (l_log_statement >= l_log_current_level) THEN
10520             fnd_log.string(l_log_statement,
10521                            L_DEBUG_KEY,
10522                            'Updation of the status to DELETED');
10523         END IF;
10524 
10525  ------------------------End of API Body------------------------------------
10526    IF Fnd_Api.to_boolean (p_commit) THEN
10527       COMMIT;
10528    END IF;
10529 
10530    Fnd_Msg_Pub.count_and_get (
10531          p_encoded => Fnd_Api.g_false,
10532          p_count   => x_msg_count,
10533          p_data    => x_msg_data
10534    );
10535 
10536    IF (l_log_procedure >= l_log_current_level) THEN
10537          fnd_log.string(l_log_procedure,
10538                         L_DEBUG_KEY ||'.end',
10539                         'At the end of PL SQL procedure. Return Status = ' || x_return_status);
10540    END IF;
10541 EXCEPTION
10542    WHEN Fnd_Api.g_exc_error THEN
10543       ROLLBACK TO Delete_Stage_Task;
10544       x_return_status := Fnd_Api.g_ret_sts_error;
10545       Fnd_Msg_Pub.count_and_get (
10546             p_encoded => Fnd_Api.g_false,
10547             p_count   => x_msg_count,
10548             p_data    => x_msg_data
10549       );
10550    WHEN Fnd_Api.g_exc_unexpected_error THEN
10551       ROLLBACK TO Delete_Stage_Task;
10552       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
10553       Fnd_Msg_Pub.count_and_get (
10554             p_encoded => Fnd_Api.g_false,
10555             p_count   => x_msg_count,
10556             p_data    => x_msg_data
10557       );
10558    WHEN OTHERS THEN
10559       ROLLBACK TO Delete_Stage_Task;
10560       x_return_status := Fnd_Api.g_ret_sts_unexp_error ;
10561       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
10562     THEN
10563          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
10564       END IF;
10565       Fnd_Msg_Pub.count_and_get (
10566             p_encoded => Fnd_Api.g_false,
10567             p_count   => x_msg_count,
10568             p_data    => x_msg_data
10569       );
10570 END Delete_Stage_Task;
10571 -- VWPE 12730539:: PRAKKUM :: 26-JUL-2011 :: end
10572 
10573 END AHL_VWP_TASKS_PVT;