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