[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;