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