DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_TASK_PVT1

Source


1 PACKAGE BODY PA_TASK_PVT1 AS
2 /* $Header: PATSK1VB.pls 120.8.12010000.4 2008/11/27 15:05:46 rthumma ship $ */
3 
4 -- API name                      : Create_Task
5 -- Type                          : Private procedure
6 -- Pre-reqs                      : None
7 -- Return Value                  : N/A
8 -- Prameters
9 -- p_api_version          IN    NUMBER  N   Not Null    1.0
10 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
11 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
12 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
13 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
14 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
15 -- p_debug_mode       IN    VARCHAR2    N   Null    N
16 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17 -- p_object_type          IN    VARCHAR2    N   Not Null
18 -- p_project_id       IN    NUMBER  N   Not Null
19 -- p_task_number          IN    VARCHAR2    N   Not Null
20 -- p_task_name        IN    VARCHAR2    N   Not Null
21 -- p_task_description   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22 -- p_location_id          IN    NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
23 -- p_country          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24 -- p_territory_code IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25 -- p_state_region   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
26 -- p_city               IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27 -- p_task_manager_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28 -- p_carrying_out_org_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29 -- p_priority_code  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 -- p_TYPE_ID          IN    NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31 -- p_status_code          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32 -- p_inc_proj_progress_flag IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33 -- p_pm_product_code    IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34 -- p_pm_task_reference  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 -- p_closed_date          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
39 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
40 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
41 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
44 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
45 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
46 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
47 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
48 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
49 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
50 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
51 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
52 -- x_task_id          OUT   NUMBER  N   Not Null
53 -- x_return_status  OUT     VARCHAR2    N   Null
54 -- x_msg_count        OUT   NUMBER  N   Null
55 -- x_msg_data         OUT   VARCHAR2    N   Null
56 --
57 --  History
58 --
59 --  23-OCT-01   Majid Ansari             -Created
60 --
61 --
62 
63 PROCEDURE Create_Task(
64  p_api_version        IN    NUMBER  :=1.0,
65  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
66  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
67  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
68  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
69  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
70  p_debug_mode         IN    VARCHAR2    :='N',
71  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
72  p_object_type        IN    VARCHAR2,
73  p_project_id         IN    NUMBER,
74  p_structure_id         IN    NUMBER,
75  p_structure_version_id IN    NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
76  p_task_number        IN    VARCHAR2,
77  p_task_name          IN    VARCHAR2,
78  p_ref_task_id          IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
79  p_peer_or_sub          IN    VARCHAR2    :='PEER',
80  p_task_description IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
81  p_location_id        IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
82  p_country              IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
83  p_territory_code         IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
84  p_state_region           IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
85  p_city             IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
86  p_task_manager_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
87  p_carrying_out_org_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
88  p_priority_code          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
89  p_TYPE_ID            IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
90  p_status_code        IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
91  p_inc_proj_progress_flag   IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
92  p_pm_product_code  IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
93  p_pm_task_reference    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
94  p_closed_date        IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
95  p_scheduled_start_date IN    DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
96  p_scheduled_finish_date IN   DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
97  p_link_task_flag        IN   VARCHAR2 := 'N',
98  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
99  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
100  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
101  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
102  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
103  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
104  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
105  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
106  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
107  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
108  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
109  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
110  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
111  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
112  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
113  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
114 
115  p_address_id    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
116  p_address1      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
117  p_work_type_id  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
118  p_service_type_code IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
119  p_chargeable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
120  p_billable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
121  p_receive_project_invoice_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
122 
123  p_task_weighting_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
124  p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
125  p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
126  p_wq_actual_entry_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
127  p_task_progress_entry_page_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
128  p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
129  p_phase_version_id        IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
130  p_phase_code              IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
131  p_parent_structure_id      IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
132  -- xxlu added task DFF attributes
133  p_tk_attribute_category     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
134  p_tk_attribute1     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
135  p_tk_attribute2     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
136  p_tk_attribute3     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
137  p_tk_attribute4     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
138  p_tk_attribute5     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
139  p_tk_attribute6     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
140  p_tk_attribute7     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
141  p_tk_attribute8     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
142  p_tk_attribute9     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
143  p_tk_attribute10    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
144  -- end xxlu changes
145   --FP M development bug 330119
146    p_structure_type      IN      VARCHAR2 := 'WORKPLAN',
147    p_financial_flag      IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
148  --End FPM changes bug 330119
149  p_Base_Perc_Comp_Deriv_Code     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
150   -- This param added for FP_M changes 3305199
151 -- Bug#3491609 : Workflow Chanegs FP M
152  p_wf_item_type          IN    pa_proj_elements.wf_item_type%TYPE       :=NULL,
153  p_wf_process            IN    pa_proj_elements.wf_process%TYPE         :=NULL,
154  p_wf_lead_days          IN    pa_proj_elements.wf_start_lead_days%TYPE :=NULL,
155  p_wf_enabled_flag       IN    pa_proj_elements.enable_wf_flag%TYPE     :=NULL,
156  -- Bug#3491609 : Workflow Chanegs FP M
157  x_task_id            IN OUT    NOCOPY NUMBER, --File.Sql.39 bug 4440895
158  x_return_status         OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
159  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
160  x_msg_data           OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
161 ) IS
162 
163    l_msg_count                     NUMBER;
164    l_msg_data                      VARCHAR2(250);
165    l_data                          VARCHAR2(250);
166    l_msg_index_out                 NUMBER;
167    l_error_msg_code                     VARCHAR2(250);
168    l_return_status                 VARCHAR2(1);
169     l_error_message_code           VARCHAR2(250);
170 
171     l_carrying_out_org_id          NUMBER;
172 
173     l_task_description             PA_PROJ_ELEMENTS.description%TYPE;
174     l_location_id                    NUMBER;
175     --l_country
176     --l_territory_code
177     --l_state_region
178     --l_city
179     l_task_manager_id              NUMBER;
180     l_priority_code            PA_PROJ_ELEMENTS.priority_code%TYPE;
181     l_TYPE_ID                    PA_PROJ_ELEMENTS.TYPE_ID  %TYPE;
182     l_status_code                    PA_PROJ_ELEMENTS.status_code%TYPE;
183     l_inc_proj_progress_flag         PA_PROJ_ELEMENTS.inc_proj_progress_flag%TYPE;
184     l_pm_product_code              VARCHAR2(30); --PA_PROJ_ELEMENTS.pm_product_code%TYPE;
185     l_pm_task_reference            VARCHAR2(30); --PA_PROJ_ELEMENTS.pm_task_reference%TYPE;
186     l_closed_date                    PA_PROJ_ELEMENTS.closed_date%TYPE;
187     --l_scheduled_start_date
188     --l_scheduled_finish_date
189     l_attribute_category         PA_PROJ_ELEMENTS.attribute_category%TYPE;
190     l_attribute1                     PA_PROJ_ELEMENTS.attribute1%TYPE;
191     l_attribute2                     PA_PROJ_ELEMENTS.attribute2%TYPE;
192     l_attribute3                     PA_PROJ_ELEMENTS.attribute3%TYPE;
193     l_attribute4                     PA_PROJ_ELEMENTS.attribute4%TYPE;
194     l_attribute5                     PA_PROJ_ELEMENTS.attribute5%TYPE;
195     l_attribute6                     PA_PROJ_ELEMENTS.attribute6%TYPE;
196     l_attribute7                     PA_PROJ_ELEMENTS.attribute7%TYPE;
197     l_attribute8                     PA_PROJ_ELEMENTS.attribute8%TYPE;
198     l_attribute9                     PA_PROJ_ELEMENTS.attribute9%TYPE;
199     l_attribute10                    PA_PROJ_ELEMENTS.attribute10%TYPE;
200     l_attribute11                    PA_PROJ_ELEMENTS.attribute11%TYPE;
201     l_attribute12                    PA_PROJ_ELEMENTS.attribute12%TYPE;
202     l_attribute13                    PA_PROJ_ELEMENTS.attribute13%TYPE;
203     l_attribute14                    PA_PROJ_ELEMENTS.attribute14%TYPE;
204     l_attribute15                    PA_PROJ_ELEMENTS.attribute15%TYPE;
205     l_phase_version_id                   PA_PROJ_ELEMENTS.phase_version_id%TYPE;
206     l_phase_code                         PA_PROJ_ELEMENTS.phase_code%TYPE;
207 --hsiu
208 --added for advanced structure - versioning
209     l_versioned    VARCHAR2(1) := 'N';
210     l_shared       VARCHAR2(1) := 'N';
211     l_full_shared  VARCHAR2(30) := '';
212 
213 --end changes
214 
215     X_ROW_ID                       VARCHAR2(255);
216 
217     -- xxlu added task DFF attributes
218     l_tk_attribute_category          pa_tasks.attribute_category%TYPE;
219     l_tk_attribute1                  pa_tasks.attribute1%TYPE;
220     l_tk_attribute2                  pa_tasks.attribute2%TYPE;
221     l_tk_attribute3                  pa_tasks.attribute3%TYPE;
222     l_tk_attribute4                  pa_tasks.attribute4%TYPE;
223     l_tk_attribute5                  pa_tasks.attribute5%TYPE;
224     l_tk_attribute6                  pa_tasks.attribute6%TYPE;
225     l_tk_attribute7                  pa_tasks.attribute7%TYPE;
226     l_tk_attribute8                  pa_tasks.attribute8%TYPE;
227     l_tk_attribute9                  pa_tasks.attribute9%TYPE;
228     l_tk_attribute10                   pa_tasks.attribute10%TYPE;
229     -- end xxlu changes
230 
231      -- Bug#3491609 : Workflow Chanegs FP M
232 l_wf_item_type    pa_proj_elements.wf_item_type%TYPE;
233 l_wf_process      pa_proj_elements.wf_process%TYPE;
234 l_wf_lead_days    pa_proj_elements.wf_start_lead_days%TYPE;
235 l_wf_enabled_flag pa_proj_elements.enable_wf_flag%TYPE;
236  -- Bug#3491609 : Workflow Chanegs FP M
237 
238  --Modified pa_tasks to  pa_proj_elements in the following local variables Bug 3809523
239  l_task_number    pa_proj_elements.element_number%TYPE := p_task_number; --ADDED FOR BUG 3705333
240  la_task_name      pa_proj_elements.name%TYPE  := p_task_name; --ADDED FOR BUG 3705333
241 
242     cursor get_page_name(c_page_id NUMBER)
243     IS
244       SELECT page_name
245         from pa_page_layouts
246        where page_id = c_page_id
247          and page_type_code = 'AI';
248     l_page_name    pa_page_layouts.page_name%TYPE;
249 
250     CURSOR cur_projs
251     IS
252       SELECT carrying_out_organization_id
253         FROM pa_projects_all
254        WHERE project_id = p_project_id;
255 
256     CURSOR cur_struc_type
257     IS
258       SELECT 'Y'
259         FROM pa_proj_structure_types ppst
260             ,pa_structure_types pst
261        WHERE ppst.proj_element_id = p_structure_id
262          AND ppst.structure_type_id = pst.structure_type_id
263          AND pst.structure_type_class_code IN( 'FINANCIAL' );
264 
265 --HSIU
266 --fixed status code error
267 -- Bug 2827063 Tuned the following cursor to use exists
268     CURSOR cur_pub_versions is
269       select 'Y' from dual
270       where EXISTS
271        ( select 'xyz'
272          from pa_proj_elem_ver_structure
273          where proj_element_id = p_structure_id
274          AND project_id = p_project_id
275          and STATUS_CODE = 'STRUCTURE_PUBLISHED');
276 
277 /* Bug 2623999 Added the following cursor. This cusror will be used if p_structure_version_id
278               is not null. Otherwise the  cur_pub_versions will be used*/
279 
280     --bug 3074706
281     --need to include project_id to use index
282     CURSOR cur_pub_versions2 is
283       select 'Y'
284         from pa_proj_elem_ver_structure
285        where element_version_id = p_structure_version_id
286          and project_id = p_project_id
287          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
288     --end bug 3074706
289 
290 -- should be checking for tasks in pa_proj_elements table.
291 
292     /*4156271 : Performance Fix - Commented the following Query for Performance reasons
293     CURSOR cur_chk_pa_tasks
294     IS
295       SELECT 'x'
296         FROM pa_tasks pt, pa_proj_elements ppe
297        WHERE pt.project_id = p_project_id
298          AND pt.task_id    = ppe.proj_element_id
299          AND ppe.link_task_flag = 'N';
300    */
301    /* 4156271 : Same  Cursor cur_chk_pa_tasks with better performance follows */
302    CURSOR cur_chk_pa_tasks
303     IS
304       SELECT 'x'
305         FROM pa_tasks pt
306        WHERE pt.project_id = p_project_id
307          AND EXISTS(SELECT 1
308                       FROM PA_PROJ_ELEMENTS ppe
309                      WHERE ppe.link_task_flag = 'N'
310                        AND ppe.project_id = p_project_id
311                    );
312    /*End : Fix for 4156271 */
313 
314     CURSOR cur_chk_ref_task
315     IS
316       SELECT 'x'
317         FROM pa_proj_element_versions
318        WHERE object_type = 'PA_STRUCTURES'
319          AND element_version_id = p_ref_task_id;   --Just making sure ref_task_id does not contain
320                                                    --structure version id.
321 
322     CURSOR cur_ref_loc_id
323     IS
324       SELECT location_id from pa_proj_elements where proj_element_id = p_ref_task_id;
325 
326 l_publised_version  VARCHAR2(1);
327 l_dummy_char        VARCHAR2(1);
328 l_dummy_char2       VARCHAR2(1);
329 l_wbs_record_version_number NUMBER;
330 l_link_task_flag    VARCHAR2(1);
331 
332     CURSOR get_task_types_attr(c_task_type_id NUMBER) IS
333       select WORK_ITEM_CODE, UOM_CODE,
334              ACTUAL_WQ_ENTRY_CODE, TASK_PROGRESS_ENTRY_PAGE_ID,
335              INITIAL_STATUS_CODE, BASE_PERCENT_COMP_DERIV_CODE,
336              wf_item_type,wf_process,wf_start_lead_days
337         from pa_task_types
338        where task_type_id = c_task_type_id;
339 --l_task_weighting_deriv_code PA_PROJ_ELEMENTS.task_weighting_deriv_code%TYPE;
340 l_work_item_code PA_PROJ_ELEMENTS.wq_item_code%TYPE;
341 l_uom_code PA_PROJ_ELEMENTS.wq_uom_code%TYPE;
342 l_wq_actual_entry_code PA_PROJ_ELEMENTS.wq_actual_entry_code%TYPE;
343 l_task_progress_entry_page_id PA_PROJ_ELEMENTS.task_progress_entry_page_id%TYPE;
344 l_INITIAL_STATUS_CODE PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
345 
346 --Bug 2947492
347 
348 --Bug 3305199: commented out for M
349 --l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
350 l_parent_task_id             NUMBER;
351 l_top_task_id                NUMBER;
352 
353 CURSOR get_parent_task_id( c_task_id NUMBER ) IS
354     SELECT parent_task_id, top_task_id FROM pa_tasks
355      WHERE project_id = p_project_id and task_id = c_task_id;
356 
357 --End Bug 2947492
358 --bug 3305199
359 l_Base_Perc_Comp_Deriv_Code VARCHAR2(30);
360 
361 --Bug 3705333
362 CURSOR get_task_name_or_number(c_project_id NUMBER,c_task_id NUMBER )
363     IS
364       SELECT task_name, task_number
365         FROM pa_tasks
366         WHERE project_id = c_project_id
367         AND task_id = c_task_id;
368 --end bug 3705333
369 
370 l_task_trn_start_date    DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
371 l_task_trn_end_date      DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
372 
373 BEGIN
374 
375 --dbms_output.put_line(( 'Inside CREATE_TASK private API' );
376 
377     IF (p_debug_mode = 'Y') THEN
378       pa_debug.debug('PA_TASK_PVT1.CREATE_TASK begin');
379     END IF;
380 
381     IF (p_commit = FND_API.G_TRUE) THEN
382       savepoint CREATE_TASK_PRIVATE;
383     END IF;
384 
385     IF (p_debug_mode = 'Y') THEN
386       pa_debug.debug('Performing validations');
387     END IF;
388 
389     IF p_object_type <> 'PA_TASKS'
390     THEN
391       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NOT_TASK_OBJECT');
392       l_msg_data := 'PA_PS_NOT_TASK_OBJECT';
393     END IF;
394 
395 --hsiu: bug 2669388
396 --dbms_output.put_line('task number');
397 
398  /* Added for Bug 3705333*/
399 If ((p_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
400     (p_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
401     THEN
402           OPEN get_task_name_or_number( p_project_id,x_task_id );
403           FETCH get_task_name_or_number INTO la_task_name,l_task_number;
404           CLOSE  get_task_name_or_number;
405 END IF;
406 /* changes end for bug 3705333*/
407 
408       IF p_task_number IS NULL
409       THEN
410           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
411                                p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
412           raise FND_API.G_EXC_ERROR;
413       END IF;
414 
415 --dbms_output.put_line('task name');
416       IF p_task_name IS NULL
417       THEN
418           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
419                                p_msg_name => 'PA_PS_TASK_NAME_NULL');
420           raise FND_API.G_EXC_ERROR;
421       END IF;
422 
423 --Bug 2168170
424 --dbms_output.put_line('Inside private API');
425 --dbms_output.put_line( 'Check if the task name is unique within the project.'||l_task_number);
426       IF PA_PROJ_ELEMENTS_UTILS.Check_element_number_Unique
427              (
428                p_element_number  => l_task_number    --Bug 3705333 Changed from p_task_number to l_task_number
429               ,p_element_id      => null
430               ,p_project_id      => p_project_id
431               ,p_structure_id    => p_parent_structure_id
432               ,p_object_type     => 'PA_TASKS'
433              ) = 'N'
434       THEN
435           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
436                                p_msg_name => 'PA_PS_TASK_NOT_NUM_UNIQ');
437           raise FND_API.G_EXC_ERROR;
438 
439       END IF;
440 --end bug 2669388
441 --dbms_output.put_line( 'After Check if the task name is unique within the project.' );
442 
443     --Check if the task name is unique within the project
444     If (PA_PROJ_ELEMENTS_UTILS.check_element_number_unique(l_task_number, --Bug 3705333 Changed from p_task_number to l_task_number
445                                                            NULL,
446                                                            p_project_id,
447                                                            p_structure_id) <> 'Y') THEN
448       --Name is not unique
449       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_TASK_NUMBER_UNIQUE');
450       l_msg_data := 'PA_PS_TASK_NUMBER_UNIQUE';
451        /* bug 3459905    Check if there is any error. */
452   l_msg_count := FND_MSG_PUB.count_msg;
453     IF l_msg_count > 0 THEN
454       x_msg_count := l_msg_count;
455       IF x_msg_count = 1 THEN
456         x_msg_data := l_msg_data;
457       END IF;
458       RAISE FND_API.G_EXC_ERROR;
459     /*  end of 3458052*/
460     END IF;
461 
462    /* bug 3459905    --Check if there is any error.
463     l_msg_count := FND_MSG_PUB.count_msg;
464     IF l_msg_count > 0 THEN
465       x_msg_count := l_msg_count;
466       IF x_msg_count = 1 THEN
467         x_msg_data := l_msg_data;
468       END IF;
469       RAISE FND_API.G_EXC_ERROR;
470       end of 3458052*/
471    END IF;
472 
473     IF ( p_task_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_description IS NOT NULL )
474     THEN
475         l_task_description := null;
476     ELSE
477         l_task_description := p_task_description;
478     END IF;
479 
480     IF ( p_PM_PRODUCT_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_PM_PRODUCT_CODE IS NOT NULL )
481     THEN
482         l_PM_PRODUCT_CODE := null;
483     ELSE
484         l_PM_PRODUCT_CODE := p_PM_PRODUCT_CODE;
485     END IF;
486 
487     IF ( p_PM_TASK_REFERENCE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_PM_TASK_REFERENCE IS NOT NULL )
488     THEN
489         l_PM_TASK_REFERENCE := null;
490     ELSE
491         l_PM_TASK_REFERENCE := p_PM_TASK_REFERENCE;
492     END IF;
493 
494     IF ( p_location_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_location_id IS NOT NULL )
495     THEN
496        l_location_id := null;
497        OPEN cur_ref_loc_id;
498        FETCH cur_ref_loc_id INTO l_location_id;
499        CLOSE cur_ref_loc_id;
500     ELSE
501        l_location_id := p_location_id;
502     END IF;
503 
504     /*IF ( p_country = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_country IS NOT NULL )
505     THEN
506        l_country := null;
507     ELSE
508        l_country := p_country;
509     END IF;
510 
511     IF ( p_territory_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_territory_code IS NOT NULL )
512     THEN
513         l_territory_code := null;
514     ELSE
515         l_territory_code := p_territory_code;
516     END IF;*/
517 
518     IF ( p_task_manager_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_manager_id IS NOT NULL )
519     THEN
520        l_task_manager_id := null;
521     ELSE
522        l_task_manager_id := p_task_manager_id;
523     END IF;
524 
525     /*IF ( p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_carrying_out_org_id IS NOT NULL )
526     THEN
527        l_carrying_out_org_id := null;
528     ELSE
529        l_carrying_out_org_id := p_carrying_out_org_id;
530     END IF; */
531 
532     IF ( ( p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR ( p_carrying_out_org_id IS NULL ) )
533     THEN
534        OPEN cur_projs;
535        FETCH cur_projs INTO l_carrying_out_org_id;
536        CLOSE cur_projs;
537     ELSE
538        l_carrying_out_org_id := p_carrying_out_org_id;
539     END IF;
540 
541     IF ( p_priority_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_priority_code IS NOT NULL )
542     THEN
543        l_priority_code := NULL;
544     ELSE
545        l_priority_code := p_priority_code;
546     END IF;
547 
548     IF ( p_TYPE_ID   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR  p_TYPE_ID   IS NULL )
549     THEN
550        --IF (p_TYPE_ID   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_object_type = 'PA_TASKS') THEN
551        IF (p_object_type = 'PA_TASKS') THEN
552          l_TYPE_ID   := PA_PROJ_ELEMENTS_UTILS.GET_DEFAULT_TASK_TYPE_ID;
553        ELSE
554          l_TYPE_ID   := NULL;
555        END IF;
556     ELSE
557        l_TYPE_ID   := p_TYPE_ID  ;
558     END IF;
559 
560     IF ( p_inc_proj_progress_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_inc_proj_progress_flag IS NOT NULL )
561     THEN
562        l_inc_proj_progress_flag := Null;
563     ELSE
564        l_inc_proj_progress_flag := p_inc_proj_progress_flag;
565     END IF;
566 
567     IF ( p_closed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_closed_date IS NOT NULL )
568     THEN
569        l_closed_date := NULL;
570     ELSE
571        l_closed_date := p_closed_date;
572     END IF;
573 
574     /*IF ( p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_start_date IS NOT NULL )
575     THEN
576        l_scheduled_start_date := NULL;
577     ELSE
578        l_scheduled_start_date := p_scheduled_start_date;
579     END IF;
580 
581     IF ( p_scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_finish_date IS NOT NULL )
582     THEN
583        l_scheduled_finish_date := Null;
584     ELSE
585        l_scheduled_finish_date := p_scheduled_finish_date;
586     END IF;*/
587 
588     IF ( p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute_category IS NOT NULL )
589     THEN
590        l_attribute_category := NULL;
591     ELSE
592        l_attribute_category := p_attribute_category;
593     END IF;
594 
595     IF ( p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute1 IS NOT NULL )
596     THEN
597        l_attribute1 := null;
598     ELSE
599        l_attribute1 := p_attribute1;
600     END IF;
601 
602     IF ( p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute2 IS NOT NULL )
603     THEN
604        l_attribute2 := null;
605     ELSE
606        l_attribute2 := p_attribute2;
607     END IF;
608 
609     IF ( p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute3 IS NOT NULL )
610     THEN
611        l_attribute3 := null;
612     ELSE
613        l_attribute3 := p_attribute3;
614     END IF;
615 
616     IF ( p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute4 IS NOT NULL )
617     THEN
618        l_attribute4 := null;
619     ELSE
620        l_attribute4 := p_attribute4;
621     END IF;
622 
623     IF ( p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute5 IS NOT NULL )
624     THEN
625        l_attribute5 := null;
626     ELSE
627        l_attribute5 := p_attribute5;
628     END IF;
629 
630     IF ( p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute6 IS NOT NULL )
631     THEN
632        l_attribute6 := null;
633     ELSE
634        l_attribute6 := p_attribute6;
635     END IF;
636 
637     IF ( p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute7 IS NOT NULL )
638     THEN
639        l_attribute7 := null;
640     ELSE
641        l_attribute7 := p_attribute7;
642     END IF;
643 
644     IF ( p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute8 IS NOT NULL )
645     THEN
646        l_attribute8 := null;
647     ELSE
648        l_attribute8 := p_attribute8;
649     END IF;
650 
651     IF ( p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute9 IS NOT NULL )
652     THEN
653        l_attribute9 := null;
654     ELSE
655        l_attribute9 := p_attribute9;
656     END IF;
657 
658     IF ( p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute10 IS NOT NULL )
659     THEN
660        l_attribute10 := null;
661     ELSE
662        l_attribute10 := p_attribute10;
663     END IF;
664 
665     IF ( p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute11 IS NOT NULL )
666     THEN
667        l_attribute11 := null;
668     ELSE
669        l_attribute11 := p_attribute11;
670     END IF;
671 
672     IF ( p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute12 IS NOT NULL )
673     THEN
674        l_attribute12 := null;
675     ELSE
676        l_attribute12 := p_attribute12;
677     END IF;
678 
679     IF ( p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute13 IS NOT NULL )
680     THEN
681        l_attribute13 := null;
682     ELSE
683        l_attribute13 := p_attribute13;
684     END IF;
685 
686     IF ( p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute14 IS NOT NULL )
687     THEN
688        l_attribute14 := null;
689     ELSE
690        l_attribute14 := p_attribute14;
691     END IF;
692 
693     IF ( p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute15 IS NOT NULL )
694     THEN
695        l_attribute15 := null;
696     ELSE
697        l_attribute15 := p_attribute15;
698     END IF;
699 
700     IF ( p_link_task_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_link_task_flag IS NOT NULL )
701     THEN
702        l_link_task_flag := 'N';
703     ELSE
704        l_link_task_flag := p_link_task_flag;
705     END IF;
706 
707     IF (p_phase_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_phase_version_id IS NOT NULL)
708     THEN
709        l_phase_version_id := NULL;
710     ELSE
711        l_phase_version_id := p_phase_version_id;
712     END IF;
713 
714     IF (p_phase_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_phase_code IS NOT NULL)
715     THEN
716        l_phase_code := NULL;
717     ELSE
718        l_phase_code := p_phase_code;
719     END IF;
720 
721     -- xxlu added task DFF attributes
722     IF ( p_tk_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute_category IS NOT NULL )
723     THEN
724        l_tk_attribute_category := NULL;
725     ELSE
726        l_tk_attribute_category := p_tk_attribute_category;
727     END IF;
728 
729     IF ( p_tk_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute1 IS NOT NULL )
730     THEN
731        l_tk_attribute1 := null;
732     ELSE
733        l_tk_attribute1 := p_tk_attribute1;
734     END IF;
735 
736     IF ( p_tk_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute2 IS NOT NULL )
737     THEN
738        l_tk_attribute2 := null;
739     ELSE
740        l_tk_attribute2 := p_tk_attribute2;
741     END IF;
742 
743     IF ( p_tk_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute3 IS NOT NULL )
744     THEN
745        l_tk_attribute3 := null;
746     ELSE
747        l_tk_attribute3 := p_tk_attribute3;
748     END IF;
749 
750     IF ( p_tk_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute4 IS NOT NULL )
751     THEN
752        l_tk_attribute4 := null;
753     ELSE
754        l_tk_attribute4 := p_tk_attribute4;
755     END IF;
756 
757     IF ( p_tk_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute5 IS NOT NULL )
758     THEN
759        l_tk_attribute5 := null;
760     ELSE
761        l_tk_attribute5 := p_tk_attribute5;
762     END IF;
763 
764     IF ( p_tk_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute6 IS NOT NULL )
765     THEN
766        l_tk_attribute6 := null;
767     ELSE
768        l_tk_attribute6 := p_tk_attribute6;
769     END IF;
770 
771     IF ( p_tk_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute7 IS NOT NULL )
772     THEN
773        l_tk_attribute7 := null;
774     ELSE
775        l_tk_attribute7 := p_tk_attribute7;
776     END IF;
777 
778     IF ( p_tk_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute8 IS NOT NULL )
779     THEN
780        l_tk_attribute8 := null;
781     ELSE
782        l_tk_attribute8 := p_tk_attribute8;
783     END IF;
784 
785     IF ( p_tk_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute9 IS NOT NULL )
786     THEN
787        l_tk_attribute9 := null;
788     ELSE
789        l_tk_attribute9 := p_tk_attribute9;
790     END IF;
791 
792     IF ( p_tk_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_tk_attribute10 IS NOT NULL )
793     THEN
794        l_tk_attribute10 := null;
795     ELSE
796        l_tk_attribute10 := p_attribute10;
797     END IF;
798     -- end xxlu changes
799 
800     --fetch task_types attributes
801     OPEN get_task_types_attr(l_TYPE_ID  );
802     FETCH get_task_types_attr into l_work_item_code,
803                                    l_uom_code,
804                                    l_wq_actual_entry_code,
805                                    l_task_progress_entry_page_id,
806                                    l_INITIAL_STATUS_CODE,
807                                    l_Base_Perc_Comp_Deriv_Code,
808                                    l_wf_item_type,
809                                    l_wf_process,
810                                    l_wf_lead_days  ;
811     IF get_task_types_attr%NOTFOUND THEN
812 --      l_task_weighting_deriv_code := NULL;
813       l_work_item_code := NULL;
814       l_uom_code := NULL;
815       l_wq_actual_entry_code := NULL;
816       l_task_progress_entry_page_id := NULL;
817       l_page_name := NULL;
818       l_Base_Perc_Comp_Deriv_Code := NULL;
819       l_wf_item_type  := NULL;
820       l_wf_process := NULL;
821       l_wf_lead_days   := NULL;
822     END IF;
823     CLOSE get_task_types_attr;
824 --
825 --
826 --bug 2789483
827     l_publised_version := 'N';
828     OPEN cur_pub_versions;
829     FETCH cur_pub_versions INTO l_publised_version;
830     CLOSE cur_pub_versions;
831 --bug 2789483
832 
833     --IF ( p_STATUS_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_STATUS_CODE IS NOT NULL )
834     IF ( p_STATUS_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_STATUS_CODE IS NULL )   --bug 2734719
835        OR l_publised_version = 'N'   --bug 2789483
836     THEN
837         l_STATUS_CODE := l_INITIAL_STATUS_CODE;
838     ELSE
839         l_STATUS_CODE := p_STATUS_CODE;
840     END IF;
841 
842 
843     --bug 3305199
844     IF (p_Base_Perc_Comp_Deriv_Code IS NULL OR p_Base_Perc_Comp_Deriv_Code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
845       NULL;
846     ELSE
847       l_Base_Perc_Comp_Deriv_Code := p_Base_Perc_Comp_Deriv_Code;
848     END IF;
849     --end bug 3305199
850 
851 /*
852     IF (p_task_weighting_deriv_code IS NOT NULL AND p_task_weighting_deriv_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
853       l_task_weighting_deriv_code := p_task_weighting_deriv_code;
854     END IF;
855 
856 */
857 
858     IF (p_work_item_code IS NOT NULL AND p_work_item_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
859       l_work_item_code := p_work_item_code;
860     END IF;
861 
862     IF (p_uom_code IS NOT NULL and p_uom_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
863       l_uom_code := p_uom_code;
864     END IF;
865 
866     IF (p_wq_actual_entry_code IS NOT NULL and p_wq_actual_entry_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
867       l_wq_actual_entry_code := p_wq_actual_entry_code;
868     END IF;
869 
870     IF (p_task_progress_entry_page_id IS NOT NULL AND p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
871       l_task_progress_entry_page_id := p_task_progress_entry_page_id;
872       l_page_name := p_task_progress_entry_page;
873     END IF;
874 
875 --dbms_output.put_line( 'Before inser_row API' ||p_project_id  );
876 --dbms_output.put_line( 'p_task_man_id ' ||p_task_MANAGER_ID );
877 --dbms_output.put_line( 'l_task_man_id ' ||l_task_MANAGER_ID );
878 
879       -- 3491609 : FP M : Tracking bug : Workflow Excecution
880 
881       --This is required as during copy project the WF attributes
882       --needs to be copied from source task and during simple task
883       --creation it should be copied from task type which is already
884       --stored in the local variable. In case during copy task WF
885       --attributes are passed as null , in the target it will be
886       --populated from task type .
887 
888       l_wf_item_type  := nvl(p_wf_item_type,l_wf_item_type);
889       l_wf_process    := nvl(p_wf_process,l_wf_process);
890       l_wf_lead_days  := nvl(p_wf_lead_days,l_wf_lead_days);
891       -- 3491609 : FP M : Tracking bug : Workflow Excecution
892 
893     PA_PROJ_ELEMENTS_PKG.Insert_Row(
894                  X_ROW_ID                             => X_ROW_ID
895                 ,X_PROJ_ELEMENT_ID                    => x_task_id
896                 ,X_PROJECT_ID                           => p_project_id
897                 ,X_OBJECT_TYPE                    => p_OBJECT_TYPE
898                 ,X_ELEMENT_NUMBER                     => l_task_NUMBER --Bug 3705333 Changed from p_task_number to l_task_number
899                 ,X_NAME                               => la_task_NAME  --Bug 3705333 Changed from p_task_name to la_task_name
900                 ,X_DESCRIPTION                    => l_task_DESCRIPTION
901                 ,X_STATUS_CODE                    => l_STATUS_CODE
902                 ,X_WF_STATUS_CODE                     => null       --per Sakthi
903                 ,X_PM_PRODUCT_CODE                    => l_PM_PRODUCT_CODE
904                 ,X_PM_TASK_REFERENCE                  => l_PM_TASK_REFERENCE
905                 ,X_CLOSED_DATE                    => l_CLOSED_DATE
906                 ,X_LOCATION_ID                    => l_LOCATION_ID
907                 ,X_MANAGER_PERSON_ID                => l_task_MANAGER_ID
908                 ,X_CARRYING_OUT_ORGANIZATION_ID       => l_carrying_out_org_id
909                 ,X_TYPE_ID                              => l_TYPE_ID
910                 ,X_PRIORITY_CODE                      => l_PRIORITY_CODE
911                 ,X_INC_PROJ_PROGRESS_FLAG             => l_INC_PROJ_PROGRESS_FLAG
912                 ,X_REQUEST_ID                           => null --p_REQUEST_ID   --per Sakthi
913                 ,X_PROGRAM_APPLICATION_ID             => null --p_PROGRAM_APPLICATION_ID --per Sakthi
914                 ,X_PROGRAM_ID                           => null --p_PROGRAM_ID --per Sakthi
915                 ,X_PROGRAM_UPDATE_DATE              => null --p_PROGRAM_UPDATE_DATE --per Sakthi
916                 ,X_LINK_TASK_FLAG                     => NVL(l_link_task_flag,'N' )
917                 ,X_ATTRIBUTE_CATEGORY               => l_ATTRIBUTE_CATEGORY
918                 ,X_ATTRIBUTE1                           => l_ATTRIBUTE1
919                 ,X_ATTRIBUTE2                           => l_ATTRIBUTE2
920                 ,X_ATTRIBUTE3                           => l_ATTRIBUTE3
921                 ,X_ATTRIBUTE4                           => l_ATTRIBUTE4
922                 ,X_ATTRIBUTE5                           => l_ATTRIBUTE5
923                 ,X_ATTRIBUTE6                           => l_ATTRIBUTE6
924                 ,X_ATTRIBUTE7                           => l_ATTRIBUTE7
925                 ,X_ATTRIBUTE8                           => l_ATTRIBUTE8
926                 ,X_ATTRIBUTE9                           => l_ATTRIBUTE9
927                 ,X_ATTRIBUTE10                    => l_ATTRIBUTE10
928                 ,X_ATTRIBUTE11                    => l_ATTRIBUTE11
929                 ,X_ATTRIBUTE12                    => l_ATTRIBUTE12
930                 ,X_ATTRIBUTE13                    => l_ATTRIBUTE13
931                 ,X_ATTRIBUTE14                    => l_ATTRIBUTE14
932                 ,X_ATTRIBUTE15                    => l_ATTRIBUTE15
933                 ,X_TASK_WEIGHTING_DERIV_CODE       => NULL
934                 ,X_WORK_ITEM_CODE                  => l_work_item_code
935                 ,X_UOM_CODE                        => l_uom_code
936                 ,x_wq_actual_entry_code            => l_wq_actual_entry_code
937                 ,x_task_progress_entry_page_id  => l_task_progress_entry_page_id
938                 ,x_phase_version_id             => l_phase_version_id
939                 ,x_PARENT_STRUCTURE_ID          => p_STRUCTURE_ID
940                 ,x_phase_code                   => l_phase_code
941         ,x_Base_Perc_Comp_Deriv_Code    => l_Base_Perc_Comp_Deriv_Code
942             -- Added for FP_M changes : 3305199
943                -- Bug#3491609 : Workflow Chanegs FP M
944                  ,x_wf_item_type    => l_wf_item_type
945                  ,x_wf_process      => l_wf_process
946                  ,x_wf_lead_days    => l_wf_lead_days
947                  ,x_wf_enabled_flag => 'N'
948                -- Bug#3491609 : Workflow Chanegs FP M
949                  ,X_SOURCE_OBJECT_ID      => p_project_id
950                  ,X_SOURCE_OBJECT_TYPE    => 'PA_PROJECTS'
951              );
952 
953 
954     IF (l_task_progress_entry_page_id IS NOT NULL) THEN
955     -- need to include progress entry page
956       OPEN get_page_name(l_task_progress_entry_page_id);
957       FETCH get_page_name into l_page_name;
958       CLOSE get_page_name;
959 
960       PA_PROGRESS_REPORT_PUB.DEFINE_PROGRESS_REPORT_SETUP(
961         p_object_id => x_task_id
962        ,p_object_type => 'PA_TASKS'
963        ,p_page_type_code => 'AI'
964        ,p_page_id => l_task_progress_entry_page_id
965        ,p_page_name => l_page_name
966        ,x_return_status => l_return_status
967        ,x_msg_count => l_msg_count
968        ,x_msg_data => l_msg_data
969       );
970 
971       IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
972                 x_msg_count := FND_MSG_PUB.count_msg;
973                 IF x_msg_count = 1 then
974                    pa_interface_utils_pub.get_messages
975                    (p_encoded        => FND_API.G_TRUE,
976                     p_msg_index      => 1,
977                     p_msg_count      => l_msg_count,
978                     p_msg_data       => l_msg_data,
979                     p_data           => l_data,
980                     p_msg_index_out  => l_msg_index_out);
981                     x_msg_data := l_data;
982                 END IF;
983              raise FND_API.G_EXC_ERROR;
984       END IF;
985 
986 
987     END IF;
988 
989 
990 IF p_calling_module NOT IN ( 'FORMS', 'AMG' )
991 THEN
992          --Do financial task check
993          --If financial
994 
995          OPEN cur_struc_type;
996          FETCH cur_struc_type INTO l_dummy_char;
997          IF cur_struc_type%FOUND
998          THEN
999            --If structure has any published versions.
1000 
1001 --Moved up for --bug 2789483
1002            --l_publised_version := 'N';   --Moved up for --bug 2789483
1003 
1004            /* Bug 2623999 Added the following condition. This cusror cur_pub_versions will be used if
1005           p_structure_version_id is not null. Otherwise the  cur_pub_versions will be used*/
1006 
1007 --maansari: This is a bug bcoz when we check published version we check any published version then dont add task in pa_task
1008 --          if its versioned. So the requirement is to check for any published version
1009 --          For more info please refer bug 2738747
1010        /*IF (p_structure_version_id is not null and p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1011                OPEN cur_pub_versions2;
1012            FETCH cur_pub_versions2 INTO l_publised_version;
1013                CLOSE cur_pub_versions2;
1014        ELSE
1015               */
1016 --Moved up for --bug 2789483
1017               /* OPEN cur_pub_versions;
1018            FETCH cur_pub_versions INTO l_publised_version;
1019                CLOSE cur_pub_versions;
1020                   */  --bug 2789483
1021 --Moved up for --bug 2789483
1022 --     END IF;
1023 
1024 --hsiu
1025 --changes for versioning
1026            l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
1027                                                      p_project_id);
1028            --hsiu: bug 3597226
1029            --versioning is only available when wp is shared with fin.
1030            --if fin alone, the value is NULL
1031            IF l_versioned IS NULL THEN
1032              l_versioned := 'N';
1033            END IF;
1034            --end bug 3597226
1035 
1036            l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
1037                                                   p_project_id);
1038 
1039        -- Modified for FP_M changes
1040        -- Tracking Bug 3305199
1041        l_full_shared := PA_PROJECT_STRUCTURE_UTILS.get_Structure_Sharing_Code( p_project_id);
1042 
1043 /*  IF (NVL( l_publised_version, 'N' ) = 'N' and l_full_shared = 'SHARE_FULL') OR
1044      (l_publised_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_full_shared = 'SHARE_FULL') OR
1045      p_structure_type = 'FINANCIAL'  -- Bug 3305199
1046 */
1047    IF l_link_task_flag = 'N' THEN  /* smukka Bug No. 3450684 Added for sub project association*/
1048      IF ( p_structure_type = 'FINANCIAL' AND l_versioned = 'N' ) OR
1049         ( p_structure_type = 'FINANCIAL' AND l_versioned = 'Y' AND NVL( l_publised_version, 'N' ) = 'N' ) OR  /* creating task under fin tab in shared or partial shared structures */
1050         ( p_structure_type = 'FINANCIAL' AND nvl(l_shared,'N') ='N' ) OR  /*This is Split Case : This had been missed out earlier.Patching this fix also as a part of 3935874 .This fix is not relevant to issue mentioned in the bug */
1051         ( p_structure_type = 'WORKPLAN' AND l_full_shared = 'SHARE_FULL'
1052           AND l_versioned = 'Y' AND NVL( l_publised_version, 'N' ) = 'N' ) OR
1053         ( p_structure_type = 'WORKPLAN' AND l_full_shared = 'SHARE_FULL'
1054           AND l_versioned = 'N')
1055        THEN
1056 --end changes
1057 --dbms_output.put_line( 'Before Existing Create_task API '||p_project_id );
1058 
1059              l_dummy_char := null;
1060              open cur_chk_pa_tasks;
1061              fetch cur_chk_pa_tasks INTO l_dummy_char;
1062              close cur_chk_pa_tasks;
1063 
1064 --dbms_output.put_line('<'||l_dummy_char||'>, null = pa task is empty');
1065 
1066              l_dummy_char2 := null;
1067              open cur_chk_ref_task;
1068              fetch cur_chk_ref_task INTO l_dummy_char2;
1069              CLOSE cur_chk_ref_task;
1070 --dbms_output.put_line('<'||l_dummy_char2||'>, null = ref task is a structure');
1071 
1072 
1073 
1074              IF ( p_ref_task_id IS NULL AND l_dummy_char IS NOT NULL ) OR
1075                 ( p_ref_task_id IS NOT NULL AND l_dummy_char IS NULL )
1076                 --( l_dummy_char2 IS NOT NULL ) --is a structure version id not a valid ref task id from pa_task
1077              THEN
1078                 --Not a valid ref task. Tasks exists in pa_tasks
1079 --dbms_output.put_line('error with ref tsk');
1080                 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_INV_REF_TASK_ID');
1081                 l_msg_data := 'PA_PS_INV_REF_TASK_ID';
1082         -- start of bug 3459905
1083              --Check if there is any error.
1084              l_msg_count := FND_MSG_PUB.count_msg;
1085              IF l_msg_count > 0 THEN
1086                 x_msg_count := l_msg_count;
1087                 IF x_msg_count = 1 THEN
1088                    x_msg_data := l_msg_data;
1089                 END IF;
1090                 RAISE FND_API.G_EXC_ERROR;
1091              END IF;
1092        -- end of bug 3459905
1093              END IF;
1094 
1095            /* bug 3459905  --Check if there is any error.
1096              l_msg_count := FND_MSG_PUB.count_msg;
1097              IF l_msg_count > 0 THEN
1098                 x_msg_count := l_msg_count;
1099                 IF x_msg_count = 1 THEN
1100                    x_msg_data := l_msg_data;
1101                 END IF;
1102                 RAISE FND_API.G_EXC_ERROR;
1103              END IF;
1104           end 3459905 */
1105              /*SELECT nvl( wbs_record_version_number, 1 )
1106                INTO l_wbs_record_version_number
1107             -- HY: changed from pa_projects_all to pa_proj_elem_ver_structure
1108              FROM pa_proj_elem_ver_structure
1109 -- HY               FROM pa_projects_all
1110               WHERE project_id = p_project_id
1111                 AND element_version_id = p_structure_version_id;*/
1112              l_wbs_record_version_number := 1;      --temporarily
1113 
1114 --dbms_output.put_line( 'Reference task before calling existing create task API '||p_ref_task_id );
1115              -- xxlu added task DFF attributes
1116              -- xxlu added p_long_task_name
1117          -- Bug 3804265 Store p_scheduled_start_date and p_scheduled_start_date for transaction start
1118          -- date and transaction end date only for financial structures
1119              If p_structure_type = 'FINANCIAL' THEN
1120                 IF ( p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_start_date IS NOT NULL )
1121                 THEN
1122                    l_task_trn_start_date := NULL;
1123                 ELSE
1124                    l_task_trn_start_date := p_scheduled_start_date;
1125                 END IF;
1126 
1127                 IF ( p_scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_finish_date IS NOT NULL )
1128                 THEN
1129                    l_task_trn_end_date := Null;
1130                 ELSE
1131                    l_task_trn_end_date := p_scheduled_finish_date;
1132                 END IF;
1133              End If;
1134          -- Bug 3804265 Store p_scheduled_start_date and p_scheduled_start_date for transaction start
1135          -- date and transaction end date in case of financial tasks
1136          -- Bug 3810252 : Reverted the fix of Bug 3804265
1137 
1138              --Bug 3935874 : Changed SUBSTR to SUBSTRB for avoiding MLS problem
1139              --              Also ,Truncated Description to 250 chars as PA_TASKS can hold
1140              --              Only Description upto 250 chars (l_task_description can be upto 2000 chars)
1141              PA_TASKS_MAINT_PUB.CREATE_TASK
1142                                           (
1143                        p_api_version                       => p_api_version
1144                       ,p_init_msg_list                     => p_init_msg_list
1145                       ,p_commit                            => p_commit
1146                       ,p_validate_only                     => p_validate_only
1147                       ,p_validation_level                  => p_validation_level
1148                       ,p_calling_module                    => p_calling_module
1149                       ,p_debug_mode                        => p_debug_mode
1150                       ,p_project_id                        => p_project_id
1151                       ,p_reference_task_id                 => p_ref_task_id
1152                       --,p_reference_task_name               => 'TASK NAME'
1153                       ,p_peer_or_sub                       => p_peer_or_sub
1154                       ,p_task_number                       => SUBSTRB( l_task_number, 1, 25 ) --Bug 3705333 Changed from p_task_number to l_task_number
1155                       ,p_task_name                         => SUBSTRB( la_task_name, 1, 20 ) --Bug 3705333 Changed from p_task_name to la_task_namer
1156                       ,p_long_task_name                    => la_task_name --Bug 3705333 Changed from p_task_name to la_task_namer
1157 		      -- Bug#5227374.Corrected the substrb syntax below which was introduced thru Bug#3935874
1158                       ,p_task_description                  => SUBSTRB(l_task_description,1,250) --Bug 3935874
1159                       ,p_task_manager_person_id            => l_task_manager_id
1160                       ,p_carrying_out_organization_id      => l_carrying_out_org_id
1161                       ,p_scheduled_start_date              => p_scheduled_start_date
1162                       ,p_scheduled_finish_date             => p_scheduled_finish_date
1163 --  Bug 3810252Reverting the Fix                    ,p_task_start_date                   => p_scheduled_start_date   --Bug 3804265
1164 --  Bug 3810252Reverting the Fix                    ,p_task_completion_date              => p_scheduled_finish_date  --Bug 3804265
1165                       ,p_task_start_date                   => l_task_trn_start_date   --Bug 3804265
1166                       ,p_task_completion_date              => l_task_trn_end_date  --Bug 3804265
1167                       ,p_inc_proj_progress_flag            => l_inc_proj_progress_flag
1168                       ,p_pm_product_code                   => l_pm_product_code
1169                       ,p_pm_task_reference                 => l_pm_task_reference
1170                       ,p_attribute_category                => l_tk_attribute_category
1171                       ,p_attribute1                        => l_tk_attribute1
1172                       ,p_attribute2                        => l_tk_attribute2
1173                       ,p_attribute3                        => l_tk_attribute3
1174                       ,p_attribute4                        => l_tk_attribute4
1175                       ,p_attribute5                        => l_tk_attribute5
1176                       ,p_attribute6                        => l_tk_attribute6
1177                       ,p_attribute7                        => l_tk_attribute7
1178                       ,p_attribute8                        => l_tk_attribute8
1179                       ,p_attribute9                        => l_tk_attribute9
1180                       ,p_attribute10                       => l_tk_attribute10
1181                       ,p_wbs_record_version_number         => l_wbs_record_version_number
1182                       ,p_address_id                        => p_address_id
1183                       ,p_work_type_id                      => p_work_type_id
1184                       ,p_service_type_code                 => p_service_type_code
1185                       ,p_chargeable_flag                   => p_chargeable_flag
1186                       ,p_billable_flag                     => p_billable_flag
1187                       ,p_receive_project_invoice_flag      => p_receive_project_invoice_flag
1188                       ,p_task_id                           => x_task_id
1189                       ,x_return_status                     => l_return_status
1190                       ,x_msg_count                         => l_msg_count
1191                       ,x_msg_data                          => l_msg_data
1192                               );
1193              -- end xxlu changes
1194 
1195 --dbms_output.put_line( 'l_msg_data '||l_msg_data );
1196              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1197                 x_msg_count := FND_MSG_PUB.count_msg;
1198                 IF x_msg_count = 1 then
1199                    pa_interface_utils_pub.get_messages
1200                    (p_encoded        => FND_API.G_TRUE,
1201                     p_msg_index      => 1,
1202                     p_msg_count      => l_msg_count,
1203                     p_msg_data       => l_msg_data,
1204                     p_data           => l_data,
1205                     p_msg_index_out  => l_msg_index_out);
1206                     x_msg_data := l_data;
1207                 END IF;
1208              raise FND_API.G_EXC_ERROR;
1209              END IF;
1210 
1211 /* Commenting out for bug 3010538
1212             --Bug 2947492.
1213             --The following code will be executed if tasks are created from Self Service
1214             --Call plannable apis
1215 
1216             OPEN get_parent_task_id( x_task_id );
1217             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
1218             CLOSE get_parent_task_id;
1219 
1220             l_plannable_tasks_tbl(1).impacted_task_id   := x_task_id;
1221             l_plannable_tasks_tbl(1).action             := 'INSERT';
1222             l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
1223             l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
1224 
1225 
1226             PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
1227                     p_project_id         => p_project_id
1228                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
1229                   , x_return_status      => l_return_status
1230                   , x_msg_data           => l_msg_data
1231                   , x_msg_count          => l_msg_count
1232                 );
1233 
1234              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1235                 x_msg_count := FND_MSG_PUB.count_msg;
1236                 IF x_msg_count = 1 then
1237                    pa_interface_utils_pub.get_messages
1238                    (p_encoded        => FND_API.G_TRUE,
1239                     p_msg_index      => 1,
1240                     p_msg_count      => l_msg_count,
1241                     p_msg_data       => l_msg_data,
1242                     p_data           => l_data,
1243                     p_msg_index_out  => l_msg_index_out);
1244                     x_msg_data := l_data;
1245                 END IF;
1246              raise FND_API.G_EXC_ERROR;
1247              END IF;
1248             --End Bug 2947492.
1249 */ --bug 3010538
1250 
1251            END IF; --structure has published versions check
1252          END IF;  --smukka end if for l_link_task_flag ='N' added for sub project association
1253        END IF;  --financial check
1254          CLOSE cur_struc_type;
1255 
1256 END IF; --<<p_calling_module>>
1257 
1258 /* Commenting out for bug 3010538
1259 --Bug 2947492
1260 --If a task is created from Forms then the following code will be executed.
1261 --The reason to Split the code is to have performance.
1262 --When a task is created from AMG its not made plannable from this api. The proposal is to make kick off a
1263 --concurrent program from AMG
1264 IF p_calling_module = 'FORMS'
1265 THEN
1266 
1267          OPEN cur_struc_type;
1268          FETCH cur_struc_type INTO l_dummy_char;
1269          IF cur_struc_type%FOUND
1270          THEN
1271            l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
1272                                                      p_project_id);
1273            l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
1274                                                   p_project_id);
1275 
1276            IF (NVL( l_publised_version, 'N' ) = 'N') OR
1277               (l_publised_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
1278 
1279               --Call plannable apis
1280 
1281               OPEN get_parent_task_id( x_task_id );
1282               FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
1283               CLOSE get_parent_task_id;
1284 
1285               l_plannable_tasks_tbl(1).impacted_task_id   := x_task_id;
1286               l_plannable_tasks_tbl(1).action             := 'INSERT';
1287               l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
1288               l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
1289 
1290 
1291               PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
1292                     p_project_id         => p_project_id
1293                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
1294                   , x_return_status      => l_return_status
1295                   , x_msg_data           => l_msg_data
1296                   , x_msg_count          => l_msg_count
1297                 );
1298 
1299                  IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1300                      x_msg_count := FND_MSG_PUB.count_msg;
1301                      IF x_msg_count = 1 then
1302                         pa_interface_utils_pub.get_messages
1303                        (p_encoded        => FND_API.G_TRUE,
1304                          p_msg_index      => 1,
1305                          p_msg_count      => l_msg_count,
1306                          p_msg_data       => l_msg_data,
1307                          p_data           => l_data,
1308                          p_msg_index_out  => l_msg_index_out);
1309                        x_msg_data := l_data;
1310                      END IF;
1311                      raise FND_API.G_EXC_ERROR;
1312                  END IF;
1313            END IF; --<< l_publised_version >>
1314          END IF;  --<<cur_struc_type>>
1315 
1316 END IF;  --<< p_calling_module >>
1317 --Bug 2947492
1318 */ --bug 3010538
1319 
1320     x_return_status := FND_API.G_RET_STS_SUCCESS;
1321 
1322 EXCEPTION
1323     WHEN FND_API.G_EXC_ERROR THEN
1324       IF (p_commit = FND_API.G_TRUE) THEN
1325         ROLLBACK to CREATE_TASK_PRIVATE;
1326       END IF;
1327       x_msg_count := FND_MSG_PUB.count_msg;
1328       x_return_status := FND_API.G_RET_STS_ERROR;
1329     WHEN OTHERS THEN
1330       IF (p_commit = FND_API.G_TRUE) THEN
1331         ROLLBACK to CREATE_TASK_PRIVATE;
1332       END IF;
1333       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1334       x_msg_count := FND_MSG_PUB.count_msg;
1335       --put message
1336       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
1337                               p_procedure_name => 'Create_Task',
1338                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1339       RAISE;
1340 
1341 END Create_Task;
1342 
1343 -- API name                      : Update_Task
1344 -- Type                          : Private procedure
1345 -- Pre-reqs                      : None
1346 -- Return Value                  : N/A
1347 -- Prameters
1348 -- p_api_version          IN    NUMBER  N   Not Null    1.0
1349 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
1350 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
1351 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
1352 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
1353 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
1354 -- p_debug_mode       IN    VARCHAR2    N   Null    N
1355 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1356 -- p_task_id          IN    NUMBER  N   Not Null
1357 -- p_task_number          IN    VARCHAR2    N   Not Null
1358 -- p_task_name        IN    VARCHAR2    N   Not Null
1359 -- p_task_description   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1360 -- p_location_id          IN    NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1361 -- p_country          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1362 -- p_territory_code IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1363 -- p_state_region   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1364 -- p_city               IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1365 -- p_task_manager_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1366 -- p_task_manager_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1367 -- p_carrying_out_org_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1368 -- p_carrying_out_org_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1369 -- p_priority_code  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1370 -- p_TYPE_ID          IN    NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1371 -- p_status_code          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1372 -- p_inc_proj_progress_flag IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1373 -- p_pm_product_code    IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1374 -- p_pm_task_reference  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1375 -- p_closed_date          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1376 -- p_transaction_start_date IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1377 -- p_transaction_finish_date IN   DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1378 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1379 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1380 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1381 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1382 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1383 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1384 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1385 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1386 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1387 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1388 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1389 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1390 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1391 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1392 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1393 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1394 -- p_record_version_number  IN  NUMBER  N   Not Null
1395 -- x_return_status  OUT     VARCHAR2    N   Null
1396 -- x_msg_count        OUT   NUMBER  N   Null
1397 -- x_msg_data         OUT   VARCHAR2    N   Null
1398 --
1399 --  History
1400 --
1401 --  23-OCT-01   Majid Ansari             -Created
1402 --  31-JUL-02   H Siu                    -Added transaction dates
1403 --
1404 
1405 PROCEDURE Update_Task(
1406  p_api_version        IN    NUMBER  :=1.0,
1407  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
1408  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
1409  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
1410  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
1411  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
1412  p_debug_mode         IN    VARCHAR2    :='N',
1413  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1414  p_ref_task_id          IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1415  p_peer_or_sub          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1416  p_task_id              IN  NUMBER,
1417  p_task_number        IN    VARCHAR2,
1418  p_task_name          IN    VARCHAR2,
1419  p_task_description IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1420  p_location_id        IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1421  p_country              IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1422  p_territory_code         IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1423  p_state_region           IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1424  p_city             IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1425  p_task_manager_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1426  p_carrying_out_org_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1427  p_priority_code          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1428  p_TYPE_ID            IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1429  p_status_code        IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1430  p_inc_proj_progress_flag   IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1431  p_pm_product_code  IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1432  p_pm_task_reference    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1433  p_closed_date        IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
1434  p_transaction_start_date IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
1435  p_transaction_finish_date IN   DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
1436  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1437  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1438  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1439  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1440  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1441  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1442  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1443  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1444  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1445  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1446  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1447  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1448  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1449  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1450  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1451  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1452 
1453  p_address_id    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1454  p_address1      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1455  p_work_type_id  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1456  p_service_type_code IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1457  p_chargeable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1458  p_billable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1459  p_receive_project_invoice_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1460 
1461  p_task_weighting_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1462  p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1463  p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1464  p_wq_actual_entry_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1465  p_task_progress_entry_page_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1466  p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1467  p_phase_version_id         IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1468  p_parent_structure_id      IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1469  p_phase_code               IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1470  p_record_version_number    IN  NUMBER,
1471  -- xxlu added task DFF attributes
1472  p_tk_attribute_category     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1473  p_tk_attribute1     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1474  p_tk_attribute2     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1475  p_tk_attribute3     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1476  p_tk_attribute4     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1477  p_tk_attribute5     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1478  p_tk_attribute6     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1479  p_tk_attribute7     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1480  p_tk_attribute8     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1481  p_tk_attribute9     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1482  p_tk_attribute10    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1483  -- end xxlu changes
1484  p_Base_Perc_Comp_Deriv_Code     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1485   -- This param added for FP_M changes 3305199
1486  p_gen_etc_src_code      IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1487  -- Bug#3491609 : Workflow Chanegs FP M
1488  p_wf_item_type          IN    pa_proj_elements.wf_item_type%TYPE       :=NULL,
1489  p_wf_process            IN    pa_proj_elements.wf_process%TYPE         :=NULL,
1490  p_wf_lead_days          IN    pa_proj_elements.wf_start_lead_days%TYPE :=NULL,
1491  p_wf_enabled_flag       IN    pa_proj_elements.enable_wf_flag%TYPE     :=NULL,
1492   -- Bug#3491609 : Workflow Chanegs FP M
1493  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1494  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
1495  x_msg_data             OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1496  p_shared                 IN      VARCHAR2 := 'X' -- Bug 3451073
1497 ) IS
1498 
1499     l_msg_count                    NUMBER;
1500     l_msg_data                     VARCHAR2(250);
1501     l_return_status                VARCHAR2(2);
1502     l_error_message_code           VARCHAR2(250);
1503   l_data                     VARCHAR2(250);
1504   l_msg_index_out            NUMBER;
1505   l_change_allowed           VARCHAR2(1);
1506 
1507     l_carrying_out_org_id          NUMBER;
1508 
1509     l_task_description             PA_PROJ_ELEMENTS.description%TYPE;
1510     l_location_id                    NUMBER;
1511     --l_country
1512     --l_territory_code
1513     --l_state_region
1514     --l_city
1515     l_task_manager_id              NUMBER;
1516     l_task_name                  PA_PROJ_ELEMENTS.name%TYPE;
1517     l_priority_code            PA_PROJ_ELEMENTS.priority_code%TYPE;
1518     l_TYPE_ID                    PA_PROJ_ELEMENTS.TYPE_ID  %TYPE;
1519     l_status_code                    PA_PROJ_ELEMENTS.status_code%TYPE;
1520     l_wf_status_code               PA_PROJ_ELEMENTS.wf_status_code%TYPE;
1521     l_inc_proj_progress_flag         PA_PROJ_ELEMENTS.inc_proj_progress_flag%TYPE;
1522     l_pm_product_code              VARCHAR2(30); --PA_PROJ_ELEMENTS.pm_product_code%TYPE;
1523     l_pm_task_reference            VARCHAR2(30); --PA_PROJ_ELEMENTS.pm_task_reference%TYPE;
1524     l_closed_date                    PA_PROJ_ELEMENTS.closed_date%TYPE;
1525     --l_scheduled_start_date
1526     --l_scheduled_finish_date
1527     l_attribute_category         PA_PROJ_ELEMENTS.attribute_category%TYPE;
1528     l_attribute1                     PA_PROJ_ELEMENTS.attribute1%TYPE;
1529     l_attribute2                     PA_PROJ_ELEMENTS.attribute2%TYPE;
1530     l_attribute3                     PA_PROJ_ELEMENTS.attribute3%TYPE;
1531     l_attribute4                     PA_PROJ_ELEMENTS.attribute4%TYPE;
1532     l_attribute5                     PA_PROJ_ELEMENTS.attribute5%TYPE;
1533     l_attribute6                     PA_PROJ_ELEMENTS.attribute6%TYPE;
1534     l_attribute7                     PA_PROJ_ELEMENTS.attribute7%TYPE;
1535     l_attribute8                     PA_PROJ_ELEMENTS.attribute8%TYPE;
1536     l_attribute9                     PA_PROJ_ELEMENTS.attribute9%TYPE;
1537     l_attribute10                    PA_PROJ_ELEMENTS.attribute10%TYPE;
1538     l_attribute11                    PA_PROJ_ELEMENTS.attribute11%TYPE;
1539     l_attribute12                    PA_PROJ_ELEMENTS.attribute12%TYPE;
1540     l_attribute13                    PA_PROJ_ELEMENTS.attribute13%TYPE;
1541     l_attribute14                    PA_PROJ_ELEMENTS.attribute14%TYPE;
1542     l_attribute15                    PA_PROJ_ELEMENTS.attribute15%TYPE;
1543     l_phase_version_id                   PA_PROJ_ELEMENTS.phase_version_id%TYPE;
1544     l_phase_code                         PA_PROJ_ELEMENTS.phase_code%TYPE;
1545 
1546 --l_task_weighting_deriv_code PA_PROJ_ELEMENTS.task_weighting_deriv_code%TYPE;
1547 l_work_item_code PA_PROJ_ELEMENTS.wq_item_code%TYPE;
1548 l_uom_code PA_PROJ_ELEMENTS.wq_uom_code%TYPE;
1549 l_wq_actual_entry_code PA_PROJ_ELEMENTS.wq_actual_entry_code%TYPE;
1550 l_task_progress_entry_page_id PA_PROJ_ELEMENTS.task_progress_entry_page_id%TYPE;
1551 
1552     -- xxlu added task DFF attributes
1553     l_tk_attribute_category          pa_tasks.attribute_category%TYPE;
1554     l_tk_attribute1                  pa_tasks.attribute1%TYPE;
1555     l_tk_attribute2                  pa_tasks.attribute2%TYPE;
1556     l_tk_attribute3                  pa_tasks.attribute3%TYPE;
1557     l_tk_attribute4                  pa_tasks.attribute4%TYPE;
1558     l_tk_attribute5                  pa_tasks.attribute5%TYPE;
1559     l_tk_attribute6                  pa_tasks.attribute6%TYPE;
1560     l_tk_attribute7                  pa_tasks.attribute7%TYPE;
1561     l_tk_attribute8                  pa_tasks.attribute8%TYPE;
1562     l_tk_attribute9                  pa_tasks.attribute9%TYPE;
1563     l_tk_attribute10                   pa_tasks.attribute10%TYPE;
1564     -- end xxlu changes
1565 
1566     --hsiu added for task status
1567     l_task_status_changed                varchar2(1);
1568     --end task status changes
1569 
1570    -- Changed Pa_tasks to pa_proj_elements for Bug 3809523
1571    l_task_number    pa_proj_elements.element_number%TYPE := p_task_number; --ADDED FOR BUG 3705333
1572    la_task_name      pa_proj_elements.name%TYPE  := p_task_name;  --ADDED FOR BUG 3705333
1573     cursor get_page_name(c_page_id NUMBER)
1574     IS
1575       SELECT page_name
1576         from pa_page_layouts
1577        where page_id = c_page_id
1578          and page_type_code = 'AI';
1579 
1580     cursor get_current_page(c_object_id NUMBER)
1581     IS
1582       SELECT object_page_layout_id, record_version_number
1583         from pa_object_page_layouts
1584        where object_id = c_object_id
1585          and object_type = 'PA_TASKS'
1586          and page_type_code = 'AI';
1587 
1588     l_opl_id       NUMBER;
1589     l_page_name    pa_page_layouts.page_name%TYPE;
1590     l_opl_rvn      NUMBER;
1591 
1592 --hsiu
1593 --added for advanced structure - versioning
1594     l_versioned    VARCHAR2(1) := 'N';
1595     l_shared       VARCHAR2(1) := 'N';
1596 --end changes
1597   --3035902: process update flag changes
1598     l_wp_type      VARCHAR2(1);
1599   --3035902: end process update flag changes
1600 
1601    CURSOR cur_proj_elems
1602    IS
1603      SELECT rowid
1604             --project_id, object_type, record_version_number
1605            ,PROJ_ELEMENT_ID
1606            ,PROJECT_ID
1607            ,OBJECT_TYPE
1608            ,ELEMENT_NUMBER
1609            ,NAME
1610            ,DESCRIPTION
1611            ,STATUS_CODE
1612            ,WF_STATUS_CODE
1613            ,PM_SOURCE_CODE
1614            ,PM_SOURCE_REFERENCE
1615            ,CLOSED_DATE
1616            ,LOCATION_ID
1617            ,MANAGER_PERSON_ID
1618            ,CARRYING_OUT_ORGANIZATION_ID
1619            ,TYPE_ID
1620            ,PRIORITY_CODE
1621            ,INC_PROJ_PROGRESS_FLAG
1622            ,RECORD_VERSION_NUMBER
1623            ,ATTRIBUTE_CATEGORY
1624            ,ATTRIBUTE1
1625            ,ATTRIBUTE2
1626            ,ATTRIBUTE3
1627            ,ATTRIBUTE4
1628            ,ATTRIBUTE5
1629            ,ATTRIBUTE6
1630            ,ATTRIBUTE7
1631            ,ATTRIBUTE8
1632            ,ATTRIBUTE9
1633            ,ATTRIBUTE10
1634            ,ATTRIBUTE11
1635            ,ATTRIBUTE12
1636            ,ATTRIBUTE13
1637            ,ATTRIBUTE14
1638            ,ATTRIBUTE15
1639            ,WQ_ITEM_CODE
1640            ,WQ_UOM_CODE
1641            ,WQ_ACTUAL_ENTRY_CODE
1642            ,TASK_PROGRESS_ENTRY_PAGE_ID
1643            ,PHASE_VERSION_ID
1644            ,PHASE_CODE
1645            ,PARENT_STRUCTURE_ID
1646            ,BASE_PERCENT_COMP_DERIV_CODE
1647        FROM PA_PROJ_ELEMENTS
1648       WHERE proj_element_id = p_task_id;
1649 
1650    v_cur_proj_elems_rec cur_proj_elems%ROWTYPE;
1651 
1652   l_dummy_char                  VARCHAR2(1);
1653   l_published_version           VARCHAR2(1);
1654   l_structure_id                NUMBER;
1655   l_project_id                  NUMBER;
1656   l_parent_task_id              NUMBER;
1657   l_top_task_id                 NUMBER;
1658   l_wbs_level                   NUMBER;
1659   l_full_shared         VARCHAR2(30);
1660 
1661     CURSOR cur_struc_type( c_structure_id NUMBER )
1662     IS
1663       SELECT 'Y'
1664         FROM pa_proj_structure_types ppst
1665             ,pa_structure_types pst
1666        WHERE ppst.proj_element_id = c_structure_id
1667          AND ppst.structure_type_id = pst.structure_type_id
1668          AND pst.structure_type_class_code IN( 'FINANCIAL' );
1669 
1670 -- Bug 2827063 Tuned the following cursor to use exists
1671     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
1672       select 'Y' from dual
1673       where exists
1674     (select 'xyz'
1675      from pa_proj_elem_ver_structure
1676          where proj_element_id = c_structure_id
1677          AND project_id = c_project_id
1678          and STATUS_CODE = 'STRUCTURE_PUBLISHED');
1679 
1680    CURSOR cur_struc_id
1681    IS
1682      SELECT a.proj_element_id
1683        FROM pa_proj_element_versions a, pa_proj_element_versions b
1684       WHERE a.element_version_id = b.parent_structure_version_id
1685         AND b.proj_element_id = p_task_id;
1686 
1687    CURSOR get_task_types_attr(c_task_type_id NUMBER) IS
1688       select WORK_ITEM_CODE, UOM_CODE,
1689              ACTUAL_WQ_ENTRY_CODE, TASK_PROGRESS_ENTRY_PAGE_ID,
1690              prog_entry_enable_flag,BASE_PERCENT_COMP_DERIV_CODE     --Jun 28th
1691         from pa_task_types
1692        where task_type_id = c_task_type_id;
1693    get_task_type_attr_rec  get_task_types_attr%ROWTYPE;
1694    get_task_type_attr_rec_old get_task_types_attr%ROWTYPE;
1695 
1696    --hsiu task status changes
1697    cursor get_latest_task_ver_id IS
1698      select b.parent_structure_version_id, b.element_version_id
1699        from pa_proj_elements a,
1700             pa_proj_element_versions b,
1701             pa_proj_elem_ver_structure c
1702       where a.proj_element_id = p_task_id
1703         and a.project_id = b.project_id
1704         and a.proj_element_id = b.proj_element_id
1705         and b.project_id = c.project_id
1706         and b.parent_structure_version_id = c.element_version_id
1707         and c.LATEST_EFF_PUBLISHED_FLAG = 'Y';
1708    l_latest_task_ver_rec    get_latest_task_ver_id%ROWTYPE;
1709 --hsiu added for bug 2634195
1710    l_new_tt_wq_enabled  VARCHAR2(1);
1711 
1712 --bug 3010538
1713 l_update_WBS_flag    VARCHAR2(1) := 'N';
1714 l_template_flag      VARCHAR2(1) := 'N';
1715 CURSOR cur_proj_tmp(c_project_id NUMBER )
1716 IS
1717   SELECT template_flag
1718     FROM pa_projects_all
1719    WHERE project_id = c_project_id;
1720 --bug 3010538
1721 
1722 -- Bug 3075609. If a task type is changed to a non progressible
1723 -- one this flag is set to 'Y' so that the weightages can be
1724 -- properly updated after updating the task details.
1725 l_update_working_ver_weight   VARCHAR2(1);
1726 
1727 --fpm changes
1728 l_fin_task_flag   VARCHAR2(1);    --added to avoid multiple calls to check_fin_task_flag api
1729 --
1730 --Bug 3475920
1731 CURSOR get_task_versions_id(cp_task_id NUMBER,cp_project_id NUMBER) IS
1732 SELECT ppev.element_Version_id
1733   FROM pa_proj_element_versions ppev,
1734        pa_proj_elem_ver_structure ppevs
1735  WHERE ppev.project_id = cp_project_id
1736    and ppev.proj_element_id = cp_task_id
1737    and ppev.project_id = ppevs.project_id
1738    and ppevs.element_version_id = ppev.parent_structure_version_id
1739    and ppevs.status_code <> 'STRUCTURE_PUBLISHED';
1740 --
1741 CURSOR get_task_versions_id2(cp_task_id NUMBER,cp_project_id NUMBER) IS
1742 SELECT ppev.element_Version_id
1743   FROM pa_proj_element_versions ppev,
1744        pa_proj_elem_ver_structure ppevs
1745  WHERE ppev.project_id = cp_project_id
1746    and ppev.proj_element_id = cp_task_id
1747    and ppev.project_id = ppevs.project_id
1748    and ppevs.element_version_id = ppev.parent_structure_version_id
1749    and ppevs.status_code = 'STRUCTURE_PUBLISHED';
1750    l_task_version_id  NUMBER;
1751    l_del_cnt          NUMBER:=0;
1752    l_parent_task_ver_id NUMBER;
1753    l_sub_task_ver_id    NUMBER;
1754 --
1755 --Bug 3705333 start
1756 CURSOR get_task_name_or_number(c_project_id NUMBER,c_task_id NUMBER )
1757     IS
1758       SELECT task_name, task_number
1759         FROM pa_tasks
1760         WHERE project_id = c_project_id
1761         AND task_id = c_task_id;
1762 --Bug 3705333 end
1763    l_base_perc_comp_deriv_code VARCHAR2(30);
1764       l_tt_base_perc_comp_der_cd  VARCHAR2(30);  --Jun 28th
1765 
1766 --Bug 3957706
1767    l_prog_method_code PA_PROJ_ELEMENTS.BASE_PERCENT_COMP_DERIV_CODE%TYPE;
1768 
1769 BEGIN
1770 
1771     IF (p_debug_mode = 'Y') THEN
1772       pa_debug.debug('PA_TASK_PVT1.UPDATE_TASK begin');
1773     END IF;
1774 
1775     IF (p_commit = FND_API.G_TRUE) THEN
1776       savepoint UPDATE_TASK_PRIVATE;
1777     END IF;
1778 
1779     IF (p_debug_mode = 'Y') THEN
1780       pa_debug.debug('Performing validations');
1781     END IF;
1782 
1783 --dbms_output.put_line(( 'Get the basic attributes of the task.' );
1784 
1785    --Get the basic attributes of the task
1786    OPEN cur_proj_elems;
1787    FETCH cur_proj_elems INTO v_cur_proj_elems_rec;
1788    IF cur_proj_elems%FOUND
1789    THEN
1790      -- Bug 2827063 Put the following assignment here instead of down in the code
1791      l_project_id := v_cur_proj_elems_rec.PROJECT_ID;
1792 
1793 --moved from below to be used for bug 3010538 to improve performance.
1794       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
1795                                                      l_project_id);
1796       /* Commented the below statement and moved into the if condition for bug 3451073
1797       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
1798                                                   l_project_id); */
1799       /* Added the If conidtion for Bug 3451073 to improve performance*/
1800       IF p_shared = 'X'
1801       THEN
1802         l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
1803                                                      l_project_id);
1804       ELSE
1805         l_shared := p_shared;
1806       END IF;
1807 
1808       --3035902: process update flag changes
1809       l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(v_cur_proj_elems_rec.PARENT_STRUCTURE_ID, 'WORKPLAN');
1810       --3035902: end process update flag changes
1811 
1812       --moving up for better performance by using the same code for bug 3010538
1813         -- Bug 2827063 Put the code to get structure id here instead of down.
1814      /* we dont need the following cursor to get the structure id
1815         we can as well get the parent structure id from the cursor above.
1816       OPEN cur_struc_id;
1817       FETCH cur_struc_id INTO l_structure_id;
1818       CLOSE cur_struc_id;
1819       */
1820       l_structure_id := v_cur_proj_elems_rec.parent_structure_id;
1821 
1822 --bug 2789483
1823 
1824       l_published_version := 'N';
1825       OPEN cur_pub_versions( l_structure_id, l_project_id );
1826       FETCH cur_pub_versions INTO l_published_version;
1827       CLOSE cur_pub_versions;
1828 --bug 2789483
1829 --end moving up for better performance by using the same code for bug 3010538
1830 
1831 
1832 
1833       if v_cur_proj_elems_rec.record_version_number <> p_record_version_number
1834       then
1835         FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_CHANGED');
1836         APP_EXCEPTION.Raise_Exception;
1837       end if;
1838 
1839       /* Added for Bug 3705333*/
1840       --dbms_output.put_line(('value of p_task_number'||p_task_number);
1841   If ((p_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
1842     (p_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
1843     THEN
1844           OPEN get_task_name_or_number( l_project_id,p_task_id );
1845           FETCH get_task_name_or_number INTO la_task_name,l_task_number;
1846           CLOSE  get_task_name_or_number;
1847   END IF;
1848 /* changes end for bug 3705333*/
1849 --dbms_output.put_line('Value of l_task_number'||l_task_number);
1850 --dbms_output.put_line( 'Check if the task name is unique within the project.' );
1851 /** Commenting the code below for Bug 4120380. This check is same as the check implemented by
1852 the constraint PA_PROJ_ELEMENTS_U2. This needs to commented to faciliate updation of task_number in the
1853 case below:
1854 Task 1.0 to be re-named to Taslk 1.1 and Task 1.1 to be renamed to Task 1.0 **/
1855       --Check if the task name is unique within the project
1856 /* Code below is uncommented for bug 4218947 **/
1857      If (PA_PROJ_ELEMENTS_UTILS.check_element_number_unique(l_task_number, --Bug 3705333 changed from p_task_number to l_task_number
1858                                                            p_task_id,
1859                                                            v_cur_proj_elems_rec.project_id,
1860                                                            v_cur_proj_elems_rec.PARENT_STRUCTURE_ID) <> 'Y') THEN
1861         --Name is not unique
1862         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_TASK_NUMBER_UNIQUE');
1863         l_msg_data := 'PA_PS_TASK_NUMBER_UNIQUE';
1864     -- start of bug 3459905
1865      l_msg_count := FND_MSG_PUB.count_msg;
1866       IF l_msg_count > 0 THEN
1867         x_msg_count := l_msg_count;
1868         IF x_msg_count = 1 THEN
1869            x_msg_data := l_msg_data;
1870         END IF;
1871         RAISE FND_API.G_EXC_ERROR;
1872       END IF;
1873         -- end of bug 3459905
1874       END IF;
1875 /** End of Code Commenting for Bug 4120380 **/
1876 /** Code above is uncommented for bug 4218947 **/
1877 --dbms_output.put_line(( 'After Check if the task name is unique within the project.' );
1878 
1879         /* start of bug 3459905   --Check if there is any error.
1880       l_msg_count := FND_MSG_PUB.count_msg;
1881       IF l_msg_count > 0 THEN
1882         x_msg_count := l_msg_count;
1883         IF x_msg_count = 1 THEN
1884            x_msg_data := l_msg_data;
1885         END IF;
1886         RAISE FND_API.G_EXC_ERROR;
1887       END IF;
1888 end of bug 3459905 */
1889 
1890 -- hyau
1891 -- Lifecycle Phase validation Changes. Check if task has phase associated with it
1892   IF ( p_phase_version_id IS NOT NULL) AND
1893        (p_phase_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1894 
1895     -- check if it is top task
1896     IF ('N' = pa_proj_elements_utils.IS_TOP_TASK_ACROSS_ALL_VER(
1897               p_task_id)) THEN
1898       --Is not a top task across all versions. Error
1899       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NOT_ALL_TOP_TASKS');
1900       -- start of bug 3459905
1901       --Check if there is any error.
1902         l_msg_count := FND_MSG_PUB.count_msg;
1903         IF l_msg_count > 0 THEN
1904           x_msg_count := l_msg_count;
1905            IF x_msg_count = 1 THEN
1906               x_msg_data := l_msg_data;
1907           END IF;
1908           RAISE FND_API.G_EXC_ERROR;
1909         END IF;
1910      -- end of bug 3459905
1911     END IF;
1912 
1913     -- check if the current phase is already used.
1914     IF ('Y' = pa_proj_elements_utils.CHECK_PHASE_IN_USE(
1915               p_task_id,
1916               p_phase_version_id)) THEN
1917       -- Phase already in use in the structure. Error
1918       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_PHASE_IN_USE');
1919       -- start of bug 3459905
1920       --Check if there is any error.
1921         l_msg_count := FND_MSG_PUB.count_msg;
1922         IF l_msg_count > 0 THEN
1923           x_msg_count := l_msg_count;
1924            IF x_msg_count = 1 THEN
1925               x_msg_data := l_msg_data;
1926           END IF;
1927           RAISE FND_API.G_EXC_ERROR;
1928         END IF;
1929      -- end of bug 3459905
1930     END IF;
1931 /* start of bug 3459905
1932         --Check if there is any error.
1933         l_msg_count := FND_MSG_PUB.count_msg;
1934         IF l_msg_count > 0 THEN
1935           x_msg_count := l_msg_count;
1936            IF x_msg_count = 1 THEN
1937               x_msg_data := l_msg_data;
1938           END IF;
1939           RAISE FND_API.G_EXC_ERROR;
1940         END IF;
1941     end of bug 3459905 */
1942   END IF;
1943   -- end hyau. Lifecycle Phase validation Changes.
1944 
1945 --Check if base percent derivation code can be modified if different
1946        /* <Start> Bug 3957706*/
1947   IF (p_TYPE_ID   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1948           --Get the details of the Task Type
1949         OPEN get_task_types_attr(p_type_id);
1950         FETCH get_task_types_attr into get_task_type_attr_rec;
1951         CLOSE get_task_types_attr;
1952   END IF ;
1953 
1954         --If this p_base_perc_comp_deriv_code param is not passed
1955         --Retrieve its value from the DB (the tasks' base percent deriv.code)
1956 
1957         IF (p_base_perc_comp_deriv_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1958         THEN
1959              l_prog_method_code := v_cur_proj_elems_rec.BASE_PERCENT_COMP_DERIV_CODE;
1960         ELSE
1961              l_prog_method_code := p_base_perc_comp_deriv_code ;
1962         END IF ;
1963 
1964         --If This Value 'l_prog_method_code' is Still NULL or Miss_Char
1965         --Then we make it as the passed Task Type's BASE_PERCENT_COMP_DERIV_CODE
1966 
1967         IF(l_prog_method_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1968            OR l_prog_method_code IS NULL)
1969         THEN
1970             IF (p_TYPE_ID   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1971                  l_prog_method_code := get_task_type_attr_rec.BASE_PERCENT_COMP_DERIV_CODE ;
1972             END IF;
1973         END IF;
1974 
1975         --If the BASE_PERCENT_COMP_DERIV_CODE of the task now is different
1976         --than that of the task's DB BASE_PERCENT_COMP_DERIV_CODE
1977         -- AND
1978         --If the task's new BASE_PERCENT_COMP_DERIV_CODE is DELIVERABLE
1979         --THEN
1980         --Place a Call to PA_DELIVERABLE_UTILS.CHECK_PROGRESS_MTH_CODE_VALID API
1981         --Which will validate that ,this task is not associated with any deliverable
1982         --that has already association with Deliverable based tasks
1983 
1984         IF ( nvl(l_prog_method_code,'Y') <> nvl(v_cur_proj_elems_rec.BASE_PERCENT_COMP_DERIV_CODE,'Y') )
1985            AND (l_prog_method_code = 'DELIVERABLE')
1986         THEN
1987               PA_DELIVERABLE_UTILS.CHECK_PROGRESS_MTH_CODE_VALID
1988               (
1989                  p_task_id => p_task_id,
1990                  p_prog_method_code => l_prog_method_code ,
1991                  x_return_status => x_return_status,
1992                  x_msg_count => x_msg_count,
1993                  x_msg_data => x_msg_data
1994                   );
1995 
1996              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1997                   RAISE FND_API.G_EXC_ERROR;
1998              END IF ;
1999 
2000         END IF ;
2001         /*<End> Bug 3957706*/
2002 
2003 --check if task type can be modified if different
2004       l_new_tt_wq_enabled := NULL;
2005       IF (p_TYPE_ID   <> v_cur_proj_elems_rec.TYPE_ID   AND p_TYPE_ID   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
2006 
2007          PA_TASK_TYPE_UTILS.change_task_type_allowed(
2008           p_task_id => p_task_id,
2009           p_from_task_type_id => v_cur_proj_elems_rec.TYPE_ID  ,
2010           p_to_task_type_id => p_TYPE_ID  ,
2011           x_change_allowed => l_change_allowed,
2012           x_return_status => l_return_status,
2013           x_msg_count => l_msg_count,
2014           x_msg_data => l_msg_data
2015           );
2016 
2017         IF (l_change_allowed = 'N') THEN
2018           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CHG_TASK_TYPE_ERR');
2019           l_msg_data := 'PA_PS_CHG_TASK_TYPE_ERR';
2020        --Check if there is any error.
2021        -- start of bug 3459905
2022         l_msg_count := FND_MSG_PUB.count_msg;
2023         IF l_msg_count > 0 THEN
2024           x_msg_count := l_msg_count;
2025            IF x_msg_count = 1 THEN
2026               x_msg_data := l_msg_data;
2027           END IF;
2028           RAISE FND_API.G_EXC_ERROR;
2029         END IF;
2030     -- end of bug 3459905
2031         END IF;
2032 
2033         IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_effective(p_type_id)) THEN
2034           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_EFF_TASK_TYPE_ERR');
2035           l_msg_data := 'PA_PS_EFF_TASK_TYPE_ERR';
2036        -- start of bug 3459905
2037        --Check if there is any error.
2038         l_msg_count := FND_MSG_PUB.count_msg;
2039         IF l_msg_count > 0 THEN
2040           x_msg_count := l_msg_count;
2041            IF x_msg_count = 1 THEN
2042               x_msg_data := l_msg_data;
2043           END IF;
2044           RAISE FND_API.G_EXC_ERROR;
2045         END IF;
2046     -- end of bug 3459905
2047         END IF;
2048 /*   start of bug 3459905
2049         --Check if there is any error.
2050         l_msg_count := FND_MSG_PUB.count_msg;
2051         IF l_msg_count > 0 THEN
2052           x_msg_count := l_msg_count;
2053            IF x_msg_count = 1 THEN
2054               x_msg_data := l_msg_data;
2055           END IF;
2056           RAISE FND_API.G_EXC_ERROR;
2057         END IF;
2058 end of bug 3458052*/
2059         --new type; copy all attributes
2060 /*      Moved this code above for Bug 3957706
2061         OPEN get_task_types_attr(p_type_id);
2062         FETCH get_task_types_attr into get_task_type_attr_rec;
2063         CLOSE get_task_types_attr;
2064 */
2065         l_work_item_code := get_task_type_attr_rec.WORK_ITEM_CODE;
2066         l_uom_code := get_task_type_attr_rec.UOM_CODE;
2067         l_wq_actual_entry_code := get_task_type_attr_rec.ACTUAL_WQ_ENTRY_CODE;
2068         l_TYPE_ID   := p_TYPE_ID;
2069         l_tt_base_perc_comp_der_cd:=get_task_type_attr_rec.BASE_PERCENT_COMP_DERIV_CODE;  --Jun 28th
2070 
2071         --hsiu: bug 2663532
2072         --check if progressable; if not, need to set weighting for
2073         --all working versions to 0.
2074 
2075 
2076         OPEN get_task_types_attr(v_cur_proj_elems_rec.TYPE_ID);
2077         FETCH get_task_types_attr into get_task_type_attr_rec_old;
2078         CLOSE get_task_types_attr;
2079 
2080         IF (get_task_type_attr_rec_old.prog_entry_enable_flag = 'Y' AND
2081             get_task_type_attr_rec.prog_entry_enable_flag = 'N') THEN
2082           -- Bug 3075609. We'll update after the task type id is updated for the task.
2083           l_update_working_ver_weight := 'Y';
2084           --set working versions weighting to 0
2085           --pro-rate peer tasks
2086 /*          PA_TASK_PVT1.UPDATE_WORKING_VER_WEIGHT(
2087             p_task_id => p_task_id
2088            ,p_weighting => 0
2089            ,x_return_status => l_return_status
2090            ,x_msg_count => l_msg_count
2091            ,x_msg_data => l_msg_data);
2092 
2093           --Check if there is any error.
2094           l_msg_count := FND_MSG_PUB.count_msg;
2095           IF l_msg_count > 0 THEN
2096             x_msg_count := l_msg_count;
2097              IF x_msg_count = 1 THEN
2098                 x_msg_data := l_msg_data;
2099             END IF;
2100             RAISE FND_API.G_EXC_ERROR;
2101           END IF;
2102 */
2103         END IF;
2104         --end bug 2663532
2105 
2106 --bug 3010538
2107 --bug 3058098
2108 --for workplan structure or shared structure only
2109         --3035902: process update flag changes
2110         --added condition for sharing and split structures
2111         IF ((l_shared = 'Y') OR
2112             (l_shared = 'N' AND l_wp_type = 'Y')) THEN
2113           IF (get_task_type_attr_rec_old.prog_entry_enable_flag <>
2114             get_task_type_attr_rec.prog_entry_enable_flag) AND
2115             PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( l_project_id ) in ( 'DURATION', 'EFFORT' )
2116           THEN
2117             OPEN cur_proj_tmp( l_project_id );
2118             FETCH cur_proj_tmp INTO l_template_flag;
2119             CLOSE cur_proj_tmp;
2120             IF NVL( l_versioned, 'N' ) = 'N' OR NVl( l_template_flag, 'N' ) = 'Y'
2121             THEN
2122                UPDATE pa_proj_elem_ver_structure
2123                   SET process_update_wbs_flag = 'Y'
2124                 WHERE project_id = l_project_id
2125                   AND proj_element_id  = l_structure_id;
2126             ELSIF NVL( l_versioned, 'N' ) = 'Y'
2127             THEN
2128                UPDATE pa_proj_elem_ver_structure
2129                   SET process_update_wbs_flag = 'Y'
2130                 WHERE project_id = l_project_id
2131                   AND proj_element_id  = l_structure_id
2132                   AND status_code = 'STRUCTURE_WORKING';
2133             END IF;
2134           END IF;
2135         END IF;
2136 --end bug 3010538
2137 
2138       ELSE
2139         l_TYPE_ID   := v_cur_proj_elems_rec.TYPE_ID  ;
2140 
2141         --check change work item ok
2142         IF (p_work_item_code <> v_cur_proj_elems_rec.WQ_ITEM_CODE AND
2143             p_work_item_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2144 
2145           PA_TASK_TYPE_UTILS.change_wi_allowed(
2146             p_task_id => p_task_id,
2147             x_return_status => l_return_status,
2148             x_msg_count => l_msg_count,
2149             x_msg_data => l_msg_data
2150           );
2151 
2152           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2153             l_msg_count := FND_MSG_PUB.count_msg;
2154             IF l_msg_count > 0 THEN
2155               x_msg_count := l_msg_count;
2156               IF x_msg_count = 1 THEN
2157                 x_msg_data := l_msg_data;
2158               END IF;
2159               RAISE FND_API.G_EXC_ERROR;
2160             END IF;
2161           END IF;
2162         END IF;
2163 
2164         IF (p_work_item_code IS NOT NULL AND p_work_item_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2165           l_work_item_code := v_cur_proj_elems_rec.WQ_ITEM_CODE;
2166         ELSE
2167           IF (PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_TYPE_ID) = 'Y' AND
2168               PA_PROGRESS_UTILS.get_project_wq_flag(v_cur_proj_elems_rec.project_id) = 'Y') THEN
2169             l_work_item_code := p_work_item_code;
2170           ELSE
2171             l_work_item_code := null;
2172           END IF;
2173         END IF;
2174 
2175         --check change uom
2176         IF (p_UOM_code <> v_cur_proj_elems_rec.WQ_UOM_CODE AND
2177             p_UOM_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2178 
2179           PA_TASK_TYPE_UTILS.change_uom_allowed(
2180             p_task_id => p_task_id,
2181             x_return_status => l_return_status,
2182             x_msg_count => l_msg_count,
2183             x_msg_data => l_msg_data
2184           );
2185 
2186           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2187             l_msg_count := FND_MSG_PUB.count_msg;
2188             IF l_msg_count > 0 THEN
2189               x_msg_count := l_msg_count;
2190               IF x_msg_count = 1 THEN
2191                   x_msg_data := l_msg_data;
2192               END IF;
2193               RAISE FND_API.G_EXC_ERROR;
2194             END IF;
2195           END IF;
2196         END IF;
2197 
2198         IF (p_uom_code IS NOT NULL and p_uom_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2199           l_uom_code := v_cur_proj_elems_rec.WQ_UOM_CODE;
2200         ELSE
2201           IF (PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_TYPE_ID) = 'Y' AND
2202               PA_PROGRESS_UTILS.get_project_wq_flag(v_cur_proj_elems_rec.project_id) = 'Y') THEN
2203             l_uom_code := p_uom_code;
2204           ELSE
2205             l_uom_code := NULL;
2206           END IF;
2207         END IF;
2208 
2209         IF (p_wq_actual_entry_code IS NOT NULL and p_wq_actual_entry_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2210           l_wq_actual_entry_code := v_cur_proj_elems_rec.WQ_ACTUAL_ENTRY_CODE;
2211         ELSE
2212           l_wq_actual_entry_code := p_wq_actual_entry_code;
2213         END IF;
2214 
2215       END IF;
2216 
2217 
2218       IF ( p_task_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_task_description IS NOT NULL )
2219       THEN
2220           l_task_description := v_cur_proj_elems_rec.description;
2221       ELSE
2222           l_task_description := p_task_description;
2223       END IF;
2224 
2225 /* Move the following code up to have better performance so that the same code
2226   can be used for bug 3010538
2227     -- Bug 2827063 Put the code to get structure id here instead of down.
2228       OPEN cur_struc_id;
2229       FETCH cur_struc_id INTO l_structure_id;
2230       CLOSE cur_struc_id;
2231 
2232 --bug 2789483
2233 
2234       l_published_version := 'N';
2235       OPEN cur_pub_versions( l_structure_id, l_project_id );
2236       FETCH cur_pub_versions INTO l_published_version;
2237       CLOSE cur_pub_versions;
2238 --bug 2789483
2239 */ --moving up for better performance by using the same code for bug 3010538
2240 
2241     --hsiu task status changes
2242     l_task_status_changed := 'N';
2243 
2244     -- Bug 4429929 : Now All task status excpet Cancal can be changed thru Progress Only
2245 
2246  --   IF ( p_STATUS_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_STATUS_CODE IS NOT NULL ) Bug 2827063
2247       IF ( p_STATUS_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_STATUS_CODE IS NULL )
2248        OR l_published_version = 'N' --bug 2789483
2249     THEN
2250         l_STATUS_CODE := v_cur_proj_elems_rec.STATUS_CODE;
2251     ELSE
2252 
2253         -- Amit : Code added so that task status can't be changed for a cancelled task
2254         IF (v_cur_proj_elems_rec.STATUS_CODE <> p_STATUS_CODE AND
2255             PA_PROGRESS_UTILS.get_system_task_status(v_cur_proj_elems_rec.STATUS_CODE)= 'CANCELLED')
2256         THEN
2257            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2258                                 p_msg_name => 'PA_TSK_STS_CANT_CHANGED');
2259            raise FND_API.G_EXC_ERROR;
2260         END IF;
2261         --marked as changed only if different
2262         l_status_code := p_status_code;
2263 
2264         If (v_cur_proj_elems_rec.status_code <> p_status_code AND PA_PROGRESS_UTILS.get_system_task_status(p_status_code)= 'CANCELLED') THEN
2265           l_task_status_changed := 'Y';
2266         ELSE -- Bug 4429929
2267       l_STATUS_CODE := v_cur_proj_elems_rec.STATUS_CODE;
2268         END IF;
2269     END IF;
2270 --
2271         --Bug No 3475920
2272     IF l_versioned = 'Y' THEN
2273            OPEN get_task_versions_id(p_task_id,l_project_id);
2274            LOOP
2275               FETCH get_task_versions_id INTO l_task_version_id;
2276           EXIT WHEN get_task_versions_id%NOTFOUND;
2277           l_del_cnt:=PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hie_upd(l_task_version_id);
2278 --              IF l_del_cnt >=1 AND p_Base_Perc_Comp_Deriv_Code LIKE 'DELIVERABLE'  THEN     --Jun 28th
2279               IF l_del_cnt >=1 AND (p_Base_Perc_Comp_Deriv_Code LIKE 'DELIVERABLE'
2280                                       OR  l_tt_base_perc_comp_der_cd  LIKE 'DELIVERABLE' ) THEN  --Jun 28th
2281                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2282                                       p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
2283                  raise FND_API.G_EXC_ERROR;
2284               END IF;
2285            END LOOP;
2286            CLOSE get_task_versions_id;
2287     ELSE
2288            OPEN get_task_versions_id2(p_task_id,l_project_id);
2289            LOOP
2290               FETCH get_task_versions_id2 INTO l_task_version_id;
2291           EXIT WHEN get_task_versions_id2%NOTFOUND;
2292           l_del_cnt:=PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hie_upd(l_task_version_id);
2293 --              IF l_del_cnt >=1 AND p_Base_Perc_Comp_Deriv_Code LIKE 'DELIVERABLE'  THEN    --Jun 28th
2294               IF l_del_cnt >=1 AND (p_Base_Perc_Comp_Deriv_Code LIKE 'DELIVERABLE'
2295                                       OR  l_tt_base_perc_comp_der_cd  LIKE 'DELIVERABLE' ) THEN  --Jun 28th
2296                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2297                                       p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
2298                  raise FND_API.G_EXC_ERROR;
2299               END IF;
2300            END LOOP;
2301            CLOSE get_task_versions_id2;
2302     END IF;
2303 --
2304     --end task status changes
2305 
2306     IF ( p_PM_PRODUCT_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_PM_PRODUCT_CODE IS NOT NULL )
2307     THEN
2308        l_PM_PRODUCT_CODE := v_cur_proj_elems_rec.PM_SOURCE_CODE;
2309     ELSE
2310         l_PM_PRODUCT_CODE := p_PM_PRODUCT_CODE;
2311     END IF;
2312 
2313     IF ( p_PM_TASK_REFERENCE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_PM_TASK_REFERENCE IS NOT NULL )
2314     THEN
2315         l_PM_TASK_REFERENCE := v_cur_proj_elems_rec.PM_SOURCE_REFERENCE;
2316     ELSE
2317         l_PM_TASK_REFERENCE := p_PM_TASK_REFERENCE;
2318     END IF;
2319 
2320     IF ( p_location_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_location_id IS NOT NULL )
2321     THEN
2322        l_location_id :=  v_cur_proj_elems_rec.location_id;
2323     ELSE
2324        l_location_id := p_location_id;
2325     END IF;
2326 
2327     /*IF ( p_country = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_country IS NOT NULL )
2328     THEN
2329        l_country := v_cur_proj_elems_rec.country;
2330     ELSE
2331        l_country := p_country;
2332     END IF;
2333 
2334 
2335     IF ( p_territory_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_territory_code IS NOT NULL )
2336     THEN
2337         l_territory_code := v_cur_proj_elems_rec.;
2338     ELSE
2339         l_territory_code := p_territory_code;
2340     END IF;*/
2341 
2342     IF ( p_task_manager_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_task_manager_id IS NOT NULL )
2343     THEN
2344        l_task_manager_id := v_cur_proj_elems_rec.manager_person_id;
2345     ELSE
2346        l_task_manager_id := p_task_manager_id;
2347     END IF;
2348 
2349 --dbms_output.put_line( 'p_carrying_out_org_id '||p_carrying_out_org_id );
2350     IF ( p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_carrying_out_org_id IS NOT NULL )
2351     THEN
2352        l_carrying_out_org_id := v_cur_proj_elems_rec.carrying_out_organization_id;
2353     ELSE
2354        l_carrying_out_org_id := p_carrying_out_org_id;
2355     END IF;
2356 
2357     /*IF ( ( p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR ( p_carrying_out_org_id IS NULL ) )
2358     THEN
2359        OPEN cur_projs;
2360        FETCH cur_projs INTO l_carrying_out_org_id;
2361        CLOSE cur_projs;
2362     ELSE
2363        l_carrying_out_org_id := p_carrying_out_org_id;
2364     END IF;*/
2365 
2366 
2367     IF ( p_priority_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_priority_code IS NOT NULL )
2368     THEN
2369        l_priority_code := v_cur_proj_elems_rec.priority_code;
2370     ELSE
2371        l_priority_code := p_priority_code;
2372     END IF;
2373 
2374     IF ( p_inc_proj_progress_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_inc_proj_progress_flag IS NOT NULL )
2375     THEN
2376        l_inc_proj_progress_flag := v_cur_proj_elems_rec.inc_proj_progress_flag;
2377     ELSE
2378        l_inc_proj_progress_flag := p_inc_proj_progress_flag;
2379     END IF;
2380 
2381     IF ( p_closed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_closed_date IS NOT NULL )
2382     THEN
2383        l_closed_date := v_cur_proj_elems_rec.closed_date;
2384     ELSE
2385        l_closed_date := p_closed_date;
2386     END IF;
2387 
2388     /*IF ( p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_start_date IS NOT NULL )
2389     THEN
2390        l_scheduled_start_date := v_cur_proj_elems_rec.;
2391     ELSE
2392        l_scheduled_start_date := p_scheduled_start_date;
2393     END IF;
2394 
2395     IF ( p_scheduled_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_finish_date IS NOT NULL )
2396     THEN
2397        l_scheduled_finish_date := v_cur_proj_elems_rec.;
2398     ELSE
2399        l_scheduled_finish_date := p_scheduled_finish_date;
2400     END IF;*/
2401 
2402     IF (p_base_perc_comp_deriv_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_base_perc_comp_deriv_code IS NOT NULL) THEN
2403        l_base_perc_comp_deriv_code := v_cur_proj_elems_rec.BASE_PERCENT_COMP_DERIV_CODE;
2404     ELSE
2405        l_base_perc_comp_deriv_code := p_base_perc_comp_deriv_code;
2406     END IF;
2407 
2408     --In the update_task process PA_PROJ_ELEMENTS.BASE_PERCENT_COMP_DERIV_CODE columns
2409     --is populated, only if it is null. Task_types value is used to populate base_percent_comp_deriv_code
2410     IF (l_base_perc_comp_deriv_code= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  OR l_base_perc_comp_deriv_code IS NULL) THEN
2411        l_base_perc_comp_deriv_code:=l_tt_base_perc_comp_der_cd;
2412     END IF;
2413 
2414     IF ( p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute_category IS NOT NULL )
2415     THEN
2416        l_attribute_category := v_cur_proj_elems_rec.attribute_category;
2417     ELSE
2418        l_attribute_category := p_attribute_category;
2419     END IF;
2420 
2421     IF ( p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute1 IS NOT NULL )
2422     THEN
2423        l_attribute1 := v_cur_proj_elems_rec.attribute1;
2424     ELSE
2425        l_attribute1 := p_attribute1;
2426     END IF;
2427 
2428     IF ( p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute2 IS NOT NULL )
2429     THEN
2430        l_attribute2 := v_cur_proj_elems_rec.attribute2;
2431     ELSE
2432        l_attribute2 := p_attribute2;
2433     END IF;
2434 
2435     IF ( p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute3 IS NOT NULL )
2436     THEN
2437        l_attribute3 := v_cur_proj_elems_rec.attribute3;
2438     ELSE
2439        l_attribute3 := p_attribute3;
2440     END IF;
2441 
2442     IF ( p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute4 IS NOT NULL )
2443     THEN
2444        l_attribute4 := v_cur_proj_elems_rec.attribute4;
2445     ELSE
2446        l_attribute4 := p_attribute4;
2447     END IF;
2448 
2449     IF ( p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute5 IS NOT NULL )
2450     THEN
2451        l_attribute5 := v_cur_proj_elems_rec.attribute5;
2452     ELSE
2453        l_attribute5 := p_attribute5;
2454     END IF;
2455 
2456     IF ( p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute6 IS NOT NULL )
2457     THEN
2458        l_attribute6 := v_cur_proj_elems_rec.attribute6;
2459     ELSE
2460        l_attribute6 := p_attribute6;
2461     END IF;
2462 
2463     IF ( p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute7 IS NOT NULL )
2464     THEN
2465        l_attribute7 := v_cur_proj_elems_rec.attribute7;
2466     ELSE
2467        l_attribute7 := p_attribute7;
2468     END IF;
2469 
2470     IF ( p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute8 IS NOT NULL )
2471     THEN
2472        l_attribute8 := v_cur_proj_elems_rec.attribute8;
2473     ELSE
2474        l_attribute8 := p_attribute8;
2475     END IF;
2476 
2477     IF ( p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute9 IS NOT NULL )
2478     THEN
2479        l_attribute9 := v_cur_proj_elems_rec.attribute9;
2480     ELSE
2481        l_attribute9 := p_attribute9;
2482     END IF;
2483 
2484     IF ( p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute10 IS NOT NULL )
2485     THEN
2486        l_attribute10 := v_cur_proj_elems_rec.attribute10;
2487     ELSE
2488        l_attribute10 := p_attribute10;
2489     END IF;
2490 
2491     IF ( p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute11 IS NOT NULL )
2492     THEN
2493        l_attribute11 := v_cur_proj_elems_rec.attribute11;
2494     ELSE
2495        l_attribute11 := p_attribute11;
2496     END IF;
2497 
2498     IF ( p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute12 IS NOT NULL )
2499     THEN
2500        l_attribute12 := v_cur_proj_elems_rec.attribute12;
2501     ELSE
2502        l_attribute12 := p_attribute12;
2503     END IF;
2504 
2505     IF ( p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute13 IS NOT NULL )
2506     THEN
2507        l_attribute13 := v_cur_proj_elems_rec.attribute13;
2508     ELSE
2509        l_attribute13 := p_attribute13;
2510     END IF;
2511 
2512     IF ( p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute14 IS NOT NULL )
2513     THEN
2514        l_attribute14 := v_cur_proj_elems_rec.attribute14;
2515     ELSE
2516        l_attribute14 := p_attribute14;
2517     END IF;
2518 
2519       IF ( p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute15 IS NOT NULL )
2520       THEN
2521          l_attribute15 := v_cur_proj_elems_rec.attribute15;
2522       ELSE
2523          l_attribute15 := p_attribute15;
2524       END IF;
2525 
2526     IF (p_phase_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_phase_code IS NOT NULL) THEN
2527       l_phase_code := v_cur_proj_elems_rec.phase_code;
2528     ELSE
2529       l_phase_code := p_phase_code;
2530     END IF;
2531 
2532     IF (p_phase_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_phase_version_id IS NOT NULL) THEN
2533       l_phase_version_id := v_cur_proj_elems_rec.phase_version_id;
2534     ELSE
2535       l_phase_version_id := p_phase_version_id;
2536     END IF;
2537 
2538     -- xxlu added task DFF attributes
2539     -- Removed the If ..ELSE conditions as we need to keep the values in the DB intact in case not passed from SSA -- 6826010
2540     l_tk_attribute_category := p_tk_attribute_category;
2541     l_tk_attribute1 := p_tk_attribute1;
2542     l_tk_attribute2 := p_tk_attribute2;
2543     l_tk_attribute3 := p_tk_attribute3;
2544     l_tk_attribute4 := p_tk_attribute4;
2545     l_tk_attribute5 := p_tk_attribute5;
2546     l_tk_attribute6 := p_tk_attribute6;
2547     l_tk_attribute7 := p_tk_attribute7;
2548     l_tk_attribute8 := p_tk_attribute8;
2549     l_tk_attribute9 := p_tk_attribute9;
2550     --Changes for bug 3179423
2551     -- l_tk_attribute10 := p_attribute10;
2552     l_tk_attribute10 := p_tk_attribute10;
2553     --END IF; -- Commented in bug 7526270 to remove compilation error in previous version of file.
2554     -- end xxlu changes
2555 
2556 /*
2557     IF (p_task_weighting_deriv_code IS NOT NULL AND p_task_weighting_deriv_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2558       l_task_weighting_deriv_code := v_cur_proj_elems_rec.TASK_WEIGHTING_DERIV_CODE;
2559     ELSE
2560       l_task_weighting_deriv_code := p_task_weighting_deriv_code;
2561     END IF;
2562 */
2563 
2564 
2565     IF (p_task_progress_entry_page_id IS NOT NULL AND p_task_progress_entry_page_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
2566       l_task_progress_entry_page_id := v_cur_proj_elems_rec.TASK_PROGRESS_ENTRY_PAGE_ID;
2567     ELSE
2568       IF (v_cur_proj_elems_rec.TYPE_ID <> p_type_id) THEN
2569         OPEN get_task_types_attr(p_type_id);
2570         FETCH get_task_types_attr into get_task_type_attr_rec;
2571         CLOSE get_task_types_attr;
2572         l_task_progress_entry_page_id := get_task_type_attr_rec.TASK_PROGRESS_ENTRY_PAGE_ID;
2573       ELSE
2574         l_task_progress_entry_page_id := p_task_progress_entry_page_id;
2575       END IF;
2576       OPEN get_page_name(p_task_progress_entry_page_id);
2577       FETCH get_page_name into l_page_name;
2578       IF get_page_name%NOTFOUND THEN
2579         l_page_name := NULL;
2580       END IF;
2581       CLOSE get_page_name;
2582 
2583       OPEN get_current_page(p_task_id);
2584       FETCH get_current_page into l_opl_id, l_opl_rvn;
2585       CLOSE get_current_page;
2586 
2587       PA_PROGRESS_REPORT_PUB.DEFINE_PROGRESS_REPORT_SETUP(
2588         p_object_id => p_task_id
2589        ,p_object_type => 'PA_TASKS'
2590        ,p_page_type_code => 'AI'
2591        ,p_page_id => l_task_progress_entry_page_id
2592        ,p_page_name => l_page_name
2593        ,p_object_page_layout_id => l_opl_id
2594        ,p_record_version_number => l_opl_rvn
2595        ,x_return_status => l_return_status
2596        ,x_msg_count => l_msg_count
2597        ,x_msg_data => l_msg_data
2598       );
2599 
2600       IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2601                 x_msg_count := FND_MSG_PUB.count_msg;
2602                 IF x_msg_count = 1 then
2603                    pa_interface_utils_pub.get_messages
2604                    (p_encoded        => FND_API.G_TRUE,
2605                     p_msg_index      => 1,
2606                     p_msg_count      => l_msg_count,
2607                     p_msg_data       => l_msg_data,
2608                     p_data           => l_data,
2609                     p_msg_index_out  => l_msg_index_out);
2610                     x_msg_data := l_data;
2611                 END IF;
2612              raise FND_API.G_EXC_ERROR;
2613       END IF;
2614 
2615     END IF;
2616 -- Bug 2827063 This should be up in the code, as it is being accessed there
2617 --      l_project_id := v_cur_proj_elems_rec.PROJECT_ID;
2618 --dbms_output.put_line(( 'Before calling UPDATE_ROW API.' );
2619 --dbms_output.put_line(('value of p_task_NUMBER passed'||l_task_NUMBER);
2620 --dbms_output.put_line(('value of p_task_id passed'||p_task_id);
2621 --dbms_output.put_line(('Value of p_task_NAME '||p_task_NAME);
2622 --dbms_output.put_line( 'Before calling UPDATE_ROW API.' );
2623       PA_PROJ_ELEMENTS_PKG.Update_Row(
2624                  X_ROW_ID                     => v_cur_proj_elems_rec.rowid
2625                 ,X_PROJ_ELEMENT_ID            => p_task_id
2626                 ,X_PROJECT_ID                   => v_cur_proj_elems_rec.PROJECT_ID
2627                 ,X_OBJECT_TYPE            => 'PA_TASKS'
2628                 ,X_ELEMENT_NUMBER             => l_task_number --Bug 3705333 changed from p_task_number to l_task_number
2629                 ,X_NAME                       => la_task_name  --Bug 3705333 changed from p_task_namer to la_task_name
2630                 ,X_DESCRIPTION            => l_task_DESCRIPTION
2631                 ,X_STATUS_CODE            => l_STATUS_CODE
2632                 ,X_WF_STATUS_CODE             => l_wf_status_code
2633                 ,X_PM_PRODUCT_CODE            => l_PM_PRODUCT_CODE
2634                 ,X_PM_TASK_REFERENCE          => l_PM_TASK_REFERENCE
2635                 ,X_CLOSED_DATE            => l_CLOSED_DATE
2636                 ,X_LOCATION_ID            => l_LOCATION_ID
2637                 ,X_MANAGER_PERSON_ID        => l_task_MANAGER_ID
2638                 ,X_CARRYING_OUT_ORGANIZATION_ID => l_carrying_out_org_id
2639                 ,X_TYPE_ID                      => l_TYPE_ID
2640                 ,X_PRIORITY_CODE              => l_PRIORITY_CODE
2641                 ,X_INC_PROJ_PROGRESS_FLAG     => l_INC_PROJ_PROGRESS_FLAG
2642                 ,X_REQUEST_ID                   => null --p_REQUEST_ID
2643                 ,X_PROGRAM_APPLICATION_ID     => null --p_PROGRAM_APPLICATION_ID
2644                 ,X_PROGRAM_ID                   => null --p_PROGRAM_ID
2645                 ,X_PROGRAM_UPDATE_DATE      => null --p_PROGRAM_UPDATE_DATE
2646                 ,X_ATTRIBUTE_CATEGORY       => l_ATTRIBUTE_CATEGORY
2647                 ,X_ATTRIBUTE1                   => l_ATTRIBUTE1
2648                 ,X_ATTRIBUTE2                   => l_ATTRIBUTE2
2649                 ,X_ATTRIBUTE3                   => l_ATTRIBUTE3
2650                 ,X_ATTRIBUTE4                   => l_ATTRIBUTE4
2651                 ,X_ATTRIBUTE5                   => l_ATTRIBUTE5
2652                 ,X_ATTRIBUTE6                   => l_ATTRIBUTE6
2653                 ,X_ATTRIBUTE7                   => l_ATTRIBUTE7
2654                 ,X_ATTRIBUTE8                   => l_ATTRIBUTE8
2655                 ,X_ATTRIBUTE9                   => l_ATTRIBUTE9
2656                 ,X_ATTRIBUTE10            => l_ATTRIBUTE10
2657                 ,X_ATTRIBUTE11            => l_ATTRIBUTE11
2658                 ,X_ATTRIBUTE12            => l_ATTRIBUTE12
2659                 ,X_ATTRIBUTE13            => l_ATTRIBUTE13
2660                 ,X_ATTRIBUTE14            => l_ATTRIBUTE14
2661                 ,X_ATTRIBUTE15            => l_ATTRIBUTE15
2662                 ,X_TASK_WEIGHTING_DERIV_CODE => NULL
2663                 ,X_WORK_ITEM_CODE            => l_work_item_code
2664                 ,X_UOM_CODE                  => l_uom_code
2665                 ,X_WQ_ACTUAL_ENTRY_CODE      => l_wq_actual_entry_code
2666                 ,X_TASK_PROGRESS_ENTRY_PAGE_ID => l_task_progress_entry_page_id
2667                 ,X_PHASE_VERSION_ID            => l_phase_version_id
2668                 ,X_PHASE_CODE                  => l_phase_code
2669                 ,X_PARENT_STRUCTURE_ID         => v_cur_proj_elems_rec.PARENT_STRUCTURE_ID
2670                 ,X_RECORD_VERSION_NUMBER       => p_record_version_number
2671              ,x_Base_Perc_Comp_Deriv_Code   => l_Base_Perc_Comp_Deriv_Code
2672             -- Added for FP_M changes : 3305199
2673                -- Bug#3491609 : Workflow Chanegs FP M
2674                  ,x_wf_item_type    => p_wf_item_type
2675                  ,x_wf_process      => p_wf_process
2676                  ,x_wf_lead_days    => p_wf_lead_days
2677                  ,x_wf_enabled_flag => p_wf_enabled_flag
2678                -- Bug#3491609 : Workflow Chanegs FP M
2679              );
2680    ELSE
2681       CLOSE cur_proj_elems;
2682       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_INVALID_TASK_ID');
2683       l_msg_data := 'PA_PS_INVALID_TASK_ID';
2684       RAISE FND_API.G_EXC_ERROR;
2685    END IF;
2686 
2687    -- anlee
2688    -- Ext Attribute changes
2689    -- Bug 2904327
2690 
2691    PA_USER_ATTR_PUB.DELETE_USER_ATTRS_DATA (
2692     p_validate_only             => FND_API.G_FALSE
2693    ,p_project_id                => v_cur_proj_elems_rec.project_id
2694    ,p_old_classification_id     => v_cur_proj_elems_rec.type_id
2695    ,p_new_classification_id     => l_type_id
2696    ,p_classification_type       => 'TASK_TYPE'
2697    ,x_return_status             => l_return_status
2698    ,x_msg_count                 => l_msg_count
2699    ,x_msg_data                  => l_msg_data );
2700 
2701    l_msg_count := FND_MSG_PUB.count_msg;
2702 
2703    IF l_msg_count > 0 THEN
2704      x_msg_count := l_msg_count;
2705      x_return_status := 'E';
2706      RAISE  FND_API.G_EXC_ERROR;
2707    END IF;
2708    -- anlee end of changes
2709 
2710    -- Bug 3075609. Moved here so that the processing is done after the
2711    -- task type for the task is updated.
2712    IF nvl(l_update_working_ver_weight,'N') = 'Y' THEN
2713         PA_TASK_PVT1.UPDATE_WORKING_VER_WEIGHT(
2714           p_task_id => p_task_id
2715          ,p_weighting => 0
2716          ,x_return_status => l_return_status
2717          ,x_msg_count => l_msg_count
2718          ,x_msg_data => l_msg_data);
2719 
2720         --Check if there is any error.
2721         l_msg_count := FND_MSG_PUB.count_msg;
2722         IF l_msg_count > 0 THEN
2723           x_msg_count := l_msg_count;
2724            IF x_msg_count = 1 THEN
2725               x_msg_data := l_msg_data;
2726           END IF;
2727           RAISE FND_API.G_EXC_ERROR;
2728         END IF;
2729     END IF;
2730 
2731    CLOSE cur_proj_elems;
2732 
2733 --Since FORMS and AMG env. update pa_tasks explicity we do not need to
2734 --call this apis again.
2735 IF p_calling_module NOT IN ( 'FORMS', 'AMG' )
2736 THEN
2737   --Get the structure id
2738   -- Bug 2827063 Moved the code to get the structure id up in the code because it is being accessed there
2739 /*  OPEN cur_struc_id;
2740   FETCH cur_struc_id INTO l_structure_id;
2741   CLOSE cur_struc_id;
2742 */
2743 
2744   --Do financial task check
2745   --If financial
2746   OPEN cur_struc_type( l_structure_id );
2747   FETCH cur_struc_type INTO l_dummy_char;
2748   IF cur_struc_type%FOUND
2749   THEN
2750       --If structure has any published versions.
2751 /*--Moved up for --bug 2789483
2752       l_published_version := 'N';
2753       OPEN cur_pub_versions( l_structure_id, l_project_id );
2754       FETCH cur_pub_versions INTO l_published_version;
2755       CLOSE cur_pub_versions;
2756 --Moved up for --bug 2789483  */
2757 
2758 --hsiu
2759 --changes for versioning
2760 /* --moved for bug 3010538 for performance
2761       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
2762                                                      l_project_id);
2763       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
2764                                                   l_project_id);
2765 */ --moved for bug 3010538 for performance
2766 
2767       -- Modified for FP_M changes
2768       -- Tracking Bug 3305199
2769 
2770       l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(P_Task_ID);
2771 
2772       IF (NVL( l_published_version, 'N' ) = 'N' and l_fin_task_flag = 'Y') OR
2773      (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y'  and l_fin_task_flag = 'Y')  -- Bug 3305199
2774      THEN
2775 --      IF NVL( l_published_version, 'N' ) = 'N'
2776 --      THEN
2777 --end changes
2778           --The followig logic is added to support hierarchy change in PA_TASKS
2779           IF p_ref_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_ref_task_id IS NOT NULL
2780           THEN
2781               sELECT wbs_level, parent_task_id, top_task_id
2782                 INTO l_wbs_level, l_parent_task_id, l_top_task_id
2783                 FROM pa_tasks
2784                WHERE task_id = p_ref_task_id;
2785 
2786                IF p_peer_or_sub = 'SUB'
2787                THEN
2788                   l_wbs_level := l_wbs_level + 1;
2789                   l_parent_task_id := p_ref_task_id;
2790                ELSE
2791                   l_wbs_level := l_wbs_level;
2792                END IF;
2793 
2794           ELSE
2795              --do not update
2796              l_parent_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
2797              l_top_task_id    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
2798              l_wbs_level      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
2799           END IF;
2800           -- xxlu added task DFF attributes
2801           -- xxlu added p_long_task_name
2802 
2803           -- avaithia ,Changed SUBSTR to SUBSTRB as SUBSTR doesnt provide Multi Language Support
2804           --           Included SUBSTRB for Task Description also ,because Task Description size
2805           --           is only 250 char in PA_TASKS Table ,whereas it can be upto 2000 char in pa_proj_elements
2806           --           These changes have been done for Bug 3935874
2807 
2808           PA_TASKS_MAINT_PUB.UPDATE_TASK
2809                    (
2810                    p_project_id                        => l_project_id
2811                   ,p_task_id                           => p_task_id
2812                   ,p_task_number                       => SUBSTRB( l_task_number, 1, 25 ) --Bug 3705333 changed from p_task_number to l_task_number
2813                   ,p_task_name                         => SUBSTRB( la_task_name, 1, 20 )  --Bug 3705333 changed from p_task_name to la_task_name
2814                   ,p_long_task_name                    => la_task_name --Bug 3705333 changed from p_task_name to la_task_nam
2815 		  -- Bug#5227374.Corrected the substrb syntax below which was introduced thru Bug#3935874
2816                   ,p_task_description                  => SUBSTRB(l_task_DESCRIPTION,1,250) -- Bug 3935874
2817                   ,p_task_manager_person_id            => l_task_MANAGER_ID
2818                   ,p_carrying_out_organization_id      => l_carrying_out_org_id
2819                   ,p_task_type_code                    => l_TYPE_ID
2820                   ,p_priority_code                     => l_PRIORITY_CODE
2821                   ,p_pm_product_code                   => l_PM_PRODUCT_CODE
2822                   ,p_pm_task_reference                 => l_PM_TASK_REFERENCE
2823                   ,p_task_start_date                   => p_transaction_start_date
2824                   ,p_task_completion_date              => p_transaction_finish_date
2825                   ,p_inc_proj_progress_flag            => l_INC_PROJ_PROGRESS_FLAG
2826                   ,p_record_version_number             => p_record_version_number
2827                   ,p_wbs_record_version_number         => 1
2828                   ,p_top_task_id                       => l_top_task_id
2829                   ,p_parent_task_id                    => l_parent_task_id
2830                   ,p_wbs_level                         => l_wbs_level
2831                       ,p_address_id                        => p_address_id
2832                       ,p_work_type_id                      => p_work_type_id
2833                       ,p_service_type_code                 => p_service_type_code
2834                       ,p_chargeable_flag                   => p_chargeable_flag
2835                       ,p_billable_flag                     => p_billable_flag
2836                       ,p_receive_project_invoice_flag      => p_receive_project_invoice_flag
2837                       ,p_attribute_category                => l_tk_attribute_category
2838                       ,p_attribute1                        => l_tk_attribute1
2839                       ,p_attribute2                        => l_tk_attribute2
2840                       ,p_attribute3                        => l_tk_attribute3
2841                       ,p_attribute4                        => l_tk_attribute4
2842                       ,p_attribute5                        => l_tk_attribute5
2843                       ,p_attribute6                        => l_tk_attribute6
2844                       ,p_attribute7                        => l_tk_attribute7
2845                       ,p_attribute8                        => l_tk_attribute8
2846                       ,p_attribute9                        => l_tk_attribute9
2847                       ,p_attribute10                       => l_tk_attribute10
2848                   ,p_gen_etc_src_code                  => p_gen_etc_src_code
2849                   ,x_return_status                     => l_return_status
2850                   ,x_msg_count                         => l_msg_count
2851                   ,x_msg_data                          => l_msg_data );
2852                   -- end xxlu changes
2853       ELSE  --Added for transaction dates update
2854         --there is a publish version; update task that have financial attribute
2855     -- This code will excecute for fully shared and versioning enabled case
2856         IF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(p_task_id) = 'Y') THEN
2857           -- xxlu add task DFF attributes
2858           --bug 3690807
2859 
2860           -- Changed SUBSTR to SUBSTRB for 3935874
2861           -- Also Truncated Description  to 250 chars as PA_TASKS can hold only upto 250 char description
2862           -- whereas l_task_description can be upto 2000 chars
2863           PA_TASKS_MAINT_PUB.UPDATE_TASK
2864                    (
2865                    p_project_id                        => l_project_id
2866                   ,p_task_id                           => p_task_id
2867                   ,p_task_number                       => SUBSTRB( l_task_NUMBER, 1, 25 ) --Bug 3705333 changed from p_task_number to l_task_number
2868                   ,p_task_name                         => SUBSTRB( la_task_NAME, 1, 20 ) --Bug 3705333 changed from p_task_name to la_task_name
2869                   ,p_long_task_name                    => la_task_name --Bug 3705333 changed from p_task_name to la_task_name
2870 		  -- Bug#5227374.Corrected the substrb syntax below which was introduced thru Bug#3935874
2871                   ,p_task_description                  => SUBSTRB(l_task_DESCRIPTION,1,250) -- Bug 3935874
2872                   ,p_task_manager_person_id            => l_task_MANAGER_ID
2873                   ,p_carrying_out_organization_id      => l_carrying_out_org_id
2874                   ,p_task_type_code                    => l_TYPE_ID
2875                   ,p_priority_code                     => l_PRIORITY_CODE
2876                   ,p_pm_product_code                   => l_PM_PRODUCT_CODE
2877                   ,p_pm_task_reference                 => l_PM_TASK_REFERENCE
2878                   ,p_task_start_date                   => p_transaction_start_date
2879                   ,p_task_completion_date              => p_transaction_finish_date
2880                   ,p_inc_proj_progress_flag            => l_INC_PROJ_PROGRESS_FLAG
2881                   ,p_record_version_number             => p_record_version_number
2882                   ,p_wbs_record_version_number         => 1
2883 --Commented for Bug 3746669                  ,p_top_task_id                       => l_top_task_id
2884 --Commented for Bug 3746669                  ,p_parent_task_id                    => l_parent_task_id
2885 --Commented for Bug 3746669                  ,p_wbs_level                         => l_wbs_level
2886                       ,p_address_id                        => p_address_id
2887                       ,p_work_type_id                      => p_work_type_id
2888                       ,p_service_type_code                 => p_service_type_code
2889                       ,p_chargeable_flag                   => p_chargeable_flag
2890                       ,p_billable_flag                     => p_billable_flag
2891                       ,p_receive_project_invoice_flag      => p_receive_project_invoice_flag
2892                       ,p_attribute_category                => l_tk_attribute_category
2893                       ,p_attribute1                        => l_tk_attribute1
2894                       ,p_attribute2                        => l_tk_attribute2
2895                       ,p_attribute3                        => l_tk_attribute3
2896                       ,p_attribute4                        => l_tk_attribute4
2897                       ,p_attribute5                        => l_tk_attribute5
2898                       ,p_attribute6                        => l_tk_attribute6
2899                       ,p_attribute7                        => l_tk_attribute7
2900                       ,p_attribute8                        => l_tk_attribute8
2901                       ,p_attribute9                        => l_tk_attribute9
2902                       ,p_attribute10                       => l_tk_attribute10
2903                   ,p_gen_etc_src_code                  => p_gen_etc_src_code
2904                   ,x_return_status                     => l_return_status
2905                   ,x_msg_count                         => l_msg_count
2906                   ,x_msg_data                          => l_msg_data );
2907           -- end xxlu changes
2908         END IF;
2909       END IF;
2910   END IF;
2911 
2912   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2913     x_msg_count := FND_MSG_PUB.count_msg;
2914     IF x_msg_count = 1 then
2915       pa_interface_utils_pub.get_messages
2916       (p_encoded        => FND_API.G_TRUE,
2917        p_msg_index      => 1,
2918        p_msg_count      => l_msg_count,
2919        p_msg_data       => l_msg_data,
2920        p_data           => l_data,
2921        p_msg_index_out  => l_msg_index_out);
2922       x_msg_data := l_data;
2923     END IF;
2924     raise FND_API.G_EXC_ERROR;
2925   END IF;
2926 
2927 END IF;  --<< p_calling_module >
2928 
2929    --hsiu task status change
2930    IF (l_task_status_changed = 'Y') THEN
2931      --task status can only be modified in the latest published version
2932      OPEN get_latest_task_ver_id;
2933      FETCH get_latest_task_ver_id INTO l_latest_task_ver_rec;
2934      CLOSE get_latest_task_ver_id;
2935 
2936      PA_PROGRESS_PUB.push_down_task_status(
2937         p_task_status => p_STATUS_CODE
2938        ,p_project_id => l_project_id
2939        ,p_object_id => p_task_id
2940        ,p_object_version_id => l_latest_task_ver_rec.element_version_id
2941        ,p_object_type => 'PA_TASKS'
2942        ,x_return_status => l_return_status
2943        ,x_msg_count => l_msg_count
2944        ,x_msg_data => l_msg_data
2945      );
2946 
2947      IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2948        x_msg_count := FND_MSG_PUB.count_msg;
2949        IF x_msg_count = 1 then
2950          pa_interface_utils_pub.get_messages
2951            (p_encoded        => FND_API.G_TRUE,
2952             p_msg_index      => 1,
2953             p_msg_count      => l_msg_count,
2954             p_msg_data       => l_msg_data,
2955             p_data           => l_data,
2956             p_msg_index_out  => l_msg_index_out);
2957          x_msg_data := l_data;
2958        END IF;
2959        raise FND_API.G_EXC_ERROR;
2960      END IF;
2961 
2962     --maansari
2963     IF PA_PROGRESS_UTILS.get_system_task_status( l_STATUS_CODE ) = 'CANCELLED'
2964     THEN
2965         PA_PROJ_ELEMENTS_UTILS.Check_chg_stat_cancel_ok (
2966                    p_task_id             => p_task_id
2967                   ,p_task_version_id     => l_latest_task_ver_rec.element_version_id
2968                   ,p_new_task_status     => l_STATUS_CODE
2969                   ,x_return_status       => l_return_status
2970                   ,x_error_message_code  => l_error_message_code
2971              );
2972        IF (l_return_status <> 'S') THEN
2973            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2974                                 p_msg_name => l_error_message_code);
2975            raise FND_API.G_EXC_ERROR;
2976        END IF;
2977     END IF;
2978 
2979     PA_TASK_PVT1.set_new_tasks_to_TBD(
2980                 p_project_id               => l_project_id
2981                ,p_task_id                  => p_task_id
2982                ,p_task_status              => l_STATUS_CODE
2983                ,x_return_status            => l_return_status
2984                ,x_msg_count                => l_msg_count
2985                ,x_msg_data                 => l_msg_data
2986          );
2987 
2988      IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2989        x_msg_count := FND_MSG_PUB.count_msg;
2990        IF x_msg_count = 1 then
2991          pa_interface_utils_pub.get_messages
2992            (p_encoded        => FND_API.G_TRUE,
2993             p_msg_index      => 1,
2994             p_msg_count      => l_msg_count,
2995             p_msg_data       => l_msg_data,
2996             p_data           => l_data,
2997             p_msg_index_out  => l_msg_index_out);
2998          x_msg_data := l_data;
2999        END IF;
3000        raise FND_API.G_EXC_ERROR;
3001      END IF;
3002     --maansari
3003 
3004      PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
3005                   p_structure_version_id => l_latest_task_ver_rec.parent_structure_version_id
3006                  ,p_element_version_id => l_latest_task_ver_rec.element_version_id
3007                  ,x_return_status => l_return_status
3008                  ,x_msg_count => l_msg_count
3009                  ,x_msg_data => l_msg_data
3010                 );
3011      IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3012        x_msg_count := FND_MSG_PUB.count_msg;
3013        IF x_msg_count = 1 then
3014          pa_interface_utils_pub.get_messages
3015            (p_encoded        => FND_API.G_TRUE,
3016             p_msg_index      => 1,
3017             p_msg_count      => l_msg_count,
3018             p_msg_data       => l_msg_data,
3019             p_data           => l_data,
3020             p_msg_index_out  => l_msg_index_out);
3021          x_msg_data := l_data;
3022        END IF;
3023        raise FND_API.G_EXC_ERROR;
3024      END IF;
3025    END IF;
3026    --end task status change
3027 
3028    x_return_status := FND_API.G_RET_STS_SUCCESS;
3029 
3030 EXCEPTION
3031     WHEN FND_API.G_EXC_ERROR THEN
3032       IF (p_commit = FND_API.G_TRUE) THEN
3033         ROLLBACK to UPDATE_TASK_PRIVATE;
3034       END IF;
3035       x_msg_count := FND_MSG_PUB.count_msg;
3036       x_return_status := FND_API.G_RET_STS_ERROR;
3037     WHEN OTHERS THEN
3038       IF (p_commit = FND_API.G_TRUE) THEN
3039         ROLLBACK to UPDATE_TASK_PRIVATE;
3040       END IF;
3041       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3042       x_msg_count := FND_MSG_PUB.count_msg;
3043       --put message
3044       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
3045                               p_procedure_name => 'update_Task',
3046                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3047       RAISE;
3048 END Update_Task;
3049 
3050 -- API name                      : Create_Task_version
3051 -- Type                          : Private procedure
3052 -- Pre-reqs                      : None
3053 -- Return Value                  : N/A
3054 -- Prameters
3055 -- p_api_version          IN    NUMBER  N   Not Null    1.0
3056 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
3057 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
3058 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
3059 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
3060 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
3061 -- p_debug_mode       IN    VARCHAR2    N   Null    N
3062 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3063 -- p_ref_task_version_id    IN  NUMBER  N   Not Null
3064 -- p_peer_or_sub    IN  VARCHAR2    N   Not Null
3065 -- p_task_id    IN  NUMBER  N   Not Null
3066 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3067 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3068 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3069 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3070 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3071 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3072 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3073 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3074 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3075 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3076 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3077 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3078 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3079 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3080 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3081 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3082 -- x_task_version_id    OUT NUMBER  N   Null
3083 -- x_return_status  OUT     VARCHAR2    N   Null
3084 -- x_msg_count        OUT   NUMBER  N   Null
3085 -- x_msg_data         OUT   VARCHAR2    N   Null
3086 --
3087 --  History
3088 --
3089 --  23-OCT-01   Majid Ansari             -Created
3090 --
3091 --
3092 
3093 PROCEDURE Create_Task_Version(
3094  p_api_version        IN    NUMBER  :=1.0,
3095  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
3096  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
3097  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
3098  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
3099  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
3100  p_debug_mode         IN    VARCHAR2    :='N',
3101  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3102  p_ref_task_version_id  IN  NUMBER,
3103  p_peer_or_sub        IN    VARCHAR2,
3104  p_task_id              IN  NUMBER,
3105  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3106  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3107  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3108  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3109  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3110  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3111  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3112  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3113  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3114  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3115  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3116  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3117  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3118  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3119  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3120  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3121  p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3122  p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
3123 --bug 3301192
3124  p_financial_task_flag                IN VARCHAR2 := 'N',
3125 --bug 3301192
3126  x_task_version_id  OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
3127  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
3128  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
3129  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3130 ) IS
3131 
3132     l_msg_count                    NUMBER;
3133     l_msg_data                     VARCHAR2(250);
3134     l_msg_data2                    PA_VC_1000_2000;
3135     l_return_status                VARCHAR2(2);
3136     l_error_message_code           VARCHAR2(250);
3137 
3138     l_parent_struc_ver_id          NUMBER;
3139     l_wbs_level                    NUMBER;
3140     l_display_sequence             NUMBER;
3141     l_wbs_number                   NUMBER;
3142     l_struc_version_from           NUMBER;
3143     l_task_version_from            NUMBER;
3144     l_relationship_subtype         VARCHAR2(20);
3145     l_relationship_id              NUMBER;
3146 
3147     l_link_task_flag               VARCHAR2(1);
3148 
3149     l_attribute_category         PA_PROJ_ELEMENT_VERSIONS.attribute_category%TYPE;
3150     l_attribute1                     PA_PROJ_ELEMENT_VERSIONS.attribute1%TYPE;
3151     l_attribute2                     PA_PROJ_ELEMENT_VERSIONS.attribute2%TYPE;
3152     l_attribute3                     PA_PROJ_ELEMENT_VERSIONS.attribute3%TYPE;
3153     l_attribute4                     PA_PROJ_ELEMENT_VERSIONS.attribute4%TYPE;
3154     l_attribute5                     PA_PROJ_ELEMENT_VERSIONS.attribute5%TYPE;
3155     l_attribute6                     PA_PROJ_ELEMENT_VERSIONS.attribute6%TYPE;
3156     l_attribute7                     PA_PROJ_ELEMENT_VERSIONS.attribute7%TYPE;
3157     l_attribute8                     PA_PROJ_ELEMENT_VERSIONS.attribute8%TYPE;
3158     l_attribute9                     PA_PROJ_ELEMENT_VERSIONS.attribute9%TYPE;
3159     l_attribute10                    PA_PROJ_ELEMENT_VERSIONS.attribute10%TYPE;
3160     l_attribute11                    PA_PROJ_ELEMENT_VERSIONS.attribute11%TYPE;
3161     l_attribute12                    PA_PROJ_ELEMENT_VERSIONS.attribute12%TYPE;
3162     l_attribute13                    PA_PROJ_ELEMENT_VERSIONS.attribute13%TYPE;
3163     l_attribute14                    PA_PROJ_ELEMENT_VERSIONS.attribute14%TYPE;
3164     l_attribute15                    PA_PROJ_ELEMENT_VERSIONS.attribute15%TYPE;
3165     l_weighting_percentage               PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
3166 
3167    CURSOR cur_proj_elems
3168    IS
3169      SELECT *
3170        FROM pa_proj_element_versions
3171       WHERE element_version_id = p_ref_task_version_id;
3172 
3173    --Pick the max display sequence in the heirarchy of the reference task id.
3174    CURSOR cur_proj_elem_ver
3175    IS
3176 
3177 /*  Bug 2680486 -- Performance changes -- Commented the following cursor query. Restructured it to
3178                    avoid hash join issue */
3179 
3180 /*    SELECT max( b.display_sequence )
3181       FROM( SELECT object_id_to1
3182               FROM pa_object_relationships
3183              WHERE relationship_type = 'S'
3184         START WITH object_id_from1 = p_ref_task_version_id
3185         CONNECT BY object_id_from1 = PRIOR object_id_to1
3186                AND relationship_type = 'S'  ) a, pa_proj_element_versions b
3187      WHERE a.object_id_to1 = b.element_version_id;
3188 */
3189 SELECT max( b.display_sequence )
3190       FROM pa_proj_element_versions b
3191      WHERE b.element_version_id IN
3192        ( SELECT object_id_to1
3193          FROM pa_object_relationships
3194          WHERE relationship_type = 'S'
3195          START WITH object_id_from1 = p_ref_task_version_id
3196          CONNECT BY object_id_from1 = PRIOR object_id_to1
3197          AND relationship_type = PRIOR relationship_type --bug 3919266
3198          AND relationship_type = 'S'  ) ;
3199 
3200       --WHERE object_id_from1 = p_ref_task_version_id
3201         --AND a.object_id_to1 = b.element_version_id;
3202 
3203    CURSOR cur_parent
3204    IS
3205      SELECT object_id_from1, object_type_from
3206        FROM pa_object_relationships
3207       WHERE object_id_to1 = p_ref_task_version_id
3208         AND relationship_type = 'S';
3209    CURSOR get_task_detail(cp_task_id NUMBER)
3210    IS
3211      SELECT base_percent_comp_deriv_code
3212        FROM pa_proj_elements
3213       WHERE proj_element_id = cp_task_id;
3214 
3215    X_ROW_ID   VARCHAR2(255);
3216    v_cur_proj_elems_rec cur_proj_elems%ROWTYPE;
3217    l_ref_seq_no   NUMBER;
3218    l_parent_id    NUMBER;
3219    l_parent_type  VARCHAR2(20);
3220    l_structure_id_to   NUMBER;
3221    l_structure_id_from NUMBER;
3222    l_base_deriv_code   VARCHAR2(30);
3223    l_ref_parent_task_ver_id  NUMBER;   --Bug No 3475920
3224 BEGIN
3225 
3226 --my_error_msg( 'In create_task_version pvt API' );
3227     IF (p_debug_mode = 'Y') THEN
3228        pa_debug.debug('PA_TASK_PVT1.CREATE_TASK_VERSION begin');
3229     END IF;
3230 
3231     IF (p_commit = FND_API.G_TRUE) THEN
3232       savepoint CREATE_TASK_VER_PRIVATE;
3233     END IF;
3234 
3235     IF (p_debug_mode = 'Y') THEN
3236       pa_debug.debug('Performing validations');
3237     END IF;
3238 
3239     IF ( p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute_category IS NOT NULL )
3240     THEN
3241        l_attribute_category := null;
3242     ELSE
3243        l_attribute_category := p_attribute_category;
3244     END IF;
3245 
3246     IF ( p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute1 IS NOT NULL )
3247     THEN
3248        l_attribute1 := null;
3249     ELSE
3250        l_attribute1 := p_attribute1;
3251     END IF;
3252 
3253     IF ( p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute2 IS NOT NULL )
3254     THEN
3255        l_attribute2 := null;
3256     ELSE
3257        l_attribute2 := p_attribute2;
3258     END IF;
3259 
3260     IF ( p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute3 IS NOT NULL )
3261     THEN
3262        l_attribute3 := null;
3263     ELSE
3264        l_attribute3 := p_attribute3;
3265     END IF;
3266 
3267     IF ( p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute4 IS NOT NULL )
3268     THEN
3269        l_attribute4 := null;
3270     ELSE
3271        l_attribute4 := p_attribute4;
3272     END IF;
3273 
3274     IF ( p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute5 IS NOT NULL )
3275     THEN
3276        l_attribute5 := null;
3277     ELSE
3278        l_attribute5 := p_attribute5;
3279     END IF;
3280 
3281     IF ( p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute6 IS NOT NULL )
3282     THEN
3283        l_attribute6 := null;
3284     ELSE
3285        l_attribute6 := p_attribute6;
3286     END IF;
3287 
3288     IF ( p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute7 IS NOT NULL )
3289     THEN
3290        l_attribute7 := null;
3291     ELSE
3292        l_attribute7 := p_attribute7;
3293     END IF;
3294 
3295     IF ( p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute8 IS NOT NULL )
3296     THEN
3297        l_attribute8 := null;
3298     ELSE
3299        l_attribute8 := p_attribute8;
3300     END IF;
3301 
3302     IF ( p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute9 IS NOT NULL )
3303     THEN
3304        l_attribute9 := null;
3305     ELSE
3306        l_attribute9 := p_attribute9;
3307     END IF;
3308 
3309     IF ( p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute10 IS NOT NULL )
3310     THEN
3311        l_attribute10 := null;
3312     ELSE
3313        l_attribute10 := p_attribute10;
3314     END IF;
3315 
3316     IF ( p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute11 IS NOT NULL )
3317     THEN
3318        l_attribute11 := null;
3319     ELSE
3320        l_attribute11 := p_attribute11;
3321     END IF;
3322 
3323     IF ( p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute12 IS NOT NULL )
3324     THEN
3325        l_attribute12 := null;
3326     ELSE
3327        l_attribute12 := p_attribute12;
3328     END IF;
3329 
3330     IF ( p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute13 IS NOT NULL )
3331     THEN
3332        l_attribute13 := null;
3333     ELSE
3334        l_attribute13 := p_attribute13;
3335     END IF;
3336 
3337     IF ( p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute14 IS NOT NULL )
3338     THEN
3339        l_attribute14 := null;
3340     ELSE
3341        l_attribute14 := p_attribute14;
3342     END IF;
3343 
3344     IF ( p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute15 IS NOT NULL )
3345     THEN
3346        l_attribute15 := null;
3347     ELSE
3348        l_attribute15 := p_attribute15;
3349     END IF;
3350 
3351     IF ( p_weighting_percentage = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_weighting_percentage IS NULL )
3352     THEN
3353        l_weighting_percentage := null;
3354     ELSE
3355        l_weighting_percentage := p_weighting_percentage;
3356     END IF;
3357 
3358 ----dbms_output.put_line( 'In private API' );
3359 --
3360 --
3361    --Bug No 3450684 Smukka 04/Mar/04 Checking for deliverable
3362    --Bug No 3475920
3363    IF p_peer_or_sub = 'PEER' THEN
3364       l_ref_parent_task_ver_id:=PA_PROJ_ELEMENTS_UTILS.GET_PARENT_TASK_VERSION_ID(p_ref_task_version_id);
3365    ELSE
3366       l_ref_parent_task_ver_id:=p_ref_task_version_id;
3367    END IF;
3368    --Bug No 3475920
3369    OPEN get_task_detail(p_task_id);
3370    FETCH get_task_detail INTO l_base_deriv_code;
3371    CLOSE get_task_detail;
3372    IF l_base_deriv_code LIKE 'DELIVERABLE' THEN
3373       IF PA_PROJ_ELEMENTS_UTILS.check_task_parents_deliv(l_ref_parent_task_ver_id) = 'Y' THEN
3374          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3375                               p_msg_name => 'PA_TASK_AND_PARENTTASK_DEL');
3376          raise FND_API.G_EXC_ERROR;
3377       END IF;
3378    END IF;
3379 --
3380 --
3381 --my_error_msg( 'In create_task_version pvt API Stage 2' );
3382    OPEN cur_proj_elems;
3383    FETCH cur_proj_elems INTO v_cur_proj_elems_rec;
3384    IF cur_proj_elems%FOUND
3385    THEN
3386 
3387     /*As 4046026 code fix is not correct,Commenting the code fix and restoring the old code
3388       Actually this code fix is the cause of Bug 4057190*/
3389  /* Uncommenting the code below again as the issue was due a missing nvl **/
3390      /** Code added for Bug  4046026 **/
3391     OPEN cur_proj_elem_ver;
3392     FETCH cur_proj_elem_ver INTO l_display_sequence;
3393     CLOSE cur_proj_elem_ver;
3394     /** Code addition end for Bug  4046026 **/
3395 
3396     /*As 4046026 code fix is not correct,Commented it : Bug 4057190*/
3397     /* Uncommented the code again **/
3398       IF v_cur_proj_elems_rec.object_type = 'PA_STRUCTURES'
3399       THEN
3400           --Top level first task version under 'p_ref_task_version_id' structure version id
3401           l_parent_struc_ver_id := p_ref_task_version_id;
3402           l_wbs_level           := 1;
3403           /*  Commented for Bug 4057190 --Uncommented again*/
3404           l_ref_seq_no          := nvl(l_display_sequence,0); -- Added for Performace Bug 4046026
3405 
3406           l_display_sequence    :=   nvl(l_display_sequence,0) + 1; --  Restored to 1 4057190 --Modified for Performace Bug 4046026 from 1 to nvl(l_display_sequence,0) + 1
3407           l_wbs_number          := null;
3408           l_struc_version_from  := p_ref_task_version_id;
3409           l_task_version_from   := null;
3410           l_relationship_subtype := 'STRUCTURE_TO_TASK';
3411          -- l_ref_seq_no          := 0;  -- increment all task seq. numbers.Restored for 4057190 --Commented for BUg 4046026
3412 
3413           l_structure_id_from := v_cur_proj_elems_rec.proj_element_id;
3414           l_structure_id_to := v_cur_proj_elems_rec.proj_element_id;
3415 
3416 --dbms_output.put_line( 'In IF condition' );
3417 
3418       ELSIF v_cur_proj_elems_rec.object_type = 'PA_TASKS'
3419       THEN
3420           --If the task version is not a top level within the structure version
3421 
3422           l_parent_struc_ver_id := v_cur_proj_elems_rec.parent_structure_version_id;
3423 
3424           SELECT proj_element_id INTO l_structure_id_from
3425             FROM pa_proj_element_versions
3426            WHERE element_version_id = v_cur_proj_elems_rec.parent_structure_version_id;
3427 
3428            l_structure_id_to := l_structure_id_from;
3429 
3430           IF p_peer_or_sub = 'PEER'
3431           THEN
3432              l_wbs_level           := v_cur_proj_elems_rec.wbs_level;
3433              --If a task is created as PEER then it should land after the child task of the reference.
3434              OPEN cur_proj_elem_ver;
3435              FETCH cur_proj_elem_ver INTO l_ref_seq_no;
3436              CLOSE cur_proj_elem_ver;
3437 
3438              IF l_ref_seq_no IS NULL
3439              THEN
3440                 --If there are no child task for ref task then the new task should be created imm. after the ref task.
3441                 l_ref_seq_no := v_cur_proj_elems_rec.display_sequence;
3442              END IF;
3443 
3444              l_display_sequence    := l_ref_seq_no + 1;
3445 
3446              --get the parent of the ref task id.
3447              OPEN cur_parent;
3448              FETCH cur_parent INTO l_parent_id, l_parent_type;
3449              CLOSE cur_parent;
3450 
3451              --hsiu: bug 2695631
3452              --copy structure version should not validate when creating tasks
3453              IF (p_validation_level <> 0) THEN
3454                PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
3455                  p_parent_task_ver_id => l_parent_id
3456                 ,x_return_status      => l_return_status
3457                 ,x_error_message_code => l_error_message_code
3458                );
3459 
3460                IF (l_return_status <> 'Y') THEN
3461                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3462                                       p_msg_name => l_error_message_code);
3463                  raise FND_API.G_EXC_ERROR;
3464                END IF;
3465              END IF;
3466              --end bug 2695631
3467 
3468 
3469           ELSE
3470     -- 4057190 : restored old code here and removed code fix for 4046026
3471      /** Changes begin for performance BUg 4046026 when subtask is added to a task with no child tasks
3472         In this l_display_sequenec will be null and hence should be set with refernce to the top task */
3473         /** restored the fix for BUg 4046026 **/
3474         IF l_display_sequence IS NULL then
3475         l_wbs_level           := v_cur_proj_elems_rec.wbs_level + 1;
3476         l_ref_seq_no            := v_cur_proj_elems_rec.display_sequence;
3477             l_display_sequence    := v_cur_proj_elems_rec.display_sequence + 1;
3478             Else
3479              l_wbs_level           := v_cur_proj_elems_rec.wbs_level + 1;
3480          l_ref_seq_no          := v_cur_proj_elems_rec.display_sequence;
3481              l_display_sequence    := v_cur_proj_elems_rec.display_sequence + 1;
3482             End if; /** Changes end for performance BUg 4046026  */
3483              --hsiu: bug 2695631
3484              --copy structure version should not validate when creating tasks
3485              IF (p_validation_level <> 0) THEN
3486                PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
3487                  p_parent_task_ver_id => p_ref_task_version_id
3488                 ,x_return_status      => l_return_status
3489                 ,x_error_message_code => l_error_message_code
3490                );
3491 
3492                IF (l_return_status <> 'Y') THEN
3493                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3494                                       p_msg_name => l_error_message_code);
3495                  raise FND_API.G_EXC_ERROR;
3496                END IF;
3497              END IF;
3498              --end bug 2695631
3499           END IF;
3500 
3501           l_wbs_number          := null;
3502 
3503           IF l_parent_id IS NOT NULL AND p_peer_or_sub = 'PEER'
3504           THEN
3505              IF l_parent_type = 'PA_STRUCTURES'
3506              THEN
3507                 l_struc_version_from  := l_parent_id;
3508                 l_task_version_from   := null;
3509                 l_relationship_subtype := 'STRUCTURE_TO_TASK';
3510              ELSE
3511                 l_struc_version_from  := null;
3512                 l_task_version_from   := l_parent_id;
3513                 l_relationship_subtype := 'TASK_TO_TASK';
3514              END IF;
3515           ELSE
3516              l_struc_version_from  := null;
3517              l_task_version_from   := p_ref_task_version_id;
3518              l_relationship_subtype := 'TASK_TO_TASK';
3519           END IF;
3520       END IF;
3521 
3522       --Display sequence is null if the task is a linking task.
3523       l_link_task_flag := PA_PROJ_ELEMENTS_UTILS.link_flag ( p_task_id );
3524       IF l_link_task_flag = 'Y'
3525       THEN
3526          l_DISPLAY_SEQUENCE := null;
3527       END IF;
3528 
3529 --dbms_output.put_line( 'before Insert' );
3530 
3531 --my_error_msg( 'In create_task_version pvt API Stage 3' );
3532 
3533 
3534       PA_PROJ_ELEMENT_VERSIONS_PKG.Insert_Row(
3535             X_ROW_ID                   => X_row_id
3536            ,X_ELEMENT_VERSION_ID       => x_task_version_id
3537            ,X_PROJ_ELEMENT_ID            => p_task_id
3538            ,X_OBJECT_TYPE            => 'PA_TASKS'
3539            ,X_PROJECT_ID             => v_cur_proj_elems_rec.project_id
3540            ,X_PARENT_STRUCTURE_VERSION_ID   => l_parent_struc_ver_id
3541            ,X_DISPLAY_SEQUENCE     => l_DISPLAY_SEQUENCE
3542            ,X_WBS_LEVEL                => l_WBS_LEVEL
3543            ,X_WBS_NUMBER             => l_WBS_NUMBER
3544            ,X_ATTRIBUTE_CATEGORY       => l_ATTRIBUTE_CATEGORY
3545            ,X_ATTRIBUTE1             => l_ATTRIBUTE1
3546            ,X_ATTRIBUTE2             => l_ATTRIBUTE2
3547            ,X_ATTRIBUTE3             => l_ATTRIBUTE3
3548            ,X_ATTRIBUTE4             => l_ATTRIBUTE4
3549            ,X_ATTRIBUTE5             => l_ATTRIBUTE5
3550            ,X_ATTRIBUTE6             => l_ATTRIBUTE6
3551            ,X_ATTRIBUTE7             => l_ATTRIBUTE7
3552            ,X_ATTRIBUTE8             => l_ATTRIBUTE8
3553            ,X_ATTRIBUTE9             => l_ATTRIBUTE9
3554            ,X_ATTRIBUTE10            => l_ATTRIBUTE10
3555            ,X_ATTRIBUTE11            => l_ATTRIBUTE11
3556            ,X_ATTRIBUTE12            => l_ATTRIBUTE12
3557            ,X_ATTRIBUTE13            => l_ATTRIBUTE13
3558            ,X_ATTRIBUTE14            => l_ATTRIBUTE14
3559            ,X_ATTRIBUTE15            => l_ATTRIBUTE15
3560            ,X_TASK_UNPUB_VER_STATUS_CODE => p_task_unpub_ver_status_code
3561        ,p_financial_task_flag    => p_financial_task_flag   -- FP_M changes 3305199
3562            ,X_SOURCE_OBJECT_ID      => v_cur_proj_elems_rec.project_id
3563            ,X_SOURCE_OBJECT_TYPE    => 'PA_PROJECTS'
3564        );
3565 
3566 --dbms_output.put_line( 'Before update sequence' );
3567 
3568 --my_error_msg( 'In create_task_version pvt API Stage 4' );
3569 
3570 /*Removed the following IF  Clause for Bug 4057190
3571   Actually ,This fix done for 4046026 is wrong .hence the commenting*/
3572   /** Uncommenting the code again **/
3573 
3574 IF l_wbs_level <> 1 THEN
3575 
3576 --This IF/ELSE condition is added for BUg 4046026.
3577            --update the sequnce number
3578       UPDATE pa_proj_element_versions
3579          SET display_sequence = display_sequence + 1
3580        WHERE display_sequence > l_ref_seq_no
3581          AND element_version_id <> x_task_version_id
3582          AND parent_structure_version_id = v_cur_proj_elems_rec.parent_structure_version_id
3583          AND object_type = 'PA_TASKS'
3584         -- AND PA_PROJ_ELEMENTS_UTILS.link_flag ( proj_element_id ) = 'N' commenitng out for bug 4180390
3585          ;
3586 ELSE
3587  IF  p_peer_or_sub = 'PEER' --Bug 4046026
3588       THEN
3589        UPDATE pa_proj_element_versions
3590          SET display_sequence = display_sequence + 1
3591        WHERE display_sequence > l_ref_seq_no
3592          AND element_version_id <> x_task_version_id
3593          AND parent_structure_version_id = v_cur_proj_elems_rec.parent_structure_version_id
3594          AND object_type = 'PA_TASKS'
3595          --AND PA_PROJ_ELEMENTS_UTILS.link_flag ( proj_element_id ) = 'N' commenitng out for bug 4180390
3596          ;
3597 END IF;
3598 END IF; --Added for Bug 4046026 Commented for 4057190 /** Uncommented it again for BUg 4046026 **/
3599 
3600 --dbms_output.put_line( 'Before create relationship' );
3601 
3602 --dbms_output.put_line( 'l_struc_version_from '||l_struc_version_from );
3603 --dbms_output.put_line( 'l_task_version_from '||l_task_version_from );
3604 --dbms_output.put_line( 'x_task_version_id '||x_task_version_id );
3605 --dbms_output.put_line( 'l_relationship_subtype '||l_relationship_subtype );
3606 
3607 --my_error_msg( 'In create_task_version pvt API Stage 5' );
3608 
3609 
3610      --create new relationship
3611       PA_RELATIONSHIP_PUB.Create_Relationship
3612                        (
3613                      p_api_version                       => p_api_version
3614                     ,p_init_msg_list                     => p_init_msg_list
3615                     ,p_commit                            => p_commit
3616                     ,p_validate_only                     => p_validate_only
3617                     ,p_validation_level                  => p_validation_level
3618                     ,p_calling_module                    => p_calling_module
3619                     ,p_debug_mode                        => p_debug_mode
3620                     ,p_max_msg_count                     => p_max_msg_count
3621                     ,p_project_id_from                   => v_cur_proj_elems_rec.project_id
3622                     ,p_structure_id_from                 => l_structure_id_from
3623                     ,p_structure_version_id_from         => l_struc_version_from
3624                     ,p_task_version_id_from              => l_task_version_from
3625                     ,p_project_id_to                     => v_cur_proj_elems_rec.project_id
3626                     ,p_structure_id_to                   => l_structure_id_to
3627                     ,p_task_version_id_to                => x_task_version_id
3628                     ,p_structure_type                    => null
3629                     ,p_initiating_element                => null
3630                     ,p_relationship_type                 => 'S'
3631                     ,p_relationship_subtype              => l_relationship_subtype
3632                     ,p_weighting_percentage              => l_weighting_percentage
3633                     ,x_object_relationship_id            => l_relationship_id
3634                     ,x_return_status                     => x_return_status
3635                     ,x_msg_count                         => x_msg_count
3636                     ,x_msg_data                          => x_msg_data
3637                  );
3638 
3639 --dbms_output.put_line( 'x_return_status from create rel '||x_return_status );
3640 
3641            IF x_return_status <> 'S'
3642            THEN
3643 --dbms_output.put_line( 'raising exception' );
3644               CLOSE cur_proj_elems;
3645               RAISE FND_API.G_EXC_ERROR;
3646            END IF;
3647 
3648 --dbms_output.put_line( 'Before WBS_NUMBER' );
3649 
3650       --Do not update wbs_number if the task is a linking task.
3651       IF l_link_task_flag = 'N'
3652       THEN
3653 --my_error_msg( 'In create_task_version pvt API Stage 6' );
3654 
3655           PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS (
3656                                p_commit                   => p_commit
3657                               ,p_debug_mode               => p_debug_mode
3658                               ,p_parent_structure_ver_id  => l_parent_struc_ver_id
3659                               ,p_task_id                  => x_task_version_id
3660                               ,p_display_seq              => l_display_sequence
3661                               ,p_action                   => 'INSERT'
3662                               ,p_parent_task_id           => l_task_version_from
3663                               ,x_return_status            => x_return_status );
3664       END IF;
3665 
3666            IF x_return_status <> 'S'
3667            THEN
3668               CLOSE cur_proj_elems;
3669               RAISE FND_API.G_EXC_ERROR;
3670            END IF;
3671 
3672    ELSE
3673       CLOSE cur_proj_elems;
3674       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_INV_REF_TASK_ID');
3675       l_msg_data := 'PA_PS_INV_REF_TASK_ID';
3676       RAISE FND_API.G_EXC_ERROR;
3677    END IF;
3678    CLOSE cur_proj_elems;
3679    x_return_status := FND_API.G_RET_STS_SUCCESS;
3680 --my_error_msg( 'In create_task_version pvt API Stage 7' );
3681 
3682 
3683 EXCEPTION
3684     WHEN FND_API.G_EXC_ERROR THEN
3685       IF (p_commit = FND_API.G_TRUE) THEN
3686         ROLLBACK to CREATE_TASK_VER_PRIVATE;
3687       END IF;
3688       x_msg_count := FND_MSG_PUB.count_msg;
3689       x_return_status := FND_API.G_RET_STS_ERROR;
3690 
3691 --       --dbms_output.put_line( 'In exception ');
3692 --       --dbms_output.put_line( 'Status In exception ' ||x_return_status);
3693 
3694 
3695     WHEN OTHERS THEN
3696       IF (p_commit = FND_API.G_TRUE) THEN
3697         ROLLBACK to CREATE_TASK_VER_PRIVATE;
3698       END IF;
3699       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3700       x_msg_count := FND_MSG_PUB.count_msg;
3701       --put message
3702       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
3703                               p_procedure_name => 'create_Task_version',
3704                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3705       RAISE;
3706 
3707 END Create_Task_Version;
3708 
3709 -- API name                      : Update_Task_version
3710 -- Type                          : Private procedure
3711 -- Pre-reqs                      : None
3712 -- Return Value                  : N/A
3713 -- Prameters
3714 -- p_api_version          IN    NUMBER  N   Not Null    1.0
3715 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
3716 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
3717 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
3718 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
3719 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
3720 -- p_debug_mode       IN    VARCHAR2    N   Null    N
3721 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3722 -- p_task_version_id    IN  NUMBER  N   Null
3723 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3724 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3725 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3726 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3727 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3728 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3729 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3730 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3731 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3732 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3733 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3734 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3735 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3736 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3737 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3738 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3739 -- p_record_version_number  IN  NUMBER
3740 -- x_return_status  OUT     VARCHAR2    N   Null
3741 -- x_msg_count        OUT   NUMBER  N   Null
3742 -- x_msg_data         OUT   VARCHAR2    N   Null
3743 --
3744 --  History
3745 --
3746 --  23-OCT-01   Majid Ansari             -Created
3747 --
3748 --
3749 
3750 PROCEDURE Update_Task_Version(
3751  p_api_version        IN    NUMBER  :=1.0,
3752  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
3753  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
3754  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
3755  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
3756  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
3757  p_debug_mode         IN    VARCHAR2    :='N',
3758  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3759  p_ref_task_version_id  IN  NUMBER,
3760  p_peer_or_sub        IN    VARCHAR2,
3761  p_task_version_id  IN  NUMBER,
3762  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3763  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3764  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3765  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3766  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3767  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3768  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3769  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3770  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3771  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3772  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3773  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3774  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3775  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3776  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3777  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3778  p_record_version_number    IN  NUMBER,
3779  p_action          IN    VARCHAR2 := 'NULL',
3780  p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3781  p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
3782  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
3783  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
3784  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3785 ) IS
3786 
3787     l_msg_count                    NUMBER;
3788     l_msg_data                     VARCHAR2(250);
3789     l_return_status                VARCHAR2(2);
3790     l_data                          VARCHAR2(250);
3791     l_msg_index_out                 NUMBER;
3792     l_error_msg_code                     VARCHAR2(250);
3793 
3794     l_error_message_code           VARCHAR2(250);
3795 
3796     l_parent_struc_ver_id          NUMBER;
3797     l_wbs_level                    NUMBER;
3798     l_display_sequence             NUMBER;
3799     l_wbs_number                   NUMBER;
3800 
3801     l_struc_version_from           NUMBER;
3802     l_task_version_from            NUMBER;
3803     l_relationship_subtype         VARCHAR2(20);
3804     l_relationship_id              NUMBER;
3805 
3806     l_wbs_level_diff               NUMBER;
3807 
3808     l_attribute_category         PA_PROJ_ELEMENT_VERSIONS.attribute_category%TYPE;
3809     l_attribute1                     PA_PROJ_ELEMENT_VERSIONS.attribute1%TYPE;
3810     l_attribute2                     PA_PROJ_ELEMENT_VERSIONS.attribute2%TYPE;
3811     l_attribute3                     PA_PROJ_ELEMENT_VERSIONS.attribute3%TYPE;
3812     l_attribute4                     PA_PROJ_ELEMENT_VERSIONS.attribute4%TYPE;
3813     l_attribute5                     PA_PROJ_ELEMENT_VERSIONS.attribute5%TYPE;
3814     l_attribute6                     PA_PROJ_ELEMENT_VERSIONS.attribute6%TYPE;
3815     l_attribute7                     PA_PROJ_ELEMENT_VERSIONS.attribute7%TYPE;
3816     l_attribute8                     PA_PROJ_ELEMENT_VERSIONS.attribute8%TYPE;
3817     l_attribute9                     PA_PROJ_ELEMENT_VERSIONS.attribute9%TYPE;
3818     l_attribute10                    PA_PROJ_ELEMENT_VERSIONS.attribute10%TYPE;
3819     l_attribute11                    PA_PROJ_ELEMENT_VERSIONS.attribute11%TYPE;
3820     l_attribute12                    PA_PROJ_ELEMENT_VERSIONS.attribute12%TYPE;
3821     l_attribute13                    PA_PROJ_ELEMENT_VERSIONS.attribute13%TYPE;
3822     l_attribute14                    PA_PROJ_ELEMENT_VERSIONS.attribute14%TYPE;
3823     l_attribute15                    PA_PROJ_ELEMENT_VERSIONS.attribute15%TYPE;
3824     l_task_unpub_ver_status_code         PA_PROJ_ELEMENT_VERSIONS.task_unpub_ver_status_code%TYPE;
3825 
3826    CURSOR cur_ref_task
3827    IS
3828      SELECT *
3829        FROM pa_proj_element_versions
3830       WHERE element_version_id = p_ref_task_version_id;
3831 
3832 
3833    CURSOR cur_proj_elems
3834    IS
3835      SELECT rowid, object_type, project_id, proj_element_id, record_version_number,
3836             display_sequence, wbs_number, wbs_level, parent_structure_version_id,
3837             attribute_category, attribute1, attribute2, attribute3, attribute4, attribute5,
3838             attribute6, attribute7, attribute8, attribute9, attribute10, attribute11, attribute12,
3839             attribute13, attribute14, attribute15, TASK_UNPUB_VER_STATUS_CODE
3840        FROM pa_proj_element_versions
3841       WHERE element_version_id = p_task_version_id
3842         AND object_type = 'PA_TASKS';
3843 
3844     CURSOR cur_child_tasks( c_task_version_id NUMBER )
3845     IS SELECT a.object_id_from1, a.object_id_to1, b.parent_structure_version_id, b.display_sequence
3846          FROM
3847       ( SELECT object_id_from1, object_id_to1
3848           FROM pa_object_relationships
3849          WHERE relationship_type = 'S'
3850     START WITH object_id_from1 = c_task_version_id
3851     CONNECT BY object_id_from1 = PRIOR object_id_to1
3852            AND relationship_type = prior relationship_type --bug 3919266
3853            AND relationship_type = 'S' ) a, pa_proj_element_versions b
3854     WHERE a.object_id_to1 = b.element_version_id
3855     ORDER BY 4;
3856 
3857 --bug 2832807
3858     CURSOR cur_child_tasks2( c_task_version_id NUMBER )
3859     IS SELECT max( display_sequence )
3860          FROM pa_proj_element_versions
3861     WHERE element_version_id in ( SELECT object_id_to1
3862                                     FROM pa_object_relationships
3863                                    WHERE relationship_type = 'S'
3864                                  START WITH object_id_from1 = c_task_version_id
3865                                   CONNECT BY object_id_from1 = PRIOR object_id_to1
3866                                          AND relationship_type = PRIOR relationship_type --bug 3919266
3867                                          AND relationship_type = 'S'  );
3868 --bug 2832807
3869 
3870 --bug 2836264
3871     CURSOR cur_child_tasks3( c_task_version_id NUMBER ,c_ref_task_disp_seq NUMBER)  -- Bug 6628382 modified existing cursor to restrict the tasks which are being moved to fall between the source and the destination task
3872     IS SELECT max( display_sequence )
3873          FROM pa_proj_element_versions
3874     WHERE element_version_id in ( SELECT object_id_to1
3875                                     FROM pa_object_relationships
3876                                    WHERE relationship_type = 'S'
3877                                      and object_id_to1 <> p_task_version_id
3878                                  START WITH object_id_from1 = c_task_version_id
3879                                   CONNECT BY object_id_from1 = PRIOR object_id_to1 --bug 3919266
3880                                          AND relationship_type = prior relationship_type
3881                                          AND relationship_type = 'S'  )
3882                                          AND display_sequence <= c_ref_task_disp_seq;    -- Bug 6628382
3883 --bug 2836264
3884 
3885     --Added for Bug 6628382
3886     CURSOR cur_child_tasks4( c_task_version_id NUMBER)     -- Bug 6628382. Added another cursor to compute the last child task of any task.
3887     IS SELECT max( display_sequence)
3888          FROM pa_proj_element_versions
3889     WHERE element_version_id in ( SELECT object_id_to1
3890                                     FROM pa_object_relationships
3891                                    WHERE relationship_type = 'S'
3892                                      and object_id_to1 <> p_task_version_id
3893                                  START WITH object_id_from1 = c_task_version_id
3894                                   CONNECT BY object_id_from1 = PRIOR object_id_to1 --bug 3919266
3895                                          AND relationship_type = prior relationship_type
3896                                          AND relationship_type = 'S'  );
3897 
3898 
3899   --This cursor is used to find parent task version id of the reference task id or
3900   --to get the object rel id and record version number of the task version id.
3901   CURSOR cur_obj_rel( p_child_version_id NUMBER )
3902   IS
3903     SELECT object_id_from1, object_relationship_id, record_version_number, relationship_subtype
3904       FROM pa_object_relationships
3905      WHERE object_id_to1 = p_child_version_id
3906        AND relationship_type = 'S';
3907 
3908   --This cursor fetches all tasks that are child of ref task but now become child of p_task_version
3909   CURSOR cur_new_child
3910   IS
3911     SELECT por.object_id_to1, ppev.display_sequence, por.record_version_number, por.object_relationship_id
3912       FROM pa_object_relationships por,
3913            pa_proj_element_versions ppev
3914      WHERE object_id_from1 = p_ref_task_version_id
3915        AND object_id_to1 = element_version_id
3916        AND display_sequence > l_display_sequence
3917        AND relationship_type = 'S'
3918      order by display_sequence;
3919 
3920 v_cur_proj_elems_rec cur_proj_elems%ROWTYPE;
3921 v_cur_ref_task_rec cur_ref_task%ROWTYPE;
3922 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
3923 l_update_new_child_rels  VARCHAR2(1) := 'N';
3924 
3925 l_task_seq_num                           NUMBER;
3926 l_ref_task_seq_num                       NUMBER;
3927 l_task_last_child_seq_num                NUMBER;
3928 l_ref_task_last_child_seq_num            NUMBER;
3929 l_ref_task_last_child_seq_num2           NUMBER;  -- Bug 6628382
3930 
3931 
3932 l_new_display_sequence         NUMBER;
3933 
3934 l_move_direction             VARCHAR2(4);
3935 l_no_of_tasks                NUMBER;
3936 l_parent_of_task_version     NUMBER;
3937 
3938 --hsiu added
3939 --for task weighting
3940 cursor get_task_weighting(c_task_version_id NUMBER) IS
3941   select a.object_id_from1, a.weighting_percentage
3942     from pa_object_relationships a
3943    where a.object_id_to1 = c_task_version_id
3944      and a.object_type_to = 'PA_TASKS'
3945      and a.relationship_type = 'S'
3946      and a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
3947 l_old_parent_id   NUMBER;
3948 
3949 -- anlee task weighting changes
3950 cursor get_sub_tasks(c_task_version_id NUMBER) IS
3951   select '1'
3952     from pa_object_relationships
3953    where object_id_from1 = c_task_version_id
3954      and object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
3955      and relationship_type = 'S';
3956   l_dummy varchar2(1);
3957 
3958 l_version_from NUMBER;
3959 -- end anlee
3960 
3961 l_new_weighting NUMBER(17,2);
3962 l_old_weighting NUMBER(17,2);
3963 --end task weighting changes
3964 
3965   --bug 2673570
3966   CURSOR check_progress_allowed(c_element_version_id NUMBER)
3967   IS
3968   SELECT ptt.prog_entry_enable_flag
3969   FROM   pa_task_types ptt,
3970          pa_proj_element_versions ppev,
3971          pa_proj_elements ppe
3972   WHERE  ppev.element_version_id = c_element_version_id
3973   AND    ppev.proj_element_id = ppe.proj_element_id
3974   AND    ppe.TYPE_ID   = ptt.task_type_id;
3975 
3976   l_progress_allowed  VARCHAR2(1);
3977   --bug 2673570
3978 
3979 BEGIN
3980     IF (p_debug_mode = 'Y') THEN
3981        pa_debug.debug('PA_TASK_PVT1.UPDATE_TASK_VERSION begin');
3982     END IF;
3983 
3984     IF (p_commit = FND_API.G_TRUE) THEN
3985       savepoint UPDATE_TASK_VER_PRIVATE;
3986     END IF;
3987 
3988     IF (p_debug_mode = 'Y') THEN
3989       pa_debug.debug('Performing validations');
3990     END IF;
3991 
3992     --Bug No 3450684 Smukka 04/Mar/04 Checking for deliverable
3993     --Bug No 3475920 SMukka Commented out following logic to check for deliverable.
3994 --    IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,p_task_version_id) = 'Y' THEN
3995 --    IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,p_ref_task_version_id) = 'Y' THEN
3996 --       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3997 --                            p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
3998 --       raise FND_API.G_EXC_ERROR;
3999 --    END IF;
4000 
4001  OPEN cur_ref_task;
4002  FETCH cur_ref_task INTO v_cur_ref_task_rec;
4003 
4004    OPEN cur_proj_elems;
4005    FETCH cur_proj_elems INTO v_cur_proj_elems_rec;
4006    IF cur_proj_elems%FOUND
4007    THEN
4008       if v_cur_proj_elems_rec.record_version_number <> p_record_version_number
4009       then
4010           FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_CHANGED');
4011           APP_EXCEPTION.Raise_Exception;
4012       end if;
4013 
4014       IF ( p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute_category IS NOT NULL )
4015       THEN
4016          l_attribute_category := v_cur_proj_elems_rec.attribute_category;
4017       ELSE
4018          l_attribute_category := p_attribute_category;
4019       END IF;
4020 
4021       IF ( p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute1 IS NOT NULL )
4022       THEN
4023          l_attribute1 := v_cur_proj_elems_rec.attribute1;
4024       ELSE
4025          l_attribute1 := p_attribute1;
4026       END IF;
4027 
4028       IF ( p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute2 IS NOT NULL )
4029       THEN
4030          l_attribute2 := v_cur_proj_elems_rec.attribute2;
4031       ELSE
4032          l_attribute2 := p_attribute2;
4033       END IF;
4034 
4035       IF ( p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute3 IS NOT NULL )
4036       THEN
4037          l_attribute3 := v_cur_proj_elems_rec.attribute3;
4038       ELSE
4039          l_attribute3 := p_attribute3;
4040       END IF;
4041 
4042       IF ( p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute4 IS NOT NULL )
4043       THEN
4044          l_attribute4 := v_cur_proj_elems_rec.attribute4;
4045       ELSE
4046          l_attribute4 := p_attribute4;
4047       END IF;
4048 
4049       IF ( p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute5 IS NOT NULL )
4050       THEN
4051          l_attribute5 := v_cur_proj_elems_rec.attribute5;
4052       ELSE
4053          l_attribute5 := p_attribute5;
4054       END IF;
4055 
4056       IF ( p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute6 IS NOT NULL )
4057       THEN
4058          l_attribute6 := v_cur_proj_elems_rec.attribute6;
4059       ELSE
4060          l_attribute6 := p_attribute6;
4061       END IF;
4062 
4063       IF ( p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute7 IS NOT NULL )
4064       THEN
4065          l_attribute7 := v_cur_proj_elems_rec.attribute7;
4066       ELSE
4067          l_attribute7 := p_attribute7;
4068       END IF;
4069 
4070       IF ( p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute8 IS NOT NULL )
4071       THEN
4072          l_attribute8 := v_cur_proj_elems_rec.attribute8;
4073       ELSE
4074          l_attribute8 := p_attribute8;
4075       END IF;
4076 
4077       IF ( p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute9 IS NOT NULL )
4078       THEN
4079          l_attribute9 := v_cur_proj_elems_rec.attribute9;
4080       ELSE
4081          l_attribute9 := p_attribute9;
4082       END IF;
4083 
4084       IF ( p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute10 IS NOT NULL )
4085       THEN
4086          l_attribute10 := v_cur_proj_elems_rec.attribute10;
4087       ELSE
4088          l_attribute10 := p_attribute10;
4089       END IF;
4090 
4091       IF ( p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute11 IS NOT NULL )
4092       THEN
4093          l_attribute11 := v_cur_proj_elems_rec.attribute11;
4094       ELSE
4095          l_attribute11 := p_attribute11;
4096       END IF;
4097 
4098       IF ( p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute12 IS NOT NULL )
4099       THEN
4100          l_attribute12 := v_cur_proj_elems_rec.attribute12;
4101       ELSE
4102          l_attribute12 := p_attribute12;
4103       END IF;
4104 
4105       IF ( p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute13 IS NOT NULL )
4106       THEN
4107          l_attribute13 := v_cur_proj_elems_rec.attribute13;
4108       ELSE
4109          l_attribute13 := p_attribute13;
4110       END IF;
4111 
4112       IF ( p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute14 IS NOT NULL )
4113       THEN
4114          l_attribute14 := v_cur_proj_elems_rec.attribute14;
4115       ELSE
4116          l_attribute14 := p_attribute14;
4117       END IF;
4118 
4119       IF ( p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute15 IS NOT NULL )
4120       THEN
4121          l_attribute15 := v_cur_proj_elems_rec.attribute15;
4122       ELSE
4123          l_attribute15 := p_attribute15;
4124       END IF;
4125 
4126       IF (p_task_unpub_ver_status_code IS NULL) THEN
4127         l_task_unpub_ver_status_code := v_cur_proj_elems_rec.TASK_UNPUB_VER_STATUS_CODE;
4128       ELSE
4129         l_task_unpub_ver_status_code := p_task_unpub_ver_status_code;
4130       END IF;
4131 
4132       l_task_seq_num := v_cur_proj_elems_rec.display_sequence;
4133       l_ref_task_seq_num := v_cur_ref_task_rec.display_sequence;
4134 
4135       IF l_task_seq_num > l_ref_task_seq_num
4136       THEN
4137          l_move_direction := 'UP';
4138       ELSIF l_task_seq_num < l_ref_task_seq_num
4139       THEN
4140          l_move_direction := 'DOWN';
4141       END IF;
4142 
4143 --dbms_output.put_line( 'p_action '|| p_action );
4144 
4145 
4146       IF v_cur_ref_task_rec.object_type = 'PA_TASKS'           --Moving under a task
4147       THEN
4148          IF p_peer_or_sub = 'PEER'
4149          THEN
4150             l_wbs_level := v_cur_ref_task_rec.wbs_level;  --wbs level of reference
4151 
4152             --parent task is the parent of the reference task
4153             OPEN cur_obj_rel( p_ref_task_version_id );
4154             FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
4155             CLOSE cur_obj_rel;
4156 
4157             l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
4158 
4159             IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
4160             THEN
4161                 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
4162                 l_task_version_from := null;
4163             ELSE
4164                 l_task_version_from  := v_cur_obj_rel_rec.object_id_from1;
4165                 l_struc_version_from := null;
4166             END IF;
4167 
4168             --There could be some tasks with sequence number greater than the p_task_version that now become
4169             --children of p_task_version.
4170             l_update_new_child_rels := 'Y';
4171 
4172             IF p_action = 'MOVE'
4173             THEN
4174                --get the seq of the last child of ref task
4175 --               FOR cur_child_tasks_rec2 IN cur_child_tasks( p_ref_task_version_id )  LOOP  --commented out for bug 2832807
4176                   /* IF l_move_direction = 'UP'
4177                    THEN
4178                        IF cur_child_tasks_rec2.display_sequence < l_task_seq_num
4179                        THEN
4180                           l_ref_task_last_child_seq_num := cur_child_tasks_rec2.display_sequence;
4181                        END IF;
4182                    ELSE*/
4183 --                      l_ref_task_last_child_seq_num := cur_child_tasks_rec2.display_sequence; --commented out for bug 2832807
4184                   -- END IF;
4185 --               END LOOP;   --commented out for bug 2832807
4186 
4187                --bug 2832807
4188                IF (p_peer_or_sub = 'SUB') THEN
4189                  OPEN cur_child_tasks2(p_ref_task_version_id);
4190                  FETCH cur_child_tasks2 INTO l_ref_task_last_child_seq_num;
4191                  CLOSE cur_child_tasks2;
4192                ELSE
4193                  --bug 2836364
4194                  OPEN cur_child_tasks4(p_ref_task_version_id);       -- Bug 6628382
4195                  FETCH cur_child_tasks4 INTO l_ref_task_last_child_seq_num2;
4196                  CLOSE cur_child_tasks4;
4197 
4198                  OPEN cur_child_tasks3(v_cur_obj_rel_rec.object_id_from1,nvl(l_ref_task_last_child_seq_num2, l_ref_task_seq_num));  -- Bug 6628382
4199                  FETCH cur_child_tasks3 INTO l_ref_task_last_child_seq_num;
4200                  CLOSE cur_child_tasks3;
4201                  --bug 2836364
4202                END IF;
4203                --bug 2832807
4204 
4205                --If the reference task does not have any child tasks then
4206                --l_ref_task_last_child_seq_num will be l_ref_task_seq_num;
4207                IF l_ref_task_last_child_seq_num IS NULL
4208                THEN
4209                    l_ref_task_last_child_seq_num := l_ref_task_seq_num;
4210                END IF;
4211 
4212                l_new_display_sequence := - ( ( l_ref_task_last_child_seq_num ) + 1 );
4213 --dbms_output.put_line( 'l_new_display_sequence '|| l_new_display_sequence );
4214 --dbms_output.put_line( 'l_ref_task_last_child_seq_num '|| l_ref_task_last_child_seq_num );
4215 
4216             ELSE
4217                l_new_display_sequence := v_cur_proj_elems_rec.display_sequence;
4218             END IF; --<< p_action = 'MOVE' >>
4219 
4220          ELSE
4221             l_wbs_level := v_cur_ref_task_rec.wbs_level + 1;
4222             --parent task is the reference task
4223             l_task_version_from  := p_ref_task_version_id;
4224             l_struc_version_from := null;
4225             l_relationship_subtype := 'TASK_TO_TASK';
4226 
4227             IF p_action = 'MOVE'
4228             THEN
4229                l_new_display_sequence := - ( l_ref_task_seq_num + 1 );
4230             ELSE
4231                l_new_display_sequence := v_cur_proj_elems_rec.display_sequence;
4232             END IF; --<< p_action = 'MOVE' >>
4233 
4234 --dbms_output.put_line( 'l_new_display_sequence '|| l_new_display_sequence );
4235 --dbms_output.put_line( 'l_ref_task_last_child_seq_num '|| l_ref_task_last_child_seq_num );
4236 
4237          END IF;
4238       ELSIF v_cur_ref_task_rec.object_type = 'PA_STRUCTURES'
4239       THEN
4240          l_struc_version_from := p_ref_task_version_id;
4241          l_task_version_from  := null;
4242          l_relationship_subtype := 'STRUCTURE_TO_TASK';
4243          l_wbs_level := v_cur_proj_elems_rec.wbs_level;     --no change in wbs level.
4244          l_new_display_sequence := v_cur_proj_elems_rec.display_sequence;
4245       END IF;
4246 
4247       --to update wbs_level of all child task of p_task_version.
4248       l_wbs_level_diff := ( l_wbs_level -  v_cur_proj_elems_rec.wbs_level ); --new minus old
4249 
4250       l_display_sequence := v_cur_proj_elems_rec.display_sequence;
4251 
4252       l_task_seq_num := v_cur_proj_elems_rec.display_sequence;
4253 
4254       l_no_of_tasks := 1;
4255 
4256       l_parent_struc_ver_id :=  v_cur_proj_elems_rec.parent_structure_version_id;
4257 
4258       PA_PROJ_ELEMENT_VERSIONS_PKG.Update_Row(
4259             X_ROW_ID                   => v_cur_proj_elems_rec.rowid
4260            ,X_ELEMENT_VERSION_ID       => p_task_version_id
4261            ,X_PROJ_ELEMENT_ID            => v_cur_proj_elems_rec.proj_element_id
4262            ,X_OBJECT_TYPE            => v_cur_proj_elems_rec.object_type
4263            ,X_PROJECT_ID             => v_cur_proj_elems_rec.project_id
4264            ,X_PARENT_STRUCTURE_VERSION_ID   => v_cur_proj_elems_rec.parent_structure_version_id
4265            ,X_DISPLAY_SEQUENCE     => l_new_display_sequence
4266            ,X_WBS_LEVEL                => l_wbs_level
4267            ,X_WBS_NUMBER             => v_cur_proj_elems_rec.wbs_number
4268            ,X_ATTRIBUTE_CATEGORY       => l_ATTRIBUTE_CATEGORY
4269            ,X_ATTRIBUTE1             => l_ATTRIBUTE1
4270            ,X_ATTRIBUTE2             => l_ATTRIBUTE2
4271            ,X_ATTRIBUTE3             => l_ATTRIBUTE3
4272            ,X_ATTRIBUTE4             => l_ATTRIBUTE4
4273            ,X_ATTRIBUTE5             => l_ATTRIBUTE5
4274            ,X_ATTRIBUTE6             => l_ATTRIBUTE6
4275            ,X_ATTRIBUTE7             => l_ATTRIBUTE7
4276            ,X_ATTRIBUTE8             => l_ATTRIBUTE8
4277            ,X_ATTRIBUTE9             => l_ATTRIBUTE9
4278            ,X_ATTRIBUTE10            => l_ATTRIBUTE10
4279            ,X_ATTRIBUTE11            => l_ATTRIBUTE11
4280            ,X_ATTRIBUTE12            => l_ATTRIBUTE12
4281            ,X_ATTRIBUTE13            => l_ATTRIBUTE13
4282            ,X_ATTRIBUTE14            => l_ATTRIBUTE14
4283            ,X_ATTRIBUTE15            => l_ATTRIBUTE15
4284            ,X_record_version_number    => p_record_version_number
4285            ,X_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
4286        );
4287 
4288      IF p_action = 'MOVE'
4289      THEN
4290         -- Update WBS numbers
4291         -- Delete
4292         DECLARE
4293             CURSOR cur_parent_of_task_version
4294             IS
4295               SELECT object_id_from1
4296                 FROM pa_object_relationships
4297                WHERE object_id_to1 = p_task_version_id
4298                  AND relationship_type = 'S';
4299         BEGIN
4300             open cur_parent_of_task_version;
4301             fetch cur_parent_of_task_version INTO l_parent_of_task_version;
4302             close cur_parent_of_task_version;
4303         END;
4304       END IF;  --<< p_action = MOVE >>
4305    ELSE
4306       CLOSE cur_proj_elems;
4307       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_INVALID_TASK_ID');
4308       l_msg_data := 'PA_PS_INVALID_TASK_ID';
4309       RAISE FND_API.G_EXC_ERROR;
4310    END IF;
4311    CLOSE cur_proj_elems;
4312 -- ELSE
4313 --    CLOSE cur_ref_task;
4314 --    PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_INV_REF_TASK_ID');
4315 --    l_msg_data := 'PA_PS_INV_REF_TASK_ID';
4316 --    RAISE FND_API.G_EXC_ERROR;
4317 -- END IF;
4318 
4319  CLOSE cur_ref_task;
4320 
4321  --update wbs level of all the child task
4322  FOR cur_child_tasks_rec IN cur_child_tasks( p_task_version_id )  LOOP
4323      --get the seq number of the last child of p_task_version_id
4324      l_task_last_child_seq_num := cur_child_tasks_rec.display_sequence;
4325 
4326      --Incrementing a negative value by 1 and then making it again a negative value.
4327      l_new_display_sequence := -( -1 * ( l_new_display_sequence ) + 1 );
4328 
4329 --dbms_output.put_line( 'Child task l_new_display_sequence '|| l_new_display_sequence );
4330 --dbms_output.put_line( 'Child task l_task_last_child_seq_num '|| l_task_last_child_seq_num );
4331 
4332 
4333      l_no_of_tasks := l_no_of_tasks + 1;
4334 
4335      UPDATE pa_proj_element_versions
4336         SET wbs_level = wbs_level + l_wbs_level_diff,
4337             display_sequence = decode( p_action, 'MOVE', l_new_display_sequence, display_sequence )
4338       WHERE element_version_id = cur_child_tasks_rec.object_id_to1;
4339 
4340  END LOOP;
4341 
4342  IF p_action = 'MOVE'
4343  THEN
4344      DECLARE
4345          CURSOR cur_update_with_null
4346          IS
4347            SELECT element_version_id, display_sequence
4348              FROM pa_proj_element_versions
4349             WHERE parent_structure_version_id = l_parent_struc_ver_id
4350               AND display_sequence < 0;
4351 
4352          TYPE CurrTasks IS RECORD( task_version_id NUMBER(15), display_sequence NUMBER(15) );
4353          TYPE TaskTab IS TABLE OF CurrTasks INDEX BY BINARY_INTEGER;
4354          l_TaskTab            TaskTab;
4355          i                    NUMBER := 1;
4356      BEGIN
4357 
4358           --update display sequence of the tasks with NULL to update WBS_NUMBER.
4359           FOR cur_update_with_null_rec in cur_update_with_null LOOP
4360 
4361               UPDATE pa_proj_element_versions
4362                  SET display_sequence = null
4363                WHERE element_version_id = cur_update_with_null_rec.element_version_id;
4364 
4365               l_TaskTab(i).task_version_id := cur_update_with_null_rec.element_version_id;
4366               l_TaskTab(i).display_sequence := cur_update_with_null_rec.display_sequence;
4367               i := i + 1;
4368 
4369           END LOOP;
4370 
4371           --updating wbs number only once after making display seq null
4372 
4373           PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
4374              ( p_commit                   => p_commit
4375               ,p_debug_mode               => p_debug_mode
4376               ,p_parent_structure_ver_id  => l_parent_struc_ver_id
4377               ,p_task_id                  => NULL
4378               ,p_display_seq              => l_task_seq_num
4379               ,p_action                   => 'DELETE'
4380               ,p_parent_task_id           => l_parent_of_task_version
4381               ,x_return_status            => l_return_status );
4382 
4383           FOR k in 1..i-1 LOOP
4384               UPDATE pa_proj_element_versions
4385                  SET display_sequence = l_TaskTab(k).display_sequence
4386                WHERE element_version_id = l_TaskTab(k).task_version_id;
4387           END LOOP;
4388 
4389           --The following block is added for debugging.
4390           /*DECLARE
4391               CURSOR cur_print_wbs
4392               IS
4393                 SELECT element_version_id, wbs_number
4394                    FROM pa_proj_element_versions
4395                   WHERE parent_structure_version_id = l_parent_struc_ver_id
4396                  ORDER BY display_sequence;
4397           BEGIN
4398               FOR cur_print_wbs_rec in cur_print_wbs LOOP
4399                   --dbms_output.put_line( ' Task Ver Id : '|| cur_print_wbs_rec.element_version_id||
4400                                         ' WBS NUMBER: '||cur_print_wbs_rec.wbs_number );
4401               END LOOP;
4402           END;*/
4403      END;
4404  END IF;
4405 
4406 
4407  --update relatonship of the task version p_task_version.
4408  --set structure_version_from and task_version_from accordingly.
4409  OPEN cur_obj_rel( p_task_version_id );
4410  FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
4411  CLOSE cur_obj_rel;
4412 
4413 --hsiu added
4414 --for task weighting
4415  OPEN get_task_weighting(p_task_version_id);
4416  FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
4417  CLOSE get_task_weighting;
4418 
4419  -- anlee task weighting changes
4420  if(l_task_version_from is not null) THEN
4421    l_version_from := l_task_version_from;
4422  else
4423    l_version_from := l_struc_version_from;
4424  end if;
4425 
4426  IF (l_version_from = p_task_version_id) THEN
4427    l_new_weighting := l_old_weighting;
4428  ELSE
4429    OPEN get_sub_tasks(l_version_from);
4430    FETCH get_sub_tasks into l_dummy;
4431    IF (get_sub_tasks%NOTFOUND) THEN
4432      l_new_weighting := 100;
4433      --bug 2673570
4434      OPEN check_progress_allowed(p_task_version_id);
4435      FETCH check_progress_allowed INTO l_progress_allowed;
4436      CLOSE check_progress_allowed;
4437 
4438      if l_progress_allowed = 'N' then
4439         l_new_weighting := 0;
4440      end if;
4441      --bug 2673570
4442    ELSE
4443      l_new_weighting := 0;
4444    END IF;
4445    CLOSE get_sub_tasks;
4446  END IF;
4447 -- end anlee
4448 
4449 --end task weighting changes
4450 
4451  PA_RELATIONSHIP_PVT.Update_Relationship
4452              (
4453               p_api_version                       => p_api_version
4454              ,p_init_msg_list                     => p_init_msg_list
4455              ,p_commit                            => p_commit
4456              ,p_validate_only                     => p_validate_only
4457              ,p_validation_level                  => p_validation_level
4458              ,p_calling_module                    => p_calling_module
4459              ,p_debug_mode                        => p_debug_mode
4460              ,p_max_msg_count                     => p_max_msg_count
4461              ,p_object_relationship_id            => v_cur_obj_rel_rec.object_relationship_id
4462              ,p_project_id_from                   => null
4463              ,p_structure_id_from                 => null
4464              ,p_structure_version_id_from         => l_struc_version_from
4465              ,p_task_version_id_from              => l_task_version_from
4466              ,p_project_id_to                     => null
4467              ,p_structure_id_to                   => null
4468              ,p_structure_version_id_to           => null
4469              ,p_task_version_id_to                => p_task_version_id
4470              ,p_relationship_type                 => 'S'
4471              ,p_relationship_subtype              => l_relationship_subtype
4472              ,p_weighting_percentage              => l_new_weighting
4473              ,p_record_version_number             => v_cur_obj_rel_rec.record_version_number
4474              ,x_return_status                     => l_return_status
4475              ,x_msg_count                         => l_msg_count
4476              ,x_msg_data                          => l_msg_data
4477             );
4478 
4479              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4480                 x_msg_count := FND_MSG_PUB.count_msg;
4481                 IF x_msg_count = 1 then
4482                    pa_interface_utils_pub.get_messages
4483                    (p_encoded        => FND_API.G_TRUE,
4484                     p_msg_index      => 1,
4485                     p_msg_count      => l_msg_count,
4486                     p_msg_data       => l_msg_data,
4487                     p_data           => l_data,
4488                     p_msg_index_out  => l_msg_index_out);
4489                     x_msg_data := l_data;
4490                 END IF;
4491              raise FND_API.G_EXC_ERROR;
4492              END IF;
4493 
4494      IF l_update_new_child_rels = 'Y' AND p_action IN( 'OUTDENT' )
4495      THEN
4496         FOR cur_new_child_rec in cur_new_child LOOP
4497             OPEN get_sub_tasks(p_task_version_id);
4498             FETCH get_sub_tasks into l_dummy;
4499             IF (get_sub_tasks%NOTFOUND) THEN
4500               l_new_weighting := 100;
4501             ELSE
4502               l_new_weighting := 0;
4503             END IF;
4504             CLOSE get_sub_tasks;
4505 
4506             PA_RELATIONSHIP_PVT.Update_Relationship
4507               (
4508               p_api_version                       => p_api_version
4509              ,p_init_msg_list                     => p_init_msg_list
4510              ,p_commit                            => p_commit
4511              ,p_validate_only                     => p_validate_only
4512              ,p_validation_level                  => p_validation_level
4513              ,p_calling_module                    => p_calling_module
4514              ,p_debug_mode                        => p_debug_mode
4515              ,p_max_msg_count                     => p_max_msg_count
4516              ,p_object_relationship_id            => cur_new_child_rec.object_relationship_id
4517              ,p_project_id_from                   => null
4518              ,p_structure_id_from                 => null
4519              ,p_structure_version_id_from         => null
4520              ,p_task_version_id_from              => p_task_version_id
4521              ,p_project_id_to                     => null
4522              ,p_structure_id_to                   => null
4523              ,p_structure_version_id_to           => null
4524              ,p_task_version_id_to                => cur_new_child_rec.object_id_to1
4525              ,p_relationship_type                 => 'S'
4526              ,p_relationship_subtype              => 'TASK_TO_TASK'
4527              ,p_weighting_percentage              => l_new_weighting
4528              ,p_record_version_number             => cur_new_child_rec.record_version_number
4529              ,x_return_status                     => x_return_status
4530              ,x_msg_count                         => x_msg_count
4531              ,x_msg_data                          => x_msg_data
4532             );
4533 
4534              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4535                 x_msg_count := FND_MSG_PUB.count_msg;
4536                 IF x_msg_count = 1 then
4537                    pa_interface_utils_pub.get_messages
4538                    (p_encoded        => FND_API.G_TRUE,
4539                     p_msg_index      => 1,
4540                     p_msg_count      => l_msg_count,
4541                     p_msg_data       => l_msg_data,
4542                     p_data           => l_data,
4543                     p_msg_index_out  => l_msg_index_out);
4544                     x_msg_data := l_data;
4545                 END IF;
4546              raise FND_API.G_EXC_ERROR;
4547              END IF;
4548 
4549         END LOOP;
4550      END IF;
4551 
4552 --hsiu added
4553 --for task weighting
4554      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
4555        p_task_version_id => l_old_parent_id
4556       ,x_return_status => l_return_status
4557       ,x_msg_count => l_msg_count
4558       ,x_msg_data => l_msg_data
4559      );
4560 
4561      x_msg_count := FND_MSG_PUB.count_msg;
4562      IF x_msg_count = 1 then
4563        pa_interface_utils_pub.get_messages
4564         (p_encoded        => FND_API.G_TRUE,
4565          p_msg_index      => 1,
4566          p_msg_count      => l_msg_count,
4567          p_msg_data       => l_msg_data,
4568          p_data           => l_data,
4569          p_msg_index_out  => l_msg_index_out);
4570          x_msg_data := l_data;
4571       END IF;
4572 
4573      --bug 2673570
4574      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
4575        p_task_version_id => p_task_version_id
4576       ,x_return_status => l_return_status
4577       ,x_msg_count => l_msg_count
4578       ,x_msg_data => l_msg_data
4579      );
4580 
4581      x_msg_count := FND_MSG_PUB.count_msg;
4582      IF x_msg_count = 1 then
4583        pa_interface_utils_pub.get_messages
4584         (p_encoded        => FND_API.G_TRUE,
4585          p_msg_index      => 1,
4586          p_msg_count      => l_msg_count,
4587          p_msg_data       => l_msg_data,
4588          p_data           => l_data,
4589          p_msg_index_out  => l_msg_index_out);
4590          x_msg_data := l_data;
4591       END IF;
4592      --bug 2673570
4593 --end changes for task weighting
4594 
4595 
4596 IF p_action = 'MOVE'
4597 THEN
4598      --Update the display sequence of the affected tasks other than
4599      --the p_task_version and p_task_version children.
4600 
4601           /*--The following block is added for debugging.
4602           DECLARE
4603               CURSOR cur_print_wbs
4604               IS
4605                 SELECT element_version_id, wbs_number
4606                    FROM pa_proj_element_versions
4607                   WHERE parent_structure_version_id = l_parent_struc_ver_id
4608                  ORDER BY display_sequence;
4609           BEGIN
4610               FOR cur_print_wbs_rec in cur_print_wbs LOOP
4611                   dbms_output.put_line( ' Task Ver Id : '|| cur_print_wbs_rec.element_version_id||
4612                                         ' WBS NUMBER: '||cur_print_wbs_rec.wbs_number );
4613               END LOOP;
4614           END;     */
4615 
4616      DECLARE
4617         CURSOR cur_affected_tasks
4618         IS
4619           SELECT element_version_id, parent_structure_version_id, display_sequence
4620             FROM pa_proj_element_versions
4621            WHERE parent_structure_version_id = l_parent_struc_ver_id
4622              AND ( ( l_move_direction = 'DOWN' and p_peer_or_sub = 'SUB' and
4623                      display_sequence > nvl( l_task_last_child_seq_num, l_task_seq_num )  and display_sequence <= l_ref_task_seq_num ) OR
4624                    ( l_move_direction = 'DOWN' and p_peer_or_sub = 'PEER' and
4625                      display_sequence > nvl( l_task_last_child_seq_num, l_task_seq_num ) and display_sequence <= l_ref_task_last_child_seq_num ) OR
4626                    ( l_move_direction = 'UP' and p_peer_or_sub = 'SUB' and
4627                      display_sequence > l_ref_task_seq_num and display_sequence < l_task_seq_num ) OR
4628                    ( l_move_direction = 'UP' and p_peer_or_sub = 'PEER' and
4629                      display_sequence > l_ref_task_last_child_seq_num and display_sequence < l_task_seq_num ) OR
4630             --**
4631                    ( l_move_direction = 'UP' and l_ref_task_last_child_seq_num > l_task_seq_num and
4632                      display_sequence > l_task_seq_num and display_sequence <= l_ref_task_last_child_seq_num )
4633             --**
4634                   )
4635             ORDER BY display_sequence;
4636      BEGIN
4637      --dbms_output.put_line( 'l_task_last_child_seq_num '|| l_task_last_child_seq_num );
4638 --     dbms_output.put_line( 'l_task_seq_num '|| l_task_seq_num );
4639 
4640 --     dbms_output.put_line( 'l_ref_task_last_child_seq_num '|| l_ref_task_last_child_seq_num );
4641 --     dbms_output.put_line( 'l_ref_task_seq_num '|| l_ref_task_seq_num );
4642         FOR cur_affected_tasks_rec IN cur_affected_tasks LOOP
4643 
4644             --Update the affcted tasks sequence numbers
4645             IF l_move_direction = 'UP'
4646             THEN
4647                l_new_display_sequence := cur_affected_tasks_rec.display_sequence + l_no_of_tasks;
4648             ELSE
4649                l_new_display_sequence := cur_affected_tasks_rec.display_sequence - l_no_of_tasks;
4650             END IF;
4651             --**
4652             IF l_move_direction = 'UP' AND l_ref_task_last_child_seq_num > l_task_seq_num
4653             THEN
4654                l_new_display_sequence := cur_affected_tasks_rec.display_sequence - l_no_of_tasks;
4655             END IF;
4656             --**
4657 
4658 --        dbms_output.put_line( 'cur_affected_tasks_rec.element_version_id '|| cur_affected_tasks_rec.element_version_id );
4659 --        dbms_output.put_line( 'l_new_display_sequence '|| l_new_display_sequence );
4660 --        dbms_output.put_line( 'cur_affected_tasks_rec.parent_structure_version_id '|| cur_affected_tasks_rec.parent_structure_version_id );
4661 
4662    --dbms_output.put_line( 'No. of tasks moved   '|| l_no_of_tasks );
4663 
4664    --dbms_output.put_line( 'Affected tasks old display_sequence '|| cur_affected_tasks_rec.display_sequence );
4665    --dbms_output.put_line( 'Affected tasks l_new_display_sequence '|| l_new_display_sequence );
4666 
4667             UPDATE pa_proj_element_versions
4668                SET display_sequence = l_new_display_sequence
4669               WHERE element_version_id = cur_affected_tasks_rec.element_version_id;
4670 
4671              --update wbs number for affected tasks
4672              -- Insert
4673              --update WBS NUMBER properly now for the affected rows.
4674              PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
4675                 ( p_commit                   => p_commit
4676                  ,p_debug_mode               => p_debug_mode
4677                  ,p_parent_structure_ver_id  => cur_affected_tasks_rec.parent_structure_version_id
4678                  ,p_task_id                  => cur_affected_tasks_rec.element_version_id
4679                  ,p_display_seq              => l_new_display_sequence
4680                  ,p_action                   => 'INSERT'
4681                  ,p_parent_task_id           => NULL
4682                  ,x_return_status            => l_return_status );
4683 
4684         END LOOP;
4685      END;
4686 
4687      --Update the sequence number and WBS number of the tasks ( p_task_version and its children ) being updated.
4688 
4689      DECLARE
4690          CURSOR cur_actual_tasks
4691          IS
4692            SELECT element_version_id, display_sequence, parent_structure_version_id
4693              FROM pa_proj_element_versions
4694             WHERE parent_structure_version_id = l_parent_struc_ver_id
4695               AND display_sequence < 0
4696            ORDER BY display_sequence desc;
4697      BEGIN
4698          FOR cur_actual_tasks_rec IN cur_actual_tasks LOOP
4699 
4700              l_new_display_sequence := -1 * cur_actual_tasks_rec.display_sequence;
4701 
4702              IF l_move_direction = 'DOWN'
4703              THEN
4704                 l_new_display_sequence := l_new_display_sequence - l_no_of_tasks;
4705              END IF;
4706 
4707              --**
4708             IF l_move_direction = 'UP' AND l_ref_task_last_child_seq_num > l_task_seq_num
4709             THEN
4710                 l_new_display_sequence := l_new_display_sequence - l_no_of_tasks;
4711             END IF;
4712             --**
4713 
4714        --dbms_output.put_line( 'TAsk sequence number '||l_new_display_sequence );
4715 
4716              UPDATE pa_proj_element_versions
4717                 SET display_sequence = l_new_display_sequence
4718               WHERE element_version_id = cur_actual_tasks_rec.element_version_id;
4719 
4720              --update wbs number for actual tasks
4721              -- Insert
4722              --update WBS NUMBER properly now
4723              PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
4724                 ( p_commit                   => p_commit
4725                  ,p_debug_mode               => p_debug_mode
4726                  ,p_parent_structure_ver_id  => cur_actual_tasks_rec.parent_structure_version_id
4727                  ,p_task_id                  => cur_actual_tasks_rec.element_version_id
4728                  ,p_display_seq              => l_new_display_sequence
4729                  ,p_action                   => 'INSERT'
4730                  ,p_parent_task_id           => NULL
4731                  ,x_return_status            => l_return_status );
4732 
4733 
4734          END LOOP;
4735      END;
4736 
4737       DECLARE
4738         CURSOR cur_affected_tasks
4739         IS
4740           SELECT element_version_id, parent_structure_version_id, display_sequence
4741             FROM pa_proj_element_versions
4742            WHERE parent_structure_version_id = l_parent_struc_ver_id
4743              AND display_sequence > nvl( l_ref_task_last_child_seq_num, l_ref_task_seq_num )
4744             ORDER BY display_sequence;
4745      BEGIN
4746         FOR cur_affected_tasks_rec IN cur_affected_tasks LOOP
4747 --        dbms_output.put_line( 'cur_affected_tasks_rec.element_version_id '|| cur_affected_tasks_rec.element_version_id );
4748 --      dbms_output.put_line( 'cur_affected_tasks_rec.display_sequence '|| cur_affected_tasks_rec.display_sequence );
4749              --update wbs number for affected tasks
4750              -- Insert
4751              --update WBS NUMBER properly now for the affected rows.
4752              PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
4753                 ( p_commit                   => p_commit
4754                  ,p_debug_mode               => p_debug_mode
4755                  ,p_parent_structure_ver_id  => cur_affected_tasks_rec.parent_structure_version_id
4756                  ,p_task_id                  => cur_affected_tasks_rec.element_version_id
4757                  ,p_display_seq              => cur_affected_tasks_rec.display_sequence
4758                  ,p_action                   => 'INSERT'
4759                  ,p_parent_task_id           => NULL
4760                  ,x_return_status            => l_return_status );
4761 
4762         END LOOP;
4763      END;
4764 END IF; --<< p_action = 'MOVE' >>
4765 
4766  x_return_status := FND_API.G_RET_STS_SUCCESS;
4767 
4768 EXCEPTION
4769     WHEN FND_API.G_EXC_ERROR THEN
4770       IF (p_commit = FND_API.G_TRUE) THEN
4771         ROLLBACK to UPDATE_TASK_VER_PRIVATE;
4772       END IF;
4773       x_msg_count := FND_MSG_PUB.count_msg;
4774       x_return_status := FND_API.G_RET_STS_ERROR;
4775     WHEN OTHERS THEN
4776       IF (p_commit = FND_API.G_TRUE) THEN
4777         ROLLBACK to UPDATE_TASK_VER_PRIVATE;
4778       END IF;
4779       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4780       x_msg_count := FND_MSG_PUB.count_msg;
4781       --put message
4782       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
4783                               p_procedure_name => 'update_Task_version',
4784                               p_error_text     => SUBSTRB(SQLERRM,1,240));
4785       RAISE;
4786 END update_task_version;
4787 -- API name                      : Delete_Task_version
4788 -- Type                          : Private procedure
4789 -- Pre-reqs                      : None
4790 -- Return Value                  : N/A
4791 -- Prameters
4792 -- p_api_version          IN    NUMBER  N   Not Null    1.0
4793 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
4794 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
4795 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
4796 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
4797 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
4798 -- p_debug_mode       IN    VARCHAR2    N   Null    N
4799 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4800 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
4801 -- p_task_version_id    IN  NUMBER  N   Null
4802 -- p_record_version_number  IN  NUMBER
4803 -- x_return_status  OUT     VARCHAR2    N   Null
4804 -- x_msg_count        OUT   NUMBER  N   Null
4805 -- x_msg_data         OUT   VARCHAR2    N   Null
4806 --
4807 --  History
4808 --
4809 --  23-OCT-01   Majid Ansari             -Created
4810 --  01-JUL-2004 Rakesh Raghavan          Modified.
4811 --
4812 --
4813 PROCEDURE Delete_Task_Version(
4814  p_api_version              IN  NUMBER      :=1.0,
4815  p_init_msg_list            IN  VARCHAR2    :=FND_API.G_TRUE,
4816  p_commit                   IN  VARCHAR2    :=FND_API.G_FALSE,
4817  p_validate_only            IN  VARCHAR2    :=FND_API.G_TRUE,
4818  p_validation_level         IN  NUMBER      :=FND_API.G_VALID_LEVEL_FULL,
4819  p_calling_module           IN  VARCHAR2    :='SELF_SERVICE',
4820  p_debug_mode               IN  VARCHAR2    :='N',
4821  p_max_msg_count            IN  NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4822  p_structure_version_id     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
4823  p_task_version_id          IN  NUMBER,
4824  p_record_version_number    IN  NUMBER,
4825  p_called_from_api          IN  VARCHAR2    := 'ABCD',
4826  p_structure_type           IN  VARCHAR2    := 'WORKPLAN', --bug 3301192
4827  x_return_status            OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
4828  x_msg_count                OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
4829  x_msg_data                 OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4830 ) IS
4831     l_msg_count                    NUMBER;
4832     l_msg_data                     VARCHAR2(250);
4833     l_return_status                VARCHAR2(2);
4834     l_data                          VARCHAR2(250);
4835     l_msg_index_out                 NUMBER;
4836     l_error_msg_code                     VARCHAR2(250);
4837 
4838     l_error_message_code           VARCHAR2(250);
4839 
4840     l_parent_struc_ver_id          NUMBER;
4841     l_wbs_level                    NUMBER;
4842     l_display_sequence             NUMBER;
4843     l_wbs_number                   NUMBER;
4844     l_delete_flag                  VARCHAR2(1) := 'N';
4845     l_structure_id                 NUMBER;
4846 
4847     CURSOR cur_child_tasks
4848     IS
4849       SELECT a.object_relationship_id object_relationship_id, a.object_id_to1 object_id_to1,
4850              a.record_version_number record_version_number, b.wbs_level wbs_level, b.display_sequence
4851       FROM (
4852       SELECT object_relationship_id, object_id_to1, record_version_number
4853         FROM pa_object_relationships
4854        WHERE relationship_type = 'S'
4855   START WITH object_id_from1 = p_task_version_id
4856   CONNECT BY object_id_from1 = PRIOR object_id_to1
4857       AND relationship_type = prior relationship_type -- bug 3919266
4858       AND relationship_type = 'S' ) A, pa_proj_element_versions b
4859       ,pa_proj_elements c        --bug 4573340
4860      WHERE a.object_id_to1 = b.element_version_id
4861      --bug 4573340
4862         and b.proj_element_id = c.proj_element_id
4863         and b.project_id = c.project_id
4864         and c.link_task_flag = 'N'
4865       --bug 4573340
4866   UNION
4867      SELECT a.object_relationship_id, element_version_id  object_id_to1,
4868             a.record_version_number, wbs_level, b.display_sequence
4869        FROM pa_object_relationships a, pa_proj_element_versions b
4870       WHERE element_version_id = p_task_version_id
4871         AND object_id_to1 = p_task_version_id
4872         AND element_version_id = object_id_to1
4873         AND relationship_type = 'S'
4874    ORDER BY 4 desc;
4875 
4876 
4877    CURSOR cur_proj_elem_ver( p_task_id NUMBER )
4878    IS
4879      SELECT rowid,record_version_number, project_id, parent_structure_version_id, proj_element_id
4880        FROM pa_proj_element_versions
4881       WHERE element_version_id = p_task_id;
4882 
4883    CURSOR cur_sch_ver( p_task_id NUMBER, p_project_id NUMBER )
4884    IS
4885      SELECT rowid
4886        FROM pa_proj_elem_ver_schedule
4887       WHERE element_version_id = p_task_id
4888         and project_id = p_project_id;
4889 
4890    CURSOR cur_pa_projs( p_project_id NUMBER )
4891    IS
4892      SELECT wbs_record_version_number
4893             -- HY: changed from pa_projects_all to pa_proj_elem_ver_structure
4894              FROM pa_proj_elem_ver_structure
4895  -- HY      FROM pa_projects_all
4896       WHERE project_id = p_project_id;
4897 
4898    CURSOR cur_pa_tasks( p_task_id NUMBER )
4899    IS
4900      SELECT record_version_number
4901        FROM pa_tasks
4902       WHERE task_id = p_task_id;
4903 
4904    CURSOR cur_chk_vers( x_proj_element_id NUMBER, x_task_version NUMBER )
4905    IS
4906      SELECT 'X'
4907        FROM pa_proj_element_versions
4908       WHERE proj_element_id = x_proj_element_id
4909         AND element_version_id <> x_task_version;
4910 
4911   CURSOR cur_proj_elems( x_proj_element_id NUMBER )
4912   IS
4913     SELECT rowid
4914       FROM pa_proj_elements
4915      WHERE proj_element_id = x_proj_element_id;
4916 
4917 
4918 --Ansari
4919   CURSOR cur_parent_ver_id( c_task_version_id NUMBER )
4920   IS
4921     SELECT object_id_from1
4922       FROM pa_object_relationships
4923      WHERE object_id_to1 = c_task_version_id
4924        AND relationship_type = 'S';
4925   l_parent_task_verion_id   NUMBER;
4926 --Ansari
4927 
4928 
4929 --hsiu added, for dates rollup
4930    CURSOR get_peer_tasks
4931    IS
4932      select b.object_id_to1 object_id_to1
4933        from pa_object_relationships a,
4934             pa_object_relationships b,
4935             pa_proj_element_versions c,
4936             pa_proj_elements d
4937       where a.object_id_to1 = p_task_version_id
4938         and a.object_type_to = 'PA_TASKS'
4939         and a.object_id_from1 = b.object_id_from1
4940         and a.object_type_from = b.object_type_from
4941         and b.object_type_to = 'PA_TASKS'
4942         and b.object_id_to1 <> p_task_version_id
4943         and a.relationship_type = 'S'
4944         and b.relationship_type = 'S'
4945         and b.object_id_to1 = c.element_version_id
4946         and c.project_id = d.project_id
4947         and c.proj_element_id = d.proj_element_id
4948         and d.link_task_flag <> 'Y';
4949    c_get_peer_tasks get_peer_tasks%ROWTYPE;
4950    l_peer_tasks_exist VARCHAR2(1) := 'Y';
4951    l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
4952 
4953 --hsiu added, for task weighting
4954    CURSOR get_parent_version_id IS
4955      select object_id_from1
4956        from pa_object_relationships
4957       where object_id_to1 = p_task_version_id
4958         and object_type_to = 'PA_TASKS'
4959         and relationship_type = 'S'
4960         and object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
4961    l_old_parent_ver_id    NUMBER;
4962 --end task weighting changes
4963 
4964    x_row_id                  VARCHAR2(255);
4965    x_row_id_elem             VARCHAR2(255);
4966    x_sch_row_id              VARCHAR2(255);
4967    x_record_version_number   NUMBER;
4968 
4969    x_task_rec_version_number NUMBER;
4970    x_wbs_rec_version_number  NUMBER;
4971    x_parent_struc_ver_id     NUMBER;
4972    x_project_id              NUMBER;
4973    l_proj_element_id         NUMBER;
4974    l_dummy_char              VARCHAR2(1);
4975    l_task_cnt                NUMBER;
4976    l_selected_seq_num        NUMBER;
4977 
4978    --hsiu task status changes
4979    cursor get_latest_task_ver_id IS
4980      select b.parent_structure_version_id, b.element_version_id
4981        from pa_proj_element_versions b,
4982             pa_proj_elem_ver_structure c
4983       where b.element_version_id = p_task_version_id
4984         and b.project_id = c.project_id
4985         and b.parent_structure_version_id = c.element_version_id
4986         and c.LATEST_EFF_PUBLISHED_FLAG = 'Y';
4987    l_latest_task_ver_rec    get_latest_task_ver_id%ROWTYPE;
4988    --end task status changes
4989 
4990    --hsiu: bug 2800553: for performance changes
4991    l_calling_module VARCHAR2(30);
4992 
4993 --Bug 2947492  ( delete )
4994 
4995 --Bug 3305199: commented out for M
4996 --l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
4997 l_parent_task_id             NUMBER;
4998 l_top_task_id                NUMBER;
4999 l_validation_mode               VARCHAR2(1);
5000 
5001 l_Structure_Version_ID      NUMBER;     -- FP_M changes 3305199
5002 
5003 CURSOR get_parent_task_id( c_project_id  NUMBER , c_task_id NUMBER ) IS
5004     SELECT parent_task_id, top_task_id, record_version_number FROM pa_tasks
5005      WHERE project_id = c_project_id and task_id = c_task_id;
5006 
5007 --End Bug 2947492
5008 
5009 --bug 3053281
5010   l_wp_type              VARCHAR2(1);
5011   l_weighting_basis_Code VARCHAR2(30);
5012   l_shared               VARCHAR2(1) := 'N';
5013 --end bug 3053281
5014 
5015 --3035902: process update flag changes
5016   cursor get_task_type_id(c_proj_element_id NUMBER) IS
5017       select type_id
5018         from pa_proj_elements
5019        where proj_element_id = c_proj_element_id;
5020  l_task_type_id      NUMBER;
5021  l_progress_flag     VARCHAR2(1);
5022  l_Project_ID   number;
5023 --3035902: end process update flag changes
5024 
5025   --Cursor to selct fp task version id to delete the mapping
5026   -- Added by Skannoji
5027   CURSOR cur_fp_tsk_ver_id( c_task_version_id NUMBER )
5028   IS
5029     SELECT object_id_to1
5030       FROM pa_object_relationships
5031      -- bug# 3766336 Satish 19/07/04
5032      --WHERE object_id_from1 = p_task_version_id
5033      WHERE object_id_from1 = c_task_version_id
5034        AND relationship_type = 'M';
5035 
5036       l_fp_task_version_id       PA_OBJECT_RELATIONSHIPS.object_id_to1%TYPE;
5037       /* Bug #: 3305199 SMukka                                                         */
5038       /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5039       /* l_element_version_id_tbl   PA_PLSQL_DATATYPES.IdTabTyp;                       */
5040       l_element_version_id_tbl   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
5041       l_wp_str_exists            VARCHAR2(1);
5042  --skannoji
5043  --
5044    --Bug No 3450684 Smukka For Subproject Association
5045    CURSOR get_subproj_relation(cp_task_ver_id NUMBER) IS
5046    SELECT pors.object_relationship_id,pors.record_version_number
5047      FROM pa_object_relationships pors
5048 --bug 4573340
5049      ,pa_object_relationships pors1
5050     WHERE
5051       --pors.object_id_from1= cp_task_ver_id
5052       pors1.object_id_from1 = cp_task_ver_id
5053       AND pors.object_id_from1 = pors1.object_id_to1
5054       AND pors1.relationship_type = 'S'
5055 --bug 4573340
5056       AND pors.relationship_type IN ('LW','LF')
5057       AND pors.object_id_from2 <> pors.object_id_to2
5058       AND pors.object_type_from = 'PA_TASKS'
5059       AND pors.object_type_to = 'PA_STRUCTURES';
5060       get_subproj_relation_rec get_subproj_relation%ROWTYPE;
5061 
5062   l_task_id NUMBER; --bug 4006401
5063 
5064   --bug 4006401
5065   CURSOR get_all_subtasks(c_task_version_id NUMBER) IS
5066     select object_id_to1 task_ver_id
5067       from pa_object_relationships pors
5068      start with object_id_from1 = c_task_version_id
5069        and relationship_type = 'S'
5070        and object_type_from = 'PA_TASKS'
5071        and object_type_to = 'PA_TASKS'
5072     connect by relationship_type = prior relationship_type
5073        and prior object_type_to = object_type_from
5074        and prior object_id_to1 = object_id_from1
5075     UNION
5076     select element_version_id task_ver_id
5077       from pa_proj_element_versions
5078      where element_version_id = c_task_version_id;
5079   --end bug 4006401
5080 
5081   --bug 4110957
5082   CURSOR get_tsk_cnt(c_struc_ver_id NUMBER) IS
5083     select count(1) from pa_proj_element_versions
5084      where object_type = 'PA_TASKS'
5085        and parent_structure_version_id = c_struc_ver_id;
5086   l_tsk_ver_cnt  NUMBER;
5087   --end bug 4110957
5088 
5089   -- 4201927 Added following local variables , the values are derived once and
5090   -- used further , For performance fix
5091   l_structure_sharing_code varchar2(35);
5092   l_structure_type_wp      varchar2(1);
5093   l_structure_type_fin     varchar2(1);
5094   -- 4201927 end
5095 
5096   -- 4221374 Added following local variables for perf fix
5097   l_task_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5098   task_index NUMBER;
5099   -- 4221374 end
5100 
5101   -- Begin fix for Bug # 4506308.
5102 
5103   cursor l_cur_projects_all(c_project_id NUMBER) is
5104   select ppa.template_flag, ppa.record_version_number
5105   from pa_projects_all ppa
5106   where ppa.project_id = c_project_id;
5107 
5108   l_ver_enabled    VARCHAR2(1);
5109   l_template_flag  VARCHAR2(1);
5110   l_rec_ver_number NUMBER;
5111 
5112   -- End fix for Bug # 4506308.
5113 
5114      l_debug_mode             VARCHAR2(1);
5115 
5116 BEGIN
5117 
5118      l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5119 
5120     -- Added for FP_M changes : Bhumesh
5121     -- 4201927 Removed following code for performance issue
5122     -- the same information ( project_id ) is already available in below select
5123     /*
5124     Begin
5125       SELECT project_id
5126       Into   l_Project_ID
5127       FROM   pa_proj_element_versions
5128       WHERE  element_version_id = p_task_version_id and rownum < 2;
5129     End;
5130     */
5131     -- 4201927 end
5132 
5133       -- 4201927 added project_id column selection
5134       select proj_element_id, project_id into l_task_id , l_Project_ID -- 4201927
5135         from pa_proj_element_versions
5136        where element_version_id = p_task_version_id;
5137 
5138     -- 4201927 Retrieving structure sharding code once and using it for further processing
5139     l_structure_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_Project_id); -- dthakker added
5140 
5141     -- 4201927 Commented below code as for PARTIALLY SHARED structure, Delete Button is not
5142     -- shown financial tab
5143 
5144     /*
5145     -- Tracking bug 3305199
5146     If p_Structure_Type = 'FINANCIAL' and
5147     PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_Project_id )= 'SHARE_PARTIAL'
5148     then
5149        PA_Tasks_Maint_Utils.Check_WorkPlan_Task_Exists (
5150         p_api_version         => p_api_version
5151         , p_calling_module    => p_calling_module
5152         , p_debug_mode        => p_debug_mode
5153         , p_task_version_id   => p_task_version_id
5154         , x_return_status     => x_return_status
5155         , x_msg_count         => x_msg_count
5156         , x_msg_data          => x_msg_data
5157         , x_error_msg_code    => l_error_msg_code );
5158     If x_return_status = FND_API.G_RET_STS_ERROR then
5159            RAISE FND_API.G_EXC_ERROR;
5160     End If;
5161     End If;
5162     -- End of FP_M changes
5163     */
5164     -- 4201927 end
5165 
5166     IF (p_debug_mode = 'Y') THEN
5167        pa_debug.debug('PA_TASK_PVT1.DELETE_TASK_VERSION begin');
5168     END IF;
5169 
5170     IF (p_commit = FND_API.G_TRUE) THEN
5171       savepoint DELETE_TASK_VER_PRIVATE;
5172     END IF;
5173 
5174     IF (p_debug_mode = 'Y') THEN
5175       pa_debug.debug('Performing validations');
5176     END IF;
5177 
5178 --hsiu
5179 --added for task weighting changes
5180     OPEN get_parent_version_id;
5181     FETCH get_parent_version_id INTO l_old_parent_ver_id;
5182     CLOSE get_parent_version_id;
5183 --end task weighting changes
5184 
5185 
5186 --hsiu
5187 --added on 08-JAN-2002
5188 --check if task is linked task
5189     IF (p_structure_version_id IS NOT NULL) AND
5190        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
5191       IF ('N' = pa_proj_elements_utils.check_task_in_structure(
5192             p_structure_version_id,
5193             p_task_version_id)) THEN
5194         --deleting linked task. Error
5195         x_return_status := FND_API.G_RET_STS_ERROR;
5196         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_DEL_LINKED_TASK');
5197         l_msg_data := 'PA_PS_NO_DEL_LINKED_TASK';
5198         RAISE FND_API.G_EXC_ERROR;
5199       END IF;
5200     END IF;
5201 
5202 --hsiu added, for dates rollup
5203     OPEN get_peer_tasks;
5204     FETCH get_peer_tasks INTO c_get_peer_tasks;
5205     IF get_peer_tasks%NOTFOUND THEN
5206       l_peer_tasks_exist := 'N';
5207     ELSE
5208       l_peer_tasks_exist := 'Y';
5209       l_tasks_ver_ids.extend;
5210       l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
5211     END IF;
5212     CLOSE get_peer_tasks;
5213 --dbms_output.put_line('del tsk pvt: '||l_tasks_ver_ids(l_tasks_ver_ids.count)||', '||l_peer_tasks_exist);
5214 
5215 --bug 3301192
5216 
5217 
5218   l_wp_str_exists := PA_PROJ_TASK_STRUC_PUB.wp_str_exists(l_project_id);
5219   l_shared        := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_project_id);
5220 --bug 3301192
5221 
5222 --bug 4006401
5223 
5224   -- 4201927 Added one more IF condition p_called_from_api <> 'DELETE_STRUCTURE_VERSION'
5225   -- below code shuold not be called for delete structure version flow :: for performance fix
5226 
5227   --IF l_wp_str_exists = 'Y' OR l_shared = 'Y' THEN -- commented for 4201927
5228   IF p_called_from_api <> 'DELETE_STRUCTURE_VERSION' AND ( l_wp_str_exists = 'Y' OR l_shared = 'Y' ) THEN  -- 4201927 added
5229     FOR i IN get_all_subtasks(p_task_version_id) LOOP
5230       l_element_version_id_tbl.extend(1);
5231       l_element_version_id_tbl(l_element_version_id_tbl.count) := i.task_ver_id;
5232     END LOOP;
5233 
5234     BEGIN
5235       PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions(
5236              p_context                      => 'WORKPLAN'
5237             ,p_task_or_res                  => 'TASKS'
5238             ,p_element_version_id_tbl       => l_element_version_id_tbl
5239             ,x_return_status               => x_return_status
5240             ,x_msg_count                   => x_msg_count
5241             ,x_msg_data                    => x_msg_data);
5242     EXCEPTION
5243       WHEN OTHERS THEN
5244         fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
5245                                 p_procedure_name => 'delete_Task_version',
5246                                 p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions:'||SQLERRM,1,240));
5247         RAISE FND_API.G_EXC_ERROR;
5248     END;
5249     IF x_return_status = FND_API.G_RET_STS_ERROR then
5250       RAISE FND_API.G_EXC_ERROR;
5251     End If;
5252   END IF;
5253 --end bug 4006401
5254 
5255   -- 4201927 For performance fix :: retrieve below values once and using it for further processing
5256 
5257   l_structure_type_fin := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(   p_structure_version_id => p_structure_version_id
5258                                            ,p_structure_type       => 'FINANCIAL' );
5259 
5260   l_structure_type_wp  := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(   p_structure_version_id => p_structure_version_id
5261                                            ,p_structure_type       => 'WORKPLAN' );
5262 
5263   -- 4201927 end
5264 
5265 --added for bug 4006401
5266   -- 4201927 Using local values rather than calling api
5267   --IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(   p_structure_version_id => p_structure_version_id
5268   --                                         ,p_structure_type       => 'FINANCIAL' ) = 'Y') THEN --  4201927 commented
5269   IF l_structure_type_fin = 'Y' THEN -- 4201927 added
5270     IF nvl(l_shared,'N') = 'N' THEN
5271       l_delete_flag := 'Y';
5272     ELSE
5273       SELECT proj_element_id INTO l_structure_id
5274         FROM pa_proj_element_versions
5275        WHERE element_version_id = p_structure_version_id
5276          AND project_id = l_project_id;
5277 
5278       IF PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(
5279                             p_project_id   => l_project_id
5280                            ,p_structure_id => l_structure_id ) = 'N'
5281       THEN
5282         l_delete_flag := 'Y';
5283       ELSE
5284         -- 4201927 Using local values rather than calling api
5285         --IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(   p_structure_version_id => p_structure_version_id
5286         --                                                        ,p_structure_type       => 'WORKPLAN' ) = 'Y') THEN -- 4201927 commented
5287         IF  l_structure_type_wp = 'Y' THEN -- 4201927 added
5288           IF PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id) = 'N' THEN
5289             l_delete_flag := 'Y';
5290           END IF;
5291         END IF;
5292       END IF;
5293     END IF ; -- Bug#3834117
5294   END IF;
5295 
5296   IF l_delete_flag = 'Y' AND PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id )= 'Y'
5297       -- Added for FP_M changes Bug 3305199 Bhumesh
5298   THEN
5299 
5300     -- Added for FP_M changes
5301     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_Project_ID) = 'Y' then
5302 
5303       PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
5304              p_structure_version_id => P_Structure_Version_ID
5305             ,p_dirty_flag           => 'Y'             --bug 3902282
5306         ,x_return_status        => x_return_status
5307         ,x_msg_count            => x_msg_count
5308         ,x_msg_data             => x_msg_data);
5309 
5310       IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
5311         x_msg_count := FND_MSG_PUB.count_msg;
5312         If x_msg_count = 1 then
5313           pa_interface_utils_pub.get_messages
5314               (p_encoded        => FND_API.G_TRUE,
5315                p_msg_index      => 1,
5316                p_msg_count      => l_msg_count,
5317                p_msg_data       => l_msg_data,
5318                p_data           => l_data,
5319                p_msg_index_out  => l_msg_index_out);
5320                x_msg_data := l_data;
5321         End If;
5322         raise FND_API.G_EXC_ERROR;
5323       End If;
5324     End If;
5325 
5326     OPEN  cur_pa_projs( l_project_id );
5327     FETCH cur_pa_projs INTO x_wbs_rec_version_number;
5328     CLOSE cur_pa_projs;
5329 
5330     --call plannable tasks api here. This will be executed whenever a task is deleted regardless from
5331     --which environement FORMS, Self Service or AMG.
5332     OPEN get_parent_task_id( l_project_id, l_task_id );
5333     FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id, x_task_rec_version_number;
5334     CLOSE get_parent_task_id;
5335 
5336     IF  p_called_from_api <> 'MOVE_TASK_VERSION' AND
5337         p_calling_module NOT IN ( 'FORMS', 'AMG' )    --Added condition to call this api from forms and AMG apis.
5338                                              --Since forms and AMG already deletes from pa_tasks we do not have to call the following api again.
5339     THEN
5340       PA_TASKS_MAINT_PUB.DELETE_TASK(
5341                   p_api_version                       => p_api_version
5342                  ,p_init_msg_list                     => p_init_msg_list
5343                  ,p_commit                            => p_commit
5344                  ,p_validate_only                     => p_validate_only
5345                  ,p_validation_level                  => p_validation_level
5346                  ,p_calling_module                    => p_calling_module
5347                  ,p_debug_mode                        => p_debug_mode
5348                  ,p_project_id                        => l_project_id
5349                  ,p_task_id                           => l_task_id
5350                  ,p_record_version_number             => x_task_rec_version_number
5351                  ,p_wbs_record_version_number         => x_wbs_rec_version_number
5352                  ,p_called_from_api                   => p_called_from_api
5353                  -- 4201927 pass p_bulk_flag as 'Y' to avoid delete_task_ok api validation in
5354                  -- pa_proj_maint_pvt and pa_project_core.delete_task apis
5355                  ,p_bulk_flag                         => 'Y'
5356                  ,x_return_status                     => l_return_status
5357                  ,x_msg_count                         => l_msg_count
5358                  ,x_msg_data                          => l_msg_data);
5359       IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5360         x_msg_count := FND_MSG_PUB.count_msg;
5361         IF x_msg_count = 1 then
5362           pa_interface_utils_pub.get_messages(
5363                     p_encoded        => FND_API.G_TRUE,
5364                     p_msg_index      => 1,
5365                     p_msg_count      => l_msg_count,
5366                     p_msg_data       => l_msg_data,
5367                     p_data           => l_data,
5368                     p_msg_index_out  => l_msg_index_out);
5369                     x_msg_data := l_data;
5370         END IF;
5371         raise FND_API.G_EXC_ERROR;
5372       END IF;
5373     END IF; --called_from_api chk.
5374   END IF; --delete flag chk
5375 --end bug 4006401
5376 
5377 -- 4221374  Initializing the task_index to 0 for delete_working_wp_progress api parameter
5378 task_index := 0;
5379 
5380 FOR cur_child_tasks_rec IN cur_child_tasks LOOP
5381 
5382 ----dbms_output.put_line( 'Task version deleted '||cur_child_tasks_rec.object_id_to1 );
5383 
5384    OPEN cur_proj_elem_ver( cur_child_tasks_rec.object_id_to1 );
5385    FETCH cur_proj_elem_ver INTO x_row_id, x_record_version_number, x_project_id, x_parent_struc_ver_id, l_proj_element_id;
5386    IF cur_proj_elem_ver%FOUND
5387    THEN
5388      IF cur_child_tasks_rec.object_id_to1 = p_task_version_id
5389      THEN
5390         IF x_record_version_number <> p_record_version_number
5391         THEN
5392            CLOSE cur_proj_elem_ver;
5393            FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_CHANGED');
5394            APP_EXCEPTION.Raise_Exception;
5395         END IF;
5396      END IF;
5397      --check_delete_task ok
5398 
5399 --dbms_output.put_line( 'before chk_delete ' );
5400 
5401 --The following code is reqd. to pass calling mode to check api bcoz PA_PROJ_ELEMENTS_UTILS.check_delete_task_ver_ok again calls
5402 --PA_TASK_UTILS.check_delete_task_ok api
5403 --bug 2947492
5404 --commenting out the 'R'estricted mode logic for bug 3010538
5405 --     IF p_calling_module = 'AMG'
5406 --     THEN
5407 --         l_validation_mode   := 'R';
5408 --     ELSE
5409          l_validation_mode   := 'U';
5410 --     END IF;
5411 --End bug 2947492
5412 
5413 /*  bug 4006401--removed since it is called in PUB.
5414      IF  p_called_from_api <> 'MOVE_TASK_VERSION'
5415      THEN
5416          PA_PROJ_ELEMENTS_UTILS.check_delete_task_ver_ok(
5417                                     p_project_id                   => x_project_id
5418                                   ,p_task_version_id              => cur_child_tasks_rec.object_id_to1
5419                                   ,p_parent_structure_ver_id      => x_parent_struc_ver_id
5420 --bug 3010538                     ,p_validation_mode                 => l_validation_mode   --bug 2947492
5421                                   ,x_return_status                => l_return_status
5422                                   ,x_error_message_code           => l_error_message_code );
5423      END IF;
5424 
5425 --dbms_output.put_line('status  = '||l_return_status||','||l_error_message_code);
5426      IF (l_return_status <> 'S') THEN
5427        x_return_status := l_return_status;
5428        PA_UTILS.ADD_MESSAGE('PA', l_error_message_code);
5429        l_msg_data := l_error_message_code;
5430        RAISE FND_API.G_EXC_ERROR;
5431      END IF;
5432 */
5433 
5434 --dbms_output.put_line( 'before workplan test ' );
5435 
5436      --deleting schedule version if its a workplan
5437      --IF workplan_structure THEN
5438    IF  p_called_from_api <> 'MOVE_TASK_VERSION' THEN
5439      IF PA_PROJ_ELEMENTS_UTILS.structure_type(
5440                         p_structure_version_id => null
5441                        ,p_task_version_id      => cur_child_tasks_rec.object_id_to1
5442                        ,p_structure_type       => 'WORKPLAN' ) = 'Y' THEN
5443 
5444         -- 4201927 Commented below code for performance issue
5445         -- Using direct delete statement rather than deriving row_id and calling
5446         -- delete_row with row id
5447         /*
5448         OPEN cur_sch_ver( cur_child_tasks_rec.object_id_to1, x_project_id );
5449         FETCH cur_sch_ver INTO x_sch_row_id;
5450         IF  cur_sch_ver%FOUND
5451         THEN
5452                PA_PROJ_ELEMENT_SCH_PKG.Delete_row(  x_sch_row_id );
5453         END IF;
5454         CLOSE cur_sch_ver;
5455         */
5456 
5457         -- Added direct delete statement
5458         DELETE FROM PA_PROJ_ELEM_VER_SCHEDULE
5459         WHERE ELEMENT_VERSION_ID = cur_child_tasks_rec.object_id_to1
5460         AND PROJECT_ID = x_project_id;
5461 
5462         -- 4201927 end
5463 
5464      -- Added by skannoji
5465      -- Deleteing planning transactions for all given element version id
5466 --     IF ( (PA_PROJ_TASK_STRUC_PUB.wp_str_exists(x_project_id) = 'Y') OR
5467 --        (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(x_project_id) = 'Y') ) THEN
5468 /*
5469        IF l_wp_str_exists = 'Y' OR
5470           l_shared        = 'Y'
5471        THEN
5472        l_element_version_id_tbl.extend(1);
5473        l_element_version_id_tbl(1) := cur_child_tasks_rec.object_id_to1;
5474        --Smukka Bug No. 3474141 Date 03/01/2004
5475        --moved PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions into plsql block
5476        BEGIN
5477            PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions(
5478              p_context                      => 'WORKPLAN'
5479             ,p_task_or_res                  => 'TASKS'
5480             ,p_element_version_id_tbl       => l_element_version_id_tbl
5481 --          ,p_maintain_reporting_lines     => 'Y'
5482             ,x_return_status               => x_return_status
5483             ,x_msg_count                   => x_msg_count
5484             ,x_msg_data                    => x_msg_data);
5485        EXCEPTION
5486           WHEN OTHERS THEN
5487                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
5488                                        p_procedure_name => 'delete_Task_version',
5489                                        p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions:'||SQLERRM,1,240));
5490           RAISE FND_API.G_EXC_ERROR;
5491        END;
5492        IF x_return_status = FND_API.G_RET_STS_ERROR then
5493            RAISE FND_API.G_EXC_ERROR;
5494        End If;
5495      END IF;
5496 */
5497        -- till here by skannoji
5498 
5499      END IF;
5500    END IF;
5501 
5502     -- Added by skannoji
5503     -- While deletion of task, the task mapping should be deleted
5504 
5505     -- 4201927 Commented below code , Using local derived values rather than calling api
5506     /*
5507     IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(
5508                                             p_structure_version_id => x_parent_struc_ver_id
5509                                            ,p_structure_type       => 'WORKPLAN' ) = 'Y') AND
5510     (PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(x_project_id )= 'SPLIT_MAPPING')
5511     */
5512     IF l_structure_type_wp = 'Y' AND l_structure_sharing_code = 'SPLIT_MAPPING'
5513     -- 4201927 end
5514     then
5515 
5516        --Get fp task version id to delete mapping.
5517        OPEN cur_fp_tsk_ver_id( cur_child_tasks_rec.object_id_to1 );
5518        FETCH cur_fp_tsk_ver_id INTO l_fp_task_version_id;
5519            IF cur_fp_tsk_ver_id%FOUND THEN
5520                 PA_PROJ_STRUC_MAPPING_PUB.delete_mapping
5521                     (
5522                            p_wp_task_version_id    => cur_child_tasks_rec.object_id_to1
5523                          , p_fp_task_version_id    => l_fp_task_version_id
5524                          , x_return_status         => x_return_status
5525                          , x_msg_count             => x_msg_count
5526                          , x_msg_data              => x_msg_data);
5527            END IF;
5528        CLOSE cur_fp_tsk_ver_id;
5529 
5530        If x_return_status = FND_API.G_RET_STS_ERROR then
5531         RAISE FND_API.G_EXC_ERROR;
5532        End If;
5533     End If;
5534       -- till here
5535 
5536      --Do financial task check
5537      --If financial
5538      --enough to check first record.
5539 
5540 --dbms_output.put_line( 'before financial test ' );
5541 
5542      -- 4201927 Commented below code for performance fix, the derived flag l_dlete_flag in below code is
5543      -- not used for further processing
5544 
5545      /*
5546      IF cur_child_tasks%ROWCOUNT = 1
5547      THEN
5548        IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(   p_structure_version_id => x_parent_struc_ver_id
5549                                            ,p_structure_type       => 'FINANCIAL' ) = 'Y')
5550          THEN
5551            --If structure has any published versions.
5552           -- IF ( PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published( p_project_id => x_project_id
5553             --                                                 ,p_structure_version_id => x_parent_struc_ver_id ) = 'N' )
5554            --THEN
5555 
5556            -- Bug#3834117
5557            -- For a split case if task is deleted from SS page
5558            -- the tasks were not getting deleted from PA_TASKS
5559            -- table. In SPLIT case fin tasks should always get deleted
5560            -- from PA_TASKS table
5561            IF nvl(l_shared,'N') = 'N' THEN
5562              l_delete_flag := 'Y';
5563            ELSE
5564                 SELECT proj_element_id INTO l_structure_id
5565                   FROM pa_proj_element_versions
5566                  WHERE element_version_id = x_parent_struc_ver_id
5567                    AND project_id = x_project_id;
5568 
5569                 IF PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(
5570                             p_project_id   => x_project_id
5571                            ,p_structure_id => l_structure_id ) = 'N'
5572                 THEN
5573                   l_delete_flag := 'Y';
5574                 ELSE
5575                   IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(   p_structure_version_id => x_parent_struc_ver_id
5576                                                                                ,p_structure_type       => 'WORKPLAN' ) = 'Y') THEN
5577                     IF PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(x_project_id) = 'N' THEN
5578                       l_delete_flag := 'Y';
5579                     END IF;
5580                   END IF;
5581                 END IF;
5582            END IF ; -- Bug#3834117
5583        END IF;
5584      END IF;
5585      */
5586      -- 4201927 end
5587 
5588 /*
5589      IF l_delete_flag = 'Y' AND PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_proj_element_id )= 'Y'
5590       -- Added for FP_M changes Bug 3305199 Bhumesh
5591      THEN
5592 
5593        -- Added for FP_M changes
5594        If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(x_Project_ID) = 'Y' then
5595 
5596           PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
5597              p_structure_version_id => P_Structure_Version_ID
5598             ,p_dirty_flag           => 'Y'             --bug 3902282
5599         ,x_return_status        => x_return_status
5600         ,x_msg_count            => x_msg_count
5601         ,x_msg_data             => x_msg_data
5602           );
5603 
5604           IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
5605             x_msg_count := FND_MSG_PUB.count_msg;
5606             If x_msg_count = 1 then
5607               pa_interface_utils_pub.get_messages
5608               (p_encoded        => FND_API.G_TRUE,
5609                p_msg_index      => 1,
5610                p_msg_count      => l_msg_count,
5611                p_msg_data       => l_msg_data,
5612                p_data           => l_data,
5613                p_msg_index_out  => l_msg_index_out);
5614                x_msg_data := l_data;
5615             End If;
5616             raise FND_API.G_EXC_ERROR;
5617           End If;
5618        End If;
5619        -- End of FP_M changes
5620 
5621           OPEN  cur_pa_projs( x_project_id );
5622           FETCH cur_pa_projs INTO x_wbs_rec_version_number;
5623           CLOSE cur_pa_projs;
5624 
5625          -- OPEN  cur_pa_tasks( l_proj_element_id );
5626          -- FETCH cur_pa_tasks INTO x_task_rec_version_number;
5627          -- CLOSE cur_pa_tasks; --commented out and merged with the cursor get_parent_task_id below for performance for bug 2947492
5628 
5629            --Bug 2947492
5630            --call plannable tasks api here. This will be executed whenever a task is deleted regardless from
5631            --which environement FORMS, Self Service or AMG.
5632 
5633             OPEN get_parent_task_id( x_project_id, l_proj_element_id );
5634             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id, x_task_rec_version_number;
5635             CLOSE get_parent_task_id;
5636 */
5637 
5638 --Bug 3305199: commented out for M
5639 /*
5640             l_plannable_tasks_tbl(1).impacted_task_id   := l_proj_element_id;
5641             l_plannable_tasks_tbl(1).action             := 'DELETE';
5642             l_plannable_tasks_tbl(1).old_parent_task_id := l_parent_task_id;
5643             l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
5644 
5645             IF  p_called_from_api <> 'MOVE_TASK_VERSION'   --Move will be taken care separately
5646                 AND p_calling_module NOT IN ( 'FORMS', 'AMG' )
5647             THEN
5648                 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
5649                     p_project_id         => x_project_id
5650                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
5651                   , x_return_status      => l_return_status
5652                   , x_msg_data           => l_msg_data
5653                   , x_msg_count          => l_msg_count
5654                 );
5655 
5656                IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5657                 x_msg_count := FND_MSG_PUB.count_msg;
5658                 IF x_msg_count = 1 then
5659                    pa_interface_utils_pub.get_messages
5660                    (p_encoded        => FND_API.G_TRUE,
5661                     p_msg_index      => 1,
5662                     p_msg_count      => l_msg_count,
5663                     p_msg_data       => l_msg_data,
5664                     p_data           => l_data,
5665                     p_msg_index_out  => l_msg_index_out);
5666                     x_msg_data := l_data;
5667                 END IF;
5668                 raise FND_API.G_EXC_ERROR;
5669                 END IF;
5670              END If; --<< not calling if called from move_task_version api >
5671              --End Bug 2947492
5672 */
5673 /*
5674 
5675 --dbms_output.put_line( 'before delete_task ' );
5676           IF  p_called_from_api <> 'MOVE_TASK_VERSION' AND
5677               p_calling_module NOT IN ( 'FORMS', 'AMG' )    --Added condition to call this api from forms and AMG apis.
5678                                              --Since forms and AMG already deletes from pa_tasks we do not have to call the following api again.
5679           THEN
5680               PA_TASKS_MAINT_PUB.DELETE_TASK
5681                (
5682                   p_api_version                       => p_api_version
5683                  ,p_init_msg_list                     => p_init_msg_list
5684                  ,p_commit                            => p_commit
5685                  ,p_validate_only                     => p_validate_only
5686                  ,p_validation_level                  => p_validation_level
5687                  ,p_calling_module                    => p_calling_module
5688                  ,p_debug_mode                        => p_debug_mode
5689                  ,p_project_id                        => x_project_id
5690                  ,p_task_id                     => l_proj_element_id
5691                  ,p_record_version_number             => x_task_rec_version_number
5692                  ,p_wbs_record_version_number         => x_wbs_rec_version_number
5693                  ,p_called_from_api                   => p_called_from_api
5694                  ,x_return_status                     => l_return_status
5695                  ,x_msg_count                         => l_msg_count
5696                  ,x_msg_data                          => l_msg_data
5697                 );
5698              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5699                 x_msg_count := FND_MSG_PUB.count_msg;
5700                 IF x_msg_count = 1 then
5701                    pa_interface_utils_pub.get_messages
5702                    (p_encoded        => FND_API.G_TRUE,
5703                     p_msg_index      => 1,
5704                     p_msg_count      => l_msg_count,
5705                     p_msg_data       => l_msg_data,
5706                     p_data           => l_data,
5707                     p_msg_index_out  => l_msg_index_out);
5708                     x_msg_data := l_data;
5709                 END IF;
5710              raise FND_API.G_EXC_ERROR;
5711              END IF;
5712 
5713            END IF; --called_from_api chk.
5714      END IF; --delete flag chk
5715 */
5716 
5717 --dbms_output.put_line( 'Task Version Id '|| cur_child_tasks_rec.object_id_to1 );
5718 --dbms_output.put_line( 'rel id '||cur_child_tasks_rec.object_relationship_id );
5719 
5720      --Ansari
5721      --Get parent of deleting task before its relationship gets deleted.
5722      OPEN cur_parent_ver_id( cur_child_tasks_rec.object_id_to1 );
5723      FETCH cur_parent_ver_id INTO l_parent_task_verion_id;
5724      CLOSE cur_parent_ver_id;
5725      --Ansari
5726 
5727 --bug 4573340. First delete the sub-project association if it exists:
5728         --Bug No 3450684 Smukka 16-Mar-2004
5729         --Deleting subproject association
5730         OPEN get_subproj_relation(cur_child_tasks_rec.object_id_to1);
5731         FETCH get_subproj_relation INTO get_subproj_relation_rec;
5732         IF get_subproj_relation%FOUND   --bug 4573340
5733         THEN
5734            IF l_debug_mode = 'Y' THEN
5735                 pa_debug.write('PA_TASK_PVT1.DELETE_TASK_VERSION', 'Before PA_RELATIONSHIP_PUB.Delete_SubProject_Association get_subproj_relation_rec.object_relationship_id='
5736                                ||get_subproj_relation_rec.object_relationship_id, 3);
5737                 pa_debug.write('PA_TASK_PVT1.DELETE_TASK_VERSION', 'Before PA_RELATIONSHIP_PUB.Delete_SubProject_Association get_subproj_relation_rec.record_version_number='
5738                                ||get_subproj_relation_rec.record_version_number, 3);
5739 
5740            END IF;
5741 
5742            PA_RELATIONSHIP_PUB.Delete_SubProject_Association    --bug 4573340  replaced the call with delete_subproject
5743                    (
5744                      p_init_msg_list                     => p_init_msg_list
5745                     ,p_commit                            => p_commit
5746                     ,p_validate_only                     => p_validate_only
5747                     ,p_validation_level                  => p_validation_level
5748                     ,p_calling_module                    => p_calling_module
5749                     ,p_debug_mode                        => p_debug_mode
5750                     ,p_max_msg_count                     => p_max_msg_count
5751                     ,p_object_relationships_id           => get_subproj_relation_rec.object_relationship_id
5752                     ,p_record_version_number             => get_subproj_relation_rec.record_version_number
5753                     ,x_return_status                     => l_return_status
5754                     ,x_msg_count                         => l_msg_count
5755                     ,x_msg_data                          => l_msg_data
5756                     );
5757 
5758            IF l_debug_mode = 'Y' THEN
5759                 pa_debug.write('PA_TASK_PVT1.DELETE_TASK_VERSION', 'After PA_RELATIONSHIP_PUB.Delete_SubProject_Association l_return_status='||l_return_status, 3);
5760            END IF;
5761 
5762           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5763             x_msg_count := FND_MSG_PUB.count_msg;
5764             IF x_msg_count = 1 then
5765               pa_interface_utils_pub.get_messages
5766                 (p_encoded        => FND_API.G_TRUE,
5767                  p_msg_index      => 1,
5768                  p_msg_count      => l_msg_count,
5769                  p_msg_data       => l_msg_data,
5770                  p_data           => l_data,
5771                  p_msg_index_out  => l_msg_index_out);
5772                  x_msg_data := l_data;
5773             END IF;
5774             RAISE FND_API.G_EXC_ERROR;
5775          END IF;
5776         END IF; --4573340
5777         CLOSE get_subproj_relation;
5778 
5779 
5780      PA_RELATIONSHIP_PUB.Delete_Relationship
5781                    (
5782                      p_api_version                       => p_api_version
5783                     ,p_init_msg_list                     => p_init_msg_list
5784                     ,p_commit                            => p_commit
5785                     ,p_validate_only                     => p_validate_only
5786                     ,p_validation_level                  => p_validation_level
5787                     ,p_calling_module                    => p_calling_module
5788                     ,p_debug_mode                        => p_debug_mode
5789                     ,p_max_msg_count                     => p_max_msg_count
5790                     ,p_object_relationship_id            => cur_child_tasks_rec.object_relationship_id
5791                     ,p_record_version_number             => cur_child_tasks_rec.record_version_number
5792                     ,x_return_status                     => l_return_status
5793                     ,x_msg_count                         => l_msg_count
5794                     ,x_msg_data                          => l_msg_data
5795                     );
5796 
5797              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5798                 x_msg_count := FND_MSG_PUB.count_msg;
5799                 IF x_msg_count = 1 then
5800                    pa_interface_utils_pub.get_messages
5801                    (p_encoded        => FND_API.G_TRUE,
5802                     p_msg_index      => 1,
5803                     p_msg_count      => l_msg_count,
5804                     p_msg_data       => l_msg_data,
5805                     p_data           => l_data,
5806                     p_msg_index_out  => l_msg_index_out);
5807                     x_msg_data := l_data;
5808                 END IF;
5809              raise FND_API.G_EXC_ERROR;
5810              END IF;
5811 
5812      PA_PROJ_ELEMENT_VERSIONS_PKG.Delete_Row( x_row_id );
5813 
5814      --Ansari
5815      --Call update wbs number
5816      PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS (
5817                                p_commit                   => p_commit
5818                               ,p_debug_mode               => p_debug_mode
5819                               ,p_parent_structure_ver_id  => x_parent_struc_ver_id
5820                               ,p_task_id                  => null
5821                               ,p_display_seq              => cur_child_tasks_rec.display_sequence
5822                               ,p_action                   => 'DELETE'
5823                               ,p_parent_task_id           => l_parent_task_verion_id
5824                               ,x_return_status            => l_return_status );
5825 
5826              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5827                 x_msg_count := FND_MSG_PUB.count_msg;
5828                 IF x_msg_count = 1 then
5829                    pa_interface_utils_pub.get_messages
5830                    (p_encoded        => FND_API.G_TRUE,
5831                     p_msg_index      => 1,
5832                     p_msg_count      => l_msg_count,
5833                     p_msg_data       => l_msg_data,
5834                     p_data           => l_data,
5835                     p_msg_index_out  => l_msg_index_out);
5836                     x_msg_data := l_data;
5837                 END IF;
5838              raise FND_API.G_EXC_ERROR;
5839              END IF;
5840      --Ansari
5841 
5842      IF  p_called_from_api <> 'MOVE_TASK_VERSION' THEN
5843         --Check if there are any versions exist
5844         OPEN cur_chk_vers( l_proj_element_id, cur_child_tasks_rec.object_id_to1 );
5845         FETCH cur_chk_vers INTO l_dummy_char;
5846         IF cur_chk_vers%NOTFOUND
5847         THEN
5848 
5849            -- 4201927 Performance Fix :: Commented below code to derive l_progress_flag , which is not
5850            -- used in further processing
5851            -- Also commented cursor usage to derive the row id as direct delete statement is used
5852            /*
5853            --3035902: process update flag changes
5854            --get progressable flag
5855            OPEN get_task_type_id(l_proj_element_id);
5856            FETCH get_task_type_id into l_task_type_id;
5857            CLOSE get_task_type_id;
5858            l_progress_flag := pa_task_type_utils.check_tk_type_progressable(l_task_type_id);
5859            --3035902: end process update flag changes
5860 
5861            OPEN cur_proj_elems( l_proj_element_id );
5862            FETCH cur_proj_elems INTO x_row_id_elem;
5863            CLOSE cur_proj_elems;
5864            */
5865            -- 4201927 end
5866            --dbms_output.put_line( 'Task Id '||l_proj_element_id );
5867 
5868            -- Added by skannoji
5869            -- Deleting deliverable task
5870            If (PA_PROJECT_STRUCTURE_UTILS.check_Deliverable_enabled(x_project_id) = 'Y' ) THEN
5871              PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk(
5872                p_task_element_id  => l_proj_element_id
5873               ,p_project_id       => x_project_id
5874               ,p_task_version_id  => cur_child_tasks_rec.object_id_to1
5875               , x_return_status   => x_return_status
5876               , x_msg_count       => x_msg_count
5877               , x_msg_data        => x_msg_data);
5878            End If;
5879            -- Added by skannoji end here
5880 
5881            IF x_return_status = FND_API.G_RET_STS_ERROR then
5882                RAISE FND_API.G_EXC_ERROR;
5883            End If;
5884 
5885            -- 4201927 Commented below code
5886            /*
5887            PA_PROJ_ELEMENTS_PKG.delete_row( x_row_id_elem );
5888            */
5889 
5890            -- USING direct delete statement on table
5891            DELETE FROM PA_PROJ_ELEMENTS WHERE PROJ_ELEMENT_ID = l_proj_element_id;
5892 
5893            -- 4201927 end
5894             -- anlee
5895             -- Ext Attribute changes
5896             -- Bug 2904327
5897 
5898             PA_USER_ATTR_PUB.DELETE_ALL_USER_ATTRS_DATA (
5899              p_validate_only             => FND_API.G_FALSE
5900             ,p_project_id                => x_project_id
5901             ,p_proj_element_id           => l_proj_element_id
5902             ,x_return_status             => l_return_status
5903             ,x_msg_count                 => l_msg_count
5904             ,x_msg_data                  => l_msg_data );
5905 
5906             l_msg_count := FND_MSG_PUB.count_msg;
5907 
5908             IF l_msg_count > 0 THEN
5909               x_msg_count := l_msg_count;
5910               x_return_status := 'E';
5911               RAISE  FND_API.G_EXC_ERROR;
5912             END IF;
5913           -- anlee end of changes
5914 
5915 --bug 3055766
5916             PA_TASK_PUB1.Delete_Task_Associations(
5917               p_task_id              => l_proj_element_id
5918              ,x_return_status        => l_return_status
5919              ,x_msg_count            => l_msg_count
5920              ,x_msg_data             => l_msg_data
5921               );
5922             l_msg_count := FND_MSG_PUB.count_msg;
5923 
5924             IF l_msg_count > 0 THEN
5925               x_msg_count := l_msg_count;
5926               x_return_status := 'E';
5927               RAISE  FND_API.G_EXC_ERROR;
5928             END IF;
5929 
5930 --End bug 3055766
5931 
5932 
5933         END IF;
5934         CLOSE cur_chk_vers;
5935       END IF;  --p_called_from_api chk.
5936 
5937    END IF;  --cur_proj_elem_ver%FOUND check
5938    CLOSE cur_proj_elem_ver;
5939    --
5940    l_task_cnt := nvl( l_task_cnt, 0 ) + 1;
5941    IF cur_child_tasks_rec.object_id_to1 = p_task_version_id
5942    THEN
5943       l_selected_seq_num := cur_child_tasks_rec.display_sequence;
5944    END IF;
5945 
5946    -- 4221374 For each sub task poulating the plsql table l_task_vesion_id
5947 
5948    task_index := task_index + 1;
5949    l_task_version_id_tbl.extend;
5950    l_task_version_id_tbl(task_index) := cur_child_tasks_rec.object_id_to1;
5951 
5952    -- commented below code , as it was getting called in loop
5953    -- Shifted this api out of for loop and passing the l_task_version_id_tbl plsql table to
5954    -- progres api
5955 
5956    /* Code to delete records from tables: pa_progress_rollup and pa_precent_completes. */
5957 
5958    /*
5959       BEGIN
5960 
5961            PA_PROGRESS_PUB.delete_working_wp_progress (
5962                      p_project_id               => x_project_id  -- Included for Better Performance : 4046005
5963                     ,p_task_version_id          => cur_child_tasks_rec.object_id_to1
5964                     ,p_calling_context          => 'TASK_VERSION'
5965                     ,x_return_status            => x_return_status
5966                     ,x_msg_count                => x_msg_count
5967                     ,x_Msg_data                 => x_msg_data
5968                     );
5969 
5970        EXCEPTION
5971 
5972            WHEN OTHERS THEN
5973 
5974                 fnd_msg_pub.add_exc_msg(
5975                    p_pkg_name       => 'PA_TASK_PVT1',
5976                    p_procedure_name => 'Delete_Task_Version',
5977                    p_error_text     => SUBSTRB('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
5978 
5979            RAISE FND_API.G_EXC_ERROR;
5980 
5981        END;
5982 
5983       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5984 
5985          RAISE FND_API.G_EXC_ERROR;
5986 
5987       END IF;
5988    */
5989 
5990    -- 4221374 end
5991 
5992 END LOOP;
5993 
5994   -- 4221374 If task table is populated , call progress api to delete progress records
5995 
5996   IF nvl(l_task_version_id_tbl.LAST,0) >= 1 THEN
5997 
5998       BEGIN
5999 
6000            PA_PROGRESS_PUB.delete_working_wp_progress (
6001                      p_project_id               => x_project_id  -- Included for Better Performance : 4046005
6002                     ,p_task_version_id          => l_task_version_id_tbl  -- cur_child_tasks_rec.object_id_to1
6003                     ,p_calling_context          => 'TASK_VERSION'
6004                     ,x_return_status            => x_return_status
6005                     ,x_msg_count                => x_msg_count
6006                     ,x_Msg_data                 => x_msg_data
6007                     );
6008 
6009        EXCEPTION
6010 
6011            WHEN OTHERS THEN
6012 
6013                 fnd_msg_pub.add_exc_msg(
6014                    p_pkg_name       => 'PA_TASK_PVT1',
6015                    p_procedure_name => 'Delete_Task_Version',
6016                    p_error_text     => SUBSTRB('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
6017 
6018            RAISE FND_API.G_EXC_ERROR;
6019 
6020        END;
6021 
6022       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6023 
6024          RAISE FND_API.G_EXC_ERROR;
6025 
6026       END IF;
6027 
6028   END IF;
6029 
6030   -- 4221374 end
6031   -- Bug Fix 5070454
6032   -- User is getting the record is modified error. This is happening due to the following update
6033   -- This is bumping up the rvns of all the records with higher display number than the one that is
6034   -- being deleted.
6035   -- Hence commenting out the update of RVN here.
6036 
6037   BEGIN
6038   UPDATE PA_PROJ_ELEMENT_VERSIONS
6039      SET display_sequence = PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, 0, l_task_cnt, 'DELETE', 'DOWN')
6040 --         record_version_number = record_version_number + 1
6041    WHERE parent_structure_version_id = x_parent_struc_ver_id
6042      AND (display_sequence > l_selected_seq_num)
6043      AND PA_PROJ_ELEMENTS_UTILS.link_flag ( proj_element_id ) = 'N';
6044   EXCEPTION
6045     WHEN OTHERS THEN
6046       PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
6047       raise FND_API.G_EXC_ERROR;
6048   END;
6049 
6050 --hsiu added, for dates rollup
6051   IF (l_peer_tasks_exist = 'Y') THEN
6052     -- 4201927 Using local variable rather than calling api again
6053     --IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(x_parent_struc_ver_id, 'WORKPLAN') = 'Y' then -- 4201927 commented
6054 
6055     IF l_structure_type_wp = 'Y' then -- 4201927 Added
6056           PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6057                          p_commit => FND_API.G_FALSE,
6058                          p_element_versions => l_tasks_ver_ids,
6059                          x_return_status => l_return_status,
6060                          x_msg_count => l_msg_count,
6061                          x_msg_data => l_msg_data);
6062 
6063        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6064          x_msg_count := FND_MSG_PUB.count_msg;
6065          if x_msg_count = 1 then
6066            pa_interface_utils_pub.get_messages
6067            (p_encoded        => FND_API.G_TRUE,
6068             p_msg_index      => 1,
6069             p_msg_count      => l_msg_count,
6070             p_msg_data       => l_msg_data,
6071             p_data           => l_data,
6072             p_msg_index_out  => l_msg_index_out);
6073             x_msg_data := l_data;
6074          end if;
6075          RAISE FND_API.G_EXC_ERROR;
6076        end if;
6077     END IF;
6078 
6079   ELSE
6080 
6081     --check if any task exists for this structure version (if this is last task)
6082     OPEN get_tsk_cnt(p_structure_version_id);
6083     FETCH get_tsk_cnt Into l_tsk_ver_cnt;
6084     CLOSE get_tsk_cnt;
6085 
6086     IF (l_tsk_ver_cnt = 0) THEN
6087       --set scheduled dates to sysdate
6088       update pa_proj_elem_ver_schedule
6089       set SCHEDULED_START_DATE = trunc(sysdate),
6090           SCHEDULED_FINISH_DATE = trunc(sysdate),
6091           DURATION = 1,
6092           RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,1)+1,
6093           LAST_UPDATE_DATE = SYSDATE,
6094           LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
6095           LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
6096       where project_id = l_project_id and element_version_id = p_structure_version_id;
6097 
6098      -- Begin fix for Bug # 4506308.
6099 
6100      -- Rollup scheduled dates to the project level if the project is version disabled or
6101      -- if it is a template.
6102 
6103      l_ver_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
6104 
6105      open l_cur_projects_all(l_project_id);
6106      fetch l_cur_projects_all into l_template_flag, l_rec_ver_number;
6107      close l_cur_projects_all;
6108 
6109      IF (l_template_flag = 'Y' OR l_ver_enabled = 'N') THEN
6110 
6111        PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
6112           p_validate_only          => FND_API.G_FALSE
6113          ,p_project_id             => l_project_id
6114          ,p_date_type              => 'SCHEDULED'
6115          ,p_start_date             => trunc(sysdate)
6116          ,p_finish_date            => trunc(sysdate)
6117          ,p_record_version_number  => l_rec_ver_number
6118          ,x_return_status          => x_return_status
6119          ,x_msg_count              => x_msg_count
6120          ,x_msg_data               => x_msg_data );
6121 
6122        IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6123           RAISE FND_API.G_EXC_ERROR;
6124        END IF;
6125      END IF;
6126 
6127      -- End fix for Bug # 4506308.
6128 
6129     END IF;
6130   END IF;
6131 
6132 --hsiu added for task status
6133   OPEN get_latest_task_ver_id;
6134   FETCH get_latest_task_ver_id into l_latest_task_ver_rec;
6135   IF (get_latest_task_ver_id%NOTFOUND) OR
6136      (l_latest_task_ver_rec.parent_structure_version_id <> p_structure_version_id) THEN
6137     --no rollup necessary
6138     NULL;
6139   ELSE
6140     --Rollup structure
6141     PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6142                   p_structure_version_id => p_structure_version_id
6143                  ,x_return_status => l_return_status
6144                  ,x_msg_count => l_msg_count
6145                  ,x_msg_data => l_msg_data
6146     );
6147 
6148     if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6149       x_msg_count := FND_MSG_PUB.count_msg;
6150         if x_msg_count = 1 then
6151           pa_interface_utils_pub.get_messages
6152            (p_encoded        => FND_API.G_TRUE,
6153             p_msg_index      => 1,
6154             p_msg_count      => l_msg_count,
6155             p_msg_data       => l_msg_data,
6156             p_data           => l_data,
6157             p_msg_index_out  => l_msg_index_out);
6158             x_msg_data := l_data;
6159         end if;
6160       RAISE FND_API.G_EXC_ERROR;
6161     end if;
6162 
6163   END IF;
6164   CLOSE get_latest_task_ver_id;
6165 --end task status changes
6166 
6167 
6168 --hsiu
6169 --added for task weighting
6170 --IF (PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( x_project_id ) ='MANUAL') THEN    --bug 3051413   --commenting this line for bug 3058051 issue # 1.
6171 
6172   PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
6173     p_task_version_id => l_old_parent_ver_id
6174    ,x_return_status   => l_return_status
6175    ,x_msg_count       => l_msg_count
6176    ,x_msg_data        => l_msg_data
6177   );
6178 
6179   if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6180     x_msg_count := FND_MSG_PUB.count_msg;
6181       if x_msg_count = 1 then
6182         pa_interface_utils_pub.get_messages
6183            (p_encoded        => FND_API.G_TRUE,
6184             p_msg_index      => 1,
6185             p_msg_count      => l_msg_count,
6186             p_msg_data       => l_msg_data,
6187             p_data           => l_data,
6188             p_msg_index_out  => l_msg_index_out);
6189             x_msg_data := l_data;
6190       end if;
6191     RAISE FND_API.G_EXC_ERROR;
6192   end if;
6193 --END IF;  --bug 3051413 --commenting out this line for bug 3058051 issue # 1
6194 --end task weighting changes
6195 
6196 --bug 3010538 (delete )
6197 
6198 --IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(
6199 --              x_parent_struc_ver_id, 'WORKPLAN') = 'Y' then  --bug 3051413
6200 
6201 --bug 3053281 --set flag if not (Workplan and Effort)
6202 --l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(x_project_id);
6203 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(x_parent_struc_ver_id, 'WORKPLAN');
6204 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(x_project_id);
6205 --3035902: process update flag changes
6206 --Bug No 3450684 SMukka Commented if condition
6207 --IF ((l_wp_type = 'Y') AND
6208 --    (l_weighting_basis_Code = 'EFFORT') AND
6209 --    (l_progress_flag = 'Y')) THEN
6210    --end 3035902: process update flag changes
6211    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
6212    (
6213       p_calling_context       => p_calling_module
6214      ,p_project_id            => x_project_id
6215      ,p_structure_version_id  => x_parent_struc_ver_id
6216      ,p_update_wbs_flag       => 'Y'
6217      ,x_return_status         => l_return_status
6218      ,x_msg_count             => l_msg_count
6219      ,x_msg_data              => l_msg_data);
6220 
6221    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6222      x_msg_count := FND_MSG_PUB.count_msg;
6223      if x_msg_count = 1 then
6224        pa_interface_utils_pub.get_messages
6225        (p_encoded        => FND_API.G_TRUE,
6226         p_msg_index      => 1,
6227         p_msg_count      => l_msg_count,
6228         p_msg_data       => l_msg_data,
6229         p_data           => l_data,
6230         p_msg_index_out  => l_msg_index_out);
6231         x_msg_data := l_data;
6232      end if;
6233      raise FND_API.G_EXC_ERROR;
6234    end if;
6235 -- end if;
6236 --END IF; --bug 3051413
6237 
6238 --End bug 3010538 (delete)
6239 
6240 
6241 x_return_status := FND_API.G_RET_STS_SUCCESS;
6242 
6243 EXCEPTION
6244     WHEN FND_API.G_EXC_ERROR THEN
6245       IF (p_commit = FND_API.G_TRUE) THEN
6246         ROLLBACK to DELETE_TASK_VER_PRIVATE;
6247       END IF;
6248       x_msg_count := FND_MSG_PUB.count_msg;
6249       x_return_status := FND_API.G_RET_STS_ERROR;
6250     WHEN OTHERS THEN
6251       IF (p_commit = FND_API.G_TRUE) THEN
6252         ROLLBACK to DELETE_TASK_VER_PRIVATE;
6253       END IF;
6254       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6255       x_msg_count := FND_MSG_PUB.count_msg;
6256       --put message
6257       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
6258                               p_procedure_name => 'delete_Task_version',
6259                               p_error_text     => SUBSTRB(SQLERRM,1,240));
6260       RAISE;
6261 END delete_task_version;
6262 
6263 -- API name                      : Create_Schedule_Version
6264 -- Type                          : Private procedure
6265 -- Pre-reqs                      : None
6266 -- Return Value                  : N/A
6267 -- Prameters
6268 -- p_api_version          IN    NUMBER  N   Not Null    1.0
6269 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
6270 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
6271 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
6272 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
6273 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
6274 -- p_debug_mode       IN    VARCHAR2    N   Null    N
6275 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6276 -- p_element_version_id IN  NUMBER  N   Not Null
6277 -- p_calendar_id    IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6278 -- p_scheduled_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6279 -- p_scheduled_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6280 -- p_obligation_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6281 -- p_obligation_end_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6282 -- p_actual_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6283 -- p_actual_finish_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6284 -- p_estimate_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6285 -- p_estimate_finish_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6286 -- p_duration   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6287 -- p_early_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6288 -- p_early_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6289 -- p_late_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6290 -- p_late_end_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
6291 -- p_milestone_flag IN  VARCHAR2    N   NULL    N
6292 -- p_critical_flag  IN  VARCHAR2    N   NULL    N
6293 -- x_pev_schedule_id    OUT NUMBER  N   NULL
6294 -- x_return_status  OUT     VARCHAR2    N   Null
6295 -- x_msg_count        OUT   NUMBER  N   Null
6296 -- x_msg_data         OUT   VARCHAR2    N   Null
6297 --
6298 --  History
6299 --
6300 --  23-OCT-01   Majid Ansari             -Created
6301 --
6302 --
6303 
6304 PROCEDURE Create_Schedule_Version(
6305  p_api_version        IN    NUMBER  :=1.0,
6306  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
6307  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
6308  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
6309  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
6310  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
6311  p_debug_mode         IN    VARCHAR2    :='N',
6312  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6313  p_element_version_id   IN  NUMBER,
6314  p_calendar_id        IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6315  p_scheduled_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6316  p_scheduled_end_date   IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6317  p_obligation_start_date IN DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6318  p_obligation_end_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6319  p_actual_start_date    IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6320  p_actual_finish_date   IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6321  p_estimate_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6322  p_estimate_finish_date IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6323  p_duration             IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6324  p_early_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6325  p_early_end_date         IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6326  p_late_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6327  p_late_end_date          IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6328  p_milestone_flag         IN    VARCHAR2    :='N',
6329  p_critical_flag          IN    VARCHAR2    :='N',
6330  p_WQ_PLANNED_QUANTITY        IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6331  p_PLANNED_EFFORT             IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6332  p_PLANNED_EQUIP_EFFORT       IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,   --bug 3305199
6333  p_ext_act_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
6334  p_ext_remain_duration         IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
6335  p_ext_sch_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
6336  p_attribute_category     IN    pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6337  p_attribute1             IN    pa_proj_elem_ver_schedule.attribute1%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6338  p_attribute2             IN    pa_proj_elem_ver_schedule.attribute2%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6339  p_attribute3             IN    pa_proj_elem_ver_schedule.attribute3%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6340  p_attribute4             IN    pa_proj_elem_ver_schedule.attribute4%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6341  p_attribute5             IN    pa_proj_elem_ver_schedule.attribute5%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6342  p_attribute6             IN    pa_proj_elem_ver_schedule.attribute6%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6343  p_attribute7             IN    pa_proj_elem_ver_schedule.attribute7%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6344  p_attribute8             IN    pa_proj_elem_ver_schedule.attribute8%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6345  p_attribute9             IN    pa_proj_elem_ver_schedule.attribute9%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6346  p_attribute10            IN    pa_proj_elem_ver_schedule.attribute10%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6347  p_attribute11            IN    pa_proj_elem_ver_schedule.attribute11%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6348  p_attribute12            IN    pa_proj_elem_ver_schedule.attribute12%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6349  p_attribute13            IN    pa_proj_elem_ver_schedule.attribute13%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6350  p_attribute14            IN    pa_proj_elem_ver_schedule.attribute14%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6351  p_attribute15            IN    pa_proj_elem_ver_schedule.attribute15%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6352 
6353  --bug 3305199 schedule options
6354  p_def_sch_tool_tsk_type_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6355  p_constraint_type_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6356  p_constraint_date             IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
6357  p_free_slack                  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6358  p_total_slack                 IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6359  p_effort_driven_flag          IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6360  p_level_assignments_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
6361  --end bug 3305199
6362 
6363  x_pev_schedule_id  OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6364  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6365  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
6366  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6367 ) IS
6368 
6369     l_msg_count                    NUMBER;
6370     l_msg_data                     VARCHAR2(250);
6371     l_return_status                VARCHAR2(2);
6372     l_error_message_code           VARCHAR2(250);
6373     l_duration_days                NUMBER;
6374 
6375    l_data                     VARCHAR2(250);
6376    l_msg_index_out                 NUMBER;
6377 
6378    CURSOR cur_proj_elem_ver
6379    IS
6380      SELECT rowid, object_type, project_id, proj_element_id
6381        FROM pa_proj_element_versions
6382       WHERE element_version_id = p_element_version_id;
6383 
6384    cur_proj_elem_ver_rec cur_proj_elem_ver%ROWTYPE;
6385    X_Row_id  VARCHAR2(255);
6386 
6387    cursor get_cal_id IS
6388      select a.calendar_id
6389        from pa_projects_all a, pa_proj_element_versions b
6390       where a.project_id = b.project_id
6391         and b.element_version_id = p_element_version_id;
6392 
6393 /* Bug 2791413 Begin */
6394   CURSOR get_project_id
6395    IS
6396      SELECT project_id,proj_element_id
6397        FROM pa_proj_element_versions
6398       WHERE element_version_id = p_element_version_id;
6399 
6400 
6401   cursor get_task_type_id(c_proj_element_id NUMBER) IS
6402       select type_id
6403         from pa_proj_elements
6404        where proj_element_id = c_proj_element_id;
6405 
6406  l_task_type_id      NUMBER;
6407  l_project_id        NUMBER;
6408  l_proj_element_id   NUMBER;
6409 
6410  /* Bug 2791413 End */
6411 
6412  l_calendar_id         NUMBER;
6413  l_scheduled_start_date  DATE;
6414  l_scheduled_end_date    DATE;
6415  l_obligation_start_date DATE;
6416  l_obligation_end_date   DATE;
6417  l_actual_start_date     DATE;
6418  l_actual_finish_date    DATE;
6419  l_estimated_start_date  DATE;
6420  l_estimated_finish_date     DATE;
6421  l_duration              NUMBER;
6422  l_early_start_date  DATE;
6423  l_early_end_date          DATE;
6424  l_late_start_date   DATE;
6425  l_late_end_date           DATE;
6426  l_wq_planned_quantity   NUMBER;
6427  l_planned_effort        NUMBER;
6428  l_critical_flag         VARCHAR2(1);
6429  l_milestone_flag        VARCHAR2(1);
6430  -- xxlu
6431  l_attribute_category      pa_proj_elem_ver_schedule.attribute_category%TYPE    ;
6432  l_attribute1              pa_proj_elem_ver_schedule.attribute1%TYPE            ;
6433  l_attribute2              pa_proj_elem_ver_schedule.attribute2%TYPE            ;
6434  l_attribute3              pa_proj_elem_ver_schedule.attribute3%TYPE            ;
6435  l_attribute4              pa_proj_elem_ver_schedule.attribute4%TYPE            ;
6436  l_attribute5              pa_proj_elem_ver_schedule.attribute5%TYPE            ;
6437  l_attribute6              pa_proj_elem_ver_schedule.attribute6%TYPE            ;
6438  l_attribute7              pa_proj_elem_ver_schedule.attribute7%TYPE            ;
6439  l_attribute8              pa_proj_elem_ver_schedule.attribute8%TYPE            ;
6440  l_attribute9              pa_proj_elem_ver_schedule.attribute9%TYPE            ;
6441  l_attribute10             pa_proj_elem_ver_schedule.attribute10%TYPE           ;
6442  l_attribute11             pa_proj_elem_ver_schedule.attribute11%TYPE           ;
6443  l_attribute12             pa_proj_elem_ver_schedule.attribute12%TYPE           ;
6444  l_attribute13             pa_proj_elem_ver_schedule.attribute13%TYPE           ;
6445  l_attribute14             pa_proj_elem_ver_schedule.attribute14%TYPE           ;
6446  l_attribute15             pa_proj_elem_ver_schedule.attribute15%TYPE           ;
6447  -- end xxlu changes
6448 
6449 --hsiu added for duration calculation
6450     l_act_duration_days            NUMBER;
6451     l_act_duration                 NUMBER;
6452     l_est_duration_days            NUMBER;
6453     l_est_duration                 NUMBER;
6454 
6455  --bug 3305199 schedule options
6456  l_def_sch_tool_tsk_type_code  VARCHAR2(30);
6457  l_constraint_type_code        VARCHAR2(30);
6458  l_constraint_date             DATE;
6459  l_free_slack                  NUMBER;
6460  l_total_slack                 NUMBER;
6461  l_effort_driven_flag          VARCHAR2(1);
6462  l_level_assignments_flag      VARCHAR2(1);
6463  --end bug 3305199
6464 
6465  l_Structure_Version_ID     NUMBER; -- FP_M changes 3305199
6466  l_ext_act_duration             NUMBER;
6467  l_ext_remain_duration          NUMBER;
6468  l_ext_sch_duration             NUMBER;
6469 BEGIN
6470     IF (p_debug_mode = 'Y') THEN
6471       pa_debug.debug('PA_TASK_PVT1.CREATE_SCHEDULE_VERSION begin');
6472     END IF;
6473 
6474     IF (p_commit = FND_API.G_TRUE) THEN
6475       savepoint CREATE_SCH_VER_PRIVATE;
6476     END IF;
6477 
6478     IF (p_debug_mode = 'Y') THEN
6479       pa_debug.debug('Performing validations');
6480     END IF;
6481 
6482 
6483     IF ( p_calendar_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_calendar_id IS NULL )
6484     THEN
6485        OPEN get_cal_id;
6486        FETCH get_cal_id INTO l_calendar_id;
6487        CLOSE get_cal_id;
6488     ELSE
6489        l_calendar_id := p_calendar_id;
6490     END IF;
6491 
6492     IF ( p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_start_date IS NOT NULL )
6493     THEN
6494        l_scheduled_start_date := null;
6495     ELSE
6496        l_scheduled_start_date := trunc(p_scheduled_start_date);
6497     END IF;
6498 
6499     IF ( p_scheduled_end_date   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_end_date IS NOT NULL )
6500     THEN
6501        l_scheduled_end_date := null;
6502     ELSE
6503        l_scheduled_end_date := trunc(p_scheduled_end_date);
6504     END IF;
6505 
6506     IF ( p_obligation_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_obligation_start_date IS NOT NULL )
6507     THEN
6508        l_obligation_start_date := null;
6509     ELSE
6510        l_obligation_start_date := p_obligation_start_date;
6511     END IF;
6512 
6513     IF ( p_obligation_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_obligation_end_date IS NOT NULL )
6514     THEN
6515        l_obligation_end_date := null;
6516     ELSE
6517        l_obligation_end_date := p_obligation_end_date;
6518     END IF;
6519 
6520     IF ( p_actual_start_date    = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_actual_start_date IS NOT NULL )
6521     THEN
6522        l_actual_start_date := null;
6523     ELSE
6524        l_actual_start_date := p_actual_start_date;
6525     END IF;
6526 
6527     IF ( p_actual_finish_date   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_actual_finish_date IS NOT NULL )
6528     THEN
6529        l_actual_finish_date := null;
6530     ELSE
6531        l_actual_finish_date := p_actual_finish_date;
6532     END IF;
6533 
6534     IF ( p_estimate_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_estimate_start_date IS NOT NULL )
6535     THEN
6536        l_estimated_start_date := null;
6537     ELSE
6538        l_estimated_start_date := p_estimate_start_date;
6539     END IF;
6540 
6541     IF ( p_estimate_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_estimate_finish_date IS NOT NULL )
6542     THEN
6543        l_estimated_finish_date := null;
6544     ELSE
6545        l_estimated_finish_date := p_estimate_finish_date;
6546     END IF;
6547 
6548     IF ( p_duration = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_duration IS NOT NULL )
6549     THEN
6550        l_duration := null;
6551     ELSE
6552        l_duration := p_duration;
6553     END IF;
6554 
6555     IF ( p_early_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_early_start_date IS NOT NULL )
6556     THEN
6557        l_early_start_date := null;
6558     ELSE
6559        l_early_start_date := p_early_start_date;
6560     END IF;
6561 
6562     IF ( p_early_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_early_end_date IS NOT NULL )
6563     THEN
6564        l_early_end_date := null;
6565     ELSE
6566        l_early_end_date := p_early_end_date;
6567     END IF;
6568 
6569     IF ( p_late_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_late_start_date IS NOT NULL )
6570     THEN
6571        l_late_start_date := null;
6572     ELSE
6573        l_late_start_date := p_late_start_date;
6574     END IF;
6575 
6576     IF ( p_late_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_late_end_date IS NOT NULL )
6577     THEN
6578        l_late_end_date := null;
6579     ELSE
6580        l_late_end_date := p_late_end_date;
6581     END IF;
6582 
6583     IF (p_milestone_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_milestone_flag IS NOT NULL) THEN
6584       l_milestone_flag := 'N';
6585     ELSE
6586       l_milestone_flag := p_milestone_flag;
6587     END IF;
6588 
6589     IF (p_critical_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_critical_flag IS NOT NULL) THEN
6590       l_critical_flag := 'N';
6591     ELSE
6592       l_critical_flag := p_critical_flag;
6593     END IF;
6594 
6595     IF ( p_ext_act_duration = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_ext_act_duration IS NOT NULL )
6596     THEN
6597        l_ext_act_duration := null;
6598     ELSE
6599        l_ext_act_duration := p_ext_act_duration;
6600        --hsiu: bug 3638195
6601        IF l_ext_act_duration < 0 THEN
6602          PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_EXT_ACT_ERR');
6603          l_msg_data := l_error_message_code;
6604          RAISE FND_API.G_EXC_ERROR;
6605        END IF;
6606     END IF;
6607 
6608     IF ( p_ext_remain_duration = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_ext_remain_duration IS NOT NULL )
6609     THEN
6610        l_ext_remain_duration := null;
6611     ELSE
6612        l_ext_remain_duration := p_ext_remain_duration;
6613        --hsiu: bug 3638195
6614        IF l_ext_remain_duration < 0 THEN
6615          PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_EXT_RMN_ERR');
6616          l_msg_data := l_error_message_code;
6617          RAISE FND_API.G_EXC_ERROR;
6618        END IF;
6619     END IF;
6620 
6621     IF ( p_ext_sch_duration = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_ext_sch_duration IS NOT NULL )
6622     THEN
6623        l_ext_sch_duration := null;
6624     ELSE
6625        l_ext_sch_duration := p_ext_sch_duration;
6626        --hsiu: bug 3638195
6627        IF l_ext_sch_duration < 0 THEN
6628          PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_EXT_SCH_ERR');
6629          l_msg_data := l_error_message_code;
6630          RAISE FND_API.G_EXC_ERROR;
6631        END IF;
6632     END IF;
6633 
6634     -- xxlu
6635     IF (p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute_category IS NOT NULL) THEN
6636       l_attribute_category := null;
6637     ELSE
6638       l_attribute_category := p_attribute_category;
6639     END IF;
6640 
6641     IF (p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute1 IS NOT NULL) THEN
6642       l_attribute1 := null;
6643     ELSE
6644       l_attribute1 := p_attribute1;
6645     END IF;
6646 
6647     IF (p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute2 IS NOT NULL) THEN
6648       l_attribute2 := null;
6649     ELSE
6650       l_attribute2 := p_attribute2;
6651     END IF;
6652 
6653     IF (p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute3 IS NOT NULL) THEN
6654       l_attribute3 := null;
6655     ELSE
6656       l_attribute3 := p_attribute3;
6657     END IF;
6658 
6659     IF (p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute4 IS NOT NULL) THEN
6660       l_attribute4 := null;
6661     ELSE
6662       l_attribute4 := p_attribute4;
6663     END IF;
6664 
6665     IF (p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute5 IS NOT NULL) THEN
6666       l_attribute5 := null;
6667     ELSE
6668       l_attribute5 := p_attribute5;
6669     END IF;
6670 
6671     IF (p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute6 IS NOT NULL) THEN
6672       l_attribute6 := null;
6673     ELSE
6674       l_attribute6 := p_attribute6;
6675     END IF;
6676 
6677     IF (p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute7 IS NOT NULL) THEN
6678       l_attribute7 := null;
6679     ELSE
6680       l_attribute7 := p_attribute7;
6681     END IF;
6682 
6683     IF (p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute8 IS NOT NULL) THEN
6684       l_attribute8 := null;
6685     ELSE
6686       l_attribute8 := p_attribute8;
6687     END IF;
6688 
6689     IF (p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute9 IS NOT NULL) THEN
6690       l_attribute9 := null;
6691     ELSE
6692       l_attribute9 := p_attribute9;
6693     END IF;
6694 
6695     IF (p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute10 IS NOT NULL) THEN
6696       l_attribute10 := null;
6697     ELSE
6698       l_attribute10 := p_attribute10;
6699     END IF;
6700 
6701     IF (p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute11 IS NOT NULL) THEN
6702       l_attribute11 := null;
6703     ELSE
6704       l_attribute11 := p_attribute11;
6705     END IF;
6706 
6707     IF (p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute12 IS NOT NULL) THEN
6708       l_attribute12 := null;
6709     ELSE
6710       l_attribute12 := p_attribute12;
6711     END IF;
6712 
6713     IF (p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute13 IS NOT NULL) THEN
6714       l_attribute13 := null;
6715     ELSE
6716       l_attribute13 := p_attribute13;
6717     END IF;
6718 
6719     IF (p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute14 IS NOT NULL) THEN
6720       l_attribute14 := null;
6721     ELSE
6722       l_attribute14 := p_attribute14;
6723     END IF;
6724 
6725     IF (p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute15 IS NOT NULL) THEN
6726       l_attribute15 := null;
6727     ELSE
6728       l_attribute15 := p_attribute15;
6729     END IF;
6730     -- end xxlu changes.
6731 
6732 
6733     PA_PROJ_ELEMENTS_UTILS.Check_Date_range(
6734                     p_scheduled_start_date  => l_scheduled_start_date
6735                    ,p_scheduled_end_date          => l_scheduled_end_date
6736                    ,p_obligation_start_date     => l_obligation_start_date
6737                    ,p_obligation_end_date         => l_obligation_end_date
6738                    ,p_actual_start_date       => l_actual_start_date
6739                    ,p_actual_finish_date          => l_actual_finish_date
6740                    ,p_estimate_start_date         => l_estimated_start_date
6741                    ,p_estimate_finish_date  => l_estimated_finish_date
6742                    ,p_early_start_date        => l_early_start_date
6743                    ,p_early_end_date          => l_early_end_date
6744                    ,p_late_start_date         => l_late_start_date
6745                    ,p_late_end_date           => l_late_end_date
6746                    ,x_return_status             => l_return_status
6747                    ,x_error_message_code        => l_error_message_code );
6748 
6749     IF (l_return_status <> 'S') THEN
6750       PA_UTILS.ADD_MESSAGE('PA', l_error_message_code);
6751       l_msg_data := l_error_message_code;
6752       RAISE FND_API.G_EXC_ERROR;
6753     END IF;
6754 
6755 --3305199: Remove duration calculation using calendar
6756    l_duration := trunc(l_scheduled_end_date) - trunc(l_scheduled_start_date) + 1;
6757 /* 3305199
6758    --removing duration calculation
6759     PA_DURATION_UTILS.GET_DURATION(
6760        p_calendar_id => l_calendar_id
6761       ,p_start_date => l_scheduled_start_date
6762       ,p_end_date => l_scheduled_end_date
6763       ,x_duration_days => l_duration_days
6764       ,x_duration_hours => l_duration
6765       ,x_return_status => l_return_status
6766       ,x_msg_count => l_msg_count
6767       ,x_msg_data => l_msg_data
6768     );
6769 
6770     IF (l_return_status <> 'S') THEN
6771       l_msg_count := FND_MSG_PUB.count_msg;
6772       IF l_msg_count > 0 THEN
6773         x_msg_count := l_msg_count;
6774         IF x_msg_count = 1 THEN
6775           x_msg_data := l_msg_data;
6776         END IF;
6777         RAISE FND_API.G_EXC_ERROR;
6778       END IF;
6779 
6780       RAISE FND_API.G_EXC_ERROR;
6781     END IF;
6782 
6783 /*
6784     IF ( l_scheduled_start_date IS NOT NULL AND l_duration IS NOT NULL )
6785     THEN
6786 --Hsiu modified
6787        l_scheduled_end_date := l_scheduled_start_date + l_duration - 1;
6788     ELSIF ( l_scheduled_start_date IS NOT NULL AND l_scheduled_end_date IS NOT NULL AND l_duration IS NOT NULL )
6789     THEN
6790 --Hsiu modified
6791        l_scheduled_end_date := l_scheduled_start_date + l_duration - 1;
6792 
6793     ELSIF ( l_scheduled_start_date IS NOT NULL AND l_scheduled_end_date IS NOT NULL )
6794     THEN
6795        IF l_duration is NULL
6796        THEN
6797 --Hsiu modified
6798           l_duration :=  trunc(l_scheduled_end_date - l_scheduled_start_date) + 1;
6799        END IF;
6800     ELSIF ( l_scheduled_start_date IS NULL AND l_scheduled_end_date IS NULL AND l_duration IS NULL )
6801     THEN
6802        l_scheduled_start_date := trunc(SYSDATE);
6803        l_scheduled_end_date := trunc(SYSDATE);
6804        l_duration           := 1;
6805     END IF;
6806 */
6807 
6808 --3305199: Remove duration calculation using calendar
6809    l_est_duration := trunc(l_estimated_finish_date) - trunc(l_estimated_start_date) + 1;
6810 /* 3305199
6811    --removing duration calculation
6812     --hsiu modified for duration calculation using calendar
6813     IF (l_estimated_start_date IS NOT NULL AND
6814         l_estimated_finish_date IS NOT NULL) THEN
6815 
6816       --calculate duration
6817         pa_duration_utils.get_duration(
6818          p_calendar_id      => l_calendar_id
6819                 ,p_start_date       => l_estimated_start_date
6820             ,p_end_date         => l_estimated_finish_date
6821                 ,x_duration_days    => l_est_duration_days
6822                 ,x_duration_hours   => l_est_duration
6823                 ,x_return_status    => l_return_status
6824                 ,x_msg_count        => l_msg_count
6825                 ,x_msg_data         => l_msg_data);
6826 
6827         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6828           l_msg_count := FND_MSG_PUB.count_msg;
6829           IF l_msg_count > 0 THEN
6830             x_msg_count := l_msg_count;
6831               IF x_msg_count = 1 THEN
6832                 x_msg_data := l_msg_data;
6833             END IF;
6834             RAISE FND_API.G_EXC_ERROR;
6835           END IF;
6836         END IF;
6837 
6838     END IF;
6839 */
6840 
6841 --3305199: Remove duration calculation using calendar
6842 --  This assignment was over writting the schedule duration value, replaced l_duration by l_act_duration variable
6843 --   l_duration := trunc(l_actual_finish_date) - trunc(l_actual_start_date) + 1;   --Bug No 3615013
6844    l_act_duration := trunc(l_actual_finish_date) - trunc(l_actual_start_date) + 1;
6845 
6846 /* 3305199
6847    --removing duration calculation
6848     IF (l_actual_start_date IS NOT NULL AND
6849         l_actual_finish_date IS NOT NULL) THEN
6850       --calculate duration
6851         pa_duration_utils.get_duration(
6852          p_calendar_id      => l_calendar_id
6853                 ,p_start_date       => l_actual_start_date
6854             ,p_end_date         => l_actual_finish_date
6855                 ,x_duration_days    => l_act_duration_days
6856                 ,x_duration_hours   => l_act_duration
6857                 ,x_return_status    => l_return_status
6858                 ,x_msg_count        => l_msg_count
6859                 ,x_msg_data         => l_msg_data);
6860 
6861         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6862           l_msg_count := FND_MSG_PUB.count_msg;
6863           IF l_msg_count > 0 THEN
6864             x_msg_count := l_msg_count;
6865               IF x_msg_count = 1 THEN
6866                 x_msg_data := l_msg_data;
6867             END IF;
6868             RAISE FND_API.G_EXC_ERROR;
6869           END IF;
6870         END IF;
6871 
6872     END IF;
6873 */
6874 
6875 --Changes for bug 2791413 Added check for work quantity enabled
6876     OPEN get_project_id;
6877     FETCH get_project_id into l_project_id,l_proj_element_id;
6878     CLOSE get_project_id;
6879 
6880     OPEN get_task_type_id(l_proj_element_id);
6881     FETCH get_task_type_id into l_task_type_id;
6882     CLOSE get_task_type_id;
6883 
6884 /*    IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
6885         'N' = PA_PROGRESS_UTILS.get_project_wq_flag(l_project_id)) THEN
6886        --error message
6887         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CANT_ENT_WQ_ATTR1');
6888         x_msg_data := 'PA_PS_CANT_ENT_WQ_ATTR1';
6889         RAISE FND_API.G_EXC_ERROR;
6890     ELSE  */
6891   -- Above code is commented and moved below to first check whether any value has been passed in p_wq_planned_quantity
6892 
6893       IF (p_wq_planned_quantity IS NULL OR p_wq_planned_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6894         l_wq_planned_quantity := NULL;
6895       ELSE
6896         l_wq_planned_quantity := p_wq_planned_quantity;
6897       END IF;
6898 
6899 
6900    -- Bug Fix 5726773
6901    -- Commenting out the following in order to allow
6902    -- negative amounts which are entered through Create Tasks page
6903    -- while creating a task.
6904    IF (l_wq_planned_quantity IS NOT NULL) THEN
6905    /*
6906       IF (l_wq_planned_quantity < 0) THEN
6907         --error message
6908         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_PLAN_QTY_ERR');
6909         x_msg_data := 'PA_PS_NEG_PLAN_QTY_ERR';
6910         RAISE FND_API.G_EXC_ERROR;
6911   -- Else condition added for Bug No. : 2791413
6912       ELSE
6913       */
6914         IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
6915             'N' = PA_PROGRESS_UTILS.get_project_wq_flag(l_project_id)) THEN
6916              --error message
6917              PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CANT_ENT_WQ_ATTR1');
6918              x_msg_data := 'PA_PS_CANT_ENT_WQ_ATTR1';
6919              RAISE FND_API.G_EXC_ERROR;
6920      End IF;
6921      -- END IF;
6922     END IF;
6923 
6924     IF (p_planned_effort IS NULL OR p_planned_effort = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6925       l_planned_effort := NULL;
6926     ELSE
6927       l_planned_effort := p_planned_effort;
6928     END IF;
6929 
6930     -- Bug Fix 5726773
6931     -- Commenting out the following in order to allow
6932     -- negative amounts which are entered through Create Tasks page
6933     -- while creating a task.
6934     /*
6935     IF (l_planned_effort IS NOT NULL) THEN
6936       IF (l_planned_effort < 0) THEN
6937         --error message
6938         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_PLAN_EFF_ERR');
6939         x_msg_data := 'PA_PS_NEG_PLAN_EFF_ERR';
6940         RAISE FND_API.G_EXC_ERROR;
6941       END IF;
6942     END IF;
6943     */
6944     -- END of Bug Fix 5726773
6945 
6946     --Bug 3305199: Added for M
6947     IF (p_def_sch_tool_tsk_type_code IS NULL OR p_def_sch_tool_tsk_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6948       l_def_sch_tool_tsk_type_code := NULL;
6949     ELSE
6950       l_def_sch_tool_tsk_type_code := p_def_sch_tool_tsk_type_code;
6951     END IF;
6952 
6953     IF (p_constraint_type_code IS NULL OR p_constraint_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6954       l_constraint_type_code := NULL;
6955     ELSE
6956       l_constraint_type_Code := p_constraint_type_code;
6957     END IF;
6958 
6959     IF (p_constraint_date IS NULL OR p_constraint_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
6960       l_constraint_date := NULL;
6961     ELSE
6962       l_constraint_date := p_constraint_date;
6963     END IF;
6964 
6965     IF (p_free_slack IS NULL OR p_free_slack = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6966       l_free_slack := NULL;
6967     ELSE
6968       l_free_slack := p_free_slack;
6969     END IF;
6970 
6971     IF (p_total_slack IS NULL OR p_total_slack = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6972       l_total_slack := NULL;
6973     ELSE
6974       l_total_slack := p_total_slack;
6975     END IF;
6976 
6977     IF (p_effort_driven_flag IS NULL OR p_effort_driven_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6978       l_effort_driven_flag := 'N';
6979     ELSE
6980       l_effort_driven_flag := p_effort_driven_flag;
6981     END IF;
6982 
6983     IF (p_level_assignments_flag IS NULL OR p_level_assignments_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6984       l_level_assignments_flag := 'N';
6985     ELSE
6986       l_level_assignments_flag := p_level_assignments_flag;
6987     END IF;
6988     --end bug 3305199
6989 
6990     -- Added for FP_M changes 3305199 Bhumesh
6991     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_Project_ID)= 'Y' Then
6992 
6993        Select Parent_Structure_Version_ID INTO l_Structure_Version_ID
6994        From   PA_Proj_Element_Versions
6995        Where  Element_Version_ID = P_Element_Version_ID;
6996 
6997           PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
6998              p_structure_version_id => l_Structure_Version_ID
6999             ,p_dirty_flag           => 'Y'             --bug 3902282
7000         ,x_return_status        => x_return_status
7001         ,x_msg_count            => x_msg_count
7002         ,x_msg_data             => x_msg_data
7003           );
7004 
7005           IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
7006             x_msg_count := FND_MSG_PUB.count_msg;
7007             If x_msg_count = 1 then
7008               pa_interface_utils_pub.get_messages
7009               (p_encoded        => FND_API.G_TRUE,
7010                p_msg_index      => 1,
7011                p_msg_count      => l_msg_count,
7012                p_msg_data       => l_msg_data,
7013                p_data           => l_data,
7014                p_msg_index_out  => l_msg_index_out);
7015                x_msg_data := l_data;
7016             End If;
7017             raise FND_API.G_EXC_ERROR;
7018           End If;
7019     End If;
7020     -- End of FP_M changes
7021 
7022     OPEN cur_proj_elem_ver;
7023     FETCH cur_proj_elem_ver INTO cur_proj_elem_ver_rec;
7024     IF cur_proj_elem_ver%FOUND
7025     THEN
7026        PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
7027          X_ROW_ID                => X_Row_Id
7028         ,X_PEV_SCHEDULE_ID     => x_pev_schedule_id
7029         ,X_ELEMENT_VERSION_ID      => p_ELEMENT_VERSION_ID
7030         ,X_PROJECT_ID            => cur_proj_elem_ver_rec.PROJECT_ID
7031         ,X_PROJ_ELEMENT_ID     => cur_proj_elem_ver_rec.PROJ_ELEMENT_ID
7032         ,X_SCHEDULED_START_DATE  => l_SCHEDULED_START_DATE
7033         ,X_SCHEDULED_FINISH_DATE => l_SCHEDULED_END_DATE
7034         ,X_OBLIGATION_START_DATE => l_OBLIGATION_START_DATE
7035         ,X_OBLIGATION_FINISH_DATE => l_OBLIGATION_end_DATE
7036         ,X_ACTUAL_START_DATE        => l_ACTUAL_START_DATE
7037         ,X_ACTUAL_FINISH_DATE       => l_ACTUAL_FINISH_DATE
7038         ,X_ESTIMATED_START_DATE   => l_ESTIMATED_START_DATE
7039         ,X_ESTIMATED_FINISH_DATE  => l_ESTIMATED_FINISH_DATE
7040         ,X_DURATION           => l_DURATION
7041         ,X_EARLY_START_DATE     => l_EARLY_START_DATE
7042         ,X_EARLY_FINISH_DATE        => l_EARLY_end_DATE
7043         ,X_LATE_START_DATE      => l_LATE_START_DATE
7044         ,X_LATE_FINISH_DATE     => l_LATE_end_DATE
7045         ,X_CALENDAR_ID            => l_CALENDAR_ID
7046         ,X_MILESTONE_FLAG       => l_MILESTONE_FLAG
7047         ,X_CRITICAL_FLAG        => l_CRITICAL_FLAG
7048         ,X_WQ_PLANNED_QUANTITY      => l_wq_planned_quantity
7049         ,X_PLANNED_EFFORT           => l_planned_effort
7050         ,X_ACTUAL_DURATION          => l_act_duration
7051         ,X_ESTIMATED_DURATION       => l_est_duration
7052         ,X_def_sch_tool_tsk_type_code => l_def_sch_tool_tsk_type_code
7053         ,X_constraint_type_code     => l_constraint_type_code
7054         ,X_constraint_date          => l_constraint_date
7055         ,X_free_slack               => l_free_slack
7056         ,X_total_slack              => l_total_slack
7057         ,X_effort_driven_flag       => l_effort_driven_flag
7058         ,X_level_assignments_flag   => l_level_assignments_flag
7059         ,X_ext_act_duration         => l_ext_act_duration
7060         ,X_ext_remain_duration      => l_ext_remain_duration
7061         ,X_ext_sch_duration         => l_ext_sch_duration
7062         ,X_ATTRIBUTE_CATEGORY               => l_ATTRIBUTE_CATEGORY
7063         ,X_ATTRIBUTE1                       => l_ATTRIBUTE1
7064         ,X_ATTRIBUTE2                       => l_ATTRIBUTE2
7065         ,X_ATTRIBUTE3                       => l_ATTRIBUTE3
7066         ,X_ATTRIBUTE4                       => l_ATTRIBUTE4
7067         ,X_ATTRIBUTE5                       => l_ATTRIBUTE5
7068         ,X_ATTRIBUTE6                       => l_ATTRIBUTE6
7069         ,X_ATTRIBUTE7                       => l_ATTRIBUTE7
7070         ,X_ATTRIBUTE8                       => l_ATTRIBUTE8
7071         ,X_ATTRIBUTE9                       => l_ATTRIBUTE9
7072         ,X_ATTRIBUTE10                    => l_ATTRIBUTE10
7073         ,X_ATTRIBUTE11                    => l_ATTRIBUTE11
7074         ,X_ATTRIBUTE12                    => l_ATTRIBUTE12
7075         ,X_ATTRIBUTE13                    => l_ATTRIBUTE13
7076         ,X_ATTRIBUTE14                    => l_ATTRIBUTE14
7077         ,X_ATTRIBUTE15                    => l_ATTRIBUTE15
7078         ,X_SOURCE_OBJECT_ID               => cur_proj_elem_ver_rec.PROJECT_ID
7079         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
7080        );
7081     ELSE
7082       CLOSE cur_proj_elem_ver;
7083       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_INVALID_TASK_ID');
7084       l_msg_data := 'PA_PS_INVALID_TASK_ID';
7085       RAISE FND_API.G_EXC_ERROR;
7086     END IF;
7087     CLOSE cur_proj_elem_ver;
7088 x_return_status := FND_API.G_RET_STS_SUCCESS;
7089 
7090 EXCEPTION
7091     WHEN FND_API.G_EXC_ERROR THEN
7092       IF (p_commit = FND_API.G_TRUE) THEN
7093         ROLLBACK to CREATE_SCH_VER_PRIVATE;
7094       END IF;
7095       x_msg_count := FND_MSG_PUB.count_msg;
7096       x_return_status := FND_API.G_RET_STS_ERROR;
7097     WHEN OTHERS THEN
7098       IF (p_commit = FND_API.G_TRUE) THEN
7099         ROLLBACK to CREATE_SCH_VER_PRIVATE;
7100       END IF;
7101       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7102       x_msg_count := FND_MSG_PUB.count_msg;
7103       --put message
7104       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
7105                               p_procedure_name => 'create_schedule_version',
7106                               p_error_text     => SUBSTRB(SQLERRM,1,240));
7107       RAISE;
7108 
7109 END Create_Schedule_Version;
7110 
7111 -- API name                      : Update_Schedule_Version
7112 -- Type                          : Private procedure
7113 -- Pre-reqs                      : None
7114 -- Return Value                  : N/A
7115 -- Prameters
7116 -- p_api_version          IN    NUMBER  N   Not Null    1.0
7117 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
7118 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
7119 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
7120 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
7121 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
7122 -- p_debug_mode       IN    VARCHAR2    N   Null    N
7123 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7124 -- p_element_version_id IN  NUMBER  N   Not Null
7125 -- p_calendar_id    IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7126 -- p_scheduled_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7127 -- p_scheduled_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7128 -- p_obligation_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7129 -- p_obligation_end_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7130 -- p_actual_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7131 -- p_actual_finish_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7132 -- p_estimate_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7133 -- p_estimate_finish_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7134 -- p_duration   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7135 -- p_early_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7136 -- p_early_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7137 -- p_late_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7138 -- p_late_end_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7139 -- p_milestone_flag IN  VARCHAR2    N   NULL    N
7140 -- p_critical_flag  IN  VARCHAR2    N   NULL    N
7141 -- x_pev_schedule_id    OUT NUMBER  N   NULL
7142 -- x_return_status  OUT     VARCHAR2    N   Null
7143 -- x_msg_count        OUT   NUMBER  N   Null
7144 -- x_msg_data         OUT   VARCHAR2    N   Null
7145 --
7146 --  History
7147 --
7148 --  23-OCT-01   Majid Ansari             -Created
7149 --
7150 --
7151 
7152 PROCEDURE Update_Schedule_Version(
7153  p_api_version        IN    NUMBER  :=1.0,
7154  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
7155  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
7156  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
7157  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
7158  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
7159  p_debug_mode         IN    VARCHAR2    :='N',
7160  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7161  p_pev_schedule_id  IN  NUMBER,
7162  p_calendar_id        IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7163  p_scheduled_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7164  p_scheduled_end_date   IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7165  p_obligation_start_date IN DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7166  p_obligation_end_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7167  p_actual_start_date    IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7168  p_actual_finish_date   IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7169  p_estimate_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7170  p_estimate_finish_date IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7171  p_duration             IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7172  p_early_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7173  p_early_end_date         IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7174  p_late_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7175  p_late_end_date          IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7176  p_milestone_flag         IN    VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
7177  p_critical_flag          IN    VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
7178  p_wq_planned_quantity        IN        NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7179  p_planned_effort             IN        NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7180  p_PLANNED_EQUIP_EFFORT       IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,  --bug 3305199
7181  --bug 3305199 schedule options
7182  p_def_sch_tool_tsk_type_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7183  p_constraint_type_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7184  p_constraint_date             IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
7185  p_free_slack                  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7186  p_total_slack                 IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7187  p_effort_driven_flag          IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7188  p_level_assignments_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7189  --end bug 3305199
7190  p_record_version_number IN   NUMBER,
7191  p_ext_act_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
7192  p_ext_remain_duration         IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
7193  p_ext_sch_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
7194  p_attribute_category     IN    pa_proj_elem_ver_schedule.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7195  p_attribute1             IN    pa_proj_elem_ver_schedule.attribute1%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7196  p_attribute2             IN    pa_proj_elem_ver_schedule.attribute2%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7197  p_attribute3             IN    pa_proj_elem_ver_schedule.attribute3%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7198  p_attribute4             IN    pa_proj_elem_ver_schedule.attribute4%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7199  p_attribute5             IN    pa_proj_elem_ver_schedule.attribute5%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7200  p_attribute6             IN    pa_proj_elem_ver_schedule.attribute6%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7201  p_attribute7             IN    pa_proj_elem_ver_schedule.attribute7%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7202  p_attribute8             IN    pa_proj_elem_ver_schedule.attribute8%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7203  p_attribute9             IN    pa_proj_elem_ver_schedule.attribute9%TYPE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7204  p_attribute10            IN    pa_proj_elem_ver_schedule.attribute10%TYPE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7205  p_attribute11            IN    pa_proj_elem_ver_schedule.attribute11%TYPE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7206  p_attribute12            IN    pa_proj_elem_ver_schedule.attribute12%TYPE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7207  p_attribute13            IN    pa_proj_elem_ver_schedule.attribute13%TYPE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7208  p_attribute14            IN    pa_proj_elem_ver_schedule.attribute14%TYPE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7209  p_attribute15            IN    pa_proj_elem_ver_schedule.attribute15%TYPE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
7210  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
7211  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
7212  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7213 ) IS
7214 
7215    CURSOR cur_proj_elem_ver_sch
7216    IS
7217      SELECT rowid, element_version_id, project_id, proj_element_id, record_version_number
7218        FROM pa_proj_elem_ver_schedule
7219       WHERE pev_schedule_id = p_pev_schedule_id;
7220    cur_proj_elem_ver_sch_rec cur_proj_elem_ver_sch%ROWTYPE;
7221 
7222    CURSOR get_actual_wq(c_project_id NUMBER, c_element_id NUMBER) IS
7223      select ppru.CUMULATIVE_WORK_QUANTITY
7224        from pa_progress_rollup ppru, pa_percent_completes ppc
7225       where ppc.project_id = c_project_id
7226         and ppc.task_id = c_element_id
7227         and ppc.current_flag = 'Y'
7228         and ppc.project_Id = ppru.project_id
7229         and ppc.task_id = ppru.object_id
7230         and ppru.object_type = 'PA_TASKS';
7231 
7232     CURSOR get_info IS
7233       select proj_element_id, project_id
7234         from pa_proj_elem_ver_schedule
7235        where pev_schedule_id = p_pev_schedule_id;
7236     l_project_id NUMBER;
7237     l_proj_element_id NUMBER;
7238 
7239     l_msg_count                    NUMBER;
7240     l_msg_data                     VARCHAR2(250);
7241     l_data                          VARCHAR2(250);
7242     l_msg_index_out                 NUMBER;
7243     l_return_status                VARCHAR2(2);
7244     l_error_message_code           VARCHAR2(250);
7245 --hsiu added for duration calculation
7246     l_act_duration_days            NUMBER;
7247     l_act_duration                 NUMBER;
7248     l_est_duration_days            NUMBER;
7249     l_est_duration                 NUMBER;
7250     l_critical_flag         VARCHAR2(1);
7251     l_milestone_flag        VARCHAR2(1);
7252 
7253     CURSOR cur_val IS
7254       select *
7255         from pa_proj_elem_ver_schedule
7256        where pev_schedule_id = p_pev_schedule_id;
7257     cur_val_rec   cur_val%ROWTYPE;
7258 --end duration changes
7259 
7260 --hsiu added for bug 2634195
7261     cursor get_task_type_id(c_proj_element_id NUMBER) IS
7262       select type_id
7263         from pa_proj_elements
7264        where proj_element_id = c_proj_element_id;
7265     l_task_type_id      NUMBER;
7266 --end bug 2634195
7267 
7268  l_calendar_id         NUMBER;
7269  l_scheduled_start_date  DATE;
7270  l_scheduled_end_date    DATE;
7271  l_obligation_start_date DATE;
7272  l_obligation_end_date   DATE;
7273  l_actual_start_date     DATE;
7274  l_actual_finish_date    DATE;
7275  l_estimated_start_date  DATE;
7276  l_estimated_finish_date     DATE;
7277  l_duration              NUMBER;
7278  l_duration_days         NUMBER;
7279  l_early_start_date  DATE;
7280  l_early_end_date          DATE;
7281  l_late_start_date   DATE;
7282  l_late_end_date           DATE;
7283  l_wq_planned_quantity   NUMBER;
7284  l_planned_effort        NUMBER;
7285  -- xxlu
7286  l_attribute_category      pa_proj_elem_ver_schedule.attribute_category%TYPE    ;
7287  l_attribute1              pa_proj_elem_ver_schedule.attribute1%TYPE            ;
7288  l_attribute2              pa_proj_elem_ver_schedule.attribute2%TYPE            ;
7289  l_attribute3              pa_proj_elem_ver_schedule.attribute3%TYPE            ;
7290  l_attribute4              pa_proj_elem_ver_schedule.attribute4%TYPE            ;
7291  l_attribute5              pa_proj_elem_ver_schedule.attribute5%TYPE            ;
7292  l_attribute6              pa_proj_elem_ver_schedule.attribute6%TYPE            ;
7293  l_attribute7              pa_proj_elem_ver_schedule.attribute7%TYPE            ;
7294  l_attribute8              pa_proj_elem_ver_schedule.attribute8%TYPE            ;
7295  l_attribute9              pa_proj_elem_ver_schedule.attribute9%TYPE            ;
7296  l_attribute10             pa_proj_elem_ver_schedule.attribute10%TYPE           ;
7297  l_attribute11             pa_proj_elem_ver_schedule.attribute11%TYPE           ;
7298  l_attribute12             pa_proj_elem_ver_schedule.attribute12%TYPE           ;
7299  l_attribute13             pa_proj_elem_ver_schedule.attribute13%TYPE           ;
7300  l_attribute14             pa_proj_elem_ver_schedule.attribute14%TYPE           ;
7301  l_attribute15             pa_proj_elem_ver_schedule.attribute15%TYPE           ;
7302  -- end xxlu changes
7303 
7304 --hsiu added, for dates rollup
7305  l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7306  l_actual_wq NUMBER;
7307 
7308 --hsiu: bug 3035902
7309  l_update_flag VARCHAR2(1) := 'N';
7310  l_parent_struc_Ver_id NUMBER;
7311  cursor get_parent_struc_ver_id(c_elem_ver_id NUMBER) IS
7312    select parent_structure_version_id
7313      from pa_proj_element_versions
7314     where element_version_id = c_elem_ver_id;
7315 
7316  --3035902: process update flag changes
7317  l_weighting_basis         VARCHAR2(30);
7318  --3035902: end process update flag changes
7319 
7320  --bug 3305199 schedule options
7321  l_def_sch_tool_tsk_type_code  VARCHAR2(30);
7322  l_constraint_type_code        VARCHAR2(30);
7323  l_constraint_date             DATE;
7324  l_free_slack                  NUMBER;
7325  l_total_slack                 NUMBER;
7326  l_effort_driven_flag          VARCHAR2(1);
7327  l_level_assignments_flag      VARCHAR2(1);
7328  --end bug 3305199
7329 
7330  l_Structure_Version_ID     NUMBER;     -- FP_M changes 3305199
7331 
7332  --bug 3301192 fp changes
7333   /* Bug #: 3305199 SMukka                                                         */
7334   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
7335   /* l_task_ver_ids2             PA_PLSQL_DATATYPES.IdTabTyp;                      */
7336   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
7337   l_planned_effort2           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
7338   l_start_dates               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
7339   l_end_dates                 SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
7340 
7341   --hsiu: 3453772
7342   l_old_sch_date DATE;
7343   l_res_asgmt_id_tbl SYSTEM.PA_NUM_TBL_TYPE;
7344   l_planning_start_tbl SYSTEM.pa_date_tbl_type;
7345   l_planning_end_tbl SYSTEM.pa_date_tbl_type;
7346 
7347   l_ext_act_duration             NUMBER;
7348   l_ext_remain_duration          NUMBER;
7349   l_ext_sch_duration             NUMBER;
7350 
7351   l_update_effort_flag            VARCHAR2(1) := 'N';
7352   l_schedule_update_flag          VARCHAR2(1) := 'N';
7353 
7354   l_assgn_context                 VARCHAR2(30);  --bug 4153366
7355 
7356   l_task_has_sub_proj_flag        VARCHAR2(1) := 'N'; --bug 4620492
7357   l_debug_mode                    VARCHAR2(1) := 'N';
7358 BEGIN
7359 
7360     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7361 
7362     IF (l_debug_mode = 'Y') THEN
7363       pa_debug.write('PA_TASK_PVT1.UPDATE_SCHEDULE_VERSION', 'PA_TASK_PVT1.UPDATE_SCHEDULE_VERSION begin',3);
7364     END IF;
7365 
7366     IF (p_commit = FND_API.G_TRUE) THEN
7367       savepoint UPDATE_SCH_VER_PRIVATE;
7368     END IF;
7369 
7370     IF (l_debug_mode = 'Y') THEN
7371       pa_debug.write('PA_TASK_PVT1.UPDATE_SCHEDULE_VERSION', 'Performing validations',3);
7372     END IF;
7373 
7374     OPEN cur_val;
7375     FETCH cur_val into cur_val_rec;
7376     CLOSE cur_val;
7377 
7378     --3035902: process update flag changes
7379     l_weighting_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS( cur_val_rec.project_id);
7380     --3035902: end process update flag changes
7381 
7382     OPEN get_task_type_id(cur_val_rec.proj_element_id);
7383     FETCH get_task_type_id into l_task_type_id;
7384     CLOSE get_task_type_id;
7385 
7386 /*    IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
7387         'N' = PA_PROGRESS_UTILS.get_project_wq_flag(cur_val_rec.project_id)) THEN
7388        -- Bug 2791413 Added error message
7389         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CANT_ENT_WQ_ATTR1');
7390         x_msg_data := 'PA_PS_CANT_ENT_WQ_ATTR1';
7391         RAISE FND_API.G_EXC_ERROR;
7392     ELSE
7393       IF (p_wq_planned_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7394         l_wq_planned_quantity := cur_val_rec.WQ_PLANNED_QUANTITY;
7395       ELSE
7396         l_wq_planned_quantity := p_wq_planned_quantity;
7397       END IF;
7398     END IF;  */
7399 
7400 -- Above commented code is Changed to below to cheque if any value is being passed into work quantity or not
7401 
7402     IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_wq_enabled(l_task_type_id) OR
7403         'N' = PA_PROGRESS_UTILS.get_project_wq_flag(cur_val_rec.project_id)) THEN
7404   -- If condition added for Bug No. : 2791413
7405         IF (p_wq_planned_quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_wq_planned_quantity IS NOT NULL) THEN
7406                  -- Bug 2791413 Added error message
7407                  PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CANT_ENT_WQ_ATTR1');
7408                  x_msg_data := 'PA_PS_CANT_ENT_WQ_ATTR1';
7409                  RAISE FND_API.G_EXC_ERROR;
7410         END IF;
7411       l_wq_planned_quantity := NULL;
7412     ELSE
7413       IF (p_wq_planned_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7414         l_wq_planned_quantity := cur_val_rec.WQ_PLANNED_QUANTITY;
7415       ELSE
7416         l_wq_planned_quantity := p_wq_planned_quantity;
7417       END IF;
7418     END IF;
7419 
7420     -- Bug Fix 5726773
7421     -- Commenting out the following in order to allow
7422     -- negative amounts which are entered through Create Tasks page
7423     -- while creating a task.
7424    /*
7425     IF (l_wq_planned_quantity IS NOT NULL) THEN
7426       IF (l_wq_planned_quantity < 0) THEN
7427         --error message
7428         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_PLAN_QTY_ERR');
7429         x_msg_data := 'PA_PS_NEG_PLAN_QTY_ERR';
7430         RAISE FND_API.G_EXC_ERROR;
7431       END IF;
7432     END IF;
7433 */
7434 --hsiu: removing validation
7435 --    IF (l_wq_planned_quantity IS NOT NULL) THEN
7436 --      OPEN get_info;
7437 --      FETCH get_info INTO l_project_id, l_proj_element_id;
7438 --      CLOSE get_info;
7439 --      OPEN get_actual_wq(l_project_id, l_proj_element_id);
7440 --      FETCH get_actual_wq into l_actual_wq;
7441 --      IF get_actual_wq%FOUND THEN
7442 --        PA_TASK_TYPE_UTILS.check_planned_quantity(
7443 --          p_planned_quantity => l_wq_planned_quantity,
7444 --          p_actual_work_quantity => l_actual_wq,
7445 --          x_return_status => l_return_status,
7446 --          x_msg_count => l_msg_count,
7447 --          x_msg_data => l_msg_data
7448 --        );
7449 --        IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7450 --          l_msg_count := FND_MSG_PUB.count_msg;
7451 --          IF l_msg_count > 0 THEN
7452 --            x_msg_count := l_msg_count;
7453 --              IF x_msg_count = 1 THEN
7454 --                x_msg_data := l_msg_data;
7455 --              END IF;
7456 --            RAISE FND_API.G_EXC_ERROR;
7457 --          END IF;
7458 --        END IF;
7459 --      END IF;
7460 --    END IF;
7461 
7462     IF ( p_calendar_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_calendar_id IS NULL )
7463     THEN
7464        l_calendar_id := cur_val_rec.calendar_id;
7465     ELSE
7466        l_calendar_id := p_calendar_id;
7467     END IF;
7468 
7469     --hsiu: bug 3453772
7470     l_old_sch_date := cur_val_rec.scheduled_Start_Date;
7471 
7472     --bug 4620492 do not update sch dates and planned effort of a linked task if called from AMG.
7473     l_task_has_sub_proj_flag := PA_RELATIONSHIP_UTILS.check_task_has_sub_proj( cur_val_rec.project_id,
7474                                        cur_val_rec.proj_element_id, cur_val_rec.element_version_id);
7475     --end bug 4620492
7476 
7477     IF (l_debug_mode = 'Y') THEN
7478       pa_debug.write('PA_TASK_PVT1.UPDATE_SCHEDULE_VERSION', 'l_task_has_sub_proj_flag='||l_task_has_sub_proj_flag,3);
7479       pa_debug.write('PA_TASK_PVT1.UPDATE_SCHEDULE_VERSION', 'p_calling_module='||p_calling_module,3);
7480       pa_debug.write('PA_TASK_PVT1.UPDATE_SCHEDULE_VERSION', 'cur_val_rec.scheduled_START_DATE='|| cur_val_rec.scheduled_START_DATE,3);
7481       pa_debug.write('PA_TASK_PVT1.UPDATE_SCHEDULE_VERSION', 'cur_val_rec.scheduled_FINISH_DATE='||cur_val_rec.scheduled_FINISH_DATE,3);
7482       pa_debug.write('PA_TASK_PVT1.UPDATE_SCHEDULE_VERSION', 'cur_val_rec.PLANNED_EFFORT='||cur_val_rec.PLANNED_EFFORT,3);
7483     END IF;
7484 
7485 --For bug 2638649
7486     IF ( p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_start_date IS NOT NULL )
7487     THEN
7488        l_scheduled_start_date := cur_val_rec.scheduled_START_DATE;
7489     ELSE
7490        l_scheduled_start_date := p_scheduled_start_date;
7491 
7492     --bug 4620492
7493        IF l_task_has_sub_proj_flag = 'Y' AND
7494           p_calling_module = 'AMG'
7495        THEN
7496           l_scheduled_start_date := cur_val_rec.scheduled_START_DATE;
7497        END IF;
7498     --end bug 4620492
7499 
7500        IF (l_scheduled_start_date <> cur_val_rec.scheduled_start_date) THEN
7501          l_schedule_update_flag := 'Y';
7502        END IF;
7503        /* Bug 3053846 - Rather than checking for dates, let us check for change in duration.
7504        --hsiu: bug 3035902
7505        IF (l_scheduled_start_date <> cur_val_rec.scheduled_start_date) THEN
7506          IF (l_weighting_basis ='DURATION') THEN
7507            --set the flag if the dates have changed
7508            l_update_flag := 'Y';
7509          END IF;
7510        END IF;
7511        --end bug 3035902
7512        Bug 3053846 */
7513     END IF;
7514 
7515     IF ( p_scheduled_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_scheduled_end_date IS NOT NULL )
7516     THEN
7517        l_scheduled_end_date := cur_val_rec.scheduled_FINISH_DATE;
7518     ELSE
7519        l_scheduled_end_date := p_scheduled_end_date;
7520 
7521     --bug 4620492
7522        IF l_task_has_sub_proj_flag = 'Y' AND
7523           p_calling_module = 'AMG'
7524        THEN
7525           l_scheduled_end_date := cur_val_rec.scheduled_FINISH_DATE;
7526        END IF;
7527     --end bug 4620492
7528 
7529        IF (l_scheduled_end_date <> cur_val_rec.scheduled_finish_date) THEN
7530          l_schedule_update_flag := 'Y';
7531        END IF;
7532        /* Bug 3053846 - Rather than checking for dates, let us check for change in duration.
7533        --hsiu: bug 3035902
7534        IF (l_scheduled_end_date <> cur_val_rec.scheduled_finish_date) THEN
7535          IF (l_weighting_basis ='DURATION') THEN
7536            --set the flag if the dates have changed
7537            l_update_flag := 'Y';
7538          END IF;
7539        END IF;
7540        --end bug 3035902
7541        Bug 3053846 */
7542     END IF;
7543 
7544 --For bug 2638649
7545 --    IF ( p_scheduled_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_scheduled_start_date IS NULL )
7546     IF l_scheduled_start_date IS NULL
7547     THEN
7548        -- For bug 2625650
7549        -- l_scheduled_start_date := cur_val_rec.SCHEDULED_START_DATE;
7550       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_SCH_DATES_REQD');
7551       l_msg_data := 'PA_PS_SCH_DATES_REQD';
7552       RAISE FND_API.G_EXC_ERROR;
7553       -- End of bug fix
7554 --    ELSE
7555 --       l_scheduled_start_date := TRUNC(p_scheduled_start_date);
7556     END IF;
7557 
7558 --    IF ( p_scheduled_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_scheduled_end_date IS NULL )
7559     IF l_scheduled_end_date IS NULL
7560     THEN
7561        -- For bug 2625650
7562        --l_scheduled_end_date := cur_val_rec.SCHEDULED_FINISH_DATE;
7563        PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_SCH_DATES_REQD');
7564        l_msg_data := 'PA_PS_SCH_DATES_REQD';
7565        RAISE FND_API.G_EXC_ERROR;
7566        -- End of bug fix
7567 --    ELSE
7568 --       l_scheduled_end_date := TRUNC(p_scheduled_end_date);
7569     END IF;
7570 
7571     IF ( p_obligation_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_obligation_start_date IS NOT NULL )
7572     THEN
7573        l_obligation_start_date := cur_val_rec.OBLIGATION_START_DATE;
7574     ELSE
7575        l_obligation_start_date := p_obligation_start_date;
7576     END IF;
7577 
7578     IF ( p_obligation_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_obligation_end_date IS NOT NULL )
7579     THEN
7580        l_obligation_end_date := cur_val_rec.OBLIGATION_FINISH_DATE;
7581     ELSE
7582        l_obligation_end_date := p_obligation_end_date;
7583     END IF;
7584 
7585     IF ( p_actual_start_date    = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_actual_start_date IS NOT NULL )
7586     THEN
7587        l_actual_start_date := cur_val_rec.actual_start_date;
7588     ELSE
7589        l_actual_start_date := p_actual_start_date;
7590     END IF;
7591 
7592     IF ( p_actual_finish_date   = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_actual_finish_date IS NOT NULL )
7593     THEN
7594        l_actual_finish_date := cur_val_rec.actual_finish_date;
7595     ELSE
7596        l_actual_finish_date := p_actual_finish_date;
7597     END IF;
7598 
7599     IF ( p_estimate_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_estimate_start_date IS NOT NULL )
7600     THEN
7601        l_estimated_start_date := cur_val_rec.estimated_start_date;
7602     ELSE
7603        l_estimated_start_date := p_estimate_start_date;
7604     END IF;
7605 
7606     IF ( p_estimate_finish_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_estimate_finish_date IS NOT NULL )
7607     THEN
7608        l_estimated_finish_date := cur_val_rec.estimated_finish_date;
7609     ELSE
7610        l_estimated_finish_date := p_estimate_finish_date;
7611     END IF;
7612 
7613     IF ( p_duration = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_duration IS NOT NULL )
7614     THEN
7615        l_duration := cur_val_rec.duration;
7616     ELSE
7617        l_duration := p_duration;
7618     END IF;
7619 
7620     IF ( p_early_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_early_start_date IS NOT NULL )
7621     THEN
7622        l_early_start_date := cur_val_rec.early_start_date;
7623     ELSE
7624        l_early_start_date := p_early_start_date;
7625     END IF;
7626 
7627     IF ( p_early_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_early_end_date IS NOT NULL )
7628     THEN
7629        l_early_end_date := cur_val_rec.early_finish_date;
7630     ELSE
7631        l_early_end_date := p_early_end_date;
7632     END IF;
7633 
7634     IF ( p_late_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_late_start_date IS NOT NULL )
7635     THEN
7636        l_late_start_date := cur_val_rec.late_start_date;
7637     ELSE
7638        l_late_start_date := p_late_start_date;
7639     END IF;
7640 
7641     IF ( p_late_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND p_late_end_date IS NOT NULL )
7642     THEN
7643        l_late_end_date := cur_val_rec.late_finish_date;
7644     ELSE
7645        l_late_end_date := p_late_end_date;
7646     END IF;
7647 
7648     IF (p_milestone_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_milestone_flag IS NOT NULL) THEN
7649        l_milestone_flag := cur_val_rec.milestone_flag;
7650     ELSE
7651       l_milestone_flag := p_milestone_flag;
7652     END IF;
7653 
7654     IF (p_critical_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_critical_flag IS NOT NULL) THEN
7655 -- Changes for bug 2732713
7656 --      l_critical_flag := cur_val_rec.milestone_flag;
7657         l_critical_flag := cur_val_rec.critical_flag;
7658     ELSE
7659       l_critical_flag := p_critical_flag;
7660     END IF;
7661 
7662     IF ( p_ext_act_duration = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_ext_act_duration IS NOT NULL )
7663     THEN
7664        l_ext_act_duration := cur_val_rec.ext_act_duration;
7665     ELSE
7666        l_ext_act_duration := p_ext_act_duration;
7667        IF l_ext_act_duration < 0 THEN
7668          PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_EXT_ACT_ERR');
7669          l_msg_data := l_error_message_code;
7670          RAISE FND_API.G_EXC_ERROR;
7671        END IF;
7672     END IF;
7673 
7674     IF ( p_ext_remain_duration = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_ext_remain_duration IS NOT NULL )
7675     THEN
7676        l_ext_remain_duration := cur_val_rec.ext_remain_duration;
7677     ELSE
7678        l_ext_remain_duration := p_ext_remain_duration;
7679        IF l_ext_remain_duration < 0 THEN
7680          PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_EXT_RMN_ERR');
7681          l_msg_data := l_error_message_code;
7682          RAISE FND_API.G_EXC_ERROR;
7683        END IF;
7684     END IF;
7685 
7686     IF ( p_ext_sch_duration = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_ext_sch_duration IS NOT NULL )
7687     THEN
7688        l_ext_sch_duration := cur_val_rec.ext_sch_duration;
7689     ELSE
7690        l_ext_sch_duration := p_ext_sch_duration;
7691        IF l_ext_sch_duration < 0 THEN
7692          PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_EXT_SCH_ERR');
7693          l_msg_data := l_error_message_code;
7694          RAISE FND_API.G_EXC_ERROR;
7695        END IF;
7696     END IF;
7697 
7698     -- xxlu
7699     IF (p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute_category IS NOT NULL) THEN
7700       l_attribute_category := cur_val_rec.attribute_category;
7701     ELSE
7702       l_attribute_category := p_attribute_category;
7703     END IF;
7704 
7705     IF (p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute1 IS NOT NULL) THEN
7706       l_attribute1 := cur_val_rec.attribute1;
7707     ELSE
7708       l_attribute1 := p_attribute1;
7709     END IF;
7710 
7711     IF (p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute2 IS NOT NULL) THEN
7712       l_attribute2 := cur_val_rec.attribute2;
7713     ELSE
7714       l_attribute2 := p_attribute2;
7715     END IF;
7716 
7717     IF (p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute3 IS NOT NULL) THEN
7718       l_attribute3 := cur_val_rec.attribute3;
7719     ELSE
7720       l_attribute3 := p_attribute3;
7721     END IF;
7722 
7723     IF (p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute4 IS NOT NULL) THEN
7724       l_attribute4 := cur_val_rec.attribute4;
7725     ELSE
7726       l_attribute4 := p_attribute4;
7727     END IF;
7728 
7729     IF (p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute5 IS NOT NULL) THEN
7730       l_attribute5 := cur_val_rec.attribute5;
7731     ELSE
7732       l_attribute5 := p_attribute5;
7733     END IF;
7734 
7735     IF (p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute6 IS NOT NULL) THEN
7736       l_attribute6 := cur_val_rec.attribute6;
7737     ELSE
7738       l_attribute6 := p_attribute6;
7739     END IF;
7740 
7741     IF (p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute7 IS NOT NULL) THEN
7742       l_attribute7 := cur_val_rec.attribute7;
7743     ELSE
7744       l_attribute7 := p_attribute7;
7745     END IF;
7746 
7747     IF (p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute8 IS NOT NULL) THEN
7748       l_attribute8 := cur_val_rec.attribute8;
7749     ELSE
7750       l_attribute8 := p_attribute8;
7751     END IF;
7752 
7753     IF (p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute9 IS NOT NULL) THEN
7754       l_attribute9 := cur_val_rec.attribute9;
7755     ELSE
7756       l_attribute9 := p_attribute9;
7757     END IF;
7758 
7759     IF (p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute10 IS NOT NULL) THEN
7760       l_attribute10 := cur_val_rec.attribute10;
7761     ELSE
7762       l_attribute10 := p_attribute10;
7763     END IF;
7764 
7765     IF (p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute11 IS NOT NULL) THEN
7766       l_attribute11 := cur_val_rec.attribute11;
7767     ELSE
7768       l_attribute11 := p_attribute11;
7769     END IF;
7770 
7771     IF (p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute12 IS NOT NULL) THEN
7772       l_attribute12 := cur_val_rec.attribute12;
7773     ELSE
7774       l_attribute12 := p_attribute12;
7775     END IF;
7776 
7777     IF (p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute13 IS NOT NULL) THEN
7778       l_attribute13 := cur_val_rec.attribute13;
7779     ELSE
7780       l_attribute13 := p_attribute13;
7781     END IF;
7782 
7783     IF (p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute14 IS NOT NULL) THEN
7784       l_attribute14 := cur_val_rec.attribute14;
7785     ELSE
7786       l_attribute14 := p_attribute14;
7787     END IF;
7788 
7789     IF (p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_attribute15 IS NOT NULL) THEN
7790       l_attribute15 := cur_val_rec.attribute15;
7791     ELSE
7792       l_attribute15 := p_attribute15;
7793     END IF;
7794     -- end xxlu changes.
7795 
7796     --Bug 3305199: Added for M
7797 
7798     -- Bug 3953611 (if p_def_sch_tool_tsk_type_code is explicitly passed as NULL ,then its value should be taken as NULL Only.
7799     --              it should not be defaulted .If and Only if we dont pass the param (i.e)Miss_Char then only we have to default)
7800 
7801     IF (/* 3953611 p_def_sch_tool_tsk_type_code IS NULL OR <End Changes>*/ p_def_sch_tool_tsk_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
7802       l_def_sch_tool_tsk_type_code := cur_val_rec.DEF_SCH_TOOL_TSK_TYPE_CODE;
7803     ELSE
7804       l_def_sch_tool_tsk_type_code := p_def_sch_tool_tsk_type_code;
7805     END IF;
7806 
7807     -- Bug 3762396
7808 /*    IF (p_constraint_type_code IS NULL OR p_constraint_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
7809       l_constraint_type_code := cur_val_rec.CONSTRAINT_TYPE_CODE;
7810     ELSE
7811       l_constraint_type_Code := p_constraint_type_code;
7812     END IF;*/
7813     -- Bug 3762396 Added following if block
7814     IF (p_constraint_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND p_constraint_type_code IS NOT NULL) THEN
7815       l_constraint_type_code := cur_val_rec.CONSTRAINT_TYPE_CODE;
7816     ELSE
7817       l_constraint_type_Code := p_constraint_type_code;
7818     END IF;
7819 
7820     IF (p_constraint_date IS NOT NULL AND p_constraint_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN  --bug 3874705: Add NOT condition and change to AND
7821       l_constraint_date := cur_val_rec.CONSTRAINT_DATE;
7822     ELSE
7823       l_constraint_date := p_constraint_date;
7824     END IF;
7825 
7826     IF (p_free_slack IS NOT NULL AND p_free_slack = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN  --bug 3874705: Add NOT condition and change to AND
7827       l_free_slack := cur_val_rec.FREE_SLACK;
7828     ELSE
7829       l_free_slack := p_free_slack;
7830     END IF;
7831 
7832     IF (p_total_slack IS NOT NULL AND p_total_slack = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN  --bug 3874705: Add NOT condition and change to AND
7833       l_total_slack := cur_val_rec.TOTAL_SLACK;
7834     ELSE
7835       l_total_slack := p_total_slack;
7836     END IF;
7837 
7838     IF (p_effort_driven_flag IS NOT NULL AND p_effort_driven_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN  --bug 3874705: Add NOT condition and change to AND
7839       l_effort_driven_flag := cur_val_rec.EFFORT_DRIVEN_FLAG;
7840     ELSE
7841       l_effort_driven_flag := p_effort_driven_flag;
7842     END IF;
7843 
7844     IF (p_level_assignments_flag IS NOT NULL AND p_level_assignments_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN  --bug 3874705: Add NOT condition and change to AND
7845       l_level_assignments_flag := cur_val_rec.LEVEL_ASSIGNMENTS_FLAG;
7846     ELSE
7847       l_level_assignments_flag := p_level_assignments_flag;
7848     END IF;
7849     --end bug 3305199
7850 
7851     PA_PROJ_ELEMENTS_UTILS.Check_Date_range(
7852                     p_scheduled_start_date  => l_scheduled_start_date
7853                    ,p_scheduled_end_date          => l_scheduled_end_date
7854                    ,p_obligation_start_date     => l_obligation_start_date
7855                    ,p_obligation_end_date         => l_obligation_end_date
7856                    ,p_actual_start_date       => l_actual_start_date
7857                    ,p_actual_finish_date          => l_actual_finish_date
7858                    ,p_estimate_start_date         => l_estimated_start_date
7859                    ,p_estimate_finish_date  => l_estimated_finish_date
7860                    ,p_early_start_date        => l_early_start_date
7861                    ,p_early_end_date          => l_early_end_date
7862                    ,p_late_start_date         => l_late_start_date
7863                    ,p_late_end_date           => l_late_end_date
7864                    ,x_return_status             => l_return_status
7865                    ,x_error_message_code        => l_error_message_code );
7866 
7867     IF (l_return_status <> 'S') THEN
7868       PA_UTILS.ADD_MESSAGE('PA', l_error_message_code);
7869       l_msg_data := l_error_message_code;
7870       RAISE FND_API.G_EXC_ERROR;
7871     END IF;
7872 
7873     --hsiu modified for new duration calculation
7874     --schedule duration is calculated and updated in rollup api.
7875 /*
7876     IF ( l_scheduled_start_date IS NOT NULL AND l_duration IS NOT NULL )
7877     THEN
7878 --Hsiu modified
7879        l_scheduled_end_date := l_scheduled_start_date + l_duration - 1;
7880     ELSIF ( l_scheduled_start_date IS NOT NULL AND l_scheduled_end_date IS NOT NULL AND l_duration IS NOT NULL )
7881     THEN
7882 --Hsiu modified
7883        l_scheduled_end_date := l_scheduled_start_date + l_duration - 1;
7884 
7885     ELSIF ( l_scheduled_start_date IS NOT NULL AND l_scheduled_end_date IS NOT NULL )
7886     THEN
7887        IF l_duration is NULL
7888        THEN
7889 --Hsiu modified
7890           l_duration :=  trunc(l_scheduled_end_date - l_scheduled_start_date) + 1;
7891        END IF;
7892     ELSIF ( l_scheduled_start_date IS NULL AND l_scheduled_end_date IS NULL AND l_duration IS NULL )
7893     THEN
7894        l_scheduled_start_date := TRUNC(SYSDATE);
7895        l_scheduled_end_date := TRUNC(SYSDATE);
7896        l_duration           := 1;
7897     END IF;
7898 */
7899 
7900     IF (l_scheduled_start_date IS NOT NULL AND
7901         l_scheduled_end_date IS NOT NULL) THEN
7902 --3305199: Remove duration calculation using calendar
7903       l_duration := trunc(l_scheduled_end_date) - trunc(l_scheduled_start_date) + 1;
7904 
7905 /* 3305199
7906    --removing duration calculation
7907       PA_DURATION_UTILS.GET_DURATION(
7908        p_calendar_id => l_calendar_id
7909       ,p_start_date => l_scheduled_start_date
7910       ,p_end_date => l_scheduled_end_date
7911       ,x_duration_days => l_duration_days
7912       ,x_duration_hours => l_duration
7913       ,x_return_status => l_return_status
7914       ,x_msg_count => l_msg_count
7915       ,x_msg_data => l_msg_data
7916       );
7917 
7918       IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7919         l_msg_count := FND_MSG_PUB.count_msg;
7920         IF l_msg_count > 0 THEN
7921           x_msg_count := l_msg_count;
7922             IF x_msg_count = 1 THEN
7923             x_msg_data := l_msg_data;
7924           END IF;
7925           RAISE FND_API.G_EXC_ERROR;
7926         END IF;
7927       END IF;
7928 */
7929           -- Bug 3053846. Check if duration for the task has changed. If yes then set the flag.
7930           -- This is more robust than checking if the dates have changed.
7931           -- This piece of code will always be executed as if the dates are null an error is thrown in the
7932           -- beginning of this API.
7933           IF (l_duration <> cur_val_rec.duration) THEN
7934             --3035902: process update flag changes
7935             IF (l_weighting_basis='DURATION') THEN
7936               --set the flag if the dates have changed
7937               l_update_flag := 'Y';
7938             END IF;
7939             --3035902: end process update flag changes
7940           END IF;
7941     END IF;
7942 
7943     --hsiu modified for duration calculation using calendar
7944     IF (l_estimated_start_date IS NOT NULL AND
7945         l_estimated_finish_date IS NOT NULL) THEN
7946 
7947 --3305199: Remove duration calculation using calendar
7948       l_est_duration := trunc(l_estimated_finish_date) - trunc(l_estimated_start_date) + 1;
7949 
7950 /* 3305199
7951    --removing duration calculation
7952       --calculate duration
7953         pa_duration_utils.get_duration(
7954          p_calendar_id      => l_calendar_id
7955                 ,p_start_date       => l_estimated_start_date
7956             ,p_end_date         => l_estimated_finish_date
7957                 ,x_duration_days    => l_est_duration_days
7958                 ,x_duration_hours   => l_est_duration
7959                 ,x_return_status    => l_return_status
7960                 ,x_msg_count        => l_msg_count
7961                 ,x_msg_data         => l_msg_data);
7962 
7963         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7964           l_msg_count := FND_MSG_PUB.count_msg;
7965           IF l_msg_count > 0 THEN
7966             x_msg_count := l_msg_count;
7967               IF x_msg_count = 1 THEN
7968                 x_msg_data := l_msg_data;
7969             END IF;
7970             RAISE FND_API.G_EXC_ERROR;
7971           END IF;
7972         END IF;
7973 */
7974 
7975     END IF;
7976 
7977     IF (l_actual_start_date IS NOT NULL AND
7978         l_actual_finish_date IS NOT NULL) THEN
7979 --3305199: Remove duration calculation using calendar
7980       l_act_duration := trunc(l_actual_finish_date) - trunc(l_actual_start_date) + 1;
7981 
7982 /* 3305199
7983    --removing duration calculation
7984       --calculate duration
7985         pa_duration_utils.get_duration(
7986          p_calendar_id      => l_calendar_id
7987                 ,p_start_date       => l_actual_start_date
7988             ,p_end_date         => l_actual_finish_date
7989                 ,x_duration_days    => l_act_duration_days
7990                 ,x_duration_hours   => l_act_duration
7991                 ,x_return_status    => l_return_status
7992                 ,x_msg_count        => l_msg_count
7993                 ,x_msg_data         => l_msg_data);
7994 
7995         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7996           l_msg_count := FND_MSG_PUB.count_msg;
7997           IF l_msg_count > 0 THEN
7998             x_msg_count := l_msg_count;
7999               IF x_msg_count = 1 THEN
8000                 x_msg_data := l_msg_data;
8001             END IF;
8002             RAISE FND_API.G_EXC_ERROR;
8003           END IF;
8004         END IF;
8005 */
8006     END IF;
8007 
8008     --end duration calculation modification
8009 
8010 
8011     IF (p_planned_effort IS NULL OR p_planned_effort = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
8012       l_planned_effort := cur_val_rec.PLANNED_EFFORT;
8013     ELSE
8014       l_planned_effort := p_planned_effort;
8015 
8016     --bug 4620492
8017        IF l_task_has_sub_proj_flag = 'Y' AND
8018           p_calling_module = 'AMG'
8019        THEN
8020           l_planned_effort := cur_val_rec.PLANNED_EFFORT;
8021        END IF;
8022     --end bug 4620492
8023 
8024     -- Bug 7526270
8025     IF p_calling_module = 'AMG' THEN
8026       IF (NVL(l_planned_effort,0) <> nvl(cur_val_rec.planned_effort,0)) THEN
8027          l_update_effort_flag := 'Y';
8028          IF (l_weighting_basis='EFFORT') THEN
8029            l_update_flag := 'Y';
8030          END IF;
8031       END IF;
8032     ELSE
8033        --hsiu: bug 3035902
8034        -- added nvl for bug#3058114
8035 --      IF (l_planned_effort <> nvl(cur_val_rec.planned_effort,-99)) THEN
8036       IF (NVL(l_planned_effort,-99) <> nvl(cur_val_rec.planned_effort,-99)) THEN
8037         l_update_effort_flag := 'Y';  --06/03
8038         IF (l_weighting_basis='EFFORT') THEN
8039           --set the flag if the dates have changed
8040           l_update_flag := 'Y';
8041         END IF;
8042       END IF;
8043       --end bug 3035902
8044     END IF; -- Bug 7526270
8045     END IF;
8046 
8047     -- Bug Fix 5726773
8048     -- Commenting out the following in order to allow
8049     -- negative amounts which are entered through Create Tasks page
8050     -- while creating a task.
8051     /*
8052     IF (l_planned_effort IS NOT NULL) THEN
8053       IF (l_planned_effort < 0) THEN
8054         --error message
8055         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NEG_PLAN_EFF_ERR');
8056         x_msg_data := 'PA_PS_NEG_PLAN_EFF_ERR';
8057         RAISE FND_API.G_EXC_ERROR;
8058       END IF;
8059     END IF;
8060     */
8061     -- END of Bug Fix 5726773
8062 
8063     --hsiu: bug 3035902
8064     IF (l_update_flag = 'Y' OR l_update_effort_flag = 'Y' ) THEN  -- 4299499 Included OR l_update_effort_flag = 'Y'
8065       --update the process flag
8066       open get_parent_struc_ver_id(cur_val_rec.element_version_id);
8067       fetch get_parent_struc_ver_id INTO l_parent_struc_ver_id;
8068       close get_parent_struc_ver_id;
8069       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
8070                                p_project_id => cur_val_rec.project_id,
8071                                p_structure_version_id => l_parent_struc_ver_id,
8072                                p_update_wbs_flag => 'Y',
8073                                x_return_status => l_return_status,
8074                                x_msg_count => l_msg_count,
8075                                x_msg_data => l_msg_data
8076                              );
8077       IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8078         l_msg_count := FND_MSG_PUB.count_msg;
8079         IF l_msg_count > 0 THEN
8080           x_msg_count := l_msg_count;
8081             IF x_msg_count = 1 THEN
8082             x_msg_data := l_msg_data;
8083           END IF;
8084           RAISE FND_API.G_EXC_ERROR;
8085         END IF;
8086       END IF;
8087     END IF;
8088     --end bug 3035902
8089 
8090     -- Added for FP_M changes 3305199 Bhumesh
8091     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_Project_ID)= 'Y' Then
8092 
8093        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
8094              p_structure_version_id => l_Structure_Version_ID
8095             ,p_dirty_flag           => 'Y'             --bug 3902282
8096         ,x_return_status        => x_return_status
8097         ,x_msg_count            => x_msg_count
8098         ,x_msg_data             => x_msg_data
8099        );
8100 
8101        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
8102           x_msg_count := FND_MSG_PUB.count_msg;
8103           If x_msg_count = 1 then
8104              pa_interface_utils_pub.get_messages
8105               (p_encoded        => FND_API.G_TRUE,
8106                p_msg_index      => 1,
8107                p_msg_count      => l_msg_count,
8108                p_msg_data       => l_msg_data,
8109                p_data           => l_data,
8110                p_msg_index_out  => l_msg_index_out);
8111                x_msg_data := l_data;
8112           End If;
8113           raise FND_API.G_EXC_ERROR;
8114        End If;
8115 
8116     End If;
8117     -- End of FP_M changes
8118 
8119     OPEN cur_proj_elem_ver_sch;
8120     FETCH cur_proj_elem_ver_sch INTO cur_proj_elem_ver_sch_rec;
8121     IF cur_proj_elem_ver_sch%FOUND
8122     THEN
8123        if cur_proj_elem_ver_sch_rec.record_version_number <> p_record_version_number
8124        then
8125            FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_CHANGED');
8126            APP_EXCEPTION.Raise_Exception;
8127        end if;
8128        PA_PROJ_ELEMENT_SCH_PKG.Update_Row(
8129          X_ROW_ID                => cur_proj_elem_ver_sch_rec.rowid
8130         ,X_PEV_SCHEDULE_ID     => p_pev_schedule_id
8131         ,X_ELEMENT_VERSION_ID      => cur_proj_elem_ver_sch_rec.ELEMENT_VERSION_ID
8132         ,X_PROJECT_ID            => cur_proj_elem_ver_sch_rec.PROJECT_ID
8133         ,X_PROJ_ELEMENT_ID     => cur_proj_elem_ver_sch_rec.PROJ_ELEMENT_ID
8134         ,X_SCHEDULED_START_DATE  => l_SCHEDULED_START_DATE
8135         ,X_SCHEDULED_FINISH_DATE => l_SCHEDULED_END_DATE
8136         ,X_OBLIGATION_START_DATE => l_OBLIGATION_START_DATE
8137         ,X_OBLIGATION_FINISH_DATE => l_OBLIGATION_end_DATE
8138         ,X_ACTUAL_START_DATE        => l_ACTUAL_START_DATE
8139         ,X_ACTUAL_FINISH_DATE       => l_ACTUAL_FINISH_DATE
8140         ,X_ESTIMATED_START_DATE   => l_ESTIMATED_START_DATE
8141         ,X_ESTIMATED_FINISH_DATE  => l_ESTIMATED_FINISH_DATE
8142         ,X_DURATION           => l_DURATION
8143         ,X_EARLY_START_DATE     => l_EARLY_START_DATE
8144         ,X_EARLY_FINISH_DATE        => l_EARLY_end_DATE
8145         ,X_LATE_START_DATE      => l_LATE_START_DATE
8146         ,X_LATE_FINISH_DATE     => l_LATE_end_DATE
8147         ,X_CALENDAR_ID            => l_CALENDAR_ID
8148         ,X_MILESTONE_FLAG       => l_MILESTONE_FLAG
8149         ,X_CRITICAL_FLAG        => l_CRITICAL_FLAG
8150         ,X_WQ_PLANNED_QUANTITY      => l_wq_planned_quantity
8151         ,x_planned_effort           => l_planned_effort
8152         ,X_ACTUAL_DURATION          => l_act_duration
8153         ,X_ESTIMATED_DURATION       => l_est_duration
8154         ,X_def_sch_tool_tsk_type_code => l_def_sch_tool_tsk_type_code
8155         ,X_constraint_type_code     => l_constraint_type_code
8156         ,X_constraint_date          => l_constraint_date
8157         ,X_free_slack               => l_free_slack
8158         ,X_total_slack              => l_total_slack
8159         ,X_effort_driven_flag       => l_effort_driven_flag
8160         ,X_level_assignments_flag   => l_level_assignments_flag
8161         ,X_RECORD_VERSION_NUMBER  => P_RECORD_VERSION_NUMBER
8162         ,X_ext_act_duration         => l_ext_act_duration
8163         ,X_ext_remain_duration      => l_ext_remain_duration
8164         ,X_ext_sch_duration         => l_ext_sch_duration
8165         ,X_ATTRIBUTE_CATEGORY               => l_ATTRIBUTE_CATEGORY
8166         ,X_ATTRIBUTE1                       => l_ATTRIBUTE1
8167         ,X_ATTRIBUTE2                       => l_ATTRIBUTE2
8168         ,X_ATTRIBUTE3                       => l_ATTRIBUTE3
8169         ,X_ATTRIBUTE4                       => l_ATTRIBUTE4
8170         ,X_ATTRIBUTE5                       => l_ATTRIBUTE5
8171         ,X_ATTRIBUTE6                       => l_ATTRIBUTE6
8172         ,X_ATTRIBUTE7                       => l_ATTRIBUTE7
8173         ,X_ATTRIBUTE8                       => l_ATTRIBUTE8
8174         ,X_ATTRIBUTE9                       => l_ATTRIBUTE9
8175         ,X_ATTRIBUTE10                    => l_ATTRIBUTE10
8176         ,X_ATTRIBUTE11                    => l_ATTRIBUTE11
8177         ,X_ATTRIBUTE12                    => l_ATTRIBUTE12
8178         ,X_ATTRIBUTE13                    => l_ATTRIBUTE13
8179         ,X_ATTRIBUTE14                    => l_ATTRIBUTE14
8180         ,X_ATTRIBUTE15                    => l_ATTRIBUTE15
8181        );
8182      ELSE
8183         CLOSE cur_proj_elem_ver_sch;
8184         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_INV_PEV_SCH_ID');
8185         l_msg_data := 'PA_PS_INV_PEV_SCH_ID';
8186         RAISE FND_API.G_EXC_ERROR;
8187      END IF;
8188 
8189   OPEN get_parent_struc_Ver_id(cur_proj_elem_ver_sch_rec.element_version_id);
8190   FETCH get_parent_struc_Ver_id INTO l_parent_struc_Ver_id;
8191   CLOSE get_parent_struc_ver_id;
8192 
8193   IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_parent_struc_ver_id,'WORKPLAN') ) AND
8194      ('Y' = l_schedule_update_flag ) THEN
8195 
8196     --bug 4153366
8197      IF (p_calling_module = 'AMG')
8198      THEN
8199         l_assgn_context := 'INSERT_VALUES';
8200      ELSE
8201         l_assgn_context := 'UPDATE';
8202      END IF;
8203      --bug 4153366;
8204 
8205     PA_TASK_ASSIGNMENT_UTILS.Adjust_Asgmt_Dates(
8206                                   p_element_version_id     => cur_proj_elem_ver_sch_rec.ELEMENT_VERSION_ID,
8207                                   p_old_task_sch_start     => l_old_sch_date,
8208                                   p_new_task_sch_start     => l_SCHEDULED_START_DATE,
8209                                   p_new_task_sch_finish    => l_SCHEDULED_END_DATE,
8210                                   p_context                => l_assgn_context,    --bug 4153366
8211                                   x_res_assignment_id_tbl  => l_res_asgmt_id_tbl,
8212                                   x_planning_start_tbl     => l_planning_start_tbl,
8213                                   x_planning_end_tbl       => l_planning_end_tbl,
8214                                   x_return_status          => l_return_status);
8215 
8216     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8217       l_msg_count := FND_MSG_PUB.count_msg;
8218       IF l_msg_count > 0 THEN
8219         x_msg_count := l_msg_count;
8220         IF x_msg_count = 1 THEN
8221           x_msg_data := l_msg_data;
8222         END IF;
8223         RAISE FND_API.G_EXC_ERROR;
8224       END IF;
8225     END IF;
8226   END IF;
8227 
8228 
8229 --hsiu added for dates rollup
8230 --  this should only be called from FORMS, since Self Service is calling the rollup
8231 --  api in the middle tier.
8232   IF (p_calling_module = 'FORMS') THEN
8233     l_tasks_ver_ids.extend;
8234     l_tasks_ver_ids(l_tasks_ver_ids.count) := cur_proj_elem_ver_sch_rec.ELEMENT_VERSION_ID;
8235     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
8236                          p_commit => FND_API.G_FALSE,
8237                          p_element_versions => l_tasks_ver_ids,
8238                          x_return_status => l_return_status,
8239                          x_msg_count => l_msg_count,
8240                          x_msg_data => l_msg_data);
8241 
8242     if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8243       x_msg_count := FND_MSG_PUB.count_msg;
8244       if x_msg_count = 1 then
8245         pa_interface_utils_pub.get_messages
8246            (p_encoded        => FND_API.G_TRUE,
8247             p_msg_index      => 1,
8248             p_msg_count      => l_msg_count,
8249             p_msg_data       => l_msg_data,
8250             p_data           => l_data,
8251             p_msg_index_out  => l_msg_index_out);
8252             x_msg_data := l_data;
8253       end if;
8254       RAISE FND_API.G_EXC_ERROR;
8255     end if;
8256 
8257   END IF;
8258 
8259   --bug 3301192 fp changes
8260    IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => cur_proj_elem_ver_sch_rec.ELEMENT_VERSION_ID )  = 'Y'
8261    THEN
8262 
8263       open get_parent_struc_ver_id(cur_proj_elem_ver_sch_rec.ELEMENT_VERSION_ID);
8264       fetch get_parent_struc_ver_id INTO l_parent_struc_ver_id;
8265       close get_parent_struc_ver_id;
8266 
8267        l_task_ver_ids2.extend(1); /* Venky */
8268        l_planned_effort2.extend(1); /* Venky */
8269        l_start_dates.extend(1); /* Venky */
8270        l_end_dates.extend(1); /* Venky */
8271 
8272        l_task_ver_ids2(1) := cur_proj_elem_ver_sch_rec.ELEMENT_VERSION_ID;
8273        l_planned_effort2(1) := l_planned_effort;
8274        l_start_dates(1)      := l_SCHEDULED_START_DATE;
8275        l_end_dates(1)        := l_SCHEDULED_END_DATE;
8276 
8277        --bug 3802976
8278        if pa_task_assignment_utils.check_asgmt_exists_in_task(cur_proj_elem_ver_sch_rec.ELEMENT_VERSION_ID) = 'Y'
8279        then
8280            l_update_effort_flag := 'N';
8281        end if;
8282        --bug 3802976
8283 
8284        /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
8285        /*moved pa_fp_planning_transaction_pub.update_planning_transactions into plsql block        */
8286        BEGIN
8287          IF l_update_effort_flag = 'Y'
8288          THEN
8289            pa_fp_planning_transaction_pub.update_planning_transactions
8290            (
8291              p_context                      => 'WORKPLAN'
8292 --          ,p_maintain_reporting_lines     => 'Y'
8293             ,p_struct_elem_version_id       => l_parent_struc_ver_id
8294             ,p_task_elem_version_id_tbl     => l_task_ver_ids2
8295             ,p_planned_people_effort_tbl    => l_planned_effort2
8296             ,p_start_date_tbl               => l_start_dates
8297             ,p_end_date_tbl                 => l_end_dates
8298             ,x_return_status                => l_return_status
8299             ,x_msg_count                    => l_msg_count
8300             ,x_msg_data                     => l_msg_data
8301            );
8302          END IF;
8303        EXCEPTION
8304            WHEN OTHERS THEN
8305                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
8306                                         p_procedure_name => 'update_schedule_version',
8307                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.update_planning_transactions:'||SQLERRM,1,240));
8308            RAISE FND_API.G_EXC_ERROR;
8309        END;
8310 
8311      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8312        x_msg_count := FND_MSG_PUB.count_msg;
8313        if x_msg_count = 1 then
8314          pa_interface_utils_pub.get_messages
8315          (p_encoded        => FND_API.G_TRUE,
8316           p_msg_index      => 1,
8317           p_msg_count      => l_msg_count,
8318           p_msg_data       => l_msg_data,
8319           p_data           => l_data,
8320           p_msg_index_out  => l_msg_index_out);
8321           x_msg_data := l_data;
8322        end if;
8323        raise FND_API.G_EXC_ERROR;
8324      end if;
8325      --end 3301192 fp changes
8326   END IF;  --<< l_planned_effort >>
8327 
8328      CLOSE cur_proj_elem_ver_sch;
8329 
8330 
8331 x_return_status := FND_API.G_RET_STS_SUCCESS;
8332 
8333 EXCEPTION
8334     WHEN FND_API.G_EXC_ERROR THEN
8335       IF (p_commit = FND_API.G_TRUE) THEN
8336         ROLLBACK to UPDATE_SCH_VER_PRIVATE;
8337       END IF;
8338       x_msg_count := FND_MSG_PUB.count_msg;
8339       x_return_status := FND_API.G_RET_STS_ERROR;
8340     WHEN OTHERS THEN
8341       IF (p_commit = FND_API.G_TRUE) THEN
8342         ROLLBACK to UPDATE_SCH_VER_PRIVATE;
8343       END IF;
8344       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8345       x_msg_count := FND_MSG_PUB.count_msg;
8346       --put message
8347       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
8348                               p_procedure_name => 'update_schedule_version',
8349                               p_error_text     => SUBSTRB(SQLERRM,1,240));
8350       RAISE;
8351 END Update_Schedule_Version;
8352 
8353 
8354 PROCEDURE Inherit_task_type_attr(
8355  p_api_version            IN NUMBER :=1.0,
8356  p_init_msg_list          IN VARCHAR2   :=FND_API.G_TRUE,
8357  p_commit                 IN VARCHAR2   :=FND_API.G_FALSE,
8358  p_validate_only          IN VARCHAR2   :=FND_API.G_TRUE,
8359  p_validation_level       IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
8360  p_calling_module         IN VARCHAR2   :='SELF_SERVICE',
8361  p_debug_mode             IN VARCHAR2   :='N',
8362  p_max_msg_count          IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
8363  p_task_id                IN NUMBER,
8364  p_task_version_id        IN NUMBER,
8365  x_return_status          OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
8366  x_msg_count              OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
8367  x_msg_data               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8368 )
8369 IS
8370    CURSOR get_parent_task_type_attr IS
8371      select c.TYPE_ID  , c.WQ_ITEM_CODE, c.WQ_UOM_CODE, c.WQ_ACTUAL_ENTRY_CODE,
8372             c.TASK_PROGRESS_ENTRY_PAGE_ID
8373        from pa_proj_element_versions a,
8374             pa_object_relationships b,
8375             pa_proj_elements c
8376       where b.object_id_to1 = p_task_version_id
8377         and b.object_type_to = 'PA_TASKS'
8378         and b.relationship_type = 'S'
8379         and b.object_type_from = 'PA_TASKS'
8380         and b.object_id_from1 = a.element_version_id
8381         and a.project_id = c.project_id
8382         and a.proj_element_id = c.proj_element_id;
8383    l_parent_type_attr_rec  get_parent_task_type_attr%ROWTYPE;
8384 
8385    CURSOR get_current_task_type_attr IS
8386      select c.TYPE_ID  , c.WQ_ITEM_CODE, c.WQ_UOM_CODE, c.WQ_ACTUAL_ENTRY_CODE,
8387             c.TASK_PROGRESS_ENTRY_PAGE_ID
8388        from pa_proj_elements c
8389       where c.proj_element_id = p_task_id;
8390    l_type_attr_rec   get_current_task_type_attr%ROWTYPE;
8391 BEGIN
8392   x_return_status := FND_API.G_RET_STS_SUCCESS;
8393   OPEN get_parent_task_type_attr;
8394   FETCH get_parent_task_type_attr INTO l_parent_type_attr_rec;
8395   IF get_parent_task_type_attr%NOTFOUND THEN
8396     --it is a top task. no update necessary
8397     CLOSE get_parent_task_type_attr;
8398     return;
8399   END IF;
8400   CLOSE get_parent_task_type_attr;
8401 
8402   OPEN get_current_task_type_attr;
8403   FETCH get_current_task_type_attr into l_type_attr_rec;
8404   CLOSE get_current_task_type_attr;
8405 
8406   IF (l_parent_type_attr_rec.TYPE_ID   = l_type_attr_rec.TYPE_ID  ) THEN
8407     --same type as parent at creation time. inherit
8408     UPDATE pa_proj_elements set
8409 --      task_weighting_deriv_code = l_parent_type_attr_rec.TASK_WEIGHTING_DERIV_CODE
8410       WQ_ITEM_CODE = l_parent_type_attr_rec.WQ_ITEM_CODE
8411      ,WQ_UOM_CODE = l_parent_type_attr_rec.WQ_UOM_CODE
8412      ,WQ_ACTUAL_ENTRY_CODE = l_parent_type_attr_rec.WQ_ACTUAL_ENTRY_CODE
8413      ,TASK_PROGRESS_ENTRY_PAGE_ID = l_parent_type_attr_rec.TASK_PROGRESS_ENTRY_PAGE_ID
8414     where proj_element_id = p_task_id;
8415   END IF;
8416 EXCEPTION
8417   WHEN OTHERS THEN
8418     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8419     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
8420                               p_procedure_name => 'Inherit_task_type_attr',
8421                               p_error_text     => SUBSTRB(SQLERRM,1,240));
8422     raise;
8423 END Inherit_task_type_attr;
8424 
8425 
8426 --   API name                      : Update_Task_Weighting
8427 --   Type                          : Private Procedure
8428 --   Pre-reqs                      : None
8429 --   Return Value                  : N/A
8430 --   Parameters
8431 --   p_api_version                       IN  NUMBER      := 1.0
8432 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
8433 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
8434 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
8435 --   p_validation_level                  IN  VARCHAR2    := 100
8436 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
8437 --   p_debug_mode                        IN  VARCHAR2    := 'N'
8438 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8439 --   p_object_relationship_id            IN  NUMBER
8440 --   p_weighting_percentage              IN  NUMBER
8441 --   p_record_version_number             IN  NUMBER
8442 --   x_return_status                     OUT VARCHAR2
8443 --   x_msg_count                         OUT NUMBER
8444 --   x_msg_data                          OUT VARCHAR2
8445 --
8446 --  History
8447 --
8448 --  20-SEP-02   hyau             -Created
8449 --
8450 --
8451   procedure Update_Task_Weighting
8452   (
8453    p_api_version                       IN  NUMBER      := 1.0
8454    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
8455    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
8456    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
8457    ,p_validation_level                  IN  VARCHAR2    := 100
8458    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
8459    ,p_debug_mode                        IN  VARCHAR2    := 'N'
8460    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8461    ,p_object_relationship_id            IN  NUMBER
8462    ,p_weighting_percentage              IN  NUMBER
8463    ,p_record_version_number             IN  NUMBER
8464    ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8465    ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8466    ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8467   )
8468   IS
8469 
8470     l_weighting_percentage NUMBER;
8471 
8472         CURSOR cur_obj_relationships( c_object_relationship_id NUMBER )
8473         IS
8474           SELECT
8475                   OBJECT_RELATIONSHIP_ID
8476                  ,RELATIONSHIP_TYPE
8477                  ,RELATIONSHIP_SUBTYPE
8478                  ,LAG_DAY
8479                  ,PRIORITY
8480                  ,PM_PRODUCT_CODE
8481             FROM pa_object_relationships
8482            WHERE OBJECT_RELATIONSHIP_ID = c_object_relationship_id;
8483 
8484         cur_obj_relationships_rec cur_obj_relationships%ROWTYPE;
8485 
8486 
8487   BEGIN
8488     IF (p_debug_mode = 'Y') THEN
8489       pa_debug.debug('PA_TASK_PVT1.Update_Task_Weighting begin');
8490     END IF;
8491 
8492     IF (p_commit = FND_API.G_TRUE) THEN
8493       savepoint update_task_weighting_pvt;
8494     END IF;
8495 
8496     IF (p_debug_mode = 'Y') THEN
8497       pa_debug.debug('Performing validations');
8498     END IF;
8499 
8500     IF (p_weighting_percentage is null) THEN
8501       l_weighting_percentage := 0;
8502     ELSE
8503       l_weighting_percentage := p_weighting_percentage;
8504     END IF;
8505 
8506     IF (p_debug_mode = 'Y') THEN
8507       pa_debug.debug('Querying up the row from the object relationship table.');
8508     END IF;
8509 
8510     OPEN cur_obj_relationships( p_object_relationship_id );
8511     FETCH cur_obj_relationships INTO cur_obj_relationships_rec;
8512     IF cur_obj_relationships%NOTFOUND THEN
8513        RAISE FND_API.G_EXC_ERROR;
8514     END IF;
8515     CLOSE cur_obj_relationships;
8516 
8517     PA_OBJECT_RELATIONSHIPS_PKG.UPDATE_ROW(
8518        p_user_id                => FND_GLOBAL.USER_ID
8519       ,p_object_relationship_id => p_object_relationship_id
8520       ,p_relationship_type      => cur_obj_relationships_rec.relationship_type
8521       ,p_relationship_subtype   => cur_obj_relationships_rec.relationship_subtype
8522       ,p_lag_day                => cur_obj_relationships_rec.lag_day
8523       ,p_priority               => cur_obj_relationships_rec.priority
8524       ,p_pm_product_code        => cur_obj_relationships_rec.pm_product_code
8525       ,p_weighting_percentage   => l_weighting_percentage
8526       ,p_comments => NULL
8527       ,p_status_code => NULL
8528       ,p_record_version_number  => p_record_version_number
8529       ,x_return_status => x_return_status
8530     );
8531 
8532   EXCEPTION
8533     WHEN FND_API.G_EXC_ERROR THEN
8534       IF (p_commit = FND_API.G_TRUE) THEN
8535         ROLLBACK to update_task_weighting_pvt;
8536       END IF;
8537       x_msg_count := FND_MSG_PUB.count_msg;
8538       x_return_status := FND_API.G_RET_STS_ERROR;
8539     WHEN OTHERS THEN
8540       IF (p_commit = FND_API.G_TRUE) THEN
8541         ROLLBACK to update_task_weighting_pvt;
8542       END IF;
8543       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8544       x_msg_count := FND_MSG_PUB.count_msg;
8545       --put message
8546       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
8547                               p_procedure_name => 'Update_Task_Weighting',
8548                               p_error_text     => SUBSTRB(SQLERRM,1,240));
8549       RAISE;
8550   END UPDATE_TASK_WEIGHTING;
8551 
8552   PROCEDURE RECALC_TASKS_WEIGHTING(
8553    p_api_version                       IN  NUMBER      := 1.0
8554    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
8555    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
8556    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
8557    ,p_validation_level                  IN  VARCHAR2    := 100
8558    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
8559    ,p_debug_mode                        IN  VARCHAR2    := 'N'
8560    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8561    ,p_task_version_id                   IN  NUMBER
8562    ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8563    ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8564    ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8565   )
8566   IS
8567     CURSOR get_weighting_sum IS
8568       select sum(weighting_percentage)
8569         from pa_object_relationships
8570        where object_id_from1 = p_task_version_id
8571          and object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8572          and relationship_type = 'S';
8573 
8574     CURSOR get_child_weighting IS
8575       select object_relationship_id, weighting_percentage,
8576              record_version_number, object_id_to1
8577         from pa_object_relationships
8578        where object_id_from1 = p_task_version_id
8579          and object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8580          and relationship_type = 'S';
8581 
8582     l_sum           NUMBER(17,2);
8583     l_weighting     NUMBER(17,2);
8584     l_object_relationship_id NUMBER;
8585     l_record_version_number  NUMBER;
8586     l_cnt           NUMBER;
8587 
8588     l_return_status VARCHAR2(1);
8589     l_msg_count     NUMBER;
8590     l_msg_data      VARCHAR2(250);
8591     l_data          VARCHAR2(250);
8592     l_msg_index_out NUMBER;
8593 
8594     -- anlee task weighting changes
8595     l_current_sum NUMBER(17,2);
8596     l_remainder NUMBER(17,2);
8597     l_current_obj_rel_id NUMBER;
8598     l_current_weighting NUMBER(17,2);
8599     l_current_rec_ver_number NUMBER;
8600     -- end anlee
8601 
8602   --bug 2673570
8603   CURSOR check_progress_allowed(c_element_version_id NUMBER)
8604   IS
8605   SELECT ptt.prog_entry_enable_flag
8606   FROM   pa_task_types ptt,
8607          pa_proj_element_versions ppev,
8608          pa_proj_elements ppe
8609   WHERE  ppev.element_version_id = c_element_version_id
8610   AND    ppev.proj_element_id = ppe.proj_element_id
8611   AND    ppe.TYPE_ID   = ptt.task_type_id;
8612 
8613   l_object_id_to1     NUMBER;
8614   l_progress_allowed  VARCHAR2(1);
8615   --bug 2673570
8616 
8617   BEGIN
8618     --hsiu: bug 3604086
8619     x_return_status := FND_API.G_RET_STS_SUCCESS;
8620 
8621     OPEN get_weighting_sum;
8622     FETCH get_weighting_sum into l_sum;
8623     CLOSE get_weighting_sum;
8624 
8625     OPEN get_child_weighting;
8626     l_cnt := 1;
8627     LOOP
8628       FETCH get_child_weighting INTO l_object_relationship_id,
8629                                      l_weighting,
8630                                      l_record_version_number,
8631                                      l_object_id_to1;
8632       EXIT WHEN get_child_weighting%NOTFOUND;
8633       If (l_cnt = 1) and (l_sum = 0) THEN
8634         l_weighting := 100;
8635       ELSIF (l_cnt > 1) and (l_sum = 0) THEN
8636         l_weighting := 0;
8637       ELSE
8638         l_weighting := (l_weighting * 100) / l_sum;
8639       END IF;
8640 
8641      --bug 2673570
8642      OPEN check_progress_allowed(l_object_id_to1);
8643      FETCH check_progress_allowed INTO l_progress_allowed;
8644      CLOSE check_progress_allowed;
8645 
8646      if l_progress_allowed = 'N' then
8647         l_weighting := 0;
8648      end if;
8649      --bug 2673570
8650 
8651       -- anlee task weighting changes
8652       l_current_obj_rel_id := l_object_relationship_id;
8653       l_current_weighting := l_weighting;
8654       l_current_rec_ver_number := l_record_version_number;
8655       -- end anlee
8656 
8657       --update task weighting
8658       PA_TASK_PVT1.Update_Task_Weighting(
8659         p_object_relationship_id => l_object_relationship_id
8660        ,p_weighting_percentage => l_weighting
8661        ,p_record_version_number => l_record_version_number
8662        ,x_return_status => l_return_status
8663        ,x_msg_count => l_msg_count
8664        ,x_msg_data => l_msg_data
8665       );
8666 
8667       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8668         x_msg_count := FND_MSG_PUB.count_msg;
8669         if x_msg_count = 1 then
8670           pa_interface_utils_pub.get_messages
8671              (p_encoded        => FND_API.G_TRUE,
8672               p_msg_index      => 1,
8673               p_msg_count      => l_msg_count,
8674               p_msg_data       => l_msg_data,
8675               p_data           => l_data,
8676               p_msg_index_out  => l_msg_index_out);
8677               x_msg_data := l_data;
8678         end if;
8679         RAISE FND_API.G_EXC_ERROR;
8680       end if;
8681 
8682       l_cnt := l_cnt + 1;
8683     END LOOP;
8684 
8685     -- anlee task weighting changes
8686     OPEN get_weighting_sum;
8687     FETCH get_weighting_sum INTO l_current_sum;
8688     CLOSE get_weighting_sum;
8689 
8690     l_remainder := 100 - l_current_sum;
8691     if(l_remainder > 0) AND l_progress_allowed = 'Y' then
8692       --update task weighting
8693       PA_TASK_PVT1.Update_Task_Weighting(
8694         p_object_relationship_id => l_current_obj_rel_id
8695        ,p_weighting_percentage => l_current_weighting + l_remainder
8696        ,p_record_version_number => l_current_rec_ver_number + 1
8697        ,x_return_status => l_return_status
8698        ,x_msg_count => l_msg_count
8699        ,x_msg_data => l_msg_data
8700       );
8701 
8702       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8703         x_msg_count := FND_MSG_PUB.count_msg;
8704         if x_msg_count = 1 then
8705           pa_interface_utils_pub.get_messages
8706              (p_encoded        => FND_API.G_TRUE,
8707               p_msg_index      => 1,
8708               p_msg_count      => l_msg_count,
8709               p_msg_data       => l_msg_data,
8710               p_data           => l_data,
8711               p_msg_index_out  => l_msg_index_out);
8712               x_msg_data := l_data;
8713         end if;
8714         RAISE FND_API.G_EXC_ERROR;
8715       end if;
8716     end if;
8717     -- end anlee
8718 
8719     CLOSE get_child_weighting;
8720 
8721 EXCEPTION
8722     WHEN FND_API.G_EXC_ERROR THEN
8723       x_msg_count := FND_MSG_PUB.count_msg;
8724       x_return_status := FND_API.G_RET_STS_ERROR;
8725     WHEN OTHERS THEN
8726       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8727       x_msg_count := FND_MSG_PUB.count_msg;
8728       --put message
8729       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
8730                               p_procedure_name => 'RECALC_TASKS_WEIGHTING',
8731                               p_error_text     => SUBSTRB(SQLERRM,1,240));
8732       RAISE;
8733   END RECALC_TASKS_WEIGHTING;
8734 
8735   PROCEDURE update_task_ver_delete_status(
8736     p_api_version                       IN  NUMBER      := 1.0
8737    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
8738    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
8739    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
8740    ,p_validation_level                  IN  VARCHAR2    := 100
8741    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
8742    ,p_debug_mode                        IN  VARCHAR2    := 'N'
8743    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8744    ,p_task_version_id                   IN  NUMBER
8745    ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8746    ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8747    ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8748   )
8749   IS
8750     CURSOR get_task_versions IS
8751       select object_id_to1
8752         from pa_object_relationships
8753        where relationship_type = 'S'
8754          and object_type_from = 'PA_TASKS'
8755          and object_type_to = 'PA_TASKS'
8756          and relationship_type = 'S'
8757        start with object_id_to1 = p_task_version_id
8758      connect by prior object_id_to1 = object_id_from1
8759              and relationship_type = prior relationship_type --bug 3919266
8760              and relationship_type = 'S'
8761              and prior object_type_to = object_type_from;
8762 
8763     l_task_version_id NUMBER;
8764   BEGIN
8765     UPDATE pa_proj_element_versions
8766        set TASK_UNPUB_VER_STATUS_CODE = 'TO_BE_DELETED',
8767            RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,1)+1,
8768            LAST_UPDATE_DATE = SYSDATE,
8769            LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
8770            LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
8771      where element_version_id = p_task_version_id;
8772 
8773     OPEN get_task_versions;
8774     LOOP
8775       FETCH get_task_versions into l_task_version_id;
8776       EXIT WHEN get_task_versions%NOTFOUND;
8777 
8778       UPDATE pa_proj_element_versions
8779          set TASK_UNPUB_VER_STATUS_CODE = 'TO_BE_DELETED',
8780              RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,1)+1,
8781              LAST_UPDATE_DATE = SYSDATE,
8782              LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
8783              LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
8784        where element_version_id = l_task_version_id;
8785 
8786     END LOOP;
8787     CLOSE get_task_versions;
8788 
8789     x_return_status := FND_API.G_RET_STS_SUCCESS;
8790   EXCEPTION
8791     WHEN OTHERS THEN
8792       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8793       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
8794                           p_procedure_name => 'update_task_ver_delete_status',
8795                           p_error_text     => SUBSTRB(SQLERRM,1,240));
8796       raise;
8797   END update_task_ver_delete_status;
8798 
8799   procedure delete_task_ver_wo_val
8800   (
8801     p_api_version           IN  NUMBER  :=1.0,
8802     p_init_msg_list         IN  VARCHAR2:=FND_API.G_TRUE,
8803     p_commit                IN  VARCHAR2:=FND_API.G_FALSE,
8804     p_validate_only         IN  VARCHAR2:=FND_API.G_TRUE,
8805     p_validation_level      IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
8806     p_calling_module        IN  VARCHAR2:='SELF_SERVICE',
8807     p_debug_mode            IN  VARCHAR2:='N',
8808     p_max_msg_count         IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
8809     p_structure_version_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
8810     p_task_version_id       IN  NUMBER,
8811     p_record_version_number IN  NUMBER,
8812     x_return_status         OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
8813     x_msg_count             OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
8814     x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8815   )
8816   IS
8817     l_msg_count                    NUMBER;
8818     l_msg_data                     VARCHAR2(250);
8819     l_return_status                VARCHAR2(2);
8820     l_data                          VARCHAR2(250);
8821     l_msg_index_out                 NUMBER;
8822     l_error_msg_code                     VARCHAR2(250);
8823 
8824     l_error_message_code           VARCHAR2(250);
8825 
8826     l_parent_struc_ver_id          NUMBER;
8827     l_wbs_level                    NUMBER;
8828     l_display_sequence             NUMBER;
8829     l_wbs_number                   NUMBER;
8830     l_delete_flag                  VARCHAR2(1) := 'N';
8831     l_structure_id                 NUMBER;
8832 
8833     l_err_code                           NUMBER                 := 0;
8834     l_err_stack                          VARCHAR2(630);
8835     l_err_stage                          VARCHAR2(80);
8836 
8837     CURSOR cur_child_tasks
8838     IS
8839       SELECT a.object_relationship_id object_relationship_id, a.object_id_to1 object_id_to1,
8840              a.record_version_number record_version_number, b.wbs_level wbs_level, b.display_sequence
8841       FROM (
8842       SELECT object_relationship_id, object_id_to1, record_version_number
8843         FROM pa_object_relationships
8844        WHERE relationship_type = 'S'
8845   START WITH object_id_from1 = p_task_version_id
8846   CONNECT BY object_id_from1 = PRIOR object_id_to1
8847       AND relationship_type = PRIOR relationship_type --bug 3919266
8848       AND relationship_type = 'S' ) A, pa_proj_element_versions b
8849       ,pa_proj_elements c        --bug 4573340
8850      WHERE a.object_id_to1 = b.element_version_id
8851      --bug 4573340
8852         and b.proj_element_id = c.proj_element_id
8853         and b.project_id = c.project_id
8854         and c.link_task_flag = 'N'
8855       --bug 4573340
8856   UNION
8857      SELECT a.object_relationship_id, element_version_id  object_id_to1,
8858             a.record_version_number, wbs_level, b.display_sequence
8859        FROM pa_object_relationships a, pa_proj_element_versions b
8860       WHERE element_version_id = p_task_version_id
8861         AND object_id_to1 = p_task_version_id
8862         AND element_version_id = object_id_to1
8863         AND relationship_type = 'S'
8864    ORDER BY 4 desc;
8865 
8866 
8867    CURSOR cur_proj_elem_ver( p_task_id NUMBER )
8868    IS
8869      SELECT rowid,record_version_number, project_id, parent_structure_version_id, proj_element_id
8870        FROM pa_proj_element_versions
8871       WHERE element_version_id = p_task_id;
8872 
8873    CURSOR cur_sch_ver( p_task_id NUMBER, p_project_id NUMBER )
8874    IS
8875      SELECT rowid
8876        FROM pa_proj_elem_ver_schedule
8877       WHERE element_version_id = p_task_id
8878         AND project_id = p_project_id;
8879 
8880    CURSOR cur_pa_projs( p_project_id NUMBER )
8881    IS
8882      SELECT wbs_record_version_number
8883             -- HY: changed from pa_projects_all to pa_proj_elem_ver_structure
8884              FROM pa_proj_elem_ver_structure
8885  -- HY      FROM pa_projects_all
8886       WHERE project_id = p_project_id;
8887 
8888    CURSOR cur_pa_tasks( p_task_id NUMBER )
8889    IS
8890      SELECT record_version_number
8891        FROM pa_tasks
8892       WHERE task_id = p_task_id;
8893 
8894    CURSOR cur_chk_vers( x_proj_element_id NUMBER, x_task_version NUMBER )
8895    IS
8896      SELECT 'X'
8897        FROM pa_proj_element_versions
8898       WHERE proj_element_id = x_proj_element_id
8899         AND element_version_id <> x_task_version;
8900 
8901   CURSOR cur_proj_elems( x_proj_element_id NUMBER )
8902   IS
8903     SELECT rowid
8904       FROM pa_proj_elements
8905      WHERE proj_element_id = x_proj_element_id;
8906 
8907 
8908 --Ansari
8909   CURSOR cur_parent_ver_id( c_task_version_id NUMBER )
8910   IS
8911     SELECT object_id_from1
8912       FROM pa_object_relationships
8913      WHERE object_id_to1 = c_task_version_id
8914        AND relationship_type = 'S';
8915   l_parent_task_verion_id   NUMBER;
8916 --Ansari
8917 
8918 
8919 --hsiu added, for dates rollup
8920    CURSOR get_peer_tasks
8921    IS
8922      select b.object_id_to1 object_id_to1
8923        from pa_object_relationships a,
8924             pa_object_relationships b
8925       where a.object_id_to1 = p_task_version_id
8926         and a.object_type_to = 'PA_TASKS'
8927         and a.object_id_from1 = b.object_id_from1
8928         and a.object_type_from = b.object_type_from
8929         and b.object_type_to = 'PA_TASKS'
8930         and b.object_id_to1 <> p_task_version_id
8931         and a.relationship_type = 'S'
8932         and b.relationship_type = 'S';
8933    c_get_peer_tasks get_peer_tasks%ROWTYPE;
8934    l_peer_tasks_exist VARCHAR2(1) := 'Y';
8935    l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
8936 
8937 --hsiu added, for task weighting
8938    CURSOR get_parent_version_id IS
8939      select object_id_from1
8940        from pa_object_relationships
8941       where object_id_to1 = p_task_version_id
8942         and object_type_to = 'PA_TASKS'
8943         and relationship_type = 'S'
8944         and object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8945    l_old_parent_ver_id    NUMBER;
8946 --end task weighting changes
8947 
8948    x_row_id                  VARCHAR2(255);
8949    x_row_id_elem             VARCHAR2(255);
8950    x_sch_row_id              VARCHAR2(255);
8951    x_record_version_number   NUMBER;
8952 
8953    x_task_rec_version_number NUMBER;
8954    x_wbs_rec_version_number  NUMBER;
8955    x_parent_struc_ver_id     NUMBER;
8956    x_project_id              NUMBER;
8957    l_proj_element_id         NUMBER;
8958    l_dummy_char              VARCHAR2(1);
8959    l_task_cnt                NUMBER;
8960    l_selected_seq_num        NUMBER;
8961 
8962    --hsiu task status changes
8963    cursor get_latest_task_ver_id IS
8964      select b.parent_structure_version_id, b.element_version_id
8965        from pa_proj_element_versions b,
8966             pa_proj_elem_ver_structure c
8967       where b.element_version_id = p_task_version_id
8968         and b.project_id = c.project_id
8969         and b.parent_structure_version_id = c.element_version_id
8970         and c.LATEST_EFF_PUBLISHED_FLAG = 'Y';
8971    l_latest_task_ver_rec    get_latest_task_ver_id%ROWTYPE;
8972    --end task status changes
8973 
8974    l_calling_module VARCHAR2(30);
8975 
8976    --3035902: process update flag changes
8977    cursor get_task_type_id(c_proj_element_id NUMBER) IS
8978       select type_id
8979         from pa_proj_elements
8980        where proj_element_id = c_proj_element_id;
8981    l_task_type_id      NUMBER;
8982    l_progress_flag     VARCHAR2(1);
8983    l_wp_type              VARCHAR2(1);
8984    l_weighting_basis_Code VARCHAR2(30);
8985    --3035902: end process update flag changes
8986 
8987   --Cursor to selct fp task version id to delete the mapping
8988   -- Added by Skannoji
8989   CURSOR cur_fp_tsk_ver_id( c_task_version_id NUMBER )
8990   IS
8991     SELECT object_id_to1
8992       FROM pa_object_relationships
8993      --WHERE object_id_from1 = p_task_version_id --4173785
8994      WHERE object_id_from1 = c_task_version_id
8995        AND relationship_type = 'M';
8996 
8997       l_fp_task_version_id       PA_OBJECT_RELATIONSHIPS.object_id_to1%TYPE;
8998       /* Bug #: 3305199 SMukka                                                         */
8999       /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
9000       /* l_element_version_id_tbl   PA_PLSQL_DATATYPES.IdTabTyp;                       */
9001       l_element_version_id_tbl   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
9002  --skannoji
9003 --
9004    --Bug No 3450684 Smukka For Subproject Association
9005    CURSOR get_subproj_relation(cp_task_ver_id NUMBER) IS
9006    SELECT pors.object_relationship_id,pors.record_version_number
9007      FROM pa_object_relationships pors
9008 --bug 4573340
9009      ,pa_object_relationships pors1
9010     WHERE
9011       --pors.object_id_from1= cp_task_ver_id
9012       pors1.object_id_from1 = cp_task_ver_id
9013       AND pors.object_id_from1 = pors1.object_id_to1
9014       AND pors1.relationship_type = 'S'
9015 --bug 4573340
9016       AND pors.relationship_type IN ('LW','LF')
9017       AND pors.object_id_from2 <> pors.object_id_to2
9018       AND pors.object_type_from = 'PA_TASKS'
9019       AND pors.object_type_to = 'PA_STRUCTURES';
9020       get_subproj_relation_rec get_subproj_relation%ROWTYPE;
9021 --
9022     l_call_del_plan_txn      VARCHAR2(1)  := 'N';  --bug 4172646
9023 
9024      l_debug_mode             VARCHAR2(1);
9025   BEGIN
9026 
9027     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
9028 
9029     IF (p_debug_mode = 'Y') THEN
9030        pa_debug.debug('PA_TASK_PVT1.DELETE_TASK_VER_WO_VAL begin');
9031     END IF;
9032 
9033     IF (p_commit = FND_API.G_TRUE) THEN
9034       savepoint DELETE_TASK_VER_WO_VAL;
9035     END IF;
9036 
9037 --hsiu
9038 --added for task weighting changes
9039     OPEN get_parent_version_id;
9040     FETCH get_parent_version_id INTO l_old_parent_ver_id;
9041     CLOSE get_parent_version_id;
9042 --end task weighting changes
9043 
9044 --hsiu added, for dates rollup
9045     OPEN get_peer_tasks;
9046     FETCH get_peer_tasks INTO c_get_peer_tasks;
9047     IF get_peer_tasks%NOTFOUND THEN
9048       l_peer_tasks_exist := 'N';
9049     ELSE
9050       l_peer_tasks_exist := 'Y';
9051       l_tasks_ver_ids.extend;
9052       l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
9053     END IF;
9054     CLOSE get_peer_tasks;
9055 
9056 
9057     FOR cur_child_tasks_rec IN cur_child_tasks LOOP
9058 
9059       OPEN cur_proj_elem_ver( cur_child_tasks_rec.object_id_to1 );
9060       FETCH cur_proj_elem_ver INTO x_row_id, x_record_version_number,
9061                                    x_project_id, x_parent_struc_ver_id,
9062                                    l_proj_element_id;
9063       IF cur_proj_elem_ver%FOUND THEN
9064         IF cur_child_tasks_rec.object_id_to1 = p_task_version_id THEN
9065           IF x_record_version_number <> p_record_version_number THEN
9066             CLOSE cur_proj_elem_ver;
9067             FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_CHANGED');
9068             APP_EXCEPTION.Raise_Exception;
9069           END IF;
9070         END IF;
9071 
9072         --deleting schedule version if its a workplan
9073         --IF workplan_structure THEN
9074         --IF  p_called_from_api <> 'MOVE_TASK_VERSION' THEN
9075           IF PA_PROJ_ELEMENTS_UTILS.structure_type(
9076                         p_structure_version_id => null
9077                        ,p_task_version_id      => cur_child_tasks_rec.object_id_to1
9078                        ,p_structure_type       => 'WORKPLAN' ) = 'Y' THEN
9079 
9080             OPEN cur_sch_ver( cur_child_tasks_rec.object_id_to1, x_project_id );
9081             FETCH cur_sch_ver INTO x_sch_row_id;
9082             IF cur_sch_ver%FOUND THEN
9083               PA_PROJ_ELEMENT_SCH_PKG.Delete_row(  x_sch_row_id );
9084             END IF;
9085             CLOSE cur_sch_ver;
9086 
9087      -- Added by skannoji
9088      -- Deleteing planning transactions for all given element version id
9089      IF ( (PA_PROJ_TASK_STRUC_PUB.wp_str_exists(x_project_id) = 'Y') OR (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(x_project_id) = 'Y') ) THEN
9090        l_element_version_id_tbl.extend(1); /* Venky */
9091        l_element_version_id_tbl(1) := cur_child_tasks_rec.object_id_to1;
9092 
9093            /* 4317547 : The fix 4172646 has caused DHI bug 4317547
9094               Here,the call to delete planning txn has been moved out of the loop
9095               and is done after call to pa_project_core.delete_task .
9096               This is problematic as described in 4317547
9097 
9098            --bug Bug #       : 4172646
9099            -- Moved the call delete planning txn after the loop once for all tasks.
9100            l_call_del_plan_txn := 'Y';
9101            --end bug Bug #       : 4172646
9102 
9103             */
9104           /* 4317547 : Hence, Moved back the call inside loop
9105             when context is other than 'DEL_STRUCT'
9106            */
9107            IF (p_calling_module <> 'DEL_STRUCT') THEN
9108          BEGIN
9109                     PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions(
9110                      p_context                      => 'WORKPLAN'
9111                     ,p_task_or_res                  => 'TASKS'
9112                     ,p_element_version_id_tbl       => l_element_version_id_tbl
9113 --                  ,p_maintain_reporting_lines     => 'Y'
9114                     ,x_return_status               => x_return_status
9115                     ,x_msg_count                   => x_msg_count
9116                     ,x_msg_data                    => x_msg_data);
9117             EXCEPTION
9118             WHEN OTHERS THEN
9119                     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
9120                                p_procedure_name => 'delete_Task_ver_wo_val',
9121                                p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions:'||SQLERRM,1,240));
9122             RAISE FND_API.G_EXC_ERROR;
9123             END;
9124             IF x_return_status = FND_API.G_RET_STS_ERROR then
9125                 RAISE FND_API.G_EXC_ERROR;
9126             End If;
9127            END IF;
9128      END IF;
9129        -- till here by skannoji
9130           END IF;
9131         --END IF;
9132 
9133     -- Added by skannoji
9134     -- While deletion of task, the task mapping should be deleted
9135     IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(
9136                                             p_structure_version_id => x_parent_struc_ver_id
9137                                            ,p_structure_type       => 'WORKPLAN' ) = 'Y') AND
9138     (PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(x_project_id )= 'SPLIT_MAPPING')
9139     then
9140        --Get fp task version id to delete mapping.
9141        OPEN cur_fp_tsk_ver_id( cur_child_tasks_rec.object_id_to1 );
9142        FETCH cur_fp_tsk_ver_id INTO l_fp_task_version_id;
9143            IF cur_fp_tsk_ver_id%FOUND THEN
9144             PA_PROJ_STRUC_MAPPING_PUB.delete_mapping
9145               (
9146                            p_wp_task_version_id    => cur_child_tasks_rec.object_id_to1
9147                          , p_fp_task_version_id    => l_fp_task_version_id
9148                          , x_return_status         => x_return_status
9149                          , x_msg_count             => x_msg_count
9150                          , x_msg_data              => x_msg_data);
9151            END IF;
9152           CLOSE cur_fp_tsk_ver_id;
9153 
9154           If x_return_status = FND_API.G_RET_STS_ERROR then
9155              RAISE FND_API.G_EXC_ERROR;
9156           End If;
9157       End If;
9158       -- till here
9159 
9160 
9161         --Do financial task check
9162         --If financial
9163 
9164         IF cur_child_tasks%ROWCOUNT = 1 THEN
9165           IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(
9166                                             p_structure_version_id => x_parent_struc_ver_id
9167                                            ,p_structure_type       => 'FINANCIAL' ) = 'Y') THEN
9168 
9169             SELECT proj_element_id INTO l_structure_id
9170               FROM pa_proj_element_versions
9171              WHERE element_version_id = x_parent_struc_ver_id
9172                AND project_id = x_project_id;
9173 
9174             IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(
9175                        p_project_id   => x_project_id
9176                       ,p_structure_id => l_structure_id ) = 'N') OR
9177                (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
9178                        x_project_id) = 'N') THEN
9179               l_delete_flag := 'Y';
9180             END IF;
9181           END IF;
9182         END IF;
9183         IF l_delete_flag = 'Y' THEN
9184           OPEN  cur_pa_projs( x_project_id );
9185           FETCH cur_pa_projs INTO x_wbs_rec_version_number;
9186           CLOSE cur_pa_projs;
9187 
9188           OPEN  cur_pa_tasks( l_proj_element_id );
9189           FETCH cur_pa_tasks INTO x_task_rec_version_number;
9190           IF p_calling_module NOT IN ( 'FORMS', 'AMG' ) AND cur_pa_tasks%FOUND THEN
9191             --Added condition to call this api from forms and AMG apis.
9192             --Since forms and AMG already deletes from pa_tasks
9193             --we do not have to call the following api again.
9194 
9195             --hsiu: bug 2800553: for deleteing structure performance improvement changes
9196             IF (p_calling_module = 'DEL_STRUCT') THEN
9197               l_calling_module :='SELF_SERVICE';
9198             ELSE
9199               l_calling_module :=p_calling_module;
9200             END IF;
9201 
9202 -- hsiu: bug 2800553: added for performance improvement
9203 --bug 2947492 : The following call is modified to pass parameters by notation
9204             PA_PROJECT_CORE.Delete_Task(
9205               x_task_id      => l_proj_element_id,
9206               x_err_code     => l_err_code,
9207               x_err_stage    => l_err_stage,
9208               x_err_stack    => l_err_stack);
9209 
9210             If (l_err_code <> 0) THEN
9211               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9212                            p_msg_name => substrb(l_err_stage,1,30)); --3935874 : Changed Substr to Substrb
9213               CLOSE cur_pa_tasks;
9214               raise FND_API.G_EXC_ERROR;
9215             END IF;
9216           END IF; --called_from_api chk.
9217           CLOSE cur_pa_tasks;
9218 
9219 -- hsiu: bug 2800553: commented for performance improvement
9220 --            PA_TASKS_MAINT_PUB.DELETE_TASK(
9221 --                  p_api_version                       => p_api_version
9222 --                 ,p_init_msg_list                     => p_init_msg_list
9223 --                 ,p_commit                            => p_commit
9224 --                 ,p_validate_only                     => p_validate_only
9225 --                 ,p_validation_level                  => p_validation_level
9226 --                 ,p_calling_module                    => l_calling_module
9227 --                 ,p_debug_mode                        => p_debug_mode
9228 --                 ,p_project_id                        => x_project_id
9229 --                 ,p_task_id                       => l_proj_element_id
9230 --                 ,p_record_version_number             => x_task_rec_version_number
9231 --                 ,p_wbs_record_version_number         => x_wbs_rec_version_number
9232 --                 ,p_called_from_api                   => p_called_from_api
9233 --                 ,x_return_status                     => l_return_status
9234 --                 ,x_msg_count                         => l_msg_count
9235 --                 ,x_msg_data                          => l_msg_data
9236 --                );
9237 --            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9238 --              x_msg_count := FND_MSG_PUB.count_msg;
9239 --              IF x_msg_count = 1 then
9240 --                   pa_interface_utils_pub.get_messages
9241 --                   (p_encoded        => FND_API.G_TRUE,
9242 --                    p_msg_index      => 1,
9243 --                    p_msg_count      => l_msg_count,
9244 --                    p_msg_data       => l_msg_data,
9245 --                    p_data           => l_data,
9246 --                    p_msg_index_out  => l_msg_index_out);
9247 --                    x_msg_data := l_data;
9248 --              END IF;
9249 --              raise FND_API.G_EXC_ERROR;
9250 --            END IF;
9251 
9252         END IF; --delete flag chk
9253 
9254         --Ansari
9255         --Get parent of deleting task before its relationship gets deleted.
9256         OPEN cur_parent_ver_id( cur_child_tasks_rec.object_id_to1 );
9257         FETCH cur_parent_ver_id INTO l_parent_task_verion_id;
9258         CLOSE cur_parent_ver_id;
9259         --Ansari
9260 
9261 --bug 4573340. First delete the sub-project association if it exists:
9262         --Bug No 3450684 Smukka 16-Mar-2004
9263         --Deleting subproject association
9264         OPEN get_subproj_relation(cur_child_tasks_rec.object_id_to1);
9265         FETCH get_subproj_relation INTO get_subproj_relation_rec;
9266         IF get_subproj_relation%FOUND   --bug 4573340
9267         THEN
9268            IF l_debug_mode = 'Y' THEN
9269                 pa_debug.write('PA_TASK_PVT1.DELETE_TASK_VER_WO_VAL', 'Before PA_RELATIONSHIP_PUB.Delete_SubProject_Association get_subproj_relation_rec.object_relationship_id='
9270                                ||get_subproj_relation_rec.object_relationship_id, 3);
9271                 pa_debug.write('PA_TASK_PVT1.DELETE_TASK_VER_WO_VAL', 'Before PA_RELATIONSHIP_PUB.Delete_SubProject_Association get_subproj_relation_rec.record_version_number='
9272                                ||get_subproj_relation_rec.record_version_number, 3);
9273 
9274            END IF;
9275 
9276            PA_RELATIONSHIP_PUB.Delete_SubProject_Association    --bug 4573340  replaced the call with delete_subproject
9277                    (
9278                      p_init_msg_list                     => p_init_msg_list
9279                     ,p_commit                            => p_commit
9280                     ,p_validate_only                     => p_validate_only
9281                     ,p_validation_level                  => p_validation_level
9282                     ,p_calling_module                    => p_calling_module
9283                     ,p_debug_mode                        => p_debug_mode
9284                     ,p_max_msg_count                     => p_max_msg_count
9285                     ,p_object_relationships_id           => get_subproj_relation_rec.object_relationship_id
9286                     ,p_record_version_number             => get_subproj_relation_rec.record_version_number
9287                     ,x_return_status                     => l_return_status
9288                     ,x_msg_count                         => l_msg_count
9289                     ,x_msg_data                          => l_msg_data
9290                     );
9291 
9292            IF l_debug_mode = 'Y' THEN
9293                 pa_debug.write('PA_TASK_PVT1.DELETE_TASK_VER_WO_VAL', 'After PA_RELATIONSHIP_PUB.Delete_SubProject_Association l_return_status='||l_return_status, 3);
9294            END IF;
9295 
9296 
9297           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9298             x_msg_count := FND_MSG_PUB.count_msg;
9299             IF x_msg_count = 1 then
9300               pa_interface_utils_pub.get_messages
9301                 (p_encoded        => FND_API.G_TRUE,
9302                  p_msg_index      => 1,
9303                  p_msg_count      => l_msg_count,
9304                  p_msg_data       => l_msg_data,
9305                  p_data           => l_data,
9306                  p_msg_index_out  => l_msg_index_out);
9307                  x_msg_data := l_data;
9308             END IF;
9309             RAISE FND_API.G_EXC_ERROR;
9310          END IF;
9311         END IF; --4573340
9312         CLOSE get_subproj_relation;
9313 
9314         PA_RELATIONSHIP_PUB.Delete_Relationship (
9315                      p_api_version            => p_api_version
9316                     ,p_init_msg_list          => p_init_msg_list
9317                     ,p_commit                 => p_commit
9318                     ,p_validate_only          => p_validate_only
9319                     ,p_validation_level       => p_validation_level
9320                     ,p_calling_module         => p_calling_module
9321                     ,p_debug_mode             => p_debug_mode
9322                     ,p_max_msg_count          => p_max_msg_count
9323                     ,p_object_relationship_id => cur_child_tasks_rec.object_relationship_id
9324                     ,p_record_version_number  => cur_child_tasks_rec.record_version_number
9325                     ,x_return_status          => l_return_status
9326                     ,x_msg_count              => l_msg_count
9327                     ,x_msg_data               => l_msg_data
9328                     );
9329 
9330         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9331           x_msg_count := FND_MSG_PUB.count_msg;
9332           IF x_msg_count = 1 then
9333             pa_interface_utils_pub.get_messages
9334                    (p_encoded        => FND_API.G_TRUE,
9335                     p_msg_index      => 1,
9336                     p_msg_count      => l_msg_count,
9337                     p_msg_data       => l_msg_data,
9338                     p_data           => l_data,
9339                     p_msg_index_out  => l_msg_index_out);
9340                     x_msg_data := l_data;
9341           END IF;
9342           raise FND_API.G_EXC_ERROR;
9343         END IF;
9344 
9345         PA_PROJ_ELEMENT_VERSIONS_PKG.Delete_Row( x_row_id );
9346 
9347         --Ansari
9348         --Call update wbs number
9349         --hsiu: bug 2800553: performance changes: not called when deleting structure
9350         IF (p_calling_module <> 'DEL_STRUCT') THEN
9351           PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS (
9352                                p_commit                   => p_commit
9353                               ,p_debug_mode               => p_debug_mode
9354                               ,p_parent_structure_ver_id  => x_parent_struc_ver_id
9355                               ,p_task_id                  => null
9356                               ,p_display_seq              => cur_child_tasks_rec.display_sequence
9357                               ,p_action                   => 'DELETE'
9358                               ,p_parent_task_id           => l_parent_task_verion_id
9359                               ,x_return_status            => l_return_status );
9360 
9361           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9362             x_msg_count := FND_MSG_PUB.count_msg;
9363             IF x_msg_count = 1 then
9364                    pa_interface_utils_pub.get_messages
9365                    (p_encoded        => FND_API.G_TRUE,
9366                     p_msg_index      => 1,
9367                     p_msg_count      => l_msg_count,
9368                     p_msg_data       => l_msg_data,
9369                     p_data           => l_data,
9370                     p_msg_index_out  => l_msg_index_out);
9371                     x_msg_data := l_data;
9372             END IF;
9373             raise FND_API.G_EXC_ERROR;
9374           END IF; --hsiu: bug 2800553: for performance changes
9375         END IF;
9376      --Ansari
9377 
9378         --IF  p_called_from_api <> 'MOVE_TASK_VERSION' THEN
9379           --Check if there are any versions exist
9380           OPEN cur_chk_vers( l_proj_element_id, cur_child_tasks_rec.object_id_to1 );
9381           FETCH cur_chk_vers INTO l_dummy_char;
9382           IF cur_chk_vers%NOTFOUND THEN
9383            --get progressable flag
9384             --3035902: process update flag changes
9385             OPEN get_task_type_id(l_proj_element_id);
9386             FETCH get_task_type_id into l_task_type_id;
9387             CLOSE get_task_type_id;
9388             l_progress_flag := pa_task_type_utils.check_tk_type_progressable(l_task_type_id);
9389             --3035902: end process update flag changes
9390 
9391             OPEN cur_proj_elems( l_proj_element_id );
9392             FETCH cur_proj_elems INTO x_row_id_elem;
9393             CLOSE cur_proj_elems;
9394 
9395      -- Added by skannoji
9396      -- Deleting deliverable task
9397      If (PA_PROJECT_STRUCTURE_UTILS.check_Deliverable_enabled(x_project_id) = 'Y' ) THEN
9398        PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk(
9399          p_task_element_id  => l_proj_element_id
9400         ,p_project_id       => x_project_id
9401         ,p_task_version_id  => cur_child_tasks_rec.object_id_to1
9402         , x_return_status   => x_return_status
9403         , x_msg_count       => x_msg_count
9404         , x_msg_data        => x_msg_data);
9405      End If;
9406      -- Added by skannoji end here
9407 
9408      IF x_return_status = FND_API.G_RET_STS_ERROR then
9409          RAISE FND_API.G_EXC_ERROR;
9410      End If;
9411 
9412             PA_PROJ_ELEMENTS_PKG.delete_row( x_row_id_elem );
9413 
9414             -- anlee
9415             -- Ext Attribute changes
9416             -- Bug 2904327
9417 
9418             PA_USER_ATTR_PUB.DELETE_ALL_USER_ATTRS_DATA (
9419              p_validate_only             => FND_API.G_FALSE
9420             ,p_project_id                => x_project_id
9421             ,p_proj_element_id           => l_proj_element_id
9422             ,x_return_status             => l_return_status
9423             ,x_msg_count                 => l_msg_count
9424             ,x_msg_data                  => l_msg_data );
9425 
9426             l_msg_count := FND_MSG_PUB.count_msg;
9427 
9428             IF l_msg_count > 0 THEN
9429               x_msg_count := l_msg_count;
9430               x_return_status := 'E';
9431               RAISE  FND_API.G_EXC_ERROR;
9432             END IF;
9433           -- anlee end of changes
9434 
9435           END IF;
9436           CLOSE cur_chk_vers;
9437         --END IF;  --p_called_from_api chk.
9438 
9439          IF (p_calling_module <> 'DEL_STRUCT') THEN
9440              --bug 3055766
9441              --delete association
9442              PA_TASK_PUB1.Delete_Task_Associations(
9443                  p_task_id              => l_proj_element_id
9444                 ,x_return_status        => l_return_status
9445                 ,x_msg_count            => l_msg_count
9446                 ,x_msg_data             => l_msg_data
9447                  );
9448 
9449              if l_return_status <> FND_API.G_RET_STS_SUCCESS then
9450                 x_msg_count := FND_MSG_PUB.count_msg;
9451                 if x_msg_count = 1 then
9452                    pa_interface_utils_pub.get_messages
9453                    (p_encoded        => FND_API.G_TRUE,
9454                     p_msg_index      => 1,
9455                     p_msg_count      => l_msg_count,
9456                     p_msg_data       => l_msg_data,
9457                     p_data           => l_data,
9458                     p_msg_index_out  => l_msg_index_out);
9459                    x_msg_data := l_data;
9460                end if;
9461                RAISE FND_API.G_EXC_ERROR;
9462             end if;
9463          END IF;
9464          --End bug 3055766
9465 
9466 
9467       END IF;  --cur_proj_elem_ver%FOUND check
9468       CLOSE cur_proj_elem_ver;
9469       l_task_cnt := nvl( l_task_cnt, 0 ) + 1;
9470       IF cur_child_tasks_rec.object_id_to1 = p_task_version_id THEN
9471         l_selected_seq_num := cur_child_tasks_rec.display_sequence;
9472       END IF;
9473     END LOOP;
9474 
9475     IF (p_calling_module <> 'DEL_STRUCT') THEN
9476     /* Commented for Bug 4317547
9477            --bug Bug #       : 4172646
9478            -- 1) call the delete plan txn api once for all tasks.
9479            -- 2) do not call delete planning txn api when deleting entire structure version.
9480        IF  l_call_del_plan_txn = 'Y'
9481        THEN
9482        BEGIN
9483            PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions(
9484               p_context                      => 'WORKPLAN'
9485              ,p_task_or_res                  => 'TASKS'
9486              ,p_element_version_id_tbl       => l_element_version_id_tbl
9487              ,x_return_status               => x_return_status
9488              ,x_msg_count                   => x_msg_count
9489              ,x_msg_data                    => x_msg_data);
9490        EXCEPTION
9491           WHEN OTHERS THEN
9492                fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
9493                                        p_procedure_name => 'delete_Task_ver_wo_val',
9494                                        p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions:'||SQLERRM,1,240));
9495           RAISE FND_API.G_EXC_ERROR;
9496        END;
9497        IF x_return_status = FND_API.G_RET_STS_ERROR then
9498            RAISE FND_API.G_EXC_ERROR;
9499        End If;
9500      END IF;
9501            --end bug Bug #       : 4172646
9502     */
9503 
9504   -- Bug Fix 5070454
9505   -- User is getting the record is modified error. This is happening due to the following update
9506   -- This is bumping up the rvns of all the records with higher display number than the one that is
9507   -- being deleted.
9508   -- Hence commenting out the update of RVN here.
9509 
9510 
9511       BEGIN
9512         UPDATE PA_PROJ_ELEMENT_VERSIONS
9513          SET display_sequence = PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, 0, l_task_cnt, 'DELETE', 'DOWN')
9514 --             record_version_number = record_version_number + 1
9515          WHERE parent_structure_version_id = x_parent_struc_ver_id
9516          AND (display_sequence > l_selected_seq_num)
9517          AND PA_PROJ_ELEMENTS_UTILS.link_flag ( proj_element_id ) = 'N';
9518       EXCEPTION
9519         WHEN OTHERS THEN
9520           PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
9521           raise FND_API.G_EXC_ERROR;
9522       END;
9523 
9524 --hsiu added, for dates rollup
9525       IF (l_peer_tasks_exist = 'Y') THEN
9526         IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(x_parent_struc_ver_id, 'WORKPLAN') = 'Y' then
9527           PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
9528                          p_commit => FND_API.G_FALSE,
9529                          p_element_versions => l_tasks_ver_ids,
9530                          x_return_status => l_return_status,
9531                          x_msg_count => l_msg_count,
9532                          x_msg_data => l_msg_data);
9533 
9534           if l_return_status <> FND_API.G_RET_STS_SUCCESS then
9535             x_msg_count := FND_MSG_PUB.count_msg;
9536             if x_msg_count = 1 then
9537               pa_interface_utils_pub.get_messages
9538               (p_encoded        => FND_API.G_TRUE,
9539                p_msg_index      => 1,
9540                p_msg_count      => l_msg_count,
9541                p_msg_data       => l_msg_data,
9542                p_data           => l_data,
9543                p_msg_index_out  => l_msg_index_out);
9544                x_msg_data := l_data;
9545             end if;
9546             RAISE FND_API.G_EXC_ERROR;
9547           end if;
9548         END IF;
9549       END IF;
9550     END IF;
9551 
9552 --hsiu added for task status
9553     OPEN get_latest_task_ver_id;
9554     FETCH get_latest_task_ver_id into l_latest_task_ver_rec;
9555     IF (get_latest_task_ver_id%NOTFOUND) OR
9556        (l_latest_task_ver_rec.parent_structure_version_id <> p_structure_version_id) THEN
9557     --no rollup necessary
9558       NULL;
9559     ELSE
9560     --Rollup structure
9561       IF (p_calling_module <> 'DEL_STRUCT') THEN
9562         PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
9563                   p_structure_version_id => p_structure_version_id
9564                  ,x_return_status => l_return_status
9565                  ,x_msg_count => l_msg_count
9566                  ,x_msg_data => l_msg_data
9567         );
9568 
9569         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
9570           x_msg_count := FND_MSG_PUB.count_msg;
9571           if x_msg_count = 1 then
9572             pa_interface_utils_pub.get_messages
9573              (p_encoded        => FND_API.G_TRUE,
9574               p_msg_index      => 1,
9575               p_msg_count      => l_msg_count,
9576               p_msg_data       => l_msg_data,
9577               p_data           => l_data,
9578               p_msg_index_out  => l_msg_index_out);
9579               x_msg_data := l_data;
9580           end if;
9581           RAISE FND_API.G_EXC_ERROR;
9582         end if;
9583       END IF;
9584     END IF;
9585     CLOSE get_latest_task_ver_id;
9586 --end task status changes
9587 
9588 --hsiu
9589 --added for task weighting
9590     IF (p_calling_module <> 'DEL_STRUCT') THEN
9591       PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
9592         p_task_version_id => l_old_parent_ver_id
9593        ,x_return_status   => l_return_status
9594        ,x_msg_count       => l_msg_count
9595        ,x_msg_data        => l_msg_data
9596       );
9597 
9598       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
9599         x_msg_count := FND_MSG_PUB.count_msg;
9600         if x_msg_count = 1 then
9601           pa_interface_utils_pub.get_messages
9602            (p_encoded        => FND_API.G_TRUE,
9603             p_msg_index      => 1,
9604             p_msg_count      => l_msg_count,
9605             p_msg_data       => l_msg_data,
9606             p_data           => l_data,
9607             p_msg_index_out  => l_msg_index_out);
9608             x_msg_data := l_data;
9609         end if;
9610         RAISE FND_API.G_EXC_ERROR;
9611       end if;
9612     END IF;
9613 --end task weighting changes
9614 
9615 --3035902: process update flag changes
9616 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(x_parent_struc_ver_id, 'WORKPLAN');
9617 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(x_project_id);
9618 --Bug No 3450684 SMukka Commented if condition
9619 --IF ((l_wp_type = 'Y') AND
9620 --    (l_weighting_basis_Code = 'EFFORT') AND
9621 --    (l_progress_flag = 'Y')) THEN
9622    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
9623    (
9624       p_calling_context       => p_calling_module
9625      ,p_project_id            => x_project_id
9626      ,p_structure_version_id  => x_parent_struc_ver_id
9627      ,p_update_wbs_flag       => 'Y'
9628      ,x_return_status         => l_return_status
9629      ,x_msg_count             => l_msg_count
9630      ,x_msg_data              => l_msg_data);
9631 
9632    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
9633      x_msg_count := FND_MSG_PUB.count_msg;
9634      if x_msg_count = 1 then
9635        pa_interface_utils_pub.get_messages
9636        (p_encoded        => FND_API.G_TRUE,
9637         p_msg_index      => 1,
9638         p_msg_count      => l_msg_count,
9639         p_msg_data       => l_msg_data,
9640         p_data           => l_data,
9641         p_msg_index_out  => l_msg_index_out);
9642         x_msg_data := l_data;
9643      end if;
9644      raise FND_API.G_EXC_ERROR;
9645    end if;
9646 --end if;
9647 --3035902: end process update flag changes
9648     x_return_status := FND_API.G_RET_STS_SUCCESS;
9649 
9650   EXCEPTION
9651     WHEN FND_API.G_EXC_ERROR THEN
9652       IF (p_commit = FND_API.G_TRUE) THEN
9653         ROLLBACK to DELETE_TASK_VER_WO_VAL;
9654       END IF;
9655       x_msg_count := FND_MSG_PUB.count_msg;
9656       x_return_status := FND_API.G_RET_STS_ERROR;
9657     WHEN OTHERS THEN
9658       IF (p_commit = FND_API.G_TRUE) THEN
9659         ROLLBACK to DELETE_TASK_VER_WO_VAL;
9660       END IF;
9661       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9662       x_msg_count := FND_MSG_PUB.count_msg;
9663       --put message
9664       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
9665                               p_procedure_name => 'delete_Task_ver_wo_val',
9666                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9667       RAISE;
9668   END delete_task_ver_wo_val;
9669 
9670   procedure UPDATE_WORKING_VER_WEIGHT(
9671     p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
9672    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
9673    ,p_validation_level                  IN  VARCHAR2    := 100
9674    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
9675    ,p_debug_mode                        IN  VARCHAR2    := 'N'
9676    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9677    ,p_task_id                           IN  NUMBER
9678    ,p_weighting                         IN  NUMBER
9679    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9680    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
9681    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9682   )
9683   IS
9684    CURSOR get_working_ver(c_option NUMBER) IS
9685     select a.element_version_id, c.object_id_from1
9686       from pa_proj_element_versions a,
9687            pa_proj_elem_ver_structure b,
9688            pa_object_relationships c
9689      where a.parent_structure_version_id = b.element_version_id
9690        and a.project_id = b.project_id
9691        and a.proj_element_id = p_task_id
9692        and a.element_version_id = c.object_id_to1
9693        and c.object_type_to = 'PA_TASKS'
9694        and c.relationship_type = 'S'
9695        and b.status_code <> 'STRUCTURE_PUBLISHED'
9696        and 1 = c_option
9697      UNION
9698     select a.element_version_id, c.object_id_from1
9699       from pa_proj_element_versions a,
9700            pa_proj_elem_ver_structure b,
9701            pa_object_relationships c
9702      where a.parent_structure_version_id = b.element_version_id
9703        and a.project_id = b.project_id
9704        and a.proj_element_id = p_task_id
9705        and a.element_version_id = c.object_id_to1
9706        and c.object_type_to = 'PA_TASKS'
9707        and c.relationship_type = 'S'
9708        and b.status_code = 'STRUCTURE_PUBLISHED'
9709        and 2 = c_option;
9710     l_working_ver_id     NUMBER;
9711     l_working_parent_id  NUMBER;
9712 
9713    CURSOR get_proj_info IS                        -- Bug 3083997. Modified the cursor to obtain
9714      select proj.project_id,proj.template_flag    -- the project template flag also.
9715        from pa_proj_elements ele, pa_projects_all proj
9716       where ele.proj_element_id = p_task_id
9717         and ele.project_id = proj.project_id;
9718     l_project_id         NUMBER;
9719     l_opt                NUMBER;
9720 
9721     l_template_flag      pa_projects_all.template_flag%TYPE;
9722 
9723   BEGIN
9724     OPEN get_proj_info;
9725     FETCH get_proj_info INTO l_project_id,l_template_flag; -- Bug 3083997. To reflect the changed cursor.
9726     CLOSE get_proj_info;
9727 
9728     IF ('Y'=PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
9729       l_opt := 1;
9730     ELSE
9731       l_opt := 2;
9732     END IF;
9733 
9734     -- Bug 3083997. A template will not have a published version. So query accordingly.
9735     IF nvl(l_template_flag,'N') = 'Y' THEN
9736       l_opt := 1;
9737     END IF;
9738 
9739     OPEN get_working_ver(l_opt);
9740     LOOP
9741       FETCH get_working_ver into l_working_ver_id, l_working_parent_id;
9742       EXIT WHEN get_working_ver%NOTFOUND;
9743       --update selected tasks weighting
9744       update pa_object_relationships
9745          set WEIGHTING_PERCENTAGE = p_weighting
9746        where object_id_to1 = l_working_ver_id
9747          and relationship_type = 'S'
9748          and object_type_to = 'PA_TASKS';
9749       --pro-rate peer task weightings
9750       PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
9751         p_task_version_id => l_working_parent_id
9752        ,x_return_status => x_return_status
9753        ,x_msg_count => x_msg_count
9754        ,x_msg_data => x_msg_data
9755       );
9756       IF (x_msg_count > 0) THEN
9757         CLOSE get_working_ver;
9758         raise FND_API.G_EXC_ERROR;
9759       END IF;
9760     END LOOP;
9761     CLOSE get_working_ver;
9762 
9763     x_return_status := FND_API.G_RET_STS_SUCCESS;
9764   EXCEPTION
9765     WHEN FND_API.G_EXC_ERROR THEN
9766       x_return_status := FND_API.G_RET_STS_ERROR;
9767     WHEN OTHERS THEN
9768       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9769       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
9770                               p_procedure_name => 'UPDATE_WORKING_VER_WEIGHT',
9771                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9772       RAISE;
9773   END UPDATE_WORKING_VER_WEIGHT;
9774 
9775 
9776  procedure set_new_tasks_to_TBD(
9777     p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
9778    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
9779    ,p_validation_level                  IN  VARCHAR2    := 100
9780    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
9781    ,p_debug_mode                        IN  VARCHAR2    := 'N'
9782    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9783    ,p_project_id                        IN  NUMBER
9784    ,p_task_id                           IN  NUMBER
9785    ,p_task_status                       IN  VARCHAR2
9786    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9787    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
9788    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9789 ) IS
9790    CURSOR cur_task_hier( c_parent_structure_version_id NUMBER )
9791    IS
9792      SELECT proj_element_id, element_version_id
9793        FROM pa_proj_element_versions ppev,
9794             ( SELECT object_id_to1 from pa_object_relationships
9795                WHERE relationship_type = 'S'
9796                start with object_id_from1 = ( SELECT element_version_id
9797                                                 FROM pa_proj_element_versions ppev
9798                                                WHERE ppev.proj_element_id = p_task_id
9799                                                  AND ppev.parent_structure_version_id = c_parent_structure_version_id
9800                                                  AND project_id = p_project_id
9801                                                  AND object_type = 'PA_TASKS')
9802                connect by object_id_from1 = prior object_id_to1
9803                       and relationship_type = prior relationship_type --bug 3919266
9804                       and relationship_type = 'S'
9805              )  pobj
9806     WHERE ppev.element_version_id = pobj.object_id_to1;
9807 
9808    CURSOR cur_all_wrkng_str_ver
9809    IS
9810      SELECT element_version_id
9811        FROM pa_proj_elem_ver_structure
9812       WHERE project_id = p_project_id
9813         AND status_code <> 'STRUCTURE_PUBLISHED';
9814 
9815    CURSOR cur_task_ver_ids( c_parent_structure_version_id NUMBER )
9816    IS
9817      SELECT element_version_id FROM pa_proj_element_versions WHERE parent_structure_version_id = c_parent_structure_version_id;
9818 
9819     TYPE task_id_rec_type IS RECORD
9820          (task_id                  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9821           task_version_id          NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9822           new_task_flag            VARCHAR2(1)     := 'Y'
9823           );
9824     TYPE task_id_tbl_type is TABLE OF task_id_rec_type
9825                     INDEX BY BINARY_INTEGER;
9826     pub_task_ids       task_id_tbl_type;
9827     wrk_task_ids       task_id_tbl_type;
9828     i                  NUMBER := 0;
9829     l_parent_struc_ver_id   NUMBER;
9830    /* Bug 2790703 Begin */
9831 --    l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9832     l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
9833     l_index number :=0 ;
9834 /* Bug 2790703 End */
9835 
9836     l_msg_count                    NUMBER;
9837     l_msg_data                     VARCHAR2(250);
9838     l_return_status                VARCHAR2(2);
9839     l_data                          VARCHAR2(250);
9840     l_msg_index_out                 NUMBER;
9841     l_error_msg_code                     VARCHAR2(250);
9842     l_versioning_enabled            VARCHAR2(1);
9843 
9844   BEGIN
9845        IF PA_PROGRESS_UTILS.get_system_task_status( p_task_status ) = 'CANCELLED'
9846        THEN
9847           l_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( p_project_id );
9848           l_parent_struc_ver_id := PA_PROJ_ELEMENTS_UTILS.latest_published_ver_id( p_project_id, 'WORKPLAN' );
9849 
9850           --Store the whole branch of published version under p_task_id in pl/sql table.
9851           FOR cur_task_hier_rec IN cur_task_hier(l_parent_struc_ver_id) LOOP
9852                i := i + 1;
9853                pub_task_ids(i).task_id := cur_task_hier_rec.proj_element_id;
9854           END LOOP;
9855 
9856           --For rollup
9857           --Rollup only published version if versioning is disabled.
9858           IF l_versioning_enabled = 'N'
9859           THEN
9860                FOR cur_task_ver_ids_rec IN cur_task_ver_ids( l_parent_struc_ver_id ) LOOP
9861             /*  Bug 2790703 Begin */
9862                  -- l_tasks_ver_ids.extend;
9863                  -- l_tasks_ver_ids(l_tasks_ver_ids.count) := cur_task_ver_ids_rec.element_version_id;
9864             l_index := l_index + 1;
9865             l_task_ver_ids_tbl(l_index) := cur_task_ver_ids_rec.element_version_id;
9866             /*  Bug 2790703 End */
9867 
9868                END LOOP;
9869           END IF;
9870 
9871           IF l_versioning_enabled = 'Y'
9872           THEN
9873              --Get all the working structure versions but NOT PUBLISHED
9874             i:= 0;
9875             FOR cur_all_wrkng_str_ver_rec in cur_all_wrkng_str_ver LOOP
9876                  --Store all the task ids from all working versions under p_task in a pl/sql table
9877                  FOR cur_task_hier_rec IN cur_task_hier(cur_all_wrkng_str_ver_rec.element_version_id) LOOP
9878                       i := i + 1;
9879                       wrk_task_ids(i).task_id := cur_task_hier_rec.proj_element_id;
9880                       wrk_task_ids(i).task_version_id := cur_task_hier_rec.element_version_id;
9881                  END LOOP;
9882 
9883                  --For rollup
9884                  --Rollup only working versions if versioning is enabled.
9885                  FOR cur_task_ver_ids_rec IN cur_task_ver_ids( cur_all_wrkng_str_ver_rec.element_version_id ) LOOP
9886             /*  Bug 2790703 Begin */
9887                      -- l_tasks_ver_ids.extend;
9888                      -- l_tasks_ver_ids(l_tasks_ver_ids.count) := cur_task_ver_ids_rec.element_version_id;
9889              l_index := l_index + 1;
9890              l_task_ver_ids_tbl(l_index) := cur_task_ver_ids_rec.element_version_id;
9891             /*  Bug 2790703 End */
9892 
9893                  END LOOP;
9894             END LOOP;
9895 
9896             --Now compare tasks from wrk_task_ids with tasks from pub_task_ids table.
9897             --If a task from wrk_task_ids pl/sql table does not exists in pub_task_ids then the task must be
9898             --marked as TO_BE_DELETED.
9899             --Store all such tasks in
9900             FOR j in 1..wrk_task_ids.COUNT LOOP
9901                 FOR k in 1..pub_task_ids.COUNT LOOP
9902                     IF pub_task_ids(k).task_id = wrk_task_ids(j).task_id
9903                     THEN
9904                        wrk_task_ids(j).new_task_flag := 'N';
9905                        exit;
9906                     ELSE
9907                        wrk_task_ids(j).new_task_flag := 'Y';
9908                     END IF;
9909                 END LOOP;
9910                 IF wrk_task_ids(j).task_version_id IS NOT NULL AND
9911                    wrk_task_ids(j).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
9912                    wrk_task_ids(j).new_task_flag = 'Y'
9913                 THEN
9914                     --Update version status for all those tasks that did not exist in the branch in latest pub ver.
9915                     UPDATE pa_proj_element_versions
9916                        SET TASK_UNPUB_VER_STATUS_CODE = 'TO_BE_DELETED'
9917                      WHERE element_version_id = wrk_task_ids(j).task_version_id
9918                      ;
9919                 END IF;
9920             END LOOP;
9921           END IF;
9922 
9923             ---Call the rollup API to rollup schedule dates and effort
9924     /* Bug 2790703 Begin */
9925     /*
9926             PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
9927                          p_commit => FND_API.G_FALSE,
9928                          p_element_versions => l_tasks_ver_ids,
9929                          x_return_status => l_return_status,
9930                          x_msg_count => l_msg_count,
9931                          x_msg_data => l_msg_data);
9932     */
9933     -- Bug 4429929 : No need to do Rollup while cancelling a task.
9934     -- This is decided after discussion with Majid
9935     /*
9936         PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
9937                        p_commit => FND_API.G_FALSE,
9938                        p_element_versions => l_task_ver_ids_tbl,
9939                        x_return_status => l_return_status,
9940                        x_msg_count => l_msg_count,
9941                        x_msg_data => l_msg_data);
9942     */
9943 
9944     /* Bug 2790703 End */
9945 
9946 
9947             if l_return_status <> FND_API.G_RET_STS_SUCCESS then
9948                x_msg_count := FND_MSG_PUB.count_msg;
9949                if x_msg_count = 1 then
9950                   pa_interface_utils_pub.get_messages
9951                         (p_encoded        => FND_API.G_TRUE,
9952                          p_msg_index      => 1,
9953                          p_msg_count      => l_msg_count,
9954                          p_msg_data       => l_msg_data,
9955                          p_data           => l_data,
9956                          p_msg_index_out  => l_msg_index_out);
9957                          x_msg_data := l_data;
9958                end if;
9959             end if;
9960        END IF;
9961        x_return_status := FND_API.G_RET_STS_SUCCESS;
9962   EXCEPTION
9963     WHEN FND_API.G_EXC_ERROR THEN
9964       x_return_status := FND_API.G_RET_STS_ERROR;
9965     WHEN OTHERS THEN
9966       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9967       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
9968                               p_procedure_name => 'set_new_tasks_to_TBD',
9969                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9970       RAISE;
9971   END set_new_tasks_to_TBD;
9972 
9973 
9974 -- Bug 2812855 : Added following procedure to populate actual and estimated dates to all the task versions
9975 
9976 PROCEDURE Update_Dates_To_All_Versions(
9977  p_api_version          IN  NUMBER      :=1.0,
9978  p_init_msg_list            IN  VARCHAR2    :=FND_API.G_TRUE,
9979  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
9980  p_validate_only            IN  VARCHAR2    :=FND_API.G_TRUE,
9981  p_validation_level         IN  NUMBER      :=FND_API.G_VALID_LEVEL_FULL,
9982  p_calling_module           IN  VARCHAR2    :='SELF_SERVICE',
9983  p_debug_mode           IN  VARCHAR2    :='N',
9984  p_max_msg_count            IN  NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9985  p_project_id                   IN      NUMBER,
9986  p_element_version_id       IN  NUMBER,
9987  x_return_status        OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9988  x_msg_count            OUT     NOCOPY NUMBER, --File.Sql.39 bug 4440895
9989  x_msg_data         OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9990 ) IS
9991 
9992    CURSOR cur_proj_elem_ver_sch(c_elem_ver_id number, c_project_id NUMBER)
9993    IS
9994      SELECT element_version_id, project_id, proj_element_id, actual_start_date, actual_finish_date,
9995         estimated_start_date, estimated_finish_date, actual_duration, estimated_duration
9996        FROM pa_proj_elem_ver_schedule
9997       WHERE element_version_id = c_elem_ver_id
9998         and project_id = c_project_id;
9999 
10000    cur_proj_elem_ver_sch_rec cur_proj_elem_ver_sch%ROWTYPE;
10001 
10002    CURSOR cur_get_parent_tasks(c_elem_ver_id number)
10003    IS
10004     SELECT object_id_from1
10005         FROM pa_object_relationships
10006         WHERE object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
10007         AND object_type_to = 'PA_TASKS'
10008         AND relationship_type ='S'
10009         CONNECT BY  PRIOR OBJECT_ID_FROM1 = OBJECT_ID_TO1
10010                AND  PRIOR relationship_type = relationship_type --bug 3919266
10011                AND  relationship_type = 'S'
10012         START WITH OBJECT_ID_TO1 = c_elem_ver_id ;
10013 
10014 BEGIN
10015     IF (p_debug_mode = 'Y') THEN
10016       pa_debug.debug('PA_TASK_PVT1.Update_Dates_To_All_Versions begin');
10017     END IF;
10018 
10019     IF (p_commit = FND_API.G_TRUE) THEN
10020       savepoint UPDATE_SCH_VER_PRIVATE_DATES;
10021     END IF;
10022 
10023     -- Get all the info which needs to be updated to its all the versions
10024     OPEN cur_proj_elem_ver_sch(p_element_version_id, p_project_id);
10025     FETCH cur_proj_elem_ver_sch INTO cur_proj_elem_ver_sch_rec;
10026     CLOSE cur_proj_elem_ver_sch;
10027     -- Update schedule data for all the versions of the above task
10028 
10029     UPDATE pa_proj_elem_ver_schedule
10030       SET actual_start_date = cur_proj_elem_ver_sch_rec.actual_start_date
10031     , actual_finish_date = cur_proj_elem_ver_sch_rec.actual_finish_date
10032     , estimated_start_date = cur_proj_elem_ver_sch_rec.estimated_start_date
10033     , estimated_finish_date = cur_proj_elem_ver_sch_rec.estimated_finish_date
10034     , actual_duration = cur_proj_elem_ver_sch_rec.actual_duration
10035     , estimated_duration = cur_proj_elem_ver_sch_rec.estimated_duration
10036     WHERE proj_element_id = cur_proj_elem_ver_sch_rec.proj_element_id
10037       and project_id = cur_proj_elem_ver_sch_rec.project_id;
10038 
10039    FOR i IN cur_get_parent_tasks(p_element_version_id)
10040    LOOP
10041     -- Get all the info of the parent which needs to be updated to its all the versions
10042      OPEN cur_proj_elem_ver_sch(i.object_id_from1, p_project_id);
10043      FETCH cur_proj_elem_ver_sch INTO cur_proj_elem_ver_sch_rec;
10044      CLOSE cur_proj_elem_ver_sch;
10045 
10046     -- Update schedule data for all the versions of the above task
10047 
10048      UPDATE pa_proj_elem_ver_schedule
10049       SET actual_start_date = cur_proj_elem_ver_sch_rec.actual_start_date
10050     , actual_finish_date = cur_proj_elem_ver_sch_rec.actual_finish_date
10051     , estimated_start_date = cur_proj_elem_ver_sch_rec.estimated_start_date
10052     , estimated_finish_date = cur_proj_elem_ver_sch_rec.estimated_finish_date
10053     , actual_duration = cur_proj_elem_ver_sch_rec.actual_duration
10054     , estimated_duration = cur_proj_elem_ver_sch_rec.estimated_duration
10055      WHERE proj_element_id = cur_proj_elem_ver_sch_rec.proj_element_id
10056        and project_id = cur_proj_elem_ver_sch_rec.project_id;
10057    END LOOP;
10058 
10059   IF (p_commit = FND_API.G_TRUE) THEN
10060       commit;
10061   END IF;
10062 
10063 x_return_status := FND_API.G_RET_STS_SUCCESS;
10064 
10065 EXCEPTION
10066     WHEN FND_API.G_EXC_ERROR THEN
10067       IF (p_commit = FND_API.G_TRUE) THEN
10068         ROLLBACK to UPDATE_SCH_VER_PRIVATE_DATES;
10069       END IF;
10070       x_msg_count := FND_MSG_PUB.count_msg;
10071       x_return_status := FND_API.G_RET_STS_ERROR;
10072     WHEN OTHERS THEN
10073       IF (p_commit = FND_API.G_TRUE) THEN
10074         ROLLBACK to UPDATE_SCH_VER_PRIVATE_DATES;
10075       END IF;
10076       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10077       x_msg_count := FND_MSG_PUB.count_msg;
10078       --put message
10079       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PVT1',
10080                               p_procedure_name => 'Update_Dates_To_All_Versions',
10081                               p_error_text     => SUBSTRB(SQLERRM,1,240));
10082       RAISE;
10083 END Update_Dates_To_All_Versions;
10084 
10085 
10086 /*  procedure rollup_all_working_ver(
10087     p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
10088    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
10089    ,p_validation_level                  IN  VARCHAR2    := 100
10090    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
10091    ,p_debug_mode                        IN  VARCHAR2    := 'N'
10092    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10093    ,p_project_id                        IN  NUMBER
10094    ,p_task_id                           IN  NUMBER
10095    ,p_task_status                       IN  NUMBER
10096    ,x_return_status                     OUT  VARCHAR2
10097    ,x_msg_count                         OUT  NUMBER
10098    ,x_msg_data                          OUT  VARCHAR2
10099 ) AS
10100 BEGIN
10101 
10102 
10103 END rollup_all_working_ver;
10104 */
10105 
10106 END PA_TASK_PVT1;