DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_TASK_PVT1

Source


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