[Home] [Help]
PACKAGE BODY: APPS.PA_TASK_PUB1
Source
1 PACKAGE BODY PA_TASK_PUB1 AS
2 /* $Header: PATSK1PB.pls 120.39.12020000.6 2013/04/25 13:25:30 bpottipa ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'PA_TASK_PUB1';
5
6
7 -- API name : Create_Task
8 -- Type : Public procedure
9 -- Pre-reqs : None
10 -- Return Value : N/A
11 -- Prameters
12 -- p_api_version IN NUMBER N Not Null 1.0
13 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
14 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
15 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
16 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
17 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
18 -- p_debug_mode IN VARCHAR2 N Null N
19 -- p_context IN VARCHAR2 N Null TASK
20 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21 -- p_object_type IN VARCHAR2 N Not Null
22 -- p_project_id IN NUMBER N Not Null
23 -- p_task_number IN VARCHAR2 N Not Null
24 -- p_task_name IN VARCHAR2 N Not Null
25 -- p_task_description IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
26 -- p_location_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27 -- p_country IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28 -- p_territory_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29 -- p_state_region IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 -- p_city IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31 -- p_task_manager_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32 -- p_task_manager_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33 -- p_carrying_out_org_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34 -- p_carrying_out_org_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 -- p_priority_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 -- p_TYPE_ID IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 -- p_status_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 -- p_inc_proj_progress_flag IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
39 -- p_pm_product_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
40 -- p_pm_task_reference IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
41 -- p_closed_date IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
44 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
45 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
46 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
47 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
48 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
49 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
50 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
51 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
52 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
53 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
54 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
55 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
56 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
57 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
58 --FP M development bug 3301192
59 -- p_structure_type IN VARCHAR2 := 'WORKPLAN',
60 -- p_financial_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
61 --End FPM changes
62 -- x_task_id OUT NUMBER N Not Null
63 -- x_return_status OUT VARCHAR2 N Null
64 -- x_msg_count OUT NUMBER N Null
65 -- x_msg_data OUT VARCHAR2 N Null
66 --
67 -- History
68 --
69 -- 23-OCT-01 Majid Ansari -Created
70 --
71 --
72
73 PROCEDURE Create_Task(
74 p_api_version IN NUMBER :=1.0,
75 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
76 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
77 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
78 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
79 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
80 p_debug_mode IN VARCHAR2 :='N',
81 p_context IN VARCHAR2 :='TASK', -- bug#11928067
82 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
83 p_object_type IN VARCHAR2,
84 p_project_id IN NUMBER,
85 p_structure_id IN NUMBER,
86 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
87 p_task_number IN VARCHAR2,
88 p_task_name IN VARCHAR2,
89 p_ref_task_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
90 p_peer_or_sub IN VARCHAR2 :='PEER',
91 p_task_description IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
92 p_location_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
93 p_country IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
94 p_territory_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
95 p_state_region IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
96 p_city IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
97 p_task_manager_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
98 p_task_manager_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
99 p_carrying_out_org_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
100 p_carrying_out_org_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
101 p_priority_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
102 p_TYPE_ID IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
103 p_status_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
104 p_inc_proj_progress_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
105 p_pm_product_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
106 p_pm_task_reference IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
107 p_closed_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
108 p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
109 p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
110 p_link_task_flag IN VARCHAR2 := 'N',
111 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
112 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
113 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
114 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
115 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
116 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
117 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
118 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
119 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
120 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
121 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
122 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
123 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
124 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
125 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
126 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
127 p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
128 p_address1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
129 p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
130 p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
131 p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
132 p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
133 p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
134
135 p_task_weighting_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
136 p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
137 p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
138 p_wq_actual_entry_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
139 p_task_progress_entry_page_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
140 p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
141 p_parent_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
142 p_phase_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
143 p_phase_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
144 -- xxlu added task DFF attributes
145 p_tk_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
146 p_tk_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
147 p_tk_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
148 p_tk_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
149 p_tk_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
150 p_tk_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
151 p_tk_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
152 p_tk_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
153 p_tk_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
154 p_tk_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
155 p_tk_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
156 -- end xxlu changes
157 --FP M development bug 330119
158 p_structure_type IN VARCHAR2 := 'WORKPLAN',
159 p_financial_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
160 p_Base_Perc_Comp_Deriv_Code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
161 --End FPM changes bug 330119
162 --bug 13923366
163 p_pm_source_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
164 --bug 13923366
165 x_task_id IN OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
166 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
167 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
168 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
169 ) IS
170
171 l_api_name CONSTANT VARCHAR(30) := 'CREATE_TASK';
172 l_api_version CONSTANT NUMBER := 1.0;
173
174 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
175 l_return_status VARCHAR2(1);
176 l_msg_count NUMBER;
177 l_msg_data VARCHAR2(250);
178 l_data VARCHAR2(250);
179 l_msg_index_out NUMBER;
180 l_error_msg_code VARCHAR2(250);
181
182 l_carrying_out_org_id NUMBER;
183 -- added for Bug: 4537865
184 l_new_carrying_out_org_id NUMBER;
185 -- added for Bug: 4537865
186 l_task_manager_id NUMBER;
187 l_task_progress_entry_page_id NUMBER;
188
189 -- hyau Bug 2852753
190 l_delete_project_allowed VARCHAR2(1);
191 l_update_proj_num_allowed VARCHAR2(1);
192 l_update_proj_name_allowed VARCHAR2(1);
193 l_update_proj_desc_allowed VARCHAR2(1);
194 l_update_proj_dates_allowed VARCHAR2(1);
195 l_update_proj_status_allowed VARCHAR2(1);
196 l_update_proj_manager_allowed VARCHAR2(1);
197 l_update_proj_org_allowed VARCHAR2(1);
198 l_add_task_allowed VARCHAR2(1);
199 l_delete_task_allowed VARCHAR2(1);
200 l_update_task_num_allowed VARCHAR2(1);
201 l_update_task_name_allowed VARCHAR2(1);
202 l_update_task_dates_allowed VARCHAR2(1);
203 l_update_task_desc_allowed VARCHAR2(1);
204 l_update_parent_task_allowed VARCHAR2(1);
205 l_update_task_org_allowed VARCHAR2(1);
206
207 l_err_code NUMBER := 0;
208 l_err_stack VARCHAR2(200) := NULL;
209 l_err_stage VARCHAR2(200) := NULL;
210
211 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
212
213 CURSOR get_product_code ( c_project_id NUMBER ) IS
214 SELECT pm_product_code
215 FROM PA_PROJECTS_ALL
216 WHERE project_id = c_project_id;
217
218 -- end hyau Bug 2852753
219
220 BEGIN
221 pa_debug.init_err_stack ('PA_TASK_PUB1.CREATE_TASK');
222
223 IF (p_debug_mode = 'Y') THEN
224 pa_debug.debug('PA_TASK_PUB1.CREATE_TASK begin');
225 END IF;
226
227 IF (p_commit = FND_API.G_TRUE) THEN
228 savepoint create_Task;
229 END IF;
230
231 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
232 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
233 END IF;
234
235
236 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
237 FND_MSG_PUB.initialize;
238 END IF;
239
240 --Bug 2168170
241
242 --hsiu: bug 2669388
243 /*
244 --dbms_output.put_line('task number');
245 IF p_task_number IS NULL
246 THEN
247 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
248 p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
249 raise FND_API.G_EXC_ERROR;
250 END IF;
251
252 --dbms_output.put_line('task name');
253 IF p_task_name IS NULL
254 THEN
255 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
256 p_msg_name => 'PA_PS_TASK_NAME_NULL');
257 raise FND_API.G_EXC_ERROR;
258 END IF;
259
260 --Bug 2168170
261
262 IF PA_PROJ_ELEMENTS_UTILS.Check_element_number_Unique
263 (
264 p_element_number => rtrim(p_task_number)
265 ,p_element_id => null
266 ,p_project_id => p_project_id
267 ,p_structure_id => p_parent_structure_id
268 ,p_object_type => 'PA_TASKS'
269 ) = 'N'
270 THEN
271 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
272 p_msg_name => 'PA_PS_TASK_NOT_NUM_UNIQ');
273 raise FND_API.G_EXC_ERROR;
274
275 END IF;
276 */
277 --end bug 2669388
278
279 -- hyau Bug 2852753
280 IF p_calling_module = 'SELF_SERVICE'
281 and p_link_task_flag = 'N' -- Bug # 5072032.
282 THEN
283
284 OPEN get_product_code(p_project_id);
285 FETCH get_product_code INTO l_pm_product_code;
286 CLOSE get_product_code;
287
288 If l_pm_product_code IS NOT NULL THEN
289 pa_pm_controls.Get_Project_actions_allowed
290 (P_PM_PRODUCT_CODE => l_pm_product_code,
291 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
292 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
293 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
294 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
295 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
296 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
297 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
298 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
299 P_ADD_TASK_ALLOWED => l_add_task_allowed,
300 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
301 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
302 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
303 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
304 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
305 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
306 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
307 P_ERROR_CODE => l_err_code,
308 P_ERROR_STACK => l_err_stack,
309 P_ERROR_STAGE => l_err_stage );
310 IF l_err_code <> 0 THEN
311 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
312 p_msg_name => l_err_stage);
313 END IF;
314 IF l_add_task_allowed = 'N' THEN
315 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
316 p_msg_name => 'PA_PR_PM_CANNOT_ADDTASK');
317 raise FND_API.G_EXC_ERROR;
318 END IF;
319 END IF;
320 END IF;
321
322 -- end hyau Bug 2852753
323
324 --dbms_output.put_line( 'Before check_task_mgr_name_or_id' );
325 --my_error_msg( 'Before check_task_mgr_name_or_id' );
326
327 --The following check is required bcoz AMG passes only task manager id but not task manager
328 --name. So for AMG p_check_id_flag should always be 'Y' not 'A'.
329 --Confirmed with Selva.
330
331 IF (p_calling_module = 'AMG')
332 THEN
333 --Check Task Manager and Task Manager Id
334 IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
335 (p_task_manager_name IS NOT NULL)) OR
336 ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
337 (p_task_manager_id IS NOT NULL)) THEN
338 --Call Check API.
339 pa_tasks_maint_utils.check_task_mgr_name_or_id(
340 p_task_mgr_name => p_task_manager_name,
341 p_task_mgr_id => p_task_manager_id,
342 p_project_id => p_project_id,
343 p_check_id_flag => 'Y',
344 x_task_mgr_id => l_task_manager_id,
345 x_return_status => l_return_status,
346 x_error_msg_code => l_error_msg_code);
347 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
348 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
349 p_msg_name => l_error_msg_code);
350 END IF;
351 END IF; --End Name-Id Conversion
352 END IF;
353
354 IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
355 --Check Task Manager and Task Manager Id
356
357 --dbms_output.put_line('task manager');
358 IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
359 (p_task_manager_name IS NOT NULL)) OR
360 ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
361 (p_task_manager_id IS NOT NULL)) THEN
362 --Call Check API.
363 pa_tasks_maint_utils.check_task_mgr_name_or_id(
364 p_task_mgr_name => p_task_manager_name,
365 p_task_mgr_id => p_task_manager_id,
366 p_project_id => p_project_id,
367 --p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
368 p_check_id_flag => 'A', --bug fix 2646762
369 x_task_mgr_id => l_task_manager_id,
370 x_return_status => l_return_status,
371 x_error_msg_code => l_error_msg_code);
372 --dbms_output.put_line( 'l_error_msg_code '||l_error_msg_code );
373 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
374 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
375 p_msg_name => l_error_msg_code);
376 END IF;
377 --dbms_output.put_line( 'Task manager id '||l_task_manager_id||'flag '||PA_STARTUP.G_Check_ID_Flag );
378 END IF; --End Name-Id Conversion
379
380 --dbms_output.put_line('carrying out org');
381 --Check Carrying out organization name and Carrying out organization Id
382 IF ((p_carrying_out_org_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
383 (p_carrying_out_org_name IS NOT NULL)) OR
384 ((p_carrying_out_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
385 (p_carrying_out_org_id IS NOT NULL)) THEN
386
387 --dbms_output.put_line( 'Before Check_OrgName_Or_Id' );
388
389 IF p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
390 THEN
391 l_carrying_out_org_id := FND_API.G_MISS_NUM;
392 ELSE
393 l_carrying_out_org_id := p_carrying_out_org_id;
394 END IF;
395
396 pa_hr_org_utils.Check_OrgName_Or_Id
397 (p_organization_id => l_carrying_out_org_id
398 ,p_organization_name => p_carrying_out_org_name
399 ,p_check_id_flag => 'Y'
400 -- ,x_organization_id => l_carrying_out_org_id * commented for Bug: 4537865
401 ,x_organization_id => l_new_carrying_out_org_id -- added for Bug: 4537865
402 ,x_return_status => l_return_status
403 ,x_error_msg_code => l_error_msg_code);
404
405 -- added for Bug: 4537865
406 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
407 l_carrying_out_org_id := l_new_carrying_out_org_id;
408 END IF;
409 -- added for Bug: 4537865
410
411 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
412 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
413 p_msg_name => l_error_msg_code);
414 END IF;
415 END IF; --End Name-Id Conversion
416 ELSE
417 l_task_manager_id := p_task_manager_id;
418 l_carrying_out_org_id := p_carrying_out_org_id;
419 END IF;
420
421 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
422 x_msg_count := FND_MSG_PUB.count_msg;
423 IF x_msg_count = 1 then
424 pa_interface_utils_pub.get_messages
425 (p_encoded => FND_API.G_TRUE,
426 p_msg_index => 1,
427 p_msg_count => l_msg_count,
428 p_msg_data => l_msg_data,
429 p_data => l_data,
430 p_msg_index_out => l_msg_index_out);
431 x_msg_data := l_data;
432 END IF;
433 raise FND_API.G_EXC_ERROR;
434 END IF;
435
436 IF ((p_task_progress_entry_page <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
437 (p_task_progress_entry_page IS NOT NULL)) OR
438 ((p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
439 (p_task_progress_entry_page_id IS NOT NULL)) THEN
440
441 IF (p_task_progress_entry_page_ID = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
442 l_task_progress_entry_page_id := FND_API.G_MISS_NUM;
443 ELSE
444 l_task_progress_entry_page_id := p_task_progress_entry_page_id;
445 END IF;
446
447 pa_page_layout_utils.Check_pagelayout_Name_Or_Id(
448 p_pagelayout_name => p_task_progress_entry_page
449 ,p_pagetype_code => 'AI'
450 ,x_pagelayout_id => l_task_progress_entry_page_id
451 ,x_return_status => l_return_status
452 ,x_error_message_code => l_error_msg_code
453 );
454
455 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
456 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
457 p_msg_name => l_error_msg_code);
458 END IF;
459 END IF;
460
461 -- 3944597 Added code to validate task type , if it is not null and not G_PA_MISS_NUM
462 -- check task type is valid and effective
463 -- if it is not valid or not effective , throw error message
464
465 IF ( p_TYPE_ID IS NOT NULL AND p_TYPE_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN
466 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_effective(p_TYPE_ID)) THEN
467 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_EFF_TASK_TYPE_ERR');
468 l_return_status := FND_API.G_RET_STS_ERROR;
469 END IF;
470 END IF;
471
472 -- 3944597 end
473
474 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
475 x_msg_count := FND_MSG_PUB.count_msg;
476 IF x_msg_count = 1 then
477 pa_interface_utils_pub.get_messages
478 (p_encoded => FND_API.G_TRUE,
479 p_msg_index => 1,
480 p_msg_count => l_msg_count,
481 p_msg_data => l_msg_data,
482 p_data => l_data,
483 p_msg_index_out => l_msg_index_out);
484 x_msg_data := l_data;
485 END IF;
486 raise FND_API.G_EXC_ERROR;
487 END IF;
488
489 --dbms_output.put_line( 'Inside CREATE_TASK API '||p_project_id );
490
491 --my_error_msg( 'Inside CREATE_TASK API '||p_project_id );
492
493 --my_error_msg( 'Ref Task Id in create task'||p_ref_task_id );
494
495 --dbms_output.put_line('create task pvt');
496 -- xxlu added task DFF attributes
497 -- Added p_context attribute for bug#11928067 to differentiate the linked project
498 PA_TASK_PVT1.Create_Task(
499 p_api_version => p_api_version
500 ,p_init_msg_list => p_init_msg_list
501 ,p_commit => p_commit
502 ,p_validate_only => p_validate_only
503 ,p_validation_level => p_validation_level
504 ,p_calling_module => p_calling_module
505 ,p_debug_mode => p_debug_mode
506 ,p_context => p_context
507 ,p_max_msg_count => p_max_msg_count
508 ,p_ref_task_id => p_ref_task_id
509 ,p_peer_or_sub => p_peer_or_sub
510 ,p_object_type => p_object_type
511 ,p_project_id => p_project_id
512 ,p_structure_id => p_structure_id
513 ,p_structure_version_id => p_structure_version_id
514 ,p_task_number => rtrim(p_task_number)
515 ,p_task_name => rtrim(p_task_name)
516 ,p_task_description => rtrim(p_task_description)
517 ,p_location_id => p_location_id
518 ,p_country => p_country
519 ,p_territory_code => p_territory_code
520 ,p_state_region => p_state_region
521 ,p_city => p_city
522 ,p_task_manager_id => l_task_manager_id
523 ,p_carrying_out_org_id => l_carrying_out_org_id
524 ,p_priority_code => p_priority_code
525 ,p_TYPE_ID => p_TYPE_ID
526 ,p_status_code => p_status_code
527 ,p_inc_proj_progress_flag => p_inc_proj_progress_flag
528 ,p_pm_product_code => p_pm_product_code
529 ,p_pm_task_reference => p_pm_task_reference
530 ,p_closed_date => p_closed_date
531 ,p_scheduled_start_date => p_scheduled_start_date
532 ,p_scheduled_finish_date => p_scheduled_finish_date
533 ,p_link_task_flag => p_link_task_flag
534 ,p_attribute_category => p_attribute_category
535 ,p_attribute1 => rtrim(p_attribute1)
536 ,p_attribute2 => rtrim(p_attribute2)
537 ,p_attribute3 => rtrim(p_attribute3)
538 ,p_attribute4 => rtrim(p_attribute4)
539 ,p_attribute5 => rtrim(p_attribute5)
540 ,p_attribute6 => rtrim(p_attribute6)
541 ,p_attribute7 => rtrim(p_attribute7)
542 ,p_attribute8 => rtrim(p_attribute8)
543 ,p_attribute9 => rtrim(p_attribute9)
544 ,p_attribute10 => rtrim(p_attribute10)
545 ,p_attribute11 => rtrim(p_attribute11)
546 ,p_attribute12 => rtrim(p_attribute12)
547 ,p_attribute13 => rtrim(p_attribute13)
548 ,p_attribute14 => rtrim(p_attribute14)
549 ,p_attribute15 => rtrim(p_attribute15)
550 ,p_address_id => p_address_id
551 ,p_address1 => p_address1
552 ,p_work_type_id => p_work_type_id
553 ,p_service_type_code => p_service_type_code
554 ,p_chargeable_flag => p_chargeable_flag
555 ,p_billable_flag => p_billable_flag
556 ,p_receive_project_invoice_flag => p_receive_project_invoice_flag
557 ,p_task_weighting_deriv_code => p_task_weighting_deriv_code
558 ,p_work_item_code => p_work_item_code
559 ,p_uom_code => p_uom_code
560 ,p_wq_actual_entry_code => p_wq_actual_entry_code
561 ,p_task_progress_entry_page_id => l_task_progress_entry_page_id
562 ,p_task_progress_entry_page => p_task_progress_entry_page
563 ,p_parent_structure_id => p_parent_structure_id
564 ,p_phase_code => p_phase_code
565 ,p_phase_version_id => p_phase_version_id
566 ,p_tk_attribute_category => p_tk_attribute_category
567 ,p_tk_attribute1 => p_tk_attribute1
568 ,p_tk_attribute2 => p_tk_attribute2
569 ,p_tk_attribute3 => p_tk_attribute3
570 ,p_tk_attribute4 => p_tk_attribute4
571 ,p_tk_attribute5 => p_tk_attribute5
572 ,p_tk_attribute6 => p_tk_attribute6
573 ,p_tk_attribute7 => p_tk_attribute7
574 ,p_tk_attribute8 => p_tk_attribute8
575 ,p_tk_attribute9 => p_tk_attribute9
576 ,p_tk_attribute10 => p_tk_attribute10
577 -- Begin : Added for FP_M changes Bug 3305199
578 ,p_structure_type => p_structure_type
579 ,p_financial_flag => p_financial_flag
580 ,p_Base_Perc_Comp_Deriv_Code => p_Base_Perc_Comp_Deriv_Code
581 -- End : Added for FP_M changes Bug 3305199
582 ,p_pm_source_code => p_pm_source_code --bug 13923366
583 ,x_task_id => x_task_id
584 ,x_return_status => l_return_status
585 ,x_msg_count => l_msg_count
586 ,x_msg_data => l_msg_data
587 );
588 -- end xxlu changes
589 --dbms_output.put_line( 'After CREATE_TASK API ' );
590
591 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
592 x_msg_count := FND_MSG_PUB.count_msg;
593 IF x_msg_count = 1 then
594 pa_interface_utils_pub.get_messages
595 (p_encoded => FND_API.G_TRUE,
596 p_msg_index => 1,
597 p_msg_count => l_msg_count,
598 p_msg_data => l_msg_data,
599 p_data => l_data,
600 p_msg_index_out => l_msg_index_out);
601 x_msg_data := l_data;
602 END IF;
603 raise FND_API.G_EXC_ERROR;
604 END IF;
605
606 --x_task_id := l_task_id;
607 x_return_status := FND_API.G_RET_STS_SUCCESS;
608
609 IF (p_commit = FND_API.G_TRUE) THEN
610 COMMIT;
611 END IF;
612
613 IF (p_debug_mode = 'Y') THEN
614 pa_debug.debug('PA_TASK_PUB1.CREATE_TASK END');
615 END IF;
616 EXCEPTION
617 when FND_API.G_EXC_ERROR then
618 if p_commit = FND_API.G_TRUE then
619 rollback to create_task;
620 end if;
621 x_return_status := FND_API.G_RET_STS_ERROR;
622 when FND_API.G_EXC_UNEXPECTED_ERROR then
623 if p_commit = FND_API.G_TRUE then
624 rollback to create_task;
625 end if;
626 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
627 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
628 p_procedure_name => 'CREATE_TASK',
629 p_error_text => SUBSTRB(SQLERRM,1,240));
630 when OTHERS then
631 if p_commit = FND_API.G_TRUE then
632 rollback to create_task;
633 end if;
634 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
635 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
636 p_procedure_name => 'CREATE_TASK',
637 p_error_text => SUBSTRB(SQLERRM,1,240));
638 raise;
639 END Create_Task;
640
641 -- API name : Update_Task
642 -- Type : Public procedure
643 -- Pre-reqs : None
644 -- Return Value : N/A
645 -- Prameters
646 -- p_api_version IN NUMBER N Not Null 1.0
647 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
648 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
649 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
650 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
651 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
652 -- p_debug_mode IN VARCHAR2 N Null N
653 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
654 -- p_task_id IN NUMBER N Not Null
655 -- p_task_number IN VARCHAR2 N Not Null
656 -- p_task_name IN VARCHAR2 N Not Null
657 -- p_task_description IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
658 -- p_location_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
659 -- p_country IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
660 -- p_territory_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
661 -- p_state_region IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
662 -- p_city IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
663 -- p_task_manager_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
664 -- p_task_manager_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
665 -- p_carrying_out_org_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
666 -- p_carrying_out_org_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
667 -- p_priority_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
668 -- p_TYPE_ID IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
669 -- p_status_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
670 -- p_inc_proj_progress_flag IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
671 -- p_pm_product_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
672 -- p_pm_task_reference IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
673 -- p_closed_date IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
674 -- p_transaction_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
675 -- p_transaction_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
676 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
677 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
678 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
679 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
680 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
681 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
682 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
683 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
684 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
685 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
686 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
687 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
688 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
689 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
690 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
691 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
692 -- p_record_version_number IN NUMBER N Not Null
693 -- x_return_status OUT VARCHAR2 N Null
694 -- x_msg_count OUT NUMBER N Null
695 -- x_msg_data OUT VARCHAR2 N Null
696 --
697 -- History
698 --
699 -- 23-OCT-01 Majid Ansari -Created
700 -- 31-JUL-02 H Siu -Added transaction dates
701 --
702
703 PROCEDURE Update_Task(
704 p_api_version IN NUMBER :=1.0,
705 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
706 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
707 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
708 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
709 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
710 p_debug_mode IN VARCHAR2 :='N',
711 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
712 p_ref_task_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
713 p_peer_or_sub IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
714 p_task_id IN NUMBER,
715 p_task_number IN VARCHAR2,
716 p_task_name IN VARCHAR2,
717 p_task_description IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
718 p_location_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
719 p_country IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
720 p_territory_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
721 p_state_region IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
722 p_city IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
723 p_task_manager_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
724 p_task_manager_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
725 p_carrying_out_org_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
726 p_carrying_out_org_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
727 p_priority_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
728 p_TYPE_ID IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
729 p_status_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
730 p_inc_proj_progress_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
731 p_pm_product_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
732 P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Added for Huawei 15876400
733 p_pm_task_reference IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
734 p_closed_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
735 p_transaction_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
736 p_transaction_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
737 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
738 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
739 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
740 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
741 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
742 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
743 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
744 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
745 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
746 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
747 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
748 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
749 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
750 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
751 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
752 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
753 p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
754 p_address1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
755 p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
756 p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
757 p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
758 p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
759 p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
760
761 p_task_weighting_deriv_code IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
762 p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
763 p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
764 p_wq_actual_entry_code IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
765 p_task_progress_entry_page_id IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
766 p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
767 p_parent_structure_id IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
768 p_phase_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
769 p_phase_version_id IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
770
771 p_record_version_number IN NUMBER,
772 -- xxlu added task DFF attributes
773 p_tk_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
774 p_tk_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
775 p_tk_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
776 p_tk_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
777 p_tk_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
778 p_tk_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
779 p_tk_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
780 p_tk_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
781 p_tk_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
782 p_tk_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
783 p_tk_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
784 -- end xxlu changes
785 p_Base_Perc_Comp_Deriv_Code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
786 p_gen_etc_src_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
787 -- Bug#3491609 : Workflow Chanegs FP M
788 p_wf_item_type IN pa_proj_elements.wf_item_type%TYPE :=NULL,
789 p_wf_process IN pa_proj_elements.wf_process%TYPE :=NULL,
790 p_wf_lead_days IN pa_proj_elements.wf_start_lead_days%TYPE :=NULL,
791 p_wf_enabled_flag IN pa_proj_elements.enable_wf_flag%TYPE :=NULL,
792 -- Bug#3491609 : Workflow Chanegs FP M
793 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
794 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
795 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
796 p_shared IN VARCHAR2 := 'X' -- Bug 3451073
797 ,p_dates_check in VARCHAR2 := 'Y' --bug 8301015
798
799 ) IS
800 l_api_name CONSTANT VARCHAR(30) := 'UPDATE_TASK';
801 l_api_version CONSTANT NUMBER := 1.0;
802
803 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
804 l_return_status VARCHAR2(1);
805 l_msg_count NUMBER;
806 l_msg_data VARCHAR2(250);
807 l_data VARCHAR2(250);
808 l_msg_index_out NUMBER;
809 l_error_msg_code VARCHAR2(250);
810 l_dummy VARCHAR2(1);
811
812 l_carrying_out_org_id NUMBER;
813 -- added for bug 4537865
814 l_new_carrying_out_org_id NUMBER;
815 -- added for bug 4537865
816 l_task_manager_id NUMBER;
817 l_task_progress_entry_page_id NUMBER;
818
819 --task manager changes;
820 l_cur_task_mgr_person_id NUMBER;
821 l_cur_task_mgr_person VARCHAR2(250);
822 l_project_id NUMBER;
823
824 CURSOR get_mgr_info IS
825 select ppe.MANAGER_PERSON_ID, papf.FULL_NAME
826 from pa_proj_elements ppe, per_all_people_f papf
827 where ppe.proj_element_id = p_task_id
828 AND ppe.manager_person_id = papf.person_id
829 AND trunc(sysdate) between papf.effective_start_date
830 and nvl(papf.effective_end_date, sysdate+1); --Included by avaithia for Bug # 3448680
831 --end task manager changes
832
833 -- hyau Bug 2852753
834 l_delete_project_allowed VARCHAR2(1);
835 l_update_proj_num_allowed VARCHAR2(1);
836 l_update_proj_name_allowed VARCHAR2(1);
837 l_update_proj_desc_allowed VARCHAR2(1);
838 l_update_proj_dates_allowed VARCHAR2(1);
839 l_update_proj_status_allowed VARCHAR2(1);
840 l_update_proj_manager_allowed VARCHAR2(1);
841 l_update_proj_org_allowed VARCHAR2(1);
842 l_add_task_allowed VARCHAR2(1);
843 l_delete_task_allowed VARCHAR2(1);
844 l_update_task_num_allowed VARCHAR2(1);
845 l_update_task_name_allowed VARCHAR2(1);
846 l_update_task_dates_allowed VARCHAR2(1);
847 l_update_task_desc_allowed VARCHAR2(1);
848 l_update_parent_task_allowed VARCHAR2(1);
849 l_update_task_org_allowed VARCHAR2(1);
850
851 l_err_code NUMBER := 0;
852 l_err_stack VARCHAR2(200) := NULL;
853 l_err_stage VARCHAR2(200) := NULL;
854
855 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
856
857 CURSOR get_product_code ( c_project_id NUMBER ) IS
858 SELECT pm_product_code
859 FROM PA_PROJECTS_ALL
860 WHERE project_id = c_project_id;
861
862 l_cur_project_id NUMBER;
863 CURSOR cur_proj_id IS
864 SELECT project_id
865 FROM pa_proj_elements
866 WHERE proj_element_id = p_task_id;
867
868 CURSOR cur_trans_dates ( c_task_id NUMBER ) IS
869 SELECT START_DATE, COMPLETION_DATE
870 FROM pa_tasks
871 WHERE task_id = c_task_id;
872
873 CURSOR cur_task_attr IS
874 SELECT pe.ELEMENT_NUMBER, pe.NAME, pe.DESCRIPTION, hou.name
875 FROM pa_proj_elements pe, hr_all_organization_units hou
876 WHERE pe.proj_element_id = p_task_id
877 AND pe.carrying_out_organization_id = hou.organization_id;
878
879 --Bug 3940203 avaithia <start>
880 CURSOR cur_is_fin_task IS
881 SELECT task_id
882 FROM PA_TASKS
883 WHERE task_id = p_task_id ;
884
885 l_tsk_id PA_TASKS.task_id%TYPE ;
886 l_err_message fnd_new_messages.message_text%TYPE ;
887 --Bug 3940203 avaithia <End>
888
889 l_trans_start_date DATE;
890 l_trans_finish_date DATE;
891 l_task_number VARCHAR2(100);
892 l_task_name VARCHAR2(240);
893 l_task_description VARCHAR2(2000);
894 l_organization_name VARCHAR2(240);
895
896 -- end hyau Bug 2852753
897 BEGIN
898
899 --dbms_output.put_line( 'Entered ' );
900
901 pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK');
902
903 IF (p_debug_mode = 'Y') THEN
904 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK begin');
905 END IF;
906
907 IF (p_commit = FND_API.G_TRUE) THEN
908 savepoint update_Task;
909 END IF;
910
911 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
912 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
913 END IF;
914
915
916 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
917 FND_MSG_PUB.initialize;
918 END IF;
919
920 --Bug 3940203 avaithia <<Start>>
921 -- From Forms and SelfService ,User should not be able to null out Organisation Field
922 -- for Financial Tasks (because Organisation field is a NOT NULL Column in pa_tasks table)
923
924 -- Actually ,If No Org. Value is passed from UI ,(If user explicitly nulls out the org. field)
925 -- in PA_TASKS table , the Org. for the task is defaulted as the Project's Org.
926
927 -- Current Behaviour is : Though it is populating default org.id (project's org.id) for task
928 -- in pa_tasks table,In UI it is showing Org. field as NULL
929
930 -- We should not allow this (Org. field being nulled out )
931 -- Note : Same should be the case with AMG also .Because ,AMG changes will be reflected in UI
932
933 IF p_calling_module = 'SELF_SERVICE' OR
934 p_calling_module = 'FORMS' OR
935 p_calling_module = 'AMG'
936 THEN
937 OPEN cur_is_fin_task ;
938 FETCH cur_is_fin_task INTO l_tsk_id ;
939
940 IF cur_is_fin_task%FOUND THEN
941 CLOSE cur_is_fin_task ;
942 --The task is a financial task
943 --So,If Organisation is passed as NULL
944 --Then throw error message
945
946 --In Self Service ,We pass Organisation Name anyway.So,If it is not passed throw error
947 --In FORMS / AMG ,We may be getting the Org. ID .So,Check If any of name or id is available,it is ok.
948 -- If both are not available then throw error.
949
950 IF (p_carrying_out_org_name IS NULL)
951 OR (p_carrying_out_org_name =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
952
953 l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SU_NO_ORG');
954 --Now,Organisation Name is not passed .
955 --If it is AMG /FORMS ,If Org.Id is not also there ,throw error
956 IF p_calling_module = 'AMG' OR p_calling_module = 'FORMS' THEN
957
958 IF (p_carrying_out_org_id IS NULL)
959 THEN /*We should not check for MISS_NUM In case of AMG/FORMS - Review Comment Incorporated :3940203 */
960
961 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
962 p_msg_name => 'PA_PS_TASK_NAME_NUM_ERR',
963 p_token1 => 'TASK_NAME',
964 p_value1 => p_task_name,
965 p_token2 => 'TASK_NUMBER',
966 p_value2 => p_task_number,
967 p_token3 => 'MESSAGE',
968 p_value3 => l_err_message);
969 RAISE FND_API.G_EXC_ERROR ;
970 END IF;
971
972 ELSE -- This is case of Self Service
973 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
974 p_msg_name => 'PA_PS_TASK_NAME_NUM_ERR',
975 p_token1 => 'TASK_NAME',
976 p_value1 => p_task_name,
977 p_token2 => 'TASK_NUMBER',
978 p_value2 => p_task_number,
979 p_token3 => 'MESSAGE',
980 p_value3 => l_err_message);
981 RAISE FND_API.G_EXC_ERROR ;
982 END IF ; --End If AMG Context
983 END IF; --End If Org.Name is NULL
984 END IF; --End If Financial Task
985
986 END IF;
987
988 --Bug 3940203 avaithia <<End>>
989
990 -- hyau Bug 2852753
991 IF p_calling_module = 'SELF_SERVICE' THEN
992
993 OPEN cur_proj_id;
994 FETCH cur_proj_id INTO l_cur_project_id;
995 CLOSE cur_proj_id;
996
997 OPEN get_product_code(l_cur_project_id);
998 FETCH get_product_code INTO l_pm_product_code;
999 CLOSE get_product_code;
1000
1001 If l_pm_product_code IS NOT NULL THEN
1002 pa_pm_controls.Get_Project_actions_allowed
1003 (P_PM_PRODUCT_CODE => l_pm_product_code,
1004 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
1005 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
1006 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
1007 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
1008 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
1009 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
1010 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
1011 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
1012 P_ADD_TASK_ALLOWED => l_add_task_allowed,
1013 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
1014 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
1015 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
1016 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
1017 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
1018 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
1019 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
1020 P_ERROR_CODE => l_err_code,
1021 P_ERROR_STACK => l_err_stack,
1022 P_ERROR_STAGE => l_err_stage );
1023
1024 IF l_err_code <> 0 THEN
1025 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1026 p_msg_name => l_err_stage);
1027 END IF;
1028
1029 OPEN cur_task_attr;
1030 FETCH cur_task_attr INTO l_task_number, l_task_name, l_task_description, l_organization_name;
1031 CLOSE cur_task_attr;
1032
1033 -- Check Update Task number
1034 IF ( l_task_number <> p_task_number ) THEN
1035 IF l_update_task_num_allowed = 'N' THEN
1036 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1037 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_NUM');
1038 raise FND_API.G_EXC_ERROR;
1039 END IF;
1040 END IF;
1041
1042 -- Check Update Task Name
1043 IF ( l_task_name <> p_task_name ) THEN
1044 IF l_update_task_name_allowed = 'N' THEN
1045 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1046 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_NAME');
1047 raise FND_API.G_EXC_ERROR;
1048 END IF;
1049 END IF;
1050
1051 -- If financial task exists, Check Update Task Date
1052 IF ('Y' = PA_PROJECT_DATES_UTILS.CHECK_FINANCIAL_TASK_EXISTS(p_proj_element_id => p_task_id)) THEN
1053 OPEN cur_trans_dates(p_task_id);
1054 FETCH cur_trans_dates INTO l_trans_start_date, l_trans_finish_date;
1055 CLOSE cur_trans_dates;
1056
1057 -- if dates are different then check the pm controls
1058 IF ( nvl(p_transaction_start_date, sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) OR
1059 ( nvl(p_transaction_finish_date, sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) THEN
1060
1061 IF ( l_trans_start_date is not null and p_transaction_start_date is not null and l_trans_start_date - p_transaction_start_date <> 0) OR
1062 ( l_trans_finish_date is not null and p_transaction_finish_date is not null and l_trans_finish_date - p_transaction_finish_date <> 0) OR
1063 ( l_trans_start_date is null and p_transaction_start_date is not null) OR
1064 ( l_trans_start_date is not null and p_transaction_start_date is null) OR
1065 ( l_trans_finish_date is null and p_transaction_finish_date is not null) OR
1066 ( l_trans_finish_date is not null and p_transaction_finish_date is null) THEN
1067 IF l_update_task_dates_allowed = 'N' THEN
1068 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1069 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_DATES');
1070 raise FND_API.G_EXC_ERROR;
1071 END IF;
1072 END IF;
1073 END IF;
1074 END IF;
1075
1076 -- Check Update Task Description
1077 IF (l_task_description is not null and p_task_description is not null and l_task_description <> p_task_description ) OR
1078 (l_task_description is null and p_task_description is not null) OR
1079 (l_task_description is not null and p_task_description is null) THEN
1080 IF l_update_task_desc_allowed = 'N' THEN
1081 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1082 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_DESC');
1083 raise FND_API.G_EXC_ERROR;
1084 END IF;
1085 END IF;
1086
1087 -- Check Update Task Organization
1088 IF (l_organization_name is not null and p_carrying_out_org_name is not null and l_organization_name <> p_carrying_out_org_name ) OR
1089 (l_organization_name is null and p_carrying_out_org_name is not null) OR
1090 (l_organization_name is not null and p_carrying_out_org_name is null) THEN
1091 IF l_update_task_org_allowed = 'N' THEN
1092 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1093 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_ORG');
1094 raise FND_API.G_EXC_ERROR;
1095 END IF;
1096 END IF;
1097
1098 END IF;
1099 END IF;
1100
1101 -- end hyau Bug 2852753
1102
1103
1104 --dbms_output.put_line( 'Lock row ' );
1105
1106 IF (p_calling_module <> 'FORMS')
1107 THEN
1108 --Lock row
1109 IF( p_validate_only <> FND_API.G_TRUE) THEN
1110 BEGIN
1111 select 'x' into l_dummy
1112 from PA_PROJ_ELEMENTS
1113 where proj_element_id = p_task_id
1114 and record_version_number = p_record_version_number
1115 for update of record_version_number NOWAIT;
1116 EXCEPTION
1117 WHEN TIMEOUT_ON_RESOURCE THEN
1118 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1119 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1120 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1121 WHEN NO_DATA_FOUND THEN
1122 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1123 p_msg_name => 'PA_XC_RECORD_CHANGED');
1124 l_msg_data := 'PA_XC_RECORD_CHANGED';
1125 WHEN OTHERS THEN
1126 IF SQLCODE = -54 then
1127 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1128 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1129 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1130 ELSE
1131 raise;
1132 END IF;
1133 END;
1134 ELSE
1135 --dbms_output.put_line( 'check record_version_number ' );
1136
1137 --check record_version_number
1138 BEGIN
1139 select 'x' into l_dummy
1140 from PA_PROJ_ELEMENTS
1141 where proj_element_id = p_task_id
1142 and record_version_number = p_record_version_number;
1143 EXCEPTION
1144 WHEN NO_DATA_FOUND THEN
1145 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1146 p_msg_name => 'PA_XC_RECORD_CHANGED');
1147 l_msg_data := 'PA_XC_RECORD_CHANGED';
1148 WHEN OTHERS THEN
1149 RAISE;
1150 END;
1151 END IF;
1152
1153 l_msg_count := FND_MSG_PUB.count_msg;
1154
1155 IF l_msg_count > 0 THEN
1156 x_msg_count := l_msg_count;
1157 x_return_status := 'E';
1158 RAISE FND_API.G_EXC_ERROR;
1159 END IF;
1160 END IF;
1161
1162 --Bug 2168170
1163 IF p_task_number IS NULL
1164 THEN
1165 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1166 p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
1167 raise FND_API.G_EXC_ERROR;
1168 END IF;
1169
1170 IF p_task_name IS NULL
1171 THEN
1172 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1173 p_msg_name => 'PA_PS_TASK_NAME_NULL');
1174 raise FND_API.G_EXC_ERROR;
1175 END IF;
1176
1177 --Bug 2168170
1178
1179 --dbms_output.put_line( 'Before calling Name to Id conv ' );
1180
1181 --my_error_msg( 'Before calling Name to Id conv. ' );
1182 --The following check is required bcoz AMG passes only task manager id but not task manager
1183 --name. So for AMG p_check_id_flag should always be 'Y' not 'A'.
1184 --Confirmed with Selva.
1185
1186 IF (p_calling_module = 'AMG')
1187 THEN
1188 --Check Task Manager and Task Manager Id
1189 IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1190 (p_task_manager_name IS NOT NULL)) OR
1191 ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1192 (p_task_manager_id IS NOT NULL)) THEN
1193 --Call Check API.
1194 select project_id into l_project_id
1195 from PA_PROJ_ELEMENTS
1196 where proj_element_id = p_task_id;
1197
1198 select MANAGER_PERSON_ID into l_cur_task_mgr_person_id
1199 from pa_proj_elements
1200 where proj_element_id = p_task_id;
1201
1202 If (p_task_manager_id <> l_cur_task_mgr_person_id)
1203 OR (l_cur_task_mgr_person_id IS NULL)
1204 OR (p_task_manager_id IS NULL) THEN
1205 --end changes for task manager
1206
1207 pa_tasks_maint_utils.check_task_mgr_name_or_id(
1208 p_task_mgr_name => p_task_manager_name,
1209 p_task_mgr_id => p_task_manager_id,
1210 p_project_id => l_project_id,
1211 p_check_id_flag => 'Y',
1212 x_task_mgr_id => l_task_manager_id,
1213 x_return_status => l_return_status,
1214 x_error_msg_code => l_error_msg_code);
1215 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1216 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1217 p_msg_name => l_error_msg_code);
1218 raise FND_API.G_EXC_ERROR; -- bug 4165509
1219 END IF;
1220 ELSE
1221 l_task_manager_id := l_cur_task_mgr_person_id;
1222 END IF;
1223 END IF; --End Name-Id Conversion
1224 END IF;
1225
1226 IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
1227 --Check Task Manager and Task Manager Id
1228 /* Bug 2769960 -- added check for task_manager is passed as null
1229 If task manager is passed as null it means user want to remove task manager.
1230 there is no way in self service, so that mgr_id is passed but not mgr_name
1231 */
1232 IF p_task_manager_name IS NULL THEN
1233 l_task_manager_id := null;
1234 ELSIF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1235 (p_task_manager_name IS NOT NULL)) THEN
1236 --Call Check API.
1237 --added for task manager changes
1238 select project_id into l_project_id
1239 from PA_PROJ_ELEMENTS
1240 where proj_element_id = p_task_id;
1241
1242 OPEN get_mgr_info;
1243 FETCH get_mgr_info INTO l_cur_task_mgr_person_id, l_cur_task_mgr_person;
1244 CLOSE get_mgr_info;
1245
1246 If (p_task_manager_id <> l_cur_task_mgr_person_id or p_task_manager_name <> l_cur_task_mgr_person)
1247 --hsiu: added for bug 2688475
1248 --need these validation for expired project members
1249 -- who are still task managers
1250 OR (l_cur_task_mgr_person_id IS NULL)
1251 OR (p_task_manager_id IS NULL)
1252 OR (l_cur_task_mgr_person IS NULL)
1253 OR (p_task_manager_name IS NULL) THEN
1254 --end changes for task manager
1255
1256 pa_tasks_maint_utils.check_task_mgr_name_or_id(
1257 p_task_mgr_name => p_task_manager_name,
1258 p_task_mgr_id => p_task_manager_id,
1259 p_project_id => l_project_id,
1260 p_check_id_flag => 'A', --bug fix 2646762
1261 x_task_mgr_id => l_task_manager_id,
1262 x_return_status => l_return_status,
1263 x_error_msg_code => l_error_msg_code);
1264
1265 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1266 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1267 p_msg_name => l_error_msg_code);
1268 raise FND_API.G_EXC_ERROR; -- bug 4165509
1269 END IF;
1270
1271 --task manager changes
1272 --hsiu: added for bug 2688475
1273 ELSE
1274 l_task_manager_id := l_cur_task_mgr_person_id;
1275 END IF;
1276 --end task manager changes
1277 END IF; --End Name-Id Conversion
1278
1279 --Check Carrying out organization name and Carrying out organization Id
1280 IF ((p_carrying_out_org_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1281 (p_carrying_out_org_name IS NOT NULL)) OR
1282 ((p_carrying_out_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1283 (p_carrying_out_org_id IS NOT NULL)) THEN
1284 --dbms_output.put_line( 'Before calling Name to Id conv : Check_OrgName_Or_Id' );
1285
1286 --dbms_output.put_line( 'Before Id to name p_carrying_out_org_id '||p_carrying_out_org_id );
1287 --dbms_output.put_line( 'Before Id to name p_carrying_out_org_name '||p_carrying_out_org_name );
1288
1289 --my_error_msg( 'p_carrying_out_org_id '||p_carrying_out_org_id );
1290 --my_error_msg( 'p_carrying_out_org_name '||p_carrying_out_org_name );
1291
1292 IF p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1293 THEN
1294 l_carrying_out_org_id := FND_API.G_MISS_NUM;
1295 ELSE
1296 l_carrying_out_org_id := p_carrying_out_org_id;
1297 END IF;
1298
1299 pa_hr_org_utils.Check_OrgName_Or_Id
1300 (p_organization_id => l_carrying_out_org_id
1301 ,p_organization_name => p_carrying_out_org_name
1302 ,p_check_id_flag => 'A'
1303 --,x_organization_id => l_carrying_out_org_id * commented for Bug: 4537865
1304 ,x_organization_id => l_new_carrying_out_org_id -- added for bug 4537865
1305 ,x_return_status => l_return_status
1306 ,x_error_msg_code => l_error_msg_code);
1307
1308 -- added for bug 4537865
1309 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1310 l_carrying_out_org_id := l_new_carrying_out_org_id;
1311 END IF;
1312 -- added for bug 4537865
1313 --dbms_output.put_line( 'After Id to name p_carrying_out_org_id '||p_carrying_out_org_id );
1314 --dbms_output.put_line( 'After Id to name l_carrying_out_org_id '||l_carrying_out_org_id );
1315
1316
1317 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1318 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1319 p_msg_name => l_error_msg_code);
1320 END IF;
1321 END IF; --End Name-Id Conversion
1322 ELSE
1323 l_task_manager_id := p_task_manager_id;
1324 l_carrying_out_org_id := p_carrying_out_org_id;
1325 END IF;
1326 --dbms_output.put_line( 'After calling Name to Id conv : Check_OrgName_Or_Id' );
1327 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1328 x_msg_count := FND_MSG_PUB.count_msg;
1329 IF x_msg_count = 1 then
1330 pa_interface_utils_pub.get_messages
1331 (p_encoded => FND_API.G_TRUE,
1332 p_msg_index => 1,
1333 p_msg_count => l_msg_count,
1334 p_msg_data => l_msg_data,
1335 p_data => l_data,
1336 p_msg_index_out => l_msg_index_out);
1337 x_msg_data := l_data;
1338 END IF;
1339 raise FND_API.G_EXC_ERROR;
1340 END IF;
1341
1342 IF ((p_task_progress_entry_page <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1343 (p_task_progress_entry_page IS NOT NULL)) OR
1344 ((p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1345 (p_task_progress_entry_page_id IS NOT NULL)) THEN
1346
1347 IF (p_task_progress_entry_page_ID = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1348 l_task_progress_entry_page_id := FND_API.G_MISS_NUM;
1349 ELSE
1350 l_task_progress_entry_page_id := p_task_progress_entry_page_id;
1351 END IF;
1352
1353 pa_page_layout_utils.Check_pagelayout_Name_Or_Id(
1354 p_pagelayout_name => p_task_progress_entry_page
1355 ,p_pagetype_code => 'AI'
1356 ,x_pagelayout_id => l_task_progress_entry_page_id
1357 ,x_return_status => l_return_status
1358 ,x_error_message_code => l_error_msg_code
1359 );
1360
1361 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1362 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1363 p_msg_name => l_error_msg_code);
1364 END IF;
1365
1366
1367 END IF;
1368
1369 /*Bug 4089623 Lead Days Cannot be negative */
1370 IF ( nvl(p_wf_lead_days,0) < 0 )
1371 THEN
1372 PA_UTILS.add_message('PA','PA_INVALID_LEAD_DAYS');
1373 l_return_status := FND_API.G_RET_STS_ERROR;
1374 END IF;
1375
1376 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1377 x_msg_count := FND_MSG_PUB.count_msg;
1378 IF x_msg_count = 1 then
1379 pa_interface_utils_pub.get_messages
1380 (p_encoded => FND_API.G_TRUE,
1381 p_msg_index => 1,
1382 p_msg_count => l_msg_count,
1383 p_msg_data => l_msg_data,
1384 p_data => l_data,
1385 p_msg_index_out => l_msg_index_out);
1386 x_msg_data := l_data;
1387 END IF;
1388 raise FND_API.G_EXC_ERROR;
1389 END IF;
1390
1391 --my_error_msg( 'Before calling private API. ' );
1392
1393 --dbms_output.put_line( 'Before calling private API.' );
1394 PA_TASK_PVT1.Update_Task(
1395 p_api_version => p_api_version
1396 ,p_init_msg_list => p_init_msg_list
1397 ,p_commit => p_commit
1398 ,p_validate_only => p_validate_only
1399 ,p_validation_level => p_validation_level
1400 ,p_calling_module => p_calling_module
1401 ,p_debug_mode => p_debug_mode
1402 ,p_max_msg_count => p_max_msg_count
1403 ,p_ref_task_id => p_ref_task_id
1404 ,p_peer_or_sub => p_peer_or_sub
1405 ,p_task_id => p_task_id
1406 ,p_task_number => rtrim(p_task_number)
1407 ,p_task_name => rtrim(p_task_name)
1408 ,p_task_description => rtrim(p_task_description)
1409 ,p_location_id => p_location_id
1410 ,p_country => p_country
1411 ,p_territory_code => p_territory_code
1412 ,p_state_region => p_state_region
1413 ,p_city => p_city
1414 ,p_task_manager_id => l_task_manager_id
1415 ,p_carrying_out_org_id => l_carrying_out_org_id
1416 ,p_priority_code => p_priority_code
1417 ,p_TYPE_ID => p_TYPE_ID
1418 ,p_status_code => p_status_code
1419 ,p_inc_proj_progress_flag => p_inc_proj_progress_flag
1420 ,p_pm_product_code => p_pm_product_code
1421 ,P_PM_SOURCE_CODE => P_PM_SOURCE_CODE -- Huawei 15876400 source code
1422 ,p_pm_task_reference => p_pm_task_reference
1423 ,p_closed_date => p_closed_date
1424 ,p_transaction_start_date => p_transaction_start_date
1425 ,p_transaction_finish_date => p_transaction_finish_date
1426 ,p_attribute_category => p_attribute_category
1427 ,p_attribute1 => rtrim(p_attribute1)
1428 ,p_attribute2 => rtrim(p_attribute2)
1429 ,p_attribute3 => rtrim(p_attribute3)
1430 ,p_attribute4 => rtrim(p_attribute4)
1431 ,p_attribute5 => rtrim(p_attribute5)
1432 ,p_attribute6 => rtrim(p_attribute6)
1433 ,p_attribute7 => rtrim(p_attribute7)
1434 ,p_attribute8 => rtrim(p_attribute8)
1435 ,p_attribute9 => rtrim(p_attribute9)
1436 ,p_attribute10 => rtrim(p_attribute10)
1437 ,p_attribute11 => rtrim(p_attribute11)
1438 ,p_attribute12 => rtrim(p_attribute12)
1439 ,p_attribute13 => rtrim(p_attribute13)
1440 ,p_attribute14 => rtrim(p_attribute14)
1441 ,p_attribute15 => rtrim(p_attribute15)
1442 ,p_address_id => p_address_id
1443 ,p_address1 => p_address1
1444 ,p_work_type_id => p_work_type_id
1445 ,p_service_type_code => p_service_type_code
1446 ,p_chargeable_flag => p_chargeable_flag
1447 ,p_billable_flag => p_billable_flag
1448 ,p_receive_project_invoice_flag => p_receive_project_invoice_flag
1449 ,p_task_weighting_deriv_code => p_task_weighting_deriv_code
1450 ,p_work_item_code => p_work_item_code
1451 ,p_uom_code => p_uom_code
1452 ,p_wq_actual_entry_code => p_wq_actual_entry_code
1453 ,p_task_progress_entry_page_id => l_task_progress_entry_page_id
1454 ,p_task_progress_entry_page => p_task_progress_entry_page
1455 ,p_parent_structure_id => p_parent_structure_id
1456 ,p_phase_code => p_phase_code
1457 ,p_phase_version_id => p_phase_version_id
1458
1459 ,p_record_version_number => p_record_version_number
1460 ,p_tk_attribute_category => p_tk_attribute_category
1461 ,p_tk_attribute1 => p_tk_attribute1
1462 ,p_tk_attribute2 => p_tk_attribute2
1463 ,p_tk_attribute3 => p_tk_attribute3
1464 ,p_tk_attribute4 => p_tk_attribute4
1465 ,p_tk_attribute5 => p_tk_attribute5
1466 ,p_tk_attribute6 => p_tk_attribute6
1467 ,p_tk_attribute7 => p_tk_attribute7
1468 ,p_tk_attribute8 => p_tk_attribute8
1469 ,p_tk_attribute9 => p_tk_attribute9
1470 ,p_tk_attribute10 => p_tk_attribute10
1471 -- Begin : Added for FP_M changes Bug 3305199
1472 ,p_Base_Perc_Comp_Deriv_Code => p_Base_Perc_Comp_Deriv_Code
1473 -- End : Added for FP_M changes Bug 3305199
1474 ,p_gen_etc_src_code => p_gen_etc_src_code
1475 ,p_wf_item_type => p_wf_item_type
1476 ,p_wf_process => p_wf_process
1477 ,p_wf_lead_days => p_wf_lead_days
1478 ,p_wf_enabled_flag => p_wf_enabled_flag
1479 ,x_return_status => l_return_status
1480 ,x_msg_count => x_msg_count
1481 ,x_msg_data => x_msg_data
1482 ,p_shared => p_shared -- Bug 3451073
1483 ,p_dates_check =>p_dates_check --bug 8301015
1484 );
1485
1486 --dbms_output.put_line( 'After calling private API.' );
1487
1488 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1489 x_msg_count := FND_MSG_PUB.count_msg;
1490 IF x_msg_count = 1 then
1491 pa_interface_utils_pub.get_messages
1492 (p_encoded => FND_API.G_TRUE,
1493 p_msg_index => 1,
1494 p_msg_count => l_msg_count,
1495 p_msg_data => l_msg_data,
1496 p_data => l_data,
1497 p_msg_index_out => l_msg_index_out);
1498 x_msg_data := l_data;
1499 END IF;
1500 raise FND_API.G_EXC_ERROR;
1501 END IF;
1502
1503 x_return_status := FND_API.G_RET_STS_SUCCESS;
1504
1505 IF (p_commit = FND_API.G_TRUE) THEN
1506 COMMIT;
1507 END IF;
1508
1509 IF (p_debug_mode = 'Y') THEN
1510 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK END');
1511 END IF;
1512 EXCEPTION
1513 when FND_API.G_EXC_ERROR then
1514 if p_commit = FND_API.G_TRUE then
1515 rollback to update_task;
1516 end if;
1517 x_return_status := FND_API.G_RET_STS_ERROR;
1518 when FND_API.G_EXC_UNEXPECTED_ERROR then
1519 if p_commit = FND_API.G_TRUE then
1520 rollback to update_task;
1521 end if;
1522 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1523 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1524 p_procedure_name => 'UPDATE_TASK',
1525 p_error_text => SUBSTRB(SQLERRM,1,240));
1526 when OTHERS then
1527 if p_commit = FND_API.G_TRUE then
1528 rollback to update_task;
1529 end if;
1530 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1531 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1532 p_procedure_name => 'UPDATE_TASK',
1533 p_error_text => SUBSTRB(SQLERRM,1,240));
1534 raise;
1535
1536 END Update_Task;
1537
1538 -- API name : Create_Task_version
1539 -- Type : Public procedure
1540 -- Pre-reqs : None
1541 -- Return Value : N/A
1542 -- Prameters
1543 -- p_api_version IN NUMBER N Not Null 1.0
1544 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
1545 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
1546 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
1547 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
1548 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
1549 -- p_debug_mode IN VARCHAR2 N Null N
1550 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1551 -- p_ref_task_version_id IN NUMBER N Not Null
1552 -- p_peer_or_sub IN VARCHAR2 N Not Null
1553 -- p_task_id IN NUMBER N Not Null
1554 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1555 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1556 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1557 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1558 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1559 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1560 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1561 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1562 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1563 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1564 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1565 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1566 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1567 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1568 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1569 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1570 -- x_task_version_id OUT NUMBER N Null
1571 -- x_return_status OUT VARCHAR2 N Null
1572 -- x_msg_count OUT NUMBER N Null
1573 -- x_msg_data OUT VARCHAR2 N Null
1574 --
1575 -- History
1576 --
1577 -- 23-OCT-01 Majid Ansari -Created
1578 --
1579
1580 PROCEDURE Create_Task_Version(
1581 p_api_version IN NUMBER :=1.0,
1582 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
1583 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
1584 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
1585 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
1586 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
1587 p_debug_mode IN VARCHAR2 :='N',
1588 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1589 p_ref_task_version_id IN NUMBER,
1590 p_peer_or_sub IN VARCHAR2,
1591 p_task_id IN NUMBER,
1592 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1593 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1594 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1595 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1596 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1597 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1598 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1599 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1600 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1601 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1602 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1603 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1604 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1605 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1606 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1607 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1608
1609 p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1610 p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
1611 --bug 3301192
1612 p_financial_task_flag IN VARCHAR2 := 'N',
1613 --bug 3301192
1614 x_task_version_id OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1615 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1616 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1617 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1618 ) IS
1619 l_api_name CONSTANT VARCHAR(30) := 'CREATE_TASK_VERSION';
1620 l_api_version CONSTANT NUMBER := 1.0;
1621
1622 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1623 l_return_status VARCHAR2(1);
1624 l_msg_count NUMBER;
1625 l_msg_data VARCHAR2(250);
1626 l_data VARCHAR2(250);
1627 l_msg_index_out NUMBER;
1628 l_error_msg_code VARCHAR2(250);
1629
1630 l_carrying_out_org_id NUMBER;
1631 l_task_manager_id NUMBER;
1632 BEGIN
1633
1634 pa_debug.init_err_stack ('PA_TASK_PUB1.CREATE_TASK_VERSION');
1635
1636 IF (p_debug_mode = 'Y') THEN
1637 pa_debug.debug('PA_TASK_PUB1.CREATE_TASK_VERSION begin');
1638 END IF;
1639
1640 IF (p_commit = FND_API.G_TRUE) THEN
1641 savepoint create_Task_version;
1642 END IF;
1643
1644 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
1645 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1646 END IF;
1647
1648
1649 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
1650 FND_MSG_PUB.initialize;
1651 END IF;
1652
1653 --dbms_output.put_line( 'Before private API' );
1654
1655 PA_TASK_PVT1.Create_Task_Version(
1656 p_api_version => p_api_version
1657 ,p_init_msg_list => p_init_msg_list
1658 ,p_commit => p_commit
1659 ,p_validate_only => p_validate_only
1660 ,p_validation_level => p_validation_level
1661 ,p_calling_module => p_calling_module
1662 ,p_debug_mode => p_debug_mode
1663 ,p_max_msg_count => p_max_msg_count
1664 ,p_ref_task_version_id => p_ref_task_version_id
1665 ,p_peer_or_sub => p_peer_or_sub
1666 ,p_task_id => p_task_id
1667 ,p_attribute_category => p_attribute_category
1668 ,p_attribute1 => p_attribute1
1669 ,p_attribute2 => p_attribute2
1670 ,p_attribute3 => p_attribute3
1671 ,p_attribute4 => p_attribute4
1672 ,p_attribute5 => p_attribute5
1673 ,p_attribute6 => p_attribute6
1674 ,p_attribute7 => p_attribute7
1675 ,p_attribute8 => p_attribute8
1676 ,p_attribute9 => p_attribute9
1677 ,p_attribute10 => p_attribute10
1678 ,p_attribute11 => p_attribute11
1679 ,p_attribute12 => p_attribute12
1680 ,p_attribute13 => p_attribute13
1681 ,p_attribute14 => p_attribute14
1682 ,p_attribute15 => p_attribute15
1683 ,p_WEIGHTING_PERCENTAGE => p_WEIGHTING_PERCENTAGE
1684 ,p_TASK_UNPUB_VER_STATUS_CODE => p_TASK_UNPUB_VER_STATUS_CODE
1685 ,p_financial_task_flag => p_financial_task_flag -- FP_M changes : Bug 3305199 : Bhumesh
1686 ,x_task_version_id => x_task_version_id
1687 ,x_return_status => x_return_status
1688 ,x_msg_count => x_msg_count
1689 ,x_msg_data => x_msg_data
1690 );
1691
1692 --dbms_output.put_line( 'Status after private call in public API '||x_return_status );
1693 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1694 --IF (x_return_status <> 'S' ) THEN
1695 x_msg_count := FND_MSG_PUB.count_msg;
1696 IF x_msg_count = 1 then
1697 pa_interface_utils_pub.get_messages
1698 (p_encoded => FND_API.G_TRUE,
1699 p_msg_index => 1,
1700 p_msg_count => l_msg_count,
1701 p_msg_data => l_msg_data,
1702 p_data => l_data,
1703 p_msg_index_out => l_msg_index_out);
1704 x_msg_data := l_data;
1705 END IF;
1706 --dbms_output.put_line( 'raising exception '||x_return_status );
1707
1708 raise FND_API.G_EXC_ERROR;
1709 END IF;
1710
1711 --dbms_output.put_line( 'Final status '||x_return_status );
1712
1713 x_return_status := FND_API.G_RET_STS_SUCCESS;
1714
1715 --dbms_output.put_line( 'Final status asasas'||x_return_status );
1716
1717 IF (p_commit = FND_API.G_TRUE) THEN
1718 COMMIT;
1719 END IF;
1720
1721 IF (p_debug_mode = 'Y') THEN
1722 pa_debug.debug('PA_PROJECT_STRUCTURE_PUB1.CREATE_TASK_VERSION END');
1723 END IF;
1724 EXCEPTION
1725 when FND_API.G_EXC_ERROR then
1726 if p_commit = FND_API.G_TRUE then
1727 rollback to create_task_version;
1728 end if;
1729 x_return_status := FND_API.G_RET_STS_ERROR;
1730 --dbms_output.put_line( 'Status in public API exception '||x_return_status );
1731
1732 when FND_API.G_EXC_UNEXPECTED_ERROR then
1733 if p_commit = FND_API.G_TRUE then
1734 rollback to create_task_version;
1735 end if;
1736 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1737 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1738 p_procedure_name => 'CREATE_TASK_VERSION',
1739 p_error_text => SUBSTRB(SQLERRM,1,240));
1740 when OTHERS then
1741 if p_commit = FND_API.G_TRUE then
1742 rollback to create_task_version;
1743 end if;
1744 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1745 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1746 p_procedure_name => 'CREATE_TASK_VERSION',
1747 p_error_text => SUBSTRB(SQLERRM,1,240));
1748 raise;
1749 END Create_Task_Version;
1750
1751 -- API name : Update_Task_version
1752 -- Type : Public procedure
1753 -- Pre-reqs : None
1754 -- Return Value : N/A
1755 -- Prameters
1756 -- p_api_version IN NUMBER N Not Null 1.0
1757 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
1758 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
1759 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
1760 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
1761 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
1762 -- p_debug_mode IN VARCHAR2 N Null N
1763 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1764 -- p_task_version_id IN NUMBER N Null
1765 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1766 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1767 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1768 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1769 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1770 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1771 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1772 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1773 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1774 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1775 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1776 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1777 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1778 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1779 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1780 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1781 -- p_record_version_number IN NUMBER
1782 -- x_return_status OUT VARCHAR2 N Null
1783 -- x_msg_count OUT NUMBER N Null
1784 -- x_msg_data OUT VARCHAR2 N Null
1785 --
1786 -- History
1787 --
1788 -- 23-OCT-01 Majid Ansari -Created
1789 --
1790 --
1791
1792 PROCEDURE Update_Task_Version(
1793 p_api_version IN NUMBER :=1.0,
1794 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
1795 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
1796 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
1797 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
1798 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
1799 p_debug_mode IN VARCHAR2 :='N',
1800 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1801 p_ref_task_version_id IN NUMBER,
1802 p_peer_or_sub IN VARCHAR2,
1803 p_task_version_id IN NUMBER,
1804 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1805 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1806 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1807 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1808 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1809 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1810 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1811 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1812 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1813 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1814 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1815 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1816 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1817 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1818 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1819 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1820 p_record_version_number IN NUMBER,
1821 p_action IN VARCHAR2 := 'NULL',
1822
1823 p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1824 p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
1825
1826 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1827 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1828 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1829 ) IS
1830 l_api_name CONSTANT VARCHAR(30) := 'UPDATE_TASK_VERSION';
1831 l_api_version CONSTANT NUMBER := 1.0;
1832
1833 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1834 l_return_status VARCHAR2(1);
1835 l_msg_count NUMBER;
1836 l_msg_data VARCHAR2(250);
1837 l_data VARCHAR2(250);
1838 l_msg_index_out NUMBER;
1839 l_error_msg_code VARCHAR2(250);
1840 l_dummy VARCHAR2(1);
1841
1842 --l_carrying_out_org_id NUMBER;
1843 --l_task_manager_id NUMBER;
1844 BEGIN
1845
1846 pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK_VERSION');
1847
1848 IF (p_debug_mode = 'Y') THEN
1849 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_VERSION begin');
1850 END IF;
1851
1852 IF (p_commit = FND_API.G_TRUE) THEN
1853 savepoint update_Task_version;
1854 END IF;
1855
1856 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
1857 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1858 END IF;
1859
1860
1861 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
1862 FND_MSG_PUB.initialize;
1863 END IF;
1864
1865 --Lock row
1866 IF( p_validate_only <> FND_API.G_TRUE) THEN
1867 BEGIN
1868 select 'x' into l_dummy
1869 from PA_PROJ_ELEMENT_VERSIONS
1870 where element_version_id = p_task_version_id
1871 and record_version_number = p_record_version_number
1872 for update of record_version_number NOWAIT;
1873 EXCEPTION
1874 WHEN TIMEOUT_ON_RESOURCE THEN
1875 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1876 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1877 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1878 WHEN NO_DATA_FOUND THEN
1879 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1880 p_msg_name => 'PA_XC_RECORD_CHANGED');
1881 l_msg_data := 'PA_XC_RECORD_CHANGED';
1882 WHEN OTHERS THEN
1883 IF SQLCODE = -54 then
1884 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1885 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1886 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1887 ELSE
1888 raise;
1889 END IF;
1890 END;
1891 ELSE
1892 --check record_version_number
1893 BEGIN
1894 select 'x' into l_dummy
1895 from PA_PROJ_ELEMENT_VERSIONS
1896 where element_version_id = p_task_version_id
1897 and record_version_number = p_record_version_number;
1898 EXCEPTION
1899 WHEN NO_DATA_FOUND THEN
1900 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1901 p_msg_name => 'PA_XC_RECORD_CHANGED');
1902 l_msg_data := 'PA_XC_RECORD_CHANGED';
1903 WHEN OTHERS THEN
1904 RAISE;
1905 END;
1906 END IF;
1907
1908 l_msg_count := FND_MSG_PUB.count_msg;
1909 IF l_msg_count > 0 THEN
1910 x_msg_count := l_msg_count;
1911 x_return_status := 'E';
1912 RAISE FND_API.G_EXC_ERROR;
1913 END IF;
1914
1915
1916 --dbms_output.put_line('call update task version pvt');
1917 PA_TASK_PVT1.Update_Task_Version(
1918 p_api_version => p_api_version
1919 ,p_init_msg_list => p_init_msg_list
1920 ,p_commit => p_commit
1921 ,p_validate_only => p_validate_only
1922 ,p_validation_level => p_validation_level
1923 ,p_calling_module => p_calling_module
1924 ,p_debug_mode => p_debug_mode
1925 ,p_max_msg_count => p_max_msg_count
1926 ,p_ref_task_version_id => p_ref_task_version_id
1927 ,p_peer_or_sub => p_peer_or_sub
1928 ,p_task_version_id => p_task_version_id
1929 ,p_attribute_category => p_attribute_category
1930 ,p_attribute1 => p_attribute1
1931 ,p_attribute2 => p_attribute2
1932 ,p_attribute3 => p_attribute3
1933 ,p_attribute4 => p_attribute4
1934 ,p_attribute5 => p_attribute5
1935 ,p_attribute6 => p_attribute6
1936 ,p_attribute7 => p_attribute7
1937 ,p_attribute8 => p_attribute8
1938 ,p_attribute9 => p_attribute9
1939 ,p_attribute10 => p_attribute10
1940 ,p_attribute11 => p_attribute11
1941 ,p_attribute12 => p_attribute12
1942 ,p_attribute13 => p_attribute13
1943 ,p_attribute14 => p_attribute14
1944 ,p_attribute15 => p_attribute15
1945 ,p_record_version_number => p_record_version_number
1946 ,p_action => p_action
1947 ,p_WEIGHTING_PERCENTAGE => p_WEIGHTING_PERCENTAGE
1948 ,p_TASK_UNPUB_VER_STATUS_CODE => p_TASK_UNPUB_VER_STATUS_CODE
1949 ,x_return_status => l_return_status
1950 ,x_msg_count => x_msg_count
1951 ,x_msg_data => x_msg_data
1952 );
1953
1954 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1955 x_msg_count := FND_MSG_PUB.count_msg;
1956 IF x_msg_count = 1 then
1957 pa_interface_utils_pub.get_messages
1958 (p_encoded => FND_API.G_TRUE,
1959 p_msg_index => 1,
1960 p_msg_count => l_msg_count,
1961 p_msg_data => l_msg_data,
1962 p_data => l_data,
1963 p_msg_index_out => l_msg_index_out);
1964 x_msg_data := l_data;
1965 END IF;
1966 raise FND_API.G_EXC_ERROR;
1967 END IF;
1968
1969 x_return_status := FND_API.G_RET_STS_SUCCESS;
1970
1971 IF (p_commit = FND_API.G_TRUE) THEN
1972 COMMIT;
1973 END IF;
1974
1975 IF (p_debug_mode = 'Y') THEN
1976 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_VERSION END');
1977 END IF;
1978 EXCEPTION
1979 when FND_API.G_EXC_ERROR then
1980 if p_commit = FND_API.G_TRUE then
1981 rollback to update_task_version;
1982 end if;
1983 x_return_status := FND_API.G_RET_STS_ERROR;
1984 when FND_API.G_EXC_UNEXPECTED_ERROR then
1985 if p_commit = FND_API.G_TRUE then
1986 rollback to update_task_version;
1987 end if;
1988 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1989 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1990 p_procedure_name => 'UPDATE_TASK_VERSION',
1991 p_error_text => SUBSTRB(SQLERRM,1,240));
1992 when OTHERS then
1993 if p_commit = FND_API.G_TRUE then
1994 rollback to update_task_version;
1995 end if;
1996 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1997 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1998 p_procedure_name => 'UPDATE_TASK_VERSION',
1999 p_error_text => SUBSTRB(SQLERRM,1,240));
2000 raise;
2001 END update_task_version;
2002
2003 -- API name : Delete_Task_version
2004 -- Type : Public procedure
2005 -- Pre-reqs : None
2006 -- Return Value : N/A
2007 -- Prameters
2008 -- p_api_version IN NUMBER N Not Null 1.0
2009 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
2010 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
2011 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
2012 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
2013 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
2014 -- p_debug_mode IN VARCHAR2 N Null N
2015 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2016 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2017 -- p_task_version_id IN NUMBER N Null
2018 -- p_record_version_number IN NUMBER
2019 -- x_return_status OUT VARCHAR2 N Null
2020 -- x_msg_count OUT NUMBER N Null
2021 -- x_msg_data OUT VARCHAR2 N Null
2022 --
2023 -- History
2024 --
2025 -- 23-OCT-01 Majid Ansari -Created
2026 --
2027 --
2028
2029 PROCEDURE Delete_Task_Version(
2030 p_api_version IN NUMBER :=1.0,
2031 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
2032 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
2033 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
2034 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
2035 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
2036 p_debug_mode IN VARCHAR2 :='N',
2037 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2038 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2039 p_task_version_id IN NUMBER,
2040 p_record_version_number IN NUMBER,
2041 p_called_from_api IN VARCHAR2 := 'ABCD',
2042 p_structure_type IN VARCHAR2 := 'WORKPLAN', --bug 3301192
2043 p_calling_from IN VARCHAR2 := 'XYZ', -- Bug 6023347
2044 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2045 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2046 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2047 ) IS
2048 l_api_name CONSTANT VARCHAR(30) := 'DELETE_TASK_VERSION';
2049 l_api_version CONSTANT NUMBER := 1.0;
2050
2051 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2052 l_return_status VARCHAR2(1);
2053 l_msg_count NUMBER;
2054 l_msg_data VARCHAR2(250);
2055 l_data VARCHAR2(250);
2056 l_msg_index_out NUMBER;
2057 l_error_msg_code VARCHAR2(250);
2058 l_dummy VARCHAR2(1);
2059 l_err_code NUMBER := 0;
2060 l_err_stack VARCHAR2(630);
2061 l_err_stage VARCHAR2(80);
2062 --l_carrying_out_org_id NUMBER;
2063 --l_task_manager_id NUMBER;
2064
2065 -- hyau Bug 2852753
2066 l_delete_project_allowed VARCHAR2(1);
2067 l_update_proj_num_allowed VARCHAR2(1);
2068 l_update_proj_name_allowed VARCHAR2(1);
2069 l_update_proj_desc_allowed VARCHAR2(1);
2070 l_update_proj_dates_allowed VARCHAR2(1);
2071 l_update_proj_status_allowed VARCHAR2(1);
2072 l_update_proj_manager_allowed VARCHAR2(1);
2073 l_update_proj_org_allowed VARCHAR2(1);
2074 l_add_task_allowed VARCHAR2(1);
2075 l_delete_task_allowed VARCHAR2(1);
2076 l_update_task_num_allowed VARCHAR2(1);
2077 l_update_task_name_allowed VARCHAR2(1);
2078 l_update_task_dates_allowed VARCHAR2(1);
2079 l_update_task_desc_allowed VARCHAR2(1);
2080 l_update_parent_task_allowed VARCHAR2(1);
2081 l_update_task_org_allowed VARCHAR2(1);
2082
2083 x_err_code NUMBER := 0;
2084 x_err_stack VARCHAR2(200) := NULL;
2085 x_err_stage VARCHAR2(200) := NULL;
2086 l_error_occured VARCHAR2(1) := 'N' ; --Bug2929411
2087
2088 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
2089
2090 CURSOR get_product_code ( c_project_id NUMBER ) IS
2091 SELECT pm_product_code
2092 FROM PA_PROJECTS_ALL
2093 WHERE project_id = c_project_id;
2094
2095 l_project_id NUMBER;
2096 CURSOR cur_proj_id
2097 IS
2098 SELECT project_id
2099 FROM pa_proj_element_versions
2100 WHERE element_version_id = p_task_version_id;
2101
2102 -- end hyau Bug 2852753
2103
2104
2105 --hsiu: added for task version status
2106 CURSOR get_task_info(c_task_version_id NUMBER) IS
2107 select a.project_id, b.proj_element_id, parent_structure_version_id,
2108 TASK_UNPUB_VER_STATUS_CODE, b.link_task_flag
2109 from pa_proj_element_versions a,
2110 pa_proj_elements b --bug 4501280
2111 where element_version_id = c_task_version_id
2112 --bug 4501280
2113 AND a.proj_element_id = b.proj_element_id
2114 AND a.project_id = b.project_id
2115 --bug 4501280
2116 ;
2117 l_task_info_rec get_task_info%ROWTYPE;
2118 --end changes for task version status
2119
2120 l_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE ;
2121
2122 -- Bug Fix 4576640
2123 -- Adding a new check to stop users from deleting a linked task.
2124 -- Example:
2125 -- P1 - T1
2126 -- T2-P2
2127 -- In the above scenario we are not allowing the user to delete T2, as this is causing issues in PJI.
2128 -- Though this is a corner case as this happens only in deleting a task in a program which already has a
2129 -- published version.
2130 -- As per the bug updates, we are now stopping user from deleting a linked task and now user has to delete
2131 -- the link manually and then delete the task.
2132
2133 CURSOR is_linked_task(c_task_version_id NUMBER) IS
2134 SELECT 'Y'
2135 FROM DUAL
2136 WHERE EXISTS(
2137 SELECT pors.object_relationship_id
2138 FROM pa_object_relationships pors,
2139 pa_object_relationships pors1
2140 WHERE pors1.object_id_from1 = c_task_version_id
2141 AND pors.object_id_from1 = pors1.object_id_to1
2142 AND pors1.relationship_type = 'S'
2143 AND pors.relationship_type IN ('LW','LF')
2144 AND pors.object_id_from2 <> pors.object_id_to2
2145 AND pors.object_type_from = 'PA_TASKS'
2146 AND pors.object_type_to = 'PA_STRUCTURES');
2147
2148 l_linked_task VARCHAR2(1);
2149 --anurag
2150 l_ntf_id NUMBER;
2151
2152 cursor task_ntf(c_task_id NUMBER,c_project_id NUMBER) IS
2153 SELECT max(notification_id) ntf_id
2154 FROM WF_NOTIFICATIONS WFN
2155 WHERE message_type = 'PATASKWF'
2156 AND status = 'OPEN'
2157 --bug 13395163
2158 --bug 14284485
2159 AND EXISTS (
2160 SELECT /*+ NO_UNNEST */ 1
2161 FROM WF_NOTIFICATION_ATTRIBUTES
2162 WHERE notification_id = wfn.notification_id
2163 AND name = 'TASK_NUMBER'
2164 AND text_value like (select element_number from pa_proj_elements
2165 where proj_element_id = c_task_id)
2166 )
2167 AND EXISTS (
2168 SELECT /*+ NO_UNNEST */ 1
2169 FROM WF_NOTIFICATION_ATTRIBUTES
2170 WHERE notification_id = wfn.notification_id
2171 AND name = 'PROJECT_NUMBER'
2172 AND text_value like (select segment1 from pa_projects_all
2173 where project_id = c_project_id)
2174 );
2175
2176
2177 BEGIN
2178
2179 pa_debug.init_err_stack ('PA_TASK_PUB1.DELETE_TASK_VERSION');
2180
2181 IF (p_debug_mode = 'Y') THEN
2182 pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_VERSION begin');
2183 END IF;
2184
2185 IF (p_commit = FND_API.G_TRUE) THEN
2186 savepoint delete_Task_version;
2187 END IF;
2188
2189 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2190 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2191 END IF;
2192
2193
2194 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
2195 FND_MSG_PUB.initialize;
2196 END IF;
2197
2198 IF p_calling_module <> 'FORMS'
2199 THEN
2200 --Lock row
2201 IF( p_validate_only <> FND_API.G_TRUE) THEN
2202 BEGIN
2203 select 'x' into l_dummy
2204 from PA_PROJ_ELEMENT_VERSIONS
2205 where element_version_id = p_task_version_id
2206 and record_version_number = p_record_version_number
2207 for update of record_version_number NOWAIT;
2208 EXCEPTION
2209 WHEN TIMEOUT_ON_RESOURCE THEN
2210 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2211 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2212 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2213 l_error_occured := 'Y' ; --Bug2929411
2214 WHEN NO_DATA_FOUND THEN
2215 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2216 p_msg_name => 'PA_XC_RECORD_CHANGED');
2217 l_msg_data := 'PA_XC_RECORD_CHANGED';
2218 l_error_occured := 'Y' ; --Bug2929411
2219 WHEN OTHERS THEN
2220 IF SQLCODE = -54 then
2221 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2222 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2223 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2224 l_error_occured := 'Y' ; --Bug2929411
2225 ELSE
2226 raise;
2227 END IF;
2228 END;
2229 ELSE
2230 --check record_version_number
2231 BEGIN
2232 select 'x' into l_dummy
2233 from PA_PROJ_ELEMENT_VERSIONS
2234 where element_version_id = p_task_version_id
2235 and record_version_number = p_record_version_number;
2236 EXCEPTION
2237 WHEN NO_DATA_FOUND THEN
2238 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2239 p_msg_name => 'PA_XC_RECORD_CHANGED');
2240 l_msg_data := 'PA_XC_RECORD_CHANGED';
2241 l_error_occured := 'Y' ; --Bug2929411
2242 WHEN OTHERS THEN
2243 RAISE;
2244 END;
2245 END IF;
2246
2247 l_msg_count := FND_MSG_PUB.count_msg;
2248
2249 IF l_msg_count > 0 AND l_error_occured = 'Y' THEN
2250 x_msg_count := l_msg_count;
2251 x_return_status := 'E';
2252 RAISE FND_API.G_EXC_ERROR;
2253 END IF;
2254 END IF; --<< p_calling module >>
2255
2256 -- hyau Bug 2852753
2257 IF p_calling_module = 'SELF_SERVICE' THEN
2258
2259 OPEN cur_proj_id;
2260 FETCH cur_proj_id INTO l_project_id;
2261 CLOSE cur_proj_id;
2262
2263 OPEN get_product_code(l_project_id);
2264 FETCH get_product_code INTO l_pm_product_code;
2265 CLOSE get_product_code;
2266
2267 If l_pm_product_code IS NOT NULL THEN
2268 pa_pm_controls.Get_Project_actions_allowed
2269 (P_PM_PRODUCT_CODE => l_pm_product_code,
2270 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
2271 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
2272 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
2273 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
2274 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
2275 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
2276 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
2277 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
2278 P_ADD_TASK_ALLOWED => l_add_task_allowed,
2279 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
2280 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
2281 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
2282 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
2283 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
2284 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
2285 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
2286 P_ERROR_CODE => x_err_code,
2287 P_ERROR_STACK => x_err_stack,
2288 P_ERROR_STAGE => x_err_stage );
2289
2290 IF x_err_code <> 0 THEN
2291 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2292 p_msg_name => x_err_stage);
2293 END IF;
2294 IF l_delete_task_allowed = 'N' THEN
2295 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2296 p_msg_name => 'PA_PR_PM_CANNOT_DELETE');
2297 raise FND_API.G_EXC_ERROR;
2298 END IF;
2299 END IF;
2300 END IF;
2301
2302 -- end hyau Bug 2852753
2303
2304 --hsiu: task version status changes
2305 --check delete task ok
2306 OPEN get_task_info(p_task_version_id);
2307 FETCH get_task_info into l_task_info_rec;
2308 CLOSE get_task_info;
2309
2310 /* Bug 4068685 : If p_structure_version_id is not passed to this Delete_Task_Version API
2311 then it will be defaulted to MISS_NUM .In that case ,Use the retrieved value of
2312 parent_structure_version_id from l_task_info_rec
2313 */
2314 --anurag
2315 open task_ntf(l_task_info_rec.proj_element_id,l_task_info_rec.project_id);
2316 fetch task_ntf into l_ntf_id;
2317 close task_ntf;
2318 if(l_ntf_id is not null)
2319 then
2320 update WF_NOTIFICATIONS
2321 set status = 'CLOSED'
2322 where notification_id = l_ntf_id ;
2323 end if;
2324
2325 IF (p_structure_version_id IS NOT NULL)
2326 AND (p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
2327 THEN
2328 l_structure_version_id := l_task_info_rec.parent_structure_version_id ;
2329 ELSE
2330 l_structure_version_id := p_structure_version_id ;
2331 END IF;
2332
2333 /*In the following function call , changed value of p_parent_structure_ver_id parameter
2334 from p_structure_version_id to l_structure_version_id
2335 for Bug 4068685
2336 */
2337 --6023347: No need to check tasks if complete version is to be deleted from Workplan Version Disabling
2338 IF p_calling_from <> 'DEL_WP_STRUC_DISABLE_VERSION' THEN -- 6023347
2339 --Check if it is okay to delete task version. Also checks financial task
2340 PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok(p_project_id => l_task_info_rec.project_id
2341 ,p_task_version_id => p_task_version_id
2342 ,p_parent_structure_ver_id => l_structure_version_id -- 4068685
2343 ,x_return_status => l_return_status
2344 ,x_error_message_code => l_error_msg_code);
2345 IF (l_return_status <> 'S') THEN
2346 PA_UTILS.ADD_MESSAGE('PA', l_error_msg_code);
2347 l_msg_data := l_error_msg_code;
2348 RAISE FND_API.G_EXC_ERROR;
2349 END IF;
2350 END IF; -- 6023347
2351
2352 -- Bug Fix 4576640.
2353 -- Now stopping the user from deleting a linked task.
2354
2355 OPEN is_linked_task(p_task_version_id);
2356 FETCH is_linked_task INTO l_linked_task;
2357 CLOSE is_linked_task;
2358
2359 IF l_linked_task = 'Y' THEN
2360 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2361 p_msg_name => 'PA_PS_CANT_DEL_LINKED_TASK');
2362 RAISE FND_API.G_EXC_ERROR;
2363 END IF;
2364
2365 -- End of Bug Fix 4576640.
2366
2367 --ok to delete. decide whether to delete or modify version status
2368 --Check if shared
2369 --bug 4501280
2370 IF l_task_info_rec.link_task_flag = 'N'
2371 THEN
2372 --bug 4501280
2373 IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_task_info_rec.project_id) = 'Y') THEN
2374 --sharing enabled
2375 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_task_info_rec.project_id) = 'Y') THEN
2376 --versioning on
2377 IF (l_task_info_rec.task_unpub_ver_status_code = 'PUBLISHED' OR
2378 l_task_info_rec.task_unpub_ver_status_code = 'TO_BE_DELETED')
2379 AND p_called_from_api <> 'DELETE_STRUCTURE_VERSION' THEN -- Bug 3056077. We need to delete the task versions
2380 --change status to TO_BE_DELETED -- when the structure version is to be deleted.
2381
2382 -- 3955848 Added following code to validate task to deliverable association deletion
2383 -- related validations , p_delete_or_validate is passed as 'V' because only validation will be done
2384
2385 PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
2386 (
2387 p_task_element_id => l_task_info_rec.proj_element_id
2388 ,p_project_id => l_task_info_rec.project_id
2389 ,p_task_version_id => p_task_version_id
2390 ,p_delete_or_validate => 'V'
2391 ,x_return_status => x_return_status
2392 ,x_msg_count => x_msg_count
2393 ,x_msg_data => x_msg_data
2394 );
2395
2396 IF x_return_status = FND_API.G_RET_STS_ERROR then
2397 RAISE FND_API.G_EXC_ERROR;
2398 End If;
2399
2400 -- 3955848 end
2401
2402 PA_TASK_PVT1.update_task_ver_delete_status(
2403 p_task_version_id => p_task_version_id
2404 ,x_return_status => l_return_status
2405 ,x_msg_count => x_msg_count
2406 ,x_msg_data => x_msg_data);
2407
2408 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2409 x_msg_count := FND_MSG_PUB.count_msg;
2410 IF x_msg_count = 1 then
2411 pa_interface_utils_pub.get_messages
2412 (p_encoded => FND_API.G_TRUE,
2413 p_msg_index => 1,
2414 p_msg_count => l_msg_count,
2415 p_msg_data => l_msg_data,
2416 p_data => l_data,
2417 p_msg_index_out => l_msg_index_out);
2418 x_msg_data := l_data;
2419 END IF;
2420 raise FND_API.G_EXC_ERROR;
2421 END IF;
2422
2423 return; --only set the version status
2424 ELSE --not published
2425 NULL; --continue to delete
2426 END IF; --task version status
2427 ELSE -- versioning off
2428 NULL; --continue to delete
2429 END IF;
2430 ELSE --not shared
2431 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_task_info_rec.parent_structure_version_id, 'FINANCIAL') = 'Y') THEN
2432 --Financial structure
2433 NULL; --continue to delete
2434 ELSE --Workplan structure
2435 --check if versioning is on
2436 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_task_info_rec.project_id) = 'Y') THEN
2437 --versioning on
2438 IF (l_task_info_rec.task_unpub_ver_status_code = 'PUBLISHED' OR
2439 l_task_info_rec.task_unpub_ver_status_code = 'TO_BE_DELETED')
2440 AND p_called_from_api <> 'DELETE_STRUCTURE_VERSION' THEN -- Bug 3056077. We need to delete the task versions
2441 --change status to TO_BE_DELETED -- when the structure version is to be deleted.
2442
2443 -- 3955848 Added following code to validate task to deliverable association deletion
2444 -- related validations , p_delete_or_validate is passed as 'V' because only validation will be done
2445
2446 PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
2447 (
2448 p_task_element_id => l_task_info_rec.proj_element_id
2449 ,p_project_id => l_task_info_rec.project_id
2450 ,p_task_version_id => p_task_version_id
2451 ,p_delete_or_validate => 'V'
2452 ,x_return_status => x_return_status
2453 ,x_msg_count => x_msg_count
2454 ,x_msg_data => x_msg_data
2455 );
2456
2457 IF x_return_status = FND_API.G_RET_STS_ERROR then
2458 RAISE FND_API.G_EXC_ERROR;
2459 End If;
2460
2461 -- 3955848 end
2462
2463 PA_TASK_PVT1.update_task_ver_delete_status(
2464 p_task_version_id => p_task_version_id
2465 ,x_return_status => l_return_status
2466 ,x_msg_count => x_msg_count
2467 ,x_msg_data => x_msg_data);
2468
2469 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2470 x_msg_count := FND_MSG_PUB.count_msg;
2471 IF x_msg_count = 1 then
2472 pa_interface_utils_pub.get_messages
2473 (p_encoded => FND_API.G_TRUE,
2474 p_msg_index => 1,
2475 p_msg_count => l_msg_count,
2476 p_msg_data => l_msg_data,
2477 p_data => l_data,
2478 p_msg_index_out => l_msg_index_out);
2479 x_msg_data := l_data;
2480 END IF;
2481 raise FND_API.G_EXC_ERROR;
2482 END IF;
2483
2484 return; --only set the status
2485 ELSE
2486 NULL; --delete task version
2487 END IF;
2488 ELSE
2489 --versioning off
2490 NULL; --delete task version
2491 END IF;
2492 END IF;
2493 END IF;
2494 END IF; --bug 4501280
2495 --end task version status changes
2496
2497
2498 --dbms_output.put_line('delete pvt');
2499 PA_TASK_PVT1.Delete_Task_Version(
2500 p_api_version => p_api_version
2501 ,p_init_msg_list => p_init_msg_list
2502 ,p_commit => p_commit
2503 ,p_validate_only => p_validate_only
2504 ,p_validation_level => p_validation_level
2505 ,p_calling_module => p_calling_module
2506 ,p_debug_mode => p_debug_mode
2507 ,p_max_msg_count => p_max_msg_count
2508 ,p_structure_version_id => l_structure_version_id -- Old Value : p_structure_version_id : 4068685
2509 ,p_task_version_id => p_task_version_id
2510 ,p_record_version_number => p_record_version_number
2511 ,p_called_from_api => p_called_from_api
2512 ,p_structure_type => p_structure_type -- FP_M changes 3305199
2513 ,x_return_status => l_return_status
2514 ,x_msg_count => x_msg_count
2515 ,x_msg_data => x_msg_data
2516 );
2517
2518 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2519 x_msg_count := FND_MSG_PUB.count_msg;
2520 IF x_msg_count = 1 then
2521 pa_interface_utils_pub.get_messages
2522 (p_encoded => FND_API.G_TRUE,
2523 p_msg_index => 1,
2524 p_msg_count => l_msg_count,
2525 p_msg_data => l_msg_data,
2526 p_data => l_data,
2527 p_msg_index_out => l_msg_index_out);
2528 x_msg_data := l_data;
2529 END IF;
2530 raise FND_API.G_EXC_ERROR;
2531 END IF;
2532
2533 x_return_status := FND_API.G_RET_STS_SUCCESS;
2534
2535 IF (p_commit = FND_API.G_TRUE) THEN
2536 COMMIT;
2537 END IF;
2538
2539 IF (p_debug_mode = 'Y') THEN
2540 pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_VERSION END');
2541 END IF;
2542 EXCEPTION
2543 when FND_API.G_EXC_ERROR then
2544 if p_commit = FND_API.G_TRUE then
2545 rollback to delete_task_version;
2546 end if;
2547 x_return_status := FND_API.G_RET_STS_ERROR;
2548 when FND_API.G_EXC_UNEXPECTED_ERROR then
2549 if p_commit = FND_API.G_TRUE then
2550 rollback to delete_task_version;
2551 end if;
2552 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2553 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
2554 p_procedure_name => 'DELETE_TASK_VERSION',
2555 p_error_text => SUBSTRB(SQLERRM,1,240));
2556 when OTHERS then
2557 if p_commit = FND_API.G_TRUE then
2558 rollback to delete_task_version;
2559 end if;
2560 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2561 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
2562 p_procedure_name => 'DELETE_TASK_VERSION',
2563 p_error_text => SUBSTRB(SQLERRM,1,240));
2564 raise;
2565 END delete_task_version;
2566
2567 -- API name : Create_Schedule_Version
2568 -- Type : Public procedure
2569 -- Pre-reqs : None
2570 -- Return Value : N/A
2571 -- Prameters
2572 -- p_api_version IN NUMBER N Not Null 1.0
2573 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
2574 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
2575 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
2576 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
2577 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
2578 -- p_debug_mode IN VARCHAR2 N Null N
2579 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2580 -- p_element_version_id IN NUMBER N Not Null
2581 -- p_calendar_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2582 -- p_calendar_name IN VARCHAR2 N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2583 -- p_scheduled_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2584 -- p_scheduled_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2585 -- p_obligation_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2586 -- p_obligation_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2587 -- p_actual_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2588 -- p_actual_finish_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2589 -- p_estimate_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2590 -- p_estimate_finish_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2591 -- p_duration IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2592 -- p_early_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2593 -- p_early_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2594 -- p_late_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2595 -- p_late_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2596 -- p_milestone_flag IN VARCHAR2 N NULL N
2597 -- p_critical_flag IN VARCHAR2 N NULL N
2598 -- x_pev_schedule_id OUT NUMBER N NULL
2599 -- x_return_status OUT VARCHAR2 N Null
2600 -- x_msg_count OUT NUMBER N Null
2601 -- x_msg_data OUT VARCHAR2 N Null
2602 --
2603 -- History
2604 --
2605 -- 23-OCT-01 Majid Ansari -Created
2606 -- 16-OCT-02 XXLU - Added DFF parameters.
2607 --
2608
2609 PROCEDURE Create_Schedule_Version(
2610 p_api_version IN NUMBER :=1.0,
2611 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
2612 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
2613 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
2614 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
2615 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
2616 p_debug_mode IN VARCHAR2 :='N',
2617 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2618 p_element_version_id IN NUMBER,
2619 p_calendar_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2620 p_calendar_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2621 p_scheduled_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2622 p_scheduled_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2623 p_obligation_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2624 p_obligation_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2625 p_actual_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2626 p_actual_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2627 p_estimate_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2628 p_estimate_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2629 p_duration IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2630 p_early_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2631 p_early_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2632 p_late_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2633 p_late_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2634 p_milestone_flag IN VARCHAR2 :='N',
2635 p_critical_flag IN VARCHAR2 :='N',
2636
2637 p_WQ_PLANNED_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2638 p_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2639 p_PLANNED_EQUIP_EFFORT IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --bug 3305199
2640 --bug 3305199 schedule options
2641 p_def_sch_tool_tsk_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2642 p_def_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2643 p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2644 p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2645 p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2646 p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2647 p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2648 p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2649 --end bug 3305199
2650 p_ext_act_duration IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2651 p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2652 p_ext_sch_duration IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2653 p_attribute_category IN pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2654 p_attribute1 IN pa_proj_elem_ver_schedule.attribute1%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2655 p_attribute2 IN pa_proj_elem_ver_schedule.attribute2%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2656 p_attribute3 IN pa_proj_elem_ver_schedule.attribute3%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2657 p_attribute4 IN pa_proj_elem_ver_schedule.attribute4%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2658 p_attribute5 IN pa_proj_elem_ver_schedule.attribute5%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2659 p_attribute6 IN pa_proj_elem_ver_schedule.attribute6%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2660 p_attribute7 IN pa_proj_elem_ver_schedule.attribute7%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2661 p_attribute8 IN pa_proj_elem_ver_schedule.attribute8%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2662 p_attribute9 IN pa_proj_elem_ver_schedule.attribute9%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2663 p_attribute10 IN pa_proj_elem_ver_schedule.attribute10%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2664 p_attribute11 IN pa_proj_elem_ver_schedule.attribute11%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2665 p_attribute12 IN pa_proj_elem_ver_schedule.attribute12%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2666 p_attribute13 IN pa_proj_elem_ver_schedule.attribute13%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2667 p_attribute14 IN pa_proj_elem_ver_schedule.attribute14%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2668 p_attribute15 IN pa_proj_elem_ver_schedule.attribute15%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2669 x_pev_schedule_id OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2670 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2671 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2672 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2673 ) IS
2674 l_api_name CONSTANT VARCHAR(30) := 'CREATE_SCHEDULE_VERSION';
2675 l_api_version CONSTANT NUMBER := 1.0;
2676
2677 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2678 l_return_status VARCHAR2(1);
2679 l_msg_count NUMBER;
2680 l_msg_data VARCHAR2(250);
2681 l_data VARCHAR2(250);
2682 l_msg_index_out NUMBER;
2683 l_error_msg_code VARCHAR2(250);
2684 BEGIN
2685 pa_debug.init_err_stack ('PA_TASK_PUB1.create_schedule_VERSION');
2686
2687 IF (p_debug_mode = 'Y') THEN
2688 pa_debug.debug('PA_TASK_PUB1.CREATE_SCHEDULE_VERSION begin');
2689 END IF;
2690
2691 IF (p_commit = FND_API.G_TRUE) THEN
2692 savepoint create_schedule_version;
2693 END IF;
2694
2695 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2696 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2697 END IF;
2698
2699
2700 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
2701 FND_MSG_PUB.initialize;
2702 END IF;
2703
2704 PA_TASK_PVT1.Create_Schedule_Version(
2705 p_api_version => p_api_version
2706 ,p_init_msg_list => p_init_msg_list
2707 ,p_commit => p_commit
2708 ,p_validate_only => p_validate_only
2709 ,p_validation_level => p_validation_level
2710 ,p_calling_module => p_calling_module
2711 ,p_debug_mode => p_debug_mode
2712 ,p_max_msg_count => p_max_msg_count
2713 ,p_element_version_id => p_element_version_id
2714 ,p_calendar_id => p_calendar_id
2715 ,p_scheduled_start_date => p_scheduled_start_date
2716 ,p_scheduled_end_date => p_scheduled_end_date
2717 ,p_obligation_start_date => p_obligation_start_date
2718 ,p_obligation_end_date => p_obligation_end_date
2719 ,p_actual_start_date => p_actual_start_date
2720 ,p_actual_finish_date => p_actual_finish_date
2721 ,p_estimate_start_date => p_estimate_start_date
2722 ,p_estimate_finish_date => p_estimate_finish_date
2723 ,p_duration => p_duration
2724 ,p_early_start_date => p_early_start_date
2725 ,p_early_end_date => p_early_end_date
2726 ,p_late_start_date => p_late_start_date
2727 ,p_late_end_date => p_late_end_date
2728 ,p_milestone_flag => p_milestone_flag
2729 ,p_critical_flag => p_critical_flag
2730 ,x_pev_schedule_id => x_pev_schedule_id
2731 ,p_wq_planned_quantity => p_wq_planned_quantity
2732 ,p_planned_effort => p_planned_effort
2733 ,p_PLANNED_EQUIP_EFFORT => p_PLANNED_EQUIP_EFFORT
2734 ,p_def_sch_tool_tsk_type_code => p_def_sch_tool_tsk_type_code
2735 ,p_constraint_type_code => p_constraint_type_code
2736 ,p_constraint_date => p_constraint_date
2737 ,p_free_slack => p_free_slack
2738 ,p_total_slack => p_total_slack
2739 ,p_effort_driven_flag => p_effort_driven_flag
2740 ,p_level_assignments_flag => p_level_assignments_flag
2741 ,p_ext_act_duration => p_ext_act_duration
2742 ,p_ext_remain_duration => p_ext_remain_duration
2743 ,p_ext_sch_duration => p_ext_sch_duration
2744 ,p_attribute_category => p_attribute_category
2745 ,p_attribute1 => p_attribute1
2746 ,p_attribute2 => p_attribute2
2747 ,p_attribute3 => p_attribute3
2748 ,p_attribute4 => p_attribute4
2749 ,p_attribute5 => p_attribute5
2750 ,p_attribute6 => p_attribute6
2751 ,p_attribute7 => p_attribute7
2752 ,p_attribute8 => p_attribute8
2753 ,p_attribute9 => p_attribute9
2754 ,p_attribute10 => p_attribute10
2755 ,p_attribute11 => p_attribute11
2756 ,p_attribute12 => p_attribute12
2757 ,p_attribute13 => p_attribute13
2758 ,p_attribute14 => p_attribute14
2759 ,p_attribute15 => p_attribute15
2760 ,x_return_status => l_return_status
2761 ,x_msg_count => x_msg_count
2762 ,x_msg_data => x_msg_data
2763 );
2764
2765 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2766 x_msg_count := FND_MSG_PUB.count_msg;
2767 IF x_msg_count = 1 then
2768 pa_interface_utils_pub.get_messages
2769 (p_encoded => FND_API.G_TRUE,
2770 p_msg_index => 1,
2771 p_msg_count => l_msg_count,
2772 p_msg_data => l_msg_data,
2773 p_data => l_data,
2774 p_msg_index_out => l_msg_index_out);
2775 x_msg_data := l_data;
2776 END IF;
2777 raise FND_API.G_EXC_ERROR;
2778 END IF;
2779
2780 x_return_status := FND_API.G_RET_STS_SUCCESS;
2781
2782 IF (p_commit = FND_API.G_TRUE) THEN
2783 COMMIT;
2784 END IF;
2785
2786 IF (p_debug_mode = 'Y') THEN
2787 pa_debug.debug('PA_TASK_PUB1.CREATE_SCHEDULE_VERSION END');
2788 END IF;
2789 EXCEPTION
2790 when FND_API.G_EXC_ERROR then
2791 if p_commit = FND_API.G_TRUE then
2792 rollback to create_schedule_version;
2793 end if;
2794 x_return_status := FND_API.G_RET_STS_ERROR;
2795 when FND_API.G_EXC_UNEXPECTED_ERROR then
2796 if p_commit = FND_API.G_TRUE then
2797 rollback to create_schedule_version;
2798 end if;
2799 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2800 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
2801 p_procedure_name => 'CREATE_SCHEDULE_VERSION',
2802 p_error_text => SUBSTRB(SQLERRM,1,240));
2803 when OTHERS then
2804 if p_commit = FND_API.G_TRUE then
2805 rollback to create_schedule_version;
2806 end if;
2807 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2808 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
2809 p_procedure_name => 'CREATE_SCHEDULE_VERSION',
2810 p_error_text => SUBSTRB(SQLERRM,1,240));
2811 raise;
2812
2813 END Create_Schedule_Version;
2814
2815
2816 -- API name : Update_Schedule_Version
2817 -- Type : Public procedure
2818 -- Pre-reqs : None
2819 -- Return Value : N/A
2820 -- Prameters
2821 -- p_api_version IN NUMBER N Not Null 1.0
2822 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
2823 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
2824 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
2825 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
2826 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
2827 -- p_debug_mode IN VARCHAR2 N Null N
2828 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2829 -- p_element_version_id IN NUMBER N Not Null
2830 -- p_calendar_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2831 -- p_calendar_name IN VARCHAR2 N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2832 -- p_scheduled_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2833 -- p_scheduled_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2834 -- p_obligation_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2835 -- p_obligation_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2836 -- p_actual_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2837 -- p_actual_finish_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2838 -- p_estimate_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2839 -- p_estimate_finish_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2840 -- p_duration IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2841 -- p_early_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2842 -- p_early_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2843 -- p_late_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2844 -- p_late_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2845 -- p_milestone_flag IN VARCHAR2 N NULL N
2846 -- p_critical_flag IN VARCHAR2 N NULL N
2847 -- x_pev_schedule_id OUT NUMBER N NULL
2848 -- x_return_status OUT VARCHAR2 N Null
2849 -- x_msg_count OUT NUMBER N Null
2850 -- x_msg_data OUT VARCHAR2 N Null
2851 --
2852 -- History
2853 --
2854 -- 23-OCT-01 Majid Ansari -Created
2855 -- 16-OCT-02 XXLU - Added DFF parameters.
2856 --
2857
2858 PROCEDURE Update_Schedule_Version(
2859 p_api_version IN NUMBER :=1.0,
2860 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
2861 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
2862 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
2863 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
2864 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
2865 p_debug_mode IN VARCHAR2 :='N',
2866 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2867 p_pev_schedule_id IN NUMBER,
2868 p_calendar_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2869 p_calendar_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2870 p_scheduled_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2871 p_scheduled_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2872 p_obligation_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2873 p_obligation_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2874 p_actual_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2875 p_actual_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2876 p_estimate_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2877 p_estimate_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2878 p_duration IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2879 p_early_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2880 p_early_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2881 p_late_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2882 p_late_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2883 p_milestone_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
2884 p_critical_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
2885
2886 p_WQ_PLANNED_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2887 p_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2888 p_PLANNED_EQUIP_EFFORT IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --bug 3305199
2889 --bug 3305199 schedule options
2890 p_def_sch_tool_tsk_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2891 p_def_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2892 p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2893 p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2894 p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2895 p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2896 p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2897 p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2898 --end bug 3305199
2899
2900 p_record_version_number IN NUMBER,
2901 p_ext_act_duration IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2902 p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2903 p_ext_sch_duration IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2904 p_attribute_category IN pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2905 p_attribute1 IN pa_proj_elem_ver_schedule.attribute1%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2906 p_attribute2 IN pa_proj_elem_ver_schedule.attribute2%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2907 p_attribute3 IN pa_proj_elem_ver_schedule.attribute3%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2908 p_attribute4 IN pa_proj_elem_ver_schedule.attribute4%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2909 p_attribute5 IN pa_proj_elem_ver_schedule.attribute5%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2910 p_attribute6 IN pa_proj_elem_ver_schedule.attribute6%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2911 p_attribute7 IN pa_proj_elem_ver_schedule.attribute7%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2912 p_attribute8 IN pa_proj_elem_ver_schedule.attribute8%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2913 p_attribute9 IN pa_proj_elem_ver_schedule.attribute9%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2914 p_attribute10 IN pa_proj_elem_ver_schedule.attribute10%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2915 p_attribute11 IN pa_proj_elem_ver_schedule.attribute11%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2916 p_attribute12 IN pa_proj_elem_ver_schedule.attribute12%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2917 p_attribute13 IN pa_proj_elem_ver_schedule.attribute13%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2918 p_attribute14 IN pa_proj_elem_ver_schedule.attribute14%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2919 p_attribute15 IN pa_proj_elem_ver_schedule.attribute15%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2920 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2921 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2922 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2923 ) IS
2924
2925 l_api_name CONSTANT VARCHAR(30) := 'Update_Schedule_Version';
2926 l_api_version CONSTANT NUMBER := 1.0;
2927
2928 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2929 l_return_status VARCHAR2(1);
2930 l_msg_count NUMBER;
2931 l_msg_data VARCHAR2(250);
2932 l_data VARCHAR2(250);
2933 l_msg_index_out NUMBER;
2934 l_error_msg_code VARCHAR2(250);
2935 l_dummy VARCHAR2(1);
2936
2937 -- hyau Bug 2852753
2938 l_delete_project_allowed VARCHAR2(1);
2939 l_update_proj_num_allowed VARCHAR2(1);
2940 l_update_proj_name_allowed VARCHAR2(1);
2941 l_update_proj_desc_allowed VARCHAR2(1);
2942 l_update_proj_dates_allowed VARCHAR2(1);
2943 l_update_proj_status_allowed VARCHAR2(1);
2944 l_update_proj_manager_allowed VARCHAR2(1);
2945 l_update_proj_org_allowed VARCHAR2(1);
2946 l_add_task_allowed VARCHAR2(1);
2947 l_delete_task_allowed VARCHAR2(1);
2948 l_update_task_num_allowed VARCHAR2(1);
2949 l_update_task_name_allowed VARCHAR2(1);
2950 l_update_task_dates_allowed VARCHAR2(1);
2951 l_update_task_desc_allowed VARCHAR2(1);
2952 l_update_parent_task_allowed VARCHAR2(1);
2953 l_update_task_org_allowed VARCHAR2(1);
2954
2955 l_err_code NUMBER := 0;
2956 l_err_stack VARCHAR2(200) := NULL;
2957 l_err_stage VARCHAR2(200) := NULL;
2958
2959 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
2960
2961 CURSOR get_product_code ( c_project_id NUMBER ) IS
2962 SELECT pm_product_code
2963 FROM PA_PROJECTS_ALL
2964 WHERE project_id = c_project_id;
2965
2966 l_project_id NUMBER;
2967
2968 CURSOR cur_proj_id
2969 IS
2970 SELECT project_id
2971 FROM pa_proj_elem_ver_schedule
2972 WHERE pev_schedule_id = p_pev_schedule_id;
2973
2974 CURSOR cur_schedule_dates IS
2975 SELECT SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE
2976 FROM pa_proj_elem_ver_schedule
2977 WHERE pev_schedule_id = p_pev_schedule_id;
2978
2979 l_cur_sch_start_date DATE;
2980 l_cur_sch_end_date DATE;
2981
2982 l_Structure_Version_ID NUMBER;
2983
2984 -- end hyau Bug 2852753
2985
2986 BEGIN
2987
2988 pa_debug.init_err_stack ('PA_TASK_PUB1.update_schedule_VERSION');
2989
2990 IF (p_debug_mode = 'Y') THEN
2991 pa_debug.debug('PA_TASK_PUB1.update_SCHEDULE_VERSION begin');
2992 END IF;
2993
2994 IF (p_commit = FND_API.G_TRUE) THEN
2995 savepoint update_schedule_version;
2996 END IF;
2997
2998 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2999 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3000 END IF;
3001
3002
3003 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
3004 FND_MSG_PUB.initialize;
3005 END IF;
3006
3007 -- Added for FP_M changes 3305199
3008
3009 OPEN cur_proj_id;
3010 FETCH cur_proj_id INTO l_project_id;
3011 CLOSE cur_proj_id;
3012
3013 If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_Project_ID) = 'Y' Then
3014
3015 Select a.Parent_Structure_Version_ID
3016 Into l_Structure_Version_ID
3017 From PA_Proj_Element_Versions a, pa_proj_elem_ver_schedule b
3018 Where a.Element_Version_ID = b.Element_Version_ID
3019 and b.pev_schedule_id = p_pev_schedule_id;
3020
3021 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
3022 p_structure_version_id => l_Structure_Version_ID
3023 ,p_dirty_flag => 'Y' --bug 3902282
3024 ,x_return_status => x_return_status
3025 ,x_msg_count => x_msg_count
3026 ,x_msg_data => x_msg_data
3027 );
3028
3029 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
3030 x_msg_count := FND_MSG_PUB.count_msg;
3031 If x_msg_count = 1 then
3032 pa_interface_utils_pub.get_messages
3033 (p_encoded => FND_API.G_TRUE,
3034 p_msg_index => 1,
3035 p_msg_count => l_msg_count,
3036 p_msg_data => l_msg_data,
3037 p_data => l_data,
3038 p_msg_index_out => l_msg_index_out);
3039 x_msg_data := l_data;
3040 End If;
3041 raise FND_API.G_EXC_ERROR;
3042 End If;
3043 End If;
3044 -- End of FP_M changes
3045
3046 -- hyau Bug 2852753
3047 IF p_calling_module = 'SELF_SERVICE' THEN
3048
3049 OPEN cur_proj_id;
3050 FETCH cur_proj_id INTO l_project_id;
3051 CLOSE cur_proj_id;
3052
3053 OPEN get_product_code(l_project_id);
3054 FETCH get_product_code INTO l_pm_product_code;
3055 CLOSE get_product_code;
3056
3057 If l_pm_product_code IS NOT NULL THEN
3058 -- check to see if the schedule dates are actually different
3059 OPEN cur_schedule_dates;
3060 FETCH cur_schedule_dates INTO l_cur_sch_start_date, l_cur_sch_end_date;
3061 CLOSE cur_schedule_dates;
3062
3063 --Bug 3736889
3064 -- IF ((p_scheduled_start_date is not null) and (p_scheduled_start_date - l_cur_sch_start_date <> 0 )) OR
3065 -- ((p_scheduled_end_date is not null) and (p_scheduled_end_date - l_cur_sch_end_date <> 0)) THEN
3066 IF ((p_scheduled_start_date is not null) and
3067 (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) and
3068 (p_scheduled_start_date - l_cur_sch_start_date <> 0 )) OR
3069 ((p_scheduled_end_date is not null) and
3070 (p_scheduled_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) and
3071 (p_scheduled_end_date - l_cur_sch_end_date <> 0)) THEN
3072
3073 pa_pm_controls.Get_Project_actions_allowed
3074 (P_PM_PRODUCT_CODE => l_pm_product_code,
3075 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
3076 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
3077 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
3078 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
3079 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
3080 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
3081 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
3082 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
3083 P_ADD_TASK_ALLOWED => l_add_task_allowed,
3084 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
3085 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
3086 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
3087 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
3088 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
3089 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
3090 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
3091 P_ERROR_CODE => l_err_code,
3092 P_ERROR_STACK => l_err_stack,
3093 P_ERROR_STAGE => l_err_stage );
3094
3095 IF l_err_code <> 0 THEN
3096 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3097 p_msg_name => l_err_stage);
3098 END IF;
3099 IF l_update_task_dates_allowed = 'N' THEN
3100 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3101 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_DATES');
3102 raise FND_API.G_EXC_ERROR;
3103 END IF;
3104 END IF;
3105 END IF;
3106 END IF;
3107
3108 -- end hyau Bug 2852753
3109
3110
3111 --Lock row
3112 IF( p_validate_only <> FND_API.G_TRUE) THEN
3113 BEGIN
3114 select 'x' into l_dummy
3115 from PA_PROJ_ELEM_VER_SCHEDULE
3116 where pev_schedule_id = p_pev_schedule_id
3117 and record_version_number = p_record_version_number
3118 for update of record_version_number NOWAIT;
3119 EXCEPTION
3120 WHEN TIMEOUT_ON_RESOURCE THEN
3121 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3122 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
3123 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
3124 WHEN NO_DATA_FOUND THEN
3125 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3126 p_msg_name => 'PA_XC_RECORD_CHANGED');
3127 l_msg_data := 'PA_XC_RECORD_CHANGED';
3128 WHEN OTHERS THEN
3129 IF SQLCODE = -54 then
3130 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3131 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
3132 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
3133 ELSE
3134 raise;
3135 END IF;
3136 END;
3137 ELSE
3138 --check record_version_number
3139 BEGIN
3140 select 'x' into l_dummy
3141 from PA_PROJ_ELEM_VER_SCHEDULE
3142 where pev_schedule_id = p_pev_schedule_id
3143 and record_version_number = p_record_version_number;
3144 EXCEPTION
3145 WHEN NO_DATA_FOUND THEN
3146 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3147 p_msg_name => 'PA_XC_RECORD_CHANGED');
3148 l_msg_data := 'PA_XC_RECORD_CHANGED';
3149 WHEN OTHERS THEN
3150 RAISE;
3151 END;
3152 END IF;
3153
3154 l_msg_count := FND_MSG_PUB.count_msg;
3155
3156 IF l_msg_count > 0 THEN
3157 x_msg_count := l_msg_count;
3158 x_return_status := 'E';
3159 RAISE FND_API.G_EXC_ERROR;
3160 END IF;
3161
3162
3163 PA_TASK_PVT1.Update_Schedule_Version(
3164 p_api_version => p_api_version
3165 ,p_init_msg_list => p_init_msg_list
3166 ,p_commit => p_commit
3167 ,p_validate_only => p_validate_only
3168 ,p_validation_level => p_validation_level
3169 ,p_calling_module => p_calling_module
3170 ,p_debug_mode => p_debug_mode
3171 ,p_max_msg_count => p_max_msg_count
3172 ,p_pev_schedule_id => p_pev_schedule_id
3173 ,p_calendar_id => p_calendar_id
3174 ,p_scheduled_start_date => p_scheduled_start_date
3175 ,p_scheduled_end_date => p_scheduled_end_date
3176 ,p_obligation_start_date => p_obligation_start_date
3177 ,p_obligation_end_date => p_obligation_end_date
3178 ,p_actual_start_date => p_actual_start_date
3179 ,p_actual_finish_date => p_actual_finish_date
3180 ,p_estimate_start_date => p_estimate_start_date
3181 ,p_estimate_finish_date => p_estimate_finish_date
3182 ,p_duration => p_duration
3183 ,p_early_start_date => p_early_start_date
3184 ,p_early_end_date => p_early_end_date
3185 ,p_late_start_date => p_late_start_date
3186 ,p_late_end_date => p_late_end_date
3187 ,p_milestone_flag => p_milestone_flag
3188 ,p_critical_flag => p_critical_flag
3189 ,p_WQ_PLANNED_QUANTITY => p_WQ_PLANNED_QUANTITY
3190 ,p_PLANNED_EFFORT => p_PLANNED_EFFORT
3191 ,p_PLANNED_EQUIP_EFFORT => p_PLANNED_EQUIP_EFFORT
3192 ,p_def_sch_tool_tsk_type_code => p_def_sch_tool_tsk_type_code
3193 ,p_constraint_type_code => p_constraint_type_code
3194 ,p_constraint_date => p_constraint_date
3195 ,p_free_slack => p_free_slack
3196 ,p_total_slack => p_total_slack
3197 ,p_effort_driven_flag => p_effort_driven_flag
3198 ,p_level_assignments_flag => p_level_assignments_flag
3199 ,p_record_version_number => p_record_version_number
3200 ,p_ext_act_duration => p_ext_act_duration
3201 ,p_ext_remain_duration => p_ext_remain_duration
3202 ,p_ext_sch_duration => p_ext_sch_duration
3203 ,p_attribute_category => p_attribute_category
3204 ,p_attribute1 => p_attribute1
3205 ,p_attribute2 => p_attribute2
3206 ,p_attribute3 => p_attribute3
3207 ,p_attribute4 => p_attribute4
3208 ,p_attribute5 => p_attribute5
3209 ,p_attribute6 => p_attribute6
3210 ,p_attribute7 => p_attribute7
3211 ,p_attribute8 => p_attribute8
3212 ,p_attribute9 => p_attribute9
3213 ,p_attribute10 => p_attribute10
3214 ,p_attribute11 => p_attribute11
3215 ,p_attribute12 => p_attribute12
3216 ,p_attribute13 => p_attribute13
3217 ,p_attribute14 => p_attribute14
3218 ,p_attribute15 => p_attribute15
3219 ,x_return_status => l_return_status
3220 ,x_msg_count => x_msg_count
3221 ,x_msg_data => x_msg_data
3222 );
3223
3224 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3225 x_msg_count := FND_MSG_PUB.count_msg;
3226 IF x_msg_count = 1 then
3227 pa_interface_utils_pub.get_messages
3228 (p_encoded => FND_API.G_TRUE,
3229 p_msg_index => 1,
3230 p_msg_count => l_msg_count,
3231 p_msg_data => l_msg_data,
3232 p_data => l_data,
3233 p_msg_index_out => l_msg_index_out);
3234 x_msg_data := l_data;
3235 END IF;
3236 raise FND_API.G_EXC_ERROR;
3237 END IF;
3238
3239 x_return_status := FND_API.G_RET_STS_SUCCESS;
3240
3241 IF (p_commit = FND_API.G_TRUE) THEN
3242 COMMIT;
3243 END IF;
3244
3245 IF (p_debug_mode = 'Y') THEN
3246 pa_debug.debug('PA_TASK_PUB1.UPDATE_SCHEDULE_VERSION END');
3247 END IF;
3248 EXCEPTION
3249 when FND_API.G_EXC_ERROR then
3250 if p_commit = FND_API.G_TRUE then
3251 rollback to update_schedule_version;
3252 end if;
3253 x_return_status := FND_API.G_RET_STS_ERROR;
3254 when FND_API.G_EXC_UNEXPECTED_ERROR then
3255 if p_commit = FND_API.G_TRUE then
3256 rollback to update_schedule_version;
3257 end if;
3258 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3259 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
3260 p_procedure_name => 'UPDATE_SCHEDULE_VERSION',
3261 p_error_text => SUBSTRB(SQLERRM,1,240));
3262 when OTHERS then
3263 if p_commit = FND_API.G_TRUE then
3264 rollback to update_schedule_version;
3265 end if;
3266 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3267 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
3268 p_procedure_name => 'UPDATE_SCHEDULE_VERSION',
3269 p_error_text => SUBSTRB(SQLERRM,1,240));
3270 raise;
3271 END Update_Schedule_Version;
3272
3273 -- API name : Copy_Task
3274 -- Type : Public procedure
3275 -- Pre-reqs : None
3276 -- Return Value : N/A
3277 -- Prameters
3278 -- p_api_version IN NUMBER N Not Null 1.0
3279 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
3280 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
3281 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
3282 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
3283 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
3284 -- p_debug_mode IN VARCHAR2 N Null N
3285 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3286 -- p_src_project_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3287 -- p_src_project_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3288 -- p_src_structre_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3289 -- p_src_structure_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3290 -- p_src_structure_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3291 -- p_src_structure_version_name IN VARCHAR2 N null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3292 -- p_src_task_version_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3293 -- p_src_task_name IN VARCHAR2 N null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3294 -- p_dest_structure_id IN NUMBER N null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3295 -- p_dest_structure_version_id IN NUMBER N NOT Null
3296 -- p_dest_task_version_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3297 -- p_dest_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3298 -- p_task_unpub_ver_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3299 -- p_fin_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3300 -- p_sharing_enabled IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3301 -- p_versioning_enabled IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3302 -- p_copy_option IN VARCHAR2 N NOT NULL
3303 -- p_peer_or_sub IN VARCHAR2 N Not Null
3304 -- p_called_from_bulk_api IN VARCHAR2 N NULL
3305 -- x_return_status OUT VARCHAR2 N Null
3306 -- x_msg_count OUT NUMBER N Null
3307 -- x_msg_data OUT VARCHAR2 N Null
3308 --
3309 -- History
3310 --
3311 -- 23-OCT-01 Majid Ansari -Created --
3312 --
3313
3314 PROCEDURE Copy_Task(
3315 p_api_version IN NUMBER :=1.0,
3316 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
3317 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
3318 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
3319 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
3320 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
3321 p_debug_mode IN VARCHAR2 :='N',
3322 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3323 p_src_project_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3324 p_src_project_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3325 p_src_structure_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3326 p_src_structure_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3327 p_src_structure_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3328 p_src_structure_version_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3329 p_src_task_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3330 p_src_task_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3331 p_dest_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, -- 4201927
3332 p_dest_structure_version_id IN NUMBER,
3333 p_dest_task_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3334 p_dest_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, -- 4201927
3335 p_task_unpub_ver_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- 4201927
3336 p_fin_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3337 p_sharing_enabled IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3338 p_versioning_enabled IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3339 p_copy_external_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3340 p_called_from_api IN VARCHAR2 := 'ABCD',
3341 p_copy_option IN VARCHAR2,
3342 p_peer_or_sub IN VARCHAR2,
3343 p_prefix IN VARCHAR2,
3344 -- Added for FP_M changes. Refer to tracking Bug 3305199
3345 p_structure_type IN VARCHAR2 :='WORKPLAN',
3346 p_cp_dependency_flag IN VARCHAR2 :='N',
3347 p_cp_deliverable_asso_flag IN VARCHAR2 :='N',
3348 p_cp_tk_assignments_flag IN VARCHAR2 :='N',
3349 p_cp_cost_code_flag IN VARCHAR2 :='N', -- bug#16083858
3350 p_cp_people_flag IN VARCHAR2 :='N',
3351 p_cp_financial_elem_flag IN VARCHAR2 :='N',
3352 p_cp_material_items_flag IN VARCHAR2 :='N',
3353 p_cp_equipment_flag IN VARCHAR2 :='N',
3354 -- End of FP_M changes
3355 p_called_from_bulk_api IN VARCHAR2 :='N', -- 4201927
3356 p_user_defn_att_flag IN VARCHAR2 :='N', -- Added for 14209636
3357 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
3358 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
3359 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3360 ) IS
3361 l_api_name CONSTANT VARCHAR(30) := 'COPY_TASK';
3362 l_api_version CONSTANT NUMBER := 1.0;
3363
3364 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
3365 l_return_status VARCHAR2(1);
3366 l_msg_count NUMBER;
3367 l_msg_data VARCHAR2(2000); --bug 3637956
3368 l_data VARCHAR2(2000); --bug 3637956
3369 l_msg_index_out NUMBER;
3370 l_error_msg_code VARCHAR2(250);
3371
3372 l_src_project_id NUMBER;
3373 l_src_structure_id NUMBER;
3374 l_src_structure_version_id NUMBER;
3375 l_src_task_version_id NUMBER;
3376
3377 -- hyau Bug 2852753
3378 l_delete_project_allowed VARCHAR2(1);
3379 l_update_proj_num_allowed VARCHAR2(1);
3380 l_update_proj_name_allowed VARCHAR2(1);
3381 l_update_proj_desc_allowed VARCHAR2(1);
3382 l_update_proj_dates_allowed VARCHAR2(1);
3383 l_update_proj_status_allowed VARCHAR2(1);
3384 l_update_proj_manager_allowed VARCHAR2(1);
3385 l_update_proj_org_allowed VARCHAR2(1);
3386 l_add_task_allowed VARCHAR2(1);
3387 l_delete_task_allowed VARCHAR2(1);
3388 l_update_task_num_allowed VARCHAR2(1);
3389 l_update_task_name_allowed VARCHAR2(1);
3390 l_update_task_dates_allowed VARCHAR2(1);
3391 l_update_task_desc_allowed VARCHAR2(1);
3392 l_update_parent_task_allowed VARCHAR2(1);
3393 l_update_task_org_allowed VARCHAR2(1);
3394
3395 l_err_code NUMBER := 0;
3396 l_err_stack VARCHAR2(200) := NULL;
3397 l_err_stage VARCHAR2(200) := NULL;
3398
3399 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
3400
3401 ----------------------------------- FP_M changes : Begin
3402 -- Refer to tracking bug 3305199
3403 /* Bug #: 3305199 SMukka */
3404 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3405 /* l_Old_Task_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
3406 /* l_New_Task_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
3407 l_Old_Task_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3408 l_New_Task_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3409 Rec_Count NUMBER;
3410 ----------------------------------- FP_M changes : End
3411
3412 --Added for 14209636
3413 l_orig_proj_pk_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
3414 l_new_proj_pk_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
3415 l_orig_task_pk_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
3416 l_new_task_pk_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
3417 -- l_Src_Proj_Element_id NUMBER;
3418 l_errorcode NUMBER;
3419 /* not required
3420 CURSOR cur_dest_proj_element_id(c_dest_task_version_id NUMBER,c_project_id NUMBER)
3421 IS
3422 SELECT proj_element_id
3423 FROM pa_proj_element_versions
3424 WHERE element_version_id = c_dest_task_version_id and project_id=c_project_id;
3425 */
3426 -- End of 14209636
3427
3428
3429 CURSOR get_product_code ( c_project_id NUMBER ) IS
3430 SELECT pm_product_code
3431 FROM PA_PROJECTS_ALL
3432 WHERE project_id = c_project_id;
3433
3434 -- end hyau Bug 2852753
3435
3436 --hsiu
3437 --added for advanced structure - versioning
3438 l_versioned VARCHAR2(1) := 'N';
3439 l_shared VARCHAR2(1) := 'N';
3440 --end changes
3441
3442 --hsiu
3443 --added for task weighing
3444 CURSOR get_cur_task_ver_weighting(c_ver_id NUMBER) IS
3445 select WEIGHTING_PERCENTAGE
3446 from pa_object_relationships
3447 where object_id_to1 = c_ver_id
3448 and object_type_to = 'PA_TASKS'
3449 and relationship_type = 'S';
3450 --end changes
3451
3452 /* Bug 2680486 -- Performance changes -- Selected project_id also in the following cursor, which will
3453 be used in other cursors. Also Restructured it to avoid Non-mergable view issue */
3454
3455 CURSOR cur_obj_rel( x_element_version_id NUMBER )
3456 IS
3457 SELECT b.element_version_id task_version_id, b.display_sequence display_sequence, b.proj_element_id,
3458 b.parent_Structure_version_id parent_Structure_version_id, b.wbs_level wbs_level,
3459 b.project_id,
3460 b.attribute_category,
3461 b.attribute1,
3462 b.attribute2,
3463 b.attribute3,
3464 b.attribute4,
3465 b.attribute5,
3466 b.attribute6,
3467 b.attribute7,
3468 b.attribute8,
3469 b.attribute9,
3470 b.attribute10,
3471 b.attribute11,
3472 b.attribute12,
3473 b.attribute13,
3474 b.attribute14,
3475 b.attribute15,
3476 Financial_Task_Flag -- FP_M changes 3305199 Bhumesh
3477 FROM pa_proj_element_versions b,
3478 pa_proj_elements c
3479 WHERE b.proj_element_id = c.proj_element_id
3480 AND c.link_task_flag = 'N'
3481 AND p_copy_option IN ( 'PA_TASK_SUBTASK', 'PA_ENTIRE_VERSION' )
3482 /*
3483 -- Added for FP_M changes : Bug 3305199
3484 and ( p_structure_type = 'WORKPLAN' OR
3485 ( p_structure_type = 'FINANCIAL' and Financial_Task_Flag = 'Y')
3486 )
3487 -- End of FP_M changes : Bug 3305199
3488 */
3489 AND b.element_version_id IN ( SELECT object_id_to1
3490 FROM pa_object_relationships
3491 WHERE relationship_type = 'S'
3492 START WITH object_id_from1 = x_element_version_id AND relationship_type = 'S'
3493 CONNECT BY object_id_from1 = PRIOR object_id_to1 AND relationship_type = prior relationship_type AND relationship_type = 'S' )
3494 UNION
3495 SELECT element_version_id task_version_id, display_sequence display_sequence, ppev.proj_element_id proj_element_id,
3496 parent_Structure_version_id parent_Structure_version_id, wbs_level wbs_level,
3497 project_id,
3498 attribute_category,
3499 attribute1,
3500 attribute2,
3501 attribute3,
3502 attribute4,
3503 attribute5,
3504 attribute6,
3505 attribute7,
3506 attribute8,
3507 attribute9,
3508 attribute10,
3509 attribute11,
3510 attribute12,
3511 attribute13,
3512 attribute14,
3513 attribute15,
3514 Financial_Task_Flag -- FP_M changes 3305199 Bhumesh
3515 FROM pa_proj_element_versions ppev
3516 WHERE ppev.element_version_id = p_src_task_version_id
3517 /* not required any more
3518 -- Added for FP_M changes : Bug 3305199
3519 and ( p_structure_type = 'WORKPLAN' OR
3520 ( p_structure_type = 'FINANCIAL' and Financial_Task_Flag = 'Y')
3521 )
3522 -- End of FP_M changes : Bug 3305199
3523 */
3524 AND p_copy_option IN( 'PA_TASK_ONLY', 'PA_TASK_SUBTASK' ) --here PA_TASK_SUBTASK is included in the in list to
3525 --include the task version id since it will not have any peer
3526 --relationship record in object rel table.
3527 ORDER BY 2;
3528
3529 CURSOR cur_proj_elems( p_proj_element_id NUMBER )
3530 IS
3531 SELECT
3532 PROJ_ELEMENT_ID
3533 ,PROJECT_ID
3534 ,OBJECT_TYPE
3535 ,ELEMENT_NUMBER
3536 ,NAME
3537 ,DESCRIPTION
3538 ,STATUS_CODE
3539 ,WF_STATUS_CODE
3540 ,PM_SOURCE_CODE
3541 ,PM_SOURCE_REFERENCE
3542 ,CLOSED_DATE
3543 ,LOCATION_ID
3544 ,MANAGER_PERSON_ID
3545 ,CARRYING_OUT_ORGANIZATION_ID
3546 ,TYPE_ID
3547 ,PRIORITY_CODE
3548 ,INC_PROJ_PROGRESS_FLAG
3549 ,RECORD_VERSION_NUMBER
3550 ,REQUEST_ID
3551 ,PROGRAM_APPLICATION_ID
3552 ,PROGRAM_ID
3553 ,PROGRAM_UPDATE_DATE
3554 ,ATTRIBUTE_CATEGORY
3555 ,ATTRIBUTE1
3556 ,ATTRIBUTE2
3557 ,ATTRIBUTE3
3558 ,ATTRIBUTE4
3559 ,ATTRIBUTE5
3560 ,ATTRIBUTE6
3561 ,ATTRIBUTE7
3562 ,ATTRIBUTE8
3563 ,ATTRIBUTE9
3564 ,ATTRIBUTE10
3565 ,ATTRIBUTE11
3566 ,ATTRIBUTE12
3567 ,ATTRIBUTE13
3568 ,ATTRIBUTE14
3569 ,ATTRIBUTE15
3570 ,WQ_ITEM_CODE
3571 ,WQ_UOM_CODE
3572 ,WQ_ACTUAL_ENTRY_CODE
3573 ,TASK_PROGRESS_ENTRY_PAGE_ID
3574 ,PARENT_STRUCTURE_ID
3575 ,PHASE_CODE
3576 ,PHASE_VERSION_ID
3577 ,WF_ITEM_TYPE
3578 ,WF_PROCESS
3579 ,WF_START_LEAD_DAYS
3580 ,BASE_PERCENT_COMP_DERIV_CODE
3581 FROM pa_proj_elements
3582 WHERE proj_element_id = p_proj_element_id;
3583
3584 cur_proj_elems_rec cur_proj_elems%ROWTYPE;
3585
3586
3587 /* Bug 2680486 -- Performance changes -- Commented the following cursor definition. Restructured it to
3588 avoid Non-mergable view issue*/
3589
3590 /* CURSOR cur_rev_parent_task( x_child_task_id NUMBER, x_wbs_level NUMBER )
3591 IS
3592 SELECT a.object_id_from1 parent_task_id
3593 FROM( SELECT object_id_from1
3594 FROM pa_object_relationships
3595 WHERE relationship_type = 'S'
3596 START WITH OBJECT_ID_TO1 = x_child_task_id
3597 --hsiu: bug 2669388
3598 -- START WITH object_id_from1 = x_child_task_id
3599 --traverse reverse
3600 CONNECT BY object_id_to1 = PRIOR object_id_from1 AND relationship_type = 'S' ) a, pa_proj_element_versions b
3601 WHERE a.object_id_from1 = b.element_version_id
3602 AND b.wbs_level = x_wbs_level;
3603 */
3604
3605 CURSOR cur_rev_parent_task( x_child_task_id NUMBER, x_wbs_level NUMBER )
3606 IS
3607 SELECT b.element_version_id parent_task_id
3608 FROM pa_proj_element_versions b
3609 WHERE b.wbs_level = x_wbs_level
3610 AND b.element_version_id IN ( SELECT object_id_from1
3611 FROM pa_object_relationships
3612 WHERE relationship_type = 'S'
3613 START WITH OBJECT_ID_TO1 = x_child_task_id
3614 --hsiu: bug 2669388
3615 -- START WITH object_id_from1 = x_child_task_id
3616 --traverse reverse
3617 CONNECT BY object_id_to1 = PRIOR object_id_from1 AND relationship_type = 'S'
3618 AND relationship_type = PRIOR relationship_type) ;
3619
3620
3621 /* Bug 2680486 -- Performance changes -- Passing project_id also to use the index in the following cursor */
3622
3623 CURSOR cur_struc_id( x_structure_version_id NUMBER, x_project_id NUMBER )
3624 IS
3625 SELECT proj_element_id
3626 FROM pa_proj_elem_ver_structure
3627 WHERE element_version_id = x_structure_version_id
3628 AND project_id = x_project_id;
3629
3630
3631 CURSOR cur_struc_type( x_structure_id NUMBER )
3632 IS
3633 SELECT 'Y'
3634 FROM pa_proj_structure_types ppst
3635 ,pa_structure_types pst
3636 WHERE ppst.proj_element_id = x_structure_id
3637 AND ppst.structure_type_id = pst.structure_type_id
3638 AND pst.structure_type_class_code = 'WORKPLAN';
3639
3640 CURSOR cur_struc_type2( c_structure_id NUMBER )
3641 IS
3642 SELECT 'Y'
3643 FROM pa_proj_structure_types ppst
3644 ,pa_structure_types pst
3645 WHERE ppst.proj_element_id = c_structure_id
3646 AND ppst.structure_type_id = pst.structure_type_id
3647 AND pst.structure_type_class_code IN( 'FINANCIAL' );
3648
3649 /* Bug 2623999 -- Commented the following cursor def'n and added a new one below it.
3650 We should check a structure version is and not structure id to
3651 find out a structure version is publised or not */
3652 /* CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
3653 select 'Y'
3654 from pa_proj_elem_ver_structure
3655 where proj_element_id = c_structure_id
3656 AND project_id = c_project_id
3657 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3658 */
3659
3660 --bug 3074706
3661 --added project_id
3662 CURSOR cur_pub_versions( c_structure_version_id NUMBER, c_project_id NUMBER ) is
3663 select 'Y'
3664 from pa_proj_elem_ver_structure
3665 where element_version_id = c_structure_version_id
3666 and project_id = c_project_id
3667 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3668 --end bug 3074706
3669
3670 CURSOR cur_dest_proj_id
3671 IS
3672 SELECT project_id
3673 FROM pa_proj_element_versions
3674 WHERE element_version_id = p_dest_task_version_id;
3675
3676 /* Added the Cursor For Bug #3573143*/
3677 CURSOR cur_task_id (c_element_version_id IN NUMBER, c_project_id IN NUMBER) IS
3678 SELECT proj_element_id
3679 FROM pa_proj_element_versions
3680 where element_version_id = c_element_version_id
3681 AND project_id = c_project_id;
3682 l_cur_task_id cur_task_id%ROWTYPE;
3683 /* Ended Bug 3573143*/
3684
3685 -- xxlu added task DFF attributes
3686 CURSOR cur_task_attr (c_task_id IN NUMBER) IS
3687 SELECT *
3688 FROM pa_tasks
3689 WHERE task_id = c_task_id;
3690 l_cur_task_attr cur_task_attr%ROWTYPE;
3691 -- end xxlu changes
3692
3693 l_dest_project_id NUMBER;
3694
3695 l_dummy_char VARCHAR2(1);
3696 l_task_number VARCHAR2(100);
3697 l_task_name VARCHAR2(240);
3698 l_structure_id NUMBER;
3699 l_project_id NUMBER;
3700 l_published_version VARCHAR2(1);
3701 l_copy_node_flag VARCHAR2(1);
3702 l_ref_task_id NUMBER;
3703 l_ref_project_id NUMBER;
3704
3705 l_old_wbs_level NUMBER;
3706
3707 l_ref_task_version_id NUMBER;
3708 l_peer_or_sub VARCHAR2(4);
3709 l_task_version_id NUMBER;
3710 l_pev_schedule_id NUMBER;
3711 l_element_version_id NUMBER;
3712
3713 --Hsiu added for date rollup
3714 --bug 3991067
3715 -- l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3716 l_tasks_ver_ids PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
3717 l_task_cnt NUMBER := 0;
3718 --end bug 3991067
3719
3720 --hsiu added for task weighting
3721 l_weighting NUMBER(17,2);
3722
3723 --hsiu added for task status rollup
3724 l_rollup_task_id NUMBER;
3725
3726 cursor sub_task_exists(l_parent_task_version_id NUMBER) IS
3727 select '1'
3728 from pa_object_relationships
3729 where object_id_from1 = l_parent_task_version_id
3730 and object_type_from IN ('PA_TASKS','PA_STRUCTURES')
3731 and object_type_to IN ('PA_TASKS','PA_STRUCTURES')
3732 and relationship_type = 'S';
3733
3734 --hsiu added for task version status
3735 CURSOR cur_proj_is_template(c_project_id NUMBER)
3736 IS select 'Y'
3737 from pa_projects_all
3738 where project_id = c_project_id
3739 and template_flag = 'Y';
3740 l_template_flag VARCHAR2(1);
3741
3742 l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
3743 --end hsiu changes
3744
3745 -- xxlu added for DFF attributes for calling create_schedule_version
3746 CURSOR cur_proj_elem_ver_sch(c_element_version_id NUMBER, c_project_id NUMBER) IS
3747 SELECT * FROM pa_proj_elem_ver_schedule
3748 WHERE project_id = c_project_id
3749 AND element_version_id = c_element_version_id;
3750
3751 v_cur_sch cur_proj_elem_ver_sch%ROWTYPE;
3752
3753 -- end xxlu changes
3754
3755 --hsiu added for task status
3756 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
3757 select object_id_from1
3758 from pa_object_relationships
3759 where object_id_to1 = c_elem_ver_id
3760 and object_type_to = 'PA_TASKS'
3761 and relationship_type = 'S';
3762 l_parent_ver_id NUMBER;
3763
3764 --hsiu added for bug 2669388
3765 CURSOR get_ref_tk_wbs(c_element_version_id NUMBER) IS
3766 select WBS_LEVEL
3767 from pa_proj_element_versions
3768 where element_version_id = c_element_version_id;
3769
3770 -- bug#16083858
3771 CURSOR check_cost_code_enabled(c_project_id NUMBER) IS
3772 select 'Y' from dual where
3773 EXISTS
3774 (SELECT *
3775 FROM pa_projects_all
3776 WHERE project_id = c_project_id
3777 AND CBS_VERSION_ID IS NOT NULL
3778 AND CBS_ENABLE_FLAG = 'Y');
3779
3780 -- bug#16083858
3781 CURSOR check_same_cbs_exist(c_src_project_id NUMBER, c_trgt_project_id NUMBER) IS
3782 select 'Y' from dual where
3783 EXISTS
3784 (SELECT *
3785 FROM pa_projects_all
3786 WHERE project_id = c_src_project_id
3787 AND nvl(CBS_VERSION_ID,-1) = nvl((select CBS_VERSION_ID from pa_projects_all
3788 WHERE project_id = c_trgt_project_id),-1)); -- added nvl condition bug#16713476
3789
3790 l_src_prj_cbs_enabled VARCHAR2(1) := 'N'; --bug#16083858
3791 l_dest_prj_cbs_enabled VARCHAR2(1) := 'N'; --bug#16083858
3792 l_same_cbs_flag VARCHAR2(1) := 'N'; --bug#16083858
3793
3794 l_cp_tk_assignments_flag VARCHAR2(1) :='N'; -- bug#16083858
3795 l_cp_people_flag VARCHAR2(1) :='N'; -- bug#16083858
3796 l_cp_financial_elem_flag VARCHAR2(1) :='N'; -- bug#16083858
3797 l_cp_material_items_flag VARCHAR2(1) :='N'; -- bug#16083858
3798 l_cp_equipment_flag VARCHAR2(1) :='N'; -- bug#16083858
3799 L_TEMP VARCHAR2(1) := 'N';
3800
3801
3802 l_ref_tk_wbs_level NUMBER;
3803 l_src_tasks_found boolean := false; --Bug2741989
3804
3805 --3035902: process update flag changes
3806 l_wp_process_flag VARCHAR2(1);
3807 l_wp_type VARCHAR2(1);
3808
3809 l_src_wp_type VARCHAR2(1); -- 4223490
3810
3811 l_weighting_basis_code VARCHAR2(30);
3812 --3035902: end process update flag changes
3813
3814 /* Included for Bug 4201927*/
3815 l_ver_enabled VARCHAR2(1);
3816 l_copy_external_flag VARCHAR2(1);
3817
3818 --bug 3301192 fin plan
3819 /* Bug #: 3305199 SMukka */
3820 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3821 /* l_old_task_ver_ids PA_PLSQL_DATATYPES.IdTabTyp; */
3822 /* l_new_task_ver_ids PA_PLSQL_DATATYPES.IdTabTyp; */
3823 /* l_old_task_ids PA_PLSQL_DATATYPES.IdTabTyp; */
3824 /* l_new_task_ids PA_PLSQL_DATATYPES.IdTabTyp; */
3825
3826 l_old_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3827 l_new_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3828
3829 l_old_task_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3830 l_new_task_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3831
3832 l_lowest_task_flag1 VARCHAR2(1);
3833 l_lowest_task_flag2 VARCHAR2(1);
3834 l_fin_task_flag VARCHAR2(1); -- fin html changes
3835 --bug 3301192 fin plan
3836
3837
3838 -- for bug# 3905123 , added cursor and local variable
3839
3840 CURSOR cur_is_top_task( task_ver_id NUMBER, struct_ver_id number)
3841 IS
3842 SELECT
3843 'x'
3844 FROM
3845 pa_object_relationships obj
3846 WHERE
3847 obj.object_id_to1 = task_ver_id
3848 AND obj.object_id_from1 = struct_ver_id
3849 AND object_type_from = 'PA_STRUCTURES'
3850 AND object_type_to = 'PA_TASKS'
3851 AND relationship_type = 'S'
3852 AND relationship_subtype = 'STRUCTURE_TO_TASK';
3853
3854 is_top_task_in_dest varchar2(1) := 'N';
3855 is_top_task varchar2(1) := NULL;
3856
3857 -- 3905123 end
3858
3859 -- for bug# 12931302
3860 l_current_tk_wbs_level NUMBER;
3861 l_diff_bw_tk_wbs_level NUMBER;
3862 is_diff_calculated boolean := false;
3863 -- 12931302 end
3864
3865 BEGIN
3866 pa_debug.init_err_stack ('PA_TASK_PUB1.COPY_TASK');
3867
3868 IF (p_debug_mode = 'Y') THEN
3869 pa_debug.debug('PA_TASK_PUB1.COPY_TASK begin');
3870 END IF;
3871
3872 IF (p_commit = FND_API.G_TRUE) THEN
3873 savepoint copy_task;
3874 END IF;
3875
3876 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
3877 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3878 END IF;
3879
3880 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
3881 FND_MSG_PUB.initialize;
3882 END IF;
3883
3884 --bug 4075697 copy_task
3885 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
3886 --bug 4075697
3887
3888 --3035902: process update flag changes
3889 l_wp_process_flag := 'N';
3890 --3035902: end process update flag changes
3891
3892 -- Added for FP_M changes. Bug 3305199 : Bhumesh xxx
3893
3894 If p_called_from_bulk_api = 'N' THEN -- 4201927
3895
3896 OPEN cur_dest_proj_id;
3897 FETCH cur_dest_proj_id INTO l_dest_project_id;
3898 CLOSE cur_dest_proj_id;
3899
3900 ELSE --If called from Bulk API
3901 l_dest_project_id := p_dest_project_id ;
3902 END IF;
3903
3904 /* bug#16083858 CBS enhancement
3905 * checking whether the source and destination projects are cbs enabled
3906 */
3907 -- start of cbs enabled validation
3908 OPEN check_cost_code_enabled(p_src_project_id);
3909 FETCH check_cost_code_enabled INTO L_TEMP;
3910 CLOSE check_cost_code_enabled;
3911 IF L_TEMP='Y' THEN
3912 l_src_prj_cbs_enabled := 'Y'; -- CBS enabled
3913 ELSE
3914 l_src_prj_cbs_enabled := 'N'; -- CBS disabled
3915 END IF;
3916 L_TEMP := 'N';
3917 OPEN check_cost_code_enabled(p_dest_project_id);
3918 FETCH check_cost_code_enabled INTO L_TEMP;
3919 CLOSE check_cost_code_enabled;
3920 IF L_TEMP='Y' THEN
3921 l_dest_prj_cbs_enabled := 'Y'; -- CBS enabled
3922 ELSE
3923 l_dest_prj_cbs_enabled := 'N'; -- CBS disabled
3924 END IF;
3925 L_TEMP := 'N';
3926 OPEN check_same_cbs_exist(p_src_project_id, p_dest_project_id);
3927 FETCH check_same_cbs_exist INTO L_TEMP;
3928 CLOSE check_same_cbs_exist;
3929 IF L_TEMP='Y' THEN
3930 l_same_cbs_flag := 'Y'; -- CBS enabled
3931 ELSE
3932 l_same_cbs_flag := 'N'; -- CBS disabled
3933 END IF;
3934
3935
3936 -- end of cbs enabled validation
3937 /* bug#16083858 CBS enhancement
3938 * If destination project is not CBS enabled and if the source project is
3939 * CBS enabled then resource assignments should not be copied.
3940 * If destination project is CBS enabled and if the source project is
3941 * not CBS enabled then also resource assignments should not be copied.
3942 */
3943 l_cp_tk_assignments_flag := p_cp_tk_assignments_flag ;
3944 l_cp_people_flag := p_cp_people_flag ;
3945 l_cp_financial_elem_flag := p_cp_financial_elem_flag ;
3946 l_cp_material_items_flag := p_cp_material_items_flag ;
3947 l_cp_equipment_flag := p_cp_equipment_flag ;
3948 IF (((l_src_prj_cbs_enabled <> l_dest_prj_cbs_enabled) OR (l_same_cbs_flag = 'N'))
3949 AND (p_cp_cost_code_flag = 'Y')) THEN
3950 l_cp_tk_assignments_flag := 'N';
3951 l_cp_people_flag := 'N';
3952 l_cp_financial_elem_flag := 'N';
3953 l_cp_material_items_flag := 'N';
3954 l_cp_equipment_flag := 'N';
3955 END IF;
3956
3957 IF ((l_same_cbs_flag = 'N')) THEN
3958 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3959 p_msg_name => 'PA_DIFF_CBS_CANNOT_COPY');
3960 raise FND_API.G_EXC_ERROR;
3961 END IF;
3962
3963
3964 /* If p_structure_type = 'WORKPLAN' and
3965 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id)
3966 IN ('SHARE_PARTIAL')
3967 Then
3968
3969 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
3970 p_task_version_id =>
3971 , p_ref_task_version_id => p_dest_task_version_id
3972 , x_return_status => x_return_status
3973 , x_msg_count => x_msg_count
3974 , x_msg_data => x_msg_data
3975 , x_error_msg_code => l_error_msg_code);
3976
3977 IF (x_return_status <> 'Y') THEN
3978 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3979 p_msg_name => l_error_msg_code);
3980 raise FND_API.G_EXC_ERROR;
3981 End If;
3982 End If;
3983 */ --moved below
3984
3985 -- End of FP_M changes
3986
3987 -- hyau Bug 2852753
3988 IF p_calling_module = 'SELF_SERVICE' THEN
3989
3990 --3035902: process update flag changes
3991 l_weighting_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_dest_project_id);
3992 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_dest_structure_version_id, 'WORKPLAN');
3993 --3035902: end process update flag changes
3994
3995
3996 OPEN get_product_code(l_dest_project_id);
3997 FETCH get_product_code INTO l_pm_product_code;
3998 CLOSE get_product_code;
3999
4000 If p_called_from_bulk_api = 'N' THEN
4001
4002 If l_pm_product_code IS NOT NULL THEN
4003 pa_pm_controls.Get_Project_actions_allowed
4004 (P_PM_PRODUCT_CODE => l_pm_product_code,
4005 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
4006 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
4007 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
4008 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
4009 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
4010 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
4011 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
4012 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
4013 P_ADD_TASK_ALLOWED => l_add_task_allowed,
4014 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
4015 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
4016 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
4017 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
4018 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
4019 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
4020 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
4021 P_ERROR_CODE => l_err_code,
4022 P_ERROR_STACK => l_err_stack,
4023 P_ERROR_STAGE => l_err_stage );
4024
4025 IF l_err_code <> 0 THEN
4026 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4027 p_msg_name => l_err_stage);
4028 END IF;
4029 IF l_add_task_allowed = 'N' THEN
4030 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4031 p_msg_name => 'PA_PR_PM_CANNOT_COPY');
4032 raise FND_API.G_EXC_ERROR;
4033 END IF;
4034 END IF;
4035
4036 End IF; -- End p_called_from_bulk_Api is N
4037 END IF;
4038
4039 -- end hyau Bug 2852753
4040
4041 ----dbms_output.put_line( 'Before Id to name conv.' );
4042
4043 /* Performance Bug 4201927 : Commenting as this API not called in Move Task version Context
4044 IF p_called_from_api <> 'MOVE_TASK_VERSION'
4045 THEN
4046 */
4047 --do not do any validations if called from Move task version API.
4048 IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
4049
4050
4051 If p_called_from_bulk_api = 'N' THEN
4052
4053 IF ((p_src_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4054 (p_src_project_name IS NOT NULL)) OR
4055 ((p_src_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4056 (p_src_project_id IS NOT NULL)) THEN
4057 --Call Check API.
4058 PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
4059 p_project_name => p_src_project_name,
4060 p_project_id => p_src_project_id,
4061 x_project_id => l_src_project_id,
4062 x_return_status => l_return_status,
4063 x_error_msg_code => l_error_msg_code);
4064 --dbms_output.put_line('after proj name 2 id conv: '||l_src_project_id);
4065 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4066 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4067 p_msg_name => l_error_msg_code);
4068 END IF;
4069 END IF;
4070
4071 IF ((p_src_structure_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4072 (p_src_structure_name IS NOT NULL)) OR
4073 ((p_src_structure_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4074 (p_src_structure_id IS NOT NULL)) THEN
4075 --Call Check API.
4076 PA_PROJECT_STRUCTURE_UTILS.Structure_Name_Or_Id
4077 (
4078 p_project_id => l_src_project_id
4079 ,p_structure_name => p_src_structure_name
4080 ,p_structure_id => p_src_structure_id
4081 ,x_structure_id => l_src_structure_id
4082 ,x_return_status => l_return_status
4083 ,x_error_message_code => l_error_msg_code
4084 );
4085 --dbms_output.put_line('after struct name 2 id conv: '||l_src_structure_id);
4086 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4087 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4088 p_msg_name => l_error_msg_code);
4089 END IF;
4090 END IF; --End Name-Id Conversion
4091
4092 --dbms_output.put_line( 'Before Id to name conv. Structure_Version_Name_Or_Id' );
4093 IF ((p_src_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4094 (p_src_structure_version_name IS NOT NULL)) OR
4095 ((p_src_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4096 (p_src_structure_version_id IS NOT NULL)) THEN
4097 --Call Check API.
4098 l_src_structure_version_id := p_src_structure_version_id;
4099 PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id
4100 (
4101 p_structure_id => l_src_structure_id
4102 ,p_structure_version_name => p_src_structure_version_name
4103 ,p_structure_version_id => p_src_structure_version_id
4104 ,x_structure_version_id => l_src_structure_version_id
4105 ,x_return_status => l_return_status
4106 ,x_error_message_code => l_error_msg_code
4107 );
4108 --dbms_output.put_line('after struct ver name 2 id conv: '||l_src_structure_version_id);
4109 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4110 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4111 p_msg_name => l_error_msg_code);
4112 END IF;
4113
4114 END IF; --End Name-Id Conversion
4115
4116 /*Task Name to ID Conversion : This is not needed in case of call from SS (i.e) Copy Bulk API */
4117 IF ((p_src_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4118 (p_src_task_name IS NOT NULL)) OR
4119 ((p_src_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4120 (p_src_task_version_id IS NOT NULL)) THEN
4121 --Call Check API.
4122
4123 --dbms_output.put_line( 'Before Id to name conv. task_Ver_Name_Or_Id' );
4124
4125 PA_PROJ_ELEMENTS_UTILS.task_Ver_Name_Or_Id
4126 (
4127 p_task_name => p_src_task_name
4128 ,p_task_version_id => p_src_task_version_id
4129 ,p_structure_version_id => l_src_structure_version_id
4130 ,x_task_version_id => l_src_task_version_id
4131 ,x_return_status => l_return_status
4132 ,x_error_msg_code => l_error_msg_code
4133 );
4134 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4135 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4136 p_msg_name => l_error_msg_code);
4137 END IF;
4138 END IF; --End Name-Id Conversion
4139
4140 /*4201927 : Moved this code outside the Loop*/
4141 -- bug 3301192 financial HTML changes
4142 IF p_structure_type = 'WORKPLAN'
4143 THEN
4144 IF
4145 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) =
4146 'SHARE_FULL'
4147 THEN
4148 l_fin_task_flag := 'Y';
4149 ELSE
4150 l_fin_task_flag := 'N';
4151 END IF;
4152 ELSE
4153 l_fin_task_flag := 'Y';
4154 END IF;
4155 -- bug 3301192 financial HTML changes
4156 /*4201927 : Moved this code outside the Loop*/
4157
4158 /*4201927 Start <<B>> */
4159 OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id );
4160 FETCH cur_struc_id INTO l_structure_id;--This is Destination StructureID
4161 CLOSE cur_struc_id;
4162
4163
4164 OPEN cur_proj_is_template(l_dest_project_id);
4165 FETCH cur_proj_is_template into l_template_flag;
4166 IF cur_proj_is_template%NOTFOUND THEN
4167 l_template_flag := 'N';
4168 END IF;
4169 CLOSE cur_proj_is_template;
4170
4171 /*4201927 : Moved this code outside the Loop*/
4172 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
4173 l_dest_project_id);
4174 /*4201927 : Moved this code outside the Loop*/
4175
4176 /*4201927 : Deriving whether versioned or not only once*/
4177 l_ver_enabled :=
4178 PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id);
4179
4180 /*4201927 : <<C>> Value for Copy External Flag*/
4181 IF p_src_project_id = l_dest_project_id
4182 THEN
4183 l_copy_external_flag := 'N';
4184 ELSE
4185 l_copy_external_flag := 'Y';
4186 ENd IF;
4187
4188 --hsiu added for task version status changes
4189 IF (l_template_flag = 'N') THEN
4190 --check if structure is shared
4191 -- if shared, check if versioned
4192 -- 'WORKING' if versioned; 'PUBLISHED' if not
4193 -- if split, check if 'FINANCIAL'
4194 -- 'PUBLISHED' if financial
4195 -- check if versioned
4196 -- 'WORKING' if versioend; 'PUBLISHED' if not
4197 IF ('Y' = l_shared) THEN
4198 IF ('Y' = l_ver_enabled) THEN
4199 l_task_unpub_ver_status_code := 'WORKING';
4200 ELSE
4201 l_task_unpub_ver_status_code := 'PUBLISHED';
4202 END IF;
4203 ELSE --split
4204 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id,'FINANCIAL') AND
4205 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id,'WORKPLAN')) THEN
4206 l_task_unpub_ver_status_code := 'PUBLISHED';
4207 ELSE --workplan only
4208 IF ('Y' = l_ver_enabled) THEN
4209 l_task_unpub_ver_status_code := 'WORKING';
4210 ELSE
4211 l_task_unpub_ver_status_code := 'PUBLISHED';
4212 END IF;
4213 END IF;
4214 END IF;
4215 ELSE
4216 l_task_unpub_ver_status_code := 'WORKING';
4217 END IF;
4218 --end task version status changes
4219
4220 /*4201927 End <<B>> */
4221 Else -- If called from copy bulk APi
4222 l_src_structure_version_id := p_src_structure_version_id;
4223 l_src_project_id := p_src_project_id ;
4224 l_src_structure_id := p_src_structure_id ;
4225 l_src_task_version_id := p_src_task_version_id ;
4226
4227 l_task_unpub_ver_status_code := p_task_unpub_ver_status_code;
4228 l_structure_id := p_dest_structure_id ;
4229 l_fin_task_flag := p_fin_task_flag;
4230
4231 l_shared :=p_sharing_enabled ;
4232 l_ver_enabled := p_versioning_enabled;
4233 l_copy_external_flag := p_copy_external_flag;
4234 -- as we have already derived this value in copy bulk api
4235
4236 End If ; -- If p_called_from_bulk_api = 'N'
4237
4238 END IF; -- End If Calling module is SS or Exchange
4239
4240
4241 IF l_src_project_id IS NULL OR l_src_structure_id IS NULL OR
4242 l_src_structure_version_id IS NULL OR (l_src_task_version_id IS NULL AND p_copy_option <> 'PA_ENTIRE_VERSION')
4243 THEN
4244 /* This Copy API not used in Move Task version context : Hence this check is not needed : 4201927
4245 IF p_called_from_api <> 'MOVE_TASK_VERSION'
4246 THEN
4247 */
4248
4249 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4250 p_msg_name => 'PA_PS_NOT_ENOUGH_PARAMS' );
4251 x_msg_data := 'COPY TASK : PA_PS_NOT_ENOUGH_PARAMS';
4252 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4253 RAISE FND_API.G_EXC_ERROR;
4254 /*END IF; : 4201927 */
4255 END IF;
4256
4257 /* 4201927 : Perf Fix : END IF; --move_task_version check. */
4258
4259 -- 4223490 Included for Copy External Flow
4260 IF l_copy_external_flag = 'Y' THEN
4261 l_src_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_src_structure_version_id,'WORKPLAN');
4262 ELSE
4263 l_src_wp_type := l_wp_type;
4264 END IF;
4265
4266 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4267 x_msg_count := FND_MSG_PUB.count_msg;
4268 IF x_msg_count = 1 then
4269 pa_interface_utils_pub.get_messages
4270 (p_encoded => FND_API.G_TRUE,
4271 p_msg_index => 1,
4272 p_msg_count => l_msg_count,
4273 p_msg_data => l_msg_data,
4274 p_data => l_data,
4275 p_msg_index_out => l_msg_index_out);
4276 x_msg_data := l_data;
4277 END IF;
4278 raise FND_API.G_EXC_ERROR;
4279 END IF;
4280 --If source task is empty and user not selected copy PA_ENTIRE_VERSION
4281 IF ( l_src_task_version_id IS NULL AND
4282 l_src_structure_version_id IS NOT NULL AND
4283 p_copy_option <> 'PA_ENTIRE_VERSION' ) OR
4284 ( p_copy_option NOT IN( 'PA_ENTIRE_VERSION', 'PA_TASK_ONLY', 'PA_TASK_SUBTASK' ) )
4285 THEN
4286 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4287 p_msg_name => 'PA_PS_WRONG_COPY_OPTION' );
4288 x_msg_data := 'PA_PS_WRONG_COPY_OPTION';
4289 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4290 RAISE FND_API.G_EXC_ERROR;
4291 END IF;
4292
4293 IF p_copy_option = 'PA_TASK_ONLY' OR p_copy_option = 'PA_TASK_SUBTASK'
4294 THEN
4295 l_element_version_id := l_src_task_version_id;
4296
4297 /*4201927 : This API not used in Move Task Version Context
4298 --If called from move_task versionsd then just copy parameter in l_element_verion_id var.
4299 IF p_called_from_api = 'MOVE_TASK_VERSION'
4300 THEN
4301 l_element_version_id := p_src_task_version_id;
4302 END IF;
4303 */
4304
4305 ELSIF p_copy_option = 'PA_ENTIRE_VERSION'
4306 THEN
4307 l_element_version_id := l_src_structure_version_id;
4308 END IF;
4309 IF p_dest_structure_version_id = p_dest_task_version_id THEN
4310 --Copying under a structure;
4311 l_ref_task_version_id := p_dest_structure_version_id;
4312
4313 --hsiu: bug 2669388
4314 l_ref_tk_wbs_level := 0;
4315 --end bug 2669388
4316 ELSE
4317 l_ref_task_version_id := p_dest_task_version_id;
4318 --hsiu: bug 2669388
4319 OPEN get_ref_tk_wbs(l_ref_task_version_id);
4320 FETCH get_ref_tk_wbs into l_ref_tk_wbs_level;
4321 CLOSE get_ref_tk_wbs;
4322
4323 IF (p_peer_or_sub = 'SUB') THEN
4324 l_ref_tk_wbs_level := l_ref_tk_wbs_level;
4325 ELSE
4326 l_ref_tk_wbs_level := l_ref_tk_wbs_level-1;
4327 END IF;
4328 --end bug 2669388
4329 END IF;
4330
4331 l_peer_or_sub := p_peer_or_sub;
4332 --hsiu task status changes
4333 --check if ok to create subtask
4334 IF (l_peer_or_sub = 'PEER') THEN
4335 OPEN get_parent_version_id(l_ref_task_version_id);
4336 FETCH get_parent_version_id into l_parent_ver_id;
4337 CLOSE get_parent_version_id;
4338 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
4339 p_parent_task_ver_id => l_parent_ver_id
4340 ,x_return_status => l_return_status
4341 ,x_error_message_code => l_error_msg_code);
4342
4343 IF (l_return_status <> 'Y') THEN
4344 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4345 p_msg_name => l_error_msg_code);
4346 raise FND_API.G_EXC_ERROR;
4347 END IF;
4348 ELSE
4349 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
4350 p_parent_task_ver_id => l_ref_task_version_id
4351 ,x_return_status => l_return_status
4352 ,x_error_message_code => l_error_msg_code
4353 );
4354 IF (l_return_status <> 'Y') THEN
4355 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4356 p_msg_name => l_error_msg_code);
4357 raise FND_API.G_EXC_ERROR;
4358 END IF;
4359 END IF;
4360 --end task status changes
4361 /* not required in the context of copy_task bcoz when a task is copied, copied as financial if copied under Fin tab and
4362 workplan if copied under WP tab for a partial share structures.
4363 If p_structure_type = 'WORKPLAN' and
4364 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) = 'SHARE_PARTIAL'
4365 Then
4366 IF p_dest_structure_version_id <> p_dest_task_version_id -- reference should not be str ver
4367 THEN
4368 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
4369 p_task_version_id => l_element_version_id
4370 , p_ref_task_version_id => l_ref_task_version_id
4371 , x_return_status => x_return_status
4372 , x_msg_count => x_msg_count
4373 , x_msg_data => x_msg_data
4374 , x_error_msg_code => l_error_msg_code);
4375
4376 IF (x_return_status <> 'Y') THEN
4377 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4378 p_msg_name => l_error_msg_code);
4379 raise FND_API.G_EXC_ERROR;
4380 End If;
4381 END IF;
4382 End If;
4383 */
4384
4385 --check the task is a lowest task bug 3301192
4386 IF p_dest_structure_version_id <> p_dest_task_version_id /* reference should not be str ver */
4387 THEN
4388 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_dest_task_version_id );
4389 END IF;
4390
4391 --dbms_output.put_line( 'l_element_version_id '||l_element_version_id );
4392
4393 ----------------------------------------------
4394 Rec_Count := 0; -- <-- Added for FP_M changes
4395 -- Refer to tracking bug 3305199
4396 ----------------------------------------------
4397 FOR cur_obj_rel_rec IN cur_obj_rel( l_element_version_id ) LOOP
4398
4399 l_src_tasks_found := true; -- Bug2741989
4400 --For Bug 12931302
4401 --Set the value of wbs_level for curent task in l_current_tk_wbs_level.
4402 l_current_tk_wbs_level := cur_obj_rel_rec.wbs_level;
4403 --Find out differnce b/w first task wbs level and one.
4404 if is_diff_calculated = false
4405 then
4406 l_diff_bw_tk_wbs_level := l_current_tk_wbs_level - 1;
4407 is_diff_calculated := true;
4408 end if;
4409 --Bug 12931302
4410 OPEN cur_proj_elems( cur_obj_rel_rec.proj_element_id );
4411 FETCH cur_proj_elems INTO cur_proj_elems_rec;
4412 CLOSE cur_proj_elems;
4413
4414 IF length( p_prefix||cur_proj_elems_rec.element_number ) > 100 OR
4415 length( p_prefix||cur_proj_elems_rec.name ) > 240
4416 THEN
4417 l_task_number := SUBSTR( p_prefix||cur_proj_elems_rec.element_number, 1, 100 );
4418 l_task_name := SUBSTR( p_prefix||cur_proj_elems_rec.name, 1, 240 );
4419 ELSE
4420 l_task_number := p_prefix||cur_proj_elems_rec.element_number;
4421 l_task_name := p_prefix||cur_proj_elems_rec.name;
4422 END IF;
4423
4424 /*4201927 */
4425 IF cur_obj_rel%ROWCOUNT = 1
4426 THEN
4427 /* Bug 2680486 -- Performance changes -- Passed project_id also in the following statement */
4428
4429 OPEN cur_struc_id( cur_obj_rel_rec.parent_structure_version_id, cur_obj_rel_rec.project_id );
4430 FETCH cur_struc_id INTO l_structure_id;
4431 CLOSE cur_struc_id;
4432 END IF;
4433 l_structure_id := p_dest_structure_id ;
4434 /*4201927 */
4435
4436 --dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Task' );
4437 --dbms_output.put_line( 'Org Id '||cur_proj_elems_rec.carrying_out_organization_id);
4438
4439 /*4201927 : This Copy API not used in Move Task Version Context , Hence Commenting
4440 IF (p_called_from_api <> 'MOVE_TASK_VERSION') THEN */
4441 --bug 2846700
4442 --the rest has been moved above create_task_version
4443
4444 /* 4201927 This l_structure_id correspond's to the destination project's structure id
4445 for the passed p_dest_structure_version_id.
4446 In Copy Bulk API we are already deriving this value and passing
4447 as p_dest_structure_id
4448 Also,This code need not be present inside FOR LOP for each and every task
4449
4450 Hence moving it outside the loop
4451 */
4452 /* OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id );
4453 FETCH cur_struc_id INTO l_structure_id; -- (<<A>>)
4454 CLOSE cur_struc_id;
4455 */
4456 /*This code refers to finding whether the destination is a template or project
4457 It need not be present inside the loop
4458 /*
4459 --hsiu: added for task version status
4460 OPEN cur_proj_is_template(l_dest_project_id);
4461 FETCH cur_proj_is_template into l_template_flag;
4462 IF cur_proj_is_template%NOTFOUND THEN
4463 l_template_flag := 'N';
4464 END IF;
4465 CLOSE cur_proj_is_template;
4466 4201927 */
4467 /* ============ Moved this block of code above the FOR LOOP tagged by <<B>> =====*/
4468
4469 --bug 2846700
4470 /* END IF; 4201927*/
4471
4472 --hsiu modified for calculating weighting.
4473 OPEN get_cur_task_ver_weighting(cur_obj_rel_rec.task_version_id);
4474 FETCH get_cur_task_ver_weighting into l_weighting;
4475 CLOSE get_cur_task_ver_weighting;
4476
4477 IF cur_obj_rel%ROWCOUNT > 1
4478 THEN
4479 --Bug 12931302
4480 IF l_old_wbs_level < l_current_tk_wbs_level
4481 THEN
4482 l_peer_or_sub := 'SUB';
4483 ELSIF l_old_wbs_level = l_current_tk_wbs_level
4484 THEN
4485 l_peer_or_sub := 'PEER';
4486 ELSE
4487 --if the new task being created is the lower level than the previous one.
4488 --write logic to find out the task at cur_obj_rel_rec.wbs_level
4489 -- t1
4490 -- t1.1
4491 -- t1.2
4492 -- t1.2.1
4493 -- t1.2.2
4494 -- t1.2.2.1
4495 -- t1.3 ( new task created here. For this task the ref is t1.2 )
4496 l_peer_or_sub := 'PEER';
4497 --hsiu: bug 269388
4498 -- OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level);
4499 --OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level + l_ref_tk_wbs_level);
4500 --Begin Bug 12931302
4501 -- (l_current_tk_wbs_level - l_diff_bw_tk_wbs_level) will return the relative
4502 -- wbs_level for the current task.
4503 -- If we copy t1.1 and select the Placement as "1", then t1.1.2(wbs_level is 3) was created as peer of
4504 -- t1.1.1.1(wbs_level is 4) because of wbs_level for the task t1.1.2 is 3 and ref_tk_wbs_level is 1 (because we selected 1 as placement).
4505 -- and system calculated wbs_level for the new task (t1.1.2) as 4.
4506 -- Below code will ensure that task t1.1.2 should be peer of t1.1.1 not t1.1.1.1
4507 -- Task wbs_level from db Relative wbs_level by below code
4508 -- t1.1 2 1
4509 -- t1.1.1 3 2
4510 -- t1.1.1.1 4 3
4511 -- t1.1.1.1.1 5 4
4512 -- t1.1.2 3 2
4513 -- t1.1.2.1 4 3
4514
4515 OPEN cur_rev_parent_task( l_ref_task_version_id, l_current_tk_wbs_level - l_diff_bw_tk_wbs_level + l_ref_tk_wbs_level);
4516 --End Bug 12931302
4517 --end bug 2669388
4518 FETCH cur_rev_parent_task INTO l_ref_task_version_id;
4519 /** Code added for Bug 4046751 . **/
4520 -- While doing Copy Tasks of the structure below
4521 -- t1
4522 -- t1.1
4523 -- t1.1.1
4524 -- t1.1.1.1
4525 -- t1.1.2
4526 -- If we Copy t1.1, then task t1.1.2 was being created as a peer task of t1.1.1.1.
4527 -- The code below will ensure that its p_ref_task_id is set to t1.1.1 and not t1.1.1.1
4528 IF cur_rev_parent_task%NOTFOUND then
4529 CLOSE cur_rev_parent_task;
4530 OPEN cur_rev_parent_task( l_ref_task_version_id, l_current_tk_wbs_level);
4531 FETCH cur_rev_parent_task INTO l_ref_task_version_id;
4532 END if;
4533 /** Code changes end for BUg 4046751 **/
4534 CLOSE cur_rev_parent_task;
4535 END IF;
4536 --hsiu added, for task weighting
4537 ELSIF cur_obj_rel%ROWCOUNT = 1 THEN
4538 IF (l_peer_or_sub = 'PEER') THEN
4539 l_weighting := 0;
4540 ELSE --'SUB'
4541 OPEN sub_task_exists(l_ref_task_version_id);
4542 FETCH sub_task_exists into l_dummy_char;
4543 IF sub_task_exists%NOTFOUND THEN
4544 If (p_copy_option <> 'PA_ENTIRE_VERSION') THEN
4545 l_weighting := 100;
4546 END IF;
4547 ELSE
4548 l_weighting := 0;
4549 END IF;
4550 END IF;
4551 --end task weighting modification
4552 END IF;
4553
4554 /* This code need not execute for each and every task in LOOP
4555 4201927 : Moved this code to tagging marked by <<B>>
4556 -- Start of block moved
4557
4558 ----dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Task_Version' );
4559 --hsiu added for task version status changes
4560 IF (l_template_flag = 'N') THEN
4561 --check if structure is shared
4562 -- if shared, check if versioned
4563 -- 'WORKING' if versioned; 'PUBLISHED' if not
4564 -- if split, check if 'FINANCIAL'
4565 -- 'PUBLISHED' if financial
4566 -- check if versioned
4567 -- 'WORKING' if versioend; 'PUBLISHED' if not
4568 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_dest_project_id)) THEN
4569 IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id)) THEN
4570 l_task_unpub_ver_status_code := 'WORKING';
4571 ELSE
4572 l_task_unpub_ver_status_code := 'PUBLISHED';
4573 END IF;
4574 ELSE --split
4575 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL') AND
4576 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
4577 l_task_unpub_ver_status_code := 'PUBLISHED';
4578 ELSE --workplan only
4579 IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id)) THEN
4580 l_task_unpub_ver_status_code := 'WORKING';
4581 ELSE
4582 l_task_unpub_ver_status_code := 'PUBLISHED';
4583 END IF;
4584 END IF;
4585 END IF;
4586 ELSE
4587 l_task_unpub_ver_status_code := 'WORKING';
4588 END IF;
4589 --end task version status changes
4590
4591 End Moving Code to <<B>> for 4201927*/
4592
4593 --bug 2846700
4594 --moved here from above to get correct referenct task id and peer_or_sub value
4595 /* IF p_called_from_api <> 'MOVE_TASK_VERSION'
4596 THEN
4597 4201927 : This Copy API not used in Move Task version Context
4598 Hence Commented
4599 */
4600 --added for task version status
4601
4602 /* Bug 3573143 */
4603 OPEN cur_task_id(p_src_task_version_id, p_src_project_id);
4604 FETCH cur_task_id INTO l_cur_task_id;
4605 CLOSE cur_task_id;
4606 /* Ended Bug 3573143 */
4607 -- xxlu added task DFF attributes
4608
4609 /* Commented the following code Bug 3573143 */
4610 /* OPEN cur_task_attr(p_src_structure_id); */
4611 OPEN cur_task_attr(l_cur_task_id.proj_element_id); -- Added Bug 3573143
4612 FETCH cur_task_attr INTO l_cur_task_attr;
4613 CLOSE cur_task_attr;
4614
4615 l_task_id := null; --bug 2625556
4616
4617 /* Bug 2623999 -- added the following select to get the ref_task_id*/
4618 --bug 2846700
4619 --modified sql to get correct reference task
4620 --mwasowic: handle a case when we're copying the top task and
4621 -- l_ref_task_version_id is really a structure version id, bug 3587047
4622
4623 IF p_dest_structure_version_id = p_dest_task_version_id THEN
4624
4625 -- 3905123 added below code
4626
4627 -- check whether source task is top task or not
4628 -- if source task is top task
4629 -- in destination structure, check the task is getting created as PEER or SUB
4630 -- if task is getting created as SUB
4631 -- pass l_ref_task_id as NULL
4632 -- else
4633 -- derive proj_element_id for the destination task and pass as l_ref_task_id
4634 -- end if
4635 -- else
4636 -- if copy_option is 'PA_TASK_ONLY' or 'PA_TASK_SUBTASK' and source task is not the top task
4637 -- and first task is getting created in destination structure then
4638 -- pass l_ref_task_id as NULL
4639 -- ( this code will be only called once while creating the first top task in dest struct,
4640 -- which is not the top task in source structure , copy option is PA_TASK_ONLY or PA_TASK_SUBTASK )
4641 -- else
4642 -- derive proj_element_id for the destination and pass as l_ref_task_id
4643 -- end if
4644 -- end if
4645
4646 -- Exp : Copy Option is 'ENTIRE_STRUCTURE' and source structure is
4647
4648 -- |_T1 ( l_ref_task_id will be passed as NULL )
4649 -- | |_T1.1 ( l_ref_task_id will be passed as detn task T1's proj_element_id )
4650 -- |_T2 ( l_ref_task_id will be passed as detn task T1's proj_element_id )
4651
4652 is_top_task := null;
4653
4654 open cur_is_top_task(cur_obj_rel_rec.task_version_id, l_src_structure_version_id);
4655 fetch cur_is_top_task INTO is_top_task;
4656 CLOSE cur_is_top_task;
4657
4658 IF is_top_task = 'x' THEN
4659 IF l_peer_or_sub = 'PEER' THEN
4660 SELECT proj_element_id
4661 INTO l_ref_task_id
4662 FROM pa_proj_element_versions
4663 WHERE element_version_id = l_ref_task_version_id;
4664 ELSE
4665 l_ref_task_id := null;
4666 END IF;
4667 ELSE
4668 IF is_top_task_in_dest = 'N' AND (p_copy_option IN ('PA_TASK_ONLY','PA_TASK_SUBTASK')) THEN
4669 l_ref_task_id := NULL;
4670 ELSE
4671 SELECT proj_element_id
4672 INTO l_ref_task_id
4673 FROM pa_proj_element_versions
4674 WHERE element_version_id = l_ref_task_version_id;
4675 END IF;
4676 END IF;
4677
4678 -- 3905123 end
4679 ELSE
4680 SELECT proj_element_id
4681 INTO l_ref_task_id
4682 FROM pa_proj_element_versions
4683 WHERE element_version_id = l_ref_task_version_id;
4684 --commented for bug 2846700
4685 --WHERE element_version_id = p_dest_task_version_id;
4686 END IF;
4687
4688 -- 3905123 , once the first task is created in destination, change the value of is_top_task_in_dest var to 'Y'
4689
4690 IF is_top_task_in_dest = 'N' AND p_dest_structure_version_id = p_dest_task_version_id THEN
4691 is_top_task_in_dest := 'Y';
4692 END IF;
4693
4694 -- 3905123 end
4695
4696 --3035902: process update flag changes
4697 --set update process flag if necessary;
4698
4699 IF (l_wp_process_flag = 'N') THEN
4700 --may need to update process flag
4701 IF ((l_shared = 'N') AND
4702 (l_wp_type = 'Y') AND
4703 (pa_task_type_utils.check_tk_type_progressable(cur_proj_elems_rec.TYPE_ID)='Y') AND
4704 (l_weighting_basis_code <> 'MANUAL'))
4705 THEN
4706 --split and workplan; only update if progressable task added
4707 l_wp_process_flag := 'Y';
4708 ELSIF ((l_shared = 'N') AND
4709 (l_wp_type = 'N')) THEN
4710 --split and financial; update
4711 l_wp_process_flag := 'Y';
4712 ELSIF (l_shared = 'Y') THEN
4713 l_wp_process_flag := 'Y';
4714 END IF;
4715 END IF;
4716 --3035902: end process update flag changes
4717
4718 PA_TASK_PVT1.Create_Task(
4719 p_api_version => p_api_version
4720 ,p_init_msg_list => p_init_msg_list
4721 ,p_commit => p_commit
4722 ,p_validate_only => p_validate_only
4723 ,p_validation_level => p_validation_level
4724 ,p_calling_module => p_calling_module
4725 ,p_debug_mode => p_debug_mode
4726 ,p_max_msg_count => p_max_msg_count
4727 ,p_object_type => cur_proj_elems_rec.object_type
4728 ,p_project_id => l_dest_project_id
4729 ,p_structure_id => l_structure_id
4730 ,p_structure_version_id => p_dest_structure_version_id
4731 ,p_task_number => l_task_number
4732 ,p_task_name => l_task_name
4733 ,p_task_description => cur_proj_elems_rec.description
4734 ,p_location_id => cur_proj_elems_rec.location_id
4735 --p_country => null
4736 --p_territory_code => null
4737 --p_state_region => null
4738 --p_city => null
4739 ,p_task_manager_id => cur_proj_elems_rec.manager_person_id
4740 --p_task_manager_name => null
4741 ,p_carrying_out_org_id => cur_proj_elems_rec.carrying_out_organization_id
4742 --p_carrying_out_org_name => null
4743 ,p_priority_code => cur_proj_elems_rec.priority_code
4744 ,p_TYPE_ID => cur_proj_elems_rec.TYPE_ID
4745 --,p_status_code => cur_proj_elems_rec.status_code
4746 ,p_inc_proj_progress_flag => cur_proj_elems_rec.inc_proj_progress_flag
4747 --,p_pm_product_code => cur_proj_elems_rec.pm_product_code
4748 --,p_pm_task_reference => cur_proj_elems_rec.pm_task_reference
4749 ,p_closed_date => cur_proj_elems_rec.closed_date
4750 --p_scheduled_start_date => null
4751 --p_scheduled_finish_date => null
4752 ,p_attribute_category => cur_proj_elems_rec.attribute_category
4753 ,p_attribute1 => cur_proj_elems_rec.attribute1
4754 ,p_attribute2 => cur_proj_elems_rec.attribute2
4755 ,p_attribute3 => cur_proj_elems_rec.attribute3
4756 ,p_attribute4 => cur_proj_elems_rec.attribute4
4757 ,p_attribute5 => cur_proj_elems_rec.attribute5
4758 ,p_attribute6 => cur_proj_elems_rec.attribute6
4759 ,p_attribute7 => cur_proj_elems_rec.attribute7
4760 ,p_attribute8 => cur_proj_elems_rec.attribute8
4761 ,p_attribute9 => cur_proj_elems_rec.attribute9
4762 ,p_attribute10 => cur_proj_elems_rec.attribute10
4763 ,p_attribute11 => cur_proj_elems_rec.attribute11
4764 ,p_attribute12 => cur_proj_elems_rec.attribute12
4765 ,p_attribute13 => cur_proj_elems_rec.attribute13
4766 ,p_attribute14 => cur_proj_elems_rec.attribute14
4767 ,p_attribute15 => cur_proj_elems_rec.attribute15
4768 ,p_task_weighting_deriv_code =>NULL
4769 ,p_work_item_code =>cur_proj_elems_rec.WQ_ITEM_CODE
4770 ,p_uom_code =>cur_proj_elems_rec.WQ_UOM_CODE
4771 ,p_wq_actual_entry_code =>cur_proj_elems_rec.WQ_ACTUAL_ENTRY_CODE
4772 ,p_task_progress_entry_page_id =>cur_proj_elems_rec.TASK_PROGRESS_ENTRY_PAGE_ID
4773 ,p_parent_structure_id => cur_proj_elems_rec.parent_structure_id
4774 /* hy Bug 2767403 Fix - Should not copy phase when copy task
4775 ,p_phase_code => cur_proj_elems_rec.phase_code
4776 ,p_phase_version_id => cur_proj_elems_rec.phase_version_id
4777 end hy Bug 2767403 Fix */
4778 ,p_tk_attribute_category => l_cur_task_attr.attribute_category
4779 ,p_tk_attribute1 => l_cur_task_attr.attribute1
4780 ,p_tk_attribute2 => l_cur_task_attr.attribute2
4781 ,p_tk_attribute3 => l_cur_task_attr.attribute3
4782 ,p_tk_attribute4 => l_cur_task_attr.attribute4
4783 ,p_tk_attribute5 => l_cur_task_attr.attribute5
4784 ,p_tk_attribute6 => l_cur_task_attr.attribute6
4785 ,p_tk_attribute7 => l_cur_task_attr.attribute7
4786 ,p_tk_attribute8 => l_cur_task_attr.attribute8
4787 ,p_tk_attribute9 => l_cur_task_attr.attribute9
4788 ,p_tk_attribute10 => l_cur_task_attr.attribute10
4789 ,p_peer_or_sub => l_peer_or_sub /* Bug 2623999 -- added this parameter*/ --bug 2846700: modified to use l_peer_or_sub
4790 ,p_ref_task_id => l_ref_task_id /* Bug 2623999 -- added this parameter*/
4791 ,p_structure_type => p_structure_type
4792 -- Bug#3811846 : added p_base_perc_comp_deriv_code
4793 ,p_base_perc_comp_deriv_code => cur_proj_elems_rec.base_percent_comp_deriv_code
4794 -- Bug#3491609 : Workflow Chanegs FP M
4795 ,p_wf_item_type => cur_proj_elems_rec.wf_item_type
4796 ,p_wf_process => cur_proj_elems_rec.wf_process
4797 ,p_wf_lead_days => cur_proj_elems_rec.wf_start_lead_days
4798 -- Bug#3491609 : Workflow Chanegs FP M
4799 ,x_task_id => l_task_id
4800 ,x_return_status => l_return_status
4801 ,x_msg_count => l_msg_count
4802 ,x_msg_data => l_msg_data );
4803 -- end xxlu changes
4804 /* 4201927 : THIS COPY API is not used in MOVE_TASK_VERSION context
4805 hence commenting
4806 ELSIF p_called_from_api = 'MOVE_TASK_VERSION'
4807 THEN
4808 l_task_id := cur_obj_rel_rec.proj_element_id;
4809 END IF;
4810 4201927*/
4811
4812 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4813 x_msg_count := FND_MSG_PUB.count_msg;
4814 IF x_msg_count = 1 then
4815 pa_interface_utils_pub.get_messages
4816 (p_encoded => FND_API.G_TRUE,
4817 p_msg_index => 1,
4818 p_msg_count => l_msg_count,
4819 p_msg_data => l_msg_data,
4820 p_data => l_data,
4821 p_msg_index_out => l_msg_index_out);
4822 x_msg_data := l_data;
4823 END IF;
4824 raise FND_API.G_EXC_ERROR;
4825 END IF;
4826 --end bug 2846700
4827
4828
4829 /* Added for 14209636 */
4830 IF (p_user_defn_att_flag='Y') THEN
4831 l_orig_proj_pk_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(EGO_COL_NAME_VALUE_PAIR_OBJ('PROJECT_ID', p_src_project_id));
4832 l_new_proj_pk_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(EGO_COL_NAME_VALUE_PAIR_OBJ('PROJECT_ID', p_dest_project_id));
4833 l_new_task_pk_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(EGO_COL_NAME_VALUE_PAIR_OBJ('PROJ_ELEMENT_ID', l_task_id));
4834 /* not required
4835 if(p_src_task_version_id is not NULL) THEN
4836 OPEN cur_dest_proj_element_id(p_src_task_version_id,p_src_project_id);
4837 FETCH cur_dest_proj_element_id into l_Src_Proj_Element_id;
4838 CLOSE cur_dest_proj_element_id;
4839 END IF;
4840 */
4841 l_orig_task_pk_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(EGO_COL_NAME_VALUE_PAIR_OBJ('PROJ_ELEMENT_ID', cur_obj_rel_rec.proj_element_id));
4842
4843 EGO_USER_ATTRS_DATA_PUB.Copy_User_Attrs_Data (
4844 p_api_version => 1.0
4845 ,p_application_id => 275
4846 ,p_object_name => 'PA_PROJECTS'
4847 ,p_old_pk_col_value_pairs => l_orig_proj_pk_value_pairs
4848 ,p_old_dtlevel_col_value_pairs => l_orig_task_pk_value_pairs
4849 ,p_new_pk_col_value_pairs => l_new_proj_pk_value_pairs
4850 ,p_new_dtlevel_col_value_pairs => l_new_task_pk_value_pairs
4851 ,p_commit => FND_API.G_TRUE
4852 ,x_return_status => x_return_status
4853 ,x_errorcode => l_errorcode
4854 ,x_msg_count => x_msg_count
4855 ,x_msg_data => l_msg_data );
4856
4857 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4858 x_msg_count := FND_MSG_PUB.count_msg;
4859 IF x_msg_count = 1 then
4860 pa_interface_utils_pub.get_messages
4861 (p_encoded => FND_API.G_TRUE,
4862 p_msg_index => 1,
4863 p_msg_count => x_msg_count,
4864 p_msg_data => l_msg_data,
4865 p_data => l_data,
4866 p_msg_index_out => l_msg_index_out);
4867 x_msg_data := l_data;
4868 END IF;
4869 raise FND_API.G_EXC_ERROR;
4870 END IF;
4871 END IF;
4872 /* End for 14209636 */
4873
4874
4875 PA_TASK_PUB1.Create_Task_Version(
4876 p_api_version => p_api_version
4877 ,p_init_msg_list => p_init_msg_list
4878 ,p_commit => p_commit
4879 ,p_validate_only => p_validate_only
4880 ,p_validation_level => p_validation_level
4881 ,p_calling_module => p_calling_module
4882 ,p_debug_mode => p_debug_mode
4883 ,p_max_msg_count => p_max_msg_count
4884 ,p_ref_task_version_id => l_ref_task_version_id
4885 ,p_peer_or_sub => l_peer_or_sub
4886 ,p_task_id => l_task_id
4887 ,p_attribute_category => cur_obj_rel_rec.attribute_category
4888 ,p_attribute1 => cur_obj_rel_rec.attribute1
4889 ,p_attribute2 => cur_obj_rel_rec.attribute2
4890 ,p_attribute3 => cur_obj_rel_rec.attribute3
4891 ,p_attribute4 => cur_obj_rel_rec.attribute4
4892 ,p_attribute5 => cur_obj_rel_rec.attribute5
4893 ,p_attribute6 => cur_obj_rel_rec.attribute6
4894 ,p_attribute7 => cur_obj_rel_rec.attribute7
4895 ,p_attribute8 => cur_obj_rel_rec.attribute8
4896 ,p_attribute9 => cur_obj_rel_rec.attribute9
4897 ,p_attribute10 => cur_obj_rel_rec.attribute10
4898 ,p_attribute11 => cur_obj_rel_rec.attribute11
4899 ,p_attribute12 => cur_obj_rel_rec.attribute12
4900 ,p_attribute13 => cur_obj_rel_rec.attribute13
4901 ,p_attribute14 => cur_obj_rel_rec.attribute14
4902 ,p_attribute15 => cur_obj_rel_rec.attribute15
4903 ,p_WEIGHTING_PERCENTAGE => l_weighting
4904 ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
4905 ,p_financial_task_flag => l_fin_task_flag --bug 3301192
4906 ,x_task_version_id => l_task_version_id
4907 ,x_return_status => l_return_status
4908 ,x_msg_count => l_msg_count
4909 ,x_msg_data => l_msg_data
4910 );
4911
4912 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4913 x_msg_count := FND_MSG_PUB.count_msg;
4914 IF x_msg_count = 1 then
4915 pa_interface_utils_pub.get_messages
4916 (p_encoded => FND_API.G_TRUE,
4917 p_msg_index => 1,
4918 p_msg_count => l_msg_count,
4919 p_msg_data => l_msg_data,
4920 p_data => l_data,
4921 p_msg_index_out => l_msg_index_out);
4922 x_msg_data := l_data;
4923 END IF;
4924 raise FND_API.G_EXC_ERROR;
4925 END IF;
4926
4927 /* bug#16083858 Adding logic to check if cbs is enabled
4928 * and whether cost codes should be copied.
4929 */
4930 IF ((l_src_prj_cbs_enabled = 'Y')
4931 AND (l_dest_prj_cbs_enabled = 'Y')
4932 AND (p_cp_cost_code_flag = 'Y' or l_cp_tk_assignments_flag = 'Y')
4933 AND (l_same_cbs_flag = 'Y'))THEN
4934
4935
4936 PA_ALTERNATE_TASK_PVT.Copy_Cost_Codes_From_Task
4937 (p_Source_Task_Id => cur_obj_rel_rec.proj_element_id,
4938 p_Target_Task_Id => l_task_id,
4939 X_Return_Status => l_return_status,
4940 X_Msg_Data => l_msg_data,
4941 X_Msg_Count => l_msg_count);
4942
4943
4944
4945 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4946 x_msg_count := FND_MSG_PUB.count_msg;
4947 IF x_msg_count = 1 then
4948 pa_interface_utils_pub.get_messages
4949 (p_encoded => FND_API.G_TRUE,
4950 p_msg_index => 1,
4951 p_msg_count => l_msg_count,
4952 p_msg_data => l_msg_data,
4953 p_data => l_data,
4954 p_msg_index_out => l_msg_index_out);
4955 x_msg_data := l_data;
4956 END IF;
4957 raise FND_API.G_EXC_ERROR;
4958 END IF;
4959
4960 END IF;
4961
4962 --------------------------------------------- FP_M changes: Begin
4963 -- Refer to tracking bug 3305199
4964 -- Populate the source and destination task version ID in
4965 -- PL/SQL tables
4966
4967 Rec_Count := Rec_Count + 1;
4968 l_old_task_versions_tab.extend(1);
4969 l_new_task_versions_tab.extend(1);
4970 l_Old_Task_Versions_Tab(Rec_Count) := cur_obj_rel_rec.Task_Version_ID;
4971 l_New_Task_Versions_Tab(Rec_Count) := l_task_version_id;
4972
4973 --bug 3301192 fin plan
4974 l_old_task_ver_ids.extend(1); /* Venky */
4975 l_new_task_ver_ids.extend(1); /* Venky */
4976 l_old_task_ids.extend(1); /* Venky */
4977 l_new_task_ids.extend(1); /* Venky */
4978 l_old_task_ver_ids(Rec_Count) := cur_obj_rel_rec.Task_Version_ID;
4979 l_old_task_ids(Rec_Count) := cur_obj_rel_rec.proj_element_id;
4980 l_new_task_ver_ids(Rec_Count) := l_task_version_id;
4981 l_new_task_ids(Rec_Count) := l_task_id;
4982 --bug 3301192 fin plan
4983
4984 --------------------------------------------- FP_M changes: End
4985
4986 --set the reference id.
4987 --l_ref_task_version_id := cur_obj_rel_rec.task_version_id;
4988 l_ref_task_version_id := l_task_version_id;
4989 l_old_wbs_level := l_current_tk_wbs_level;
4990
4991 --If structure type is workplan.
4992 OPEN cur_struc_type( l_structure_id );
4993 FETCH cur_struc_type INTO l_dummy_char;
4994 IF cur_struc_type%FOUND
4995 THEN
4996
4997 --dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Scheduele_version' );
4998
4999 /*4201927 : This Copy API not called in Move Task Version Context.
5000 Hence Commenting
5001 IF p_called_from_api <> 'MOVE_TASK_VERSION'
5002 THEN
5003 */
5004 --Hsiu added for date rollup; workplan only
5005 --bug 3991067
5006 l_task_cnt := l_task_cnt + 1;
5007 l_tasks_ver_ids(l_task_cnt) := l_task_version_id;
5008 -- l_tasks_ver_ids.extend;
5009 -- l_tasks_ver_ids(l_tasks_ver_ids.count) := l_task_version_id;
5010 --end bug 3991067
5011 --hsiu added for task status rollup
5012 l_rollup_task_id := l_task_version_id;
5013 --note: as long as one of the id of the new task is selected, the rollup will work.
5014 -- xxlu
5015 --bug 3074706
5016 --added src_project_id
5017 -- OPEN cur_proj_elem_ver_sch(p_src_structure_version_id, l_src_project_id); --Bug No 3609001
5018 -- OPEN cur_proj_elem_ver_sch(p_src_task_version_id, l_src_project_id); --Bug No 3609001
5019 OPEN cur_proj_elem_ver_sch(cur_obj_rel_rec.task_version_id, l_src_project_id); --Bug No 3675385
5020 FETCH cur_proj_elem_ver_sch INTO v_cur_sch;
5021 CLOSE cur_proj_elem_ver_sch;
5022
5023 PA_TASK_PVT1.Create_Schedule_Version(
5024 p_api_version => p_api_version
5025 ,p_init_msg_list => p_init_msg_list
5026 ,p_commit => p_commit
5027 ,p_validate_only => p_validate_only
5028 ,p_validation_level => p_validation_level
5029 ,p_calling_module => p_calling_module
5030 ,p_debug_mode => p_debug_mode
5031 ,p_max_msg_count => p_max_msg_count
5032 ,p_element_version_id => l_task_version_id
5033 ,p_scheduled_start_date => v_cur_sch.SCHEDULED_START_DATE
5034 ,p_scheduled_end_date => v_cur_sch.scheduled_finish_date
5035 ,p_attribute_category => v_cur_sch.attribute_category
5036 ,p_attribute1 => v_cur_sch.attribute1
5037 ,p_attribute2 => v_cur_sch.attribute2
5038 ,p_attribute3 => v_cur_sch.attribute3
5039 ,p_attribute4 => v_cur_sch.attribute4
5040 ,p_attribute5 => v_cur_sch.attribute5
5041 ,p_attribute6 => v_cur_sch.attribute6
5042 ,p_attribute7 => v_cur_sch.attribute7
5043 ,p_attribute8 => v_cur_sch.attribute8
5044 ,p_attribute9 => v_cur_sch.attribute9
5045 ,p_attribute10 => v_cur_sch.attribute10
5046 ,p_attribute11 => v_cur_sch.attribute11
5047 ,p_attribute12 => v_cur_sch.attribute12
5048 ,p_attribute13 => v_cur_sch.attribute13
5049 ,p_attribute14 => v_cur_sch.attribute14
5050 ,p_attribute15 => v_cur_sch.attribute15
5051 ,p_def_sch_tool_tsk_type_code => v_cur_sch.DEF_SCH_TOOL_TSK_TYPE_CODE
5052 ,p_constraint_type_code => v_cur_sch.CONSTRAINT_TYPE_CODE
5053 ,p_constraint_date => v_cur_sch.CONSTRAINT_DATE
5054 ,p_free_slack => v_cur_sch.FREE_SLACK
5055 ,p_total_slack => v_cur_sch.TOTAL_SLACK
5056 ,p_effort_driven_flag => v_cur_sch.EFFORT_DRIVEN_FLAG
5057 ,p_level_assignments_flag => v_cur_sch.LEVEL_ASSIGNMENTS_FLAG
5058 ,p_ext_act_duration => v_cur_sch.EXT_ACT_DURATION
5059 ,p_ext_remain_duration => v_cur_sch.EXT_REMAIN_DURATION
5060 ,p_ext_sch_duration => v_cur_sch.EXT_SCH_DURATION
5061 ,x_pev_schedule_id => l_pev_schedule_id
5062 ,x_return_status => l_return_status
5063 ,x_msg_count => l_msg_count
5064 ,x_msg_data => l_msg_data
5065 );
5066 -- end xxlu changes
5067 /*END IF; 4201927 : This Copy API not called in Move Task Version Context. */
5068
5069 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5070 x_msg_count := FND_MSG_PUB.count_msg;
5071 IF x_msg_count = 1 then
5072 pa_interface_utils_pub.get_messages
5073 (p_encoded => FND_API.G_TRUE,
5074 p_msg_index => 1,
5075 p_msg_count => l_msg_count,
5076 p_msg_data => l_msg_data,
5077 p_data => l_data,
5078 p_msg_index_out => l_msg_index_out);
5079 x_msg_data := l_data;
5080 END IF;
5081 raise FND_API.G_EXC_ERROR;
5082 END IF;
5083 END IF;
5084 CLOSE cur_struc_type;
5085
5086 END LOOP;
5087
5088
5089 -- Added for FP_M changes 3305199 : Bhumesh
5090
5091 If P_cp_Dependency_Flag = 'Y' then
5092 PA_Relationship_Pvt.Copy_Intra_Dependency (
5093 P_Source_Ver_Tbl => l_Old_Task_Versions_Tab,
5094 P_Destin_Ver_Tbl => l_New_Task_Versions_Tab,
5095 X_Return_Status => X_Return_Status,
5096 X_Msg_Count => X_Msg_Count,
5097 X_Msg_Data => X_Msg_Data
5098 );
5099
5100 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5101 RAISE FND_API.G_EXC_ERROR;
5102 END IF;
5103
5104 PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
5105 P_Source_Ver_Tbl => l_Old_Task_Versions_Tab,
5106 P_Destin_Ver_Tbl => l_New_Task_Versions_Tab,
5107 X_Return_Status => X_Return_Status,
5108 X_Msg_Count => X_Msg_Count,
5109 X_Msg_Data => X_Msg_Data
5110 );
5111 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5112 RAISE FND_API.G_EXC_ERROR;
5113 END IF;
5114
5115 End If;
5116 -- End of FP_M changes
5117
5118 /* Bug2741989 -- Following message is populated in stack */
5119 IF (NOT l_src_tasks_found AND p_copy_option = 'PA_ENTIRE_VERSION')THEN
5120 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5121 p_msg_name => 'PA_CANT_COPY_EMPTY_STRUCT_VER' );
5122 x_msg_data := 'PA_CANT_COPY_EMPTY_STRUCT_VER';
5123 x_return_status := FND_API.G_RET_STS_ERROR;
5124 RAISE FND_API.G_EXC_ERROR;
5125 END IF;
5126
5127 /* Bug 2623999 coomnted out the code below. It is redundant and causing issues */
5128 /*
5129 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
5130 FROM pa_proj_element_versions
5131 WHERE element_version_id = p_dest_structure_version_id
5132 AND object_type = 'PA_STRUCTURES';
5133
5134 --Do financial task check
5135 --If financial
5136 OPEN cur_struc_type2( l_structure_id );
5137 FETCH cur_struc_type2 INTO l_dummy_char;
5138 IF cur_struc_type2%FOUND
5139 THEN
5140 --If structure has any published versions.
5141 l_published_version := 'N';
5142 OPEN cur_pub_versions( l_structure_id, l_project_id );
5143 FETCH cur_pub_versions INTO l_published_version;
5144 CLOSE cur_pub_versions;
5145
5146 --hsiu
5147 --changes for versioning
5148 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
5149 l_project_id);
5150 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
5151 l_project_id);
5152
5153 IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
5154 -- IF NVL( l_published_version, 'N' ) = 'N'
5155 -- THEN
5156 --end changes
5157
5158 --get the reference task and project ids
5159 SELECT proj_element_id, project_id
5160 INTO l_ref_task_id, l_ref_project_id
5161 FROM pa_proj_element_versions
5162 WHERE element_version_id = p_dest_task_version_id;
5163
5164 --get the task and project ids
5165 SELECT proj_element_id, project_id
5166 INTO l_task_id, l_project_id
5167 FROM pa_proj_element_versions
5168 WHERE element_version_id = p_src_task_version_id;
5169
5170 IF p_copy_option = 'PA_TASK_ONLY'
5171 THEN
5172 l_copy_node_flag := 'S'; ---copy selected task only
5173 ELSIF p_copy_option = 'PA_TASK_SUBTASK'
5174 THEN
5175 l_copy_node_flag := 'T'; ---copy selected task and sub tasks
5176 ELSIF p_copy_option = 'PA_ENTIRE_VERSION'
5177 THEN
5178 l_copy_node_flag := 'P'; ---copy entire project
5179 END IF;
5180
5181 PA_TASKS_MAINT_PUB.Copy_Task(
5182 p_reference_project_id => l_ref_project_id
5183 ,p_reference_task_id => l_ref_task_id
5184 ,p_project_id => l_project_id
5185 ,p_task_id => l_task_id
5186 ,p_project_name => NULL
5187 ,p_task_name => NULL
5188 ,p_peer_or_sub => p_peer_or_sub
5189 ,p_copy_node_flag => l_copy_node_flag
5190 ,p_task_prefix => p_prefix
5191 ,p_wbs_record_version_number => 1
5192 ,x_return_status => l_return_status
5193 ,x_msg_count => l_msg_count
5194 ,x_msg_data => l_msg_data );
5195
5196 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5197 x_msg_count := FND_MSG_PUB.count_msg;
5198 IF x_msg_count = 1 then
5199 pa_interface_utils_pub.get_messages
5200 (p_encoded => FND_API.G_TRUE,
5201 p_msg_index => 1,
5202 p_msg_count => l_msg_count,
5203 p_msg_data => l_msg_data,
5204 p_data => l_data,
5205 p_msg_index_out => l_msg_index_out);
5206 x_msg_data := l_data;
5207 END IF;
5208 raise FND_API.G_EXC_ERROR;
5209 END IF;
5210 END IF;
5211 END IF;
5212 CLOSE cur_struc_type2;
5213 */
5214
5215 /* 4201927: This value is already derived as the variable l_wp_type */
5216 /*IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_dest_structure_version_id, 'WORKPLAN') = 'Y' then
5217 */
5218 IF l_wp_type = 'Y' then
5219 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
5220 p_commit => FND_API.G_FALSE,
5221 p_element_versions => l_tasks_ver_ids,
5222 x_return_status => l_return_status,
5223 x_msg_count => l_msg_count,
5224 x_msg_data => l_msg_data);
5225
5226 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5227 x_msg_count := FND_MSG_PUB.count_msg;
5228 if x_msg_count = 1 then
5229 pa_interface_utils_pub.get_messages
5230 (p_encoded => FND_API.G_TRUE,
5231 p_msg_index => 1,
5232 p_msg_count => l_msg_count,
5233 p_msg_data => l_msg_data,
5234 p_data => l_data,
5235 p_msg_index_out => l_msg_index_out);
5236 x_msg_data := l_data;
5237 end if;
5238 raise FND_API.G_EXC_ERROR;
5239 end if;
5240
5241 --hsiu added for task status
5242 --if versioning is off, rollup.
5243
5244 /* 4201927 : Replaced Call to Version ENabled with l_ver_enabled */
5245 /*IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_dest_project_id)) AND*/
5246 IF ('N' = l_ver_enabled) AND
5247 (l_rollup_task_id IS NOT NULL) THEN
5248 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
5249 p_structure_version_id => p_dest_structure_version_id
5250 ,p_element_version_id => l_rollup_task_id
5251 ,x_return_status => l_return_status
5252 ,x_msg_count => l_msg_count
5253 ,x_msg_data => l_msg_data
5254 );
5255
5256 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5257 x_msg_count := FND_MSG_PUB.count_msg;
5258 if x_msg_count = 1 then
5259 pa_interface_utils_pub.get_messages
5260 (p_encoded => FND_API.G_TRUE,
5261 p_msg_index => 1,
5262 p_msg_count => l_msg_count,
5263 p_msg_data => l_msg_data,
5264 p_data => l_data,
5265 p_msg_index_out => l_msg_index_out);
5266 x_msg_data := l_data;
5267 end if;
5268 raise FND_API.G_EXC_ERROR;
5269 end if;
5270
5271 END IF;
5272
5273 --end task status changes
5274
5275 END IF;
5276
5277
5278 --bug 3301192 fin plan changes
5279 declare
5280 /* Bug #: 3305199 SMukka */
5281 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5282 /* l_task_ver_ids2 PA_PLSQL_DATATYPES.IdTabTyp; */
5283 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
5284 /* 4201927 : This value is already derived l_wp_type VARCHAR2(1); */
5285 /* 4201927 : This value is already derived l_copy_external_flag VARCHAR2(1); */
5286 begin
5287
5288 /* 4201927 : This value is already derived
5289 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_dest_structure_version_id, 'WORKPLAN');
5290 4201927 */
5291 --3305199: deliverable changes
5292 IF (p_cp_deliverable_asso_flag = 'Y' AND l_wp_type = 'Y') THEN
5293 PA_DELIVERABLE_PUB.COPY_ASSOCIATIONS
5294 (p_validate_only => FND_API.G_FALSE
5295 ,p_src_task_versions_tab => l_Old_Task_Versions_Tab
5296 ,p_dest_task_versions_tab => l_New_Task_Versions_Tab
5297 ,x_return_status => l_return_status
5298 ,x_msg_count => l_msg_count
5299 ,x_msg_data => l_msg_data);
5300
5301 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5302 x_msg_count := FND_MSG_PUB.count_msg;
5303 if x_msg_count = 1 then
5304 pa_interface_utils_pub.get_messages
5305 (p_encoded => FND_API.G_TRUE,
5306 p_msg_index => 1,
5307 p_msg_count => l_msg_count,
5308 p_msg_data => l_msg_data,
5309 p_data => l_data,
5310 p_msg_index_out => l_msg_index_out);
5311 x_msg_data := l_data;
5312 end if;
5313 raise FND_API.G_EXC_ERROR;
5314 end if;
5315 END IF;
5316 --3305199: end deliverable changes
5317
5318 /*=====================P1 BUG 4210796 ===================
5319 * COPY PLANNING TXNS MOVED BEFORE DELETE PLANNING TXNS CALL
5320 * =======================================================*/
5321
5322 -- START OF BLOCK MOVED
5323 IF l_wp_type = 'Y' AND l_src_wp_type='Y' -- 4223490 : Included l_src_wp_type='Y' because both source and destination shud be WP
5324 THEN
5325
5326 /* 4201927 : l_copy_external_flag is already derived as in <<C>>
5327 IF p_src_project_id = l_dest_project_id
5328 THEN
5329 l_copy_external_flag := 'N';
5330 ELSE
5331 l_copy_external_flag := 'Y';
5332 ENd IF;
5333 */
5334
5335 /*Smukka Bug No. 3474141 Date 03/01/2004 */
5336 /*moved pa_fp_planning_transaction_pub.copy_planning_transactions into plsql block */
5337 BEGIN
5338 pa_fp_planning_transaction_pub.copy_planning_transactions(
5339 p_context => 'WORKPLAN'
5340 ,p_copy_external_flag => l_copy_external_flag
5341 ,p_src_project_id => p_src_project_id
5342 ,p_target_project_id => l_dest_project_id
5343 --,p_src_element_id_tbl => l_old_task_ids
5344 ,p_src_version_id_tbl => l_old_task_ver_ids
5345 --,p_targ_element_id_tbl => l_new_task_ids
5346 ,p_targ_version_id_tbl => l_new_task_ver_ids
5347 ,p_copy_people_flag => l_cp_people_flag --bug#16083858
5348 ,p_copy_equip_flag => l_cp_equipment_flag --bug#16083858
5349 ,p_copy_mat_item_flag => l_cp_material_items_flag --bug#16083858
5350 ,p_copy_fin_elem_flag => l_cp_financial_elem_flag --bug#16083858
5351 -- ,p_maintain_reporting_lines => 'Y'
5352 ,x_return_status => l_return_status
5353 ,x_msg_count => l_msg_count
5354 ,x_msg_data => l_msg_data
5355 );
5356 EXCEPTION
5357 WHEN OTHERS THEN
5358 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5359 p_procedure_name => 'COPY_TASK',
5360 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.copy_planning_transactions:'||SQLERRM,1,240));
5361 RAISE FND_API.G_EXC_ERROR;
5362 END;
5363
5364
5365 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5366 x_msg_count := FND_MSG_PUB.count_msg;
5367 if x_msg_count = 1 then
5368 pa_interface_utils_pub.get_messages
5369 (p_encoded => FND_API.G_TRUE,
5370 p_msg_index => 1,
5371 p_msg_count => l_msg_count,
5372 p_msg_data => l_msg_data,
5373 p_data => l_data,
5374 p_msg_index_out => l_msg_index_out);
5375 x_msg_data := l_data;
5376 end if;
5377 raise FND_API.G_EXC_ERROR;
5378 end if;
5379 END IF;
5380
5381 -- END OF BLOCK MOVED FOR P1 BUG 4210796
5382
5383 IF l_wp_type = 'Y' AND p_dest_structure_version_id <> p_dest_task_version_id
5384 THEN
5385 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_dest_task_version_id );
5386
5387 IF l_lowest_task_flag1 = 'Y' AND
5388 l_lowest_task_flag2 = 'N' /* reference task is no more a lowest task therefore call delete planning api */
5389 THEN
5390 l_task_ver_ids2.extend(1); /* Venky */
5391 l_task_ver_ids2(1) := p_dest_task_version_id;
5392 /*Smukka Bug No. 3474141 Date 03/01/2004 */
5393 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
5394 DECLARE
5395 --p1 bug 3888432
5396 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5397 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
5398 SELECT resource_assignment_id
5399 FROM pa_resource_assignments
5400 WHERE wbs_element_Version_id = c_task_ver_id
5401 AND ta_display_flag = 'N';
5402 l_assign_id NUMBER := NULL;
5403 BEGIN
5404 OPEN get_assignment_id(p_dest_task_version_id);
5405 FETCH get_assignment_id into l_assign_id;
5406 CLOSE get_assignment_id;
5407
5408 IF (l_assign_id IS NOT NULL) THEN
5409 l_assign_ids.extend(1);
5410 l_assign_ids(1) := l_assign_id;
5411 pa_fp_planning_transaction_pub.delete_planning_transactions
5412 (
5413 p_context => 'WORKPLAN'
5414 ,p_task_or_res => 'ASSIGNMENT'
5415 -- ,p_element_version_id_tbl => l_task_ver_ids2
5416 -- ,p_maintain_reporting_lines => 'Y'
5417 ,p_resource_assignment_tbl => l_assign_ids
5418 ,x_return_status => l_return_status
5419 ,x_msg_count => l_msg_count
5420 ,x_msg_data => l_msg_data
5421 );
5422 END IF;
5423 EXCEPTION
5424 WHEN OTHERS THEN
5425 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5426 p_procedure_name => 'COPY_TASK',
5427 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
5428 RAISE FND_API.G_EXC_ERROR;
5429 END;
5430
5431 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5432 x_msg_count := FND_MSG_PUB.count_msg;
5433 if x_msg_count = 1 then
5434 pa_interface_utils_pub.get_messages
5435 (p_encoded => FND_API.G_TRUE,
5436 p_msg_index => 1,
5437 p_msg_count => l_msg_count,
5438 p_msg_data => l_msg_data,
5439 p_data => l_data,
5440 p_msg_index_out => l_msg_index_out);
5441 x_msg_data := l_data;
5442 end if;
5443 raise FND_API.G_EXC_ERROR;
5444 end if;
5445 END IF;
5446 END IF;
5447
5448 /*==========================================================================================
5449 MOVED THIS BLOCK OF CODE FOR COPYING PLANNING TRANSACTIONS before DELETING PLANNING TXNS .
5450 THIS FIX IS NEEDED FOR P1 BUG 4210796 . REFER *** MAANSARI 02/28/05 12:59 pm ***
5451 FOR THE SOLUTION STRATEGY
5452
5453 IF l_wp_type = 'Y'
5454 THEN
5455
5456 /* 4201927 : l_copy_external_flag is already derived as in <<C>>
5457 IF p_src_project_id = l_dest_project_id
5458 THEN
5459 l_copy_external_flag := 'N';
5460 ELSE
5461 l_copy_external_flag := 'Y';
5462 ENd IF;
5463 */
5464
5465 /*Smukka Bug No. 3474141 Date 03/01/2004 */
5466 /*moved pa_fp_planning_transaction_pub.copy_planning_transactions into plsql block */
5467 /* P1 4210796
5468 BEGIN
5469 pa_fp_planning_transaction_pub.copy_planning_transactions(
5470 p_context => 'WORKPLAN'
5471 ,p_copy_external_flag => l_copy_external_flag
5472 ,p_src_project_id => p_src_project_id
5473 ,p_target_project_id => l_dest_project_id
5474 --,p_src_element_id_tbl => l_old_task_ids
5475 ,p_src_version_id_tbl => l_old_task_ver_ids
5476 --,p_targ_element_id_tbl => l_new_task_ids
5477 ,p_targ_version_id_tbl => l_new_task_ver_ids
5478 ,p_copy_people_flag => p_cp_people_flag
5479 ,p_copy_equip_flag => p_cp_equipment_flag
5480 ,p_copy_mat_item_flag => p_cp_material_items_flag
5481 ,p_copy_fin_elem_flag => p_cp_financial_elem_flag
5482 -- ,p_maintain_reporting_lines => 'Y'
5483 ,x_return_status => l_return_status
5484 ,x_msg_count => l_msg_count
5485 ,x_msg_data => l_msg_data
5486 );
5487 EXCEPTION
5488 WHEN OTHERS THEN
5489 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5490 p_procedure_name => 'COPY_TASK',
5491 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.copy_planning_transactions:'||SQLERRM,1,240));
5492 RAISE FND_API.G_EXC_ERROR;
5493 END;
5494
5495
5496 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5497 x_msg_count := FND_MSG_PUB.count_msg;
5498 if x_msg_count = 1 then
5499 pa_interface_utils_pub.get_messages
5500 (p_encoded => FND_API.G_TRUE,
5501 p_msg_index => 1,
5502 p_msg_count => l_msg_count,
5503 p_msg_data => l_msg_data,
5504 p_data => l_data,
5505 p_msg_index_out => l_msg_index_out);
5506 x_msg_data := l_data;
5507 end if;
5508 raise FND_API.G_EXC_ERROR;
5509 end if;
5510 END IF;
5511
5512 END OF BLOCK MOVED FOR P1 BUG 4210796
5513 ======================================================================*/
5514 end;
5515 --bug 3301192 fin plan changes
5516
5517 --3035902: process update flag changes
5518 --set process flag
5519 --Bug No 3450684 SMukka Commented if condition
5520 --IF (l_wp_process_flag = 'Y') THEN
5521 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
5522 (
5523 p_calling_context => 'SELF_SERVICE'
5524 ,p_project_id => l_dest_project_id
5525 ,p_structure_version_id => p_dest_structure_version_id
5526 ,p_update_wbs_flag => 'Y'
5527 ,x_return_status => l_return_status
5528 ,x_msg_count => l_msg_count
5529 ,x_msg_data => l_msg_data);
5530
5531 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5532 x_msg_count := FND_MSG_PUB.count_msg;
5533 if x_msg_count = 1 then
5534 pa_interface_utils_pub.get_messages
5535 (p_encoded => FND_API.G_TRUE,
5536 p_msg_index => 1,
5537 p_msg_count => l_msg_count,
5538 p_msg_data => l_msg_data,
5539 p_data => l_data,
5540 p_msg_index_out => l_msg_index_out);
5541 x_msg_data := l_data;
5542 end if;
5543 raise FND_API.G_EXC_ERROR;
5544 end if;
5545 --END IF;
5546 --3035902: process update flag changes
5547
5548 --bug 4149392
5549 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
5550 --end bug 4149392
5551
5552 x_return_status := FND_API.G_RET_STS_SUCCESS;
5553
5554 IF (p_commit = FND_API.G_TRUE) THEN
5555 COMMIT;
5556 END IF;
5557
5558 IF (p_debug_mode = 'Y') THEN
5559 pa_debug.debug('PA_TASK_PUB1.COPY_TASK END');
5560 END IF;
5561 EXCEPTION
5562 when FND_API.G_EXC_ERROR then
5563 if p_commit = FND_API.G_TRUE then
5564 rollback to Copy_Task;
5565 end if;
5566 x_return_status := FND_API.G_RET_STS_ERROR;
5567 when FND_API.G_EXC_UNEXPECTED_ERROR then
5568 if p_commit = FND_API.G_TRUE then
5569 rollback to Copy_Task;
5570 end if;
5571 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5572 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5573 p_procedure_name => 'COPY_TASK',
5574 p_error_text => SUBSTRB(SQLERRM,1,240));
5575 when OTHERS then
5576 if p_commit = FND_API.G_TRUE then
5577 rollback to Copy_Task;
5578 end if;
5579 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5580 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5581 p_procedure_name => 'COPY_TASK',
5582 p_error_text => SUBSTRB(SQLERRM,1,240));
5583 raise;
5584 END Copy_Task;
5585
5586 -- API name : Move_Task
5587 -- Type : Public procedure
5588 -- Pre-reqs : None
5589 -- Return Value : N/A
5590 -- Prameters
5591 -- p_api_version IN NUMBER N Not Null 1.0
5592 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
5593 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
5594 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
5595 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
5596 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
5597 -- p_debug_mode IN VARCHAR2 N Null N
5598 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5599 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5600 -- p_task_version_id IN NUMBER N Not Null
5601 -- p_ref_task_version_id IN NUMBER N Not Null
5602 -- p_ref_project_id IN NUMBER N Null
5603 -- p_peer_or_sub IN VARCHAR2 N Not Null
5604 -- prefix IN VARCHAR2 N Not Null
5605 -- x_return_status OUT VARCHAR2 N Null
5606 -- x_msg_count OUT NUMBER N Null
5607 -- x_msg_data OUT VARCHAR2 N Null
5608 --
5609 -- History
5610 --
5611 -- 23-OCT-01 Andrew Lee -Created
5612 --
5613 --
5614
5615 PROCEDURE MOVE_TASK_VERSION (
5616 p_api_version IN NUMBER := 1.0,
5617 p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE,
5618 p_commit IN VARCHAR2 := FND_API.G_FALSE,
5619 p_validate_only IN VARCHAR2 := FND_API.G_TRUE,
5620 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
5621 p_calling_module IN VARCHAR2 := 'SELF_SERVICE',
5622 p_debug_mode IN VARCHAR2 := 'N',
5623 p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5624 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5625 p_task_version_id IN NUMBER,
5626 p_ref_task_version_id IN NUMBER,
5627 /*4269830 : Performance Enhancements : Start*/
5628 p_ref_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5629 p_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5630 p_published_version IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5631 p_shared IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5632 p_sharing_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5633 p_versioned IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5634 p_wp_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5635 p_fin_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5636 p_weighting_basis_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5637 p_check_third_party_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5638 /*4269830 : Performance Enhancements : End */
5639 p_peer_or_sub IN VARCHAR2,
5640 p_record_version_number IN NUMBER,
5641 p_called_from_bulk_api IN VARCHAR2 := 'N' ,
5642 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
5643 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
5644 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5645 ) IS
5646 l_api_name CONSTANT VARCHAR(30) := 'MOVE_TASK_VERSION';
5647 l_api_version CONSTANT NUMBER := 1.0;
5648
5649 l_return_status VARCHAR2(1);
5650 l_msg_count NUMBER;
5651 l_msg_data VARCHAR2(250);
5652 l_data VARCHAR2(250);
5653 l_msg_index_out NUMBER;
5654
5655 l_ref_display_sequence NUMBER;
5656 l_display_sequence NUMBER;
5657 l_ref_parent_struct_ver_id NUMBER;
5658 l_parent_struct_ver_id NUMBER;
5659
5660 l_parent_id NUMBER;
5661 l_parent_task_id NUMBER;
5662 l_parent_object_type PA_PROJ_ELEMENT_VERSIONS.object_type%TYPE;
5663
5664 l_project_id NUMBER;
5665 l_ref_task_id NUMBER;
5666 l_task_id NUMBER;
5667 l_task_record_version_number NUMBER;
5668 l_wbs_record_version_number NUMBER;
5669
5670 l_record_version_number NUMBER;
5671 l_published_version VARCHAR2(1);
5672 l_dummy_char VARCHAR2(1);
5673 l_structure_id NUMBER;
5674 l_structure_ver_id NUMBER;
5675 --l_project_id NUMBER;
5676 --l_ref_task_id NUMBER;
5677 --l_task_id NUMBER;
5678
5679 --hsiu
5680 --added for advanced structure - versioning
5681 l_versioned VARCHAR2(1) := 'N';
5682 l_shared VARCHAR2(1) := 'N';
5683
5684 --end changes
5685
5686 --hyau
5687 --added for lifecycle version
5688 l_proj_element_id NUMBER;
5689 -- end changes
5690
5691 CURSOR cur_struc_type( c_structure_id NUMBER )
5692 IS
5693 SELECT 'Y'
5694 FROM pa_proj_structure_types ppst
5695 ,pa_structure_types pst
5696 WHERE ppst.proj_element_id = c_structure_id
5697 AND ppst.structure_type_id = pst.structure_type_id
5698 AND pst.structure_type_class_code IN( 'FINANCIAL' );
5699
5700 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
5701 select 'Y'
5702 from pa_proj_elem_ver_structure
5703 where proj_element_id = c_structure_id
5704 AND project_id = c_project_id
5705 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
5706
5707 --hsiu added, for dates rollup
5708 CURSOR get_peer_tasks
5709 IS
5710 select b.object_id_to1 object_id_to1
5711 from pa_object_relationships a,
5712 pa_object_relationships b
5713 where a.object_id_to1 = p_task_version_id
5714 and a.object_type_to = 'PA_TASKS'
5715 and a.relationship_type = 'S' -- Bug # 4622939.
5716 and a.object_id_from1 = b.object_id_from1
5717 and a.object_type_from = b.object_type_from
5718 and b.object_type_to = 'PA_TASKS'
5719 and b.relationship_type = 'S' -- Bug # 4622939.
5720 and b.object_id_to1 <> p_task_version_id;
5721 c_get_peer_tasks get_peer_tasks%ROWTYPE;
5722
5723 --Hsiu added, for dates rollup
5724 /* Bug 5768425 Start*/
5725 --l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
5726 l_tasks_ver_ids PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
5727 l_task_cnt NUMBER := 0;
5728 /* Bug 5768425 End */
5729
5730 --hsiu added for task status rollup
5731 l_old_peer_task_id NUMBER;
5732
5733 --hsiu added for task status
5734 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
5735 select object_id_from1
5736 from pa_object_relationships
5737 where object_id_to1 = c_elem_ver_id
5738 and object_type_to = 'PA_TASKS'
5739 and relationship_type = 'S';
5740 l_parent_ver_id NUMBER;
5741 l_error_msg_code VARCHAR2(30);
5742
5743 -- hyau Bug 2852753
5744 l_delete_project_allowed VARCHAR2(1);
5745 l_update_proj_num_allowed VARCHAR2(1);
5746 l_update_proj_name_allowed VARCHAR2(1);
5747 l_update_proj_desc_allowed VARCHAR2(1);
5748 l_update_proj_dates_allowed VARCHAR2(1);
5749 l_update_proj_status_allowed VARCHAR2(1);
5750 l_update_proj_manager_allowed VARCHAR2(1);
5751 l_update_proj_org_allowed VARCHAR2(1);
5752 l_add_task_allowed VARCHAR2(1);
5753 l_delete_task_allowed VARCHAR2(1);
5754 l_update_task_num_allowed VARCHAR2(1);
5755 l_update_task_name_allowed VARCHAR2(1);
5756 l_update_task_dates_allowed VARCHAR2(1);
5757 l_update_task_desc_allowed VARCHAR2(1);
5758 l_update_parent_task_allowed VARCHAR2(1);
5759 l_update_task_org_allowed VARCHAR2(1);
5760
5761 l_err_code NUMBER := 0;
5762 l_err_stack VARCHAR2(200) := NULL;
5763 l_err_stage VARCHAR2(200) := NULL;
5764
5765 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
5766
5767 CURSOR get_product_code ( c_project_id NUMBER ) IS
5768 SELECT pm_product_code
5769 FROM PA_PROJECTS_ALL
5770 WHERE project_id = c_project_id;
5771
5772 l_cur_project_id NUMBER;
5773 CURSOR cur_proj_id
5774 IS
5775 SELECT project_id
5776 FROM pa_proj_element_versions
5777 WHERE element_version_id = p_structure_version_id;
5778
5779 -- Merged from 85
5780 -- end hyau Bug 2852753
5781
5782 l_old_top_task_id NUMBER; --bug 2967204
5783
5784 --Bug 2947492 ( move )
5785
5786 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
5787 --l_parent_task_id NUMBER;
5788 l_old_parent_task_id NUMBER;
5789 l_top_task_id NUMBER;
5790
5791 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
5792 SELECT parent_task_id, top_task_id FROM pa_tasks
5793 WHERE project_id = c_project_id and task_id = c_task_id;
5794
5795 --End Bug 2947492 ( move )
5796 -- Merged from 85
5797
5798 --bug 3053281
5799 l_wp_type VARCHAR2(1);
5800 l_weighting_basis_Code VARCHAR2(30);
5801 l_wp_process_flag VARCHAR2(1);
5802 --end bug 3053281
5803 --3035902: process update flag changes
5804 cursor get_task_type_id(c_proj_element_id NUMBER) IS
5805 select type_id
5806 from pa_proj_elements
5807 where proj_element_id = c_proj_element_id;
5808 l_task_type_id NUMBER;
5809 --3035902: end process update flag changes
5810
5811 --bug 3911698
5812 --cursor to get all child
5813 cursor get_child_ver_id(c_task_ver_id NUMBER) IS
5814 select object_id_to1
5815 from pa_object_relationships
5816 where relationship_type = 'S'
5817 and object_type_to = 'PA_TASKS'
5818 start with object_id_from1 = c_task_ver_id
5819 and object_type_from = 'PA_TASKS'
5820 connect by prior object_id_to1 = object_id_from1
5821 and prior object_type_to = object_type_from
5822 and prior relationship_type = relationship_type
5823 UNION
5824 select element_version_id
5825 from pa_proj_element_versions
5826 where element_version_id = c_task_ver_id;
5827 l_child_ver_id NUMBER;
5828 --end bug 3911698
5829
5830
5831 --bug 3069306
5832 Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
5833 select object_id_to1
5834 from pa_object_relationships
5835 where relationshiP_type = 'S'
5836 and object_type_to = 'PA_TASKS'
5837 start with object_id_to1 = c_task_ver_id
5838 and object_type_to = 'PA_TASKS'
5839 connect by prior object_id_from1 = object_id_to1
5840 and prior object_type_from = object_type_to
5841 and prior relationship_type = relationship_type
5842 intersect
5843 select a.object_id_to1
5844 from pa_object_relationships a, pa_proj_element_versions b
5845 where a.relationshiP_type = 'S'
5846 and a.object_id_from1 = b.parent_structure_version_id
5847 and b.element_version_id = c_task_ver_id
5848 and a.object_type_from = 'PA_STRUCTURES';
5849 l_old_par_ver_id NUMBER;
5850 l_new_par_ver_id NUMBER;
5851 --end bug 3069306
5852
5853 --bug 3301192 fin plan changes
5854 l_lowest_task_flag1 VARCHAR2(1);
5855 l_lowest_task_flag2 VARCHAR2(1);
5856 l_fin_task_flag VARCHAR2(1);
5857 --bug 3301192
5858 --
5859 l_ref_parent_task_ver_id NUMBER; --Bug 3475920
5860
5861 /*4269830*/
5862 l_sharing_code VARCHAR2(30);
5863 l_fin_type VARCHAR2(1);
5864 l_check_third_party_flag VARCHAR2(1);
5865 /*4269830*/
5866
5867 BEGIN
5868
5869
5870 pa_debug.init_err_stack ('PA_TASK_PUB1.MOVE_TASK_VERSION');
5871
5872 IF (p_debug_mode = 'Y') THEN
5873 pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSION begin');
5874 END IF;
5875
5876 IF (p_commit = FND_API.G_TRUE) THEN
5877 savepoint move_task_version;
5878 END IF;
5879
5880 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
5881 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5882 END IF;
5883
5884 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
5885 FND_MSG_PUB.initialize;
5886 END IF;
5887
5888 --bug 4075697
5889 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
5890 --bug 4075697
5891
5892 IF p_called_from_bulk_api = 'Y'/*4269830*/
5893 THEN
5894 l_cur_project_id := p_ref_project_id;
5895 l_project_id := p_ref_project_id;
5896 l_structure_id := p_structure_id ;
5897 l_structure_ver_id := p_structure_version_id ;
5898 l_published_version := p_published_version;
5899 l_shared := p_shared;
5900 l_sharing_code := p_sharing_code;
5901 l_versioned := p_versioned;
5902 l_wp_type := p_wp_type;
5903 l_fin_type := p_fin_type;
5904 l_weighting_basis_code := p_weighting_basis_code;
5905 l_check_third_party_flag := p_check_third_party_flag;
5906 ELSE
5907
5908 /* 4269830 <Existing Block> <<--A-->> */
5909 OPEN cur_proj_id;
5910 FETCH cur_proj_id INTO l_cur_project_id;
5911 CLOSE cur_proj_id;
5912
5913 l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_cur_project_id);
5914 l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
5915 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id,'WORKPLAN');
5916 l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_cur_project_id);
5917 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_cur_project_id);
5918 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_cur_project_id);
5919 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_cur_project_id);
5920
5921 END IF; /*4269830*/
5922
5923 --bug 3911698
5924 --check if reference task is child of moving task
5925 OPEN get_child_ver_id(p_task_version_id);
5926 LOOP
5927 FETCH get_child_ver_id into l_child_ver_id;
5928 EXIT when get_child_ver_id%NOTFOUND;
5929 IF l_child_ver_id = p_ref_task_version_id THEN
5930 CLOSE get_child_ver_id;
5931 --add error PA_TSK_MV_BELOW_SELF
5932 PA_UTILS.ADD_MESSAGE('PA', 'PA_TSK_MV_BELOW_SELF');
5933 raise FND_API.G_EXC_ERROR;
5934 END IF;
5935 END LOOP;
5936 CLOSE get_child_ver_id;
5937 --end bug 3911698
5938
5939 -- Added for FP_M changes. Bug 3305199 : xxx
5940 If l_sharing_code = 'SHARE_PARTIAL' /*4269830 : Replaced function usage with l_sharing_code*/
5941 Then
5942
5943 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
5944 p_task_version_id => p_task_version_id
5945 , p_ref_task_version_id => p_ref_task_version_id
5946 , x_return_status => x_return_status
5947 , x_msg_count => x_msg_count
5948 , x_msg_data => x_msg_data
5949 , x_error_msg_code => l_error_msg_code);
5950 --Bug No 3491045
5951 --Replaced the return status value to 'S' from 'Y'
5952 IF (x_return_status <> 'S') THEN
5953 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5954 p_msg_name => l_error_msg_code);
5955 raise FND_API.G_EXC_ERROR;
5956 End If;
5957 End If;
5958 -- End of FP_M changes
5959
5960 --3035902: process update flag changes
5961 l_wp_process_flag := 'N';
5962 --3035902: end process update flag changes
5963 -- hyau Bug 2852753
5964
5965 IF p_called_from_bulk_api = 'N' THEN
5966 IF p_calling_module = 'SELF_SERVICE' THEN
5967
5968 OPEN get_product_code(l_cur_project_id);
5969 FETCH get_product_code INTO l_pm_product_code;
5970 CLOSE get_product_code;
5971
5972 If l_pm_product_code IS NOT NULL THEN
5973 pa_pm_controls.Get_Project_actions_allowed
5974 (P_PM_PRODUCT_CODE => l_pm_product_code,
5975 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
5976 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
5977 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
5978 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
5979 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
5980 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
5981 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
5982 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
5983 P_ADD_TASK_ALLOWED => l_add_task_allowed,
5984 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
5985 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
5986 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
5987 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
5988 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
5989 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
5990 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
5991 P_ERROR_CODE => l_err_code,
5992 P_ERROR_STACK => l_err_stack,
5993 P_ERROR_STAGE => l_err_stage );
5994
5995 IF l_err_code <> 0 THEN
5996 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5997 p_msg_name => l_err_stage);
5998 END IF;
5999 IF l_update_parent_task_allowed = 'N' THEN
6000 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6001 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
6002 raise FND_API.G_EXC_ERROR;
6003 END IF;
6004 END IF;
6005 END IF;
6006 END IF ; -- Called From Bulk API is 'N'
6007 -- end hyau Bug 2852753
6008
6009
6010 -- hyau
6011 -- Lifecycle Phase validation Changes. Check if task has phase associated with it
6012 IF (p_task_version_id IS NOT NULL) AND
6013 (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6014
6015 SELECT proj_element_id
6016 INTO l_proj_element_id
6017 FROM PA_PROJ_ELEMENT_VERSIONS
6018 WHERE element_version_id = p_task_version_id;
6019
6020 IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
6021 l_proj_element_id)) THEN
6022 --Indenting a task with phase. Error
6023 PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_MOVE_PHASE_TASK');
6024 END IF;
6025
6026 l_msg_count := FND_MSG_PUB.count_msg;
6027 if l_msg_count > 0 then
6028 x_msg_count := l_msg_count;
6029 if x_msg_count = 1 then
6030 pa_interface_utils_pub.get_messages
6031 (p_encoded => FND_API.G_TRUE,
6032 p_msg_index => 1,
6033 p_msg_count => l_msg_count,
6034 p_msg_data => l_msg_data,
6035 p_data => l_data,
6036 p_msg_index_out => l_msg_index_out);
6037 x_msg_data := l_data;
6038 end if;
6039 raise FND_API.G_EXC_ERROR;
6040 end if;
6041 END IF;
6042 -- end hyau. Lifecycle Phase validation Changes.
6043
6044 -- get the display sequence of the reference task
6045 SELECT display_sequence, parent_structure_version_id
6046 INTO l_ref_display_sequence, l_ref_parent_struct_ver_id
6047 FROM PA_PROJ_ELEMENT_VERSIONS
6048 WHERE element_version_id = p_ref_task_version_id;
6049
6050 -- get the display sequence of the task being moved
6051 SELECT display_sequence, parent_structure_version_id
6052 INTO l_display_sequence, l_parent_struct_ver_id
6053 FROM PA_PROJ_ELEMENT_VERSIONS
6054 WHERE element_version_id = p_task_version_id;
6055
6056 -- get the parent of the task being moved
6057 SELECT object_id_from1, object_type_from
6058 INTO l_parent_id, l_parent_object_type
6059 FROM PA_OBJECT_RELATIONSHIPS
6060 WHERE object_type_to = 'PA_TASKS'
6061 AND object_id_to1 = p_task_version_id
6062 AND relationship_type = 'S'
6063 AND object_type_from in ('PA_STRUCTURES', 'PA_TASKS');
6064
6065 --hsiu added, for dates rollup
6066 --need to get peer task before it has been moved.
6067 OPEN get_peer_tasks;
6068 LOOP
6069 FETCH get_peer_tasks INTO c_get_peer_tasks;
6070 EXIT WHEN get_peer_tasks%NOTFOUND;
6071 /* Bug 5768425 Start */
6072 --l_tasks_ver_ids.extend;
6073 --l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
6074 l_task_cnt := l_task_cnt + 1;
6075 l_tasks_ver_ids(l_task_cnt) := c_get_peer_tasks.object_id_to1;
6076 /* Bug 5768425 End */
6077 l_old_peer_task_id := c_get_peer_tasks.object_id_to1;
6078 END LOOP;
6079 CLOSE get_peer_tasks;
6080
6081 if l_parent_object_type = 'PA_STRUCTURES' then
6082 l_parent_task_id := NULL;
6083 else
6084 l_parent_task_id := l_parent_id;
6085 end if;
6086
6087 --hsiu added for task status
6088 --check if ok to move this task
6089 PA_PROJ_ELEMENTS_UTILS.check_move_task_ok(
6090 p_task_ver_id => p_task_version_id
6091 ,x_return_status => l_return_status
6092 ,x_error_message_code => l_error_msg_code
6093 );
6094 IF (l_return_status <> 'Y') THEN
6095 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6096 p_msg_name => l_error_msg_code);
6097 raise FND_API.G_EXC_ERROR;
6098 END IF;
6099
6100 --check if ok to create subtask
6101 IF (p_peer_or_sub = 'PEER') THEN
6102 OPEN get_parent_version_id(p_ref_task_version_id);
6103 FETCH get_parent_version_id into l_parent_ver_id;
6104 CLOSE get_parent_version_id;
6105
6106 --bug 3069306
6107 --if financial task, check if changing parent ok
6108 IF (l_fin_type = 'Y') THEN /*4269830 : replaced Function usage with l_fin_type*/
6109 OPEN get_top_task_ver_id(l_parent_ver_id);
6110 FETCH get_top_task_ver_id into l_new_par_ver_id;
6111 CLOSE get_top_task_ver_id;
6112
6113 IF l_new_par_ver_id IS NULL THEN /*Bug 11776896*/
6114 OPEN get_parent_version_id(p_task_version_id);
6115 FETCH get_parent_version_id into l_old_par_ver_id;
6116 CLOSE get_parent_version_id;
6117 l_new_par_ver_id := l_parent_ver_id;
6118 ELSE
6119 OPEN get_top_task_ver_id(p_task_version_id);
6120 FETCH get_top_task_ver_id into l_old_par_ver_id;
6121 CLOSE get_top_task_Ver_id;
6122 END IF;
6123
6124 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
6125 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6126 p_msg_name => 'PA_CANT_CHANGE_PARENT');
6127 raise FND_API.G_EXC_ERROR;
6128 END IF;
6129 END IF;
6130 --end bug 3069306
6131
6132 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
6133 p_parent_task_ver_id => l_parent_ver_id
6134 ,x_return_status => l_return_status
6135 ,x_error_message_code => l_error_msg_code
6136 );
6137
6138 IF (l_return_status <> 'Y') THEN
6139 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6140 p_msg_name => l_error_msg_code);
6141 raise FND_API.G_EXC_ERROR;
6142 END IF;
6143
6144 --bug 4099488
6145 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
6146 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6147 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
6148 raise FND_API.G_EXC_ERROR;
6149 END IF;
6150 --end bug 4099488
6151 ELSE
6152 --bug 3069306
6153 --if financial task, check if changing parent ok
6154 IF (l_fin_type = 'Y') THEN /* 4269830: Replaced Function call with l_fin_type*/
6155 OPEN get_top_task_ver_id(p_ref_task_version_id);
6156 FETCH get_top_task_ver_id into l_new_par_ver_id;
6157 CLOSE get_top_task_ver_id;
6158
6159 OPEN get_top_task_ver_id(p_task_version_id);
6160 FETCH get_top_task_ver_id into l_old_par_ver_id;
6161 CLOSE get_top_task_Ver_id;
6162
6163 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
6164 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6165 p_msg_name => 'PA_CANT_CHANGE_PARENT');
6166 raise FND_API.G_EXC_ERROR;
6167 END IF;
6168 END IF;
6169 --end bug 3069306
6170
6171 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
6172 p_parent_task_ver_id => p_ref_task_version_id
6173 ,x_return_status => l_return_status
6174 ,x_error_message_code => l_error_msg_code
6175 );
6176
6177 IF (l_return_status <> 'Y') THEN
6178 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6179 p_msg_name => l_error_msg_code);
6180 raise FND_API.G_EXC_ERROR;
6181 END IF;
6182
6183 --bug 4099488
6184 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_ref_task_version_id, p_task_version_id) = 'N' THEN
6185 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6186 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
6187 raise FND_API.G_EXC_ERROR;
6188 END IF;
6189 --end bug 4099488
6190 END IF;
6191
6192 --end task status changes
6193
6194 --bug 3301192 fin plan changes.
6195 --check whether the reference task was lowest task before
6196 --check the task is a lowest task bug 3301192
6197
6198 IF l_ref_parent_struct_ver_id <> p_ref_task_version_id
6199 THEN
6200 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_ref_task_version_id );
6201 END IF;
6202 --
6203 --Bug No 3475920
6204 IF p_peer_or_sub = 'PEER' THEN
6205 l_ref_parent_task_ver_id:=PA_PROJ_ELEMENTS_UTILS.GET_PARENT_TASK_VERSION_ID(p_ref_task_version_id);
6206 ELSE
6207 l_ref_parent_task_ver_id:=p_ref_task_version_id;
6208 END IF;
6209 --
6210 IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,l_ref_parent_task_ver_id) = 'Y' THEN
6211 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6212 p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
6213 RAISE FND_API.G_EXC_ERROR;
6214 END IF;
6215 --
6216 PA_TASK_PUB1.Update_Task_Version
6217 ( p_validate_only => FND_API.G_FALSE,
6218 p_ref_task_version_id => p_ref_task_version_id,
6219 p_peer_or_sub => p_peer_or_sub,
6220 p_task_version_id => p_task_version_id,
6221 p_record_version_number => p_record_version_number,
6222 p_action => 'MOVE',
6223 x_return_status => l_return_status,
6224 x_msg_count => l_msg_count,
6225 x_msg_data => l_msg_data );
6226
6227 x_msg_count := FND_MSG_PUB.count_msg;
6228
6229 --dbms_output.put_line( 'Count '|| x_msg_count );
6230
6231 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6232 x_msg_count := FND_MSG_PUB.count_msg;
6233 IF x_msg_count = 1 then
6234 pa_interface_utils_pub.get_messages
6235 (p_encoded => FND_API.G_TRUE,
6236 p_msg_index => 1,
6237 p_msg_count => l_msg_count,
6238 p_msg_data => l_msg_data,
6239 p_data => l_data,
6240 p_msg_index_out => l_msg_index_out);
6241 x_msg_data := l_data;
6242 END IF;
6243 raise FND_API.G_EXC_ERROR;
6244 END IF;
6245
6246
6247 /* SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
6248 FROM pa_proj_element_versions
6249 WHERE element_version_id = p_structure_version_id
6250 AND object_type = 'PA_STRUCTURES';*/
6251
6252 IF p_called_from_bulk_api = 'N' -- 4269830
6253 THEN
6254
6255 SELECT proj_element_id, project_id, element_version_id INTO l_structure_id, l_project_id, l_structure_ver_id
6256 FROM pa_proj_element_versions
6257 WHERE element_version_id = ( Select parent_structure_version_id
6258 from pa_proj_element_versions
6259 where element_version_id = p_task_version_id )
6260 AND object_type = 'PA_STRUCTURES';
6261 END IF; -- 4269830
6262
6263 IF p_calling_module NOT in ( 'FORMS', 'AMG' )
6264 THEN
6265
6266 IF p_called_from_bulk_api ='N' -- 4269830 : Already derived in BULK API
6267 then
6268
6269 --Do financial task check
6270 --If financial
6271 OPEN cur_struc_type( l_structure_id );
6272 FETCH cur_struc_type INTO l_dummy_char;
6273 IF cur_struc_type%FOUND
6274 THEN
6275 --If structure has any published versions.
6276 l_published_version := 'N';
6277 OPEN cur_pub_versions( l_structure_id, l_project_id );
6278 FETCH cur_pub_versions INTO l_published_version;
6279 CLOSE cur_pub_versions;
6280
6281 END IF; --4269830
6282 CLOSE cur_struc_type;--4269830
6283
6284 END IF;--4269830
6285
6286 --hsiu
6287 --changes for versioning
6288 /* 4269830 :
6289 This code has been moved to block tagged by <<--A-->>
6290
6291 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
6292 l_project_id);
6293 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
6294 l_project_id);
6295 */
6296
6297 IF l_fin_type = 'Y' -- 4269830 this is equivalent to cur_struc_type%FOUND
6298 THEN
6299
6300 l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(l_proj_element_id); --bug 3301192 move in pa_tasks also if it exists there.
6301
6302 IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y') OR
6303 (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
6304 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
6305 THEN
6306 -- IF NVL( l_published_version, 'N' ) = 'N'
6307 -- THEN
6308 --end changes
6309
6310 --hsiu Fixed parent_structure_version_id condition
6311 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
6312 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
6313 FROM PA_TASKS pt,
6314 pa_proj_elem_ver_structure ppa,
6315 PA_PROJ_ELEMENT_VERSIONS ppev
6316 WHERE ppev.element_version_id = p_task_version_id
6317 AND ppev.project_id = ppa.project_id
6318 AND ppev.parent_structure_version_id = ppa.element_version_id
6319 AND ppev.proj_element_id = pt.task_id;
6320
6321 SELECT proj_element_id
6322 INTO l_ref_task_id
6323 FROM PA_PROJ_ELEMENT_VERSIONS
6324 WHERE element_version_id = p_ref_task_version_id;
6325 -- merged from 85
6326 SELECT record_version_number, parent_task_id --get old parent id for bug 2947492 (move )
6327 ,top_task_id --bug 2967204
6328 INTO l_record_version_number, l_old_parent_task_id
6329 ,l_old_top_task_id --bug 2967204
6330 FROM pa_tasks
6331 WHERE task_id = l_task_id
6332 AND project_id = l_project_id;
6333 -- merged from 85
6334
6335 x_msg_count := FND_MSG_PUB.count_msg;
6336
6337 --dbms_output.put_line( 'before move task old '|| x_msg_count );
6338
6339 PA_TASKS_MAINT_PUB.Move_Task(
6340 p_reference_project_id => l_project_id
6341 ,p_reference_task_id => l_ref_task_id
6342 ,p_project_id => l_project_id
6343 ,p_task_id => l_task_id
6344 ,p_peer_or_sub => p_peer_or_sub
6345 ,p_record_version_number => l_record_version_number
6346 ,p_wbs_record_version_number => 1 --temporarily passing 1. Lock project is commented out in PA_TASKS_MAIN_PUB.Move_Task api.
6347 ,x_return_status => l_return_status
6348 ,x_msg_count => l_msg_count
6349 ,x_msg_data => l_msg_data );
6350
6351 x_msg_count := FND_MSG_PUB.count_msg;
6352
6353 --dbms_output.put_line( 'After move task old '|| x_msg_count );
6354
6355
6356 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6357 x_msg_count := FND_MSG_PUB.count_msg;
6358 IF x_msg_count = 1 then
6359 pa_interface_utils_pub.get_messages
6360 (p_encoded => FND_API.G_TRUE,
6361 p_msg_index => 1,
6362 p_msg_count => l_msg_count,
6363 p_msg_data => l_msg_data,
6364 p_data => l_data,
6365 p_msg_index_out => l_msg_index_out);
6366 x_msg_data := l_data;
6367 END IF;
6368 raise FND_API.G_EXC_ERROR;
6369 END IF;
6370
6371 -- merged from 85
6372 --Bug 2947492 ( Move )
6373 --
6374
6375 OPEN get_parent_task_id( l_task_id , l_project_id );
6376 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
6377 CLOSE get_parent_task_id;
6378
6379 --bug 2967204
6380 --Cannot move out of the current hierarchy
6381 IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
6382 THEN
6383 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6384 p_msg_name => 'PA_CANT_CHANGE_PARENT');
6385 raise FND_API.G_EXC_ERROR;
6386 END IF;
6387 --End bug 2967204
6388
6389 /*
6390 --First call the check_reparent ok
6391 --This should have been called in the beginning but due to lot of complexity involved in getting
6392 --new parent task id it is decided to call this later stage as long as we rollback the whole operation
6393 --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
6394
6395 PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
6396 p_task_id => l_task_id
6397 ,p_old_parent_task_id => l_old_parent_task_id
6398 ,p_new_parent_task_id => l_parent_task_id
6399 ,x_return_status => l_return_status
6400 ,x_msg_count => l_msg_count
6401 ,x_msg_data => l_msg_data
6402 );
6403
6404 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6405 x_msg_count := FND_MSG_PUB.count_msg;
6406 IF x_msg_count = 1 then
6407 pa_interface_utils_pub.get_messages
6408 (p_encoded => FND_API.G_TRUE,
6409 p_msg_index => 1,
6410 p_msg_count => l_msg_count,
6411 p_msg_data => l_msg_data,
6412 p_data => l_data,
6413 p_msg_index_out => l_msg_index_out);
6414 x_msg_data := l_data;
6415 END IF;
6416 raise FND_API.G_EXC_ERROR;
6417 END IF;
6418 */ --commenting out, please refer mails from venkatesh dates 22 jan 04
6419
6420 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
6421 l_plannable_tasks_tbl(1).impacted_task_id := l_task_id;
6422 l_plannable_tasks_tbl(1).action := 'REPARENT';
6423 l_plannable_tasks_tbl(1).old_parent_task_id := l_old_parent_task_id;
6424 l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
6425 l_plannable_tasks_tbl(1).top_task_id := l_top_task_id;
6426
6427 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
6428 p_project_id => l_project_id
6429 , p_impacted_tasks_tbl => l_plannable_tasks_tbl
6430 , x_return_status => l_return_status
6431 , x_msg_data => l_msg_data
6432 , x_msg_count => l_msg_count
6433 );
6434
6435 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6436 x_msg_count := FND_MSG_PUB.count_msg;
6437 IF x_msg_count = 1 then
6438 pa_interface_utils_pub.get_messages
6439 (p_encoded => FND_API.G_TRUE,
6440 p_msg_index => 1,
6441 p_msg_count => l_msg_count,
6442 p_msg_data => l_msg_data,
6443 p_data => l_data,
6444 p_msg_index_out => l_msg_index_out);
6445 x_msg_data := l_data;
6446 END IF;
6447 raise FND_API.G_EXC_ERROR;
6448 END IF;
6449 bug 3010538 */
6450
6451 --End Bug 2947492 ( Move )
6452 END IF;
6453
6454 -- END IF; 4269830
6455 -- CLOSE cur_struc_type; 4269830
6456
6457 END IF; -- 4269830 IF l_fin_type ='Y'
6458 -- merged from 85
6459 END IF; --<<p_calling_module >>
6460
6461 --bug 3010538 (move )
6462 --bug 3053281 --set flag if not (manual and workplan only)
6463
6464 /* 4269830 :
6465 This code has been moved to block tagged by <<--A-->>
6466 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_parent_struct_ver_id, 'WORKPLAN');
6467 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_project_id);
6468 */
6469 --3035902: process update flag changes
6470 OPEN get_task_type_id(l_proj_element_id);
6471 FETCH get_task_type_id INTO l_task_type_id;
6472 CLOSE get_task_type_id;
6473
6474 --set update process flag if necessary;
6475 IF (l_wp_process_flag = 'N') THEN
6476 --may need to update process flag
6477 IF ((l_shared = 'N') AND
6478 (l_wp_type = 'Y') AND
6479 (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
6480 (l_weighting_basis_code <> 'MANUAL'))
6481 THEN
6482 --split and workplan; only update if progressable task added
6483 l_wp_process_flag := 'Y';
6484 ELSIF ((l_shared = 'N') AND
6485 (l_wp_type = 'N')) THEN
6486 --split and financial; update
6487 l_wp_process_flag := 'Y';
6488 ELSIF (l_shared = 'Y') THEN
6489 l_wp_process_flag := 'Y';
6490 END IF;
6491 END IF;
6492 --3035902: end process update flag changes
6493 /* commented for process update flag changes
6494 IF (l_shared = 'N') AND
6495 (l_wp_type = 'Y') AND
6496 (l_weighting_basis_Code = 'MANUAL') THEN
6497 --do not set the flag to 'Y'
6498 NULL;
6499 ELSE
6500 */
6501 --3035902: process update flag changes
6502 --Bug No 3450684 SMukka Commented if condition
6503 -- IF (l_wp_process_flag = 'Y') THEN
6504 --set the flag
6505 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
6506 (
6507 p_calling_context => 'SELF_SERVICE'
6508 ,p_project_id => l_project_id
6509 ,p_structure_version_id => l_parent_struct_ver_id
6510 ,p_update_wbs_flag => 'Y'
6511 ,x_return_status => l_return_status
6512 ,x_msg_count => l_msg_count
6513 ,x_msg_data => l_msg_data);
6514
6515 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6516 x_msg_count := FND_MSG_PUB.count_msg;
6517 if x_msg_count = 1 then
6518 pa_interface_utils_pub.get_messages
6519 (p_encoded => FND_API.G_TRUE,
6520 p_msg_index => 1,
6521 p_msg_count => l_msg_count,
6522 p_msg_data => l_msg_data,
6523 p_data => l_data,
6524 p_msg_index_out => l_msg_index_out);
6525 x_msg_data := l_data;
6526 end if;
6527 raise FND_API.G_EXC_ERROR;
6528 end if;
6529 --3035902: end process update flag changes
6530 --END IF;
6531
6532
6533 IF l_fin_type = 'Y' /* 4269830: Replaced Function call with l_fin_type*/
6534 THEN
6535 IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and l_published_version = 'N' ) THEN
6536 --Move
6537 pa_fp_refresh_elements_pub.set_process_flag_proj(
6538 p_project_id => l_project_id
6539 ,p_request_id => null
6540 ,p_process_code => null
6541 ,p_refresh_required_flag => 'Y'
6542 ,x_return_status => l_return_status
6543 ,x_msg_count => l_msg_count
6544 ,x_msg_data => l_msg_data );
6545
6546 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6547 x_msg_count := FND_MSG_PUB.count_msg;
6548 if x_msg_count = 1 then
6549 pa_interface_utils_pub.get_messages
6550 (p_encoded => FND_API.G_TRUE,
6551 p_msg_index => 1,
6552 p_msg_count => l_msg_count,
6553 p_msg_data => l_msg_data,
6554 p_data => l_data,
6555 p_msg_index_out => l_msg_index_out);
6556 x_msg_data := l_data;
6557 end if;
6558 raise FND_API.G_EXC_ERROR;
6559 end if;
6560 END IF;
6561 END IF;
6562
6563
6564 --End bug 3010538 (move)
6565
6566
6567 --Hsiu added for date rollup; workplan only
6568 --dbms_output.put_line('check structure version type '||l_structure_ver_id);
6569 IF l_wp_type = 'Y' then /*4269830 Function call replaced by l_wp_type*/
6570
6571 -- Added for FP_M changes Bug 3305199 : Bhumesh
6572 If l_check_third_party_flag = 'Y' Then /*4269830 Function call replaced by l_check_third_party_flag*/
6573
6574 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
6575 p_structure_version_id => P_Structure_Version_ID
6576 ,p_dirty_flag => 'Y' --bug 3902282
6577 ,x_return_status => x_return_status
6578 ,x_msg_count => x_msg_count
6579 ,x_msg_data => x_msg_data
6580 );
6581
6582 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
6583 x_msg_count := FND_MSG_PUB.count_msg;
6584 If x_msg_count = 1 then
6585 pa_interface_utils_pub.get_messages
6586 (p_encoded => FND_API.G_TRUE,
6587 p_msg_index => 1,
6588 p_msg_count => l_msg_count,
6589 p_msg_data => l_msg_data,
6590 p_data => l_data,
6591 p_msg_index_out => l_msg_index_out);
6592 x_msg_data := l_data;
6593 End If;
6594 raise FND_API.G_EXC_ERROR;
6595 End If;
6596 End If;
6597 -- End of FP_M changes
6598
6599 /* Bug 5768425 Start */
6600 --l_tasks_ver_ids.extend;
6601 --l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6602 l_task_cnt := l_task_cnt + 1;
6603 l_tasks_ver_ids(l_task_cnt) := p_task_version_id;
6604
6605 --PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6606 PA_STRUCT_TASK_ROLLUP_PUB.TASKS_ROLLUP_UNLIMITED(
6607 p_commit => FND_API.G_FALSE,
6608 p_element_versions => l_tasks_ver_ids,
6609 x_return_status => l_return_status,
6610 x_msg_count => l_msg_count,
6611 x_msg_data => l_msg_data);
6612
6613 /* Bug 5768425 End */
6614
6615 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6616 x_msg_count := FND_MSG_PUB.count_msg;
6617 if x_msg_count = 1 then
6618 pa_interface_utils_pub.get_messages
6619 (p_encoded => FND_API.G_TRUE,
6620 p_msg_index => 1,
6621 p_msg_count => l_msg_count,
6622 p_msg_data => l_msg_data,
6623 p_data => l_data,
6624 p_msg_index_out => l_msg_index_out);
6625 x_msg_data := l_data;
6626 end if;
6627 raise FND_API.G_EXC_ERROR;
6628 end if;
6629
6630 --hsiu added for task status
6631 --if versioning is off, rollup.
6632 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
6633 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6634 p_structure_version_id => l_structure_ver_id
6635 ,p_element_version_id => p_task_version_id
6636 ,x_return_status => l_return_status
6637 ,x_msg_count => l_msg_count
6638 ,x_msg_data => l_msg_data
6639 );
6640
6641 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6642 x_msg_count := FND_MSG_PUB.count_msg;
6643 if x_msg_count = 1 then
6644 pa_interface_utils_pub.get_messages
6645 (p_encoded => FND_API.G_TRUE,
6646 p_msg_index => 1,
6647 p_msg_count => l_msg_count,
6648 p_msg_data => l_msg_data,
6649 p_data => l_data,
6650 p_msg_index_out => l_msg_index_out);
6651 x_msg_data := l_data;
6652 end if;
6653 raise FND_API.G_EXC_ERROR;
6654 end if;
6655
6656 IF (l_old_peer_task_id IS NOT NULL) THEN
6657 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6658 p_structure_version_id => l_structure_ver_id
6659 ,p_element_version_id => l_old_peer_task_id
6660 ,x_return_status => l_return_status
6661 ,x_msg_count => l_msg_count
6662 ,x_msg_data => l_msg_data
6663 );
6664
6665 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6666 x_msg_count := FND_MSG_PUB.count_msg;
6667 if x_msg_count = 1 then
6668 pa_interface_utils_pub.get_messages
6669 (p_encoded => FND_API.G_TRUE,
6670 p_msg_index => 1,
6671 p_msg_count => l_msg_count,
6672 p_msg_data => l_msg_data,
6673 p_data => l_data,
6674 p_msg_index_out => l_msg_index_out);
6675 x_msg_data := l_data;
6676 end if;
6677 raise FND_API.G_EXC_ERROR;
6678 end if;
6679 END IF;
6680
6681 END IF;
6682
6683 --end task status changes
6684
6685 END IF;
6686
6687 --bug 3301192 fin plan changes
6688 declare
6689 /* Bug #: 3305199 SMukka */
6690 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
6691 /* l_task_ver_ids2 PA_PLSQL_DATATYPES.IdTabTyp; */
6692 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
6693 /*l_wp_type VARCHAR2(1); Commented for 4269830 - This value is already derived*/
6694 begin
6695 /*4269830 Commented for 4269830 - This value is already derived
6696 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_ver_id, 'WORKPLAN');
6697 */
6698 IF l_wp_type = 'Y'
6699 AND l_ref_parent_struct_ver_id <> p_ref_task_version_id /* make sure that the reference is not a str ver */
6700 THEN
6701 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_ref_task_version_id );
6702 IF l_lowest_task_flag1 = 'Y' AND
6703 l_lowest_task_flag2 = 'N'
6704 THEN
6705 l_task_ver_ids2.extend(1); /* Venky */
6706 l_task_ver_ids2(1) := p_ref_task_version_id;
6707 /*Smukka Bug No. 3474141 Date 03/01/2004 */
6708 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
6709 DECLARE
6710 --p1 bug 3888432
6711 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
6712 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
6713 SELECT resource_assignment_id
6714 FROM pa_resource_assignments
6715 WHERE wbs_element_Version_id = c_task_ver_id
6716 AND ta_display_flag = 'N';
6717 l_assign_id NUMBER := NULL;
6718 BEGIN
6719 OPEN get_assignment_id(p_ref_task_version_id);
6720 FETCH get_assignment_id into l_assign_id;
6721 CLOSE get_assignment_id;
6722
6723 IF (l_assign_id IS NOT NULL) THEN
6724 l_assign_ids.extend(1);
6725 l_assign_ids(1) := l_assign_id;
6726 pa_fp_planning_transaction_pub.delete_planning_transactions
6727 (
6728 p_context => 'WORKPLAN'
6729 ,p_task_or_res => 'ASSIGNMENT'
6730 -- ,p_element_version_id_tbl => l_task_ver_ids2
6731 -- ,p_maintain_reporting_lines => 'Y'
6732 ,p_resource_assignment_tbl => l_assign_ids
6733 ,x_return_status => l_return_status
6734 ,x_msg_count => l_msg_count
6735 ,x_msg_data => l_msg_data
6736 );
6737 END IF;
6738 EXCEPTION
6739 WHEN OTHERS THEN
6740 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
6741 p_procedure_name => 'MOVE_TASK_VERSION',
6742 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
6743 RAISE FND_API.G_EXC_ERROR;
6744 END;
6745 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6746 x_msg_count := FND_MSG_PUB.count_msg;
6747 if x_msg_count = 1 then
6748 pa_interface_utils_pub.get_messages
6749 (p_encoded => FND_API.G_TRUE,
6750 p_msg_index => 1,
6751 p_msg_count => l_msg_count,
6752 p_msg_data => l_msg_data,
6753 p_data => l_data,
6754 p_msg_index_out => l_msg_index_out);
6755 x_msg_data := l_data;
6756 end if;
6757 raise FND_API.G_EXC_ERROR;
6758 end if;
6759 END IF;
6760 END IF;
6761 end;
6762
6763 --bug 4149392
6764 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
6765 --end bug 4149392
6766
6767 x_return_status := FND_API.G_RET_STS_SUCCESS;
6768
6769 IF (p_commit = FND_API.G_TRUE) THEN
6770 COMMIT;
6771 END IF;
6772
6773 IF (p_debug_mode = 'Y') THEN
6774 pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSION END');
6775 END IF;
6776 EXCEPTION
6777 when FND_API.G_EXC_ERROR then
6778 if p_commit = FND_API.G_TRUE then
6779 rollback to move_task_version;
6780 end if;
6781 x_return_status := FND_API.G_RET_STS_ERROR;
6782 when FND_API.G_EXC_UNEXPECTED_ERROR then
6783 if p_commit = FND_API.G_TRUE then
6784 rollback to move_task_version;
6785 end if;
6786 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6787 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
6788 p_procedure_name => 'MOVE_TASK_VERSION',
6789 p_error_text => SUBSTRB(SQLERRM,1,240));
6790 when OTHERS then
6791 if p_commit = FND_API.G_TRUE then
6792 rollback to move_task_version;
6793 end if;
6794 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6795 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
6796 p_procedure_name => 'MOVE_TASK_VERSION',
6797 p_error_text => SUBSTRB(SQLERRM,1,240));
6798 raise;
6799 END Move_Task_version;
6800
6801 -- API name : Indent_Task_Version
6802 -- Type : Public procedure
6803 -- Pre-reqs : None
6804 -- Return Value : N/A
6805 -- Prameters
6806 -- p_api_version IN NUMBER N Not Null 1.0
6807 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
6808 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
6809 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
6810 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
6811 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
6812 -- p_debug_mode IN VARCHAR2 N Null N
6813 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6814 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6815 -- p_task_version_id IN NUMBER N Not Null
6816 -- x_return_status OUT VARCHAR2 N Null
6817 -- x_msg_count OUT NUMBER N Null
6818 -- x_msg_data OUT VARCHAR2 N Null
6819 --
6820 -- History
6821 --
6822 -- 23-OCT-01 Andrew Lee -Created
6823 --
6824 --
6825
6826 PROCEDURE INDENT_TASK_VERSION (
6827 p_api_version IN NUMBER :=1.0,
6828 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
6829 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
6830 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
6831 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
6832 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
6833 p_debug_mode IN VARCHAR2 :='N',
6834 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6835 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6836 p_task_version_id IN NUMBER,
6837 p_record_version_number IN NUMBER,
6838 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6839 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6840 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6841 ) IS
6842
6843
6844 l_api_name CONSTANT VARCHAR(30) := 'INDENT_TASK_VERSION';
6845 l_api_version CONSTANT NUMBER := 1.0;
6846
6847 l_wbs_level NUMBER;
6848 l_display_sequence NUMBER;
6849 l_prev_wbs_level NUMBER;
6850 l_prev_display_sequence NUMBER;
6851 l_ref_task_version_id NUMBER;
6852 l_peer_or_sub VARCHAR2(30);
6853 l_parent_structure_version_id NUMBER;
6854
6855 l_return_status VARCHAR2(1);
6856 l_msg_count NUMBER;
6857 l_msg_data VARCHAR2(250);
6858 l_data VARCHAR2(250);
6859 l_msg_index_out NUMBER;
6860
6861 l_project_id NUMBER;
6862 l_structure_id NUMBER;
6863 l_ref_task_id NUMBER;
6864 l_task_id NUMBER;
6865 l_task_record_version_number NUMBER;
6866 l_wbs_record_version_number NUMBER;
6867 l_dummy_char VARCHAR2(1);
6868 l_published_version VARCHAR2(1);
6869
6870 --hsiu
6871 --added for advanced structure - versioning
6872 l_versioned VARCHAR2(1) := 'N';
6873 l_shared VARCHAR2(1) := 'N';
6874 --end changes
6875
6876 --hyau
6877 --added for lifecycle version
6878 l_proj_element_id NUMBER;
6879 src_proj_element_id NUMBER; -- Bug 6881272
6880 -- end changes
6881
6882 CURSOR cur_struc_type( c_structure_id NUMBER )
6883 IS
6884 SELECT 'Y'
6885 FROM pa_proj_structure_types ppst
6886 ,pa_structure_types pst
6887 WHERE ppst.proj_element_id = c_structure_id
6888 AND ppst.structure_type_id = pst.structure_type_id
6889 AND pst.structure_type_class_code IN( 'FINANCIAL' );
6890
6891 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
6892 select 'Y'
6893 from pa_proj_elem_ver_structure
6894 where proj_element_id = c_structure_id
6895 AND project_id = c_project_id
6896 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
6897
6898 --Hsiu added for date rollup
6899 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6900
6901 --hsiu added for task status
6902 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
6903 select object_id_from1
6904 from pa_object_relationships
6905 where object_id_to1 = c_elem_ver_id
6906 and object_type_to = 'PA_TASKS'
6907 and relationship_type = 'S';
6908 l_parent_ver_id NUMBER;
6909 l_error_msg_code VARCHAR2(30);
6910
6911 BEGIN
6912 pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_TASK_VERSION');
6913
6914 IF (p_debug_mode = 'Y') THEN
6915 pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION begin');
6916 END IF;
6917
6918 IF (p_commit = FND_API.G_TRUE) THEN
6919 savepoint indent_task_version;
6920 END IF;
6921
6922 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
6923 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6924 END IF;
6925
6926 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
6927 FND_MSG_PUB.initialize;
6928 END IF;
6929
6930 ----dbms_output.put_line( 'Indent Task Stage 1 ' );
6931 --hsiu
6932 --added on 08-JAN-2002
6933 --check if task are linked task
6934 -- Bug 6881272: ABLE TO INDENT THE TASK OF THE WBS WITH THE LINKED PROJECT
6935
6936 BEGIN
6937 SELECT proj_element_id,project_id
6938 INTO src_proj_element_id,l_project_id
6939 FROM PA_PROJ_ELEMENT_VERSIONS
6940 WHERE element_version_id = p_task_version_id
6941 AND parent_structure_version_id = p_structure_version_id;
6942 EXCEPTION
6943 WHEN OTHERS THEN
6944 raise;
6945 END;
6946
6947 IF (p_structure_version_id IS NOT NULL) AND
6948 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6949 -- Bug 6881272: ABLE TO INDENT THE TASK OF THE WBS WITH THE LINKED PROJECT
6950 IF (Nvl(pa_relationship_utils.check_task_has_sub_proj(l_project_id
6951 , src_proj_element_id
6952 , p_task_version_id),'N') = 'Y') THEN
6953 --deleting linked task. Error
6954 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
6955 END IF;
6956
6957 l_msg_count := FND_MSG_PUB.count_msg;
6958 if l_msg_count > 0 then
6959 x_msg_count := l_msg_count;
6960 if x_msg_count = 1 then
6961 pa_interface_utils_pub.get_messages
6962 (p_encoded => FND_API.G_TRUE,
6963 p_msg_index => 1,
6964 p_msg_count => l_msg_count,
6965 p_msg_data => l_msg_data,
6966 p_data => l_data,
6967 p_msg_index_out => l_msg_index_out);
6968 x_msg_data := l_data;
6969 end if;
6970 raise FND_API.G_EXC_ERROR;
6971 end if;
6972 END IF;
6973
6974 -- hyau
6975 -- Lifecycle Phase validation Changes. Check if task has phase associated with it
6976 IF (p_task_version_id IS NOT NULL) AND
6977 (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6978
6979 SELECT proj_element_id, wbs_level, display_sequence, parent_structure_version_id
6980 INTO l_proj_element_id, l_wbs_level, l_display_sequence, l_parent_structure_version_id
6981 FROM PA_PROJ_ELEMENT_VERSIONS
6982 WHERE element_version_id = p_task_version_id;
6983
6984 IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
6985 l_proj_element_id)) THEN
6986 --Indenting a task with phase. Error
6987 PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
6988 END IF;
6989
6990 l_msg_count := FND_MSG_PUB.count_msg;
6991 if l_msg_count > 0 then
6992 x_msg_count := l_msg_count;
6993 if x_msg_count = 1 then
6994 pa_interface_utils_pub.get_messages
6995 (p_encoded => FND_API.G_TRUE,
6996 p_msg_index => 1,
6997 p_msg_count => l_msg_count,
6998 p_msg_data => l_msg_data,
6999 p_data => l_data,
7000 p_msg_index_out => l_msg_index_out);
7001 x_msg_data := l_data;
7002 end if;
7003 raise FND_API.G_EXC_ERROR;
7004 end if;
7005 END IF;
7006 -- end hyau. Lifecycle Phase validation Changes.
7007
7008 --dbms_output.put_line( 'Indent Task Stage 2 ' );
7009
7010
7011 /* Moved up for performance bug 2832807
7012 SELECT wbs_level, display_sequence, parent_structure_version_id
7013 INTO l_wbs_level, l_display_sequence, l_parent_structure_version_id
7014 FROM PA_PROJ_ELEMENT_VERSIONS
7015 WHERE element_version_id = p_task_version_id;
7016 */
7017
7018 --dbms_output.put_line( 'Indent Task Stage 3 ' );
7019
7020
7021 if l_display_sequence = 1 then
7022 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7023 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
7024 end if;
7025
7026 --dbms_output.put_line( 'Indent Task Stage 4 ' );
7027
7028 --need to specify parent structure version id
7029 SELECT wbs_level, element_version_id
7030 INTO l_prev_wbs_level, l_ref_task_version_id
7031 FROM PA_PROJ_ELEMENT_VERSIONS
7032 WHERE display_sequence = l_display_sequence - 1
7033 AND parent_structure_version_id = l_parent_structure_version_id;
7034
7035 --dbms_output.put_line( 'Indent Task Stage 5 ' );
7036
7037
7038 if l_wbs_level > l_prev_wbs_level then
7039 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7040 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
7041 end if;
7042
7043 l_msg_count := FND_MSG_PUB.count_msg;
7044 if l_msg_count > 0 then
7045 x_msg_count := l_msg_count;
7046 if x_msg_count = 1 then
7047 pa_interface_utils_pub.get_messages
7048 (p_encoded => FND_API.G_TRUE,
7049 p_msg_index => 1,
7050 p_msg_count => l_msg_count,
7051 p_msg_data => l_msg_data,
7052 p_data => l_data,
7053 p_msg_index_out => l_msg_index_out);
7054 x_msg_data := l_data;
7055 end if;
7056 raise FND_API.G_EXC_ERROR;
7057 end if;
7058
7059 --dbms_output.put_line( 'Indent Task Stage 6 ' );
7060
7061 if l_wbs_level = l_prev_wbs_level then
7062 l_peer_or_sub := 'SUB';
7063 else
7064 l_peer_or_sub := 'PEER';
7065
7066 --dbms_output.put_line( 'Indent Task Stage 7 ' );
7067
7068 --need to specify which structure version
7069 --need to specify parent in the inner select statement
7070 SELECT element_version_id
7071 INTO l_ref_task_version_id
7072 FROM PA_PROJ_ELEMENT_VERSIONS
7073 WHERE wbs_level = l_wbs_level + 1
7074 AND object_type = 'PA_TASKS'
7075 AND display_sequence < l_display_sequence
7076 AND parent_structure_version_id = l_parent_structure_version_id
7077 AND display_sequence =
7078 (SELECT max(display_sequence)
7079 FROM PA_PROJ_ELEMENT_VERSIONS
7080 WHERE wbs_level = l_wbs_level + 1
7081 AND object_type = 'PA_TASKS'
7082 AND display_sequence < l_display_sequence
7083 AND parent_structure_version_id = l_parent_structure_version_id);
7084 --dbms_output.put_line( 'Indent Task Stage 8 ' );
7085
7086 end if;
7087
7088
7089 --hsiu added for task status
7090 --Check if ok to indent this task
7091 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
7092 p_task_ver_id => p_task_version_id
7093 ,x_return_status => l_return_status
7094 ,x_error_message_code => l_error_msg_code
7095 );
7096
7097 IF (l_return_status <> 'Y') THEN
7098 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7099 p_msg_name => l_error_msg_code);
7100 raise FND_API.G_EXC_ERROR;
7101 END IF;
7102
7103 --check if ok to create subtask
7104 IF (l_peer_or_sub = 'PEER') THEN
7105 OPEN get_parent_version_id(l_ref_task_version_id);
7106 FETCH get_parent_version_id into l_parent_ver_id;
7107 CLOSE get_parent_version_id;
7108 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7109 p_parent_task_ver_id => l_parent_ver_id
7110 ,x_return_status => l_return_status
7111 ,x_error_message_code => l_error_msg_code
7112 );
7113
7114 IF (l_return_status <> 'Y') THEN
7115 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7116 p_msg_name => l_error_msg_code);
7117 raise FND_API.G_EXC_ERROR;
7118 END IF;
7119 ELSE
7120 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7121 p_parent_task_ver_id => l_ref_task_version_id
7122 ,x_return_status => l_return_status
7123 ,x_error_message_code => l_error_msg_code
7124 );
7125
7126 IF (l_return_status <> 'Y') THEN
7127 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7128 p_msg_name => l_error_msg_code);
7129 raise FND_API.G_EXC_ERROR;
7130 END IF;
7131 END IF;
7132
7133 --end task status changes
7134
7135
7136 --dbms_output.put_line( 'Indent Task Stage 9 ' );
7137
7138 PA_TASK_PUB1.Update_Task_Version
7139 ( p_validate_only => FND_API.G_FALSE,
7140 p_ref_task_version_id => l_ref_task_version_id,
7141 p_peer_or_sub => l_peer_or_sub,
7142 p_task_version_id => p_task_version_id,
7143 p_record_version_number => p_record_version_number,
7144 x_return_status => l_return_status,
7145 x_msg_count => l_msg_count,
7146 x_msg_data => l_msg_data );
7147
7148 --dbms_output.put_line( 'Indent Task Stage 10 ' );
7149
7150
7151 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7152 x_msg_count := FND_MSG_PUB.count_msg;
7153 IF x_msg_count = 1 then
7154 pa_interface_utils_pub.get_messages
7155 (p_encoded => FND_API.G_TRUE,
7156 p_msg_index => 1,
7157 p_msg_count => l_msg_count,
7158 p_msg_data => l_msg_data,
7159 p_data => l_data,
7160 p_msg_index_out => l_msg_index_out);
7161 x_msg_data := l_data;
7162 END IF;
7163 raise FND_API.G_EXC_ERROR;
7164 END IF;
7165
7166
7167 --dbms_output.put_line( 'Indent Task Stage 11 ' );
7168
7169 -- Update WBS numbers
7170 SELECT parent_structure_version_id
7171 INTO l_parent_structure_version_id
7172 FROM PA_PROJ_ELEMENT_VERSIONS
7173 WHERE element_version_id = p_task_version_id;
7174
7175 --dbms_output.put_line( 'Indent Task Stage 12 ' );
7176
7177
7178 PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
7179 ( p_commit => p_commit
7180 ,p_debug_mode => p_debug_mode
7181 ,p_parent_structure_ver_id => l_parent_structure_version_id
7182 ,p_task_id => p_task_version_id
7183 ,p_display_seq => l_display_sequence
7184 ,p_action => 'INDENT'
7185 ,p_parent_task_id => NULL
7186 ,x_return_status => l_return_status );
7187
7188
7189 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7190 FROM pa_proj_element_versions
7191 WHERE element_version_id = ( Select parent_structure_version_id
7192 from pa_proj_element_versions
7193 where element_version_id = p_task_version_id )
7194 AND object_type = 'PA_STRUCTURES';
7195
7196
7197 --Do financial task check
7198 --If financial
7199 OPEN cur_struc_type( l_structure_id );
7200 FETCH cur_struc_type INTO l_dummy_char;
7201 IF cur_struc_type%FOUND
7202 THEN
7203 --If structure has any published versions.
7204 l_published_version := 'N';
7205 OPEN cur_pub_versions( l_structure_id, l_project_id );
7206 FETCH cur_pub_versions INTO l_published_version;
7207 CLOSE cur_pub_versions;
7208
7209 --hsiu
7210 --changes for versioning
7211 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
7212 l_project_id);
7213 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
7214 l_project_id);
7215
7216 IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y')
7217 OR ((l_published_version = 'Y') AND (l_shared = 'N')) -- Bug # 5064340. -- To accomodate split financial tasks.
7218 THEN
7219 -- IF NVL( l_published_version, 'N' ) = 'N'
7220 -- THEN
7221 --end changes
7222
7223 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
7224 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
7225 FROM PA_TASKS pt,
7226 pa_proj_elem_ver_structure ppa,
7227 PA_PROJ_ELEMENT_VERSIONS ppev
7228 WHERE ppev.element_version_id = p_task_version_id
7229 AND ppev.parent_structure_version_id = ppa.element_version_id
7230 AND ppev.project_id = ppa.project_id
7231 AND ppev.proj_element_id = pt.task_id;
7232
7233 SELECT proj_element_id
7234 INTO l_ref_task_id
7235 FROM PA_PROJ_ELEMENT_VERSIONS
7236 WHERE element_version_id = l_ref_task_version_id;
7237
7238 SELECT record_version_number INTO l_task_record_version_number
7239 FROM pa_tasks
7240 WHERE task_id = l_task_id
7241 AND project_id = l_project_id;
7242
7243
7244 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
7245 p_project_id => l_project_id
7246 ,p_task_id => l_task_id
7247 ,p_edit_mode => 'INDENT'
7248 ,p_record_version_number => l_task_record_version_number
7249 ,p_wbs_record_version_number => 1
7250 ,x_return_status => l_return_status
7251 ,x_msg_count => l_msg_count
7252 ,x_msg_data => l_msg_data );
7253
7254 --dbms_output.put_line( 'Indent Task Stage 19 ' );
7255
7256 END IF;
7257 END IF;
7258 CLOSE cur_struc_type;
7259
7260 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7261 x_msg_count := FND_MSG_PUB.count_msg;
7262 IF x_msg_count = 1 then
7263 pa_interface_utils_pub.get_messages
7264 (p_encoded => FND_API.G_TRUE,
7265 p_msg_index => 1,
7266 p_msg_count => l_msg_count,
7267 p_msg_data => l_msg_data,
7268 p_data => l_data,
7269 p_msg_index_out => l_msg_index_out);
7270 x_msg_data := l_data;
7271 END IF;
7272 raise FND_API.G_EXC_ERROR;
7273 END IF;
7274
7275 --Hsiu added for date rollup; workplan only
7276
7277 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(l_parent_structure_version_id, 'WORKPLAN') = 'Y' then
7278 l_tasks_ver_ids.extend;
7279 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
7280
7281 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
7282 p_commit => FND_API.G_FALSE,
7283 p_element_versions => l_tasks_ver_ids,
7284 x_return_status => l_return_status,
7285 x_msg_count => l_msg_count,
7286 x_msg_data => l_msg_data);
7287
7288 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7289 x_msg_count := FND_MSG_PUB.count_msg;
7290 if x_msg_count = 1 then
7291 pa_interface_utils_pub.get_messages
7292 (p_encoded => FND_API.G_TRUE,
7293 p_msg_index => 1,
7294 p_msg_count => l_msg_count,
7295 p_msg_data => l_msg_data,
7296 p_data => l_data,
7297 p_msg_index_out => l_msg_index_out);
7298 x_msg_data := l_data;
7299 end if;
7300 raise FND_API.G_EXC_ERROR;
7301 end if;
7302
7303 --hsiu added for task status
7304 --if versioning is off, rollup.
7305 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
7306 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
7307 p_structure_version_id => p_structure_version_id
7308 ,p_element_version_id => p_task_version_id
7309 ,x_return_status => l_return_status
7310 ,x_msg_count => l_msg_count
7311 ,x_msg_data => l_msg_data
7312 );
7313
7314 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7315 x_msg_count := FND_MSG_PUB.count_msg;
7316 if x_msg_count = 1 then
7317 pa_interface_utils_pub.get_messages
7318 (p_encoded => FND_API.G_TRUE,
7319 p_msg_index => 1,
7320 p_msg_count => l_msg_count,
7321 p_msg_data => l_msg_data,
7322 p_data => l_data,
7323 p_msg_index_out => l_msg_index_out);
7324 x_msg_data := l_data;
7325 end if;
7326 raise FND_API.G_EXC_ERROR;
7327 end if;
7328 END IF;
7329
7330 --end task status changes
7331
7332 END IF;
7333
7334 x_return_status := FND_API.G_RET_STS_SUCCESS;
7335
7336 IF (p_commit = FND_API.G_TRUE) THEN
7337 COMMIT;
7338 END IF;
7339
7340 IF (p_debug_mode = 'Y') THEN
7341 pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION END');
7342 END IF;
7343
7344 EXCEPTION
7345 when FND_API.G_EXC_ERROR then
7346 if p_commit = FND_API.G_TRUE then
7347 rollback to indent_task_version;
7348 end if;
7349 x_return_status := FND_API.G_RET_STS_ERROR;
7350 when FND_API.G_EXC_UNEXPECTED_ERROR then
7351 if p_commit = FND_API.G_TRUE then
7352 rollback to indent_task_version;
7353 end if;
7354 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7355 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
7356 p_procedure_name => 'INDENT_TASK_VERSION',
7357 p_error_text => SUBSTRB(SQLERRM,1,240));
7358 when OTHERS then
7359 if p_commit = FND_API.G_TRUE then
7360 rollback to indent_task_version;
7361 end if;
7362 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7363 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
7364 p_procedure_name => 'INDENT_TASK_VERSION',
7365 p_error_text => SUBSTRB(SQLERRM,1,240));
7366 raise;
7367
7368 END Indent_Task_Version;
7369
7370
7371 -- API name : Outdent_Task_Version
7372 -- Type : Public procedure
7373 -- Pre-reqs : None
7374 -- Return Value : N/A
7375 -- Prameters
7376 -- p_api_version IN NUMBER N Not Null 1.0
7377 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
7378 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
7379 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
7380 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
7381 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
7382 -- p_debug_mode IN VARCHAR2 N Null N
7383 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7384 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7385 -- p_task_version_id IN NUMBER N Not Null
7386 -- x_return_status OUT VARCHAR2 N Null
7387 -- x_msg_count OUT NUMBER N Null
7388 -- x_msg_data OUT VARCHAR2 N Null
7389 --
7390 -- History
7391 --
7392 -- 23-OCT-01 Andrew Lee -Created
7393 --
7394 --
7395
7396 PROCEDURE OUTDENT_TASK_VERSION (
7397 p_api_version IN NUMBER :=1.0,
7398 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
7399 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
7400 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
7401 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
7402 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
7403 p_debug_mode IN VARCHAR2 :='N',
7404 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7405 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7406 p_task_version_id IN NUMBER,
7407 p_record_version_number IN NUMBER,
7408 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
7409 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
7410 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7411 )
7412 IS
7413
7414 l_api_name CONSTANT VARCHAR(30) := 'OUTDENT_TASK_VERSION';
7415 l_api_version CONSTANT NUMBER := 1.0;
7416
7417 l_wbs_level NUMBER;
7418 l_display_sequence NUMBER;
7419 l_ref_task_version_id NUMBER;
7420 l_parent_structure_version_id NUMBER;
7421
7422 l_return_status VARCHAR2(1);
7423 l_msg_count NUMBER;
7424 l_msg_data VARCHAR2(250);
7425 l_data VARCHAR2(250);
7426 l_msg_index_out NUMBER;
7427
7428 l_project_id NUMBER;
7429 l_ref_task_id NUMBER;
7430 l_task_id NUMBER;
7431 l_task_record_version_number NUMBER;
7432 l_wbs_record_version_number NUMBER;
7433 l_dummy_char VARCHAR2(1);
7434 l_published_version VARCHAR2(1);
7435 l_structure_id NUMBER;
7436
7437 --hsiu
7438 --added for advanced structure - versioning
7439 l_versioned VARCHAR2(1) := 'N';
7440 l_shared VARCHAR2(1) := 'N';
7441 --end changes
7442
7443 CURSOR cur_struc_type( c_structure_id NUMBER )
7444 IS
7445 SELECT 'Y'
7446 FROM pa_proj_structure_types ppst
7447 ,pa_structure_types pst
7448 WHERE ppst.proj_element_id = c_structure_id
7449 AND ppst.structure_type_id = pst.structure_type_id
7450 AND pst.structure_type_class_code IN( 'FINANCIAL' );
7451
7452 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
7453 select 'Y'
7454 from pa_proj_elem_ver_structure
7455 where proj_element_id = c_structure_id
7456 AND project_id = c_project_id
7457 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
7458
7459 --hsiu added, for dates rollup
7460 CURSOR get_peer_tasks
7461 IS
7462 select b.object_id_to1 object_id_to1
7463 from pa_object_relationships a,
7464 pa_object_relationships b
7465 where a.object_id_to1 = p_task_version_id
7466 and a.object_type_to = 'PA_TASKS'
7467 and a.object_id_from1 = b.object_id_from1
7468 and a.object_type_from = b.object_type_from
7469 and b.object_type_to = 'PA_TASKS'
7470 and b.object_id_to1 <> p_task_version_id;
7471 c_get_peer_tasks get_peer_tasks%ROWTYPE;
7472
7473 --Hsiu added, for dates rollup
7474 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7475 --hsiu added, for task status
7476 l_rollup_task_id NUMBER;
7477
7478 --hsiu added for task status
7479 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
7480 select object_id_from1
7481 from pa_object_relationships
7482 where object_id_to1 = c_elem_ver_id
7483 and object_type_to = 'PA_TASKS'
7484 and relationship_type = 'S';
7485 l_parent_ver_id NUMBER;
7486 l_error_msg_code VARCHAR2(30);
7487 BEGIN
7488 pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_TASK_VERSION');
7489
7490 IF (p_debug_mode = 'Y') THEN
7491 pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION begin');
7492 END IF;
7493
7494 IF (p_commit = FND_API.G_TRUE) THEN
7495 savepoint outdent_task_version;
7496 END IF;
7497
7498 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
7499 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7500 END IF;
7501
7502 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
7503 FND_MSG_PUB.initialize;
7504 END IF;
7505
7506 --hsiu
7507 --added on 08-JAN-2002
7508 --check if task are linked task
7509 IF (p_structure_version_id IS NOT NULL) AND
7510 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7511 IF ('N' = pa_proj_elements_utils.check_task_in_structure(
7512 p_structure_version_id,
7513 p_task_version_id)) THEN
7514 --deleting linked task. Error
7515 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
7516 END IF;
7517
7518 l_msg_count := FND_MSG_PUB.count_msg;
7519 if l_msg_count > 0 then
7520 x_msg_count := l_msg_count;
7521 if x_msg_count = 1 then
7522 pa_interface_utils_pub.get_messages
7523 (p_encoded => FND_API.G_TRUE,
7524 p_msg_index => 1,
7525 p_msg_count => l_msg_count,
7526 p_msg_data => l_msg_data,
7527 p_data => l_data,
7528 p_msg_index_out => l_msg_index_out);
7529 x_msg_data := l_data;
7530 end if;
7531 raise FND_API.G_EXC_ERROR;
7532 end if;
7533 END IF;
7534
7535 --hsiu added, for dates rollup
7536 --need to get peer task before it has been outdented.
7537 OPEN get_peer_tasks;
7538 LOOP
7539 FETCH get_peer_tasks INTO c_get_peer_tasks;
7540 EXIT WHEN get_peer_tasks%NOTFOUND;
7541 l_tasks_ver_ids.extend;
7542 l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
7543 --added for task status rollup
7544 l_rollup_task_id := c_get_peer_tasks.object_id_to1;
7545 END LOOP;
7546 CLOSE get_peer_tasks;
7547
7548
7549 SELECT wbs_level, display_sequence, parent_structure_version_id
7550 INTO l_wbs_level, l_display_sequence, l_parent_structure_version_id
7551 FROM PA_PROJ_ELEMENT_VERSIONS
7552 WHERE element_version_id = p_task_version_id;
7553
7554 if l_wbs_level = 1 then
7555 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7556 ,p_msg_name => 'PA_PS_CANNOT_OUTDENT');
7557 end if;
7558
7559 l_msg_count := FND_MSG_PUB.count_msg;
7560 if l_msg_count > 0 then
7561 x_msg_count := l_msg_count;
7562 if x_msg_count = 1 then
7563 pa_interface_utils_pub.get_messages
7564 (p_encoded => FND_API.G_TRUE,
7565 p_msg_index => 1,
7566 p_msg_count => l_msg_count,
7567 p_msg_data => l_msg_data,
7568 p_data => l_data,
7569 p_msg_index_out => l_msg_index_out);
7570 x_msg_data := l_data;
7571 end if;
7572 raise FND_API.G_EXC_ERROR;
7573 end if;
7574
7575 --get the reference task version of p_task_version_id
7576 SELECT element_version_id
7577 INTO l_ref_task_version_id
7578 FROM PA_PROJ_ELEMENT_VERSIONS
7579 WHERE wbs_level = l_wbs_level - 1
7580 AND object_type = 'PA_TASKS'
7581 AND parent_structure_version_id = l_parent_structure_version_id
7582 AND display_sequence < l_display_sequence
7583 AND display_sequence =
7584 (SELECT max(display_sequence)
7585 FROM PA_PROJ_ELEMENT_VERSIONS
7586 WHERE wbs_level = l_wbs_level - 1
7587 AND object_type = 'PA_TASKS'
7588 AND parent_structure_version_id = l_parent_structure_version_id
7589 AND display_sequence < l_display_sequence);
7590
7591 --hsiu added for task status
7592 --Check if ok to outdent this task
7593 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
7594 p_task_ver_id => p_task_version_id
7595 ,x_return_status => l_return_status
7596 ,x_error_message_code => l_error_msg_code
7597 );
7598
7599 IF (l_return_status <> 'Y') THEN
7600 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7601 p_msg_name => l_error_msg_code);
7602 raise FND_API.G_EXC_ERROR;
7603 END IF;
7604
7605 OPEN get_parent_version_id(l_ref_task_version_id);
7606 FETCH get_parent_version_id into l_parent_ver_id;
7607 CLOSE get_parent_version_id;
7608 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7609 p_parent_task_ver_id => l_parent_ver_id
7610 ,x_return_status => l_return_status
7611 ,x_error_message_code => l_error_msg_code
7612 );
7613
7614 IF (l_return_status <> 'Y') THEN
7615 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7616 p_msg_name => l_error_msg_code);
7617 raise FND_API.G_EXC_ERROR;
7618 END IF;
7619 --task status changes ends
7620
7621 --dbms_output.put_line( 'Before Update_Task_Version ' );
7622
7623 PA_TASK_PUB1.Update_Task_Version
7624 ( p_validate_only => FND_API.G_FALSE,
7625 p_ref_task_version_id => l_ref_task_version_id,
7626 p_peer_or_sub => 'PEER',
7627 p_task_version_id => p_task_version_id,
7628 p_record_version_number => p_record_version_number,
7629 p_action => 'OUTDENT',
7630 x_return_status => l_return_status,
7631 x_msg_count => l_msg_count,
7632 x_msg_data => l_msg_data );
7633
7634 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7635 x_msg_count := FND_MSG_PUB.count_msg;
7636 IF x_msg_count = 1 then
7637 pa_interface_utils_pub.get_messages
7638 (p_encoded => FND_API.G_TRUE,
7639 p_msg_index => 1,
7640 p_msg_count => l_msg_count,
7641 p_msg_data => l_msg_data,
7642 p_data => l_data,
7643 p_msg_index_out => l_msg_index_out);
7644 x_msg_data := l_data;
7645 END IF;
7646 raise FND_API.G_EXC_ERROR;
7647 END IF;
7648
7649 --dbms_output.put_line( 'Before Update WBS numbers ' );
7650
7651 -- Update WBS numbers
7652 SELECT parent_structure_version_id
7653 INTO l_parent_structure_version_id
7654 FROM PA_PROJ_ELEMENT_VERSIONS
7655 WHERE element_version_id = p_task_version_id;
7656
7657 PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
7658 ( p_commit => p_commit
7659 ,p_debug_mode => p_debug_mode
7660 ,p_parent_structure_ver_id => l_parent_structure_version_id
7661 ,p_task_id => p_task_version_id
7662 ,p_display_seq => l_display_sequence
7663 ,p_action => 'OUTDENT'
7664 ,p_parent_task_id => NULL
7665 ,x_return_status => l_return_status );
7666
7667 /* SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7668 FROM pa_proj_element_versions
7669 WHERE element_version_id = p_structure_version_id
7670 AND object_type = 'PA_STRUCTURES';*/
7671
7672 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7673 FROM pa_proj_element_versions
7674 WHERE element_version_id = ( Select parent_structure_version_id
7675 from pa_proj_element_versions
7676 where element_version_id = p_task_version_id )
7677 AND object_type = 'PA_STRUCTURES';
7678
7679 --Do financial task check
7680 --If financial
7681 OPEN cur_struc_type( l_structure_id );
7682 FETCH cur_struc_type INTO l_dummy_char;
7683 IF cur_struc_type%FOUND
7684 THEN
7685 --If structure has any published versions.
7686 l_published_version := 'N';
7687 OPEN cur_pub_versions( l_structure_id, l_project_id );
7688 FETCH cur_pub_versions INTO l_published_version;
7689 CLOSE cur_pub_versions;
7690
7691 --hsiu
7692 --changes for versioning
7693 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
7694 l_project_id);
7695 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
7696 l_project_id);
7697 IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y')
7698 OR ((l_published_version = 'Y') AND (l_shared = 'N')) -- Bug # 5064340. -- To accomodate split financial tasks.
7699 THEN
7700 -- IF NVL( l_published_version, 'N' ) = 'N'
7701 -- THEN
7702 --end changes
7703
7704 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
7705 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
7706 FROM PA_TASKS pt,
7707 pa_proj_elem_ver_structure ppa,
7708 PA_PROJ_ELEMENT_VERSIONS ppev
7709 WHERE ppev.element_version_id = p_task_version_id
7710 AND ppev.parent_structure_version_id = ppa.element_version_id
7711 AND ppev.project_id = ppa.project_id
7712 AND ppev.proj_element_id = pt.task_id;
7713
7714 SELECT proj_element_id
7715 INTO l_ref_task_id
7716 FROM PA_PROJ_ELEMENT_VERSIONS
7717 WHERE element_version_id = l_ref_task_version_id;
7718
7719 SELECT record_version_number INTO l_task_record_version_number
7720 FROM pa_tasks
7721 WHERE task_id = l_task_id
7722 AND project_id = l_project_id;
7723
7724 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
7725 p_project_id => l_project_id
7726 ,p_task_id => l_task_id
7727 ,p_edit_mode => 'OUTDENT'
7728 ,p_record_version_number => l_task_record_version_number
7729 ,p_wbs_record_version_number => 1
7730 ,x_return_status => l_return_status
7731 ,x_msg_count => l_msg_count
7732 ,x_msg_data => l_msg_data );
7733 END IF;
7734 END IF;
7735 CLOSE cur_struc_type;
7736
7737 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7738 x_msg_count := FND_MSG_PUB.count_msg;
7739 IF x_msg_count = 1 then
7740 pa_interface_utils_pub.get_messages
7741 (p_encoded => FND_API.G_TRUE,
7742 p_msg_index => 1,
7743 p_msg_count => l_msg_count,
7744 p_msg_data => l_msg_data,
7745 p_data => l_data,
7746 p_msg_index_out => l_msg_index_out);
7747 x_msg_data := l_data;
7748 END IF;
7749 raise FND_API.G_EXC_ERROR;
7750 END IF;
7751
7752 --dbms_output.put_line( 'After Move task ' );
7753
7754 --Hsiu added for date rollup; workplan only
7755
7756 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(l_parent_structure_version_id, 'WORKPLAN') = 'Y' then
7757 l_tasks_ver_ids.extend;
7758 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
7759
7760 --added for task status rollup
7761 IF (l_rollup_task_id IS NULL) THEN
7762 l_rollup_task_id := p_task_version_id;
7763 END IF;
7764
7765 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
7766 p_commit => FND_API.G_FALSE,
7767 p_element_versions => l_tasks_ver_ids,
7768 x_return_status => l_return_status,
7769 x_msg_count => l_msg_count,
7770 x_msg_data => l_msg_data);
7771
7772 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7773 x_msg_count := FND_MSG_PUB.count_msg;
7774 if x_msg_count = 1 then
7775 pa_interface_utils_pub.get_messages
7776 (p_encoded => FND_API.G_TRUE,
7777 p_msg_index => 1,
7778 p_msg_count => l_msg_count,
7779 p_msg_data => l_msg_data,
7780 p_data => l_data,
7781 p_msg_index_out => l_msg_index_out);
7782 x_msg_data := l_data;
7783 end if;
7784 raise FND_API.G_EXC_ERROR;
7785 end if;
7786
7787 --hsiu added for task status
7788 --if versioning is off, rollup.
7789 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
7790 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
7791 p_structure_version_id => p_structure_version_id
7792 ,p_element_version_id => l_rollup_task_id
7793 ,x_return_status => l_return_status
7794 ,x_msg_count => l_msg_count
7795 ,x_msg_data => l_msg_data
7796 );
7797
7798 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7799 x_msg_count := FND_MSG_PUB.count_msg;
7800 if x_msg_count = 1 then
7801 pa_interface_utils_pub.get_messages
7802 (p_encoded => FND_API.G_TRUE,
7803 p_msg_index => 1,
7804 p_msg_count => l_msg_count,
7805 p_msg_data => l_msg_data,
7806 p_data => l_data,
7807 p_msg_index_out => l_msg_index_out);
7808 x_msg_data := l_data;
7809 end if;
7810 raise FND_API.G_EXC_ERROR;
7811 end if;
7812 END IF;
7813
7814 --end task status changes
7815
7816 END IF;
7817
7818 x_return_status := FND_API.G_RET_STS_SUCCESS;
7819
7820 IF (p_commit = FND_API.G_TRUE) THEN
7821 COMMIT;
7822 END IF;
7823
7824 IF (p_debug_mode = 'Y') THEN
7825 pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION END');
7826 END IF;
7827
7828 EXCEPTION
7829 when FND_API.G_EXC_ERROR then
7830 if p_commit = FND_API.G_TRUE then
7831 rollback to outdent_task_version;
7832 end if;
7833 x_return_status := FND_API.G_RET_STS_ERROR;
7834 when FND_API.G_EXC_UNEXPECTED_ERROR then
7835 if p_commit = FND_API.G_TRUE then
7836 rollback to outdent_task_version;
7837 end if;
7838 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7839 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
7840 p_procedure_name => 'OUTDENT_TASK_VERSION',
7841 p_error_text => SUBSTRB(SQLERRM,1,240));
7842 when OTHERS then
7843 if p_commit = FND_API.G_TRUE then
7844 rollback to outdent_task_version;
7845 end if;
7846 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7847 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
7848 p_procedure_name => 'OUTDENT_TASK_VERSION',
7849 p_error_text => SUBSTRB(SQLERRM,1,240));
7850 raise;
7851 END Outdent_Task_Version;
7852
7853 -- API name : Create_tasks
7854 -- Type : Wrapper Public procedure
7855 -- Pre-reqs : None
7856 -- Return Value : N/A
7857 -- Prameters
7858 -- p_project_id IN NUMBER
7859 -- p_ref_task_version_id IN NUMBER
7860 -- p_structure_id IN NUMBER
7861 -- p_structure_version_id IN NUMBER
7862 -- p_outline_level IN PA_NUM_1000_NUM
7863 -- p_task_number IN PA_VC_1000_150
7864 -- p_task_name IN PA_VC_1000_2000
7865 -- p_scheduled_start_date IN PA_DATE_1000_DATE
7866 -- p_scheduled_finish_date IN PA_DATE_1000_DATE
7867 -- p_task_manager_id IN PA_NUM_1000_NUM
7868 -- p_task_manager_name IN PA_VC_1000_150
7869 --FP M Development Changes
7870 -- p_planned_effort IN PA_NUM_1000_NUM
7871 -- p_dependencies IN PA_VC_1000_4000
7872 -- p_dependency_ids IN PA_NUM_1000_NUM
7873 -- p_structure_type IN VARCHAR2 :='WORKPLAN'
7874 -- p_financial_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7875 -- p_resources IN PA_VC_1000_4000
7876 -- p_resource_ids IN PA_NUM_1000_NUM
7877 -- p_mapped_task IN PA_VC_1000_4000
7878 -- p_mapped_task_id IN PA_NUM_1000_NUM
7879 --End FP M Development Changes
7880 -- x_msg_count OUT NUMBER
7881 -- x_msg_data OUT VARCHAR2
7882 -- x_return_status OUT VARCHAR2
7883 -- x_return_status OUT VARCHAR2 N Null
7884 -- x_msg_count OUT NUMBER N Null
7885 -- x_msg_data OUT VARCHAR2 N Null
7886 --
7887 -- History
7888 --
7889 -- 23-OCT-01 Andrew Lee -Created
7890 --
7891 --
7892
7893 PROCEDURE CREATE_TASKS
7894 ( p_project_id IN NUMBER
7895 ,p_ref_task_version_id IN NUMBER
7896 ,p_structure_id IN NUMBER
7897 ,p_structure_version_id IN NUMBER
7898 ,p_outline_level IN PA_NUM_1000_NUM
7899 ,p_task_number IN PA_VC_1000_150
7900 ,p_task_name IN PA_VC_1000_2000
7901 ,p_scheduled_start_date IN PA_DATE_1000_DATE
7902 ,p_scheduled_finish_date IN PA_DATE_1000_DATE
7903 ,p_task_manager_id IN PA_NUM_1000_NUM
7904 ,p_task_manager_name IN PA_VC_1000_150
7905 ,p_TYPE_ID IN PA_NUM_1000_NUM
7906 --FP M Development Changes bug 330119
7907 ,p_planned_effort IN PA_NUM_1000_NUM
7908 ,p_planned_equip_effort IN PA_NUM_1000_NUM
7909 ,p_dependencies IN PA_VC_1000_4000
7910 ,p_dependency_ids IN PA_NUM_1000_NUM
7911 ,p_structure_type IN VARCHAR2 :='WORKPLAN'
7912 ,p_financial_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7913 ,p_use_in_fin_plan IN PA_VC_1000_10
7914 ,p_resources IN PA_VC_1000_4000
7915 ,p_resource_ids IN PA_NUM_1000_NUM
7916 ,p_mapped_task IN PA_VC_1000_4000
7917 ,p_mapped_task_id IN PA_NUM_1000_NUM
7918 --End FP M Development Changes bug 330119
7919 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7920 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7921 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
7922 IS
7923 i NUMBER;
7924 l_msg_count NUMBER;
7925 l_return_status VARCHAR2(1);
7926 l_msg_data VARCHAR2(2000);
7927 l_data VARCHAR2(2000);
7928 l_msg_index_out NUMBER;
7929
7930 l_outline_level NUMBER;
7931 l_prev_outline_level NUMBER;
7932 l_ref_task_ver_id NUMBER;
7933 l_peer_or_sub VARCHAR2(20);
7934 l_task_id NUMBER;
7935 l_task_version_id NUMBER;
7936 API_ERROR EXCEPTION;
7937
7938 TYPE reference_tasks IS TABLE OF NUMBER
7939 INDEX BY BINARY_INTEGER;
7940
7941 -- This table stores reference task version IDs for a particular outline
7942 -- level. This provides a lookup to find the last task version created
7943 -- at that level.
7944 l_outline_task_ref reference_tasks;
7945 l_pev_schedule_id NUMBER;
7946 l_ref_proj_eleme_id NUMBER;
7947
7948 CURSOR cur_ref_proj_elem_id( p_ref_task_ver_id NUMBER )
7949 IS
7950 SELECT proj_element_id
7951 FROM pa_proj_element_versions
7952 WHERE element_version_id = p_ref_task_ver_id
7953 AND object_type = 'PA_TASKS';
7954
7955 --Hsiu added for date rollup
7956 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7957
7958 -- anlee task weighting
7959 l_top_sub_count NUMBER;
7960 -- anlee End of changes
7961
7962 -- hsiu added for task version status
7963 CURSOR cur_proj_is_template(c_project_id NUMBER)
7964 IS select 'Y'
7965 from pa_projects_all
7966 where project_id = c_project_id
7967 and template_flag = 'Y';
7968 l_template_flag VARCHAR2(1);
7969
7970 l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
7971
7972 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
7973 select object_id_from1
7974 from pa_object_relationships
7975 where object_id_to1 = c_elem_ver_id
7976 and object_type_to = 'PA_TASKS'
7977 and relationship_type = 'S';
7978 l_parent_ver_id NUMBER;
7979 l_error_msg_code VARCHAR2(30);
7980 --end task version status changes
7981
7982 l_versioned VARCHAR2(1) := 'N';
7983 l_shared VARCHAR2(1) := 'N';
7984 l_published_ver_exists VARCHAR2(1);
7985 l_wp_process_flag VARCHAR2(1);
7986 --bug 3053281
7987 l_wp_type VARCHAR2(1);
7988 l_weighting_basis_Code VARCHAR2(30);
7989 --end bug 3053281
7990
7991 CURSOR get_base_ref_obj_type IS
7992 select object_type
7993 from pa_proj_element_versions
7994 where element_version_id = p_ref_task_version_id;
7995 l_ref_obj_type VARCHAR2(30);
7996
7997 -- Added for FP_M changes : Bug 3305199 : Bhumesh
7998 l_Share_Code VARCHAR2(30);
7999 l_Financial_Flag VARCHAR2(1) := 'N';
8000
8001 --bug 3301192
8002 /* Bug #: 3305199 SMukka */
8003 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
8004 /* l_task_ver_ids PA_PLSQL_DATATYPES.IdTabTyp; */
8005 l_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
8006
8007 BEGIN
8008
8009 --Clear Error Messages.
8010 FND_MSG_PUB.initialize;
8011
8012 savepoint create_tasks;
8013
8014 if p_project_id is null then
8015 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8016 ,p_msg_name => 'PA_NO_PROJECT_ID');
8017 end if;
8018
8019 if p_ref_task_version_id is null then
8020 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8021 ,p_msg_name => 'PA_NO_TASK_VERSION_ID');
8022 end if;
8023
8024 if p_structure_version_id is null then
8025 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8026 ,p_msg_name => 'PA_NO_STRUCTURE_VERSION_ID');
8027 end if;
8028
8029 l_msg_count := FND_MSG_PUB.count_msg;
8030 if l_msg_count > 0 then
8031 x_msg_count := l_msg_count;
8032 if x_msg_count = 1 then
8033 pa_interface_utils_pub.get_messages
8034 (p_encoded => FND_API.G_TRUE,
8035 p_msg_index => 1,
8036 p_msg_count => l_msg_count,
8037 p_msg_data => l_msg_data,
8038 p_data => l_data,
8039 p_msg_index_out => l_msg_index_out);
8040 x_msg_data := l_data;
8041 end if;
8042 raise API_ERROR;
8043 end if;
8044
8045 --bug 3053281 --set flag if not (manual and workplan only)
8046 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
8047 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
8048
8049 --bug 3010538
8050 --Added the following lines to cache versioning and sharing information
8051 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
8052 p_project_id);
8053 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
8054 p_project_id);
8055 --check whether there exists any published version.
8056 l_published_ver_exists := PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS( p_project_id, p_structure_id );
8057 --end bug 3010538
8058 --3035902: process update flag changes
8059 l_wp_process_flag := 'N';
8060 --3035902: end process update flag changes
8061
8062 l_outline_task_ref(0) := p_ref_task_version_id;
8063 l_prev_outline_level := NULL;
8064
8065 -- anlee task weighting
8066 l_top_sub_count := 0;
8067 -- anlee End of changes
8068
8069 --hsiu: added for task version status
8070 OPEN cur_proj_is_template(p_project_id);
8071 FETCH cur_proj_is_template into l_template_flag;
8072 IF cur_proj_is_template%NOTFOUND THEN
8073 l_template_flag := 'N';
8074 END IF;
8075 CLOSE cur_proj_is_template;
8076 --added for task version status
8077
8078 --added for bug 3125370
8079 OPEN get_base_ref_obj_type;
8080 FETCH get_base_ref_obj_type into l_ref_obj_type;
8081 CLOSE get_base_ref_obj_type;
8082 --bug 3125370
8083
8084 -- Added for FP_M changes. Tracking Bug 3305199
8085 l_financial_flag := 'N';
8086
8087 for i in 1..1000 LOOP
8088 if p_outline_level(i) is null AND p_task_name(i) IS NOT NULL AND p_task_number(i) IS NOT NULL then
8089 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8090 ,p_msg_name => 'PA_PS_TSK_WBS_LVL_ERR');
8091 x_msg_count := 1;
8092 pa_interface_utils_pub.get_messages
8093 (p_encoded => FND_API.G_TRUE,
8094 p_msg_index => 1,
8095 p_msg_count => l_msg_count,
8096 p_msg_data => l_msg_data,
8097 p_data => l_data,
8098 p_msg_index_out => l_msg_index_out);
8099 x_msg_data := l_data;
8100 raise API_ERROR;
8101 end if;
8102
8103 if p_outline_level(i) is null then
8104 exit;
8105 end if;
8106
8107 l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
8108 -- Added for FP_M changes. Tracking Bug 3305199 : Bhumesh
8109 /*
8110 IF l_Share_Code IN ('SHARE_FULL', 'SHARE_PARTIAL') then
8111 If P_Structure_Type = 'FINANCIAL' THEN
8112 l_Financial_Flag := 'N';
8113 Else
8114 l_Financial_Flag := 'Y';
8115 End If;
8116
8117 If P_Structure_Type = 'WORKPLAN' THEN
8118 IF l_Share_Code = 'SHARE_PARTIAL' then
8119 l_Financial_Flag := 'N';
8120 Else
8121 l_Financial_Flag := 'Y';
8122 End If;
8123 End If;
8124 End IF;
8125 */
8126 IF l_shared = 'Y'
8127 THEN
8128 If P_Structure_Type = 'WORKPLAN' AND
8129 l_Share_Code = 'SHARE_PARTIAL' then
8130 l_Financial_Flag := 'N';
8131 Else
8132 l_Financial_Flag := 'Y';
8133 End If;
8134
8135 ELSE
8136 If P_Structure_Type = 'WORKPLAN' THEN
8137 l_Financial_Flag := 'N';
8138 Else
8139 l_Financial_Flag := 'Y';
8140 End If;
8141 End IF;
8142 -- End of FP_M changes
8143
8144 --bug 3125370: add condition for reference object_type
8145 if (instr(to_char(p_outline_level(i)), '.') <> 0) OR
8146 (l_ref_obj_type = 'PA_STRUCTURES' and p_outline_level(i) = 0) then
8147 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8148 ,p_msg_name => 'PA_PS_OUTLINE_LEVEL_INVALID');
8149
8150 x_msg_count := 1;
8151 pa_interface_utils_pub.get_messages
8152 (p_encoded => FND_API.G_TRUE,
8153 p_msg_index => 1,
8154 p_msg_count => l_msg_count,
8155 p_msg_data => l_msg_data,
8156 p_data => l_data,
8157 p_msg_index_out => l_msg_index_out);
8158 x_msg_data := l_data;
8159 raise API_ERROR;
8160 end if;
8161
8162 l_outline_level := p_outline_level(i);
8163
8164 if l_prev_outline_level is not null then
8165 if l_outline_level > l_prev_outline_level then
8166 if (l_outline_level - l_prev_outline_level) > 1 then
8167 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8168 ,p_msg_name => 'PA_PS_OUTLINE_LEVEL_INVALID');
8169
8170 x_msg_count := 1;
8171 pa_interface_utils_pub.get_messages
8172 (p_encoded => FND_API.G_TRUE,
8173 p_msg_index => 1,
8174 p_msg_count => l_msg_count,
8175 p_msg_data => l_msg_data,
8176 p_data => l_data,
8177 p_msg_index_out => l_msg_index_out);
8178 x_msg_data := l_data;
8179 raise API_ERROR;
8180 end if;
8181
8182 l_ref_task_ver_id := l_outline_task_ref(l_prev_outline_level);
8183 l_peer_or_sub := 'SUB';
8184 else
8185 l_ref_task_ver_id := l_outline_task_ref(l_outline_level);
8186 l_peer_or_sub := 'PEER';
8187 end if;
8188 else
8189 -- First task to insert
8190 if l_outline_level not in (0, 1) then
8191 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8192 ,p_msg_name => 'PA_PS_OUTLINE_LEVEL_INVALID');
8193
8194 x_msg_count := 1;
8195 pa_interface_utils_pub.get_messages
8196 (p_encoded => FND_API.G_TRUE,
8197 p_msg_index => 1,
8198 p_msg_count => l_msg_count,
8199 p_msg_data => l_msg_data,
8200 p_data => l_data,
8201 p_msg_index_out => l_msg_index_out);
8202 x_msg_data := l_data;
8203 raise API_ERROR;
8204 end if;
8205
8206 l_ref_task_ver_id := l_outline_task_ref(0);
8207 if l_outline_level = 0 then
8208 l_peer_or_sub := 'PEER';
8209 else
8210 l_peer_or_sub := 'SUB';
8211 end if;
8212 end if;
8213
8214 --my_error_msg( 'before PA_TASK_PUB1.CREATE_TASK' );
8215
8216 OPEN cur_ref_proj_elem_id( l_ref_task_ver_id );
8217 FETCH cur_ref_proj_elem_id INTO l_ref_proj_eleme_id; --For ref task id
8218 CLOSE cur_ref_proj_elem_id;
8219
8220 --my_error_msg( 'Ref Task Id in CREATE_TASKS'||l_ref_proj_eleme_id );
8221
8222 --hsiu added for task status
8223 --check if ok to create subtask
8224
8225 /* --commented; validation done in private api
8226
8227 IF (l_peer_or_sub = 'PEER') THEN
8228 OPEN get_parent_version_id(l_ref_task_ver_id);
8229 FETCH get_parent_version_id into l_parent_ver_id;
8230 CLOSE get_parent_version_id;
8231 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
8232 p_parent_task_ver_id => l_parent_ver_id
8233 ,x_return_status => l_return_status
8234 ,x_error_message_code => l_error_msg_code
8235 );
8236
8237 IF (l_return_status <> 'Y') THEN
8238 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8239 p_msg_name => l_error_msg_code);
8240 raise API_ERROR;
8241 END IF;
8242 ELSE
8243 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
8244 p_parent_task_ver_id => l_ref_task_ver_id
8245 ,x_return_status => l_return_status
8246 ,x_error_message_code => l_error_msg_code
8247 );
8248
8249 IF (l_return_status <> 'Y') THEN
8250 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8251 p_msg_name => l_error_msg_code);
8252 raise API_ERROR;
8253 END IF;
8254 END IF;
8255 */
8256 --end task status changes
8257
8258 -- CREATE_TASK
8259 l_task_id := NULL;
8260
8261 --3035902: process update flag changes
8262 IF (l_wp_process_flag = 'N') THEN
8263 --may need to update process flag
8264 IF ((l_shared = 'N') AND
8265 (l_wp_type = 'Y')) THEN
8266 --split and workplan; only update if progressable task added
8267 l_wp_process_flag := 'Y';
8268 ELSIF ((l_shared = 'N') AND
8269 (l_wp_type = 'N')) THEN
8270 --split and financial; update
8271 l_wp_process_flag := 'Y';
8272 ELSIF (l_shared = 'Y') THEN
8273 l_wp_process_flag := 'Y';
8274 END IF;
8275 END IF;
8276 --3035902: end process update flag changes
8277
8278 PA_TASK_PUB1.CREATE_TASK
8279 ( p_validate_only => FND_API.G_FALSE
8280 ,p_object_type => 'PA_TASKS'
8281 ,p_project_id => p_project_id
8282 ,p_ref_task_id => l_ref_proj_eleme_id
8283 ,p_peer_or_sub => l_peer_or_sub
8284 ,p_structure_id => p_structure_id
8285 ,p_structure_version_id => p_structure_version_id
8286 ,p_task_number => p_task_number(i)
8287 ,p_task_name => p_task_name(i)
8288 ,p_task_manager_id => p_task_manager_id(i)
8289 ,p_task_manager_name => p_task_manager_name(i)
8290 ,p_scheduled_start_date => p_scheduled_start_date(i)--Changed in BUG fix 3927343
8291 ,p_scheduled_finish_date => p_scheduled_finish_date(i)--Changed in BUG fix 3927343
8292 ,p_TYPE_ID => p_TYPE_ID (i)
8293 ,p_structure_type => p_structure_type
8294 ,x_task_id => l_task_id
8295 ,x_return_status => l_return_status
8296 ,x_msg_count => l_msg_count
8297 ,x_msg_data => l_msg_data);
8298
8299 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8300 x_msg_count := FND_MSG_PUB.count_msg;
8301 if x_msg_count = 1 then
8302 pa_interface_utils_pub.get_messages
8303 (p_encoded => FND_API.G_TRUE,
8304 p_msg_index => 1,
8305 p_msg_count => l_msg_count,
8306 p_msg_data => l_msg_data,
8307 p_data => l_data,
8308 p_msg_index_out => l_msg_index_out);
8309 x_msg_data := l_data;
8310 end if;
8311 raise API_ERROR;
8312 end if;
8313
8314 --my_error_msg( 'before PA_TASK_PUB1.CREATE_TASK_VERSION' );
8315
8316 /* commented out because flag value is set before create task
8317 --bug 3010538
8318 IF (l_shared = 'N') AND
8319 (l_wp_type = 'Y') AND
8320 (l_weighting_basis_Code = 'MANUAL') THEN
8321 --do not set the flag to 'Y'
8322 NULL;
8323 ELSE
8324 */
8325 --3035902: process update flag changes
8326 --set the flag if flag is Y; otherwise keep current value
8327 --Bug No 3450684 SMukka Commented if condition
8328 --IF l_wp_process_flag = 'Y' THEN
8329 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
8330 (
8331 p_calling_context => 'SELF_SERVICE'
8332 ,p_project_id => p_project_id
8333 ,p_structure_version_id => p_structure_version_id
8334 ,p_update_wbs_flag => l_wp_process_flag
8335 ,x_return_status => l_return_status
8336 ,x_msg_count => l_msg_count
8337 ,x_msg_data => l_msg_data);
8338
8339 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8340 x_msg_count := FND_MSG_PUB.count_msg;
8341 if x_msg_count = 1 then
8342 pa_interface_utils_pub.get_messages
8343 (p_encoded => FND_API.G_TRUE,
8344 p_msg_index => 1,
8345 p_msg_count => l_msg_count,
8346 p_msg_data => l_msg_data,
8347 p_data => l_data,
8348 p_msg_index_out => l_msg_index_out);
8349 x_msg_data := l_data;
8350 end if;
8351 raise FND_API.G_EXC_ERROR;
8352 end if;
8353 --END IF;
8354 --3035902: end process update flag changes
8355
8356 --ideally the following calls should have been cached. but due to time constraints
8357 --we need to write the code this way in multiple places.
8358 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
8359 THEN
8360 IF ( l_versioned = 'N' ) OR
8361 ( l_shared = 'N' ) OR --This wont happen bcoz for adding tasks to a financial structure we dont use this api
8362 ( l_versioned = 'Y' AND l_shared = 'Y' AND l_published_ver_exists = 'N' )THEN
8363 --create_tasks
8364 pa_fp_refresh_elements_pub.set_process_flag_proj(
8365 p_project_id => p_project_id
8366 ,p_request_id => null
8367 ,p_process_code => null
8368 ,p_refresh_required_flag => 'Y'
8369 ,x_return_status => l_return_status
8370 ,x_msg_count => l_msg_count
8371 ,x_msg_data => l_msg_data );
8372
8373 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8374 x_msg_count := FND_MSG_PUB.count_msg;
8375 if x_msg_count = 1 then
8376 pa_interface_utils_pub.get_messages
8377 (p_encoded => FND_API.G_TRUE,
8378 p_msg_index => 1,
8379 p_msg_count => l_msg_count,
8380 p_msg_data => l_msg_data,
8381 p_data => l_data,
8382 p_msg_index_out => l_msg_index_out);
8383 x_msg_data := l_data;
8384 end if;
8385 raise FND_API.G_EXC_ERROR;
8386 end if;
8387 END IF;
8388 END IF;
8389
8390
8391 --End bug 3010538
8392
8393 --hsiu: task version status changes
8394 IF (l_template_flag = 'N') THEN
8395 --check if structure is shared
8396 -- if shared, check if versioned
8397 -- 'WORKING' if versioned; 'PUBLISHED' if not
8398 -- if split, check if 'FINANCIAL'
8399 -- 'PUBLISHED' if financial
8400 -- check if versioned
8401 -- 'WORKING' if versioend; 'PUBLISHED' if not
8402 -- IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id)) THEN
8403 -- IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN --Replaced these line with the following for performance.
8404 --Code added for bug 3010538 also does the same check.
8405 IF ('Y' = l_shared) THEN
8406 IF ('Y' = l_versioned) THEN
8407
8408 l_task_unpub_ver_status_code := 'WORKING';
8409 ELSE
8410 l_task_unpub_ver_status_code := 'PUBLISHED';
8411 END IF;
8412 ELSE --split
8413 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(p_structure_id, 'FINANCIAL') AND
8414 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(p_structure_id, 'WORKPLAN')) THEN
8415 l_task_unpub_ver_status_code := 'PUBLISHED';
8416 ELSE --workplan only
8417 --IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN --Replaced these line with the following for performance. Code added for bug 3010538 also does the same check.
8418 IF ('Y' = l_versioned) THEN
8419 l_task_unpub_ver_status_code := 'WORKING';
8420 ELSE
8421 l_task_unpub_ver_status_code := 'PUBLISHED';
8422 END IF;
8423 END IF;
8424 END IF;
8425 ELSE
8426 l_task_unpub_ver_status_code := 'WORKING';
8427 END IF;
8428 --end task version status changes
8429
8430
8431 --CREATE_TASK_VERSION
8432 PA_TASK_PUB1.CREATE_TASK_VERSION
8433 ( p_validate_only => FND_API.G_FALSE
8434 ,p_ref_task_version_id => l_ref_task_ver_id
8435 ,p_peer_or_sub => l_peer_or_sub
8436 ,p_task_id => l_task_id
8437 ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
8438 ,p_financial_task_flag => l_Financial_Flag
8439 ,x_task_version_id => l_task_version_id
8440 ,x_return_status => l_return_status
8441 ,x_msg_count => l_msg_count
8442 ,x_msg_data => l_msg_data);
8443
8444 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8445 x_msg_count := FND_MSG_PUB.count_msg;
8446 if x_msg_count = 1 then
8447 pa_interface_utils_pub.get_messages
8448 (p_encoded => FND_API.G_TRUE,
8449 p_msg_index => 1,
8450 p_msg_count => l_msg_count,
8451 p_msg_data => l_msg_data,
8452 p_data => l_data,
8453 p_msg_index_out => l_msg_index_out);
8454 x_msg_data := l_data;
8455 end if;
8456 raise API_ERROR;
8457 end if;
8458
8459
8460 --Hsiu added
8461 --inherit task type
8462 PA_TASK_PVT1.Inherit_task_type_attr(
8463 p_task_id => l_task_id
8464 ,p_task_version_id => l_task_version_id
8465 ,x_return_status => l_return_status
8466 ,x_msg_count => l_msg_count
8467 ,x_msg_data => l_msg_data
8468 );
8469
8470 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8471 x_msg_count := FND_MSG_PUB.count_msg;
8472 if x_msg_count = 1 then
8473 pa_interface_utils_pub.get_messages
8474 (p_encoded => FND_API.G_TRUE,
8475 p_msg_index => 1,
8476 p_msg_count => l_msg_count,
8477 p_msg_data => l_msg_data,
8478 p_data => l_data,
8479 p_msg_index_out => l_msg_index_out);
8480 x_msg_data := l_data;
8481 end if;
8482 raise API_ERROR;
8483 end if;
8484 --end inherit task type
8485
8486 --my_error_msg( 'before PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION' );
8487 --Changes for 8566495 anuragag
8488 --We will create record in pa_proj_elem_ver_schedules now for tasks created via change management flow.
8489 -- PA_TASK_PVT1.G_CHG_DOC_CNTXT will be equal to 1 only when the task is created via CD flow.
8490 if (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' OR PA_TASK_PVT1.G_CHG_DOC_CNTXT = 1) then
8491 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
8492 ( p_validate_only => FND_API.G_FALSE
8493 ,p_element_version_id => l_task_version_id
8494 ,p_scheduled_start_date => nvl(p_scheduled_start_date(i), sysdate)
8495 ,p_scheduled_end_date => nvl(p_scheduled_finish_date(i),nvl(p_scheduled_start_date(i), sysdate))
8496 ,p_planned_effort => p_planned_effort(i)
8497 ,p_Planned_Equip_Effort => p_planned_equip_effort(i)
8498 ,x_pev_schedule_id => l_pev_schedule_id
8499 ,x_return_status => l_return_status
8500 ,x_msg_count => l_msg_count
8501 ,x_msg_data => l_msg_data );
8502
8503 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8504 x_msg_count := FND_MSG_PUB.count_msg;
8505 if x_msg_count = 1 then
8506 pa_interface_utils_pub.get_messages
8507 (p_encoded => FND_API.G_TRUE,
8508 p_msg_index => 1,
8509 p_msg_count => l_msg_count,
8510 p_msg_data => l_msg_data,
8511 p_data => l_data,
8512 p_msg_index_out => l_msg_index_out);
8513 x_msg_data := l_data;
8514 end if;
8515 raise API_ERROR;
8516 end if;
8517
8518 -- Hsiu added for date rollup; workplan only
8519 l_tasks_ver_ids.extend;
8520 l_tasks_ver_ids(l_tasks_ver_ids.count) := l_task_version_id;
8521 --anuragag bug 8566495 - we will validate the task start and end date
8522 PA_TASKS_MAINT_UTILS.check_start_date(
8523 p_project_id => p_project_id,
8524 p_parent_task_id => NULL,
8525 p_task_id => l_task_id,
8526 p_start_date => p_scheduled_start_date(i),
8527 x_return_status =>l_return_status,
8528 x_msg_count =>l_msg_count,
8529 x_msg_data =>l_msg_data);
8530
8531
8532 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8533 l_msg_count := 1;
8534 x_msg_data := l_msg_data;
8535 if l_msg_count = 1 then
8536 pa_interface_utils_pub.get_messages
8537 (p_encoded => FND_API.G_TRUE,
8538 p_msg_index => 1,
8539 p_msg_count => l_msg_count,
8540 p_msg_data => l_msg_data,
8541 p_data => l_data,
8542 p_msg_index_out => l_msg_index_out);
8543 --x_msg_data := l_data;
8544 x_msg_count := 1;
8545 FND_MESSAGE.SET_NAME('PA',x_msg_data);
8546 --FND_MESSAGE.GET_ENCODED := x_msg_data;
8547 FND_MSG_PUB.ADD;
8548 end if;
8549
8550
8551 raise API_ERROR;
8552 END IF;
8553
8554 PA_TASKS_MAINT_UTILS.check_end_date(
8555 p_project_id => p_project_id,
8556 p_parent_task_id => NULL,
8557 p_task_id => l_task_id,
8558 p_end_date => p_scheduled_finish_date(i),
8559 x_return_status =>l_return_status,
8560 x_msg_count =>l_msg_count,
8561 x_msg_data =>l_msg_data);
8562
8563
8564 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8565 l_msg_count := 1;
8566 x_msg_data := l_msg_data;
8567 if l_msg_count = 1 then
8568 pa_interface_utils_pub.get_messages
8569 (p_encoded => FND_API.G_TRUE,
8570 p_msg_index => 1,
8571 p_msg_count => l_msg_count,
8572 p_msg_data => l_msg_data,
8573 p_data => l_data,
8574 p_msg_index_out => l_msg_index_out);
8575 --x_msg_data := l_data;
8576 x_msg_count:=1;
8577 FND_MESSAGE.SET_NAME('PA',x_msg_data);
8578 --FND_MESSAGE.GET_ENCODED := x_msg_data;
8579 FND_MSG_PUB.ADD;
8580 end if;
8581 raise API_ERROR;
8582 END IF;
8583
8584 --end anuragag changes for 8566495
8585
8586 end if;
8587
8588
8589 -- anlee task weighting
8590 if l_outline_level = 1 then
8591 l_top_sub_count := l_top_sub_count + 1;
8592 end if;
8593 -- anlee End of changes
8594
8595 l_outline_task_ref(l_outline_level) := l_task_version_id;
8596 l_prev_outline_level := l_outline_level;
8597 end LOOP;
8598
8599
8600 --bug 3301192 call the budgets apis
8601 if PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then /* this api called should have been cached but we dont have time now to do this. */
8602 PA_TASK_PUB1.call_add_planning_txns(
8603 p_tasks_ver_ids => l_tasks_ver_ids,
8604 p_planned_effort => p_planned_effort,
8605 p_project_id => p_project_id,
8606 p_structure_version_id => p_structure_version_id,
8607 p_start_date => p_scheduled_start_date,
8608 p_end_date => p_scheduled_finish_date,
8609 x_return_status => l_return_status,
8610 x_msg_count => l_msg_count,
8611 x_msg_data => l_msg_data
8612 );
8613
8614 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8615 x_msg_count := FND_MSG_PUB.count_msg;
8616 if x_msg_count = 1 then
8617 pa_interface_utils_pub.get_messages
8618 (p_encoded => FND_API.G_TRUE,
8619 p_msg_index => 1,
8620 p_msg_count => l_msg_count,
8621 p_msg_data => l_msg_data,
8622 p_data => l_data,
8623 p_msg_index_out => l_msg_index_out);
8624 x_msg_data := l_data;
8625 end if;
8626 raise API_ERROR;
8627 end if;
8628
8629 --now call call delete planning for reference task version id.
8630 IF (p_ref_task_version_id <> p_structure_version_id) AND
8631 (p_outline_level(1) > 0)
8632 THEN
8633 l_task_ver_ids.extend(1); /* Venky */
8634 l_task_ver_ids(1) := p_ref_task_version_id;
8635 /*Smukka Bug No. 3474141 Date 03/01/2004 */
8636 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
8637 DECLARE
8638 --p1 bug 3888432
8639 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8640 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
8641 SELECT resource_assignment_id
8642 FROM pa_resource_assignments
8643 WHERE wbs_element_Version_id = c_task_ver_id
8644 AND ta_display_flag = 'N';
8645 l_assign_id NUMBER := NULL;
8646 BEGIN
8647 OPEN get_assignment_id(p_ref_task_version_id);
8648 FETCH get_assignment_id into l_assign_id;
8649 CLOSE get_assignment_id;
8650
8651 IF (l_assign_id IS NOT NULL) THEN
8652 l_assign_ids.extend(1);
8653 l_assign_ids(1) := l_assign_id;
8654 pa_fp_planning_transaction_pub.delete_planning_transactions
8655 (
8656 p_context => 'WORKPLAN'
8657 ,p_task_or_res => 'ASSIGNMENT'
8658 --,p_element_version_id_tbl => l_task_ver_ids
8659 ,p_resource_assignment_tbl => l_assign_ids
8660 ,x_return_status => l_return_status
8661 ,x_msg_count => l_msg_count
8662 ,x_msg_data => l_msg_data
8663 );
8664 END IF;
8665 EXCEPTION
8666 WHEN OTHERS THEN
8667 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_STRUCTURE_TASK_PUB',
8668 p_procedure_name => 'CREATE_TASKS',
8669 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
8670 RAISE API_ERROR;
8671 END;
8672 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8673 x_msg_count := FND_MSG_PUB.count_msg;
8674 if x_msg_count = 1 then
8675 pa_interface_utils_pub.get_messages
8676 (p_encoded => FND_API.G_TRUE,
8677 p_msg_index => 1,
8678 p_msg_count => l_msg_count,
8679 p_msg_data => l_msg_data,
8680 p_data => l_data,
8681 p_msg_index_out => l_msg_index_out);
8682 x_msg_data := l_data;
8683 end if;
8684 raise API_ERROR;
8685 end if;
8686 END IF; --<<p_ref_task_version_id<>p_structure_version_id)
8687
8688 end if;
8689
8690 --bug 3301192 call the budgets apis
8691
8692 --Hsiu added for date rollup; workplan only
8693
8694 if PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
8695 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
8696 p_commit => FND_API.G_FALSE,
8697 p_element_versions => l_tasks_ver_ids,
8698 x_return_status => l_return_status,
8699 x_msg_count => l_msg_count,
8700 x_msg_data => l_msg_data);
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 API_ERROR;
8715 end if;
8716
8717 -- IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id) = 'Y') AND
8718 -- (PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id) = 'N') THEN --Replaced these line with the following for performance. Code added for bug 3010538 also does the same check.
8719 IF (l_shared = 'Y') AND
8720 (l_versioned = 'N')
8721 THEN
8722
8723 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
8724 p_structure_version_id => p_structure_version_id
8725 ,x_return_status => l_return_status
8726 ,x_msg_count => l_msg_count
8727 ,x_msg_data => l_msg_data
8728 );
8729
8730 IF (l_return_status <> 'S') THEN
8731 x_msg_count := l_msg_count;
8732 x_msg_data := l_msg_data;
8733 RAISE API_ERROR;
8734 END IF;
8735 END IF;
8736
8737 -- anlee task weighting
8738 PA_TASK_PUB1.Calc_Task_Weights(
8739 p_element_versions => l_tasks_ver_ids
8740 ,p_outline_level => p_outline_level
8741 ,p_top_sub_count => l_top_sub_count
8742 ,x_return_status => l_return_status
8743 ,x_msg_count => l_msg_count
8744 ,x_msg_data => l_msg_data );
8745
8746 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8747 x_msg_count := FND_MSG_PUB.count_msg;
8748 if x_msg_count = 1 then
8749 pa_interface_utils_pub.get_messages
8750 (p_encoded => FND_API.G_TRUE,
8751 p_msg_index => 1,
8752 p_msg_count => l_msg_count,
8753 p_msg_data => l_msg_data,
8754 p_data => l_data,
8755 p_msg_index_out => l_msg_index_out);
8756 x_msg_data := l_data;
8757 end if;
8758 raise API_ERROR;
8759 end if;
8760 -- anlee end of changes
8761
8762 END IF;
8763
8764 x_return_status := FND_API.G_RET_STS_SUCCESS;
8765 EXCEPTION
8766 WHEN API_ERROR THEN
8767 rollback to create_tasks;
8768 x_return_status := FND_API.G_RET_STS_ERROR;
8769 WHEN OTHERS THEN
8770 rollback to create_tasks;
8771 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8772 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_STRUCTURE_TASK_PUB',
8773 p_procedure_name => 'CREATE_TASKS',
8774 p_error_text => SUBSTRB(SQLERRM,1,240));
8775 raise;
8776 END CREATE_TASKS;
8777
8778
8779 -- anlee task weighting
8780 -- API name : Calc_Task_Weights
8781 -- Type : Utility
8782 -- Pre-reqs : None
8783 -- Return Value : N/A
8784 -- Prameters
8785 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
8786 -- p_element_versions IN PA_NUM_1000_NUM
8787 -- p_outline_level IN PA_NUM_1000_NUM
8788 -- p_top_peer_count IN NUMBER
8789 -- p_top_sub_count IN NUMBER
8790 -- x_msg_count OUT NUMBER
8791 -- x_msg_data OUT VARCHAR2
8792 -- x_return_status OUT VARCHAR2
8793 --
8794 -- History
8795 --
8796 -- 17-SEP-02 Andrew Lee -Created
8797 --
8798 --
8799
8800 PROCEDURE CALC_TASK_WEIGHTS
8801 ( p_element_versions IN PA_NUM_1000_NUM
8802 ,p_outline_level IN PA_NUM_1000_NUM
8803 ,p_top_sub_count IN NUMBER
8804 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8805 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8806 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
8807 IS
8808 CURSOR get_child_count(c_parent_element_version_id NUMBER)
8809 IS
8810 SELECT count(object_id_to1)
8811 FROM PA_OBJECT_RELATIONSHIPS
8812 WHERE object_id_from1 = c_parent_element_version_id
8813 AND object_type_to = 'PA_TASKS'
8814 AND relationship_type = 'S'
8815 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8816
8817 CURSOR get_summed_duration(c_parent_element_version_id NUMBER)
8818 IS
8819 SELECT sum(ppevs.duration)
8820 FROM pa_proj_elem_ver_schedule ppevs,
8821 pa_object_relationships por,
8822 pa_proj_element_versions ppev,
8823 pa_proj_elements ppe,
8824 pa_task_types ptt
8825 WHERE por.object_id_from1 = c_parent_element_version_id
8826 AND por.object_type_to = 'PA_TASKS'
8827 AND por.relationship_type = 'S'
8828 AND por.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8829 AND por.object_id_to1 = ppevs.element_version_id
8830 AND por.object_id_to1 = ppev.element_version_id
8831 AND ppev.proj_element_id = ppe.proj_element_id
8832 AND ppe.project_id = ppevs.project_id /* for bug 2822963 */
8833 AND ppe.TYPE_ID = ptt.task_type_id
8834 AND ptt.object_type = 'PA_TASKS' /* for bug 3279978 FP M Enhancement */
8835 AND ptt.prog_entry_enable_flag = 'Y';
8836
8837 CURSOR get_task_duration(c_element_version_id NUMBER,c_project_id NUMBER)
8838 IS
8839 SELECT duration
8840 FROM pa_proj_elem_ver_schedule
8841 WHERE element_version_id = c_element_version_id
8842 AND project_id = c_project_id; /* for bug 2822963 */
8843
8844 CURSOR get_parent(c_element_version_id NUMBER)
8845 IS
8846 SELECT object_id_from1
8847 FROM pa_object_relationships
8848 WHERE object_id_to1 = c_element_version_id
8849 AND object_type_to = 'PA_TASKS'
8850 AND relationship_type = 'S'
8851 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8852
8853 CURSOR check_progress_allowed(c_element_version_id NUMBER)
8854 IS
8855 SELECT ptt.prog_entry_enable_flag, ppe.project_id /* for bug 2822963 */
8856 FROM pa_task_types ptt,
8857 pa_proj_element_versions ppev,
8858 pa_proj_elements ppe
8859 WHERE ppev.element_version_id = c_element_version_id
8860 AND ppev.proj_element_id = ppe.proj_element_id
8861 AND ptt.object_type = 'PA_TASKS' /* for bug 3279978 FP M Enhancement */
8862 AND ppe.TYPE_ID = ptt.task_type_id;
8863
8864 CURSOR get_existing_weights(c_parent_element_version_id NUMBER)
8865 IS
8866 SELECT sum(weighting_percentage)
8867 FROM PA_OBJECT_RELATIONSHIPS
8868 WHERE object_id_from1 = c_parent_element_version_id
8869 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8870 AND object_type_to = 'PA_TASKS'
8871 AND relationship_type = 'S';
8872
8873 -- Bug 3098574. This cursor gives the number of progressible tasks
8874 -- under a parent. This count will be used to pro-rate the task weightage
8875 -- on all the child tasks equally.
8876 CURSOR get_progressible_child_count(c_parent_element_version_id NUMBER)
8877 IS
8878 SELECT count(rel.object_id_to1)
8879 FROM PA_OBJECT_RELATIONSHIPS rel,pa_proj_element_versions ver,pa_proj_elements ele,pa_task_types tt
8880 WHERE rel.object_id_from1 = c_parent_element_version_id
8881 AND rel.object_type_to = 'PA_TASKS'
8882 AND rel.relationship_type = 'S'
8883 AND rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8884 AND rel.object_id_to1 = ver.element_version_id
8885 AND ver.proj_element_id = ele.proj_element_id
8886 AND ele.type_id = tt.task_type_id
8887 AND tt.object_type = 'PA_TASKS' /* for bug 3279978 FP M Enhancement */
8888 AND tt.prog_entry_enable_flag = 'Y';
8889
8890 l_progressible_child_count NUMBER; -- Bug 3098574.
8891
8892 -- Bug 3098574. This table will store the number of progressible tasks
8893 -- under a parent. This is used in order to cache the data.
8894 TYPE prog_child_count IS TABLE OF NUMBER
8895 INDEX BY BINARY_INTEGER;
8896 l_prog_child_count prog_child_count;
8897
8898 TYPE durations IS TABLE OF NUMBER
8899 INDEX BY BINARY_INTEGER;
8900
8901 -- This table stores the summed duration for all of the child tasks of a parent task/structure. The
8902 -- index is the parent element version id.
8903 l_durations durations;
8904 l_is_sub_new VARCHAR2(1);
8905 l_outline_level NUMBER;
8906 l_parent_element_version_id NUMBER;
8907 l_element_version_id NUMBER;
8908 l_total_sub_count NUMBER;
8909 l_total_duration NUMBER;
8910 l_progress_allowed VARCHAR2(1);
8911 l_task_duration NUMBER;
8912 -- l_task_weight PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
8913 l_task_weight NUMBER;
8914 l_existing_weight NUMBER;
8915 l_remaining_weight NUMBER;
8916 l_project_id NUMBER;
8917
8918 --Start Changes for bug 3083950
8919 l_debug_mode VARCHAR2(1);
8920 l_module_name VARCHAR2(100) := 'pa.plsql.PA_TASK_PUB1';
8921 l_temp_number NUMBER(17,2);
8922 l_diff_number NUMBER;
8923 l_sum_temp_number NUMBER(17,4);
8924 l_constant_temp_number NUMBER(17,4) := 0.0100;
8925
8926 l_debug_level2 CONSTANT NUMBER := 2;
8927 l_debug_level3 CONSTANT NUMBER := 3;
8928 l_debug_level4 CONSTANT NUMBER := 4;
8929 l_debug_level5 CONSTANT NUMBER := 5;
8930 l_debug_level6 CONSTANT NUMBER := 6;
8931
8932
8933 TYPE task_weightage_tbl IS TABLE OF NUMBER
8934 INDEX BY BINARY_INTEGER;
8935
8936
8937 l_task_weightage_tbl task_weightage_tbl;
8938 --End Changes for bug 3083950
8939
8940 BEGIN
8941
8942 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8943
8944 IF l_debug_mode = 'Y' THEN
8945 pa_debug.g_err_stage:= 'Entering CALC_TASK_WEIGHTS';
8946 pa_debug.write(l_module_name,pa_debug.g_err_stage,
8947 l_debug_level2);
8948
8949
8950 pa_debug.set_curr_function( p_function => 'PA_TASK_PUB1.CALC_TASK_WEIGHTS',
8951 p_debug_mode => l_debug_mode );
8952
8953 END IF;
8954
8955
8956 l_is_sub_new := NULL;
8957
8958 -- Loop through all of the newly created tasks from create_tasks
8959 for i in 1..1000 LOOP
8960 if p_outline_level(i) is null then
8961 exit;
8962 end if;
8963
8964 OPEN get_parent(p_element_versions(i));
8965 FETCH get_parent INTO l_parent_element_version_id;
8966 CLOSE get_parent;
8967
8968 l_element_version_id := p_element_versions(i);
8969 l_outline_level := p_outline_level(i);
8970
8971 if l_outline_level = 0 then
8972 -- Automatically update task weighting as zero
8973 UPDATE PA_OBJECT_RELATIONSHIPS
8974 SET weighting_percentage = 0
8975 WHERE object_id_from1 = l_parent_element_version_id
8976 AND object_id_to1 = l_element_version_id
8977 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8978 AND object_type_to = 'PA_TASKS'
8979 AND relationship_type = 'S';
8980 elsif l_outline_level = 1 then
8981 if l_is_sub_new is NULL then
8982 -- Determine whether there we any existing tasks for this level before
8983 -- create_tasks was called
8984 OPEN get_child_count(l_parent_element_version_id);
8985 FETCH get_child_count INTO l_total_sub_count;
8986 CLOSE get_child_count;
8987
8988 if l_total_sub_count > p_top_sub_count then
8989 l_is_sub_new := 'N';
8990 else
8991 l_is_sub_new := 'Y';
8992 end if;
8993 end if;
8994
8995 if l_is_sub_new = 'N' then
8996 -- There were existing tasks at this level, populate
8997 -- task weights of new tasks to 0
8998 UPDATE PA_OBJECT_RELATIONSHIPS
8999 SET weighting_percentage = 0
9000 WHERE object_id_from1 = l_parent_element_version_id
9001 AND object_id_to1 = l_element_version_id
9002 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9003 AND object_type_to = 'PA_TASKS'
9004 AND relationship_type = 'S';
9005 else
9006 -- There were no existing tasks at this level, populate
9007 -- the correct task weight
9008 OPEN check_progress_allowed(l_element_version_id);
9009 FETCH check_progress_allowed INTO l_progress_allowed,l_project_id; /* for bug 2822963 */
9010 CLOSE check_progress_allowed;
9011
9012 if l_progress_allowed = 'N' then
9013 -- Populate task weight as zero
9014 UPDATE PA_OBJECT_RELATIONSHIPS
9015 SET weighting_percentage = 0
9016 WHERE object_id_from1 = l_parent_element_version_id
9017 AND object_id_to1 = l_element_version_id
9018 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9019 AND object_type_to = 'PA_TASKS'
9020 AND relationship_type = 'S';
9021 else
9022
9023 if l_durations.exists(l_parent_element_version_id) then
9024 NULL;
9025 else
9026 OPEN get_summed_duration(l_parent_element_version_id);
9027 FETCH get_summed_duration INTO l_total_duration;
9028 CLOSE get_summed_duration;
9029
9030 l_durations(l_parent_element_version_id) := l_total_duration;
9031 end if;
9032
9033 OPEN get_task_duration(l_element_version_id,l_project_id); /* for bug 2822963 */
9034 FETCH get_task_duration INTO l_task_duration;
9035 CLOSE get_task_duration;
9036
9037 -- Bug 3098574. When the summed duration of the child tasks
9038 -- of a parent is 0, get the number of child tasks and calculate
9039 -- the weighatage as 1 / number of tasks * 100.
9040 /* IF (l_durations(l_parent_element_version_id) IS NULL) OR
9041 (l_durations(l_parent_element_version_id) = 0) THEN
9042 l_task_weight := 0;
9043 ELSE*/
9044
9045 IF (l_durations(l_parent_element_version_id) IS NULL) OR
9046 (l_durations(l_parent_element_version_id) = 0) THEN
9047 IF l_prog_child_count.exists(l_parent_element_version_id) THEN
9048 l_progressible_child_count := l_prog_child_count(l_parent_element_version_id);
9049 ELSE
9050 OPEN get_progressible_child_count(l_parent_element_version_id);
9051 FETCH get_progressible_child_count into l_progressible_child_count;
9052 CLOSE get_progressible_child_count;
9053 l_prog_child_count(l_parent_element_version_id) := l_progressible_child_count;
9054 END IF;
9055
9056 IF l_progressible_child_count <> 0 THEN
9057 l_task_weight := ( 1 / l_progressible_child_count ) * 100;
9058 ELSE -- This should never occur.
9059 l_task_weight := 0;
9060 END IF;
9061 ELSE
9062 l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
9063 END IF;
9064
9065 OPEN get_existing_weights(l_parent_element_version_id);
9066 FETCH get_existing_weights INTO l_existing_weight;
9067 CLOSE get_existing_weights;
9068
9069 l_remaining_weight := 100 - l_existing_weight;
9070 -- l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100; Bug 3098574.
9071
9072 --Start Changes for bug 3083950
9073 -- The Bug is that the final sum of wieghting percentage of all childs of a task does not summ to 100
9074 -- Is caused as while dtoring in the database the weighting % is rounding upto 2nd decimal
9075 -- Strategy here is to store the difference of weighting % we lose or gain while truncating to 2nd decimal
9076 -- against the parent task id in local table for all its child task and as the sum of difference goes above -0.01
9077 -- or below -0.01 just increase or decrease the task weightage of the child task being processed by 0.01
9078 -- SO in this way we will cover the weighting % which we have lost by rounding to 2nd decimal as the loss or gain reaches 0.1
9079 IF l_debug_mode = 'Y' THEN
9080 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
9081 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9082 END IF;
9083
9084 l_temp_number := l_task_weight;
9085
9086 IF l_debug_mode = 'Y' THEN
9087 pa_debug.g_err_stage:= 'Value of l_temp_number' || l_temp_number;
9088 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9089 END IF;
9090
9091 l_diff_number := l_task_weight - l_temp_number;
9092
9093 IF l_debug_mode = 'Y' THEN
9094 pa_debug.g_err_stage:= 'Value of l_diff_number' || l_diff_number;
9095 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9096 END IF;
9097
9098 IF(l_diff_number <> 0) THEN
9099
9100 IF l_debug_mode = 'Y' THEN
9101 pa_debug.g_err_stage:= 'Value of l_parent_element_version_id' || l_parent_element_version_id;
9102 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9103 END IF;
9104
9105 IF l_task_weightage_tbl.exists(l_parent_element_version_id) THEN
9106 l_sum_temp_number := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
9107
9108 IF l_debug_mode = 'Y' THEN
9109 pa_debug.g_err_stage:= 'Value of l_sum_temp_number' || l_sum_temp_number;
9110 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9111
9112 pa_debug.g_err_stage:= 'Value of l_constant_temp_number' || l_constant_temp_number;
9113 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9114 END IF;
9115 IF( l_sum_temp_number >= l_constant_temp_number ) THEN
9116 l_task_weight := l_task_weight + 0.01;
9117 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number - 0.01;
9118 IF l_debug_mode = 'Y' THEN
9119 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
9120 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9121 END IF;
9122 ELSIF ( l_sum_temp_number <= -l_constant_temp_number ) THEN
9123 l_task_weight := l_task_weight - 0.01;
9124 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number + 0.01;
9125 IF l_debug_mode = 'Y' THEN
9126 pa_debug.g_err_stage:= 'In else IF Value of l_task_weight' || l_task_weight;
9127 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9128 END IF;
9129 ELSE
9130 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
9131 IF l_debug_mode = 'Y' THEN
9132 pa_debug.g_err_stage:= 'in else Value of l_task_weight' || l_task_weight;
9133 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9134 END IF;
9135 END IF;
9136 ELSE
9137 l_task_weightage_tbl(l_parent_element_version_id) := l_diff_number;
9138 END IF;
9139
9140 IF l_debug_mode = 'Y' THEN
9141 pa_debug.g_err_stage:= 'Value of task_weightage_tbl' || l_task_weightage_tbl(l_parent_element_version_id);
9142 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9143 END IF;
9144
9145 END IF;
9146
9147 --End Changes for bug 3083950
9148
9149 if(abs(l_remaining_weight - l_task_weight) <= .05) then
9150 l_task_weight := l_remaining_weight;
9151 end if;
9152
9153 --END IF; Bug 3098574.
9154 UPDATE PA_OBJECT_RELATIONSHIPS
9155 SET weighting_percentage = l_task_weight
9156 WHERE object_id_from1 = l_parent_element_version_id
9157 AND object_id_to1 = l_element_version_id
9158 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9159 AND object_type_to = 'PA_TASKS'
9160 AND relationship_type = 'S';
9161 end if;
9162 end if;
9163 else
9164 -- In this case, outline level is > 1
9165 -- There will never be pre-existing tasks on these levels
9166 OPEN check_progress_allowed(l_element_version_id);
9167 FETCH check_progress_allowed INTO l_progress_allowed,l_project_id; /* for bug 2822963 */
9168 CLOSE check_progress_allowed;
9169
9170 if l_progress_allowed = 'N' then
9171 -- Populate task weight as zero
9172 UPDATE PA_OBJECT_RELATIONSHIPS
9173 SET weighting_percentage = 0
9174 WHERE object_id_from1 = l_parent_element_version_id
9175 AND object_id_to1 = l_element_version_id
9176 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9177 AND object_type_to = 'PA_TASKS'
9178 AND relationship_type = 'S';
9179 else
9180
9181 if l_durations.exists(l_parent_element_version_id) then
9182 NULL;
9183 else
9184 OPEN get_summed_duration(l_parent_element_version_id);
9185 FETCH get_summed_duration INTO l_total_duration;
9186 CLOSE get_summed_duration;
9187
9188 l_durations(l_parent_element_version_id) := l_total_duration;
9189 end if;
9190
9191 OPEN get_task_duration(l_element_version_id,l_project_id); /* for bug 2822963 */
9192 FETCH get_task_duration INTO l_task_duration;
9193 CLOSE get_task_duration;
9194
9195 -- Bug 3098574. When the summed duration of the child tasks
9196 -- of a parent is 0, get the number of child tasks and calculate
9197 -- the weighatage as 1 / number of tasks * 100.
9198 /*IF (l_durations(l_parent_element_version_id) IS NULL) OR
9199 (l_durations(l_parent_element_version_id) = 0) THEN
9200 l_task_weight := 0;
9201 ELSE*/
9202
9203 IF (l_durations(l_parent_element_version_id) IS NULL) OR
9204 (l_durations(l_parent_element_version_id) = 0) THEN
9205 IF l_prog_child_count.exists(l_parent_element_version_id) THEN
9206 l_progressible_child_count := l_prog_child_count(l_parent_element_version_id);
9207 ELSE
9208 OPEN get_progressible_child_count(l_parent_element_version_id);
9209 FETCH get_progressible_child_count into l_progressible_child_count;
9210 CLOSE get_progressible_child_count;
9211 l_prog_child_count(l_parent_element_version_id) := l_progressible_child_count;
9212 END IF;
9213 IF l_progressible_child_count <> 0 THEN
9214 l_task_weight := ( 1 / l_progressible_child_count ) * 100;
9215 ELSE -- This should never occur.
9216 l_task_weight := 0;
9217 END IF;
9218
9219 ELSE
9220 l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
9221 END IF;
9222
9223 OPEN get_existing_weights(l_parent_element_version_id);
9224 FETCH get_existing_weights INTO l_existing_weight;
9225 CLOSE get_existing_weights;
9226
9227 l_remaining_weight := 100 - l_existing_weight;
9228 --l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100; Bug 3098574.
9229
9230 --Start Changes for bug 3083950
9231 -- The Bug is that the final sum of wieghting percentage of all childs of a task does not summ to 100
9232 -- Is caused as while dtoring in the database the weighting % is rounding upto 2nd decimal
9233 -- Strategy here is to store the difference of weighting % we lose or gain while truncating to 2nd decimal
9234 -- against the parent task id in local table for all its child task and as the sum of difference goes above -0.01
9235 -- or below -0.01 just increase or decrease the task weightage of the child task being processed by 0.01
9236 -- SO in this way we will cover the weighting % which we have lost by rounding to 2nd decimal as the loss or gain reaches 0.1
9237
9238 IF l_debug_mode = 'Y' THEN
9239 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
9240 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9241 END IF;
9242
9243 l_temp_number := l_task_weight;
9244
9245 IF l_debug_mode = 'Y' THEN
9246 pa_debug.g_err_stage:= 'Value of l_temp_number' || l_temp_number;
9247 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9248 END IF;
9249
9250 l_diff_number := l_task_weight - l_temp_number;
9251
9252 IF l_debug_mode = 'Y' THEN
9253 pa_debug.g_err_stage:= 'Value of l_diff_number' || l_diff_number;
9254 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9255 END IF;
9256
9257 IF(l_diff_number <> 0) THEN
9258
9259 IF l_debug_mode = 'Y' THEN
9260 pa_debug.g_err_stage:= 'Value of l_parent_element_version_id' || l_parent_element_version_id;
9261 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9262 END IF;
9263
9264 IF l_task_weightage_tbl.exists(l_parent_element_version_id) THEN
9265
9266 l_sum_temp_number := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
9267
9268 IF l_debug_mode = 'Y' THEN
9269 pa_debug.g_err_stage:= 'Value of l_sum_temp_number' || l_sum_temp_number;
9270 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9271
9272 pa_debug.g_err_stage:= 'Value of l_constant_temp_number' || l_constant_temp_number;
9273 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9274 END IF;
9275
9276 IF( l_sum_temp_number >= l_constant_temp_number ) THEN
9277 l_task_weight := l_task_weight + 0.01;
9278 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number - 0.01;
9279 IF l_debug_mode = 'Y' THEN
9280 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
9281 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9282 END IF;
9283 ELSIF ( l_sum_temp_number <= -l_constant_temp_number ) THEN
9284 l_task_weight := l_task_weight - 0.01;
9285 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number + 0.01;
9286 IF l_debug_mode = 'Y' THEN
9287 pa_debug.g_err_stage:= 'In else IF Value of l_task_weight' || l_task_weight;
9288 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9289 END IF;
9290 ELSE
9291 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
9292 IF l_debug_mode = 'Y' THEN
9293 pa_debug.g_err_stage:= 'in else Value of l_task_weight' || l_task_weight;
9294 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9295 END IF;
9296 END IF;
9297 ELSE
9298 l_task_weightage_tbl(l_parent_element_version_id) := l_diff_number;
9299 END IF;
9300
9301 IF l_debug_mode = 'Y' THEN
9302 pa_debug.g_err_stage:= 'Value of task_weightage_tbl' || l_task_weightage_tbl(l_parent_element_version_id);
9303 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9304 END IF;
9305
9306 END IF;
9307 --End Changes for bug 3083950
9308
9309 if(abs(l_remaining_weight - l_task_weight) <= .05) then
9310 l_task_weight := l_remaining_weight;
9311 end if;
9312 --END IF; Bug 3098574.
9313 UPDATE PA_OBJECT_RELATIONSHIPS
9314 SET weighting_percentage = l_task_weight
9315 WHERE object_id_from1 = l_parent_element_version_id
9316 AND object_id_to1 = l_element_version_id
9317 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9318 AND object_type_to = 'PA_TASKS'
9319 AND relationship_type = 'S';
9320 end if;
9321 end if;
9322
9323 end LOOP;
9324
9325 IF l_debug_mode = 'Y' THEN
9326 pa_debug.reset_curr_function;
9327 END IF;
9328
9329 x_return_status := FND_API.G_RET_STS_SUCCESS;
9330 EXCEPTION
9331 WHEN OTHERS THEN
9332 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9333 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
9334 p_procedure_name => 'CALC_TASK_WEIGHTS',
9335 p_error_text => SUBSTRB(SQLERRM,1,240));
9336 IF l_debug_mode = 'Y' THEN
9337 pa_debug.reset_curr_function;
9338 END IF;
9339
9340 raise;
9341 END CALC_TASK_WEIGHTS;
9342
9343 -- API name : Update_Task_Weighting
9344 -- Type : Public Procedure
9345 -- Pre-reqs : None
9346 -- Return Value : N/A
9347 -- Parameters
9348 -- p_api_version IN NUMBER := 1.0
9349 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
9350 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
9351 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
9352 -- p_validation_level IN VARCHAR2 := 100
9353 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
9354 -- p_debug_mode IN VARCHAR2 := 'N'
9355 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9356 -- p_object_relationship_id IN NUMBER
9357 -- p_weighting_percentage IN NUMBER
9358 -- p_record_version_number IN NUMBER
9359 -- x_return_status OUT VARCHAR2
9360 -- x_msg_count OUT NUMBER
9361 -- x_msg_data OUT VARCHAR2
9362 --
9363 -- History
9364 --
9365 -- 20-SEP-02 hyau -Created
9366 --
9367 --
9368 procedure Update_Task_Weighting
9369 (
9370 p_api_version IN NUMBER := 1.0
9371 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
9372 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9373 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
9374 ,p_validation_level IN VARCHAR2 := 100
9375 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
9376 ,p_debug_mode IN VARCHAR2 := 'N'
9377 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9378 ,p_object_relationship_id IN NUMBER
9379 ,p_weighting_percentage IN NUMBER
9380 ,p_record_version_number IN NUMBER
9381 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9382 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9383 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9384 )
9385 IS
9386
9387 BEGIN
9388
9389 pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK_WEIGHTING');
9390
9391 IF (p_debug_mode = 'Y') THEN
9392 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_WEIGHTING begin');
9393 END IF;
9394
9395 IF (p_commit = FND_API.G_TRUE) THEN
9396 savepoint update_task_weighting;
9397 END IF;
9398
9399 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
9400 FND_MSG_PUB.initialize;
9401 END IF;
9402
9403 PA_TASK_PVT1.Update_Task_Weighting(
9404 p_object_relationship_id => p_object_relationship_id
9405 ,p_weighting_percentage => p_weighting_percentage
9406 ,p_record_version_number => p_record_version_number
9407 ,x_return_status => x_return_status
9408 ,x_msg_count => x_msg_count
9409 ,x_msg_data => x_msg_data
9410 );
9411
9412 EXCEPTION
9413 when FND_API.G_EXC_ERROR then
9414 if p_commit = FND_API.G_TRUE then
9415 rollback to update_task_weighting;
9416 end if;
9417 x_return_status := FND_API.G_RET_STS_ERROR;
9418 when FND_API.G_EXC_UNEXPECTED_ERROR then
9419 if p_commit = FND_API.G_TRUE then
9420 rollback to update_task_weighting;
9421 end if;
9422 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9423 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
9424 p_procedure_name => 'UPDATE_TASK_WEIGHTING',
9425 p_error_text => SUBSTRB(SQLERRM,1,240));
9426 when OTHERS then
9427 if p_commit = FND_API.G_TRUE then
9428 rollback to update_task_weighting;
9429 end if;
9430 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9431 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
9432 p_procedure_name => 'UPDATE_TASK_WEIGHTING',
9433 p_error_text => SUBSTRB(SQLERRM,1,240));
9434 raise;
9435
9436 END Update_Task_Weighting;
9437
9438 -- Amit : Following procedure added for Bug 2838700
9439
9440 PROCEDURE INDENT_TASK_VERSION_BULK (
9441 p_api_version IN NUMBER :=1.0,
9442 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
9443 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
9444 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
9445 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
9446 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
9447 p_debug_mode IN VARCHAR2 :='N',
9448 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9449 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9450 p_task_version_id IN NUMBER,
9451 p_project_id IN NUMBER,
9452 p_record_version_number IN NUMBER,
9453 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9454 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
9455 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9456 ) IS
9457
9458
9459 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
9460 SELECT 'Y'
9461 FROM pa_proj_structure_types ppst
9462 ,pa_structure_types pst
9463 WHERE ppst.proj_element_id = c_structure_id
9464 AND ppst.structure_type_id = pst.structure_type_id
9465 AND pst.structure_type_class_code IN( 'FINANCIAL' );
9466
9467 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
9468 SELECT 'Y'
9469 FROM dual
9470 WHERE EXISTS(
9471 SELECT 'xyz'
9472 FROM pa_proj_elem_ver_structure
9473 WHERE proj_element_id = c_structure_id
9474 AND project_id = c_project_id
9475 AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
9476 );
9477
9478 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
9479 SELECT object_id_from1
9480 FROM pa_object_relationships
9481 WHERE object_id_to1 = c_elem_ver_id
9482 AND object_type_to = 'PA_TASKS'
9483 AND relationship_type = 'S';
9484
9485 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
9486 SELECT object_id_from1
9487 , object_relationship_id
9488 , record_version_number
9489 , relationship_subtype
9490 FROM pa_object_relationships
9491 WHERE object_id_to1 = p_child_version_id
9492 AND relationship_type = 'S';
9493
9494 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
9495
9496 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
9497 SELECT a.object_id_from1
9498 , a.weighting_percentage
9499 FROM pa_object_relationships a
9500 WHERE a.object_id_to1 = c_task_version_id
9501 AND a.object_type_to = 'PA_TASKS'
9502 AND a.relationship_type = 'S'
9503 AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
9504
9505 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
9506 SELECT '1'
9507 FROM dual
9508 WHERE EXISTS
9509 (SELECT 'xyz'
9510 FROM pa_object_relationships
9511 WHERE object_id_from1 = c_task_version_id
9512 AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
9513 AND relationship_type = 'S'
9514 );
9515
9516 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
9517 SELECT ptt.prog_entry_enable_flag
9518 FROM pa_task_types ptt
9519 , pa_proj_element_versions ppev,
9520 pa_proj_elements ppe
9521 WHERE ppev.element_version_id = c_element_version_id
9522 AND ppev.proj_element_id = ppe.proj_element_id
9523 AND ptt.object_type = 'PA_TASKS' /* for bug 3279978 FP M Enhancement */
9524 AND ppe.TYPE_ID = ptt.task_type_id;
9525
9526
9527
9528 l_api_name CONSTANT VARCHAR(30) := 'INDENT_TASK_VERSION_BULK';
9529 l_api_version CONSTANT NUMBER := 1.0;
9530 l_return_status VARCHAR2(1);
9531 l_msg_count NUMBER;
9532 l_msg_data VARCHAR2(250);
9533 l_data VARCHAR2(250);
9534 l_msg_index_out NUMBER;
9535
9536 l_peer_or_sub VARCHAR2(30);
9537 l_project_id NUMBER;
9538 l_structure_id NUMBER;
9539 l_ref_task_id NUMBER;
9540 l_task_id NUMBER;
9541 l_task_record_version_number NUMBER;
9542 l_wbs_record_version_number NUMBER;
9543 l_dummy_char VARCHAR2(1);
9544 l_published_version VARCHAR2(1);
9545 l_relationship_subtype VARCHAR2(20);
9546 l_struc_version_from NUMBER;
9547 l_task_version_from NUMBER;
9548 l_version_from NUMBER;
9549 l_versioned VARCHAR2(1) := 'N';
9550 l_shared VARCHAR2(1) := 'N';
9551
9552 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9553 l_parent_ver_id NUMBER;
9554 l_error_msg_code VARCHAR2(30);
9555
9556 src_elem_ver_id NUMBER;
9557 src_proj_element_id NUMBER;
9558 src_wbs_number VARCHAR2(240);
9559 src_seq_number NUMBER;
9560 src_wbs_level NUMBER;
9561 src_parent_str_ver_id NUMBER;
9562 src_object_type VARCHAR2(30);
9563
9564 ref_elem_ver_id NUMBER;
9565 ref_proj_element_id NUMBER;
9566 ref_wbs_number VARCHAR2(240);
9567 ref_seq_number NUMBER;
9568 ref_wbs_level NUMBER;
9569 ref_parent_str_ver_id NUMBER;
9570 ref_object_type VARCHAR2(30);
9571
9572 l_old_parent_id NUMBER;
9573 l_dummy VARCHAR2(1);
9574
9575 l_new_weighting NUMBER(17,2);
9576 l_old_weighting NUMBER(17,2);
9577 l_progress_allowed VARCHAR2(1);
9578
9579 l_element_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
9580 l_proj_element_id_tab PA_FORECAST_GLOB.NumberTabTyp;
9581 l_object_type_tab PA_FORECAST_GLOB.VCTabTyp;
9582 l_project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
9583 l_parent_str_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
9584 l_display_sequence_tab PA_FORECAST_GLOB.NumberTabTyp;
9585 l_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
9586 l_wbs_number_tab PA_FORECAST_GLOB.VCTabTyp;
9587 l_record_version_tab PA_FORECAST_GLOB.NumberTabTyp;
9588 l_changed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
9589
9590 l_wbs_number VARCHAR2(1000);
9591 src_branch_mask VARCHAR2(1000);
9592 ref_branch_mask VARCHAR2(1000);
9593 l_str1 VARCHAR2(1000);
9594 l_str2 VARCHAR2(1000);
9595 l_number NUMBER;
9596 l_new_wbs_number VARCHAR2(1000);
9597 l_user_id NUMBER;
9598 l_login_id NUMBER;
9599
9600 --bug 2843737
9601 CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
9602 select object_id_from1
9603 from pa_object_relationships
9604 where object_id_to1 = c_object_id_to1
9605 and relationship_type = 'S';
9606 l_ref_parent_ver_id NUMBER;
9607 --end bug 2843737
9608
9609 CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
9610 select wbs_number
9611 from pa_proj_element_versions
9612 where element_version_id = c_elem_ver_id
9613 and object_type ='PA_TASKS';
9614
9615 -- hyau Bug 2852753
9616 l_delete_project_allowed VARCHAR2(1);
9617 l_update_proj_num_allowed VARCHAR2(1);
9618 l_update_proj_name_allowed VARCHAR2(1);
9619 l_update_proj_desc_allowed VARCHAR2(1);
9620 l_update_proj_dates_allowed VARCHAR2(1);
9621 l_update_proj_status_allowed VARCHAR2(1);
9622 l_update_proj_manager_allowed VARCHAR2(1);
9623 l_update_proj_org_allowed VARCHAR2(1);
9624 l_add_task_allowed VARCHAR2(1);
9625 l_delete_task_allowed VARCHAR2(1);
9626 l_update_task_num_allowed VARCHAR2(1);
9627 l_update_task_name_allowed VARCHAR2(1);
9628 l_update_task_dates_allowed VARCHAR2(1);
9629 l_update_task_desc_allowed VARCHAR2(1);
9630 l_update_parent_task_allowed VARCHAR2(1);
9631 l_update_task_org_allowed VARCHAR2(1);
9632
9633 l_err_code NUMBER := 0;
9634 l_err_stack VARCHAR2(200) := NULL;
9635 l_err_stage VARCHAR2(200) := NULL;
9636
9637 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
9638
9639 CURSOR get_product_code ( c_project_id NUMBER ) IS
9640 SELECT pm_product_code
9641 FROM PA_PROJECTS_ALL
9642 WHERE project_id = c_project_id;
9643
9644 l_cur_project_id NUMBER;
9645 CURSOR cur_proj_id
9646 IS
9647 SELECT project_id
9648 FROM pa_proj_element_versions
9649 WHERE element_version_id = p_structure_version_id;
9650
9651 -- end hyau Bug 2852753
9652
9653 -- Merged from 85
9654 --Bug 2947492 ( indent )
9655
9656 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
9657 l_parent_task_id NUMBER;
9658 l_old_parent_task_id NUMBER;
9659 l_top_task_id NUMBER;
9660 l_old_top_task_id NUMBER; --bug 2967204
9661
9662 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
9663 SELECT parent_task_id, top_task_id FROM pa_tasks
9664 WHERE project_id = c_project_id and task_id = c_task_id;
9665
9666 --End Bug 2947492 ( indent )
9667 -- Merged from 85
9668
9669 --bug 3053281
9670 l_wp_type VARCHAR2(1);
9671 l_weighting_basis_Code VARCHAR2(30);
9672 --end bug 3053281
9673
9674 --3035902: process update flag changes
9675 cursor get_task_type_id(c_proj_element_id NUMBER) IS
9676 select type_id
9677 from pa_proj_elements
9678 where proj_element_id = c_proj_element_id;
9679 l_task_type_id NUMBER;
9680 l_wp_process_flag VARCHAR2(1);
9681 --3035902: end process update flag changes
9682
9683 --bug 3069306
9684 Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
9685 select object_id_to1
9686 from pa_object_relationships
9687 where relationshiP_type = 'S'
9688 and object_type_to = 'PA_TASKS'
9689 start with object_id_to1 = c_task_ver_id
9690 and object_type_to = 'PA_TASKS'
9691 and relationship_type = 'S'
9692 connect by prior object_id_from1 = object_id_to1
9693 and prior object_type_from = object_type_to
9694 and prior relationship_type = relationship_type
9695 intersect
9696 select a.object_id_to1
9697 from pa_object_relationships a, pa_proj_element_versions b
9698 where a.relationshiP_type = 'S'
9699 and a.object_id_from1 = b.parent_structure_version_id
9700 and b.element_version_id = c_task_ver_id
9701 and a.object_type_from = 'PA_STRUCTURES';
9702 l_old_par_ver_id NUMBER;
9703 l_new_par_ver_id NUMBER;
9704 --end bug 3069306
9705
9706 --bug 3301192
9707 /* Bug #: 3305199 SMukka */
9708 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
9709 /* l_task_ver_ids2 PA_PLSQL_DATATYPES.IdTabTyp; */
9710 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
9711 l_lowest_task_flag1 VARCHAR2(1);
9712 l_lowest_task_flag2 VARCHAR2(1);
9713 l_fin_task_flag VARCHAR2(1);
9714
9715 --bug 4214825, start
9716 l_ref_tsk_version_id NUMBER;
9717
9718 CURSOR cur_get_ref_tsk_ver_id(c_src_wbs_level NUMBER) IS
9719 SELECT element_version_id
9720 FROM PA_PROJ_ELEMENT_VERSIONS
9721 WHERE parent_structure_version_id = p_structure_version_id
9722 AND project_id = p_project_id
9723 AND wbs_level = c_src_wbs_level
9724 AND object_type = 'PA_TASKS'
9725 AND display_sequence < src_seq_number
9726 AND display_sequence =
9727 (SELECT max (display_sequence)
9728 FROM pa_proj_element_versions
9729 WHERE project_id = p_project_id
9730 AND parent_structure_version_id = p_structure_version_id
9731 AND wbs_level = c_src_wbs_level
9732 AND display_sequence < src_seq_number
9733 AND object_type = 'PA_TASKS');
9734 --bug 4214825, end
9735
9736 BEGIN
9737
9738 pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK');
9739
9740 IF (p_debug_mode = 'Y') THEN
9741 pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK begin');
9742 END IF;
9743
9744 IF (p_commit = FND_API.G_TRUE) THEN
9745 savepoint indent_task_version_bulk;
9746 END IF;
9747
9748 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
9749 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9750 END IF;
9751
9752 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
9753 FND_MSG_PUB.initialize;
9754 END IF;
9755
9756 --bug 4075697
9757 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
9758 --bug 4075697
9759
9760 --3035902: process update flag changes
9761 l_wp_process_flag := 'N';
9762 --3035902: end process update flag changes
9763 -- hyau Bug 2852753
9764 IF p_calling_module = 'SELF_SERVICE' THEN
9765
9766 OPEN cur_proj_id;
9767 FETCH cur_proj_id INTO l_cur_project_id;
9768 CLOSE cur_proj_id;
9769
9770 OPEN get_product_code(l_cur_project_id);
9771 FETCH get_product_code INTO l_pm_product_code;
9772 CLOSE get_product_code;
9773
9774 If l_pm_product_code IS NOT NULL THEN
9775 pa_pm_controls.Get_Project_actions_allowed
9776 (P_PM_PRODUCT_CODE => l_pm_product_code,
9777 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
9778 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
9779 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
9780 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
9781 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
9782 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
9783 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
9784 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
9785 P_ADD_TASK_ALLOWED => l_add_task_allowed,
9786 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
9787 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
9788 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
9789 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
9790 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
9791 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
9792 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
9793 P_ERROR_CODE => l_err_code,
9794 P_ERROR_STACK => l_err_stack,
9795 P_ERROR_STAGE => l_err_stage );
9796
9797 IF l_err_code <> 0 THEN
9798 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9799 p_msg_name => l_err_stage);
9800 END IF;
9801 IF l_update_parent_task_allowed = 'N' THEN
9802 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9803 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
9804 raise FND_API.G_EXC_ERROR;
9805 END IF;
9806 END IF;
9807 END IF;
9808
9809 -- end hyau Bug 2852753
9810
9811 -- Bug 6881272: ABLE TO INDENT THE TASK OF THE WBS WITH THE LINKED PROJECT
9812
9813 BEGIN
9814 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9815 INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
9816 FROM PA_PROJ_ELEMENT_VERSIONS
9817 WHERE element_version_id = p_task_version_id
9818 AND project_id = p_project_id
9819 AND parent_structure_version_id = p_structure_version_id;
9820 EXCEPTION
9821 WHEN OTHERS THEN
9822 raise;
9823 END;
9824
9825
9826
9827 IF (p_structure_version_id IS NOT NULL) AND
9828 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
9829 -- Bug 6881272: ABLE TO INDENT THE TASK OF THE WBS WITH THE LINKED PROJECT
9830 IF (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
9831 , src_proj_element_id
9832 , p_task_version_id),'N') = 'Y') THEN
9833 --deleting linked task. Error
9834 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
9835 raise FND_API.G_EXC_ERROR;
9836 END IF;
9837 END IF;
9838
9839 -- Get Source Task Information
9840 BEGIN
9841 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9842 INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
9843 FROM PA_PROJ_ELEMENT_VERSIONS
9844 WHERE element_version_id = p_task_version_id
9845 AND project_id = p_project_id
9846 AND parent_structure_version_id = p_structure_version_id;
9847 EXCEPTION
9848 WHEN OTHERS THEN
9849 raise;
9850 END;
9851
9852 -- Locking should be implemented here
9853
9854 -- Lifecycle Phase validation Changes. Check if task has phase associated with it
9855 IF (p_task_version_id IS NOT NULL) AND
9856 (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
9857
9858 IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
9859 src_proj_element_id)) THEN
9860 --Indenting a task with phase. Error
9861 PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
9862 raise FND_API.G_EXC_ERROR;
9863 END IF;
9864 END IF;
9865
9866
9867 IF src_seq_number = 1 then
9868 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
9869 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
9870 raise FND_API.G_EXC_ERROR;
9871 END IF;
9872
9873 /* Bug 2843737 Added logic to populate the error message when you try to indent lowest task
9874 Also restructured the logic to get the reference task */
9875
9876 -- Get the previous task information. If its wbs_level is equal to src_wbs_level then this will become refernce task
9877 -- Otherwise we will again fetch the correct reference task
9878
9879 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9880 INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number, ref_parent_str_ver_id, ref_object_type
9881 FROM PA_PROJ_ELEMENT_VERSIONS
9882 WHERE display_sequence = src_seq_number - 1
9883 AND parent_structure_version_id = p_structure_version_id
9884 AND project_id = p_project_id
9885 AND object_type = 'PA_TASKS';
9886
9887 IF src_wbs_level > ref_wbs_level then
9888 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
9889 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
9890 raise FND_API.G_EXC_ERROR;
9891 END IF;
9892
9893 IF src_wbs_level = ref_wbs_level then
9894 l_peer_or_sub := 'SUB';
9895 --bug 4214825, start
9896 l_ref_tsk_version_id := ref_elem_ver_id;
9897 --bug 4214825, end
9898 ELSE
9899 l_peer_or_sub := 'PEER';
9900
9901 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9902 INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number, ref_parent_str_ver_id, ref_object_type
9903 FROM PA_PROJ_ELEMENT_VERSIONS
9904 WHERE parent_structure_version_id = p_structure_version_id
9905 AND project_id = p_project_id
9906 AND wbs_level = src_wbs_level+1
9907 AND object_type = 'PA_TASKS'
9908 AND display_sequence < src_seq_number
9909 AND display_sequence =
9910 (SELECT max (display_sequence)
9911 FROM pa_proj_element_versions
9912 WHERE project_id = p_project_id
9913 AND parent_structure_version_id = p_structure_version_id
9914 AND wbs_level = src_wbs_level+1
9915 AND display_sequence < src_seq_number
9916 AND object_type = 'PA_TASKS');
9917
9918 --bug 4214825, start
9919 OPEN cur_get_ref_tsk_ver_id(src_wbs_level);
9920 FETCH cur_get_ref_tsk_ver_id INTO l_ref_tsk_version_id;
9921 CLOSE cur_get_ref_tsk_ver_id;
9922 --bug 4214825, end
9923
9924
9925 END IF;
9926
9927
9928 /* Bug 2843737 -- Commented the code to get the refernec task. It is now being done above
9929 -- Get Refernce Task Information
9930
9931 BEGIN
9932 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9933 INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number, ref_parent_str_ver_id, ref_object_type
9934 FROM PA_PROJ_ELEMENT_VERSIONS
9935 WHERE parent_structure_version_id = p_structure_version_id
9936 AND project_id = p_project_id
9937 AND (wbs_level = src_wbs_level OR wbs_level = src_wbs_level+1) -- Sub or Peer
9938 AND object_type = 'PA_TASKS'
9939 AND display_sequence < src_seq_number
9940 AND display_sequence =
9941 (SELECT max (display_sequence)
9942 FROM pa_proj_element_versions
9943 WHERE project_id = p_project_id
9944 AND parent_structure_version_id = p_structure_version_id
9945 AND (wbs_level = src_wbs_level OR wbs_level = src_wbs_level+1) -- Sub or Peer
9946 AND display_sequence < src_seq_number
9947 AND object_type = 'PA_TASKS');
9948 EXCEPTION
9949 WHEN OTHERS THEN
9950 raise;
9951 END;
9952 */
9953
9954 --Bug No 3475920 Smukka 25/May/04 Checking for deliverable
9955 --bug 4214825, pass the correct ref_task_version
9956 --IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,ref_elem_ver_id) = 'Y' THEN
9957 IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_ref_tsk_version_id) = 'Y' THEN
9958 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9959 p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
9960 raise FND_API.G_EXC_ERROR;
9961 END IF;
9962
9963 --Check if ok to indent this task
9964 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
9965 p_task_ver_id => p_task_version_id
9966 ,x_return_status => l_return_status
9967 ,x_error_message_code => l_error_msg_code
9968 );
9969
9970 IF (l_return_status <> 'Y') THEN
9971 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9972 p_msg_name => l_error_msg_code);
9973 raise FND_API.G_EXC_ERROR;
9974 END IF;
9975
9976 --check if ok to create subtask
9977 IF (l_peer_or_sub = 'PEER') THEN
9978 OPEN get_parent_version_id(ref_elem_ver_id);
9979 FETCH get_parent_version_id into l_parent_ver_id;
9980 CLOSE get_parent_version_id;
9981
9982 --bug 3069306
9983 --if financial task, check if changing parent ok
9984 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
9985 OPEN get_top_task_ver_id(l_parent_ver_id);
9986 FETCH get_top_task_ver_id into l_new_par_ver_id;
9987 CLOSE get_top_task_ver_id;
9988
9989 OPEN get_top_task_ver_id(p_task_version_id);
9990 FETCH get_top_task_ver_id into l_old_par_ver_id;
9991 CLOSE get_top_task_Ver_id;
9992
9993 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
9994 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9995 p_msg_name => 'PA_CANT_CHANGE_PARENT');
9996 raise FND_API.G_EXC_ERROR;
9997 END IF;
9998 END IF;
9999 --end bug 3069306
10000
10001 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
10002 p_parent_task_ver_id => l_parent_ver_id
10003 ,x_return_status => l_return_status
10004 ,x_error_message_code => l_error_msg_code
10005 );
10006
10007 IF (l_return_status <> 'Y') THEN
10008 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10009 p_msg_name => l_error_msg_code);
10010 raise FND_API.G_EXC_ERROR;
10011 END IF;
10012
10013 --bug 4099488
10014 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
10015 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10016 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
10017 raise FND_API.G_EXC_ERROR;
10018 END IF;
10019 --end bug 4099488
10020 ELSE
10021 --bug 3069306
10022 --if financial task, check if changing parent ok
10023 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
10024 OPEN get_top_task_ver_id(ref_elem_ver_id);
10025 FETCH get_top_task_ver_id into l_new_par_ver_id;
10026 CLOSE get_top_task_ver_id;
10027
10028 OPEN get_top_task_ver_id(p_task_version_id);
10029 FETCH get_top_task_ver_id into l_old_par_ver_id;
10030 CLOSE get_top_task_Ver_id;
10031
10032 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
10033 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10034 p_msg_name => 'PA_CANT_CHANGE_PARENT');
10035 raise FND_API.G_EXC_ERROR;
10036 END IF;
10037 END IF;
10038 --end bug 3069306
10039
10040
10041 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
10042 p_parent_task_ver_id => ref_elem_ver_id
10043 ,x_return_status => l_return_status
10044 ,x_error_message_code => l_error_msg_code
10045 );
10046
10047 IF (l_return_status <> 'Y') THEN
10048 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10049 p_msg_name => l_error_msg_code);
10050 raise FND_API.G_EXC_ERROR;
10051 END IF;
10052
10053 --bug 4099488
10054 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(ref_elem_ver_id, p_task_version_id) = 'N' THEN
10055 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10056 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
10057 raise FND_API.G_EXC_ERROR;
10058 END IF;
10059 --end bug 4099488
10060 END IF;
10061
10062 -- Added for FP_M changes. Bug 3305199 : Bhumesh xxx
10063
10064 If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
10065 IN ('SHARE_PARTIAL')
10066 Then
10067
10068 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
10069 p_task_version_id => p_task_version_id
10070 , p_ref_task_version_id => ref_elem_ver_id
10071 , x_return_status => x_return_status
10072 , x_msg_count => x_msg_count
10073 , x_msg_data => x_msg_data
10074 , x_error_msg_code => l_error_msg_code);
10075
10076 IF (x_return_status <> 'S') THEN -- 4275757 : Changed from 'Y' to 'S'
10077 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10078 p_msg_name => l_error_msg_code);
10079 raise FND_API.G_EXC_ERROR;
10080 End If;
10081 End If;
10082
10083 --check the task is a lowest task bug 3301192
10084 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
10085
10086 -- End of FP_M changes
10087 /*
10088
10089 The processing done by the followig two calls is made now as plsql table bulk processing
10090
10091 PA_TASK_PUB1.Update_Task_Version
10092 ( p_validate_only => FND_API.G_FALSE,
10093 p_ref_task_version_id => l_ref_task_version_id,
10094 p_peer_or_sub => l_peer_or_sub,
10095 p_task_version_id => p_task_version_id,
10096 p_record_version_number => p_record_version_number,
10097 x_return_status => l_return_status,
10098 x_msg_count => l_msg_count,
10099 x_msg_data => l_msg_data );
10100
10101 PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
10102 ( p_commit => p_commit
10103 ,p_debug_mode => p_debug_mode
10104 ,p_parent_structure_ver_id => l_parent_structure_version_id
10105 ,p_task_id => p_task_version_id
10106 ,p_display_seq => l_display_sequence
10107 ,p_action => 'INDENT'
10108 ,p_parent_task_id => NULL
10109 ,x_return_status => l_return_status );
10110
10111 */
10112
10113
10114 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
10115
10116 -- Logic Added for plsql table
10117 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
10118
10119 l_element_version_id_tab.delete;
10120 l_proj_element_id_tab.delete;
10121 l_object_type_tab.delete;
10122 l_project_id_tab.delete;
10123 l_parent_str_version_id_tab.delete;
10124 l_display_sequence_tab.delete;
10125 l_wbs_level_tab.delete;
10126 l_wbs_number_tab.delete;
10127 l_record_version_tab.delete;
10128 l_changed_flag_tab.delete;
10129
10130 If (l_peer_or_sub = 'SUB') THEN
10131 OPEN get_ref_parent_id(ref_elem_ver_id);
10132 FETCH get_ref_parent_id into l_ref_parent_ver_id;
10133 CLOSE get_ref_parent_id;
10134 ELSE
10135 OPEN get_ref_parent_id(p_task_version_id);
10136 FETCH get_ref_parent_id into l_ref_parent_ver_id;
10137 CLOSE get_ref_parent_id;
10138 END IF;
10139
10140 BEGIN
10141 -- Using OR is beneficial than using UNION here
10142
10143 SELECT element_version_id, proj_element_id, object_type,
10144 project_id, parent_structure_version_id,
10145 display_sequence, wbs_level, wbs_number,
10146 record_version_number, 'N' changed_flag
10147 BULK COLLECT INTO l_element_version_id_tab,
10148 l_proj_element_id_tab, l_object_type_tab,
10149 l_project_id_tab, l_parent_str_version_id_tab,
10150 l_display_sequence_tab, l_wbs_level_tab,
10151 l_wbs_number_tab, l_record_version_tab,
10152 l_changed_flag_tab
10153 FROM
10154 pa_proj_element_versions
10155 WHERE
10156 project_id = p_project_id
10157 AND parent_structure_version_id = p_structure_version_id
10158 AND object_type = 'PA_TASKS'
10159 AND(
10160 element_version_id = p_task_version_id -- Source task itself
10161 OR (element_version_id IN -- All tasks below the source task with wbs_level >= src_wbs_level-1
10162 (select object_id_to1
10163 from pa_object_relationships
10164 where relationship_type = 'S'
10165 and object_type_to = 'PA_TASKS'
10166 start with object_id_from1 = l_ref_parent_ver_id
10167 connect by object_id_from1 = PRIOR object_id_to1
10168 and relationship_type = PRIOR relationship_type
10169 and relationship_type = 'S')
10170 )
10171 and display_sequence > src_seq_number)
10172 ORDER BY display_sequence ;
10173 EXCEPTION
10174 WHEN OTHERS THEN
10175 raise;
10176 END;
10177
10178
10179 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
10180 -- Here we can also incorporate sequence number update. In indent sequence number does not change.
10181
10182 -- Update wbs level
10183
10184 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
10185 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
10186 l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
10187 l_changed_flag_tab(j) := 'Y';
10188 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
10189 -- Direct Childs of source
10190 l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
10191 l_changed_flag_tab(j) := 'Y';
10192 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
10193 -- Exit level changes, IT means no Direct childs are left
10194 EXIT;
10195 END IF;
10196 END LOOP;
10197
10198
10199 -- Update wbs_number
10200
10201 src_branch_mask := src_wbs_number;
10202
10203 -- ref_branch_mask shd be the wbs_number of parent of source
10204 --ref_branch_mask := substr(ref_wbs_number, 1, instr(ref_wbs_number,'.', -1, 1)-1);
10205
10206 OPEN get_wbs_number(l_ref_parent_ver_id);
10207 FETCH get_wbs_number into ref_branch_mask;
10208 CLOSE get_wbs_number;
10209
10210
10211
10212 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
10213 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
10214 IF l_peer_or_sub = 'SUB' THEN
10215 l_wbs_number := ref_wbs_number || '.1';
10216 l_wbs_number_tab(j) := l_wbs_number;
10217 l_changed_flag_tab(j) := 'Y';
10218 l_new_wbs_number := l_wbs_number;
10219 ELSE
10220 l_number := instr(ref_wbs_number,'.', -1, 1);
10221 l_str1 := substr(ref_wbs_number, 1, l_number -1);
10222 l_str2 := substr(ref_wbs_number, l_number + 1);
10223 l_str2 := to_char(to_number(l_str2 + 1));
10224 l_wbs_number := l_str1 || '.' || l_str2;
10225 l_wbs_number_tab(j) := l_wbs_number;
10226 l_changed_flag_tab(j) := 'Y';
10227 l_new_wbs_number := l_wbs_number;
10228 END IF;
10229 ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
10230 IF l_display_sequence_tab(j) > src_seq_number THEN
10231 IF src_wbs_level = 1 THEN -- This was top task
10232 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
10233 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
10234 -- Direct childs of source
10235 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
10236 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
10237 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
10238 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
10239 l_wbs_number_tab(j) := l_wbs_number;
10240 l_changed_flag_tab(j) := 'Y';
10241 ELSIF(instr(l_wbs_number_tab(j), '.') <> 0) then
10242 -- Not in Direct Childs, But lower tasks
10243 l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
10244 l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
10245 l_str1 := to_char(to_number(l_str1) - 1);
10246 l_wbs_number := l_str1 || l_str2;
10247 l_wbs_number_tab(j) := l_wbs_number;
10248 l_changed_flag_tab(j) := 'Y';
10249 ELSIF (instr(l_wbs_number_tab(j), '.') = 0) then
10250 l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) - 1);
10251 l_wbs_number_tab(j) := l_wbs_number;
10252 l_changed_flag_tab(j) := 'Y';
10253 END IF;
10254 ELSE -- src_wbs_level <> 1 Source was not a Top Task
10255 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
10256 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
10257 -- Direct childs of source
10258 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
10259 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
10260 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
10261 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
10262 l_wbs_number_tab(j) := l_wbs_number;
10263 l_changed_flag_tab(j) := 'Y';
10264 ELSE
10265 l_str1 := substr(l_wbs_number_tab(j), length(ref_branch_mask) + 2);
10266 IF(instr(l_str1, '.') <> 0) THEN
10267 l_str2 := substr(l_str1, instr(l_str1, '.'));
10268 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
10269 l_str1 := to_char(to_number(l_str1) - 1);
10270 l_wbs_number := ref_branch_mask || '.' || l_str1 || l_str2;
10271 l_wbs_number_tab(j) := l_wbs_number;
10272 l_changed_flag_tab(j) := 'Y';
10273 ELSE
10274 l_str1:= to_char(to_number(l_str1) - 1);
10275 l_wbs_number := ref_branch_mask || '.' || l_str1;
10276 l_wbs_number_tab(j) := l_wbs_number;
10277 l_changed_flag_tab(j) := 'Y';
10278 END IF;
10279 END IF;
10280 END IF; -- src_wbs_level = 1
10281 END IF; -- l_display_sequence_tab(j) > src_seq_number
10282 END IF; -- l_element_version_id_tab(j) = src_elem_ver_id
10283 END LOOP;
10284 l_user_id := fnd_global.user_id;
10285 l_login_id := fnd_global.login_id;
10286
10287 -- Locking should be implemnted here
10288
10289 FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
10290 UPDATE PA_PROJ_ELEMENT_VERSIONS
10291 SET
10292 wbs_level = l_wbs_level_tab(j) ,
10293 wbs_number = l_wbs_number_tab(j) ,
10294 last_update_date = sysdate ,
10295 last_updated_by = l_user_id ,
10296 last_update_login = l_login_id ,
10297 record_version_number = l_record_version_tab(j)+1
10298 WHERE element_version_id = l_element_version_id_tab(j)
10299 AND l_changed_flag_tab(j)='Y';
10300
10301
10302 -- Update Relationship
10303
10304 IF ref_object_type = 'PA_TASKS'
10305 THEN
10306 IF l_peer_or_sub = 'PEER'
10307 THEN
10308 OPEN cur_obj_rel( ref_elem_ver_id );
10309 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
10310 CLOSE cur_obj_rel;
10311
10312 l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
10313
10314 IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
10315 THEN
10316 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
10317 l_task_version_from := null;
10318 ELSE
10319 l_task_version_from := v_cur_obj_rel_rec.object_id_from1;
10320 l_struc_version_from := null;
10321 END IF;
10322 ELSE -- l_peer_or_sub = 'SUB'
10323 --parent task is the reference task
10324 l_task_version_from := ref_elem_ver_id;
10325 l_struc_version_from := null;
10326 l_relationship_subtype := 'TASK_TO_TASK';
10327
10328
10329 END IF;
10330 END IF; -- ref_object_type = 'PA_TASKS'
10331 -- No need to check for PA_STRUCTURES as this is indent and you can not indent below a structure
10332
10333
10334 --update relatonship of the task version p_task_version.
10335 --set structure_version_from and task_version_from accordingly.
10336 OPEN cur_obj_rel( p_task_version_id );
10337 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
10338 CLOSE cur_obj_rel;
10339
10340 --for task weighting
10341 OPEN get_task_weighting(p_task_version_id);
10342 FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
10343 CLOSE get_task_weighting;
10344
10345
10346 IF(l_task_version_from is not null) THEN
10347 l_version_from := l_task_version_from;
10348 ELSE
10349 l_version_from := l_struc_version_from;
10350 END IF;
10351
10352 IF (l_version_from = p_task_version_id) THEN
10353 l_new_weighting := l_old_weighting;
10354 ELSE
10355 OPEN get_sub_tasks(l_version_from);
10356 FETCH get_sub_tasks into l_dummy;
10357 IF (get_sub_tasks%NOTFOUND) THEN
10358 l_new_weighting := 100;
10359 --bug 2673570
10360 OPEN check_progress_allowed(p_task_version_id);
10361 FETCH check_progress_allowed INTO l_progress_allowed;
10362 CLOSE check_progress_allowed;
10363
10364 if l_progress_allowed = 'N' then
10365 l_new_weighting := 0;
10366 end if;
10367 --bug 2673570
10368 ELSE
10369 l_new_weighting := 0;
10370 END IF;
10371 CLOSE get_sub_tasks;
10372 END IF;
10373
10374 PA_RELATIONSHIP_PVT.Update_Relationship
10375 (
10376 p_api_version => p_api_version
10377 ,p_init_msg_list => p_init_msg_list
10378 ,p_commit => p_commit
10379 ,p_validate_only => p_validate_only
10380 ,p_validation_level => p_validation_level
10381 ,p_calling_module => p_calling_module
10382 ,p_debug_mode => p_debug_mode
10383 ,p_max_msg_count => p_max_msg_count
10384 ,p_object_relationship_id => v_cur_obj_rel_rec.object_relationship_id
10385 ,p_project_id_from => null
10386 ,p_structure_id_from => null
10387 ,p_structure_version_id_from => l_struc_version_from
10388 ,p_task_version_id_from => l_task_version_from
10389 ,p_project_id_to => null
10390 ,p_structure_id_to => null
10391 ,p_structure_version_id_to => null
10392 ,p_task_version_id_to => p_task_version_id
10393 ,p_relationship_type => 'S'
10394 ,p_relationship_subtype => l_relationship_subtype
10395 ,p_weighting_percentage => l_new_weighting
10396 ,p_record_version_number => v_cur_obj_rel_rec.record_version_number
10397 ,x_return_status => l_return_status
10398 ,x_msg_count => l_msg_count
10399 ,x_msg_data => l_msg_data
10400 );
10401
10402
10403 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10404 x_msg_count := FND_MSG_PUB.count_msg;
10405 IF x_msg_count = 1 then
10406 pa_interface_utils_pub.get_messages
10407 (p_encoded => FND_API.G_TRUE,
10408 p_msg_index => 1,
10409 p_msg_count => l_msg_count,
10410 p_msg_data => l_msg_data,
10411 p_data => l_data,
10412 p_msg_index_out => l_msg_index_out);
10413 x_msg_data := l_data;
10414 END IF;
10415 raise FND_API.G_EXC_ERROR;
10416 END IF;
10417
10418 --for task weighting
10419 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
10420 p_task_version_id => l_old_parent_id
10421 ,x_return_status => l_return_status
10422 ,x_msg_count => l_msg_count
10423 ,x_msg_data => l_msg_data
10424 );
10425
10426 x_msg_count := FND_MSG_PUB.count_msg;
10427 IF x_msg_count = 1 then
10428 pa_interface_utils_pub.get_messages
10429 (p_encoded => FND_API.G_TRUE,
10430 p_msg_index => 1,
10431 p_msg_count => l_msg_count,
10432 p_msg_data => l_msg_data,
10433 p_data => l_data,
10434 p_msg_index_out => l_msg_index_out);
10435 x_msg_data := l_data;
10436 END IF;
10437
10438 --bug 2673570
10439 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
10440 p_task_version_id => p_task_version_id
10441 ,x_return_status => l_return_status
10442 ,x_msg_count => l_msg_count
10443 ,x_msg_data => l_msg_data
10444 );
10445
10446 x_msg_count := FND_MSG_PUB.count_msg;
10447 IF x_msg_count = 1 then
10448 pa_interface_utils_pub.get_messages
10449 (p_encoded => FND_API.G_TRUE,
10450 p_msg_index => 1,
10451 p_msg_count => l_msg_count,
10452 p_msg_data => l_msg_data,
10453 p_data => l_data,
10454 p_msg_index_out => l_msg_index_out);
10455 x_msg_data := l_data;
10456 END IF;
10457 --bug 2673570
10458 --end changes for task weighting
10459
10460
10461 /*** End Update_task_version and Update_wbs_number code ***/
10462
10463 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
10464 FROM pa_proj_element_versions
10465 WHERE element_version_id = ( Select parent_structure_version_id
10466 from pa_proj_element_versions
10467 where element_version_id = p_task_version_id )
10468 AND object_type = 'PA_STRUCTURES';
10469
10470
10471 --Do financial task check
10472 --If financial
10473 OPEN cur_struc_type( l_structure_id );
10474 FETCH cur_struc_type INTO l_dummy_char;
10475 IF cur_struc_type%FOUND
10476 THEN
10477 --If structure has any published versions.
10478 l_published_version := 'N';
10479 OPEN cur_pub_versions( l_structure_id, l_project_id );
10480 FETCH cur_pub_versions INTO l_published_version;
10481 CLOSE cur_pub_versions;
10482
10483
10484 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
10485 l_project_id);
10486 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
10487 l_project_id);
10488
10489 l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --indent in corresponding task in pa_tasks
10490
10491 IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
10492 (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
10493 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
10494 THEN
10495
10496 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
10497 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
10498 FROM PA_TASKS pt,
10499 pa_proj_elem_ver_structure ppa,
10500 PA_PROJ_ELEMENT_VERSIONS ppev
10501 WHERE ppev.element_version_id = p_task_version_id
10502 AND ppev.parent_structure_version_id = ppa.element_version_id
10503 AND ppev.project_id = ppa.project_id
10504 AND ppev.proj_element_id = pt.task_id;
10505
10506 -- Merged from 85
10507 SELECT record_version_number, parent_task_id --get old parent id for bug 2947492 (indent )
10508 ,top_task_id --bug 2967204
10509 INTO l_task_record_version_number, l_old_parent_task_id
10510 ,l_old_top_task_id --bug 2967204
10511 FROM pa_tasks
10512 WHERE task_id = l_task_id
10513 AND project_id = l_project_id;
10514 -- Merged from 85
10515
10516
10517 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
10518 p_project_id => l_project_id
10519 ,p_task_id => l_task_id
10520 ,p_edit_mode => 'INDENT'
10521 ,p_record_version_number => l_task_record_version_number
10522 ,p_wbs_record_version_number => 1
10523 ,x_return_status => l_return_status
10524 ,x_msg_count => l_msg_count
10525 ,x_msg_data => l_msg_data );
10526
10527 -- Merged from 85
10528 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10529 x_msg_count := FND_MSG_PUB.count_msg;
10530 IF x_msg_count = 1 then
10531 pa_interface_utils_pub.get_messages
10532 (p_encoded => FND_API.G_TRUE,
10533 p_msg_index => 1,
10534 p_msg_count => l_msg_count,
10535 p_msg_data => l_msg_data,
10536 p_data => l_data,
10537 p_msg_index_out => l_msg_index_out);
10538 x_msg_data := l_data;
10539 END IF;
10540 raise FND_API.G_EXC_ERROR;
10541 END IF;
10542
10543 --Bug 2947492 ( Indent )
10544 --
10545
10546 OPEN get_parent_task_id( l_task_id , l_project_id );
10547 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
10548 CLOSE get_parent_task_id;
10549
10550 --bug 2967204
10551 --Cannot move out of the current hierarchy
10552 IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
10553 THEN
10554 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10555 p_msg_name => 'PA_CANT_CHANGE_PARENT');
10556 raise FND_API.G_EXC_ERROR;
10557 END IF;
10558 --End bug 2967204
10559
10560 --First call the check_reparent ok
10561 --This should have been called in the beginning but due to lot of complexity involved in getting
10562 --new parent task id it is decided to call this later stage as long as we rollback the whole operation
10563 --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
10564
10565 /*PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
10566 p_task_id => l_task_id
10567 ,p_old_parent_task_id => l_old_parent_task_id
10568 ,p_new_parent_task_id => l_parent_task_id
10569 ,x_return_status => l_return_status
10570 ,x_msg_count => l_msg_count
10571 ,x_msg_data => l_msg_data
10572 );
10573
10574 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10575 x_msg_count := FND_MSG_PUB.count_msg;
10576 IF x_msg_count = 1 then
10577 pa_interface_utils_pub.get_messages
10578 (p_encoded => FND_API.G_TRUE,
10579 p_msg_index => 1,
10580 p_msg_count => l_msg_count,
10581 p_msg_data => l_msg_data,
10582 p_data => l_data,
10583 p_msg_index_out => l_msg_index_out);
10584 x_msg_data := l_data;
10585 END IF;
10586 raise FND_API.G_EXC_ERROR;
10587 END IF;
10588 */ --commenting out. check mails form Venkatesh Jayaraman dated 22 Jan 04
10589
10590 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
10591 l_plannable_tasks_tbl(1).impacted_task_id := l_task_id;
10592 l_plannable_tasks_tbl(1).action := 'REPARENT';
10593 l_plannable_tasks_tbl(1).old_parent_task_id := l_old_parent_task_id;
10594 l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
10595 l_plannable_tasks_tbl(1).top_task_id := l_top_task_id;
10596
10597
10598 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
10599 p_project_id => p_project_id
10600 , p_impacted_tasks_tbl => l_plannable_tasks_tbl
10601 , x_return_status => l_return_status
10602 , x_msg_data => l_msg_data
10603 , x_msg_count => l_msg_count
10604 );
10605
10606 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10607 x_msg_count := FND_MSG_PUB.count_msg;
10608 IF x_msg_count = 1 then
10609 pa_interface_utils_pub.get_messages
10610 (p_encoded => FND_API.G_TRUE,
10611 p_msg_index => 1,
10612 p_msg_count => l_msg_count,
10613 p_msg_data => l_msg_data,
10614 p_data => l_data,
10615 p_msg_index_out => l_msg_index_out);
10616 x_msg_data := l_data;
10617 END IF;
10618 raise FND_API.G_EXC_ERROR;
10619 END IF;
10620 bug 3010538 */
10621
10622 --End Bug 2947492 ( Indent )
10623
10624 END IF;
10625 END IF;
10626 CLOSE cur_struc_type;
10627 -- Merged from 85
10628
10629 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
10630
10631 -- Added for FP_M changes Bug 3305199 : Bhumesh
10632 If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
10633
10634 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
10635 p_structure_version_id => P_Structure_Version_ID
10636 ,p_dirty_flag => 'Y' --bug 3902282
10637 ,x_return_status => x_return_status
10638 ,x_msg_count => x_msg_count
10639 ,x_msg_data => x_msg_data
10640 );
10641
10642 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
10643 x_msg_count := FND_MSG_PUB.count_msg;
10644 If x_msg_count = 1 then
10645 pa_interface_utils_pub.get_messages
10646 (p_encoded => FND_API.G_TRUE,
10647 p_msg_index => 1,
10648 p_msg_count => l_msg_count,
10649 p_msg_data => l_msg_data,
10650 p_data => l_data,
10651 p_msg_index_out => l_msg_index_out);
10652 x_msg_data := l_data;
10653 End If;
10654 raise FND_API.G_EXC_ERROR;
10655 End If;
10656 End If;
10657 -- End of FP_M changes
10658
10659 l_tasks_ver_ids.extend;
10660 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
10661
10662 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
10663 p_commit => FND_API.G_FALSE,
10664 p_element_versions => l_tasks_ver_ids,
10665 x_return_status => l_return_status,
10666 x_msg_count => l_msg_count,
10667 x_msg_data => l_msg_data);
10668
10669 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10670 x_msg_count := FND_MSG_PUB.count_msg;
10671 if x_msg_count = 1 then
10672 pa_interface_utils_pub.get_messages
10673 (p_encoded => FND_API.G_TRUE,
10674 p_msg_index => 1,
10675 p_msg_count => l_msg_count,
10676 p_msg_data => l_msg_data,
10677 p_data => l_data,
10678 p_msg_index_out => l_msg_index_out);
10679 x_msg_data := l_data;
10680 end if;
10681 raise FND_API.G_EXC_ERROR;
10682 end if;
10683
10684 --hsiu added for task status
10685 --if versioning is off, rollup.
10686 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
10687 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
10688 p_structure_version_id => p_structure_version_id
10689 ,p_element_version_id => p_task_version_id
10690 ,x_return_status => l_return_status
10691 ,x_msg_count => l_msg_count
10692 ,x_msg_data => l_msg_data
10693 );
10694
10695 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10696 x_msg_count := FND_MSG_PUB.count_msg;
10697 if x_msg_count = 1 then
10698 pa_interface_utils_pub.get_messages
10699 (p_encoded => FND_API.G_TRUE,
10700 p_msg_index => 1,
10701 p_msg_count => l_msg_count,
10702 p_msg_data => l_msg_data,
10703 p_data => l_data,
10704 p_msg_index_out => l_msg_index_out);
10705 x_msg_data := l_data;
10706 end if;
10707 raise FND_API.G_EXC_ERROR;
10708 end if;
10709 END IF;
10710
10711 --end task status changes
10712
10713 END IF;
10714
10715 --bug 3010538 (Indent)
10716
10717 --bug 3053281 --set flag if not (manual and workplan only)
10718 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
10719 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
10720
10721 /*
10722 IF (l_shared = 'N') AND
10723 (l_wp_type = 'Y') AND
10724 (l_weighting_basis_Code = 'MANUAL') THEN
10725 --do not set the flag to 'Y'
10726 NULL;
10727 ELSE
10728 */
10729 --3035902: process update flag changes
10730 OPEN get_task_type_id(src_proj_element_id);
10731 FETCH get_task_type_id INTO l_task_type_id;
10732 CLOSE get_task_type_id;
10733
10734 --set update process flag if necessary;
10735 IF (l_wp_process_flag = 'N') THEN
10736 --may need to update process flag
10737 IF ((l_shared = 'N') AND
10738 (l_wp_type = 'Y') AND
10739 (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
10740 (l_weighting_basis_code <> 'MANUAL'))
10741 THEN
10742 --split and workplan; only update if progressable task added
10743 l_wp_process_flag := 'Y';
10744 ELSIF ((l_shared = 'N') AND
10745 (l_wp_type = 'N')) THEN
10746 --split and financial; update
10747 l_wp_process_flag := 'Y';
10748 ELSIF (l_shared = 'Y') THEN
10749 l_wp_process_flag := 'Y';
10750 END IF;
10751 END IF;
10752
10753 IF (l_wp_process_flag = 'Y') THEN
10754 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
10755 (
10756 p_calling_context => 'SELF_SERVICE'
10757 ,p_project_id => p_project_id
10758 ,p_structure_version_id => p_structure_version_id
10759 ,p_update_wbs_flag => 'Y'
10760 ,x_return_status => l_return_status
10761 ,x_msg_count => l_msg_count
10762 ,x_msg_data => l_msg_data);
10763
10764 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10765 x_msg_count := FND_MSG_PUB.count_msg;
10766 if x_msg_count = 1 then
10767 pa_interface_utils_pub.get_messages
10768 (p_encoded => FND_API.G_TRUE,
10769 p_msg_index => 1,
10770 p_msg_count => l_msg_count,
10771 p_msg_data => l_msg_data,
10772 p_data => l_data,
10773 p_msg_index_out => l_msg_index_out);
10774 x_msg_data := l_data;
10775 end if;
10776 raise FND_API.G_EXC_ERROR;
10777 end if;
10778 END IF;
10779 --3035902: end process update flag changes
10780
10781 --ideally the following calls should have been cached. but due to time constraints
10782 --we need to write the code this way in multiple places.
10783 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
10784 THEN
10785 IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and l_published_version = 'N' ) THEN
10786 --Indent
10787 pa_fp_refresh_elements_pub.set_process_flag_proj(
10788 p_project_id => p_project_id
10789 ,p_request_id => null
10790 ,p_process_code => null
10791 ,p_refresh_required_flag => 'Y'
10792 ,x_return_status => l_return_status
10793 ,x_msg_count => l_msg_count
10794 ,x_msg_data => l_msg_data );
10795
10796 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10797 x_msg_count := FND_MSG_PUB.count_msg;
10798 if x_msg_count = 1 then
10799 pa_interface_utils_pub.get_messages
10800 (p_encoded => FND_API.G_TRUE,
10801 p_msg_index => 1,
10802 p_msg_count => l_msg_count,
10803 p_msg_data => l_msg_data,
10804 p_data => l_data,
10805 p_msg_index_out => l_msg_index_out);
10806 x_msg_data := l_data;
10807 end if;
10808 raise FND_API.G_EXC_ERROR;
10809 end if;
10810 END IF;
10811 END IF;
10812
10813 --End bug 3010538 (Indent )
10814
10815 --bug 3301192
10816 --check the task is a lowest task again and check whehter its no more a lowest task.
10817 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
10818
10819 IF l_lowest_task_flag1 = 'Y' AND
10820 l_lowest_task_flag2 = 'N'
10821 THEN
10822 IF l_wp_type = 'Y'
10823 THEN
10824 --now call call delete planning for task version id.
10825 l_task_ver_ids2.extend(1); /* Venky */
10826 l_task_ver_ids2(1) := p_task_version_id;
10827 /*Smukka Bug No. 3474141 Date 03/01/2004 */
10828 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
10829 DECLARE
10830 --p1 bug 3888432
10831 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10832 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
10833 SELECT resource_assignment_id
10834 FROM pa_resource_assignments
10835 WHERE wbs_element_Version_id = c_task_ver_id
10836 AND ta_display_flag = 'N';
10837 l_assign_id NUMBER := NULL;
10838 BEGIN
10839 OPEN get_assignment_id(p_task_version_id);
10840 FETCH get_assignment_id into l_assign_id;
10841 CLOSE get_assignment_id;
10842
10843 IF (l_assign_id IS NOT NULL) THEN
10844 l_assign_ids.extend(1);
10845 l_assign_ids(1) := l_assign_id;
10846 pa_fp_planning_transaction_pub.delete_planning_transactions
10847 (
10848 p_context => 'WORKPLAN'
10849 ,p_task_or_res => 'ASSIGNMENT'
10850 --- ,p_element_version_id_tbl => l_task_ver_ids2
10851 --- ,p_maintain_reporting_lines => 'Y'
10852 ,p_resource_assignment_tbl => l_assign_ids
10853 ,x_return_status => l_return_status
10854 ,x_msg_count => l_msg_count
10855 ,x_msg_data => l_msg_data
10856 );
10857 END IF;
10858 EXCEPTION
10859 WHEN OTHERS THEN
10860 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
10861 p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10862 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
10863 RAISE FND_API.G_EXC_ERROR;
10864 END;
10865
10866 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10867 x_msg_count := FND_MSG_PUB.count_msg;
10868 if x_msg_count = 1 then
10869 pa_interface_utils_pub.get_messages
10870 (p_encoded => FND_API.G_TRUE,
10871 p_msg_index => 1,
10872 p_msg_count => l_msg_count,
10873 p_msg_data => l_msg_data,
10874 p_data => l_data,
10875 p_msg_index_out => l_msg_index_out);
10876 x_msg_data := l_data;
10877 end if;
10878 raise FND_API.G_EXC_ERROR;
10879 end if;
10880 END IF; --<<l_wp_type>>
10881 END IF; --<<l_lowest_task_flag1>>
10882
10883 --bug 4149392
10884 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
10885 --end bug 4149392
10886
10887 x_return_status := FND_API.G_RET_STS_SUCCESS;
10888
10889 IF (p_commit = FND_API.G_TRUE) THEN
10890 COMMIT;
10891 END IF;
10892
10893 IF (p_debug_mode = 'Y') THEN
10894 pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK END');
10895 END IF;
10896
10897 EXCEPTION
10898 when FND_API.G_EXC_ERROR then
10899 if p_commit = FND_API.G_TRUE then
10900 rollback to indent_task_version_bulk;
10901 end if;
10902 x_return_status := FND_API.G_RET_STS_ERROR;
10903 when FND_API.G_EXC_UNEXPECTED_ERROR then
10904 if p_commit = FND_API.G_TRUE then
10905 rollback to indent_task_version_bulk;
10906 end if;
10907 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10908 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
10909 p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10910 p_error_text => SUBSTRB(SQLERRM,1,240));
10911 when OTHERS then
10912 if p_commit = FND_API.G_TRUE then
10913 rollback to indent_task_version_bulk;
10914 end if;
10915 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10916 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
10917 p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10918 p_error_text => SUBSTRB(SQLERRM,1,240));
10919 raise;
10920
10921 END Indent_Task_Version_Bulk;
10922
10923 -- Amit : Following procedure added for Bug 2838700
10924
10925 PROCEDURE OUTDENT_TASK_VERSION_BULK (
10926 p_api_version IN NUMBER :=1.0,
10927 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
10928 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
10929 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
10930 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
10931 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
10932 p_debug_mode IN VARCHAR2 :='N',
10933 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10934 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10935 p_task_version_id IN NUMBER,
10936 p_project_id IN NUMBER,
10937 p_record_version_number IN NUMBER,
10938 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10939 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
10940 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10941 ) IS
10942
10943
10944 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
10945 SELECT 'Y'
10946 FROM pa_proj_structure_types ppst
10947 ,pa_structure_types pst
10948 WHERE ppst.proj_element_id = c_structure_id
10949 AND ppst.structure_type_id = pst.structure_type_id
10950 AND pst.structure_type_class_code IN( 'FINANCIAL' );
10951
10952 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
10953 SELECT 'Y'
10954 FROM dual
10955 WHERE EXISTS(
10956 SELECT 'xyz'
10957 FROM pa_proj_elem_ver_structure
10958 WHERE proj_element_id = c_structure_id
10959 AND project_id = c_project_id
10960 AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
10961 );
10962
10963 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
10964 SELECT object_id_from1
10965 FROM pa_object_relationships
10966 WHERE object_id_to1 = c_elem_ver_id
10967 AND object_type_to = 'PA_TASKS'
10968 AND relationship_type = 'S';
10969
10970 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
10971 SELECT object_id_from1
10972 , object_relationship_id
10973 , record_version_number
10974 , relationship_subtype
10975 FROM pa_object_relationships
10976 WHERE object_id_to1 = p_child_version_id
10977 AND relationship_type = 'S';
10978
10979 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
10980
10981 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
10982 SELECT a.object_id_from1
10983 , a.weighting_percentage
10984 FROM pa_object_relationships a
10985 WHERE a.object_id_to1 = c_task_version_id
10986 AND a.object_type_to = 'PA_TASKS'
10987 AND a.relationship_type = 'S'
10988 AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
10989
10990 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
10991 SELECT '1'
10992 FROM dual
10993 WHERE EXISTS
10994 (SELECT 'xyz'
10995 FROM pa_object_relationships
10996 WHERE object_id_from1 = c_task_version_id
10997 AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
10998 AND relationship_type = 'S'
10999 );
11000
11001 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
11002 SELECT ptt.prog_entry_enable_flag
11003 FROM pa_task_types ptt
11004 , pa_proj_element_versions ppev,
11005 pa_proj_elements ppe
11006 WHERE ppev.element_version_id = c_element_version_id
11007 AND ppev.proj_element_id = ppe.proj_element_id
11008 AND ppe.TYPE_ID = ptt.task_type_id;
11009
11010 CURSOR get_peer_tasks IS
11011 SELECT b.object_id_to1 object_id_to1
11012 FROM pa_object_relationships a
11013 , pa_object_relationships b
11014 WHERE a.object_id_to1 = p_task_version_id
11015 AND a.object_type_to = 'PA_TASKS'
11016 AND a.object_id_from1 = b.object_id_from1
11017 AND a.object_type_from = b.object_type_from
11018 AND b.object_type_to = 'PA_TASKS'
11019 AND b.object_id_to1 <> p_task_version_id
11020 AND a.relationship_type = 'S'
11021 AND b.relationship_type = 'S';
11022
11023 c_get_peer_tasks get_peer_tasks%ROWTYPE;
11024
11025 --This cursor fetches all tasks that are child of ref task but now become child of p_task_version
11026 -- This case should not be possible for Outdent/Indent
11027 CURSOR cur_new_child(c_ref_task_version_id NUMBER, c_display_sequence NUMBER) IS
11028 SELECT por.object_id_to1, ppev.display_sequence, por.record_version_number, por.object_relationship_id
11029 FROM pa_object_relationships por,
11030 pa_proj_element_versions ppev
11031 WHERE object_id_from1 = c_ref_task_version_id
11032 AND object_id_to1 = element_version_id
11033 AND display_sequence > c_display_sequence
11034 AND relationship_type = 'S'
11035 order by display_sequence;
11036
11037
11038
11039 l_api_name CONSTANT VARCHAR(30) := 'OUTDENT_TASK_VERSION_BULK';
11040 l_api_version CONSTANT NUMBER := 1.0;
11041 l_return_status VARCHAR2(1);
11042 l_msg_count NUMBER;
11043 l_msg_data VARCHAR2(250);
11044 l_data VARCHAR2(250);
11045 l_msg_index_out NUMBER;
11046
11047 l_peer_or_sub VARCHAR2(30);
11048 l_project_id NUMBER;
11049 l_structure_id NUMBER;
11050 l_ref_task_id NUMBER;
11051 l_task_id NUMBER;
11052 l_task_record_version_number NUMBER;
11053 l_wbs_record_version_number NUMBER;
11054 l_dummy_char VARCHAR2(1);
11055 l_published_version VARCHAR2(1);
11056 l_relationship_subtype VARCHAR2(20);
11057 l_struc_version_from NUMBER;
11058 l_task_version_from NUMBER;
11059 l_version_from NUMBER;
11060 l_versioned VARCHAR2(1) := 'N';
11061 l_shared VARCHAR2(1) := 'N';
11062 l_rollup_task_id NUMBER;
11063
11064 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
11065 l_parent_ver_id NUMBER;
11066 l_error_msg_code VARCHAR2(30);
11067
11068 src_elem_ver_id NUMBER;
11069 src_proj_element_id NUMBER;
11070 src_wbs_number VARCHAR2(240);
11071 src_seq_number NUMBER;
11072 src_wbs_level NUMBER;
11073 src_parent_str_ver_id NUMBER;
11074 src_object_type VARCHAR2(30);
11075
11076 ref_elem_ver_id NUMBER;
11077 ref_proj_element_id NUMBER;
11078 ref_wbs_number VARCHAR2(240);
11079 ref_seq_number NUMBER;
11080 ref_wbs_level NUMBER;
11081 ref_parent_str_ver_id NUMBER;
11082 ref_object_type VARCHAR2(30);
11083
11084 l_old_parent_id NUMBER;
11085 l_dummy VARCHAR2(1);
11086
11087 l_new_weighting NUMBER(17,2);
11088 l_old_weighting NUMBER(17,2);
11089 l_progress_allowed VARCHAR2(1);
11090
11091 l_element_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
11092 l_proj_element_id_tab PA_FORECAST_GLOB.NumberTabTyp;
11093 l_object_type_tab PA_FORECAST_GLOB.VCTabTyp;
11094 l_project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
11095 l_parent_str_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
11096 l_display_sequence_tab PA_FORECAST_GLOB.NumberTabTyp;
11097 l_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
11098 l_old_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
11099 l_wbs_number_tab PA_FORECAST_GLOB.VCTabTyp;
11100 l_record_version_tab PA_FORECAST_GLOB.NumberTabTyp;
11101 l_changed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
11102
11103 l_wbs_number VARCHAR2(1000);
11104 src_branch_mask VARCHAR2(1000);
11105 ref_branch_mask VARCHAR2(1000);
11106 l_str1 VARCHAR2(1000);
11107 l_str2 VARCHAR2(1000);
11108 l_number NUMBER;
11109 l_new_wbs_number VARCHAR2(1000);
11110 l_user_id NUMBER;
11111 l_login_id NUMBER;
11112 l_update_new_child_rels VARCHAR2(1) := 'N';
11113 first_sub_task_below_src_flag boolean;
11114 last_sub_task_below_src VARCHAR2(1000);
11115 temp_old_branch_mask VARCHAR2(1000);
11116 temp_new_branch_mask VARCHAR2(1000);
11117 last_sub_task_number VARCHAR2(1000);
11118
11119 --bug 2843737
11120 CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
11121 select object_id_from1
11122 from pa_object_relationships
11123 where object_id_to1 = c_object_id_to1
11124 and relationship_type = 'S';
11125 l_ref_parent_ver_id NUMBER;
11126 --end bug 2843737
11127
11128 CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
11129 select wbs_number
11130 from pa_proj_element_versions
11131 where element_version_id = c_elem_ver_id
11132 and object_type ='PA_TASKS';
11133
11134 ref_parent_branch_mask VARCHAR2(1000);
11135
11136 -- hyau Bug 2852753
11137 l_delete_project_allowed VARCHAR2(1);
11138 l_update_proj_num_allowed VARCHAR2(1);
11139 l_update_proj_name_allowed VARCHAR2(1);
11140 l_update_proj_desc_allowed VARCHAR2(1);
11141 l_update_proj_dates_allowed VARCHAR2(1);
11142 l_update_proj_status_allowed VARCHAR2(1);
11143 l_update_proj_manager_allowed VARCHAR2(1);
11144 l_update_proj_org_allowed VARCHAR2(1);
11145 l_add_task_allowed VARCHAR2(1);
11146 l_delete_task_allowed VARCHAR2(1);
11147 l_update_task_num_allowed VARCHAR2(1);
11148 l_update_task_name_allowed VARCHAR2(1);
11149 l_update_task_dates_allowed VARCHAR2(1);
11150 l_update_task_desc_allowed VARCHAR2(1);
11151 l_update_parent_task_allowed VARCHAR2(1);
11152 l_update_task_org_allowed VARCHAR2(1);
11153
11154 l_err_code NUMBER := 0;
11155 l_err_stack VARCHAR2(200) := NULL;
11156 l_err_stage VARCHAR2(200) := NULL;
11157
11158 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
11159
11160 CURSOR get_product_code ( c_project_id NUMBER ) IS
11161 SELECT pm_product_code
11162 FROM PA_PROJECTS_ALL
11163 WHERE project_id = c_project_id;
11164
11165 l_cur_project_id NUMBER;
11166 CURSOR cur_proj_id
11167 IS
11168 SELECT project_id
11169 FROM pa_proj_element_versions
11170 WHERE element_version_id = p_structure_version_id;
11171
11172 -- end hyau Bug 2852753
11173
11174 -- Merged from 85
11175 --Bug 2947492 ( outdent )
11176
11177 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
11178 l_parent_task_id NUMBER;
11179 l_old_parent_task_id NUMBER;
11180 l_top_task_id NUMBER;
11181 l_old_top_task_id NUMBER;
11182 l_old_wbs_level NUMBER;
11183 i NUMBER;
11184
11185 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER )
11186 IS
11187 SELECT parent_task_id, top_task_id
11188 FROM pa_tasks
11189 WHERE project_id = c_project_id
11190 AND task_id = c_task_id;
11191
11192 CURSOR cur_new_child_task( c_project_id NUMBER, c_wbs_level NUMBER,
11193 c_task_id NUMBER , c_parent_task_id NUMBER )
11194 IS
11195 SELECT pt.task_id, pt.top_task_id, pt.parent_task_id
11196 FROM pa_tasks pt, pa_proj_element_versions ppev
11197 WHERE pt.wbs_level = c_wbs_level
11198 AND parent_task_id = c_parent_task_id
11199 AND pt.project_id = c_project_id
11200 AND pt.task_id = ppev.proj_element_id
11201 AND ppev.display_sequence > ( SELECT display_sequence FROM pa_proj_element_versions
11202 WHERE project_id = c_project_id
11203 AND object_type = 'PA_TASKS'
11204 AND proj_element_id = c_task_id );
11205
11206 --For financial tasks we can directly join with pa_proj-element_version using proj_element_id
11207 --bcoz this api will be called as long as there is only one version for financial otherwise
11208 --publishing will take care.
11209
11210 --End Bug 2947492 ( outdent )
11211 -- Merged from 85
11212
11213 --bug 3053281
11214 l_wp_type VARCHAR2(1);
11215 l_weighting_basis_Code VARCHAR2(30);
11216 --end bug 3053281
11217
11218 --3035902: process update flag changes
11219 cursor get_task_type_id(c_proj_element_id NUMBER) IS
11220 select type_id
11221 from pa_proj_elements
11222 where proj_element_id = c_proj_element_id;
11223 l_task_type_id NUMBER;
11224 l_wp_process_flag VARCHAR2(1);
11225 --3035902: end process update flag changes
11226
11227 --bug 3069306
11228 Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
11229 select object_id_to1
11230 from pa_object_relationships
11231 where relationshiP_type = 'S'
11232 and object_type_to = 'PA_TASKS'
11233 start with object_id_to1 = c_task_ver_id
11234 and object_type_to = 'PA_TASKS'
11235 and relationship_type = 'S'
11236 connect by prior object_id_from1 = object_id_to1
11237 and prior object_type_from = object_type_to
11238 and prior relationship_type = relationship_type
11239 intersect
11240 select a.object_id_to1
11241 from pa_object_relationships a, pa_proj_element_versions b
11242 where a.relationshiP_type = 'S'
11243 and a.object_id_from1 = b.parent_structure_version_id
11244 and b.element_version_id = c_task_ver_id
11245 and a.object_type_from = 'PA_STRUCTURES';
11246 l_old_par_ver_id NUMBER;
11247 l_new_par_ver_id NUMBER;
11248 --end bug 3069306
11249
11250 --bug 3301192
11251 /* Bug #: 3305199 SMukka */
11252 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
11253 /* l_task_ver_ids2 PA_PLSQL_DATATYPES.IdTabTyp; */
11254 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
11255 l_lowest_task_flag1 VARCHAR2(1);
11256 l_lowest_task_flag2 VARCHAR2(1);
11257 l_fin_task_flag VARCHAR2(1);
11258
11259 --Bug 16013002
11260 --Cursor to check if there are any child tasks (which are set to financial tasks) are present to
11261 --ref task but now become child of p_task_version_id
11262 CURSOR cur_child_tasks_exists(c_ref_task_version_id NUMBER, c_display_sequence NUMBER) IS
11263 SELECT 'Y'
11264 FROM pa_object_relationships por,
11265 pa_proj_element_versions ppev
11266 WHERE object_id_from1 = c_ref_task_version_id
11267 AND object_id_to1 = element_version_id
11268 AND display_sequence > c_display_sequence
11269 AND relationship_type = 'S'
11270 AND financial_task_flag='Y';
11271 l_child_task_exists VARCHAR2(1) ;
11272 --Bug 16013002
11273 BEGIN
11274
11275 pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK');
11276
11277 IF (p_debug_mode = 'Y') THEN
11278 pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK begin');
11279 END IF;
11280
11281 IF (p_commit = FND_API.G_TRUE) THEN
11282 savepoint OUTDENT_task_version_bulk;
11283 END IF;
11284
11285 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
11286 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11287 END IF;
11288
11289 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
11290 FND_MSG_PUB.initialize;
11291 END IF;
11292
11293 --bug 4075697
11294 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
11295 --bug 4075697
11296
11297
11298 --3035902: process update flag changes
11299 l_wp_process_flag := 'N';
11300 --3035902: end process update flag changes
11301
11302 -- hyau Bug 2852753
11303 IF p_calling_module = 'SELF_SERVICE' THEN
11304
11305 OPEN cur_proj_id;
11306 FETCH cur_proj_id INTO l_cur_project_id;
11307 CLOSE cur_proj_id;
11308
11309 OPEN get_product_code(l_cur_project_id);
11310 FETCH get_product_code INTO l_pm_product_code;
11311 CLOSE get_product_code;
11312
11313 If l_pm_product_code IS NOT NULL THEN
11314 pa_pm_controls.Get_Project_actions_allowed
11315 (P_PM_PRODUCT_CODE => l_pm_product_code,
11316 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
11317 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
11318 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
11319 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
11320 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
11321 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
11322 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
11323 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
11324 P_ADD_TASK_ALLOWED => l_add_task_allowed,
11325 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
11326 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
11327 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
11328 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
11329 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
11330 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
11331 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
11332 P_ERROR_CODE => l_err_code,
11333 P_ERROR_STACK => l_err_stack,
11334 P_ERROR_STAGE => l_err_stage );
11335
11336 IF l_err_code <> 0 THEN
11337 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11338 p_msg_name => l_err_stage);
11339 END IF;
11340 IF l_update_parent_task_allowed = 'N' THEN
11341 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11342 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
11343 raise FND_API.G_EXC_ERROR;
11344 END IF;
11345 END IF;
11346 END IF;
11347
11348 -- end hyau Bug 2852753
11349
11350 IF (p_structure_version_id IS NOT NULL) AND
11351 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
11352 IF ('N' = pa_proj_elements_utils.check_task_in_structure(
11353 p_structure_version_id,
11354 p_task_version_id)) THEN
11355 --deleting linked task. Error
11356 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
11357 raise FND_API.G_EXC_ERROR;
11358 END IF;
11359 END IF;
11360
11361 --hsiu added, for dates rollup
11362 --need to get peer task before it has been outdented.
11363 OPEN get_peer_tasks;
11364 LOOP
11365 FETCH get_peer_tasks INTO c_get_peer_tasks;
11366 EXIT WHEN get_peer_tasks%NOTFOUND;
11367 l_tasks_ver_ids.extend;
11368 l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
11369 --added for task status rollup
11370 l_rollup_task_id := c_get_peer_tasks.object_id_to1;
11371 END LOOP;
11372 CLOSE get_peer_tasks;
11373
11374 -- Get Source Task Information
11375 BEGIN
11376 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
11377 INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
11378 FROM PA_PROJ_ELEMENT_VERSIONS
11379 WHERE element_version_id = p_task_version_id
11380 AND project_id = p_project_id
11381 AND parent_structure_version_id = p_structure_version_id;
11382 EXCEPTION
11383 WHEN OTHERS THEN
11384 raise;
11385 END;
11386
11387
11388 -- Lifecycle Phase validation Changes should be implemented here
11389
11390 IF src_wbs_level = 1 then
11391 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
11392 ,p_msg_name => 'PA_PS_CANNOT_OUTDENT');
11393 raise FND_API.G_EXC_ERROR;
11394 END IF;
11395
11396 -- Get Refernce Task Information
11397
11398 BEGIN
11399 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
11400 INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number, ref_parent_str_ver_id, ref_object_type
11401 FROM PA_PROJ_ELEMENT_VERSIONS
11402 WHERE parent_structure_version_id = p_structure_version_id
11403 AND project_id = p_project_id
11404 AND (wbs_level = src_wbs_level-1)
11405 AND object_type = 'PA_TASKS'
11406 AND display_sequence =
11407 (SELECT max (display_sequence)
11408 FROM pa_proj_element_versions
11409 WHERE project_id = p_project_id
11410 AND parent_structure_version_id = p_structure_version_id
11411 AND (wbs_level = src_wbs_level-1)
11412 AND display_sequence < src_seq_number
11413 AND object_type = 'PA_TASKS');
11414 EXCEPTION
11415 WHEN OTHERS THEN
11416 raise;
11417 -- It will never return NO_DATA_FOUND as there will always at least one task with wbs_level-1
11418 END;
11419
11420 IF src_wbs_level < ref_wbs_level then
11421 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
11422 ,p_msg_name => 'PA_PS_CANNOT_OUTDENT');
11423 raise FND_API.G_EXC_ERROR;
11424 END IF;
11425
11426 -- While Outdenting always the source task will become peer of reference task
11427 l_peer_or_sub := 'PEER';
11428
11429 OPEN get_ref_parent_id(ref_elem_ver_id);
11430 FETCH get_ref_parent_id into l_ref_parent_ver_id;
11431 CLOSE get_ref_parent_id;
11432
11433 OPEN get_wbs_number(l_ref_parent_ver_id);
11434 FETCH get_wbs_number into ref_parent_branch_mask;
11435 CLOSE get_wbs_number;
11436
11437
11438 /* IF src_wbs_level = ref_wbs_level then
11439 l_peer_or_sub := 'SUB';
11440 ELSE
11441 l_peer_or_sub := 'PEER';
11442 END IF;
11443 */
11444
11445 -- Bug 8211519 : Dissallowing 'Outdenting' of a task if the task has a subproject association.
11446 if (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
11447 , src_proj_element_id
11448 , p_task_version_id),'N') = 'Y') then
11449
11450 IF (p_debug_mode = 'Y') THEN
11451 pa_debug.debug('ERROR !!! PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK ');
11452 END IF;
11453
11454 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11455 p_msg_name => 'PA_PS_TASK_HAS_SUB_PROJ');
11456 raise FND_API.G_EXC_ERROR;
11457
11458 end if;
11459
11460 --Check if ok to OUTDENT this task
11461 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
11462 p_task_ver_id => p_task_version_id
11463 ,x_return_status => l_return_status
11464 ,x_error_message_code => l_error_msg_code
11465 );
11466
11467 IF (l_return_status <> 'Y') THEN
11468 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11469 p_msg_name => l_error_msg_code);
11470 raise FND_API.G_EXC_ERROR;
11471 END IF;
11472
11473 --check if ok to create
11474 OPEN get_parent_version_id(ref_elem_ver_id);
11475 FETCH get_parent_version_id into l_parent_ver_id;
11476 CLOSE get_parent_version_id;
11477
11478 --bug 3069306
11479 --if financial task, check if changing parent ok
11480 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
11481 OPEN get_top_task_ver_id(l_parent_ver_id);
11482 FETCH get_top_task_ver_id into l_new_par_ver_id;
11483 CLOSE get_top_task_ver_id;
11484
11485 OPEN get_top_task_ver_id(p_task_version_id);
11486 FETCH get_top_task_ver_id into l_old_par_ver_id;
11487 CLOSE get_top_task_Ver_id;
11488
11489 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
11490 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11491 p_msg_name => 'PA_CANT_CHANGE_PARENT');
11492 raise FND_API.G_EXC_ERROR;
11493 END IF;
11494 END IF;
11495 --end bug 3069306
11496
11497 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
11498 p_parent_task_ver_id => l_parent_ver_id
11499 ,x_return_status => l_return_status
11500 ,x_error_message_code => l_error_msg_code
11501 );
11502
11503 IF (l_return_status <> 'Y') THEN
11504 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11505 p_msg_name => l_error_msg_code);
11506 raise FND_API.G_EXC_ERROR;
11507 END IF;
11508
11509 --Bug 16013002
11510 -- Check if the task which is going to outdent is financial or not
11511 l_fin_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(src_proj_element_id);
11512 IF l_fin_task_flag='Y' THEN
11513 OPEN cur_child_tasks_exists(ref_elem_ver_id, src_seq_number);
11514 FETCH cur_child_tasks_exists INTO l_child_task_exists;
11515 -- check if there exists peer tasks (which are set to financial tasks) below to the task which is going to outdent
11516 IF cur_child_tasks_exists%FOUND THEN
11517 --validating if it is ok to create subtask
11518 pa_task_utils.check_create_subtask_ok(x_task_id => src_proj_element_id
11519 , x_err_code => l_err_code
11520 , x_err_stage => l_err_stage
11521 , x_err_stack => l_err_stack);
11522 IF (l_err_code <> 0) THEN
11523 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11524 p_msg_name => substrb(l_err_stage,1,30));
11525 raise FND_API.G_EXC_ERROR;
11526 END IF;
11527 END IF;
11528 CLOSE cur_child_tasks_exists;
11529 END IF;
11530 --Bug 16013002
11531 -- Added for FP_M changes. Bug 3305199 : Bhumesh xxx
11532
11533 If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
11534 IN ('SHARE_PARTIAL')
11535 Then
11536
11537 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
11538 p_task_version_id => p_task_version_id
11539 , p_ref_task_version_id => ref_elem_ver_id
11540 , x_return_status => x_return_status
11541 , x_msg_count => x_msg_count
11542 , x_msg_data => x_msg_data
11543 , x_error_msg_code => l_error_msg_code);
11544
11545 -- IF (x_return_status <> 'Y') THEN --Bug 3831786 Commented
11546 IF (x_return_status <> 'S') THEN --Bug 3831786 Added
11547 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11548 p_msg_name => l_error_msg_code);
11549 raise FND_API.G_EXC_ERROR;
11550 End If;
11551 End If;
11552
11553 --check the task is a lowest task bug 3301192
11554 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
11555
11556 -- End of FP_M changes
11557
11558 /*
11559
11560 The processing done by the followig two calls is made now as plsql table bulk processing
11561
11562 PA_TASK_PUB1.Update_Task_Version
11563 ( p_validate_only => FND_API.G_FALSE,
11564 p_ref_task_version_id => l_ref_task_version_id,
11565 p_peer_or_sub => 'PEER',
11566 p_task_version_id => p_task_version_id,
11567 p_record_version_number => p_record_version_number,
11568 p_action => 'OUTDENT',
11569 x_return_status => l_return_status,
11570 x_msg_count => l_msg_count,
11571 x_msg_data => l_msg_data );
11572
11573 PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
11574 ( p_commit => p_commit
11575 ,p_debug_mode => p_debug_mode
11576 ,p_parent_structure_ver_id => l_parent_structure_version_id
11577 ,p_task_id => p_task_version_id
11578 ,p_display_seq => l_display_sequence
11579 ,p_action => 'OUTDENT'
11580 ,p_parent_task_id => NULL
11581 ,x_return_status => l_return_status );
11582
11583 */
11584
11585
11586 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
11587
11588 -- Logic Added for plsql table
11589 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
11590
11591 l_element_version_id_tab.delete;
11592 l_proj_element_id_tab.delete;
11593 l_object_type_tab.delete;
11594 l_project_id_tab.delete;
11595 l_parent_str_version_id_tab.delete;
11596 l_display_sequence_tab.delete;
11597 l_wbs_level_tab.delete;
11598 l_old_wbs_level_tab.delete;
11599 l_wbs_number_tab.delete;
11600 l_record_version_tab.delete;
11601 l_changed_flag_tab.delete;
11602
11603 BEGIN
11604 SELECT distinct element_version_id, proj_element_id, object_type,
11605 project_id, parent_structure_version_id,
11606 display_sequence, wbs_level, wbs_number,
11607 record_version_number, 'N' changed_flag
11608 BULK COLLECT INTO l_element_version_id_tab,
11609 l_proj_element_id_tab, l_object_type_tab,
11610 l_project_id_tab, l_parent_str_version_id_tab,
11611 l_display_sequence_tab, l_wbs_level_tab,
11612 l_wbs_number_tab, l_record_version_tab,
11613 l_changed_flag_tab
11614 FROM
11615 pa_proj_element_versions
11616 WHERE
11617 project_id = p_project_id
11618 AND parent_structure_version_id = p_structure_version_id
11619 AND object_type = 'PA_TASKS'
11620 AND(
11621 element_version_id = p_task_version_id -- Source task itself
11622 OR element_version_id IN -- All tasks below the source task
11623 (select object_id_to1
11624 from pa_object_relationships
11625 where relationship_type = 'S'
11626 and object_type_to = 'PA_TASKS'
11627 start with object_id_from1 = l_ref_parent_ver_id
11628 connect by object_id_from1 = PRIOR object_id_to1
11629 and relationship_type = prior relationship_type
11630 and relationship_type = 'S')
11631 )
11632 ORDER BY display_sequence ;
11633 l_old_wbs_level_tab := l_wbs_level_tab;
11634 EXCEPTION
11635 WHEN OTHERS THEN
11636 raise;
11637 END;
11638
11639 --bug 4214825, commented out this code as this validation is not required in case of outdent
11640 /*--bug 3475920
11641 --Need loop to check all new subtasks and see if ok (for deliverable type task)
11642 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11643 --check if moving to subtask ok
11644 IF (l_element_version_id_tab(j) <> p_task_version_id) Then
11645 IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_element_version_id_tab(j)) = 'Y' THEN
11646 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11647 p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
11648 raise FND_API.G_EXC_ERROR;
11649 END IF;
11650 END IF;
11651 END LOOP;
11652 --end bug 3475920*/
11653
11654
11655 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
11656 -- Here we can also incorporate sequence number update. In OUTDENT sequence number does not change.
11657
11658 -- Update wbs level
11659
11660 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11661 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
11662 l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
11663 l_changed_flag_tab(j) := 'Y';
11664 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
11665 -- Direct Childs of source
11666 l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
11667 l_changed_flag_tab(j) := 'Y';
11668 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
11669 -- Exit level changes, IT means no Direct childs are left
11670 EXIT;
11671 END IF;
11672 END LOOP;
11673
11674
11675 -- Update wbs_number
11676
11677
11678 src_branch_mask := src_wbs_number;
11679 ref_branch_mask := ref_wbs_number;
11680 first_sub_task_below_src_flag := false;
11681
11682
11683 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11684 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
11685 IF src_wbs_level = 2 THEN -- This is going to be a top task
11686 l_wbs_number := to_char(to_number(ref_wbs_number)+1);
11687 l_wbs_number_tab(j) := l_wbs_number;
11688 l_changed_flag_tab(j) := 'Y';
11689 l_new_wbs_number := l_wbs_number;
11690 ELSE
11691 l_number := instr(ref_wbs_number,'.', -1, 1);
11692 l_str1 := substr(ref_wbs_number, 1, l_number -1);
11693 l_str2 := substr(ref_wbs_number, l_number + 1);
11694 l_str2 := to_char(to_number(l_str2 + 1));
11695 l_wbs_number := l_str1 || '.' || l_str2;
11696 l_wbs_number_tab(j) := l_wbs_number;
11697 l_changed_flag_tab(j) := 'Y';
11698 l_new_wbs_number := l_wbs_number;
11699 END IF;
11700 ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
11701 IF l_display_sequence_tab(j) > src_seq_number THEN
11702 IF src_wbs_level = 2 THEN -- Source is going to be a top task
11703 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
11704 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
11705 -- Direct childs of source
11706 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
11707 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11708 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
11709 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
11710 l_wbs_number_tab(j) := l_wbs_number;
11711 l_changed_flag_tab(j) := 'Y';
11712 IF l_old_wbs_level_tab(j) = src_wbs_level+1 THEN
11713 first_sub_task_below_src_flag := true;
11714 last_sub_task_below_src := l_wbs_number;
11715 END IF;
11716 ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
11717 AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
11718 IF first_sub_task_below_src_flag = false THEN
11719 l_wbs_number := l_new_wbs_number || '.1';
11720 first_sub_task_below_src_flag := true;
11721 last_sub_task_below_src := l_wbs_number;
11722 temp_old_branch_mask := l_wbs_number_tab(j);
11723 temp_new_branch_mask := l_wbs_number;
11724 l_wbs_number_tab(j) := l_wbs_number;
11725 l_changed_flag_tab(j) := 'Y';
11726 ELSE
11727 IF (l_old_wbs_level_tab(j) = src_wbs_level) THEN
11728 l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
11729 l_str1 := to_char(to_number(l_str1 + 1));
11730 l_wbs_number := l_new_wbs_number || '.' || l_str1;
11731 temp_old_branch_mask := l_wbs_number_tab(j);
11732 temp_new_branch_mask := l_wbs_number;
11733 l_wbs_number_tab(j) := l_wbs_number;
11734 l_changed_flag_tab(j) := 'Y';
11735 last_sub_task_below_src := l_wbs_number;
11736 ELSE
11737 l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
11738 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11739 l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
11740 l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
11741 l_wbs_number_tab(j) := l_wbs_number;
11742 l_changed_flag_tab(j) := 'Y';
11743 END IF;
11744 END IF;
11745 ELSE
11746 IF(instr(l_wbs_number_tab(j), '.') <> 0) then
11747 l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
11748 l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
11749 l_str1 := to_char(to_number(l_str1) + 1);
11750 l_wbs_number := l_str1 || l_str2;
11751 l_wbs_number_tab(j) := l_wbs_number;
11752 l_changed_flag_tab(j) := 'Y';
11753 ELSE
11754 l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) + 1);
11755 l_wbs_number_tab(j) := l_wbs_number;
11756 l_changed_flag_tab(j) := 'Y';
11757 END IF;
11758 END IF;
11759 ELSE
11760 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
11761 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
11762 -- Direct childs of source
11763 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
11764 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11765 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
11766 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
11767 l_wbs_number_tab(j) := l_wbs_number;
11768 l_changed_flag_tab(j) := 'Y';
11769 IF (l_old_wbs_level_tab(j) = src_wbs_level+1) THEN
11770 first_sub_task_below_src_flag := true;
11771 last_sub_task_below_src := l_wbs_number;
11772 END IF;
11773 ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
11774 AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
11775 IF first_sub_task_below_src_flag = false THEN
11776 l_wbs_number := l_new_wbs_number || '.1';
11777 first_sub_task_below_src_flag := true;
11778 last_sub_task_below_src := l_wbs_number;
11779 temp_old_branch_mask := l_wbs_number_tab(j);
11780 temp_new_branch_mask := l_wbs_number;
11781 l_wbs_number_tab(j) := l_wbs_number;
11782 l_changed_flag_tab(j) := 'Y';
11783 ELSE
11784 IF l_old_wbs_level_tab(j) = src_wbs_level THEN
11785 l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
11786 l_str1 := to_char(to_number(l_str1 + 1));
11787 l_wbs_number := l_new_wbs_number || '.' || l_str1;
11788 temp_old_branch_mask := l_wbs_number_tab(j);
11789 temp_new_branch_mask := l_wbs_number;
11790 l_wbs_number_tab(j) := l_wbs_number;
11791 l_changed_flag_tab(j) := 'Y';
11792 last_sub_task_below_src := l_wbs_number;
11793 ELSE
11794 l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
11795 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11796 l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
11797 l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
11798 l_wbs_number_tab(j) := l_wbs_number;
11799 l_changed_flag_tab(j) := 'Y';
11800 END IF;
11801 END IF;
11802 ELSE
11803 l_str1 := substr(l_wbs_number_tab(j), length(ref_parent_branch_mask) + 2);
11804 IF(instr(l_str1, '.') <> 0) THEN
11805 l_str2 := substr(l_str1, instr(l_str1, '.'));
11806 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
11807 l_str1 := to_char(to_number(l_str1) + 1);
11808 l_wbs_number := ref_parent_branch_mask || '.' || l_str1 || l_str2;
11809 l_wbs_number_tab(j) := l_wbs_number;
11810 l_changed_flag_tab(j) := 'Y';
11811 ELSE
11812 l_str1:= to_char(to_number(l_str1) + 1);
11813 l_wbs_number := ref_parent_branch_mask || '.' || l_str1;
11814 l_wbs_number_tab(j) := l_wbs_number;
11815 l_changed_flag_tab(j) := 'Y';
11816 END IF;
11817 END IF;
11818 END IF;
11819 END IF;
11820 END IF;
11821 END LOOP;
11822
11823
11824 l_user_id := fnd_global.user_id;
11825 l_login_id := fnd_global.login_id;
11826
11827 -- Locking should be implemented here
11828
11829 FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
11830 UPDATE PA_PROJ_ELEMENT_VERSIONS
11831 SET
11832 wbs_level = l_wbs_level_tab(j) ,
11833 wbs_number = l_wbs_number_tab(j) ,
11834 last_update_date = sysdate ,
11835 last_updated_by = l_user_id ,
11836 last_update_login = l_login_id ,
11837 record_version_number = l_record_version_tab(j)+1
11838 WHERE element_version_id = l_element_version_id_tab(j)
11839 AND l_changed_flag_tab(j)='Y';
11840
11841
11842 -- Update Relationship
11843
11844 IF ref_object_type = 'PA_TASKS'
11845 THEN
11846 IF l_peer_or_sub = 'PEER'
11847 THEN
11848 OPEN cur_obj_rel( ref_elem_ver_id );
11849 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
11850 CLOSE cur_obj_rel;
11851
11852 l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
11853
11854 IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
11855 THEN
11856 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
11857 l_task_version_from := null;
11858 ELSE
11859 l_task_version_from := v_cur_obj_rel_rec.object_id_from1;
11860 l_struc_version_from := null;
11861 END IF;
11862
11863 --There could be some tasks with sequence number greater than the p_task_version that now become
11864 --children of p_task_version.
11865 -- I don't think so that this is needed. This is not possible in any case
11866 l_update_new_child_rels := 'Y';
11867
11868 ELSE -- l_peer_or_sub = 'SUB' Basically this case will not be for OUTDENT
11869 --parent task is the reference task
11870 l_task_version_from := ref_elem_ver_id;
11871 l_struc_version_from := null;
11872 l_relationship_subtype := 'TASK_TO_TASK';
11873 END IF;
11874 -- The following case is not possible for Indent/Outdent
11875 ELSIF ref_object_type = 'PA_STRUCTURES'
11876 THEN
11877 l_struc_version_from := ref_elem_ver_id;
11878 l_task_version_from := null;
11879 l_relationship_subtype := 'STRUCTURE_TO_TASK';
11880 END IF; -- ref_object_type = 'PA_TASKS'
11881
11882
11883 --update relatonship of the task version p_task_version.
11884 --set structure_version_from and task_version_from accordingly.
11885 OPEN cur_obj_rel( p_task_version_id );
11886 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
11887 CLOSE cur_obj_rel;
11888
11889 --for task weighting
11890 OPEN get_task_weighting(p_task_version_id);
11891 FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
11892 CLOSE get_task_weighting;
11893
11894
11895 IF(l_task_version_from is not null) THEN
11896 l_version_from := l_task_version_from;
11897 ELSE
11898 l_version_from := l_struc_version_from;
11899 END IF;
11900
11901 IF (l_version_from = p_task_version_id) THEN
11902 l_new_weighting := l_old_weighting;
11903 ELSE
11904 OPEN get_sub_tasks(l_version_from);
11905 FETCH get_sub_tasks into l_dummy;
11906 IF (get_sub_tasks%NOTFOUND) THEN
11907 l_new_weighting := 100;
11908 --bug 2673570
11909 OPEN check_progress_allowed(p_task_version_id);
11910 FETCH check_progress_allowed INTO l_progress_allowed;
11911 CLOSE check_progress_allowed;
11912
11913 if l_progress_allowed = 'N' then
11914 l_new_weighting := 0;
11915 end if;
11916 --bug 2673570
11917 ELSE
11918 l_new_weighting := 0;
11919 END IF;
11920 CLOSE get_sub_tasks;
11921 END IF;
11922
11923 PA_RELATIONSHIP_PVT.Update_Relationship
11924 (
11925 p_api_version => p_api_version
11926 ,p_init_msg_list => p_init_msg_list
11927 ,p_commit => p_commit
11928 ,p_validate_only => p_validate_only
11929 ,p_validation_level => p_validation_level
11930 ,p_calling_module => p_calling_module
11931 ,p_debug_mode => p_debug_mode
11932 ,p_max_msg_count => p_max_msg_count
11933 ,p_object_relationship_id => v_cur_obj_rel_rec.object_relationship_id
11934 ,p_project_id_from => null
11935 ,p_structure_id_from => null
11936 ,p_structure_version_id_from => l_struc_version_from
11937 ,p_task_version_id_from => l_task_version_from
11938 ,p_project_id_to => null
11939 ,p_structure_id_to => null
11940 ,p_structure_version_id_to => null
11941 ,p_task_version_id_to => p_task_version_id
11942 ,p_relationship_type => 'S'
11943 ,p_relationship_subtype => l_relationship_subtype
11944 ,p_weighting_percentage => l_new_weighting
11945 ,p_record_version_number => v_cur_obj_rel_rec.record_version_number
11946 ,x_return_status => l_return_status
11947 ,x_msg_count => l_msg_count
11948 ,x_msg_data => l_msg_data
11949 );
11950
11951
11952 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11953 x_msg_count := FND_MSG_PUB.count_msg;
11954 IF x_msg_count = 1 then
11955 pa_interface_utils_pub.get_messages
11956 (p_encoded => FND_API.G_TRUE,
11957 p_msg_index => 1,
11958 p_msg_count => l_msg_count,
11959 p_msg_data => l_msg_data,
11960 p_data => l_data,
11961 p_msg_index_out => l_msg_index_out);
11962 x_msg_data := l_data;
11963 END IF;
11964 raise FND_API.G_EXC_ERROR;
11965 END IF;
11966
11967 -- I don't think the following code is needed. This case is impossible in case of OUTDENT
11968 IF l_update_new_child_rels = 'Y' -- AND p_action IN( 'OUTDENT' )
11969 THEN
11970 FOR cur_new_child_rec in cur_new_child(ref_elem_ver_id, src_seq_number) LOOP
11971 OPEN get_sub_tasks(p_task_version_id);
11972 FETCH get_sub_tasks into l_dummy;
11973 IF (get_sub_tasks%NOTFOUND) THEN
11974 l_new_weighting := 100;
11975 ELSE
11976 l_new_weighting := 0;
11977 END IF;
11978 CLOSE get_sub_tasks;
11979
11980 --bug 4099488
11981 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_task_version_id, cur_new_child_rec.object_id_to1) = 'N' THEN
11982 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11983 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
11984 raise FND_API.G_EXC_ERROR;
11985 END IF;
11986 --end bug 4099488
11987
11988 PA_RELATIONSHIP_PVT.Update_Relationship
11989 (
11990 p_api_version => p_api_version
11991 ,p_init_msg_list => p_init_msg_list
11992 ,p_commit => p_commit
11993 ,p_validate_only => p_validate_only
11994 ,p_validation_level => p_validation_level
11995 ,p_calling_module => p_calling_module
11996 ,p_debug_mode => p_debug_mode
11997 ,p_max_msg_count => p_max_msg_count
11998 ,p_object_relationship_id => cur_new_child_rec.object_relationship_id
11999 ,p_project_id_from => null
12000 ,p_structure_id_from => null
12001 ,p_structure_version_id_from => null
12002 ,p_task_version_id_from => p_task_version_id
12003 ,p_project_id_to => null
12004 ,p_structure_id_to => null
12005 ,p_structure_version_id_to => null
12006 ,p_task_version_id_to => cur_new_child_rec.object_id_to1
12007 ,p_relationship_type => 'S'
12008 ,p_relationship_subtype => 'TASK_TO_TASK'
12009 ,p_weighting_percentage => l_new_weighting
12010 ,p_record_version_number => cur_new_child_rec.record_version_number
12011 ,x_return_status => x_return_status
12012 ,x_msg_count => x_msg_count
12013 ,x_msg_data => x_msg_data
12014 );
12015
12016 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12017 x_msg_count := FND_MSG_PUB.count_msg;
12018 IF x_msg_count = 1 then
12019 pa_interface_utils_pub.get_messages
12020 (p_encoded => FND_API.G_TRUE,
12021 p_msg_index => 1,
12022 p_msg_count => l_msg_count,
12023 p_msg_data => l_msg_data,
12024 p_data => l_data,
12025 p_msg_index_out => l_msg_index_out);
12026 x_msg_data := l_data;
12027 END IF;
12028 raise FND_API.G_EXC_ERROR;
12029 END IF;
12030
12031 END LOOP;
12032 END IF;
12033
12034 --for task weighting
12035 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
12036 p_task_version_id => l_old_parent_id
12037 ,x_return_status => l_return_status
12038 ,x_msg_count => l_msg_count
12039 ,x_msg_data => l_msg_data
12040 );
12041
12042 x_msg_count := FND_MSG_PUB.count_msg;
12043 IF x_msg_count = 1 then
12044 pa_interface_utils_pub.get_messages
12045 (p_encoded => FND_API.G_TRUE,
12046 p_msg_index => 1,
12047 p_msg_count => l_msg_count,
12048 p_msg_data => l_msg_data,
12049 p_data => l_data,
12050 p_msg_index_out => l_msg_index_out);
12051 x_msg_data := l_data;
12052 END IF;
12053
12054 --bug 2673570
12055 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
12056 p_task_version_id => p_task_version_id
12057 ,x_return_status => l_return_status
12058 ,x_msg_count => l_msg_count
12059 ,x_msg_data => l_msg_data
12060 );
12061
12062 x_msg_count := FND_MSG_PUB.count_msg;
12063 IF x_msg_count = 1 then
12064 pa_interface_utils_pub.get_messages
12065 (p_encoded => FND_API.G_TRUE,
12066 p_msg_index => 1,
12067 p_msg_count => l_msg_count,
12068 p_msg_data => l_msg_data,
12069 p_data => l_data,
12070 p_msg_index_out => l_msg_index_out);
12071 x_msg_data := l_data;
12072 END IF;
12073 --bug 2673570
12074 --end changes for task weighting
12075
12076
12077 /*** End Update_task_version and Update_wbs_number code ***/
12078
12079 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
12080 FROM pa_proj_element_versions
12081 WHERE element_version_id = ( Select parent_structure_version_id
12082 from pa_proj_element_versions
12083 where element_version_id = p_task_version_id )
12084 AND object_type = 'PA_STRUCTURES';
12085
12086
12087 --Do financial task check
12088 --If financial
12089 OPEN cur_struc_type( l_structure_id );
12090 FETCH cur_struc_type INTO l_dummy_char;
12091 IF cur_struc_type%FOUND
12092 THEN
12093 --If structure has any published versions.
12094 l_published_version := 'N';
12095 OPEN cur_pub_versions( l_structure_id, l_project_id );
12096 FETCH cur_pub_versions INTO l_published_version;
12097 CLOSE cur_pub_versions;
12098
12099
12100 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
12101 l_project_id);
12102 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
12103 l_project_id);
12104
12105 --o IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
12106 l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --outdent in corresponding task in pa_tasks
12107
12108 IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
12109 (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
12110 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
12111 THEN
12112
12113 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
12114 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
12115 FROM PA_TASKS pt,
12116 pa_proj_elem_ver_structure ppa,
12117 PA_PROJ_ELEMENT_VERSIONS ppev
12118 WHERE ppev.element_version_id = p_task_version_id
12119 AND ppev.parent_structure_version_id = ppa.element_version_id
12120 AND ppev.project_id = ppa.project_id
12121 AND ppev.proj_element_id = pt.task_id;
12122
12123 -- Merged from 85
12124 SELECT record_version_number, parent_task_id, wbs_level --get old parent id for bug 2947492 (outdent )
12125 ,top_task_id
12126 INTO l_task_record_version_number, l_old_parent_task_id, l_old_wbs_level
12127 ,l_old_top_task_id
12128 FROM pa_tasks
12129 WHERE task_id = l_task_id
12130 AND project_id = l_project_id;
12131 -- Merged from 85
12132
12133 -- Merged from 85
12134 --Bug 2947492 ( outdent )
12135
12136 --The following cursor will pick those taks that become child tasks of outdenting task
12137 --which were initially at the same level with display sequence greater than the outdenting task.
12138 /*
12139 i:= 0;
12140 FOR cur_new_child_task_rec in cur_new_child_task( l_project_id, l_old_wbs_level,
12141 l_task_id, l_old_parent_task_id ) LOOP
12142
12143 i := i + 1;
12144
12145 l_plannable_tasks_tbl(i).impacted_task_id := cur_new_child_task_rec.task_id;
12146 l_plannable_tasks_tbl(i).action := 'REPARENT';
12147 l_plannable_tasks_tbl(i).old_parent_task_id := cur_new_child_task_rec.parent_task_id;
12148 l_plannable_tasks_tbl(i).New_parent_task_id := l_task_id;
12149 l_plannable_tasks_tbl(i).top_task_id := cur_new_child_task_rec.top_task_id;
12150
12151 --First call the check_reparent ok
12152 --This should have been called in the beginning but due to lot of complexity involved in getting
12153 --new parent task id it is decided to call this later stage as long as we rollback the whole operation
12154 --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
12155
12156 PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
12157 p_task_id => cur_new_child_task_rec.task_id
12158 ,p_old_parent_task_id => cur_new_child_task_rec.parent_task_id
12159 ,p_new_parent_task_id => l_task_id
12160 ,x_return_status => l_return_status
12161 ,x_msg_count => l_msg_count
12162 ,x_msg_data => l_msg_data
12163 );
12164
12165 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12166 x_msg_count := FND_MSG_PUB.count_msg;
12167 IF x_msg_count = 1 then
12168 pa_interface_utils_pub.get_messages
12169 (p_encoded => FND_API.G_TRUE,
12170 p_msg_index => 1,
12171 p_msg_count => l_msg_count,
12172 p_msg_data => l_msg_data,
12173 p_data => l_data,
12174 p_msg_index_out => l_msg_index_out);
12175 x_msg_data := l_data;
12176 END IF;
12177 raise FND_API.G_EXC_ERROR;
12178 END IF;
12179
12180 END LOOP;
12181 --End Bug 2947492 ( outdent )
12182 */ ---commenitng out, please check venkatesh mail dated 22 jan 04
12183
12184 -- Merged from 85
12185
12186 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
12187 p_project_id => l_project_id
12188 ,p_task_id => l_task_id
12189 ,p_edit_mode => 'OUTDENT'
12190 ,p_record_version_number => l_task_record_version_number
12191 ,p_wbs_record_version_number => 1
12192 ,x_return_status => l_return_status
12193 ,x_msg_count => l_msg_count
12194 ,x_msg_data => l_msg_data );
12195
12196 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12197 x_msg_count := FND_MSG_PUB.count_msg;
12198 IF x_msg_count = 1 then
12199 pa_interface_utils_pub.get_messages
12200 (p_encoded => FND_API.G_TRUE,
12201 p_msg_index => 1,
12202 p_msg_count => l_msg_count,
12203 p_msg_data => l_msg_data,
12204 p_data => l_data,
12205 p_msg_index_out => l_msg_index_out);
12206 x_msg_data := l_data;
12207 END IF;
12208 raise FND_API.G_EXC_ERROR;
12209 END IF;
12210
12211 --Bug 2947492 (outdent )
12212 --
12213
12214 OPEN get_parent_task_id( l_task_id , l_project_id );
12215 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
12216 CLOSE get_parent_task_id;
12217
12218 --bug 2967204
12219 --Cannot move out of the current hierarchy
12220 IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
12221 THEN
12222 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12223 p_msg_name => 'PA_CANT_CHANGE_PARENT');
12224 raise FND_API.G_EXC_ERROR;
12225 END IF;
12226 --End bug 2967204
12227
12228 /*
12229 --First call the check_reparent ok
12230 --This should have been called in the beginning but due to lot of complexity involved in getting
12231 --new parent task id it is decided to call this later stage as long as we rollback the whole operation
12232 --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
12233 PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
12234 p_task_id => l_task_id
12235 ,p_old_parent_task_id => l_old_parent_task_id
12236 ,p_new_parent_task_id => l_parent_task_id
12237 ,x_return_status => l_return_status
12238 ,x_msg_count => l_msg_count
12239 ,x_msg_data => l_msg_data
12240 );
12241
12242 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12243 x_msg_count := FND_MSG_PUB.count_msg;
12244 IF x_msg_count = 1 then
12245 pa_interface_utils_pub.get_messages
12246 (p_encoded => FND_API.G_TRUE,
12247 p_msg_index => 1,
12248 p_msg_count => l_msg_count,
12249 p_msg_data => l_msg_data,
12250 p_data => l_data,
12251 p_msg_index_out => l_msg_index_out);
12252 x_msg_data := l_data;
12253 END IF;
12254 raise FND_API.G_EXC_ERROR;
12255 END IF;
12256 */ --check venkatesh mail dated 22 jan 04
12257
12258 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
12259 i := NVL( l_plannable_tasks_tbl.last, 0 ) + 1;
12260
12261 l_plannable_tasks_tbl(i).impacted_task_id := l_task_id;
12262 l_plannable_tasks_tbl(i).action := 'REPARENT';
12263 l_plannable_tasks_tbl(i).old_parent_task_id := l_old_parent_task_id;
12264 l_plannable_tasks_tbl(i).New_parent_task_id := l_parent_task_id;
12265 l_plannable_tasks_tbl(i).top_task_id := l_top_task_id;
12266
12267
12268 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
12269 p_project_id => p_project_id
12270 , p_impacted_tasks_tbl => l_plannable_tasks_tbl
12271 , x_return_status => l_return_status
12272 , x_msg_data => l_msg_data
12273 , x_msg_count => l_msg_count
12274 );
12275
12276 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12277 x_msg_count := FND_MSG_PUB.count_msg;
12278 IF x_msg_count = 1 then
12279 pa_interface_utils_pub.get_messages
12280 (p_encoded => FND_API.G_TRUE,
12281 p_msg_index => 1,
12282 p_msg_count => l_msg_count,
12283 p_msg_data => l_msg_data,
12284 p_data => l_data,
12285 p_msg_index_out => l_msg_index_out);
12286 x_msg_data := l_data;
12287 END IF;
12288 raise FND_API.G_EXC_ERROR;
12289 END IF;
12290 bug 3010538 */
12291
12292 --End Bug 2947492 (outdent )
12293
12294 END IF;
12295 END IF;
12296 CLOSE cur_struc_type;
12297
12298 -- Added for date rollup; workplan only
12299
12300 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
12301
12302 -- Added for FP_M changes Bug 3305199 : Bhumesh
12303 If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
12304
12305 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
12306 p_structure_version_id => P_Structure_Version_ID
12307 ,p_dirty_flag => 'Y' --bug 3902282
12308 ,x_return_status => x_return_status
12309 ,x_msg_count => x_msg_count
12310 ,x_msg_data => x_msg_data
12311 );
12312
12313 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
12314 x_msg_count := FND_MSG_PUB.count_msg;
12315 If x_msg_count = 1 then
12316 pa_interface_utils_pub.get_messages
12317 (p_encoded => FND_API.G_TRUE,
12318 p_msg_index => 1,
12319 p_msg_count => l_msg_count,
12320 p_msg_data => l_msg_data,
12321 p_data => l_data,
12322 p_msg_index_out => l_msg_index_out);
12323 x_msg_data := l_data;
12324 End If;
12325 raise FND_API.G_EXC_ERROR;
12326 End If;
12327 End If;
12328 -- End of FP_M changes
12329
12330 l_tasks_ver_ids.extend;
12331 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
12332
12333 --added for task status rollup
12334 IF (l_rollup_task_id IS NULL) THEN
12335 l_rollup_task_id := p_task_version_id;
12336 END IF;
12337
12338 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
12339 p_commit => FND_API.G_FALSE,
12340 p_element_versions => l_tasks_ver_ids,
12341 x_return_status => l_return_status,
12342 x_msg_count => l_msg_count,
12343 x_msg_data => l_msg_data);
12344
12345 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12346 x_msg_count := FND_MSG_PUB.count_msg;
12347 if x_msg_count = 1 then
12348 pa_interface_utils_pub.get_messages
12349 (p_encoded => FND_API.G_TRUE,
12350 p_msg_index => 1,
12351 p_msg_count => l_msg_count,
12352 p_msg_data => l_msg_data,
12353 p_data => l_data,
12354 p_msg_index_out => l_msg_index_out);
12355 x_msg_data := l_data;
12356 end if;
12357 raise FND_API.G_EXC_ERROR;
12358 end if;
12359
12360 --if versioning is off, rollup.
12361 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
12362 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
12363 p_structure_version_id => p_structure_version_id
12364 ,p_element_version_id => l_rollup_task_id
12365 ,x_return_status => l_return_status
12366 ,x_msg_count => l_msg_count
12367 ,x_msg_data => l_msg_data
12368 );
12369
12370 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12371 x_msg_count := FND_MSG_PUB.count_msg;
12372 if x_msg_count = 1 then
12373 pa_interface_utils_pub.get_messages
12374 (p_encoded => FND_API.G_TRUE,
12375 p_msg_index => 1,
12376 p_msg_count => l_msg_count,
12377 p_msg_data => l_msg_data,
12378 p_data => l_data,
12379 p_msg_index_out => l_msg_index_out);
12380 x_msg_data := l_data;
12381 end if;
12382 raise FND_API.G_EXC_ERROR;
12383 end if;
12384 END IF;
12385
12386 END IF;
12387
12388 --bug 3010538 ( outdent )
12389 --bug 3053281 --set flag if not (manual and workplan only)
12390 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
12391 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
12392 /*
12393 IF (l_shared = 'N') AND
12394 (l_wp_type = 'Y') AND
12395 (l_weighting_basis_Code = 'MANUAL') THEN
12396 --do not set the flag to 'Y'
12397 NULL;
12398 ELSE
12399 */
12400 --3035902: process update flag changes
12401 OPEN get_task_type_id(src_proj_element_id);
12402 FETCH get_task_type_id INTO l_task_type_id;
12403 CLOSE get_task_type_id;
12404
12405 --set update process flag if necessary;
12406 IF (l_wp_process_flag = 'N') THEN
12407 --may need to update process flag
12408 IF ((l_shared = 'N') AND
12409 (l_wp_type = 'Y') AND
12410 (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
12411 (l_weighting_basis_code <> 'MANUAL'))
12412 THEN
12413 --split and workplan; only update if progressable task added
12414 l_wp_process_flag := 'Y';
12415 ELSIF ((l_shared = 'N') AND
12416 (l_wp_type = 'N')) THEN
12417 --split and financial; update
12418 l_wp_process_flag := 'Y';
12419 ELSIF (l_shared = 'Y') THEN
12420 l_wp_process_flag := 'Y';
12421 END IF;
12422 END IF;
12423
12424 --Bug No 3450684 SMukka Commented if condition
12425 --IF (l_wp_process_flag = 'Y') THEN
12426 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
12427 (
12428 p_calling_context => 'SELF_SERVICE'
12429 ,p_project_id => p_project_id
12430 ,p_structure_version_id => p_structure_version_id
12431 ,p_update_wbs_flag => 'Y'
12432 ,x_return_status => l_return_status
12433 ,x_msg_count => l_msg_count
12434 ,x_msg_data => l_msg_data);
12435
12436 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12437 x_msg_count := FND_MSG_PUB.count_msg;
12438 if x_msg_count = 1 then
12439 pa_interface_utils_pub.get_messages
12440 (p_encoded => FND_API.G_TRUE,
12441 p_msg_index => 1,
12442 p_msg_count => l_msg_count,
12443 p_msg_data => l_msg_data,
12444 p_data => l_data,
12445 p_msg_index_out => l_msg_index_out);
12446 x_msg_data := l_data;
12447 end if;
12448 raise FND_API.G_EXC_ERROR;
12449 end if;
12450 --end if;
12451 --3035902: end process update flag changes
12452
12453 --ideally the following calls should have been cached. but due to time constraints
12454 --we need to write the code this way in multiple places.
12455 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
12456 THEN
12457 IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and l_published_version = 'N' ) THEN
12458
12459 --Outdent
12460 pa_fp_refresh_elements_pub.set_process_flag_proj(
12461 p_project_id => p_project_id
12462 ,p_request_id => null
12463 ,p_process_code => null
12464 ,p_refresh_required_flag => 'Y'
12465 ,x_return_status => l_return_status
12466 ,x_msg_count => l_msg_count
12467 ,x_msg_data => l_msg_data );
12468
12469 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12470 x_msg_count := FND_MSG_PUB.count_msg;
12471 if x_msg_count = 1 then
12472 pa_interface_utils_pub.get_messages
12473 (p_encoded => FND_API.G_TRUE,
12474 p_msg_index => 1,
12475 p_msg_count => l_msg_count,
12476 p_msg_data => l_msg_data,
12477 p_data => l_data,
12478 p_msg_index_out => l_msg_index_out);
12479 x_msg_data := l_data;
12480 end if;
12481 raise FND_API.G_EXC_ERROR;
12482 end if;
12483 END IF;
12484 END IF;
12485
12486 --End bug 3010538 ( outdent )
12487
12488 --bug 3301192
12489 --check the task is a lowest task again and check whehter its no more a lowest task.
12490 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
12491
12492 IF l_lowest_task_flag1 = 'Y' AND
12493 l_lowest_task_flag2 = 'N'
12494 THEN
12495 IF l_wp_type = 'Y'
12496 THEN
12497 --now call call delete planning for task version id.
12498 l_task_ver_ids2.extend(1); /* Venky */
12499 l_task_ver_ids2(1) := p_task_version_id;
12500 /*Smukka Bug No. 3474141 Date 03/01/2004 */
12501 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
12502 DECLARE
12503 --p1 bug 3888432
12504 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12505 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
12506 SELECT resource_assignment_id
12507 FROM pa_resource_assignments
12508 WHERE wbs_element_Version_id = c_task_ver_id
12509 AND ta_display_flag = 'N';
12510 l_assign_id NUMBER := NULL;
12511 BEGIN
12512 OPEN get_assignment_id(p_task_version_id);
12513 FETCH get_assignment_id into l_assign_id;
12514 CLOSE get_assignment_id;
12515
12516 IF (l_assign_id IS NOT NULL) THEN
12517 l_assign_ids.extend(1);
12518 l_assign_ids(1) := l_assign_id;
12519 pa_fp_planning_transaction_pub.delete_planning_transactions
12520 (
12521 p_context => 'WORKPLAN'
12522 ,p_task_or_res => 'ASSIGNMENT'
12523 -- ,p_element_version_id_tbl => l_task_ver_ids2
12524 -- ,p_maintain_reporting_lines => 'Y'
12525 ,p_resource_assignment_tbl => l_assign_ids
12526 ,x_return_status => l_return_status
12527 ,x_msg_count => l_msg_count
12528 ,x_msg_data => l_msg_data
12529 );
12530 END IF;
12531 EXCEPTION
12532 WHEN OTHERS then
12533 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12534 p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12535 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
12536 RAISE FND_API.G_EXC_ERROR;
12537 END;
12538 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12539 x_msg_count := FND_MSG_PUB.count_msg;
12540 if x_msg_count = 1 then
12541 pa_interface_utils_pub.get_messages
12542 (p_encoded => FND_API.G_TRUE,
12543 p_msg_index => 1,
12544 p_msg_count => l_msg_count,
12545 p_msg_data => l_msg_data,
12546 p_data => l_data,
12547 p_msg_index_out => l_msg_index_out);
12548 x_msg_data := l_data;
12549 end if;
12550 raise FND_API.G_EXC_ERROR;
12551 end if;
12552 END IF; --<<l_wp_type>>
12553 END IF; --<<l_lowest_task_flag1>>
12554 --bug 3301192
12555
12556 --bug 4149392
12557 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
12558 --end bug 4149392
12559
12560 x_return_status := FND_API.G_RET_STS_SUCCESS;
12561
12562 IF (p_commit = FND_API.G_TRUE) THEN
12563 COMMIT;
12564 END IF;
12565
12566 IF (p_debug_mode = 'Y') THEN
12567 pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK END');
12568 END IF;
12569
12570 EXCEPTION
12571 when FND_API.G_EXC_ERROR then
12572 if p_commit = FND_API.G_TRUE then
12573 rollback to OUTDENT_task_version_bulk;
12574 end if;
12575 x_return_status := FND_API.G_RET_STS_ERROR;
12576 when FND_API.G_EXC_UNEXPECTED_ERROR then
12577 if p_commit = FND_API.G_TRUE then
12578 rollback to OUTDENT_task_version_bulk;
12579 end if;
12580 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12581 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12582 p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12583 p_error_text => SUBSTRB(SQLERRM,1,240));
12584 when OTHERS then
12585 if p_commit = FND_API.G_TRUE then
12586 rollback to OUTDENT_task_version_bulk;
12587 end if;
12588 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12589 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12590 p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12591 p_error_text => SUBSTRB(SQLERRM,1,240));
12592 raise;
12593
12594 END OUTDENT_Task_Version_Bulk;
12595
12596 /*
12597 This API is called from Multiple Tasks Delete Page.
12598 The API expects the task version id in this fashion
12599 1. If both parent and child below it is selected for
12600 deletetion the only parent task id should be pass
12601 -ed
12602
12603 2. If top task is selected and child below it is sel
12604 --ected, API expects only top task id as input
12605
12606 3. If only child is selected then API expexts only
12607 child task id.
12608
12609
12610 Note :
12611 Since the self service page expects the error message
12612 to be displayed in following order :
12613
12614 Task name (task number) : Proper Error Message ..
12615
12616 i.e Task name/number and corresponding error
12617 message to that task version. in one line
12618
12619 Both Task Name /Number and error message set as
12620 token for message PA_PS_TASK_NAME_NUM_ERR
12621
12622 */
12623
12624 PROCEDURE DELETE_TASK_VERSION_IN_BULK
12625 (p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
12626 ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE
12627 ,p_structure_version_id IN NUMBER
12628 ,p_structure_type IN VARCHAR2 :='WORKPLAN' -- 3305199
12629 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12630 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12631 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12632
12633 )
12634
12635 IS
12636 l_debug_mode VARCHAR2(1) ;
12637 l_element_number pa_proj_elements.element_number%TYPE ;
12638 l_element_name pa_proj_elements.name%TYPE ;
12639 l_msg_count NUMBER := 0;
12640 l_msg_data VARCHAR2(2000);
12641 l_return_status VARCHAR2(1);
12642 l_dummy_app_name VARCHAR2(30);
12643 l_enc_msg_data VARCHAR2(2000);
12644 l_msg_name VARCHAR2(30);
12645 l_msg_index_out NUMBER ;
12646
12647 TYPE l_error_msg_name_tbl_type IS TABLE OF
12648 fnd_new_messages.message_text%TYPE INDEX BY BINARY_INTEGER ;
12649 TYPE l_element_name_tbl_type IS TABLE OF
12650 pa_proj_elements.name%TYPE INDEX BY BINARY_INTEGER ;
12651 TYPE l_element_number_tbl_type IS TABLE OF
12652 pa_proj_elements.element_number%TYPE INDEX BY BINARY_INTEGER ;
12653
12654 l_error_msg_name_tbl l_error_msg_name_tbl_type ;
12655 l_element_name_tbl l_element_name_tbl_type ;
12656 l_element_number_tbl l_element_number_tbl_type ;
12657 j NUMBER ;
12658
12659 -- Bug 9535723
12660 l_project_id pa_projects_all.project_id%TYPE;
12661 l_planned_effort_exists VARCHAR(1) := 'N';
12662
12663 -- below cursors are the same as those used currently in the flow
12664 CURSOR get_project_id(c_structure_version_id IN NUMBER) IS
12665 SELECT project_id
12666 FROM pa_proj_elem_ver_structure
12667 WHERE element_version_id = c_structure_version_id;
12668
12669 CURSOR planned_effort_exists(c_element_version_id IN NUMBER) IS
12670 SELECT 'Y'
12671 FROM pa_resource_assignments
12672 WHERE wbs_element_version_id = c_element_version_id
12673 AND total_plan_quantity > 0
12674 AND rownum = 1;
12675
12676 CURSOR get_all_subtasks(c_task_version_id NUMBER) IS
12677 SELECT object_id_to1 task_ver_id
12678 FROM pa_object_relationships pors
12679 START WITH object_id_from1 = c_task_version_id
12680 AND relationship_type = 'S'
12681 AND object_type_from = 'PA_TASKS'
12682 AND object_type_to = 'PA_TASKS'
12683 CONNECT BY relationship_type = PRIOR relationship_type
12684 AND PRIOR object_type_to = object_type_from
12685 AND PRIOR object_id_to1 = object_id_from1
12686 UNION
12687 SELECT element_version_id task_ver_id
12688 FROM pa_proj_element_versions
12689 WHERE element_version_id = c_task_version_id;
12690
12691 BEGIN
12692
12693 --hsiu: 3604086
12694 x_return_status := FND_API.G_RET_STS_SUCCESS;
12695
12696 l_msg_count := 0;
12697 l_return_status := FND_API.G_RET_STS_SUCCESS;
12698 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N') ; -- Bug # 4605505.
12699 j := 0 ;
12700
12701 --hsiu: commenting out due to p1 issue.
12702 -- savepoint should be issued only when p_commit
12703 -- is true, which is a missing parameter
12704 -- savepoint delete_bulk;
12705
12706 FOR i in reverse p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
12707
12708 IF l_debug_mode = 'Y' THEN
12709 pa_debug.debug('task id is :'||p_task_version_id_tbl(i));
12710 pa_debug.debug('record version id is :'||p_record_version_number_tbl(i));
12711 END IF ;
12712
12713 -- initialization is required for every loop
12714 l_return_status := FND_API.G_RET_STS_SUCCESS ;
12715 l_msg_count := 0 ;
12716 l_msg_data := null ;
12717
12718 -- Bug 9535723
12719 -- check if the task(s) to be deleted or its subtasks have planned effort
12720 IF l_planned_effort_exists = 'N' THEN
12721 FOR j IN get_all_subtasks(p_task_version_id_tbl(i)) LOOP
12722 OPEN planned_effort_exists(j.task_ver_id);
12723 FETCH planned_effort_exists INTO l_planned_effort_exists;
12724 IF planned_effort_exists%NOTFOUND THEN
12725 l_planned_effort_exists := 'N';
12726 ELSE
12727 EXIT;
12728 END IF;
12729 CLOSE planned_effort_exists;
12730 END LOOP;
12731 END IF;
12732
12733 -- call delete_task_version API
12734 PA_TASK_PUB1.Delete_Task_Version(
12735 p_task_version_id => p_task_version_id_tbl(i)
12736 ,p_record_version_number => p_record_version_number_tbl(i)
12737 ,p_structure_type => p_structure_type
12738 ,x_return_status => l_return_status
12739 ,x_msg_count => l_msg_count
12740 ,x_msg_data => l_msg_data
12741 ,p_structure_version_id => p_structure_version_id
12742 ,p_called_from_api => 'BULK_DELETE' -- Bug 9535723
12743 );
12744
12745 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12746
12747 j := j+1 ;
12748
12749 SELECT e.element_number
12750 ,e.name
12751 INTO l_element_number
12752 ,l_element_name
12753 FROM pa_proj_elements e
12754 ,pa_proj_element_versions v
12755 WHERE v.element_version_id = p_task_version_id_tbl(i)
12756 AND e.proj_element_id = v.proj_element_id ;
12757
12758 PA_INTERFACE_UTILS_PUB.get_messages
12759 (p_encoded => FND_API.G_FALSE, -- Get the encoded message.
12760 p_msg_index => 1, -- Get the message at index 1.
12761 p_data => l_enc_msg_data,
12762 p_msg_index_out => l_msg_index_out);
12763
12764
12765 l_error_msg_name_tbl(j) := l_enc_msg_data ;
12766 l_element_name_tbl(j) := l_element_name ;
12767 l_element_number_tbl(j) := l_element_number ;
12768
12769
12770 END IF ;
12771
12772 END LOOP ;
12773
12774 IF j > 0 THEN
12775
12776 --bug: 3641049
12777 --comment out rollback because if there is an error, it will be rollback twice causing an exception
12778 --rollback to delete_bulk;
12779
12780 FND_MSG_PUB.initialize;
12781
12782 FOR k in reverse l_element_name_tbl.FIRST..l_element_name_tbl.LAST LOOP
12783
12784 PA_UTILS.ADD_MESSAGE
12785 (p_app_short_name => 'PA',
12786 p_msg_name => 'PA_PS_TASK_NAME_NUM_ERR',
12787 p_token1 => 'TASK_NAME',
12788 p_value1 => l_element_name_tbl(k),
12789 p_token2 => 'TASK_NUMBER',
12790 p_value2 => l_element_number_tbl(k),
12791 p_token3 => 'MESSAGE',
12792 p_value3 => l_error_msg_name_tbl(k)
12793 );
12794
12795
12796 END LOOP ;
12797
12798 END IF ;
12799
12800 x_msg_count := FND_MSG_PUB.count_msg ;
12801
12802 IF x_msg_count > 0 THEN
12803 x_return_status := 'E' ;
12804 --hsiu: commenting out due to p1 issue.
12805 -- savepoint should be issued only when p_commit
12806 -- is true, which is a missing parameter
12807 -- rollback to delete_bulk;
12808 -- Bug 9535723
12809 ELSE
12810 -- Process Structure Updates with context ASGMT_PLAN_CHANGE needs to be
12811 -- triggered only if the following conditions are satisfied, (existing rules)
12812 -- 1. progress data exists for the project or workplan structure
12813 -- 2. version disabled workplan structure
12814 -- 3. workplan structure exists or is shared
12815 -- 4. deletion of workplan task assignment with planned effort
12816
12817 OPEN get_project_id(p_structure_version_id);
12818 FETCH get_project_id INTO l_project_id;
12819 CLOSE get_project_id;
12820
12821 IF (l_debug_mode = 'Y') THEN
12822 pa_debug.debug('DELETE_TASK_VERSION_IN_BULK: l_planned_effort_exists - ' || l_planned_effort_exists);
12823 END IF ;
12824
12825 IF ((PA_TASK_ASSIGNMENT_UTILS.IS_PROGRESS_ROLLUP_REQUIRED(l_project_id) = 'Y')
12826 AND
12827 ((PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') OR
12828 (PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_project_id) = 'Y'))
12829 AND
12830 (l_planned_effort_exists = 'Y')
12831 ) THEN
12832
12833 IF (l_debug_mode = 'Y') THEN
12834 pa_debug.debug('DELETE_TASK_VERSION_IN_BULK: Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP');
12835 END IF;
12836
12837 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
12838 (
12839 p_calling_context => 'ASGMT_PLAN_CHANGE'
12840 ,p_project_id => l_project_id
12841 ,p_structure_version_id => p_structure_version_id
12842 ,p_pub_struc_ver_id => p_structure_version_id
12843 ,x_return_status => x_return_status
12844 ,x_msg_data => x_msg_data
12845 ,x_msg_count => x_msg_count
12846 );
12847
12848 pa_task_assignment_utils.g_require_progress_rollup := 'N';
12849
12850 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12851 IF l_debug_mode = 'Y' THEN
12852 pa_debug.debug('Error after PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP');
12853 END IF;
12854 RAISE FND_API.G_EXC_ERROR;
12855 END IF;
12856
12857 END IF;
12858 END IF ; -- end of additions for bug 9535723
12859
12860 IF l_debug_mode = 'Y' THEN
12861 pa_debug.reset_curr_function;
12862 END IF ;
12863
12864 EXCEPTION
12865 WHEN NO_DATA_FOUND THEN
12866 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12867 x_msg_count := 1;
12868 x_msg_data := SQLERRM;
12869 --hsiu: commenting out due to p1 issue.
12870 -- savepoint should be issued only when p_commit
12871 -- is true, which is a missing parameter
12872 -- rollback to delete_bulk;
12873 RETURN ;
12874 WHEN FND_API.G_EXC_ERROR THEN
12875 x_return_status := FND_API.G_RET_STS_ERROR;
12876 IF x_msg_count >= 1 THEN
12877 pa_interface_utils_pub.get_messages (
12878 p_encoded => FND_API.G_TRUE,
12879 p_msg_index => 1,
12880 p_msg_count => l_msg_count,
12881 p_msg_data => l_msg_data,
12882 p_data => l_enc_msg_data,
12883 p_msg_index_out => l_msg_index_out
12884 );
12885 x_msg_data := l_enc_msg_data;
12886 END IF;
12887
12888 WHEN OTHERS THEN
12889 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12890 x_msg_count := 1;
12891 x_msg_data := SQLERRM;
12892 --hsiu: commenting out due to p1 issue.
12893 -- savepoint should be issued only when p_commit
12894 -- is true, which is a missing parameter
12895 -- rollback to delete_bulk;
12896 FND_MSG_PUB.add_exc_msg
12897 ( p_pkg_name => 'PA_TASK_PUB1'
12898 ,p_procedure_name => 'DELETE_TASK_VERSION_IN_BULK' );
12899 IF l_debug_mode = 'Y' THEN
12900 pa_debug.write('DELETE_TASK_VERSION_IN_BULK' || G_PKG_NAME,SQLERRM,4);
12901 pa_debug.write('DELETE_TASK_VERSION_IN_BULK' || G_PKG_NAME,pa_debug.G_Err_Stack,4);
12902 pa_debug.reset_curr_function;
12903 END IF;
12904 RAISE ;
12905
12906 END DELETE_TASK_VERSION_IN_BULK ;
12907
12908 --margaret bug 3024607 add update task association
12909 --when relationship ID is NULL both p_task_id and (either p_associated_project_id or
12910 --p_associated_task_id) must be set - a new association is added.
12911
12912 --when relationship ID is not NULL and either p_associated_project_id or
12913 --p_associated_task_id are set, we just update the existing relationship
12914 -- with the new "TO" object and type. p_task_id must also be NOT NULL in this case
12915
12916 --when relationship ID is not NULL and both p_associated_project_id and
12917 --p_associated_task_id are NULL, we delete this particular association.
12918
12919 --This procedure was designed specifically to fit the flow of Self_Service Task Details page
12920 --(or any page that uses TaskAssociationsVO).
12921 PROCEDURE Update_Task_Association (
12922 p_api_version IN NUMBER :=1.0,
12923 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
12924 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
12925 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
12926 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
12927 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
12928 p_debug_mode IN VARCHAR2 :='N',
12929 p_max_msg_count IN NUMBER :=NULL,
12930 p_associated_project_id IN NUMBER := NULL,
12931 p_associated_task_id IN NUMBER := NULL,
12932 p_associated_project_name IN VARCHAR2 :=NULL,
12933 p_associated_task_name IN VARCHAR2 :=NULL,
12934 p_task_id IN NUMBER ,
12935 p_relationship_type IN VARCHAR2 :='A',
12936 p_relationship_id IN NUMBER := NULL,
12937 p_record_version_number IN NUMBER := NULL,
12938 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12939 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
12940 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12941 x_relationship_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12942 ) IS
12943
12944 l_return_status VARCHAR2(1);
12945 l_msg_count NUMBER;
12946 l_msg_data VARCHAR2(250);
12947 l_id_to NUMBER;
12948 l_type_to PA_OBJECT_RELATIONSHIPS.object_type_to%TYPE;
12949
12950 l_data VARCHAR2(250);
12951 l_msg_index_out NUMBER;
12952 l_error_msg_code VARCHAR2(30);
12953
12954 BEGIN
12955
12956 x_return_status := FND_API.G_RET_STS_SUCCESS;
12957
12958 IF (p_debug_mode = 'Y') THEN
12959 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_ASSOCIATION START');
12960 END IF;
12961
12962 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12963 FND_MSG_PUB.initialize;
12964 END IF;
12965
12966 IF (p_commit = FND_API.G_TRUE) THEN
12967 savepoint update_task_association;
12968 END IF;
12969
12970 l_type_to := 'PA_PROJECTS';
12971 l_id_to := p_associated_project_id;
12972
12973 IF p_associated_task_id is not NULL THEN
12974 l_type_to := 'PA_TASKS';
12975 l_id_to := p_associated_task_id;
12976 END IF;
12977
12978 -- when creating a new relationship check both ids and object types
12979 IF p_relationship_id is NULL THEN
12980 IF p_task_id is NULL or l_id_to is NULL THEN
12981 x_return_status := FND_API.G_RET_STS_ERROR;
12982 l_error_msg_code:= 'PA_PS_TASK_NUMBER_NULL';
12983 ELSE
12984 IF p_task_id = l_id_to and l_type_to = 'PA_TASKS' then
12985 x_return_status := FND_API.G_RET_STS_ERROR;
12986 l_error_msg_code:= 'PA_TASK_ID_INVALID';
12987 END IF;
12988 END IF;
12989 END IF;
12990
12991 -- when updating an existing relationship check both ids and object types
12992 IF p_relationship_id is not null and l_id_to is not null THEN
12993 IF p_task_id = l_id_to and l_type_to = 'PA_TASKS' then
12994 x_return_status := FND_API.G_RET_STS_ERROR;
12995 l_error_msg_code:= 'PA_TASK_ID_INVALID';
12996 END IF;
12997 END IF;
12998
12999 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
13000 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13001 p_msg_name => l_error_msg_code);
13002 END IF;
13003
13004 -- Create a new association row
13005 IF p_relationship_id is NULL and x_return_status = FND_API.G_RET_STS_SUCCESS THEN
13006 PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
13007 p_user_id => FND_GLOBAL.USER_ID
13008 ,p_object_type_from => 'PA_TASKS'
13009 ,p_object_id_from1 => p_task_id
13010 ,p_object_id_from2 => NULL
13011 ,p_object_id_from3 => NULL
13012 ,p_object_id_from4 => NULL
13013 ,p_object_id_from5 => NULL
13014 ,p_object_type_to => l_type_to
13015 ,p_object_id_to1 => l_id_to
13016 ,p_object_id_to2 => NULL
13017 ,p_object_id_to3 => NULL
13018 ,p_object_id_to4 => NULL
13019 ,p_object_id_to5 => NULL
13020 ,p_relationship_type => p_relationship_type
13021 ,p_relationship_subtype => NULL
13022 ,p_lag_day => NULL
13023 ,p_imported_lag => NULL
13024 ,p_priority => NULL
13025 ,p_pm_product_code => NULL
13026 ,p_comments => NULL
13027 ,p_status_code => NULL
13028 ,x_object_relationship_id => x_relationship_id
13029 ,x_return_status => x_return_status
13030 );
13031
13032 END IF;
13033
13034 IF p_relationship_id is not null and l_id_to is not null THEN
13035 UPDATE PA_OBJECT_RELATIONSHIPS
13036 SET object_id_to1 = l_id_to
13037 ,object_type_to = l_type_to
13038 WHERE object_relationship_id = p_relationship_id;
13039 --WHERE object_id_from1 = p_task_id
13040 --AND object_type_from = 'PA_TASKS'
13041 --AND relationship_type = 'A';
13042 END IF;
13043
13044 IF p_relationship_id is not null and l_id_to is null THEN
13045 Delete_Association(p_relationship_id,p_record_version_number, x_return_status);
13046 END IF;
13047
13048
13049 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13050 x_msg_count := FND_MSG_PUB.count_msg;
13051 IF x_msg_count = 1 then
13052 pa_interface_utils_pub.get_messages
13053 (p_encoded => FND_API.G_TRUE,
13054 p_msg_index => 1,
13055 p_msg_count => x_msg_count,
13056 p_msg_data => x_msg_data,
13057 p_data => l_data,
13058 p_msg_index_out => l_msg_index_out);
13059 x_msg_data := l_data;
13060 END IF;
13061 raise FND_API.G_EXC_ERROR;
13062 ELSE
13063 IF (p_commit = FND_API.G_TRUE) THEN
13064 COMMIT;
13065 END IF;
13066 END IF;
13067
13068 IF (p_debug_mode = 'Y') THEN
13069 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_ASSOCIATION END');
13070 END IF;
13071
13072
13073 EXCEPTION
13074 WHEN FND_API.G_EXC_ERROR THEN
13075 IF (p_commit = FND_API.G_TRUE) THEN
13076 ROLLBACK to update_task_association;
13077 END IF;
13078 x_msg_count := FND_MSG_PUB.count_msg;
13079 x_return_status := FND_API.G_RET_STS_ERROR;
13080 WHEN OTHERS THEN
13081 IF (p_commit = FND_API.G_TRUE) THEN
13082 ROLLBACK to update_task_association;
13083 END IF;
13084 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13085 x_msg_count := FND_MSG_PUB.count_msg;
13086 --put message
13087 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13088 p_procedure_name => 'update_task_association',
13089 p_error_text => SUBSTRB(SQLERRM,1,240));
13090 RAISE;
13091
13092 END Update_Task_Association;
13093
13094
13095
13096 --margaret bug 3024607 delete task association
13097 --if p_relationship_id is NOT NULL then only this ONE relationship is deleted
13098 --if p_relationship_id is NULL, then ALL associations are deleted.
13099 PROCEDURE Delete_Task_Associations(
13100 p_api_version IN NUMBER :=1.0,
13101 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
13102 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
13103 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
13104 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
13105 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
13106 p_debug_mode IN VARCHAR2 :='N',
13107 p_max_msg_count IN NUMBER :=NULL,
13108 p_relationship_type IN VARCHAR2 :='A',
13109 p_relationship_id IN NUMBER := NULL,
13110 p_task_id IN NUMBER := NULL,
13111 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13112 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
13113 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13114 ) IS
13115
13116
13117 CURSOR task_associations( p_task_id NUMBER )
13118 IS
13119 SELECT object_relationship_id
13120 FROM PA_OBJECT_RELATIONSHIPS
13121 WHERE relationship_type = p_relationship_type
13122 AND ( (object_type_from = 'PA_TASKS' AND object_id_from1 = p_task_id)
13123 OR (object_type_to = 'PA_TASKS' AND object_id_to1 = p_task_id));
13124
13125 l_data VARCHAR2(250);
13126 l_msg_index_out NUMBER;
13127
13128 BEGIN
13129 x_return_status := FND_API.G_RET_STS_SUCCESS;
13130
13131 IF (p_debug_mode = 'Y') THEN
13132 pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_ASSOCIATION START');
13133 END IF;
13134
13135 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
13136 FND_MSG_PUB.initialize;
13137 END IF;
13138
13139 IF (p_commit = FND_API.G_TRUE) THEN
13140 savepoint delete_task_association;
13141 END IF;
13142
13143 --Delete just the requested relationship row
13144 IF p_relationship_id is not null THEN
13145 Delete_Association(p_relationship_id,null,x_return_status);
13146 ELSE
13147 IF p_task_id is not null THEN
13148 FOR task_associations_rec IN task_associations(p_task_id ) LOOP
13149 Delete_Association(task_associations_rec.object_relationship_id,null, x_return_status);
13150 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13151 EXIT;
13152 END IF;
13153 END LOOP;
13154 END IF;
13155 END IF;
13156
13157 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13158 x_msg_count := FND_MSG_PUB.count_msg;
13159 IF x_msg_count = 1 then
13160 pa_interface_utils_pub.get_messages
13161 (p_encoded => FND_API.G_TRUE,
13162 p_msg_index => 1,
13163 p_msg_count => x_msg_count,
13164 p_msg_data => x_msg_data,
13165 p_data => l_data,
13166 p_msg_index_out => l_msg_index_out);
13167 x_msg_data := l_data;
13168 END IF;
13169 raise FND_API.G_EXC_ERROR;
13170 ELSE
13171 IF (p_commit = FND_API.G_TRUE) THEN
13172 COMMIT;
13173 END IF;
13174 END IF;
13175
13176
13177 IF (p_debug_mode = 'Y') THEN
13178 pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_ASSOCIATIONS END');
13179 END IF;
13180
13181
13182 EXCEPTION
13183 WHEN FND_API.G_EXC_ERROR THEN
13184 IF (p_commit = FND_API.G_TRUE) THEN
13185 ROLLBACK to delete_task_association;
13186 END IF;
13187 x_msg_count := FND_MSG_PUB.count_msg;
13188 x_return_status := FND_API.G_RET_STS_ERROR;
13189 WHEN OTHERS THEN
13190 IF (p_commit = FND_API.G_TRUE) THEN
13191 ROLLBACK to delete_task_association;
13192 END IF;
13193 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13194 x_msg_count := FND_MSG_PUB.count_msg;
13195 --put message
13196 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13197 p_procedure_name => 'delete_all_task_associations',
13198 p_error_text => SUBSTRB(SQLERRM,1,240));
13199 RAISE;
13200
13201 END Delete_Task_Associations;
13202
13203
13204 --Delete a single association - relationship_id required
13205 PROCEDURE Delete_Association(
13206 p_relationship_id IN NUMBER,
13207 p_record_version_number IN NUMBER := NULL,
13208 x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13209 ) IS
13210
13211 BEGIN
13212
13213 IF p_relationship_id is not null THEN
13214 PA_OBJECT_RELATIONSHIPS_PKG.DELETE_ROW(
13215 p_object_relationship_id => p_relationship_id
13216 ,p_object_type_from => NULL
13217 ,p_object_id_from1 => NULL
13218 ,p_object_id_from2 => NULL
13219 ,p_object_id_from3 => NULL
13220 ,p_object_id_from4 => NULL
13221 ,p_object_id_from5 => NULL
13222 ,p_object_type_to => NULL
13223 ,p_object_id_to1 => NULL
13224 ,p_object_id_to2 => NULL
13225 ,p_object_id_to3 => NULL
13226 ,p_object_id_to4 => NULL
13227 ,p_object_id_to5 => NULL
13228 ,p_record_version_number =>NULL
13229 ,p_pm_product_code => NULL
13230 ,x_return_status => x_return_status
13231 );
13232 END IF;
13233
13234
13235 EXCEPTION
13236 WHEN OTHERS THEN
13237 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13238 --x_msg_count := FND_MSG_PUB.count_msg;
13239 --put message
13240 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13241 p_procedure_name => 'delete_association',
13242 p_error_text => SUBSTRB(SQLERRM,1,240));
13243
13244 RAISE;
13245
13246 END Delete_Association;
13247
13248
13249 --margaret check if task has associations, returns Y/N
13250 FUNCTION has_Associations(
13251 p_task_id IN NUMBER
13252 ,p_relationship_type IN VARCHAR2 :='A'
13253 )return VARCHAR2
13254 IS
13255 cursor relationship_exists(p_task_id NUMBER) IS
13256 select '1'
13257 from pa_object_relationships
13258 WHERE relationship_type = p_relationship_type
13259 AND ( (object_type_from = 'PA_TASKS' AND object_id_from1 = p_task_id
13260 AND object_type_to in ( 'PA_STRUCTURES', 'PA_TASKS')) --bug 4091647
13261 OR (object_type_to = 'PA_TASKS' AND object_id_to1 = p_task_id
13262 AND object_type_from = 'PA_TASKS')); --bug 4091647
13263 l_dummy_char VARCHAR2(1);
13264
13265 BEGIN
13266 OPEN relationship_exists(p_task_id);
13267 FETCH relationship_exists into l_dummy_char;
13268 IF relationship_exists%NOTFOUND THEN
13269 close relationship_exists; -- 5349975
13270 return 'N';
13271 ELSE
13272 close relationship_exists; -- 5349975
13273 return 'Y';
13274 END IF;
13275 END has_Associations;
13276
13277
13278 --margaret check if project is associated to tasks, returns Y/N
13279 FUNCTION proj_has_task_associations(
13280 p_project_id IN NUMBER
13281 ,p_relationship_type IN VARCHAR2 :='A'
13282 )return VARCHAR2
13283 IS
13284 cursor relationship_exists(p_project_id NUMBER) IS
13285 select '1'
13286 from pa_object_relationships
13287 WHERE relationship_type = p_relationship_type
13288 AND object_type_from = 'PA_TASKS'
13289 AND object_type_to = 'PA_PROJECTS' AND object_id_to1 = p_project_id;
13290
13291 l_dummy_char VARCHAR2(1);
13292
13293 BEGIN
13294 OPEN relationship_exists(p_project_id);
13295 FETCH relationship_exists into l_dummy_char;
13296 IF relationship_exists%NOTFOUND THEN
13297 close relationship_exists; -- 5349975
13298 return 'N';
13299 ELSE
13300 close relationship_exists; -- 5349975
13301 return 'Y';
13302 END IF;
13303 END proj_has_task_associations;
13304
13305
13306 PROCEDURE Check_Task_Has_Association(
13307 p_task_id IN NUMBER
13308 ,p_relationship_type VARCHAR2 :='A'
13309 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13310 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13311 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13312
13313 )IS
13314 l_ret_code VARCHAR2(1);
13315 BEGIN
13316 x_return_status := FND_API.G_RET_STS_SUCCESS;
13317 l_ret_code := has_Associations(p_task_id,p_relationship_type);
13318 IF l_ret_code = 'Y' THEN
13319 x_return_status := FND_API.G_RET_STS_ERROR;
13320 /*PA_UTILS.ADD_MESSAGE
13321 (p_app_short_name => 'PA',
13322 p_msg_name => 'PA_TASK_HAS_ASSOCIATIONS');*/ --Bug 3831786 commented
13323 x_msg_data:='PA_TASK_HAS_ASSOCIATIONS'; --Bug No 3491544 Smukka Apr 07 2004
13324 END IF;
13325 END Check_Task_Has_Association;
13326
13327
13328 PROCEDURE Check_Proj_Associated_To_Tasks(
13329 p_project_id IN NUMBER
13330 ,p_relationship_type VARCHAR2 :='A'
13331 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13332 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13333 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13334
13335 )IS
13336 l_ret_code VARCHAR2(1);
13337 BEGIN
13338 x_return_status := FND_API.G_RET_STS_SUCCESS;
13339 l_ret_code := proj_has_task_associations(p_project_id,p_relationship_type);
13340 IF l_ret_code = 'Y' THEN
13341 x_return_status := FND_API.G_RET_STS_ERROR;
13342 PA_UTILS.ADD_MESSAGE
13343 (p_app_short_name => 'PA',
13344 p_msg_name => 'PA_PROJECT_HAS_ASSOCIATIONS');
13345
13346 END IF;
13347 END Check_Proj_Associated_to_Tasks;
13348
13349
13350 --margaret bug 3024607 delete project to task associations
13351 --if p_relationship_id is NOT NULL then only this ONE relationship is deleted
13352 --if p_relationship_id is NULL, then ALL associations are deleted.
13353 PROCEDURE Delete_Proj_To_Task_Assoc(
13354 p_api_version IN NUMBER :=1.0,
13355 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
13356 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
13357 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
13358 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
13359 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
13360 p_debug_mode IN VARCHAR2 :='N',
13361 p_max_msg_count IN NUMBER :=NULL,
13362 p_relationship_type IN VARCHAR2 :='A',
13363 p_relationship_id IN NUMBER := NULL,
13364 p_project_id IN NUMBER := NULL,
13365 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13366 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
13367 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13368 ) IS
13369
13370
13371 CURSOR task_associations( p_task_id NUMBER )
13372 IS
13373 SELECT object_relationship_id
13374 FROM PA_OBJECT_RELATIONSHIPS
13375 WHERE relationship_type = p_relationship_type
13376 AND object_type_from = 'PA_TASKS'
13377 AND object_type_to = 'PA_PROJECTS' AND object_id_to1 = p_project_id;
13378
13379 l_data VARCHAR2(250);
13380 l_msg_index_out NUMBER;
13381
13382 BEGIN
13383 x_return_status := FND_API.G_RET_STS_SUCCESS;
13384
13385 IF (p_debug_mode = 'Y') THEN
13386 pa_debug.debug('PA_TASK_PUB1.Delete_Proj_To_Task_Assoc START');
13387 END IF;
13388 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
13389 FND_MSG_PUB.initialize;
13390 END IF;
13391
13392 IF (p_commit = FND_API.G_TRUE) THEN
13393 savepoint delete_prj_to_task_assoc;
13394 END IF;
13395
13396 --Delete just the requested relationship row
13397 IF p_relationship_id is not null THEN
13398 Delete_Association(p_relationship_id,null,x_return_status);
13399 ELSE
13400 IF p_project_id is not null THEN
13401 FOR task_associations_rec IN task_associations(p_project_id ) LOOP
13402 Delete_Association(task_associations_rec.object_relationship_id,null, x_return_status);
13403 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13404 EXIT;
13405 END IF;
13406 END LOOP;
13407 END IF;
13408 END IF;
13409
13410 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13411 x_msg_count := FND_MSG_PUB.count_msg;
13412 IF x_msg_count = 1 then
13413 pa_interface_utils_pub.get_messages
13414 (p_encoded => FND_API.G_TRUE,
13415 p_msg_index => 1,
13416 p_msg_count => x_msg_count,
13417 p_msg_data => x_msg_data,
13418 p_data => l_data,
13419 p_msg_index_out => l_msg_index_out);
13420 x_msg_data := l_data;
13421 raise FND_API.G_EXC_ERROR;
13422 END IF;
13423 ELSE
13424 IF (p_commit = FND_API.G_TRUE) THEN
13425 COMMIT;
13426 END IF;
13427 END IF;
13428
13429 IF (p_debug_mode = 'Y') THEN
13430 pa_debug.debug('PA_TASK_PUB1.Delete_Proj_To_Task_Assoc END');
13431 END IF;
13432
13433 EXCEPTION
13434 WHEN FND_API.G_EXC_ERROR THEN
13435 IF (p_commit = FND_API.G_TRUE) THEN
13436 ROLLBACK to delete_prj_to_task_assoc;
13437 END IF;
13438 x_msg_count := FND_MSG_PUB.count_msg;
13439 x_return_status := FND_API.G_RET_STS_ERROR;
13440 WHEN OTHERS THEN
13441 IF (p_commit = FND_API.G_TRUE) THEN
13442 ROLLBACK to delete_prj_to_task_assoc;
13443 END IF;
13444 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13445 --put message
13446 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13447 p_procedure_name => 'delete_proj_to_task_assoc',
13448 p_error_text => SUBSTRB(SQLERRM,1,240));
13449 RAISE;
13450 END Delete_Proj_To_Task_Assoc;
13451
13452
13453 PROCEDURE Copy_Task_Associations(
13454 p_api_version IN NUMBER :=1.0,
13455 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
13456 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
13457 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
13458 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
13459 p_debug_mode IN VARCHAR2 :='N',
13460 p_max_msg_count IN NUMBER :=NULL,
13461 p_project_id_to IN NUMBER := NULL,
13462 p_project_id_from IN NUMBER := NULL,
13463 p_relationship_type IN VARCHAR2 :='A',
13464 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13465 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
13466 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13467
13468 )IS
13469 --Bug#3693794 : Performance fix.
13470 --Replaced pa_structures_tasks_v from the from clause
13471 --for cursor task_list. Replaced it with pa_proj_elements
13472 --table which will siffice the current requirement of
13473 --getting source and destination proj_element_id of the task.
13474
13475 CURSOR task_list( p_project_id_to NUMBER, p_project_id_from NUMBER )
13476 IS
13477 Select source.proj_element_id old_task_id
13478 ,destination.proj_element_id new_task_id
13479 from pa_proj_elements source --Bug#3693794
13480 ,pa_proj_elements destination --Bug#3693794
13481 where source.project_id = p_project_id_from
13482 and source.element_number = destination.element_number
13483 and destination.project_id = p_project_id_to;
13484
13485 CURSOR task_association( task_id NUMBER, p_relationship_type VARCHAR2 )
13486 IS
13487 Select object_type_to, object_id_to1
13488 from pa_object_relationships
13489 where object_type_from = 'PA_TASKS'
13490 and object_id_from1 = task_id
13491 and relationship_type = p_relationship_type;
13492
13493 l_object_type_to pa_object_relationships.object_type_to%Type;
13494 l_object_id_to1 pa_object_relationships.object_id_to1%Type;
13495 x_relationship_id pa_object_relationships.object_relationship_id%type;
13496 l_ret_code VARCHAR2(1);
13497 l_data VARCHAR2(250);
13498 l_msg_index_out NUMBER;
13499
13500 BEGIN
13501
13502 IF (p_debug_mode = 'Y') THEN
13503 pa_debug.debug('PA_TASK_PUB1.Copy_Task_Associations START');
13504 END IF;
13505
13506 x_return_status := FND_API.G_RET_STS_SUCCESS;
13507
13508 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
13509 FND_MSG_PUB.initialize;
13510 END IF;
13511
13512 IF (p_commit = FND_API.G_TRUE) THEN
13513 savepoint copy_task_associations;
13514 END IF;
13515
13516
13517 FOR task_list_rec IN task_list(p_project_id_to, p_project_id_from ) LOOP
13518 l_ret_code := has_Associations(task_list_rec.new_task_id,p_relationship_type);
13519 IF l_ret_code <>'Y' THEN
13520 open task_association(task_list_rec.old_task_id,p_relationship_type);
13521 fetch task_association into l_object_type_to, l_object_id_to1;
13522 IF task_association%found THEN
13523
13524 PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
13525 p_user_id => FND_GLOBAL.USER_ID
13526 ,p_object_type_from => 'PA_TASKS'
13527 ,p_object_id_from1 => task_list_rec.new_task_id
13528 ,p_object_id_from2 => NULL
13529 ,p_object_id_from3 => NULL
13530 ,p_object_id_from4 => NULL
13531 ,p_object_id_from5 => NULL
13532 ,p_object_type_to => l_object_type_to
13533 ,p_object_id_to1 => l_object_id_to1
13534 ,p_object_id_to2 => NULL
13535 ,p_object_id_to3 => NULL
13536 ,p_object_id_to4 => NULL
13537 ,p_object_id_to5 => NULL
13538 ,p_relationship_type => p_relationship_type
13539 ,p_relationship_subtype => NULL
13540 ,p_lag_day => NULL
13541 ,p_imported_lag => NULL
13542 ,p_priority => NULL
13543 ,p_pm_product_code => NULL
13544 ,p_comments => NULL
13545 ,p_status_code => NULL
13546 ,x_object_relationship_id => x_relationship_id
13547 ,x_return_status => x_return_status);
13548
13549 END IF;
13550 close task_association;
13551 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13552 EXIT;
13553 END IF;
13554 END IF;
13555 END LOOP;
13556
13557 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13558 x_msg_count := FND_MSG_PUB.count_msg;
13559 IF x_msg_count = 1 then
13560 pa_interface_utils_pub.get_messages
13561 (p_encoded => FND_API.G_TRUE,
13562 p_msg_index => 1,
13563 p_msg_count => x_msg_count,
13564 p_msg_data => x_msg_data,
13565 p_data => l_data,
13566 p_msg_index_out => l_msg_index_out);
13567 x_msg_data := l_data;
13568 raise FND_API.G_EXC_ERROR;
13569 END IF;
13570 ELSE
13571 IF (p_commit = FND_API.G_TRUE) THEN
13572 COMMIT;
13573 END IF;
13574 END IF;
13575
13576 IF (p_debug_mode = 'Y') THEN
13577 pa_debug.debug('PA_TASK_PUB1.Copy_Task_Associations END');
13578 END IF;
13579
13580 EXCEPTION
13581 WHEN FND_API.G_EXC_ERROR THEN
13582 IF (p_commit = FND_API.G_TRUE) THEN
13583 ROLLBACK to copy_task_associations;
13584 END IF;
13585 x_msg_count := FND_MSG_PUB.count_msg;
13586 x_return_status := FND_API.G_RET_STS_ERROR;
13587 WHEN OTHERS THEN
13588 IF (p_commit = FND_API.G_TRUE) THEN
13589 ROLLBACK to copy_task_associations;
13590 END IF;
13591 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13592 --put message
13593 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13594 p_procedure_name => 'Copy_Task_Associations',
13595 p_error_text => SUBSTRB(SQLERRM,1,240));
13596 RAISE;
13597 END Copy_Task_Associations;
13598
13599
13600 --FPM bug 3301192
13601 --Planning and budget changes.
13602 --This apis is called from CREATE_TASKS api and AMG create_project, update_prohject and add_task apis
13603 PROCEDURE call_add_planning_txns(
13604 p_tasks_ver_ids IN PA_NUM_1000_NUM,
13605 p_planned_effort IN PA_NUM_1000_NUM,
13606 p_project_id IN NUMBER,
13607 p_structure_version_id IN NUMBER,
13608 p_start_date IN PA_DATE_1000_DATE,
13609 p_end_date IN PA_DATE_1000_DATE,
13610 p_pm_product_code IN VARCHAR2 DEFAULT NULL, ---bug 3811243
13611 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13612 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
13613 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13614 ) IS
13615 /* Bug #: 3305199 SMukka */
13616 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13617 /* l_task_ver_ids PA_PLSQL_DATATYPES.IdTabTyp; */
13618 l_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13619 l_planned_effort SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13620 l_start_dates SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
13621 l_end_dates SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
13622 l_pm_product_code SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(); ---bug 3811243
13623
13624 l_msg_count NUMBER := 0;
13625 l_msg_data VARCHAR2(2000);
13626 l_return_status VARCHAR2(1);
13627 l_data VARCHAR2(2000);
13628 l_msg_index_out NUMBER;
13629 API_ERROR EXCEPTION;
13630
13631 BEGIN
13632
13633 IF nvl(p_tasks_ver_ids.LAST,0) > 0 THEN --Condition added for bug #3569905
13634 FOR i in p_tasks_ver_ids.FIRST..p_tasks_ver_ids.LAST LOOP
13635 IF p_tasks_ver_ids(i) IS NOT NULL AND
13636 (p_planned_effort(i) IS NOT NULL AND
13637 p_planned_effort(i) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
13638 p_planned_effort(i) <> 0) --bug 3802240: Added conditions to skip g_miss
13639 THEN
13640 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_tasks_ver_ids(i) ) = 'Y'
13641 THEN
13642 /* convert ids and planned effort to the called apis params types. */
13643 l_task_ver_ids.extend(1); /* Venky */
13644 l_task_ver_ids(l_task_ver_ids.count) := p_tasks_ver_ids(i);
13645 l_planned_effort.extend(1);
13646 l_planned_effort(l_planned_effort.count) := p_planned_effort(i);
13647 l_start_dates.extend(1);
13648 l_start_dates(l_start_dates.count) := NVL( p_start_date(i), TRUNC(SYSDATE));
13649 l_end_dates.extend(1);
13650 l_end_dates(l_end_dates.count) := NVL( p_end_date(i), TRUNC(SYSDATE));
13651 ---bug 3811243
13652 l_pm_product_code.extend();
13653 l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
13654 END IF;
13655 END IF;
13656 END LOOP;
13657 END IF;
13658
13659 IF l_task_ver_ids.exists(1)
13660 THEN
13661 /*Smukka Bug No. 3474141 Date 03/01/2004 */
13662 /*moved pa_fp_planning_transaction_pub.add_planning_transactions into plsql block */
13663 BEGIN
13664 pa_fp_planning_transaction_pub.add_planning_transactions(
13665 p_context => 'WORKPLAN'
13666 ,p_project_id => p_project_id
13667 ,p_struct_elem_version_id => p_structure_version_id
13668 ,p_task_elem_version_id_tbl => l_task_ver_ids
13669 ,p_planned_people_effort_tbl => l_planned_effort
13670 ,p_start_date_tbl => l_start_dates
13671 ,p_end_date_tbl => l_end_dates
13672 ,p_pm_product_code => l_pm_product_code --bug 3811243
13673 ,x_return_status => l_return_status
13674 ,x_msg_count => l_msg_count
13675 ,x_msg_data => l_msg_data
13676 );
13677 EXCEPTION
13678 WHEN OTHERS THEN
13679 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13680 p_procedure_name => 'call_add_planning_txns',
13681 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
13682 raise API_ERROR;
13683 END;
13684 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
13685 x_msg_count := FND_MSG_PUB.count_msg;
13686 if x_msg_count = 1 then
13687 pa_interface_utils_pub.get_messages
13688 (p_encoded => FND_API.G_TRUE,
13689 p_msg_index => 1,
13690 p_msg_count => l_msg_count,
13691 p_msg_data => l_msg_data,
13692 p_data => l_data,
13693 p_msg_index_out => l_msg_index_out);
13694 x_msg_data := l_data;
13695 end if;
13696 raise API_ERROR;
13697 end if;
13698 END IF;
13699
13700 x_return_status := FND_API.G_RET_STS_SUCCESS;
13701 EXCEPTION
13702 WHEN API_ERROR THEN
13703 x_return_status := FND_API.G_RET_STS_ERROR;
13704 WHEN OTHERS THEN
13705 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13706 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13707 p_procedure_name => 'call_add_planning_txns',
13708 p_error_text => SUBSTRB(SQLERRM,1,240));
13709 raise;
13710 END call_add_planning_txns;
13711
13712 PROCEDURE update_task_det_sch_info(
13713 p_api_version IN NUMBER :=1.0,
13714 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
13715 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
13716 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
13717 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
13718 p_debug_mode IN VARCHAR2 :='N',
13719 p_task_ver_id IN NUMBER,
13720 p_project_id IN NUMBER,
13721 p_planned_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13722 p_ETC_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13723 p_structure_version_id IN NUMBER,
13724 p_object_type IN VARCHAR2 := 'PA_TASKS',
13725 p_etc_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13726 p_actual_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13727 p_percent_complete IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13728 p_res_assign_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13729 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13730 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
13731 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13732 ) IS
13733
13734 l_msg_count NUMBER;
13735 l_msg_data VARCHAR2(250);
13736 l_data VARCHAR2(250);
13737 l_msg_index_out NUMBER;
13738 l_return_status VARCHAR2(2);
13739 l_error_message_code VARCHAR2(250);
13740
13741 CURSOR cur_sch
13742 IS
13743 SELECT scheduled_start_date, scheduled_finish_date
13744 FROM pa_proj_elem_ver_schedule
13745 WHERE element_version_id = p_task_ver_id
13746 AND project_id = p_project_id
13747 ;
13748
13749
13750 /* Bug # 3755089. Modified the following cursor. */
13751
13752 cursor cur_progress (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13753 p_structure_version_id NUMBER) is
13754 select *
13755 from pa_progress_rollup ppr
13756 where ppr.project_id = p_project_id
13757 and ppr.object_id = p_object_id
13758 and ppr.object_version_id = p_object_version_id
13759 and ppr.structure_version_id = p_structure_version_id
13760 and ppr.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES') -- 4498610 : Added PA_STRUCTURES also
13761 and ppr.current_flag = 'Y'
13762 and ppr.as_of_date = (select max(as_of_date) from pa_progress_rollup ppr2
13763 where ppr2.project_id = p_project_id
13764 and ppr2.object_id = p_object_id
13765 and ppr2.object_version_id = p_object_version_id
13766 and ppr2.structure_version_id = p_structure_version_id
13767 and ppr2.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES'));
13768
13769 cur_progress_rec cur_progress%rowtype;
13770
13771
13772 cursor cur_progress2 (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13773 p_structure_version_id NUMBER, p_current_flag VARCHAR2) is
13774 select *
13775 from pa_progress_rollup ppr
13776 where ppr.project_id = p_project_id
13777 and ppr.object_id = p_object_id
13778 and ppr.object_version_id = p_object_version_id
13779 and ppr.structure_version_id IS NULL
13780 and ppr.current_flag = p_current_flag
13781 and ppr.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES'); -- 4498610 : Added PA_STRUCTURES also
13782 --bug 3959087, following code is commented as it is not needed
13783 /*and ppr.as_of_date = (select max(as_of_date) from pa_progress_rollup ppr2
13784 where ppr2.project_id = p_project_id
13785 and ppr2.object_id = p_object_id
13786 and ppr2.object_version_id = p_object_version_id
13787 and ppr2.structure_version_id IS NULL
13788 and ppr2.current_flag = p_current_flag --bug 3708948
13789 and ppr2.object_type in ('PA_TASKS','PA_ASSIGNMENTS'));*/
13790
13791 cursor cur_prev_planned_task_effort(p_project_id NUMBER, p_proj_element_id NUMBER
13792 , p_structure_version_id NUMBER) is
13793 select (labor_effort+equipment_effort)
13794 from pji_xbs_plans_v
13795 where project_id = p_project_id
13796 and structure_version_id = p_structure_version_id
13797 and proj_element_id = p_proj_element_id
13798 and structure_type = 'WORKPLAN';
13799
13800 cursor cur_prev_planned_assgn_effort(p_project_id NUMBER, p_task_id NUMBER
13801 , p_structure_version_id NUMBER, p_res_assign_id NUMBER) is
13802 select planned_quantity
13803 from pa_task_assignments_v
13804 where project_id = p_project_id
13805 and structure_version_id = p_structure_version_id
13806 and resource_assignment_id = p_res_assign_id
13807 and task_id = p_task_id;
13808
13809 l_prev_planned_effort NUMBER := null;
13810
13811 cursor cur_prev_etc_effort (p_project_id NUMBER, p_object_id NUMBER
13812 , p_structure_version_id NUMBER) is
13813 select (nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0)
13814 +nvl(subprj_ppl_etc_effort,0)+nvl(subprj_eqpmt_etc_effort,0))
13815 from pa_progress_rollup
13816 where project_id = p_project_id
13817 and object_id = p_object_id
13818 and structure_version_id = p_structure_version_id
13819 and structure_type = 'WORKPLAN';
13820
13821 --maansari5/9
13822 cursor cur_prev_etc_effort2 (p_project_id NUMBER, p_object_id NUMBER
13823 ) is
13824 select (nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0)
13825 +nvl(subprj_ppl_etc_effort,0)+nvl(subprj_eqpmt_etc_effort,0))
13826 from pa_progress_rollup
13827 where project_id = p_project_id
13828 and object_id = p_object_id
13829 and structure_version_id is null
13830 and current_flag = 'Y'
13831 and structure_type = 'WORKPLAN';
13832 --maansari5/9
13833
13834 l_prev_etc_effort NUMBER := null;
13835
13836 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13837 l_planned_effort2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13838 l_start_dates SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13839 l_end_dates SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13840 l_SCHEDULED_START_DATE DATE;
13841 l_SCHEDULED_END_DATE DATE;
13842
13843 l_progress_rollup_id NUMBER;
13844 l_login_id NUMBER := fnd_global.login_id;
13845 l_user_id NUMBER := fnd_global.user_id;
13846
13847 l_task_id NUMBER;
13848 l_object_id NUMBER;
13849 l_next_prog_cycle_date DATE;
13850 l_as_of_date DATE;
13851 l_percent_complete NUMBER;
13852 l_etc_effort NUMBER;
13853 l_planned_effort NUMBER;
13854 l_override_pc NUMBER := null;
13855 l_eff_rollup_pc NUMBER := null;
13856 l_earned_value NUMBER := null;
13857 l_proj_element_id NUMBER := null;
13858
13859 l_version_enabled VARCHAr2(1):= 'N'; --maansari5/9
13860 l_weighting_basis VARCHAR2(30); ---Bug 6144931
13861
13862 --maansari5/11
13863 CURSOR c_get_task_weight_method
13864 IS
13865 SELECT task_weight_basis_code
13866 FROM pa_proj_progress_attr
13867 WHERE project_id = p_project_id
13868 AND structure_type = 'WORKPLAN';
13869
13870 CURSOR c_proj_element_id
13871 IS
13872 SELECT proj_element_id
13873 FROM pa_proj_element_versions
13874 WHERE project_id = p_project_id
13875 and parent_structure_version_id = p_structure_version_id
13876 and element_version_id = p_task_ver_id
13877 and object_type = decode(p_object_type, 'PA_ASSIGNMENTS','PA_TASKS', p_object_type); -- Bug 3856161 : Added Decode
13878
13879 l_rollup_method VARCHAR2(30);
13880 l_actual_finish_DATE DATE;
13881 l_actual_start_DATE DATE;
13882 l_rollup_as_of_date DATE;
13883
13884 cursor c_max_as_of_date_wkg is
13885 select max(as_of_date)
13886 from pa_progress_rollup
13887 where project_id = p_project_id
13888 -- and object_version_id = p_task_ver_id Bug 3856161 : It shd always do rollup if record exists
13889 -- and object_type = p_object_type
13890 and structure_type = 'WORKPLAN'
13891 and structure_version_id = p_structure_version_id;
13892
13893 l_debug_mode VARCHAR2(1);
13894 l_dummy NUMBER;
13895
13896 -- Start modifications for Bug # 3879658.
13897
13898 cursor cur_progress_status is
13899 select ptt.initial_progress_status_code
13900 from pa_task_types ptt, pa_proj_elements ppe, pa_proj_element_versions ppev
13901 where ppev.project_id = ppe.project_id
13902 and ppev.proj_element_id = ppe.proj_element_id
13903 and ppe.type_id = ptt.task_type_id
13904 and ppe.project_id = p_project_id
13905 and ppev.element_version_id = p_task_ver_id
13906 and ppev.parent_structure_version_id = p_structure_version_id;
13907
13908 l_init_prog_status_code VARCHAR2(150) := NULL;
13909
13910 -- End modifications for Bug # 3879658.
13911
13912 --bug 3959087, start
13913 l_BASE_PERCENT_COMP_DERIV_CODE VARCHAR2(30);
13914 l_lowest_level_task VARCHAR2(1);
13915 l_assignment_exists VARCHAR2(1);
13916 l_ppl_act_cost NUMBER;
13917 l_planned_cost NUMBER;
13918 l_actual_effort NUMBER;
13919 l_prj_currency_code VARCHAR2(15);
13920
13921 CURSOR cur_proj_elements(c_proj_element_id NUMBER)
13922 IS
13923 SELECT decode( ppe.base_percent_comp_deriv_code, null, ptt.base_percent_comp_deriv_code, '^', ptt.base_percent_comp_deriv_code, ppe.base_percent_comp_deriv_code )
13924 from pa_proj_elements ppe
13925 ,pa_task_types ptt
13926 where ppe.project_id = p_project_id
13927 and ppe.proj_element_id = c_proj_element_id
13928 and ppe.type_id = ptt.task_type_id;
13929
13930
13931 cursor cur_get_costs(p_project_id NUMBER, p_object_id NUMBER, p_structure_version_id NUMBER) is
13932 select nvl(BRDN_COST, 0), nvl(ACT_LABOR_BRDN_COST, 0)
13933 from pji_xbs_plans_v
13934 where project_id = p_project_id
13935 and proj_element_id = p_object_id
13936 and structure_version_id = p_structure_version_id;
13937
13938 cursor cur_rollup_percent (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13939 p_structure_version_id NUMBER) is
13940 select ppr.EFF_ROLLUP_PERCENT_COMP,ppr.completed_percentage, actual_start_date, actual_finish_date -- 4498610 : Added completed_percentage, actual_start_date, actual_finish_date
13941 from pa_progress_rollup ppr
13942 where ppr.project_id = p_project_id
13943 and ppr.object_id = p_object_id
13944 and ppr.object_version_id = p_object_version_id
13945 and ppr.structure_version_id = p_structure_version_id
13946 and ppr.object_type IN ('PA_TASKS','PA_STRUCTURES') -- -- Bug 4498610 : Added PA_STRUCTURES
13947 and ppr.current_flag = 'Y';
13948
13949
13950 cursor cur_rollup_percent2 (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13951 p_structure_version_id NUMBER) is
13952 select ppr.EFF_ROLLUP_PERCENT_COMP,ppr.completed_percentage, actual_start_date, actual_finish_date -- 4498610 : Added completed_percentage, actual_start_date, actual_finish_date
13953 from pa_progress_rollup ppr
13954 where ppr.project_id = p_project_id
13955 and ppr.object_id = p_object_id
13956 and ppr.object_version_id = p_object_version_id
13957 and ppr.structure_version_id IS NULL
13958 and ppr.current_flag = 'Y'
13959 and ppr.object_type IN ('PA_TASKS','PA_STRUCTURES') -- Bug 4498610 : Added PA_STRUCTURES
13960 ;
13961
13962 --bug 3959087, end
13963
13964 -- Bug 3976633 : Added cursor cur_progress_exists
13965 cursor cur_progress_exists (c_project_id NUMBER, c_object_id NUMBER, c_structure_version_id NUMBER, c_version_enabled_flag VARCHAR2) is
13966 select 'Y'
13967 from pa_progress_rollup ppr
13968 where ppr.project_id = c_project_id
13969 and ppr.object_id = c_object_id
13970 and ((c_version_enabled_flag = 'N' AND ppr.structure_version_id IS NULL) OR (c_version_enabled_flag = 'Y' AND ppr.structure_version_id = p_structure_version_id))
13971 and ppr.object_type = 'PA_TASKS'
13972 and ppr.structure_type = 'WORKPLAN';
13973
13974 l_progress_exists VARCHAR2(1):='N';
13975
13976 --BUG 3919800, rtarway
13977 cursor cur_get_act_effort (p_project_id NUMBER, p_object_id NUMBER, p_structure_version_id NUMBER) is
13978 select nvl(ACT_LABOR_HRS, 0)+nvl(ACT_EQUIP_HRS,0)
13979 from pji_xbs_plans_v
13980 where project_id = p_project_id
13981 and proj_element_id = p_object_id
13982 and structure_version_id = p_structure_version_id ;
13983
13984 l_curr_override_pc NUMBER; -- Bug 4498610
13985
13986 BEGIN
13987
13988 IF (p_debug_mode = 'Y') THEN
13989 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO begin');
13990 END IF;
13991
13992 IF (p_commit = FND_API.G_TRUE) THEN
13993 savepoint UPDATE_task_det_sch;
13994 END IF;
13995
13996 l_debug_mode := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',fnd_global.user_id,fnd_global.login_id,275,null,null), 'N');
13997
13998 IF l_debug_mode = 'Y' THEN
13999 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO Start : Passed Parameters :', x_Log_Level=> 3);
14000 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_calling_module='||p_calling_module, x_Log_Level=> 3);
14001 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_task_ver_id='||p_task_ver_id, x_Log_Level=> 3);
14002 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
14003 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_planned_effort='||p_planned_effort, x_Log_Level=> 3);
14004 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_ETC_effort='||p_ETC_effort, x_Log_Level=> 3);
14005 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_structure_version_id='||p_structure_version_id, x_Log_Level=> 3);
14006 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_object_type='||p_object_type, x_Log_Level=> 3);
14007 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_etc_cost='||p_etc_cost, x_Log_Level=> 3);
14008 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_actual_effort='||p_actual_effort, x_Log_Level=> 3);
14009 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_percent_complete='||p_percent_complete, x_Log_Level=> 3);
14010 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_res_assign_id='||p_res_assign_id, x_Log_Level=> 3);
14011 END IF;
14012
14013 l_version_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id); --maansari5/9
14014
14015 --The following actions are to be performed only when p_object_type = 'PA_TASKS'
14016
14017 --IF (p_object_type = 'PA_TASKS') THEN --- Bug 4498610
14018 IF (p_object_type IN ('PA_TASKS','PA_STRUCTURES')) THEN --- Bug 4498610
14019
14020 -- Bug Fix 5726773
14021 -- Support negative quantities and amounts.
14022 -- Commenting out the following validations.
14023 /*
14024 -- BEGIN: Code to raise error if negative etc values or planned values are entered.
14025 IF ((p_planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
14026 AND (nvl(p_planned_effort,0) < 0)) THEN
14027
14028 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
14029 ,p_msg_name => 'PA_TP_NO_NEG_PLN');
14030
14031 x_msg_data := 'PA_TP_NO_NEG_PLN';
14032 x_return_status := 'E';
14033 RAISE FND_API.G_EXC_ERROR;
14034 END IF;
14035
14036 IF (((p_etc_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and (nvl(p_etc_cost,0) < 0))
14037 or ((p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and (nvl(p_etc_effort,0) < 0))) THEN
14038
14039 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
14040 ,p_msg_name => 'PA_TP_NO_NEG_ETC');
14041
14042 x_msg_data := 'PA_TP_NO_NEG_ETC';
14043 x_return_status := 'E';
14044 RAISE FND_API.G_EXC_ERROR;
14045 END IF;
14046 */
14047 -- End of Bug Fix 5726773
14048
14049 -- END: Code to raise error if negative etc values or planned values are entered.
14050 IF l_debug_mode = 'Y' THEN
14051 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_version_enabled='||l_version_enabled, x_Log_Level=> 3);
14052 END IF;
14053
14054 -- Get the task_id.
14055
14056 select proj_element_id
14057 into l_task_id
14058 from pa_proj_element_versions
14059 where element_version_id = p_task_ver_id
14060 and parent_structure_version_id = p_structure_version_id;
14061
14062 IF l_debug_mode = 'Y' THEN
14063 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_id='||l_task_id, x_Log_Level=> 3);
14064 END IF;
14065 --bug 3959087
14066 SELECT project_currency_code INTO l_prj_currency_code FROM pa_projects_all WHERE project_id = p_project_id;
14067
14068 -- Bug 3856161 : This code will never excute for assignments, I don't know why has this written here
14069 -- Setting object_id for Tasks / Assignments.
14070 IF (p_object_type = 'PA_ASSIGNMENTS') THEN
14071 l_object_id := p_res_assign_id;
14072 ELSE
14073 l_object_id := l_task_id;
14074 END IF;
14075
14076 IF l_debug_mode = 'Y' THEN
14077 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_object_id='||l_object_id, x_Log_Level=> 3);
14078 END IF;
14079
14080
14081 -- Logic to make sure that planned value = etc value + actual value if etc is changed.
14082 -- If both planned value and etc value are changed, then planned value always takes precedence,
14083 -- set etc value as (planned value - actual value).
14084 -- Confirmed this logic with Clint Chow.
14085
14086 IF ((nvl(p_planned_effort,0) > 0 and NVL( p_planned_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14087 or (nvl(p_etc_effort,0) > 0 and NVL(p_etc_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) THEN
14088
14089 -- Get previous planned value.
14090 -- Bug 3856161 : This code will never excute for assignments, I don't know why has this written here
14091 IF p_object_type ='PA_ASSIGNMENTS' THEN
14092 open cur_prev_planned_assgn_effort(p_project_id,l_task_id
14093 ,p_structure_version_id,p_res_assign_id);
14094 fetch cur_prev_planned_assgn_effort into l_prev_planned_effort;
14095 close cur_prev_planned_assgn_effort;
14096 ELSE
14097 open cur_prev_planned_task_effort(p_project_id,l_task_id,p_structure_version_id);
14098 fetch cur_prev_planned_task_effort into l_prev_planned_effort;
14099 close cur_prev_planned_task_effort;
14100 END IF;
14101
14102 IF l_debug_mode = 'Y' THEN
14103 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_prev_planned_effort='||l_prev_planned_effort, x_Log_Level=> 3);
14104 END IF;
14105
14106 -- Get previous etc value.
14107 --maansari5/9
14108 IF NVL(l_version_enabled,'N') = 'Y'
14109 THEN
14110 open cur_prev_etc_effort(p_project_id,l_object_id,p_structure_version_id);
14111 fetch cur_prev_etc_effort into l_prev_etc_effort;
14112 close cur_prev_etc_effort;
14113 ELSE
14114 open cur_prev_etc_effort2(p_project_id,l_object_id);
14115 fetch cur_prev_etc_effort2 into l_prev_etc_effort;
14116 close cur_prev_etc_effort2;
14117 END IF;
14118
14119 IF l_debug_mode = 'Y' THEN
14120 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_prev_etc_effort='||l_prev_etc_effort, x_Log_Level=> 3);
14121 END IF;
14122
14123 --maansari5/9
14124
14125 -- Initialize the variables for planned effort and etc effort.
14126
14127 l_planned_effort := null;
14128 l_etc_effort := null;
14129
14130 -- If planned value has been updated set etc value as (planned value - actual value).
14131 --bug 3959087, start
14132 IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14133 l_actual_effort := round(p_actual_effort, 5);
14134 ELSE
14135 --BUG 3919800, rtarway
14136 if p_calling_module <> 'AMG'
14137 then
14138 l_actual_effort := 0;
14139 else
14140 --BUG 3919800, rtarway
14141 --get actual effort using cursor cur_get_act_effort
14142 OPEN cur_get_act_effort(p_project_id,l_object_id,p_structure_version_id);
14143 FETCH cur_get_act_effort into l_actual_effort;
14144 CLOSE cur_get_act_effort;
14145 end if;
14146 END IF;
14147 --bug 3959087, end
14148
14149 IF l_debug_mode = 'Y' THEN
14150 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_actual_effort='||l_actual_effort, x_Log_Level=> 3);
14151 END IF;
14152
14153 --maansari5/9
14154 IF (p_planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14155 --and (NVL(l_prev_planned_effort,0) <> NVL(p_planned_effort,0))) THEN --bug 3959087
14156 THEN
14157 --l_planned_effort := p_planned_effort; --bug 3959087
14158 l_planned_effort := round(p_planned_effort, 5);
14159 --BUG 3919800, rtarway
14160 --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14161 IF (l_actual_effort >= 0 ) THEN
14162 --l_etc_effort := NVL(p_planned_effort,0) - NVL(p_actual_effort, 0); --bug 3959087
14163 l_etc_effort := round((NVL(p_planned_effort,0) - NVL(l_actual_effort, 0)), 5);
14164 END IF;
14165 -- else set planned value as (etc vallue + actual value).
14166 ELSIF (p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14167 --and (NVL(l_prev_etc_effort,0) <> nvl(p_etc_effort,0))) THEN --bug 3959087
14168 THEN
14169 --l_etc_effort := NVL(p_etc_effort,0); --bug 3959087
14170 l_etc_effort := NVL(round(p_etc_effort,5),0);
14171 --BUG 3919800, rtarway
14172 --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14173 IF (l_actual_effort >= 0 ) THEN
14174 -- l_planned_effort := NVL( p_etc_effort, 0) + NVL(p_actual_effort,0); --bug 3959087
14175 l_planned_effort := round( (NVL( p_etc_effort, 0) + NVL(l_actual_effort,0)), 5);
14176 END IF;
14177 END IF;
14178 --maansari5/9
14179 END IF; -- IF ((nvl(p_planned_effort,0) > 0 and NVL( p_planned_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14180
14181 --Bug#6144931 START
14182
14183 l_weighting_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
14184
14185 IF l_weighting_basis = 'EFFORT' AND NVL(l_prev_planned_effort,0) <> NVL(l_planned_effort,0)
14186 THEN
14187 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
14188 p_project_id => p_project_id,
14189 p_structure_version_id => p_structure_version_id,
14190 p_update_wbs_flag => 'Y',
14191 x_return_status => l_return_status,
14192 x_msg_count => l_msg_count,
14193 x_msg_data => l_msg_data
14194 );
14195
14196 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
14197 l_msg_count := FND_MSG_PUB.count_msg;
14198 IF l_msg_count > 0 THEN
14199 x_msg_count := l_msg_count;
14200 IF x_msg_count = 1 THEN
14201 x_msg_data := l_msg_data;
14202 END IF;
14203 RAISE FND_API.G_EXC_ERROR;
14204 END IF;
14205 END IF;
14206 END IF;
14207
14208 --Bug#6144931 END
14209
14210 IF l_debug_mode = 'Y' THEN
14211 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_planned_effort='||l_planned_effort, x_Log_Level=> 3);
14212 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_etc_effort='||l_etc_effort, x_Log_Level=> 3);
14213 END IF;
14214
14215 --bug 3959087, start
14216 l_lowest_level_task := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_ver_id );
14217 l_assignment_exists := PA_PROGRESS_UTILS.check_assignment_exists(p_project_id, p_task_ver_id, 'PA_TASKS');
14218
14219 IF l_debug_mode = 'Y' THEN
14220 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_lowest_level_task='||l_lowest_level_task, x_Log_Level=> 3);
14221 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_assignment_exists='||l_assignment_exists, x_Log_Level=> 3);
14222 END IF;
14223 --bug 3959087, end
14224
14225 -- Call: pa_fp_planning_transaction_pub.update_planning_transactions().
14226
14227 --IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_ver_id ) = 'Y' AND
14228 IF (l_lowest_level_task = 'Y' AND --bug 3959087
14229 PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y'
14230 -- Progress Management Changes, Bug # 3420093.
14231 --AND PA_PROGRESS_UTILS.check_assignment_exists(p_project_id,p_task_ver_id,p_object_type) = 'N' --bug 3864543
14232 AND l_assignment_exists = 'N' --bug 3959087
14233 AND p_object_type = 'PA_TASKS'
14234 AND p_calling_module <> 'AMG')
14235 THEN
14236
14237 OPEN cur_sch;
14238 FETCH cur_sch INTO l_SCHEDULED_START_DATE, l_SCHEDULED_END_DATE;
14239 CLOSE cur_sch;
14240 IF l_debug_mode = 'Y' THEN
14241 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_SCHEDULED_START_DATE='||l_SCHEDULED_START_DATE, x_Log_Level=> 3);
14242 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_SCHEDULED_END_DATE='||l_SCHEDULED_END_DATE, x_Log_Level=> 3);
14243 END IF;
14244
14245 l_task_ver_ids2.extend(1);
14246 l_planned_effort2.extend(1);
14247 l_start_dates.extend(1);
14248 l_end_dates.extend(1);
14249
14250 l_task_ver_ids2(1) := p_task_ver_id;
14251
14252 /* Start Modifications to fix Bug # 3640498. */
14253
14254 IF ((l_planned_effort = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) or (nvl(l_planned_effort,0) = 0)) then
14255 l_planned_effort2(1) := FND_API.G_MISS_NUM;
14256 ELSE
14257 l_planned_effort2(1) := l_planned_effort;
14258 END IF;
14259
14260 /* End Modifications to fix Bug # 3640498. */
14261
14262 l_start_dates(1) := l_SCHEDULED_START_DATE;
14263 l_end_dates(1) := l_SCHEDULED_END_DATE;
14264
14265 /*Smukka Bug No. 3474141 Date 03/01/2004 */
14266 /*moved pa_fp_planning_transaction_pub.update_planning_transactions into plsql block */
14267 BEGIN
14268 IF NVL(l_prev_planned_effort,0) <> NVL(l_planned_effort,0)
14269 THEN
14270 IF l_debug_mode = 'Y' THEN
14271 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling update_planning_transactions', x_Log_Level=> 3);
14272 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_ver_ids2='||p_task_ver_id, x_Log_Level=> 3);
14273 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_planned_effort2='||l_planned_effort, x_Log_Level=> 3);
14274 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_start_dates='||l_SCHEDULED_START_DATE, x_Log_Level=> 3);
14275 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_end_dates='||l_SCHEDULED_END_DATE, x_Log_Level=> 3);
14276 END IF;
14277
14278 pa_fp_planning_transaction_pub.update_planning_transactions
14279 (
14280 p_context => 'WORKPLAN'
14281 ,p_struct_elem_version_id => p_structure_version_id
14282 ,p_task_elem_version_id_tbl => l_task_ver_ids2
14283 ,p_planned_people_effort_tbl => l_planned_effort2
14284 ,p_start_date_tbl => l_start_dates
14285 ,p_end_date_tbl => l_end_dates
14286 ,x_return_status => l_return_status
14287 ,x_msg_count => l_msg_count
14288 ,x_msg_data => l_msg_data
14289 );
14290 END IF;
14291 EXCEPTION
14292 WHEN OTHERS THEN
14293 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
14294 p_procedure_name => 'update_task_det_sch_info',
14295 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.update_planning_transactions:'||SQLERRM,1,240));
14296 RAISE FND_API.G_EXC_ERROR;
14297 END;
14298 --end 3301192 fp changes
14299 END IF; --<< l_planned_effort >>
14300
14301 -- Progress Management Changes, Bug # 3420093.
14302
14303 -- The following code inserts progress records into the pa_progress_rollup_table.
14304 -- this is required if only any of: p_etc_effort, p_etc_cost and p_percent_complete is not null
14305
14306
14307 --if ((nvl(p_etc_effort,0) > 0 and p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14308 -- or (nvl(p_etc_cost,0) > 0 and p_etc_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --maansari5/9
14309
14310
14311 l_next_prog_cycle_date := pa_progress_utils.get_next_progress_cycle(p_project_id => p_project_id , p_task_id => l_task_id);
14312 IF l_debug_mode = 'Y' THEN
14313 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_next_prog_cycle_date='||l_next_prog_cycle_date, x_Log_Level=> 3);
14314 END IF;
14315
14316
14317 IF (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14318 THEN
14319 -- Progress Management Changes, Bug # 3420093.
14320 -- Begin logic to create pa_progress_rollup record for the Task / Assignment:
14321 -- Get the next progress cycle id.
14322 -- Bug 3856161 : Moving this code outside
14323 --l_next_prog_cycle_date := pa_progress_utils.get_next_progress_cycle(p_project_id => p_project_id
14324 -- , p_task_id => l_task_id);
14325 -- Progress Management Changes, Bug # 3420093.
14326 IF (p_percent_complete = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14327 l_percent_complete := null;
14328 ELSE
14329 --l_percent_complete := p_percent_complete; --bug 3959087
14330 l_percent_complete := round(p_percent_complete, 8); --Bug 6854114
14331 END IF;
14332
14333 -- Initializning the values for Override Percent Complete, Effective Rollup Percent Complete
14334 -- and Earned Value.
14335 -- Bug 3856161 : Reduced the scope of IF, now % cokplete should be rederived based on actual and etc too
14336 END IF;
14337
14338 l_eff_rollup_pc := null;
14339 l_override_pc := null;
14340 l_earned_value := null;
14341
14342 -- Setting values for Override Percent Complete, Effective Rollup Percent Complete
14343 -- and Earned Value.
14344
14345 IF (p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14346 --l_override_pc := p_percent_complete; --bug 3959087
14347 l_override_pc := round(p_percent_complete, 8); --Bug 6854114
14348 END IF;
14349
14350
14351 --bug 3959087, calculate percent complete for lowest level tasks only, depending on derivation code, start
14352
14353 /*IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14354 IF ((nvl(l_etc_effort,0)+nvl(p_actual_effort,0)) <> 0) THEN
14355 -- Bug 3856161
14356 --l_eff_rollup_pc := (nvl(l_etc_effort,0))/
14357 -- (nvl(l_etc_effort,0)+nvl(p_actual_effort,0));
14358 l_eff_rollup_pc := (nvl(p_actual_effort,0))/ (nvl(l_etc_effort,0)+nvl(p_actual_effort,0))*100;
14359 ELSE
14360 -- Bug 3856161
14361 --l_eff_rollup_pc := (nvl(l_etc_effort,0))/1;
14362 l_eff_rollup_pc := 0;
14363 END IF;
14364 -- Bug 3856161 : Reduced the scope of IF
14365 END IF;*/
14366
14367 -- 4498610 : Added PA_TASKS condition
14368 IF p_object_type = 'PA_TASKS' AND NVL( l_lowest_level_task, 'N' ) = 'Y' AND l_assignment_exists = 'N'
14369 THEN
14370 OPEN cur_proj_elements(l_task_id);
14371 FETCH cur_proj_elements INTO l_BASE_PERCENT_COMP_DERIV_CODE;
14372 CLOSE cur_proj_elements;
14373 IF l_debug_mode = 'Y' THEN
14374 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_BASE_PERCENT_COMP_DERIV_CODE='||l_BASE_PERCENT_COMP_DERIV_CODE, x_Log_Level=> 3);
14375 END IF;
14376
14377 IF l_BASE_PERCENT_COMP_DERIV_CODE = 'EFFORT'
14378 THEN
14379 --BUG 3919800, rtarway, commented IF
14380 --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14381
14382 IF ((nvl(l_etc_effort,0)+nvl(l_actual_effort,0)) <> 0) THEN
14383 l_eff_rollup_pc := round((nvl(l_actual_effort,0))/ (nvl(l_etc_effort,0)+nvl(l_actual_effort,0))*100, 2);
14384 ELSE
14385 l_eff_rollup_pc := 0;
14386 END IF;
14387 --END IF;
14388 ELSIF l_BASE_PERCENT_COMP_DERIV_CODE = 'COST'
14389 THEN
14390 OPEN cur_get_costs(p_project_id, l_task_id, p_structure_version_id);
14391 FETCH cur_get_costs INTO l_planned_cost, l_ppl_act_cost;
14392 CLOSE cur_get_costs;
14393
14394 IF l_debug_mode = 'Y' THEN
14395 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_ppl_act_cost='||l_ppl_act_cost, x_Log_Level=> 3);
14396 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_planned_cost='||l_planned_cost, x_Log_Level=> 3);
14397 END IF;
14398 IF (l_planned_cost <> 0)
14399 THEN
14400 l_eff_rollup_pc := round((l_ppl_act_cost/l_planned_cost)*100, 2);
14401 ELSE
14402 l_eff_rollup_pc := 0;
14403 END IF;
14404 END IF;
14405 ELSE -- for summary level task fetch the rolledup percent from progress table
14406 IF NVL(l_version_enabled,'N') = 'Y'
14407 THEN
14408 OPEN cur_rollup_percent(p_project_id, l_task_id, p_task_ver_id, p_structure_version_id);
14409 FETCH cur_rollup_percent INTO l_eff_rollup_pc, l_curr_override_pc,l_actual_start_date,l_actual_finish_date ;
14410 -- Bug 4498610 : Added l_curr_override_pc, l_actual_START_DATE, l_actual_FINISH_DATE
14411 CLOSE cur_rollup_percent;
14412 ELSE
14413 OPEN cur_rollup_percent2(p_project_id, l_task_id, p_task_ver_id, p_structure_version_id);
14414 FETCH cur_rollup_percent2 INTO l_eff_rollup_pc,l_curr_override_pc,l_actual_start_date,l_actual_finish_date ;
14415 -- Bug 4498610 : Added l_curr_override_pc, l_actual_START_DATE, l_actual_FINISH_DATE
14416 CLOSE cur_rollup_percent2;
14417 END IF;
14418 END IF;
14419
14420 --bug 3959087, calculate percent complete for lowest level tasks only, depending on derivation code, end
14421
14422 IF l_debug_mode = 'Y' THEN
14423 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_percent_complete='||l_percent_complete, x_Log_Level=> 3);
14424 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_override_pc='||l_override_pc, x_Log_Level=> 3);
14425 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_eff_rollup_pc='||l_eff_rollup_pc, x_Log_Level=> 3);
14426 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_curr_override_pc='||l_curr_override_pc, x_Log_Level=> 3);
14427 END IF;
14428
14429
14430 OPEN c_get_task_weight_method;
14431 FETCH c_get_task_weight_method INTO l_rollup_method;
14432 CLOSE c_get_task_weight_method;
14433
14434 OPEN c_proj_element_id;
14435 FETCH c_proj_element_id INTO l_proj_element_id;
14436 CLOSE c_proj_element_id;
14437
14438 l_earned_value := nvl(l_override_pc,l_eff_rollup_pc) *
14439 PA_PROGRESS_UTILS.Get_BAC_Value(p_project_id,l_rollup_method
14440 ,l_proj_element_id,p_structure_version_id
14441 ,'WORKPLAN');
14442
14443 --bug 3959087, start
14444 IF l_rollup_method = 'EFFORT'
14445 THEN
14446 l_earned_value := nvl(round(l_earned_value, 5),0);
14447 ELSE
14448 l_earned_value := nvl(pa_currency.round_trans_currency_amt(l_earned_value, l_prj_currency_code),0);
14449 END IF;
14450 --bug 3959087, end
14451
14452 IF l_debug_mode = 'Y' THEN
14453 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_earned_value='||l_earned_value, x_Log_Level=> 3);
14454 END IF;
14455
14456 --END IF; Bug 3856161
14457
14458
14459
14460 --maansari5/11
14461 -- Bug 3856161 : Using l_eff_rollup_pc also
14462 IF NVL(l_percent_complete,l_eff_rollup_pc) > 0 AND NVL(l_percent_complete,l_eff_rollup_pc) <100
14463 THEN
14464 -- Bug 4498610 : Added nvl actual_start_date
14465 l_actual_START_DATE := nvl(l_actual_start_date,l_SCHEDULED_START_DATE);
14466 l_actual_finish_DATE := null;
14467 ELSIF NVL(l_percent_complete,l_eff_rollup_pc) > 0 AND NVL(l_percent_complete,l_eff_rollup_pc) =100
14468 THEN
14469 -- Bug 4498610 : Added nvl actual_start_date and finish_date
14470 l_actual_START_DATE := nvl(l_actual_start_date,l_SCHEDULED_START_DATE);
14471 l_actual_finish_DATE := nvl(l_actual_finish_date,l_SCHEDULED_END_DATE);
14472 END IF;
14473
14474 IF l_debug_mode = 'Y' THEN
14475 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_actual_START_DATE='||l_actual_START_DATE, x_Log_Level=> 3);
14476 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_actual_finish_DATE='||l_actual_finish_DATE, x_Log_Level=> 3);
14477 END IF;
14478
14479 -- Progress Management Changes, Bug # 3420093.
14480 -- If workplan versioning is disabled for the project.
14481 -- Bug 3856161 : Added this IF condition
14482
14483 IF ( (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14484
14485 -- Start modifications for Bug # 3879658.
14486
14487 -- OR
14488 --(p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14489
14490 -- End modifications for Bug # 3879658.
14491 )
14492 THEN
14493 -- Bug 4498610 : Added code below
14494 IF l_curr_override_pc IS NULL AND (l_percent_complete = l_eff_rollup_pc )THEN
14495 l_percent_complete := null;
14496 END IF;
14497
14498 IF (l_version_enabled = 'N') THEN --maansari5/9
14499 --- If progress exists, update the latest existing progress record
14500 open cur_progress2(p_project_id,l_object_id,p_task_ver_id,null,'Y');
14501 fetch cur_progress2 into cur_progress_rec;
14502 IF cur_progress2%found THEN
14503
14504 update pa_progress_rollup set
14505 --as_of_date = l_next_prog_cycle_date,
14506 estimated_remaining_effort = null --l_etc_effort
14507 ,completed_percentage = l_percent_complete
14508 ,eff_rollup_percent_comp = l_eff_rollup_pc
14509 ,earned_value = l_earned_value
14510 ,actual_start_date = l_actual_start_date
14511 ,actual_finish_date = l_actual_finish_date
14512 ,last_update_date = sysdate
14513 ,last_updated_by = l_user_id
14514 --,creation_date = sysdate
14515 --,created_by = l_user_id
14516 ,last_update_login = l_login_id
14517 where progress_rollup_id = cur_progress_rec.progress_rollup_id;
14518
14519 -- If progress does not exist, create a published progress record.
14520 l_rollup_as_of_date := cur_progress_rec.as_of_date;
14521
14522 --bug no.3708948 start
14523 update pa_percent_completes set completed_percentage = l_percent_complete
14524 where project_id = p_project_id
14525 and object_id = l_task_id
14526 and date_computed =l_rollup_as_of_date
14527 and current_flag = 'Y'
14528 and published_flag = 'Y';
14529 --bug no.3708948 end
14530 ELSE
14531 l_progress_rollup_id := null;
14532
14533 -- Start modifications for Bug # 3879658.
14534
14535 open cur_progress_status;
14536 fetch cur_progress_status into l_init_prog_status_code;
14537 close cur_progress_status;
14538
14539 -- End modifications for Bug # 3879658.
14540
14541 PA_PROGRESS_ROLLUP_PKG.INSERT_ROW(
14542 X_PROGRESS_ROLLUP_ID => l_progress_rollup_id
14543 ,X_PROJECT_ID => p_project_id
14544 ,X_OBJECT_ID => l_object_id
14545 ,X_OBJECT_TYPE => p_object_type
14546 ,X_AS_OF_DATE => l_next_prog_cycle_date
14547 ,X_OBJECT_VERSION_ID => p_task_ver_id
14548 ,X_LAST_UPDATE_DATE => SYSDATE
14549 ,X_LAST_UPDATED_BY => l_user_id
14550 ,X_CREATION_DATE => SYSDATE
14551 ,X_CREATED_BY => l_user_id
14552 ,X_PROGRESS_STATUS_CODE => l_init_prog_status_code -- Bug # 3879658 -- 'PROGRESS_STAT_ON_TRACK' --maansari5/11
14553 ,X_LAST_UPDATE_LOGIN => l_login_id
14554 ,X_INCREMENTAL_WORK_QTY => null
14555 ,X_CUMULATIVE_WORK_QTY => null
14556 ,X_BASE_PERCENT_COMPLETE => null
14557 ,X_EFF_ROLLUP_PERCENT_COMP => l_eff_rollup_pc
14558 ,X_COMPLETED_PERCENTAGE => l_percent_complete
14559 ,X_ESTIMATED_START_DATE => null
14560 ,X_ESTIMATED_FINISH_DATE => null
14561 ,X_ACTUAL_START_DATE => l_actual_start_DATE
14562 ,X_ACTUAL_FINISH_DATE => l_actual_finish_DATE
14563 ,X_EST_REMAINING_EFFORT => null --l_etc_effort
14564 ,X_BASE_PERCENT_COMP_DERIV_CODE => null
14565 ,X_BASE_PROGRESS_STATUS_CODE => null
14566 ,X_EFF_ROLLUP_PROG_STAT_CODE => null
14567 ,x_percent_complete_id => null
14568 ,X_STRUCTURE_TYPE => 'WORKPLAN'
14569 ,X_PROJ_ELEMENT_ID => l_task_id
14570 ,X_STRUCTURE_VERSION_ID => null
14571 ,X_PPL_ACT_EFFORT_TO_DATE => null
14572 ,X_EQPMT_ACT_EFFORT_TO_DATE => null
14573 ,X_EQPMT_ETC_EFFORT => null
14574 ,X_OTH_ACT_COST_TO_DATE_TC => null
14575 ,X_OTH_ACT_COST_TO_DATE_FC => null
14576 ,X_OTH_ACT_COST_TO_DATE_PC => null
14577 ,X_OTH_ETC_COST_TC => null
14578 ,X_OTH_ETC_COST_FC => null
14579 ,X_OTH_ETC_COST_PC => null
14580 ,X_PPL_ACT_COST_TO_DATE_TC => null
14581 ,X_PPL_ACT_COST_TO_DATE_FC => null
14582 ,X_PPL_ACT_COST_TO_DATE_PC => null
14583 ,X_PPL_ETC_COST_TC => null
14584 ,X_PPL_ETC_COST_FC => null
14585 ,X_PPL_ETC_COST_PC => null
14586 ,X_EQPMT_ACT_COST_TO_DATE_TC => null
14587 ,X_EQPMT_ACT_COST_TO_DATE_FC => null
14588 ,X_EQPMT_ACT_COST_TO_DATE_PC => null
14589 ,X_EQPMT_ETC_COST_TC => null
14590 ,X_EQPMT_ETC_COST_FC => null
14591 ,X_EQPMT_ETC_COST_PC => null
14592 ,X_EARNED_VALUE => l_earned_value
14593 ,X_TASK_WT_BASIS_CODE => null
14594 ,X_SUBPRJ_PPL_ACT_EFFORT => null
14595 ,X_SUBPRJ_EQPMT_ACT_EFFORT => null
14596 ,X_SUBPRJ_PPL_ETC_EFFORT => null
14597 ,X_SUBPRJ_EQPMT_ETC_EFFORT => null
14598 ,X_SBPJ_OTH_ACT_COST_TO_DATE_TC => null
14599 ,X_SBPJ_OTH_ACT_COST_TO_DATE_FC => null
14600 ,X_SBPJ_OTH_ACT_COST_TO_DATE_PC => null
14601 ,X_SUBPRJ_PPL_ACT_COST_TC => null
14602 ,X_SUBPRJ_PPL_ACT_COST_FC => null
14603 ,X_SUBPRJ_PPL_ACT_COST_PC => null
14604 ,X_SUBPRJ_EQPMT_ACT_COST_TC => null
14605 ,X_SUBPRJ_EQPMT_ACT_COST_FC => null
14606 ,X_SUBPRJ_EQPMT_ACT_COST_PC => null
14607 ,X_SUBPRJ_OTH_ETC_COST_TC => null
14608 ,X_SUBPRJ_OTH_ETC_COST_FC => null
14609 ,X_SUBPRJ_OTH_ETC_COST_PC => null
14610 ,X_SUBPRJ_PPL_ETC_COST_TC => null
14611 ,X_SUBPRJ_PPL_ETC_COST_FC => null
14612 ,X_SUBPRJ_PPL_ETC_COST_PC => null
14613 ,X_SUBPRJ_EQPMT_ETC_COST_TC => null
14614 ,X_SUBPRJ_EQPMT_ETC_COST_FC => null
14615 ,X_SUBPRJ_EQPMT_ETC_COST_PC => null
14616 ,X_SUBPRJ_EARNED_VALUE => null
14617 ,X_CURRENT_FLAG => 'Y'
14618 ,X_PROJFUNC_COST_RATE_TYPE => null
14619 ,X_PROJFUNC_COST_EXCHANGE_RATE => null
14620 -- ,X_PROJFUNC_COST_RATE_DATE_TYPE => null
14621 ,X_PROJFUNC_COST_RATE_DATE => null
14622 ,X_PROJ_COST_RATE_TYPE => null
14623 ,X_PROJ_COST_EXCHANGE_RATE => null
14624 -- ,X_PROJ_COST_RATE_DATE_TYPE => null
14625 ,X_PROJ_COST_RATE_DATE => null
14626 ,X_TXN_CURRENCY_CODE => null
14627 ,X_PROG_PA_PERIOD_NAME => PA_PROGRESS_UTILS.Prog_Get_Pa_Period_Name(l_next_prog_cycle_date) --maansari5/11
14628 ,X_PROG_GL_PERIOD_NAME => PA_PROGRESS_UTILS.Prog_Get_gl_Period_Name(l_next_prog_cycle_date) --maansari5/11
14629 ,X_OTH_QUANTITY_to_date => null --maansari5/9
14630 ,X_OTH_ETC_QUANTITY => null
14631 --bug 3621404
14632 ,X_OTH_ACT_RAWCOST_TO_DATE_TC => null
14633 ,X_OTH_ACT_RAWCOST_TO_DATE_FC => null
14634 ,X_OTH_ACT_RAWCOST_TO_DATE_PC => null
14635 ,X_OTH_ETC_RAWCOST_TC => null
14636 ,X_OTH_ETC_RAWCOST_FC => null
14637 ,X_OTH_ETC_RAWCOST_PC => null
14638 ,X_PPL_ACT_RAWCOST_TO_DATE_TC => null
14639 ,X_PPL_ACT_RAWCOST_TO_DATE_FC => null
14640 ,X_PPL_ACT_RAWCOST_TO_DATE_PC => null
14641 ,X_PPL_ETC_RAWCOST_TC => null
14642 ,X_PPL_ETC_RAWCOST_FC => null
14643 ,X_PPL_ETC_RAWCOST_PC => null
14644 ,X_EQPMT_ACT_RAWCOST_TO_DATE_TC => null
14645 ,X_EQPMT_ACT_RAWCOST_TO_DATE_FC => null
14646 ,X_EQPMT_ACT_RAWCOST_TO_DATE_PC => null
14647 ,X_EQPMT_ETC_RAWCOST_TC => null
14648 ,X_EQPMT_ETC_RAWCOST_FC => null
14649 ,X_EQPMT_ETC_RAWCOST_PC => null
14650 ,X_SP_OTH_ACT_RAWCOST_TODATE_TC => null
14651 ,X_SP_OTH_ACT_RAWCOST_TODATE_FC => null
14652 ,X_SP_OTH_ACT_RAWCOST_TODATE_PC => null
14653 ,X_SUBPRJ_PPL_ACT_RAWCOST_TC => null
14654 ,X_SUBPRJ_PPL_ACT_RAWCOST_FC => null
14655 ,X_SUBPRJ_PPL_ACT_RAWCOST_PC => null
14656 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_TC => null
14657 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_FC => null
14658 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_PC => null
14659 ,X_SUBPRJ_OTH_ETC_RAWCOST_TC => null
14660 ,X_SUBPRJ_OTH_ETC_RAWCOST_FC => null
14661 ,X_SUBPRJ_OTH_ETC_RAWCOST_PC => null
14662 ,X_SUBPRJ_PPL_ETC_RAWCOST_TC => null
14663 ,X_SUBPRJ_PPL_ETC_RAWCOST_FC => null
14664 ,X_SUBPRJ_PPL_ETC_RAWCOST_PC => null
14665 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_TC => null
14666 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_FC => null
14667 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_PC => null
14668 );
14669 --bug 3708948
14670
14671 l_rollup_as_of_date := l_next_prog_cycle_date;
14672
14673
14674 END IF; -- IF cur_progress2%found THEN
14675 CLOSE cur_progress2;
14676 --bug 3708948 commented as this is causing new record to be inserted, moved this code up Satish
14677 --l_rollup_as_of_date := l_next_prog_cycle_date;
14678 -- If workplan versioning is enabled for the project.
14679 ELSE -- Version Enabled
14680 -- If working progress exists then update the working progress rec.
14681
14682 /* Bug # 3755089. Modified the following cursor. */
14683
14684 open cur_progress(p_project_id,l_object_id,p_task_ver_id,p_structure_version_id);
14685 fetch cur_progress into cur_progress_rec;
14686 if cur_progress%found then
14687
14688 update pa_progress_rollup set
14689 --as_of_date = l_next_prog_cycle_date,
14690 estimated_remaining_effort = null --l_etc_effort
14691 ,completed_percentage = l_percent_complete
14692 ,eff_rollup_percent_comp = l_eff_rollup_pc
14693 ,earned_value = l_earned_value
14694 ,actual_start_date = l_actual_start_date
14695 ,actual_finish_date = l_actual_finish_date
14696 ,last_update_date = sysdate
14697 ,last_updated_by = l_user_id
14698 --,creation_date = sysdate
14699 --,created_by = l_user_id
14700 ,last_update_login = l_login_id
14701 where progress_rollup_id = cur_progress_rec.progress_rollup_id;
14702
14703 l_rollup_as_of_date := cur_progress_rec.as_of_date;
14704
14705 -- If working progress record does not exist.
14706 else
14707 -- If published progress record exists, set the as_of_date for the progress record
14708
14709 close cur_progress;
14710 open c_max_as_of_date_wkg; ---4501133
14711 fetch c_max_as_of_date_wkg into l_as_of_date;
14712 close c_max_as_of_date_wkg;
14713 if l_as_of_date is null then
14714
14715 open cur_progress2(p_project_id,l_object_id,p_task_ver_id,null,'Y');
14716 fetch cur_progress2 into cur_progress_rec;
14717 if cur_progress2%found then
14718
14719 if (cur_progress_rec.as_of_date > l_next_prog_cycle_date) then
14720 l_as_of_date := cur_progress_rec.as_of_date;
14721 else
14722 l_as_of_date := l_next_prog_cycle_date;
14723 end if;
14724
14725 /* Start code to fix issue in bug # 3755089. */
14726
14727 else
14728 l_as_of_date := l_next_prog_cycle_date;
14729
14730 /* End code to fix issue in bug # 3755089. */
14731
14732 end if;
14733 close cur_progress2;
14734 end if;
14735
14736 l_rollup_as_of_date := l_as_of_date;
14737
14738 -- Create a working progress record for the Task / Assignment.
14739
14740 l_progress_rollup_id := null;
14741
14742
14743 -- Start modifications for Bug # 3879658.
14744
14745 open cur_progress_status;
14746 fetch cur_progress_status into l_init_prog_status_code;
14747 close cur_progress_status;
14748
14749 -- End modifications for Bug # 3879658.
14750
14751 PA_PROGRESS_ROLLUP_PKG.INSERT_ROW(
14752 X_PROGRESS_ROLLUP_ID => l_progress_rollup_id
14753 ,X_PROJECT_ID => p_project_id
14754 ,X_OBJECT_ID => l_object_id
14755 ,X_OBJECT_TYPE => p_object_type
14756 ,X_AS_OF_DATE => l_as_of_date
14757 ,X_OBJECT_VERSION_ID => p_task_ver_id
14758 ,X_LAST_UPDATE_DATE => SYSDATE
14759 ,X_LAST_UPDATED_BY => l_user_id
14760 ,X_CREATION_DATE => SYSDATE
14761 ,X_CREATED_BY => l_user_id
14762 ,X_PROGRESS_STATUS_CODE => l_init_prog_status_code -- Bug # 3879658 -- 'PROGRESS_STAT_ON_TRACK' --maansari5/11
14763 ,X_LAST_UPDATE_LOGIN => l_login_id
14764 ,X_INCREMENTAL_WORK_QTY => null
14765 ,X_CUMULATIVE_WORK_QTY => null
14766 ,X_BASE_PERCENT_COMPLETE => null
14767 ,X_EFF_ROLLUP_PERCENT_COMP => l_eff_rollup_pc
14768 ,X_COMPLETED_PERCENTAGE => l_percent_complete
14769 ,X_ESTIMATED_START_DATE => null
14770 ,X_ESTIMATED_FINISH_DATE => null
14771 ,X_ACTUAL_START_DATE => l_actual_start_DATE
14772 ,X_ACTUAL_FINISH_DATE => l_actual_finish_DATE
14773 ,X_EST_REMAINING_EFFORT => null --l_etc_effort
14774 ,X_BASE_PERCENT_COMP_DERIV_CODE => null
14775 ,X_BASE_PROGRESS_STATUS_CODE => null
14776 ,X_EFF_ROLLUP_PROG_STAT_CODE => null
14777 ,x_percent_complete_id => null
14778 ,X_STRUCTURE_TYPE => 'WORKPLAN'
14779 ,X_PROJ_ELEMENT_ID => l_task_id
14780 ,X_STRUCTURE_VERSION_ID => p_structure_version_id
14781 ,X_PPL_ACT_EFFORT_TO_DATE => null
14782 ,X_EQPMT_ACT_EFFORT_TO_DATE => null
14783 ,X_EQPMT_ETC_EFFORT => null
14784 ,X_OTH_ACT_COST_TO_DATE_TC => null
14785 ,X_OTH_ACT_COST_TO_DATE_FC => null
14786 ,X_OTH_ACT_COST_TO_DATE_PC => null
14787 ,X_OTH_ETC_COST_TC => null
14788 ,X_OTH_ETC_COST_FC => null
14789 ,X_OTH_ETC_COST_PC => null
14790 ,X_PPL_ACT_COST_TO_DATE_TC => null
14791 ,X_PPL_ACT_COST_TO_DATE_FC => null
14792 ,X_PPL_ACT_COST_TO_DATE_PC => null
14793 ,X_PPL_ETC_COST_TC => null
14794 ,X_PPL_ETC_COST_FC => null
14795 ,X_PPL_ETC_COST_PC => null
14796 ,X_EQPMT_ACT_COST_TO_DATE_TC => null
14797 ,X_EQPMT_ACT_COST_TO_DATE_FC => null
14798 ,X_EQPMT_ACT_COST_TO_DATE_PC => null
14799 ,X_EQPMT_ETC_COST_TC => null
14800 ,X_EQPMT_ETC_COST_FC => null
14801 ,X_EQPMT_ETC_COST_PC => null
14802 ,X_EARNED_VALUE => l_earned_value
14803 ,X_TASK_WT_BASIS_CODE => null
14804 ,X_SUBPRJ_PPL_ACT_EFFORT => null
14805 ,X_SUBPRJ_EQPMT_ACT_EFFORT => null
14806 ,X_SUBPRJ_PPL_ETC_EFFORT => null
14807 ,X_SUBPRJ_EQPMT_ETC_EFFORT => null
14808 ,X_SBPJ_OTH_ACT_COST_TO_DATE_TC => null
14809 ,X_SBPJ_OTH_ACT_COST_TO_DATE_FC => null
14810 ,X_SBPJ_OTH_ACT_COST_TO_DATE_PC => null
14811 ,X_SUBPRJ_PPL_ACT_COST_TC => null
14812 ,X_SUBPRJ_PPL_ACT_COST_FC => null
14813 ,X_SUBPRJ_PPL_ACT_COST_PC => null
14814 ,X_SUBPRJ_EQPMT_ACT_COST_TC => null
14815 ,X_SUBPRJ_EQPMT_ACT_COST_FC => null
14816 ,X_SUBPRJ_EQPMT_ACT_COST_PC => null
14817 ,X_SUBPRJ_OTH_ETC_COST_TC => null
14818 ,X_SUBPRJ_OTH_ETC_COST_FC => null
14819 ,X_SUBPRJ_OTH_ETC_COST_PC => null
14820 ,X_SUBPRJ_PPL_ETC_COST_TC => null
14821 ,X_SUBPRJ_PPL_ETC_COST_FC => null
14822 ,X_SUBPRJ_PPL_ETC_COST_PC => null
14823 ,X_SUBPRJ_EQPMT_ETC_COST_TC => null
14824 ,X_SUBPRJ_EQPMT_ETC_COST_FC => null
14825 ,X_SUBPRJ_EQPMT_ETC_COST_PC => null
14826 ,X_SUBPRJ_EARNED_VALUE => null
14827 ,X_CURRENT_FLAG => 'Y' -- /* Bug # 3755089. */
14828 ,X_PROJFUNC_COST_RATE_TYPE => null
14829 ,X_PROJFUNC_COST_EXCHANGE_RATE => null
14830 -- ,X_PROJFUNC_COST_RATE_DATE_TYPE => null
14831 ,X_PROJFUNC_COST_RATE_DATE => null
14832 ,X_PROJ_COST_RATE_TYPE => null
14833 ,X_PROJ_COST_EXCHANGE_RATE => null
14834 -- ,X_PROJ_COST_RATE_DATE_TYPE => null
14835 ,X_PROJ_COST_RATE_DATE => null
14836 ,X_TXN_CURRENCY_CODE => null
14837 ,X_PROG_PA_PERIOD_NAME => PA_PROGRESS_UTILS.Prog_Get_Pa_Period_Name(l_as_of_date) --maansari5/11
14838 ,X_PROG_GL_PERIOD_NAME => PA_PROGRESS_UTILS.Prog_Get_gl_Period_Name(l_as_of_date) --maansari5/11
14839 ,X_OTH_QUANTITY_to_date => null --maansari5/9
14840 ,X_OTH_ETC_QUANTITY => null
14841 --bug 3621404
14842 ,X_OTH_ACT_RAWCOST_TO_DATE_TC => null
14843 ,X_OTH_ACT_RAWCOST_TO_DATE_FC => null
14844 ,X_OTH_ACT_RAWCOST_TO_DATE_PC => null
14845 ,X_OTH_ETC_RAWCOST_TC => null
14846 ,X_OTH_ETC_RAWCOST_FC => null
14847 ,X_OTH_ETC_RAWCOST_PC => null
14848 ,X_PPL_ACT_RAWCOST_TO_DATE_TC => null
14849 ,X_PPL_ACT_RAWCOST_TO_DATE_FC => null
14850 ,X_PPL_ACT_RAWCOST_TO_DATE_PC => null
14851 ,X_PPL_ETC_RAWCOST_TC => null
14852 ,X_PPL_ETC_RAWCOST_FC => null
14853 ,X_PPL_ETC_RAWCOST_PC => null
14854 ,X_EQPMT_ACT_RAWCOST_TO_DATE_TC => null
14855 ,X_EQPMT_ACT_RAWCOST_TO_DATE_FC => null
14856 ,X_EQPMT_ACT_RAWCOST_TO_DATE_PC => null
14857 ,X_EQPMT_ETC_RAWCOST_TC => null
14858 ,X_EQPMT_ETC_RAWCOST_FC => null
14859 ,X_EQPMT_ETC_RAWCOST_PC => null
14860 ,X_SP_OTH_ACT_RAWCOST_TODATE_TC => null
14861 ,X_SP_OTH_ACT_RAWCOST_TODATE_FC => null
14862 ,X_SP_OTH_ACT_RAWCOST_TODATE_PC => null
14863 ,X_SUBPRJ_PPL_ACT_RAWCOST_TC => null
14864 ,X_SUBPRJ_PPL_ACT_RAWCOST_FC => null
14865 ,X_SUBPRJ_PPL_ACT_RAWCOST_PC => null
14866 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_TC => null
14867 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_FC => null
14868 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_PC => null
14869 ,X_SUBPRJ_OTH_ETC_RAWCOST_TC => null
14870 ,X_SUBPRJ_OTH_ETC_RAWCOST_FC => null
14871 ,X_SUBPRJ_OTH_ETC_RAWCOST_PC => null
14872 ,X_SUBPRJ_PPL_ETC_RAWCOST_TC => null
14873 ,X_SUBPRJ_PPL_ETC_RAWCOST_FC => null
14874 ,X_SUBPRJ_PPL_ETC_RAWCOST_PC => null
14875 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_TC => null
14876 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_FC => null
14877 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_PC => null
14878 );
14879
14880 end if; -- if cur_progress%found then
14881 -- If working progress record does not exist.
14882
14883 /* Start code to fix issue in bug # 3755089. */
14884
14885 if cur_progress%isopen then
14886
14887 /* End code to fix issue in bug # 3755089. */
14888
14889 close cur_progress;
14890
14891 /* Start code to fix issue in bug # 3755089. */
14892
14893 end if;
14894
14895 /* End code to fix issue in bug # 3755089. */
14896
14897 end if; -- If workplan versioning is enabled for the project.
14898
14899
14900 -- end if;--IF Bug 3856161 (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14901 END IF; -- Bug 3856161 ( (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14902
14903
14904 IF p_object_type = 'PA_TASKS' THEN-- Bug 4498610 : Added IF
14905 -- Bug 3976633 : Added cursor cur_progress_exists
14906 OPEN cur_progress_exists (p_project_id, l_task_id, p_structure_version_id, l_version_enabled);
14907 FETCH cur_progress_exists INTO l_progress_exists;
14908 CLOSE cur_progress_exists;
14909
14910 IF NVL(l_progress_exists, 'N') = 'Y' THEN -- Bug 3976633
14911
14912 --maansari5/11
14913 OPEN c_get_task_weight_method;
14914 FETCH c_get_task_weight_method INTO l_rollup_method;
14915 CLOSE c_get_task_weight_method;
14916
14917
14918
14919 -- Call rollup_progress_pvt api for this task.
14920 IF l_debug_mode = 'Y' THEN
14921 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling Rollup For Tasks', x_Log_Level=> 3);
14922 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_id='||l_task_id, x_Log_Level=> 3);
14923 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_task_ver_id='||p_task_ver_id, x_Log_Level=> 3);
14924 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_method='||l_rollup_method, x_Log_Level=> 3);
14925 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_as_of_date='||l_rollup_as_of_date, x_Log_Level=> 3);
14926 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_as_of_date='||l_rollup_as_of_date, x_Log_Level=> 3);
14927 END IF;
14928 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
14929 IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N'
14930 then
14931 -- 4591321 : Always call populate_pji_tab_for_plan
14932 pa_progress_pub.populate_pji_tab_for_plan(
14933 p_init_msg_list => FND_API.G_FALSE,
14934 p_project_id => p_project_id,
14935 p_structure_version_id => p_structure_version_id,
14936 p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id),
14937 p_structure_type => 'WORKPLAN',
14938 x_return_status => l_return_status,
14939 x_msg_count => l_msg_count,
14940 x_msg_data => l_msg_data
14941 );
14942
14943 IF l_return_status <> 'S' THEN
14944 RAISE FND_API.G_EXC_ERROR;
14945 END IF;
14946
14947 -- Bug 3861259 End
14948
14949
14950 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
14951 p_init_msg_list => p_init_msg_list
14952 ,p_commit => p_commit
14953 ,p_validate_only => p_validate_only
14954 ,p_project_id => p_project_id
14955 ,p_structure_version_id => p_structure_version_id
14956 ,p_calling_module => p_calling_module --BUG 3919800, rtarway
14957 --maansari5/10
14958 ,p_object_type => p_object_type
14959 ,p_object_id => l_task_id
14960 ,p_object_version_id => p_task_ver_id
14961 ,p_task_version_id => p_task_ver_id
14962 --maansari5/10
14963 ,p_wp_rollup_method => l_rollup_method --maansari 5/11
14964 ,p_structure_type => 'WORKPLAN' --maansari 5/11
14965 ,p_as_of_date => l_rollup_as_of_date
14966 ,x_return_status => l_return_status
14967 ,x_msg_count => l_msg_count
14968 ,x_msg_data => l_msg_data);
14969 END IF;
14970 END IF ;--IF NVL(l_progress_exists, 'N') = 'Y' THEN
14971 END IF;-- p_object_type = 'PA_TASKS' THEN-- Bug 4498610 : Added END IF
14972 END IF; -- if (p_object_type ='PA_TASKS') then
14973
14974 -- Code to insert progress records nto the pa_progress_rollup_table.
14975
14976 /* END: The above actions are to be performed only when p_object_type = 'PA_TASKS'. */
14977
14978
14979 /* BEGIN: The following actions are to be performed only when p_object_type = 'PA_ASSIGNMENTS'. */
14980
14981 IF (p_object_type ='PA_ASSIGNMENTS') then
14982
14983 -- Call rollup API only is there is a working progress for the given task_version and
14984 -- structure_version. The as_of_date will then be the max(as_of_date() of the working progress.
14985 IF l_debug_mode = 'Y' THEN
14986 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Entered For Assignments', x_Log_Level=> 3);
14987 END IF;
14988
14989 --bug 4105720, get the task id
14990 OPEN c_proj_element_id;
14991 FETCH c_proj_element_id INTO l_task_id;
14992 CLOSE c_proj_element_id;
14993
14994 -- Bug 3976633 : Added cursor cur_progress_exists
14995 OPEN cur_progress_exists (p_project_id, l_task_id, p_structure_version_id, l_version_enabled);
14996 FETCH cur_progress_exists INTO l_progress_exists;
14997 CLOSE cur_progress_exists;
14998
14999 IF l_debug_mode = 'Y' THEN
15000 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_id '||l_task_id, x_Log_Level=> 3);
15001 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_progress_exists '||l_progress_exists, x_Log_Level=> 3);
15002 END IF;
15003
15004 IF NVL(l_progress_exists, 'N') = 'Y' THEN -- Bug 3976633
15005
15006
15007 open c_max_as_of_date_wkg;
15008 fetch c_max_as_of_date_wkg into l_rollup_as_of_date;
15009 --if (c_max_as_of_date_wkg%FOUND) then Bug 3856161
15010 IF l_rollup_as_of_date IS NOT NULL THEN
15011
15012 --maansari5/11
15013 OPEN c_get_task_weight_method;
15014 FETCH c_get_task_weight_method INTO l_rollup_method;
15015 CLOSE c_get_task_weight_method;
15016
15017 --bug 4105720, moved this code above
15018 /*OPEN c_proj_element_id;
15019 FETCH c_proj_element_id INTO l_task_id;
15020 CLOSE c_proj_element_id;*/
15021
15022 IF l_debug_mode = 'Y' THEN
15023 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling Rollup For Assignments', x_Log_Level=> 3);
15024 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_id='||l_task_id, x_Log_Level=> 3);
15025 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_task_ver_id='||p_task_ver_id, x_Log_Level=> 3);
15026 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_method='||l_rollup_method, x_Log_Level=> 3);
15027 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_as_of_date='||l_rollup_as_of_date, x_Log_Level=> 3);
15028 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_as_of_date='||l_rollup_as_of_date, x_Log_Level=> 3);
15029 END IF;
15030 -- 4591321 : Always call populate_pji_tab_for_plan
15031 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
15032 IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N'
15033 then
15034 pa_progress_pub.populate_pji_tab_for_plan(
15035 p_init_msg_list => FND_API.G_FALSE,
15036 --p_calling_module => p_calling_module,
15037 p_project_id => p_project_id,
15038 p_structure_version_id => p_structure_version_id,
15039 p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id),
15040 p_structure_type => 'WORKPLAN',
15041 x_return_status => l_return_status,
15042 x_msg_count => l_msg_count,
15043 x_msg_data => l_msg_data
15044 );
15045 IF l_return_status <> 'S' THEN
15046 RAISE FND_API.G_EXC_ERROR;
15047 END IF;
15048 -- Bug 3861259 End
15049
15050
15051
15052 -- Call rollup_progress_pvt api for this task or assignment.
15053 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
15054 p_init_msg_list => p_init_msg_list
15055 ,p_commit => p_commit
15056 ,p_validate_only => p_validate_only
15057 ,p_project_id => p_project_id
15058 ,p_structure_version_id => p_structure_version_id
15059 ,p_calling_module => p_calling_module--BUG 3919800, rtarway
15060 --maansari5/10
15061 ,p_object_type => 'PA_TASKS' -- p_object_type Bug 3856161
15062 ,p_object_id => l_task_id
15063 ,p_object_version_id => p_task_ver_id
15064 ,p_task_version_id => p_task_ver_id
15065 --maansari5/10
15066 ,p_wp_rollup_method => l_rollup_method --maansari 5/11
15067 ,p_structure_type => 'WORKPLAN' --maansari 5/11
15068 ,p_as_of_date => l_rollup_as_of_date
15069 ,x_return_status => l_return_status
15070 ,x_msg_count => l_msg_count
15071 ,x_msg_data => l_msg_data);
15072 -- Code to insert progress records nto the pa_progress_rollup_table.
15073 END IF;
15074 end if;
15075 close c_max_as_of_date_wkg;
15076 END IF; -- IF NVL(l_progress_exists, 'N') = 'Y'
15077 end if;
15078
15079 /* END: The above actions are to be performed only when p_object_type = 'PA_ASSIGNMENTS'. */
15080
15081 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
15082 x_msg_count := FND_MSG_PUB.count_msg;
15083 if x_msg_count = 1 then
15084 pa_interface_utils_pub.get_messages
15085 (p_encoded => FND_API.G_TRUE,
15086 p_msg_index => 1,
15087 p_msg_count => l_msg_count,
15088 p_msg_data => l_msg_data,
15089 p_data => l_data,
15090 p_msg_index_out => l_msg_index_out);
15091 x_msg_data := l_data;
15092 end if;
15093 raise FND_API.G_EXC_ERROR;
15094 end if;
15095
15096 x_return_status := FND_API.G_RET_STS_SUCCESS;
15097
15098 EXCEPTION
15099 WHEN FND_API.G_EXC_ERROR THEN
15100 IF (p_commit = FND_API.G_TRUE) THEN
15101 ROLLBACK to UPDATE_task_det_sch;
15102 END IF;
15103 x_msg_count := FND_MSG_PUB.count_msg;
15104 x_return_status := FND_API.G_RET_STS_ERROR;
15105 WHEN OTHERS THEN
15106 IF (p_commit = FND_API.G_TRUE) THEN
15107 ROLLBACK to UPDATE_task_det_sch;
15108 END IF;
15109 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15110 x_msg_count := FND_MSG_PUB.count_msg;
15111 --put message
15112 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15113 p_procedure_name => 'update_task_det_sch_info',
15114 p_error_text => SUBSTRB(SQLERRM,1,240));
15115 RAISE;
15116
15117 END update_task_det_sch_info;
15118
15119
15120 -- API name : Copy_Tasks_In_Bulk
15121 -- Type : Public procedure
15122 -- Pre-reqs : None
15123 -- Return Value : N/A
15124 -- Prameters
15125 -- p_api_version IN NUMBER N Not Null 1.0
15126 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
15127 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
15128 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
15129 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
15130 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
15131 -- p_debug_mode IN VARCHAR2 N Null N
15132 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15133 -- p_src_project_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15134 -- p_src_project_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15135 -- p_src_structre_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15136 -- p_src_structure_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15137 -- p_src_structure_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15138 -- p_src_structure_version_name IN VARCHAR2 N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15139 -- p_src_task_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15140 -- p_src_task_name IN VARCHAR2 N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15141 -- p_dest_structure_version_id IN NUMBER N NOT NULL
15142 -- p_dest_task_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15143 -- p_dest_project_id IN NUMBER NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15144 -- p_copy_option IN VARCHAR2 N NOT NULL
15145 -- p_peer_or_sub IN VARCHAR2 N NOT NULL
15146 -- x_return_status OUT VARCHAR2 N NULL
15147 -- x_msg_count OUT NUMBER N NULL
15148 -- x_msg_data OUT VARCHAR2 N NULL
15149 --
15150 -- History
15151 --
15152 -- 22-FEB-05 Created avaithia
15153 --
15154 --
15155
15156 PROCEDURE Copy_Tasks_In_Bulk
15157 (
15158 p_api_version IN NUMBER :=1.0,
15159 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
15160 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
15161 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
15162 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
15163 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
15164 p_debug_mode IN VARCHAR2 :='N',
15165 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15166 p_src_project_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15167 p_src_project_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
15168 p_src_structure_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15169 p_src_structure_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
15170 p_src_structure_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15171 p_src_structure_version_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
15172 p_src_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15173 p_src_task_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
15174 p_dest_structure_version_id IN NUMBER,
15175 p_dest_task_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15176 p_dest_project_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15177 p_called_from_api IN VARCHAR2 := 'ABCD',
15178 p_copy_option IN VARCHAR2,
15179 p_peer_or_sub IN VARCHAR2,
15180 p_prefix IN VARCHAR2,
15181 p_structure_type IN VARCHAR2 :='WORKPLAN',
15182 p_cp_dependency_flag IN VARCHAR2 :='N',
15183 p_cp_deliverable_asso_flag IN VARCHAR2 :='N',
15184 p_cp_tk_assignments_flag IN VARCHAR2 :='N',
15185 p_cp_cost_code_flag IN VARCHAR2 :='N', -- bug#16083858
15186 p_cp_people_flag IN VARCHAR2 :='N',
15187 p_cp_financial_elem_flag IN VARCHAR2 :='N',
15188 p_cp_material_items_flag IN VARCHAR2 :='N',
15189 p_cp_equipment_flag IN VARCHAR2 :='N',
15190 p_user_defn_att_flag IN VARCHAR2 :='N', -- Added for 14209636
15191 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
15192 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
15193 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15194 ) IS
15195 l_api_name CONSTANT VARCHAR(30) := 'COPY_TASKS_IN_BULK';
15196 l_api_version CONSTANT NUMBER := 1.0;
15197
15198 l_return_status VARCHAR2(1);
15199 l_msg_count NUMBER;
15200 l_msg_data VARCHAR2(2000);
15201 l_data VARCHAR2(2000);
15202 l_msg_index_out NUMBER;
15203 l_error_msg_code VARCHAR2(250);
15204
15205 l_src_project_id NUMBER;
15206 l_src_structure_id NUMBER;
15207 l_src_structure_version_id NUMBER;
15208
15209 l_dest_project_id NUMBER ;
15210 l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
15211 l_dest_structure_id NUMBER;
15212 l_template_flag VARCHAR2(1);
15213 l_fin_task_flag VARCHAR2(1);
15214
15215 l_shared VARCHAR2(1);
15216 l_ver_enabled VARCHAR2(1);
15217 l_copy_external_flag VARCHAR2(1);
15218
15219 l_delete_project_allowed VARCHAR2(1);
15220 l_update_proj_num_allowed VARCHAR2(1);
15221 l_update_proj_name_allowed VARCHAR2(1);
15222 l_update_proj_desc_allowed VARCHAR2(1);
15223 l_update_proj_dates_allowed VARCHAR2(1);
15224 l_update_proj_status_allowed VARCHAR2(1);
15225 l_update_proj_manager_allowed VARCHAR2(1);
15226 l_update_proj_org_allowed VARCHAR2(1);
15227 l_add_task_allowed VARCHAR2(1);
15228 l_delete_task_allowed VARCHAR2(1);
15229 l_update_task_num_allowed VARCHAR2(1);
15230 l_update_task_name_allowed VARCHAR2(1);
15231 l_update_task_dates_allowed VARCHAR2(1);
15232 l_update_task_desc_allowed VARCHAR2(1);
15233 l_update_parent_task_allowed VARCHAR2(1);
15234 l_update_task_org_allowed VARCHAR2(1);
15235
15236 l_err_code NUMBER := 0;
15237 l_err_stack VARCHAR2(200) := NULL;
15238 l_err_stage VARCHAR2(200) := NULL;
15239
15240 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
15241
15242 CURSOR cur_proj_is_template(c_project_id NUMBER)
15243 IS select 'Y'
15244 from pa_projects_all
15245 where project_id = c_project_id
15246 and template_flag = 'Y';
15247
15248 CURSOR cur_dest_proj_id
15249 IS
15250 SELECT project_id
15251 FROM pa_proj_element_versions
15252 WHERE element_version_id = p_dest_task_version_id;
15253
15254 CURSOR cur_struc_id( x_structure_version_id NUMBER, x_project_id NUMBER )
15255 IS
15256 SELECT proj_element_id
15257 FROM pa_proj_elem_ver_structure
15258 WHERE element_version_id = x_structure_version_id
15259 AND project_id = x_project_id;
15260
15261 CURSOR get_product_code ( c_project_id NUMBER ) IS
15262 SELECT pm_product_code
15263 FROM PA_PROJECTS_ALL
15264 WHERE project_id = c_project_id;
15265 BEGIN
15266 pa_debug.init_err_stack ('PA_TASK_PUB1.COPY_TASKS_IN_BULK');
15267 x_return_status := FND_API.G_RET_STS_SUCCESS;
15268 IF (p_debug_mode = 'Y') THEN
15269 pa_debug.debug('PA_TASK_PUB1.COPY_TASKS_IN_BULK begin');
15270 END IF;
15271
15272 IF (p_commit = FND_API.G_TRUE) THEN
15273 savepoint copy_tasks_in_bulk;
15274 END IF;
15275
15276 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
15277 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15278 END IF;
15279
15280 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
15281 FND_MSG_PUB.initialize;
15282 END IF;
15283
15284 IF p_calling_module = 'SELF_SERVICE' THEN
15285
15286 /*Product Code related validation*/
15287 /* This is not needed as now we are passing
15288 Destination Project ID from Self Service (TaskLiteVORowImpl.java - copyTasks method)
15289
15290 OPEN cur_dest_proj_id;
15291 FETCH cur_dest_proj_id into l_dest_project_id;
15292 CLOSE cur_dest_proj_id;
15293 */
15294 l_dest_project_id := p_dest_project_id ;
15295
15296 OPEN cur_proj_is_template(l_dest_project_id) ;
15297 FETCH cur_proj_is_template into l_template_flag ;
15298 CLOSE cur_proj_is_template;
15299
15300 OPEN get_product_code(l_dest_project_id);
15301 FETCH get_product_code INTO l_pm_product_code;
15302 CLOSE get_product_code;
15303
15304 If l_pm_product_code IS NOT NULL THEN
15305
15306 pa_pm_controls.Get_Project_actions_allowed
15307 (P_PM_PRODUCT_CODE => l_pm_product_code,
15308 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
15309 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
15310 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
15311 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
15312 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
15313 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
15314 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
15315 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
15316 P_ADD_TASK_ALLOWED => l_add_task_allowed,
15317 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
15318 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
15319 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
15320 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
15321 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
15322 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
15323 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
15324 P_ERROR_CODE => l_err_code,
15325 P_ERROR_STACK => l_err_stack,
15326 P_ERROR_STAGE => l_err_stage );
15327
15328 IF l_err_code <> 0 THEN
15329 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15330 p_msg_name => l_err_stage);
15331 END IF;
15332
15333 IF l_add_task_allowed = 'N' THEN
15334 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15335 p_msg_name => 'PA_PR_PM_CANNOT_COPY');
15336 raise FND_API.G_EXC_ERROR;
15337 END IF;
15338
15339 END IF;
15340
15341 /*Project Name to ID validation*/
15342 /* All Name to ID validations can be skipped in case of SS
15343 IF ((p_src_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15344 (p_src_project_name IS NOT NULL)) OR
15345 ((p_src_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
15346 (p_src_project_id IS NOT NULL)) THEN
15347 --Call Check API.
15348 PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
15349 p_project_name => p_src_project_name,
15350 p_project_id => p_src_project_id,
15351 x_project_id => l_src_project_id,
15352 x_return_status => l_return_status,
15353 x_error_msg_code => l_error_msg_code);
15354
15355 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15356 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15357 p_msg_name => l_error_msg_code);
15358 END IF;
15359 END IF;
15360 */
15361 /*Structure Name to ID Validation*/
15362 /*
15363 IF ((p_src_structure_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15364 (p_src_structure_name IS NOT NULL)) OR
15365 ((p_src_structure_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
15366 (p_src_structure_id IS NOT NULL)) THEN
15367 --Call Check API.
15368 PA_PROJECT_STRUCTURE_UTILS.Structure_Name_Or_Id
15369 (
15370 p_project_id => l_src_project_id
15371 ,p_structure_name => p_src_structure_name
15372 ,p_structure_id => p_src_structure_id
15373 ,x_structure_id => l_src_structure_id
15374 ,x_return_status => l_return_status
15375 ,x_error_message_code => l_error_msg_code
15376 );
15377
15378 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15379 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15380 p_msg_name => l_error_msg_code);
15381 END IF;
15382 END IF;
15383 */
15384 /*Structure Version Name to ID conversion*/
15385 /*
15386 IF ((p_src_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15387 (p_src_structure_version_name IS NOT NULL)) OR
15388 ((p_src_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
15389 (p_src_structure_version_id IS NOT NULL)) THEN
15390 --Call Check API.
15391 l_src_structure_version_id := p_src_structure_version_id;
15392 PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id
15393 (
15394 p_structure_id => l_src_structure_id
15395 ,p_structure_version_name => p_src_structure_version_name
15396 ,p_structure_version_id => p_src_structure_version_id
15397 ,x_structure_version_id => l_src_structure_version_id
15398 ,x_return_status => l_return_status
15399 ,x_error_message_code => l_error_msg_code
15400 );
15401
15402 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15403 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15404 p_msg_name => l_error_msg_code);
15405 END IF;
15406
15407 END IF;
15408 */
15409 /*Mandatory Params check*/
15410 IF (p_src_project_id IS NULL OR p_src_structure_id IS NULL OR
15411 p_src_structure_version_id IS NULL )
15412 THEN
15413 -- dbms_output.put_line( 'Project Id '||l_src_project_id );
15414 -- dbms_output.put_line( 'Structure Id '||l_src_structure_id );
15415 -- dbms_output.put_line( 'Structure Ver Id '||l_src_structure_version_id );
15416
15417 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15418 p_msg_name => 'PA_PS_NOT_ENOUGH_PARAMS' );
15419 x_msg_data := ' BULK API : PA_PS_NOT_ENOUGH_PARAMS';
15420 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15421 RAISE FND_API.G_EXC_ERROR;
15422 END IF;
15423
15424 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15425 x_msg_count := FND_MSG_PUB.count_msg;
15426 IF x_msg_count = 1 then
15427 pa_interface_utils_pub.get_messages
15428 (p_encoded => FND_API.G_TRUE,
15429 p_msg_index => 1,
15430 p_msg_count => l_msg_count,
15431 p_msg_data => l_msg_data,
15432 p_data => l_data,
15433 p_msg_index_out => l_msg_index_out);
15434 x_msg_data := l_data;
15435 END IF;
15436 raise FND_API.G_EXC_ERROR;
15437 END IF;
15438
15439 IF p_copy_option NOT IN( 'PA_ENTIRE_VERSION', 'PA_TASK_ONLY', 'PA_TASK_SUBTASK' )
15440 THEN
15441
15442 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15443 p_msg_name => 'PA_PS_WRONG_COPY_OPTION' );
15444 x_msg_data := 'PA_PS_WRONG_COPY_OPTION';
15445 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15446 RAISE FND_API.G_EXC_ERROR;
15447 END IF;
15448
15449 /*====================================================================
15450 ALL BASIC VALIDATIONS COMPLETE RELEVANT TO VALIDITY OF PASSED PARAMS
15451 ====================================================================*/
15452
15453 /* Derive the Destination Structure ID (ProjElementId) from the passed pa_dest_structure_version_id*/
15454 OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id);
15455 FETCH cur_struc_id into l_dest_structure_id ;
15456 CLOSE cur_struc_id ;
15457
15458 /*4201927 : Derive values for sharing enabled and Versioning Enabled */
15459 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
15460 l_dest_project_id);
15461
15462 l_ver_enabled :=
15463 PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id);
15464
15465 /* Derive the value for Copy External Flag*/
15466 IF p_src_project_id = l_dest_project_id
15467 THEN
15468 l_copy_external_flag := 'N';
15469 ELSE
15470 l_copy_external_flag := 'Y';
15471 ENd IF;
15472
15473 /* Copied from Copy_Task API : task version status changes
15474 This need not be executed for each and every task */
15475
15476
15477 IF (l_template_flag = 'N') THEN
15478 --check if structure is shared
15479 -- if shared, check if versioned
15480 -- 'WORKING' if versioned; 'PUBLISHED' if not
15481 -- if split, check if 'FINANCIAL'
15482 -- 'PUBLISHED' if financial
15483 -- check if versioned
15484 -- 'WORKING' if versioend; 'PUBLISHED' if not
15485 IF ('Y' = l_shared) THEN
15486 IF ('Y' = l_ver_enabled) THEN
15487 l_task_unpub_ver_status_code := 'WORKING';
15488 ELSE
15489 l_task_unpub_ver_status_code := 'PUBLISHED';
15490 END IF;
15491 ELSE --split
15492 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_dest_structure_id,'FINANCIAL') AND
15493 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_dest_structure_id,'WORKPLAN')) THEN
15494 l_task_unpub_ver_status_code := 'PUBLISHED';
15495 ELSE --workplan only
15496 IF ('Y' = l_ver_enabled) THEN
15497 l_task_unpub_ver_status_code := 'WORKING';
15498 ELSE
15499 l_task_unpub_ver_status_code := 'PUBLISHED';
15500 END IF;
15501 END IF;
15502 END IF;
15503 ELSE
15504 l_task_unpub_ver_status_code := 'WORKING';
15505 END IF;
15506
15507 /*Derive valie for the p_fin_task_flag*/
15508 IF p_structure_type = 'WORKPLAN'
15509 THEN
15510 IF
15511 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) =
15512 'SHARE_FULL'
15513 THEN
15514 l_fin_task_flag := 'Y';
15515 ELSE
15516 l_fin_task_flag := 'N';
15517 END IF;
15518 ELSE
15519 l_fin_task_flag := 'Y';
15520 END IF;
15521
15522 /*Now retrieve the task version id's passed in the form of array table from the UI
15523 and call the Copy Task API (singular version)*/
15524
15525
15526 IF nvl(p_src_task_version_id_tbl.LAST,0)>0 THEN
15527 FOR i IN p_src_task_version_id_tbl.FIRST..p_src_task_version_id_tbl.LAST LOOP
15528 PA_TASK_PUB1.Copy_Task(
15529 p_init_msg_list => FND_API.G_FALSE,
15530 p_src_project_id => p_src_project_id,
15531 p_src_project_name => p_src_project_name,
15532 p_src_structure_id => p_src_structure_id ,
15533 p_src_structure_name => p_src_structure_name,
15534 p_src_structure_version_id => p_src_structure_version_id ,
15535 p_src_structure_version_name => p_src_structure_version_name,
15536 p_src_task_version_id => p_src_task_version_id_tbl(i),
15537 p_src_task_name => p_src_task_name,
15538 p_dest_structure_id => l_dest_structure_id,
15539 p_dest_structure_version_id => p_dest_structure_version_id,
15540 p_dest_task_version_id => p_dest_task_version_id,
15541 p_dest_project_id => l_dest_project_id,
15542 p_task_unpub_ver_status_code => l_task_unpub_ver_status_code,
15543 p_fin_task_flag => l_fin_task_flag,
15544 p_sharing_enabled => l_shared,
15545 p_versioning_enabled => l_ver_enabled,
15546 p_copy_external_flag => l_copy_external_flag,
15547 p_copy_option => p_copy_option,
15548 p_peer_or_sub => p_peer_or_sub,
15549 p_prefix => p_prefix,
15550 p_structure_type => p_structure_type,
15551 p_cp_dependency_flag => p_cp_dependency_flag,
15552 p_cp_deliverable_asso_flag => p_cp_deliverable_asso_flag,
15553 p_cp_tk_assignments_flag => p_cp_tk_assignments_flag,
15554 p_cp_cost_code_flag => p_cp_cost_code_flag,
15555 p_cp_people_flag => p_cp_people_flag,
15556 p_cp_financial_elem_flag => p_cp_financial_elem_flag,
15557 p_cp_material_items_flag => p_cp_material_items_flag,
15558 p_cp_equipment_flag => p_cp_equipment_flag,
15559 p_called_from_bulk_api => 'Y',
15560 p_user_defn_att_flag => p_user_defn_att_flag, -- Added for 14209636
15561 x_return_status => x_return_status,
15562 x_msg_count => x_msg_count,
15563 x_msg_data => x_msg_data
15564 );
15565 if(x_return_status <> FND_API.G_RET_STS_SUCCESS)
15566 then
15567 RAISE FND_API.G_EXC_ERROR ;
15568 End if;
15569 END LOOP;
15570
15571 END IF;
15572
15573 END IF; /*End If Calling Module is self service*/
15574 IF (p_commit = FND_API.G_TRUE) THEN
15575 COMMIT;
15576 END IF;
15577 EXCEPTION
15578 when FND_API.G_EXC_ERROR then
15579 if p_commit = FND_API.G_TRUE then
15580 rollback to Copy_Tasks_in_bulk;
15581 end if;
15582 x_return_status := FND_API.G_RET_STS_ERROR;
15583 x_msg_count := Fnd_Msg_Pub.count_msg;
15584 IF x_msg_count = 1 AND x_msg_data IS NULL
15585 THEN
15586 Pa_Interface_Utils_Pub.get_messages
15587 ( p_encoded => Fnd_Api.G_TRUE
15588 , p_msg_index => 1
15589 , p_msg_count => l_msg_count
15590 , p_msg_data => l_msg_data
15591 , p_data => l_data
15592 , p_msg_index_out => l_msg_index_out);
15593 END IF;
15594 x_msg_data := l_data;
15595 when FND_API.G_EXC_UNEXPECTED_ERROR then
15596 if p_commit = FND_API.G_TRUE then
15597 rollback to Copy_Tasks_in_bulk;
15598 end if;
15599 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15600 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15601 p_procedure_name => 'COPY_TASKS_IN_BULK',
15602 p_error_text => SUBSTRB(SQLERRM,1,240));
15603 when OTHERS then
15604 if p_commit = FND_API.G_TRUE then
15605 rollback to Copy_Tasks_in_bulk;
15606 end if;
15607 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15608 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15609 p_procedure_name => 'COPY_TASKS_IN_BULK',
15610 p_error_text => SUBSTRB(SQLERRM,1,240));
15611 raise;
15612
15613 END Copy_Tasks_In_Bulk;
15614
15615 --- API name : MOVE_TASK_VERSIONS_IN_BULK
15616 -- Type : Public procedure
15617 -- Pre-reqs : None
15618 -- Return Value : N/A
15619 -- Prameters
15620 -- p_api_version IN NUMBER N Not Null 1.0
15621 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
15622 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
15623 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
15624 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
15625 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
15626 -- p_debug_mode IN VARCHAR2 N Null N
15627 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15628 -- p_structure_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15629 -- p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE N NOT NULL SYSTEM.PA_NUM_TBL_TYPE()
15630 -- p_ref_task_version_id IN NUMBER N Not Null
15631 -- p_ref_project_id IN NUMBER N Not Null /*4269830*/
15632 -- p_peer_or_sub IN VARCHAR2 N Not Null
15633 -- p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE N NOT NULL SYSTEM.PA_NUM_TBL_TYPE()
15634 -- x_return_status OUT VARCHAR2 N NULL
15635 -- x_msg_count OUT NUMBER N NULL
15636 -- x_msg_data OUT VARCHAR2 N NULL
15637 --
15638 -- History
15639 --
15640 -- 23-FEB-05 Created avaithia
15641 -- 29-MAR-05 Modified avaithia 4269830 : Performance Tuning done
15642 --
15643 PROCEDURE MOVE_TASK_VERSIONS_IN_BULK
15644 ( p_api_version IN NUMBER := 1.0,
15645 p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE,
15646 p_commit IN VARCHAR2 := FND_API.G_FALSE,
15647 p_validate_only IN VARCHAR2 := FND_API.G_TRUE,
15648 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
15649 p_calling_module IN VARCHAR2 := 'SELF_SERVICE',
15650 p_debug_mode IN VARCHAR2 := 'N',
15651 p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15652 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15653 p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15654 p_ref_task_version_id IN NUMBER,
15655 p_ref_project_id IN NUMBER, /*4269830*/
15656 p_peer_or_sub IN VARCHAR2,
15657 p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15658 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
15659 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
15660 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15661 )
15662 IS
15663 l_api_name CONSTANT VARCHAR(30) := 'MOVE_TASK_VERSIONS_IN_BULK';
15664 l_api_version CONSTANT NUMBER := 1.0;
15665
15666 l_return_status VARCHAR2(1);
15667 l_msg_count NUMBER;
15668 l_msg_data VARCHAR2(2000);
15669 l_data VARCHAR2(2000);
15670 l_msg_index_out NUMBER;
15671 l_error_msg_code VARCHAR2(250);
15672
15673 l_delete_project_allowed VARCHAR2(1);
15674 l_update_proj_num_allowed VARCHAR2(1);
15675 l_update_proj_name_allowed VARCHAR2(1);
15676 l_update_proj_desc_allowed VARCHAR2(1);
15677 l_update_proj_dates_allowed VARCHAR2(1);
15678 l_update_proj_status_allowed VARCHAR2(1);
15679 l_update_proj_manager_allowed VARCHAR2(1);
15680 l_update_proj_org_allowed VARCHAR2(1);
15681 l_add_task_allowed VARCHAR2(1);
15682 l_delete_task_allowed VARCHAR2(1);
15683 l_update_task_num_allowed VARCHAR2(1);
15684 l_update_task_name_allowed VARCHAR2(1);
15685 l_update_task_dates_allowed VARCHAR2(1);
15686 l_update_task_desc_allowed VARCHAR2(1);
15687 l_update_parent_task_allowed VARCHAR2(1);
15688 l_update_task_org_allowed VARCHAR2(1);
15689
15690 ref_task_temp_version_id NUMBER; -- Added new variable for Bug 6628382
15691
15692 l_err_code NUMBER := 0;
15693 l_err_stack VARCHAR2(200) := NULL;
15694 l_err_stage VARCHAR2(200) := NULL;
15695
15696 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
15697
15698 l_cur_project_id NUMBER;
15699 CURSOR cur_proj_id
15700 IS
15701 SELECT project_id
15702 FROM pa_proj_element_versions
15703 WHERE element_version_id = p_structure_version_id;
15704
15705 CURSOR get_product_code ( c_project_id NUMBER ) IS
15706 SELECT pm_product_code
15707 FROM PA_PROJECTS_ALL
15708 WHERE project_id = c_project_id;
15709
15710 /*4269830 : Performance Enhancements : Start */
15711 CURSOR cur_struc_type( c_structure_id NUMBER )
15712 IS
15713 SELECT 'Y'
15714 FROM pa_proj_structure_types ppst
15715 ,pa_structure_types pst
15716 WHERE ppst.proj_element_id = c_structure_id
15717 AND ppst.structure_type_id = pst.structure_type_id
15718 AND pst.structure_type_class_code = 'FINANCIAL' ;
15719
15720 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
15721 select 'Y'
15722 from pa_proj_elem_ver_structure
15723 where proj_element_id = c_structure_id
15724 AND project_id = c_project_id
15725 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
15726
15727 l_versioned VARCHAR2(1) := 'N';
15728 l_shared VARCHAR2(1) := 'N';
15729 l_sharing_code VARCHAR2(30);
15730
15731 l_task_version_id NUMBER;
15732 l_structure_id NUMBER;
15733 l_published_version VARCHAR2(1);
15734 l_wp_type VARCHAR2(1);
15735 l_fin_type VARCHAR2(1);
15736
15737 l_weighting_basis_code VARCHAR2(30);
15738 l_check_third_party_flag VARCHAR2(1);
15739 l_dummy_char VARCHAR2(1);
15740
15741 /*4269830 : Performance Enhancements : End*/
15742
15743 BEGIN
15744 pa_debug.init_err_stack ('PA_TASK_PUB1.MOVE_TASK_VERSIONS_IN_BULK');
15745
15746 x_return_status := FND_API.G_RET_STS_SUCCESS ;
15747
15748 IF (p_debug_mode = 'Y') THEN
15749 pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSIONS_IN_BULK begin');
15750 END IF;
15751
15752 IF (p_commit = FND_API.G_TRUE) THEN
15753 savepoint MOVE_TASK_VERSIONS_IN_BULK ;
15754 END IF;
15755
15756 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
15757 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15758 END IF;
15759
15760 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
15761 FND_MSG_PUB.initialize;
15762 END IF;
15763 IF p_calling_module = 'SELF_SERVICE' THEN
15764
15765 /*Product Code related validation*/
15766
15767 /* 4269830 : This is not needed as now we are passing
15768 Destination Project ID from Self Service (TaskLiteVORowImpl.java - moveTasks method)
15769 OPEN cur_proj_id ;
15770 FETCH cur_proj_id into l_cur_project_id;
15771 CLOSE cur_proj_id;
15772 */
15773 l_cur_project_id := p_ref_project_id;
15774
15775 OPEN get_product_code(l_cur_project_id);
15776 FETCH get_product_code INTO l_pm_product_code;
15777 CLOSE get_product_code;
15778
15779 If l_pm_product_code IS NOT NULL THEN
15780 pa_pm_controls.Get_Project_actions_allowed
15781 (P_PM_PRODUCT_CODE => l_pm_product_code,
15782 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
15783 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
15784 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
15785 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
15786 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
15787 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
15788 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
15789 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
15790 P_ADD_TASK_ALLOWED => l_add_task_allowed,
15791 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
15792 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
15793 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
15794 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
15795 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
15796 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
15797 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
15798 P_ERROR_CODE => l_err_code,
15799 P_ERROR_STACK => l_err_stack,
15800 P_ERROR_STAGE => l_err_stage );
15801
15802 IF l_err_code <> 0 THEN
15803 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15804 p_msg_name => l_err_stage);
15805 END IF;
15806 IF l_update_parent_task_allowed = 'N' THEN
15807 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15808 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
15809 raise FND_API.G_EXC_ERROR;
15810 END IF;
15811 End If;
15812
15813 End If; /* End if calling module is self service*/
15814
15815 /*4269830 : Performance Enhancements
15816 1)Derive the variables l_shared , l_sharing_code ,l_wp_type,l_fin_type
15817 l_versioned,l_structure_id,l_published_version,l_weighting_basis_Code
15818 ONLY once in the BULK API and pass it as params to the Move Task Version API
15819 */
15820
15821 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_ref_project_id);
15822 l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_ref_project_id);
15823
15824 -- Bug Fix 4764891.
15825 -- The following lines have the structure types usage messed up.
15826 -- Correcting the structure types which are passed to the get_struct_type_for_version.
15827 -- l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
15828 -- l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
15829
15830 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
15831 l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
15832
15833 -- End of Bug Fix 4764891.
15834
15835 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_ref_project_id);
15836 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_ref_project_id);
15837 l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(p_ref_project_id);
15838
15839 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
15840 l_task_version_id := p_task_version_id_tbl(1);
15841
15842 SELECT proj_element_id INTO l_structure_id
15843 FROM pa_proj_element_versions
15844 WHERE element_version_id = ( Select parent_structure_version_id
15845 from pa_proj_element_versions
15846 where element_version_id = l_task_version_id )
15847 AND object_type = 'PA_STRUCTURES';
15848 -----------------------------------------------------------
15849 OPEN cur_struc_type( l_structure_id );
15850 FETCH cur_struc_type INTO l_dummy_char;
15851
15852 IF cur_struc_type%FOUND
15853 THEN
15854 --If structure has any published versions.
15855 l_published_version := 'N';
15856 OPEN cur_pub_versions( l_structure_id, p_ref_project_id );
15857 FETCH cur_pub_versions INTO l_published_version;
15858 CLOSE cur_pub_versions;
15859 END IF;
15860
15861 CLOSE cur_struc_type;
15862 -----------------------------------------------------------
15863 END IF; -- End If Atleast one task has been selected for moving
15864
15865 /*4269830 : End*/
15866
15867 /*Now retrieve the task version id's passed in the form of array table from the UI
15868 and call the Move Task API (singular version)*/
15869
15870 ref_task_temp_version_id := p_ref_task_version_id; -- Bug 6628382
15871
15872 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
15873 FOR i IN p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
15874 PA_TASK_PUB1.Move_Task_Version(
15875 p_init_msg_list => FND_API.G_FALSE,
15876 p_structure_version_id => p_structure_version_id,
15877 p_task_version_id => p_task_version_id_tbl(i),
15878 p_ref_task_version_id => ref_task_temp_version_id, --p_ref_task_version_id, -- Bug 6628382
15879 p_peer_or_sub => p_peer_or_sub,
15880 p_record_version_number => p_record_version_number_tbl(i),
15881 /*======================================================================
15882 4269830 : New params introduced for Perf Enhancement: Start
15883 *=====================================================================*/
15884 p_ref_project_id => p_ref_project_id,
15885 p_structure_id => l_structure_id,
15886 p_published_version => l_published_version,
15887 p_shared => l_shared ,
15888 p_sharing_code => l_sharing_code,
15889 p_versioned => l_versioned,
15890 p_wp_type => l_wp_type,
15891 p_fin_type => l_fin_type,
15892 p_weighting_basis_code => l_weighting_basis_code,
15893 p_check_third_party_flag => l_check_third_party_flag,
15894 /*======================================================================
15895 4269830 : New params introduced for Perf Enhancement : End
15896 *======================================================================*/
15897 p_called_from_bulk_api => 'Y',
15898 x_return_status => x_return_status,
15899 x_msg_count => x_msg_count,
15900 x_msg_data => x_msg_data
15901 );
15902 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15903 RAISE FND_API.G_EXC_ERROR ;
15904 END IF;
15905 ref_task_temp_version_id := p_task_version_id_tbl(i); -- Bug 6628382
15906 END LOOP;
15907
15908 END IF;
15909
15910 IF (p_commit = FND_API.G_TRUE) THEN
15911 COMMIT;
15912 END IF;
15913
15914 EXCEPTION
15915 when FND_API.G_EXC_ERROR then
15916 if p_commit = FND_API.G_TRUE then
15917 rollback to MOVE_TASK_VERSIONS_IN_BULK;
15918 end if;
15919 x_return_status := FND_API.G_RET_STS_ERROR;
15920 x_msg_count := Fnd_Msg_Pub.count_msg;
15921
15922 IF x_msg_count = 1 AND x_msg_data IS NULL
15923 THEN
15924 Pa_Interface_Utils_Pub.get_messages
15925 ( p_encoded => Fnd_Api.G_FALSE
15926 , p_msg_index => 1
15927 , p_msg_count => l_msg_count
15928 , p_msg_data => l_msg_data
15929 , p_data => l_data
15930 , p_msg_index_out => l_msg_index_out);
15931 x_msg_data := l_data;
15932 END IF;
15933
15934 when FND_API.G_EXC_UNEXPECTED_ERROR then
15935 if p_commit = FND_API.G_TRUE then
15936 rollback to MOVE_TASK_VERSIONS_IN_BULK;
15937 end if;
15938 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15939 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15940 p_procedure_name => 'MOVE_TASK_VERSIONS_IN_BULK',
15941 p_error_text => SUBSTRB(SQLERRM,1,240));
15942 when OTHERS then
15943 if p_commit = FND_API.G_TRUE then
15944 rollback to MOVE_TASK_VERSIONS_IN_BULK;
15945 end if;
15946 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15947 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15948 p_procedure_name => 'MOVE_TASK_VERSIONS_IN_BULK',
15949 p_error_text => SUBSTRB(SQLERRM,1,240));
15950 raise;
15951 END MOVE_TASK_VERSIONS_IN_BULK ;
15952
15953 -- 4218932 Added below update api for update task page for bulk approach
15954
15955 PROCEDURE Update_Task_All_Info(
15956 p_api_version IN NUMBER :=1.0,
15957 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
15958 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
15959 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
15960 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
15961 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
15962 p_debug_mode IN VARCHAR2 :='N',
15963 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15964 p_task_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15965 --Begin:5867373:p_task_number_tbl's data-type has been changed to varchar2(100)
15966 p_task_number_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE := SYSTEM.PA_VARCHAR2_100_TBL_TYPE(),
15967 --End:5867373:
15968 p_task_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15969 p_task_description_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE(),
15970 p_task_manager_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15971 p_task_manager_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15972 p_carrying_out_org_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15973 p_carrying_out_org_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15974 p_priority_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15975 p_TYPE_ID_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15976 p_status_code_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15977 p_inc_proj_progress_flag_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15978 p_transaction_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15979 p_transaction_finish_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15980 p_work_type_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15981 p_service_type_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15982 p_work_item_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15983 p_uom_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15984 p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15985 -- Update_Schedule_Version
15986 p_scheduled_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15987 p_scheduled_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15988 p_pev_schedule_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15989 p_milestone_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE(),
15990 p_critical_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE(),
15991 p_WQ_PLANNED_QUANTITY_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15992 p_early_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15993 p_early_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15994 p_late_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15995 p_late_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15996 p_constraint_type_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15997 p_constraint_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15998 p_sch_rec_ver_num_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15999 -- update_task_det_sch_info
16000 p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16001 p_percent_complete_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16002 p_ETC_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16003 p_structure_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16004 p_project_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16005 p_planned_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16006 p_actual_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16007 -- Update_Task_Weighting
16008 p_object_relationship_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16009 p_weighting_percentage_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16010 p_obj_rec_ver_num_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16011 p_task_weight_method IN VARCHAR2,
16012 -- common
16013 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
16014 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
16015 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16016 ) IS
16017
16018 l_api_name CONSTANT VARCHAR(30) := 'Update_Task_All_Info';
16019 l_api_version CONSTANT NUMBER := 1.0;
16020
16021 l_return_status VARCHAR2(1);
16022 l_msg_count NUMBER;
16023 l_msg_data VARCHAR2(250);
16024 l_data VARCHAR2(250);
16025 l_msg_index_out NUMBER;
16026
16027 -- Start of addition for --bug 8301015
16028 l_project_id NUMBER;
16029 l_parent_task_id NUMBER;
16030 l_tstart_date DATE;
16031 l_tend_date DATE;
16032 l_tcnt NUMBER;
16033
16034 TYPE TASK_DATES_REC_TYPE IS RECORD (
16035 TASK_ID NUMBER := NULL,
16036 PROJECT_ID NUMBER := NULL,
16037 PARENT_TASK_ID NUMBER := NULL,
16038 OLD_START_DATE DATE := NULL,
16039 OLD_END_DATE DATE := NULL,
16040 NEW_START_DATE DATE := NULL,
16041 NEW_END_DATE DATE := NULL
16042 );
16043
16044 TYPE TASK_DATES_TBL_TYPE IS TABLE OF TASK_DATES_REC_TYPE
16045 INDEX BY BINARY_INTEGER;
16046
16047 l_task_dates TASK_DATES_TBL_TYPE;
16048 -- End of addition for --bug 8301015
16049
16050 BEGIN
16051 pa_debug.init_err_stack ('PA_TASK_PUB1.Update_Task_All_Info');
16052
16053 IF (p_debug_mode = 'Y') THEN
16054 pa_debug.debug('PA_TASK_PUB1.Update_Task_All_Info begin');
16055 END IF;
16056
16057 IF (p_commit = FND_API.G_TRUE) THEN
16058 savepoint update_Task_all_info;
16059 END IF;
16060
16061 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16062 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16063 END IF;
16064
16065 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
16066 FND_MSG_PUB.initialize;
16067 END IF;
16068
16069 x_return_status := FND_API.G_RET_STS_SUCCESS;
16070
16071 IF nvl(p_task_id_tbl.last,0) >= 1 THEN
16072 l_tcnt := 0; -- added for --bug 8301015
16073
16074 FOR i in p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
16075 -- Changes for --bug 8301015
16076 IF ('Y' = PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(p_task_id_tbl(i))) THEN
16077
16078 SELECT pt.project_id,
16079 pt.parent_task_id,
16080 pt.start_date,
16081 pt.completion_date
16082 INTO l_project_id,
16083 l_parent_task_id,
16084 l_tstart_date,
16085 l_tend_date
16086 FROM pa_tasks pt
16087 WHERE pt.task_id = p_task_id_tbl(i);
16088
16089 IF ((nvl(p_transaction_start_date_tbl(i),sysdate) <> nvl(l_tstart_date,sysdate))
16090 OR (nvl(p_transaction_finish_date_tbl(i),sysdate) <> nvl(l_tend_date,sysdate))) THEN
16091
16092 l_tcnt := l_tcnt + 1;
16093
16094 l_task_dates(l_tcnt).task_id := p_task_id_tbl(i);
16095 l_task_dates(l_tcnt).project_id := l_project_id;
16096 l_task_dates(l_tcnt).parent_task_id := l_parent_task_id;
16097 l_task_dates(l_tcnt).old_start_date := l_tstart_date;
16098 l_task_dates(l_tcnt).old_end_date := l_tend_date;
16099 l_task_dates(l_tcnt).new_start_date := p_transaction_start_date_tbl(i);
16100 l_task_dates(l_tcnt).new_end_date := p_transaction_finish_date_tbl(i);
16101
16102 End IF;
16103
16104 End IF;
16105 -- Changes for --bug 8301015
16106
16107 PA_TASK_PUB1.Update_Task
16108 (
16109 p_task_id => p_task_id_tbl(i)
16110 ,p_task_number => p_task_number_tbl(i)
16111 ,p_task_name => p_task_name_tbl(i)
16112 ,p_task_manager_id => p_task_manager_id_tbl(i)
16113 ,p_task_manager_name => p_task_manager_name_tbl(i)
16114 ,p_record_version_number => p_record_version_number_tbl(i)
16115 ,P_TASK_DESCRIPTION => P_TASK_DESCRIPTION_tbl(i)
16116 ,P_CARRYING_OUT_ORG_NAME => P_CARRYING_OUT_ORG_NAME_tbl(i)
16117 ,P_PRIORITY_CODE => P_PRIORITY_CODE_tbl(i)
16118 ,P_STATUS_CODE => P_STATUS_CODE_tbl(i)
16119 ,P_INC_PROJ_PROGRESS_FLAG => P_INC_PROJ_PROGRESS_FLAG_tbl(i)
16120 ,p_transaction_start_date => p_transaction_start_date_tbl(i)
16121 ,p_transaction_finish_date => p_transaction_finish_date_tbl(i)
16122 ,p_service_type_code => p_service_type_code_tbl(i)
16123 ,p_work_type_id => p_work_type_id_tbl(i)
16124 ,p_work_item_code => p_work_item_code_tbl(i)
16125 ,p_uom_code => p_uom_code_tbl(i)
16126 ,p_type_id => p_type_id_tbl(i)
16127 ,p_carrying_out_org_id => p_carrying_out_org_id_tbl(i)
16128 ,p_dates_check => 'N' --bug 8301015
16129 ,x_return_status => l_return_status
16130 ,x_msg_count => l_msg_count
16131 ,x_msg_data => l_msg_data
16132 );
16133
16134 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16135 x_msg_count := FND_MSG_PUB.count_msg;
16136 IF x_msg_count = 1 then
16137 pa_interface_utils_pub.get_messages
16138 (
16139 p_encoded => FND_API.G_FALSE, /*Bug#9045404*/
16140 p_msg_index => 1,
16141 p_msg_count => l_msg_count,
16142 p_msg_data => l_msg_data,
16143 p_data => l_data,
16144 p_msg_index_out => l_msg_index_out
16145 );
16146 x_msg_data := l_data;
16147 END IF;
16148 raise FND_API.G_EXC_ERROR;
16149 END IF;
16150
16151 PA_TASK_PUB1.Update_Schedule_Version
16152 (
16153 p_scheduled_start_date => p_scheduled_start_date_tbl(i)
16154 ,p_scheduled_end_date => p_scheduled_end_date_tbl(i)
16155 ,p_record_version_number => p_sch_rec_ver_num_tbl(i)
16156 ,p_pev_schedule_id => p_pev_schedule_id_tbl(i)
16157 ,P_MILESTONE_FLAG => P_MILESTONE_FLAG_tbl(i)
16158 ,P_CRITICAL_FLAG => P_CRITICAL_FLAG_tbl(i)
16159 ,p_WQ_PLANNED_QUANTITY => p_WQ_PLANNED_QUANTITY_tbl(i)
16160 ,p_early_start_date => p_early_start_date_tbl(i)
16161 ,p_early_end_date => p_early_end_date_tbl(i)
16162 ,p_late_start_date => p_late_start_date_tbl(i)
16163 ,p_late_end_date => p_late_end_date_tbl(i)
16164 ,p_constraint_date => p_constraint_date_tbl(i)
16165 ,p_constraint_type_code => p_constraint_type_code_tbl(i)
16166 ,x_return_status => l_return_status
16167 ,x_msg_count => l_msg_count
16168 ,x_msg_data => l_msg_data
16169 );
16170
16171 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16172 x_msg_count := FND_MSG_PUB.count_msg;
16173 IF x_msg_count = 1 then
16174 pa_interface_utils_pub.get_messages
16175 (
16176 p_encoded => FND_API.G_TRUE,
16177 p_msg_index => 1,
16178 p_msg_count => l_msg_count,
16179 p_msg_data => l_msg_data,
16180 p_data => l_data,
16181 p_msg_index_out => l_msg_index_out
16182 );
16183 x_msg_data := l_data;
16184 END IF;
16185 raise FND_API.G_EXC_ERROR;
16186 END IF;
16187
16188 PA_TASK_PUB1.update_task_det_sch_info
16189 (
16190 p_task_ver_id => p_task_version_id_tbl(i)
16191 ,p_percent_complete => p_percent_complete_tbl(i)
16192 ,p_ETC_effort => p_ETC_effort_tbl(i)
16193 ,p_structure_version_id => p_structure_version_id_tbl(i)
16194 ,p_project_id => p_project_id_tbl(i)
16195 ,p_planned_effort => p_planned_effort_tbl(i)
16196 ,p_actual_effort => p_actual_effort_tbl(i)
16197 ,x_return_status => l_return_status
16198 ,x_msg_count => l_msg_count
16199 ,x_msg_data => l_msg_data
16200 );
16201
16202 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16203 x_msg_count := FND_MSG_PUB.count_msg;
16204 IF x_msg_count = 1 then
16205 pa_interface_utils_pub.get_messages
16206 (
16207 p_encoded => FND_API.G_TRUE,
16208 p_msg_index => 1,
16209 p_msg_count => l_msg_count,
16210 p_msg_data => l_msg_data,
16211 p_data => l_data,
16212 p_msg_index_out => l_msg_index_out
16213 );
16214 x_msg_data := l_data;
16215 END IF;
16216 raise FND_API.G_EXC_ERROR;
16217 END IF;
16218
16219 IF p_task_weight_method = 'MANUAL' THEN
16220
16221 PA_TASK_PUB1.Update_Task_Weighting
16222 (
16223 p_object_relationship_id => p_object_relationship_id_tbl(i)
16224 ,p_weighting_percentage => p_weighting_percentage_tbl(i)
16225 ,p_record_version_number => p_obj_rec_ver_num_tbl(i)
16226 ,x_return_status => l_return_status
16227 ,x_msg_count => l_msg_count
16228 ,x_msg_data => l_msg_data
16229 );
16230
16231 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16232 x_msg_count := FND_MSG_PUB.count_msg;
16233 IF x_msg_count = 1 then
16234 pa_interface_utils_pub.get_messages
16235 (
16236 p_encoded => FND_API.G_TRUE,
16237 p_msg_index => 1,
16238 p_msg_count => l_msg_count,
16239 p_msg_data => l_msg_data,
16240 p_data => l_data,
16241 p_msg_index_out => l_msg_index_out
16242 );
16243 x_msg_data := l_data;
16244 END IF;
16245 raise FND_API.G_EXC_ERROR;
16246 END IF;
16247 END IF;
16248
16249 END LOOP;
16250
16251 /* Start of changes for--bug 8301015 */
16252
16253 -- Validate transaction dates
16254
16255 IF l_task_dates.COUNT <> 0 THEN
16256
16257 l_tcnt := l_task_dates.First;
16258
16259 LOOP
16260
16261 IF (nvl(l_task_dates(l_tcnt).old_start_date,sysdate) <>
16262 nvl(l_task_dates(l_tcnt).new_start_date,sysdate)) THEN
16263
16264 PA_TASKS_MAINT_UTILS.Check_Start_Date(
16265 p_project_id => l_task_dates(l_tcnt).project_id,
16266 p_parent_task_id => l_task_dates(l_tcnt).parent_task_id,
16267 p_task_id => NULL,
16268 p_start_date => l_task_dates(l_tcnt).new_start_date,
16269 x_return_status => l_return_status,
16270 x_msg_count => l_msg_count,
16271 x_msg_data => l_msg_data);
16272
16273 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16274 PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
16275 END IF;
16276
16277 END IF;
16278
16279 IF (nvl(l_task_dates(l_tcnt).old_end_date,sysdate) <>
16280 nvl(l_task_dates(l_tcnt).new_end_date,sysdate)) THEN
16281 PA_TASKS_MAINT_UTILS.Check_End_Date(
16282 p_project_id => l_task_dates(l_tcnt).project_id,
16283 p_parent_task_id => l_task_dates(l_tcnt).parent_task_id,
16284 p_task_id => l_task_dates(l_tcnt).task_id,
16285 p_end_date => l_task_dates(l_tcnt).new_end_date,
16286 x_return_status => l_return_status,
16287 x_msg_count => l_msg_count,
16288 x_msg_data => l_msg_data);
16289
16290 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16291 PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
16292 END IF;
16293
16294 END IF;
16295
16296 l_msg_count := FND_MSG_PUB.count_msg;
16297 IF (l_msg_count > 0) THEN
16298 x_msg_count := l_msg_count;
16299 IF (x_msg_count = 1) THEN
16300 pa_interface_utils_pub.get_messages(
16301 p_encoded => FND_API.G_TRUE,
16302 p_msg_index => 1,
16303 p_data => l_data,
16304 p_msg_index_out => l_msg_index_out);
16305 x_msg_data := l_data;
16306 END IF;
16307 RAISE FND_API.G_EXC_ERROR;
16308 END IF;
16309
16310 EXIT when l_tcnt = l_task_dates.Last;
16311 l_tcnt := l_task_dates.NEXT(l_tcnt);
16312
16313 END LOOP;
16314
16315 END IF;
16316
16317 /* End of changes for --bug 8301015 */
16318
16319 END IF;
16320
16321 IF (p_commit = FND_API.G_TRUE) THEN
16322 COMMIT;
16323 END IF;
16324
16325 IF (p_debug_mode = 'Y') THEN
16326 pa_debug.debug('PA_TASK_PUB1.Update_Task_All_Info END');
16327 END IF;
16328
16329 EXCEPTION
16330 when FND_API.G_EXC_ERROR then
16331 if p_commit = FND_API.G_TRUE then
16332 rollback to update_Task_all_info;
16333 end if;
16334 x_return_status := FND_API.G_RET_STS_ERROR;
16335 when FND_API.G_EXC_UNEXPECTED_ERROR then
16336 if p_commit = FND_API.G_TRUE then
16337 rollback to update_Task_all_info;
16338 end if;
16339 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16340 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16341 p_procedure_name => 'Update_Task_All_Info',
16342 p_error_text => SUBSTRB(SQLERRM,1,240));
16343 when OTHERS then
16344 if p_commit = FND_API.G_TRUE then
16345 rollback to update_Task_all_info;
16346 end if;
16347 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16348 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16349 p_procedure_name => 'Update_Task_All_Info',
16350 p_error_text => SUBSTRB(SQLERRM,1,240));
16351 raise;
16352
16353 END Update_Task_All_Info;
16354
16355 -- 4429929 : Added CANCEL_TASK
16356 PROCEDURE CANCEL_TASK(
16357 p_calling_module IN VARCHAR2 :='SELF_SERVICE'
16358 ,p_api_version IN NUMBER :=1.0
16359 ,p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE
16360 ,p_validate_only IN VARCHAR2 :=FND_API.G_FALSE
16361 ,p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL
16362 ,p_calling_mode IN VARCHAR2 :=null
16363 ,p_task_id IN NUMBER
16364 ,p_task_version_id IN NUMBER
16365 ,p_project_id IN NUMBER
16366 ,p_cancel_status_code IN VARCHAR2
16367 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16368 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16369 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16370 )
16371 IS
16372 l_debug_mode VARCHAR2(1);
16373 l_module_name VARCHAR2(100):= 'PA_TASK_PUB1.CANCEL_TASK';
16374 l_error_message_code VARCHAR2(32);
16375
16376 -- 4533534 : Included join of pa_proj_elem_ver_structure too
16377 CURSOR c_get_all_task_versions(c_task_id NUMBER, c_project_id NUMBER) IS
16378 SELECT ver.element_version_id, str.status_code
16379 FROM pa_proj_element_versions ver
16380 , pa_proj_elem_ver_structure str
16381 WHERE ver.project_id = c_project_id
16382 AND ver.proj_element_id = c_task_id
16383 AND ver.project_id = str.project_id
16384 and ver.parent_structure_version_id = str.element_version_id
16385 ;
16386
16387 -- 4533534 : Commnted this cusror and written new simplified cusror
16388 /*
16389 CURSOR c_get_links(c_task_version_id NUMBER, c_project_id NUMBER) IS
16390 SELECT
16391 ppv2.project_id sub_project_id
16392 ,ppv2.element_version_id sub_structure_ver_id
16393 ,ppv1.project_id parent_project_id
16394 ,ppv1.parent_structure_version_id parent_structure_ver_id
16395 ,ppv1.element_version_id parent_task_version_id
16396 ,ppv1.wbs_number parent_wbs_number
16397 ,por1.object_id_from1 link_task_ver_id
16398 ,por1.object_relationship_id object_relationship_id
16399 ,por1.record_version_number record_version_number
16400 ,ppv1.task_unpub_ver_status_code task_unpub_ver_status_code
16401 FROM
16402 pa_proj_element_versions ppv1 -- linking task
16403 ,pa_proj_element_versions ppv2 -- linked project
16404 ,pa_object_relationships por1
16405 ,pa_object_relationships por2
16406 ,(SELECT object_id_from1, object_id_to1
16407 FROM pa_object_relationships
16408 START WITH object_id_from1 = c_task_version_id
16409 and relationship_type = 'S'
16410 CONNECT BY object_id_from1 = PRIOR object_id_to1
16411 and relationship_type = 'S'
16412 UNION
16413 SELECT to_number(null) object_id_from1, c_task_version_id object_id_to1
16414 FROM DUAL
16415 ) pobj
16416 WHERE
16417 ppv2.element_version_id = por1.object_id_to1
16418 AND por1.object_id_from1 = por2.object_id_to1
16419 AND por2.object_id_from1 = ppv1.element_version_id
16420 AND ppv1.element_version_id = pobj.object_id_to1
16421 AND ppv2.object_type = 'PA_STRUCTURES'
16422 AND por1.relationship_type in ( 'LW', 'LF' )
16423 AND ppv1.project_id=c_project_id
16424 ;
16425 */
16426 CURSOR c_get_links(c_task_version_id NUMBER) IS
16427 SELECT
16428 ppv.project_id sub_project_id
16429 ,ppv.element_version_id sub_structure_ver_id
16430 ,por.object_id_from1 link_task_ver_id
16431 ,por.object_relationship_id object_relationship_id
16432 ,por.record_version_number record_version_number
16433 ,por.relationship_type relationship_type
16434 FROM
16435 pa_proj_element_versions ppv -- linked project
16436 ,pa_object_relationships por
16437 ,(SELECT object_id_from1, object_id_to1 -- Get all sub tasks including linking tasks
16438 FROM pa_object_relationships
16439 START WITH object_id_from1 = c_task_version_id
16440 and relationship_type = 'S'
16441 CONNECT BY object_id_from1 = PRIOR object_id_to1
16442 and relationship_type = 'S'
16443 ) pobj
16444 WHERE
16445 pobj.object_id_to1 = por.object_id_from1
16446 AND por.relationship_type = 'LW' -- 4533534 : It shd be LW only otherwsie it will give error PA_NO_RECORD_VERSION_NUMBER
16447 AND por.object_id_to1 = ppv.element_version_id
16448 AND ppv.object_type = 'PA_STRUCTURES'
16449 ;
16450
16451 l_version_enabled VARCHAR2(1);
16452
16453 BEGIN
16454 x_return_status := FND_API.G_RET_STS_SUCCESS;
16455 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
16456 SAVEPOINT CANCEL_TASK_SP;
16457
16458 IF l_debug_mode = 'Y' THEN
16459 pa_debug.write(l_module_name,'Cancel Task Passed Parameters', 3);
16460 pa_debug.write(l_module_name,'p_task_id='||p_task_id, 3);
16461 pa_debug.write(l_module_name,'p_task_version_id='||p_task_version_id, 3);
16462 pa_debug.write(l_module_name,'p_project_id='||p_project_id, 3);
16463 pa_debug.write(l_module_name,'p_cancel_status_code='||p_cancel_status_code, 3);
16464 END IF;
16465
16466 IF p_init_msg_list = 'T' THEN
16467 FND_MSG_PUB.initialize;
16468 END IF;
16469
16470 IF l_debug_mode = 'Y' THEN
16471 pa_debug.write(l_module_name,'Calling Check_chg_stat_cancel_ok', 3);
16472 END IF;
16473
16474 PA_PROJ_ELEMENTS_UTILS.Check_chg_stat_cancel_ok
16475 (
16476 p_task_id => p_task_id
16477 ,p_task_version_id => p_task_version_id
16478 ,p_new_task_status => p_cancel_status_code
16479 ,x_return_status => x_return_status
16480 ,x_error_message_code => l_error_message_code
16481 );
16482
16483 IF l_debug_mode = 'Y' THEN
16484 pa_debug.write(l_module_name,'After Call Check_chg_stat_cancel_ok x_return_status='||x_return_status, 3);
16485 END IF;
16486
16487 IF (x_return_status <> 'S') THEN
16488 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16489 p_msg_name => l_error_message_code);
16490 raise FND_API.G_EXC_ERROR;
16491 END IF;
16492 IF l_debug_mode = 'Y' THEN
16493 pa_debug.write(l_module_name,'Calling set_new_tasks_to_TBD', 3);
16494 END IF;
16495
16496 PA_TASK_PVT1.set_new_tasks_to_tbd(
16497 p_project_id => p_project_id
16498 ,p_task_id => p_task_id
16499 ,p_task_status => p_cancel_status_code
16500 ,x_return_status => x_return_status
16501 ,x_msg_count => x_msg_count
16502 ,x_msg_data => x_msg_data);
16503
16504 IF l_debug_mode = 'Y' THEN
16505 pa_debug.write(l_module_name,'After Call set_new_tasks_to_TBD x_return_status='||x_return_status, 3);
16506 END IF;
16507
16508 IF (x_return_status <> 'S') THEN
16509 raise FND_API.G_EXC_ERROR;
16510 END IF;
16511
16512 IF l_debug_mode = 'Y' THEN
16513 pa_debug.write(l_module_name,'Calling push_down_task_status', 3);
16514 END IF;
16515
16516 PA_PROGRESS_PUB.push_down_task_status(
16517 p_calling_module => p_calling_module
16518 ,p_task_status => p_cancel_status_code
16519 ,p_project_id => p_project_id
16520 ,p_object_id => p_task_id
16521 ,p_object_version_id => p_task_version_id
16522 ,p_object_type => 'PA_TASKS'
16523 ,x_return_status => x_return_status
16524 ,x_msg_count => x_msg_count
16525 ,x_msg_data => x_msg_data
16526 );
16527 IF l_debug_mode = 'Y' THEN
16528 pa_debug.write(l_module_name,'After Call push_down_task_status x_return_status='||x_return_status, 3);
16529 END IF;
16530
16531 IF (x_return_status <> 'S') THEN
16532 raise FND_API.G_EXC_ERROR;
16533 END IF;
16534
16535 l_version_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id);
16536
16537 IF l_debug_mode = 'Y' THEN
16538 pa_debug.write(l_module_name,'Call Delete_SubProject_Association l_version_enabled='||l_version_enabled, 3);
16539 END IF;
16540
16541 FOR l_all_tasks IN c_get_all_task_versions(p_task_id, p_project_id) LOOP
16542 IF l_debug_mode = 'Y' THEN
16543 pa_debug.write(l_module_name,'l_all_tasks.element_version_id='||l_all_tasks.element_version_id, 3);
16544 pa_debug.write(l_module_name,'l_all_tasks.status_code='||l_all_tasks.status_code, 3);
16545 END IF;
16546 --4533534
16547 IF ((l_version_enabled = 'N') OR (l_version_enabled = 'Y' AND l_all_tasks.status_code = 'STRUCTURE_WORKING'))
16548 THEN
16549 --4533534
16550 --FOR l_all_links IN c_get_links(l_all_tasks.element_version_id, p_project_id) LOOP
16551 FOR l_all_links IN c_get_links(l_all_tasks.element_version_id) LOOP
16552 IF l_debug_mode = 'Y' THEN
16553 pa_debug.write(l_module_name,'l_all_links.sub_project_id='||l_all_links.sub_project_id, 3);
16554 pa_debug.write(l_module_name,'l_all_links.sub_structure_ver_id='||l_all_links.sub_structure_ver_id, 3);
16555 --pa_debug.write(l_module_name,'l_all_links.parent_project_id='||l_all_links.parent_project_id, 3);
16556 --pa_debug.write(l_module_name,'l_all_links.parent_structure_ver_id='||l_all_links.parent_structure_ver_id, 3);
16557 --pa_debug.write(l_module_name,'l_all_links.parent_task_version_id='||l_all_links.parent_task_version_id, 3);
16558 --pa_debug.write(l_module_name,'l_all_links.parent_wbs_number='||l_all_links.parent_wbs_number, 3);
16559 pa_debug.write(l_module_name,'l_all_links.link_task_ver_id='||l_all_links.link_task_ver_id, 3);
16560 pa_debug.write(l_module_name,'l_all_links.object_relationship_id='||l_all_links.object_relationship_id, 3);
16561 pa_debug.write(l_module_name,'l_all_links.record_version_number='||l_all_links.record_version_number, 3);
16562 --pa_debug.write(l_module_name,'l_all_links.task_unpub_ver_status_code='||l_all_links.task_unpub_ver_status_code, 3);
16563 pa_debug.write(l_module_name,'l_all_links.relationship_type='||l_all_links.relationship_type, 3);
16564 END IF;
16565 --4533534
16566 --IF ((l_version_enabled = 'N') OR (l_version_enabled = 'Y' AND NVL(l_all_links.task_unpub_ver_status_code,'WORKING') <> 'PUBLISHED'))
16567
16568 PA_RELATIONSHIP_PUB.Delete_SubProject_Association
16569 ( p_init_msg_list => FND_API.G_FALSE,
16570 p_calling_module => p_calling_module,
16571 p_object_relationships_id => l_all_links.object_relationship_id,
16572 p_record_version_number => l_all_links.record_version_number,
16573 x_return_status => x_return_status,
16574 x_msg_count => x_msg_count,
16575 x_msg_data => x_msg_data
16576 );
16577 IF l_debug_mode = 'Y' THEN
16578 pa_debug.write(l_module_name,'After Call Delete_SubProject_Association x_return_status='||x_return_status, 3);
16579 END IF;
16580
16581 IF (x_return_status <> 'S') THEN
16582 raise FND_API.G_EXC_ERROR;
16583 END IF;
16584 END LOOP;
16585 END IF;
16586 END LOOP;
16587 EXCEPTION
16588 when FND_API.G_EXC_ERROR then
16589 x_return_status := FND_API.G_RET_STS_ERROR;
16590 x_msg_count := fnd_msg_pub.count_msg;
16591 ROLLBACK to CANCEL_TASK_SP;
16592 when FND_API.G_EXC_UNEXPECTED_ERROR then
16593 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16594 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16595 p_procedure_name => 'CANCEL_TASK',
16596 p_error_text => SUBSTRB(SQLERRM,1,240));
16597 x_msg_count := fnd_msg_pub.count_msg;
16598 ROLLBACK to CANCEL_TASK_SP;
16599 when OTHERS then
16600 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16601 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16602 p_procedure_name => 'CANCEL_TASK',
16603 p_error_text => SUBSTRB(SQLERRM,1,240));
16604 x_msg_count := fnd_msg_pub.count_msg;
16605 ROLLBACK to CANCEL_TASK_SP;
16606 raise;
16607 END CANCEL_TASK;
16608
16609 -- Bug Fix 5593736.
16610
16611 PROCEDURE INDENT_MULTI_TASK_VERSION
16612 (p_api_version IN NUMBER := 1.0
16613 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
16614 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
16615 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
16616 ,p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL
16617 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
16618 ,p_debug_mode IN VARCHAR2 := 'N'
16619 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16620 ,p_project_id IN NUMBER
16621 ,p_structure_version_id IN NUMBER
16622 ,p_structure_type IN VARCHAR2 :='WORKPLAN'
16623 ,p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16624 ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16625 ,p_display_sequence_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16626 ,x_return_status OUT NOCOPY VARCHAR2
16627 ,x_msg_count OUT NOCOPY NUMBER
16628 ,x_msg_data OUT NOCOPY VARCHAR2)
16629 IS
16630
16631 l_api_name CONSTANT VARCHAR(30) := 'INDENT_MULTI_TASK_VERSION';
16632 l_api_version CONSTANT NUMBER := 1.0;
16633 l_return_status VARCHAR2(1);
16634 l_msg_count NUMBER;
16635 l_msg_data VARCHAR2(250);
16636 l_data VARCHAR2(250);
16637 l_msg_index_out NUMBER;
16638
16639 h NUMBER := 0;
16640 i NUMBER := 0;
16641 j NUMBER := 0;
16642 k NUMBER := 0;
16643 l NUMBER := 0;
16644 m NUMBER := 0;
16645 l_count NUMBER := 0;
16646 l_error_count NUMBER := 0;
16647 l_msg_code VARCHAR2(30) := null;
16648
16649 TYPE l_task_in_rec_type IS RECORD
16650 (task_version_id NUMBER := null
16651 ,record_version_number NUMBER := null
16652 ,display_sequence NUMBER := null);
16653
16654 l_current l_task_in_rec_type;
16655
16656 TYPE l_task_in_tbl_type IS TABLE OF l_task_in_rec_type INDEX BY BINARY_INTEGER;
16657
16658 l_task_in_tbl l_task_in_tbl_type;
16659
16660 TYPE l_task_error_rec_type IS RECORD
16661 (task_name VARCHAR2(300) := null
16662 ,task_number VARCHAR2(300) := null
16663 ,error_msg VARCHAR2(2000) := null);
16664
16665 TYPE l_task_error_tbl_type IS TABLE OF l_task_error_rec_type INDEX BY BINARY_INTEGER;
16666
16667 l_task_error_tbl l_task_error_tbl_type;
16668
16669 cursor l_cur_task_attr(c_project_id NUMBER, c_element_version_id NUMBER) is
16670 select ppe.name, ppev.wbs_number --Bug 6878138
16671 from pa_proj_elements ppe, pa_proj_element_versions ppev
16672 where ppe.project_id = ppev.project_id
16673 and ppe.proj_element_id = ppev.proj_element_id
16674 and ppev.project_id = c_project_id
16675 and ppev.element_version_id = c_element_version_id;
16676
16677 l_rec_task_attr l_cur_task_attr%rowtype;
16678
16679 BEGIN
16680
16681 pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION');
16682
16683 IF (p_debug_mode = 'Y') THEN
16684 pa_debug.debug('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION BEGIN');
16685 END IF;
16686
16687 IF (p_commit = FND_API.G_TRUE) THEN
16688 savepoint indent_multi_task_version;
16689 END IF;
16690
16691 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16692 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16693 END IF;
16694
16695 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
16696 FND_MSG_PUB.initialize;
16697 END IF;
16698
16699 x_return_status := FND_API.G_RET_STS_SUCCESS;
16700
16701 -- Copy the input paramters to the local pl/sql table.
16702 for h in p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST
16703 loop
16704 l_task_in_tbl(h).task_version_id := p_task_version_id_tbl(h);
16705 l_task_in_tbl(h).record_version_number := p_record_version_number_tbl(h);
16706 l_task_in_tbl(h).display_sequence := p_display_sequence_tbl(h);
16707 end loop;
16708
16709 -- Sort the tasks for indent in ascending order of display sequence.
16710 -- Assuming that the user will generally choose less than a thousand items
16711 -- we have implemeneted an insertion sort for good sorting efficiency.
16712 l_count := l_task_in_tbl.count;
16713
16714 i := 1;
16715
16716 while (i <= l_count)
16717 loop
16718 l_current := l_task_in_tbl(i);
16719 j := i;
16720 while ((j > 1) AND (l_task_in_tbl(j-1).display_sequence > l_current.display_sequence))
16721 loop
16722 l_task_in_tbl(j) := l_task_in_tbl(j-1);
16723 j := (j-1);
16724 end loop;
16725 l_task_in_tbl(j) := l_current;
16726 i := (i + 1);
16727 end loop;
16728
16729 -- Loop through the sorted list and indent each task version.
16730 for k in 1..l_count
16731 loop
16732 -- Clear the message stack.
16733 FND_MSG_PUB.initialize;
16734
16735 -- Call the API: PA_TASK_PUB1.INDENT_TASK_VERSION_BULK().
16736 PA_TASK_PUB1.INDENT_TASK_VERSION_BULK
16737 (p_api_version => p_api_version
16738 , p_init_msg_list => p_init_msg_list
16739 , p_commit => p_commit
16740 , p_validate_only => p_validate_only
16741 , p_validation_level => p_validation_level
16742 , p_calling_module => p_calling_module
16743 , p_debug_mode => p_debug_mode
16744 , p_max_msg_count => p_max_msg_count
16745 , p_structure_version_id => p_structure_version_id
16746 , p_task_version_id => l_task_in_tbl(k).task_version_id
16747 , p_project_id => p_project_id
16748 , p_record_version_number => l_task_in_tbl(k).record_version_number
16749 , x_return_status => l_return_status
16750 , x_msg_count => l_msg_count
16751 , x_msg_data => l_msg_data);
16752
16753 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
16754
16755 -- Store the task name and task number in the local pl/sql error table.
16756 open l_cur_task_attr(p_project_id, l_task_in_tbl(k).task_version_id);
16757 fetch l_cur_task_attr into l_task_error_tbl(k).task_name, l_task_error_tbl(k).task_number ;
16758 close l_cur_task_attr;
16759
16760 -- Store the message code for the error message reported in the local pl/sql error table.
16761 PA_INTERFACE_UTILS_PUB.get_messages
16762 (p_encoded => FND_API.G_FALSE -- Get the encoded message.
16763 , p_msg_index => 1 -- Get the message at index 1.
16764 , p_data => l_task_error_tbl(k).error_msg
16765 , p_msg_index_out => l_msg_index_out);
16766
16767 end if;
16768
16769 end loop; -- loop k.
16770
16771 -- Populate the tokenized error messages in the error stack:
16772 l_error_count := l_task_error_tbl.count;
16773
16774 if (l_error_count > 0) then
16775
16776 -- Set the return status to error.
16777 x_return_status := FND_API.G_RET_STS_ERROR;
16778
16779 -- Clear all previous messages from the message stack.
16780 FND_MSG_PUB.initialize;
16781
16782 -- Populate the generic error message.
16783 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
16784
16785 -- Loop through the local pl/sql error table to populate the tokenized error messages.
16786 -- Bug Fix 5920784
16787 -- Modified the following line to loop through the original task count rather than the error msg table count.
16788
16789 -- for l in 1..l_error_count
16790 FOR l in 1..l_count
16791 -- End of Bug Fix 5920784
16792
16793 loop
16794 if (l_task_error_tbl.exists(l)) then
16795 PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
16796 ,'TASKNAME',l_task_error_tbl(l).task_name
16797 ,'TASKNUMBER',l_task_error_tbl(l).task_number
16798 ,'ERRORMSG', l_task_error_tbl(l).error_msg);
16799 end if;
16800 end loop;
16801
16802 raise FND_API.G_EXC_ERROR;
16803
16804 end if;
16805
16806 IF (p_commit = FND_API.G_TRUE) THEN
16807 COMMIT;
16808 END IF;
16809
16810 IF (p_debug_mode = 'Y') THEN
16811 pa_debug.debug('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION END');
16812 END IF;
16813
16814 EXCEPTION
16815
16816 when FND_API.G_EXC_ERROR then
16817 if p_commit = FND_API.G_TRUE then
16818 rollback to indent_multi_task_version;
16819 end if;
16820 x_return_status := FND_API.G_RET_STS_ERROR;
16821
16822 when FND_API.G_EXC_UNEXPECTED_ERROR then
16823 if p_commit = FND_API.G_TRUE then
16824 rollback to indent_multi_task_version;
16825 end if;
16826 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16827 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16828 p_procedure_name => 'INDENT_MULTI_TASK_VERSION',
16829 p_error_text => SUBSTRB(SQLERRM,1,240));
16830 when OTHERS then
16831 if p_commit = FND_API.G_TRUE then
16832 rollback to indent_multi_task_version;
16833 end if;
16834 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16835 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16836 p_procedure_name => 'INDENT_MULTI_TASK_VERSION',
16837 p_error_text => SUBSTRB(SQLERRM,1,240));
16838
16839 raise;
16840
16841 END INDENT_MULTI_TASK_VERSION;
16842
16843 PROCEDURE OUTDENT_MULTI_TASK_VERSION
16844 (p_api_version IN NUMBER := 1.0
16845 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
16846 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
16847 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
16848 ,p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL
16849 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
16850 ,p_debug_mode IN VARCHAR2 := 'N'
16851 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16852 ,p_project_id IN NUMBER
16853 ,p_structure_version_id IN NUMBER
16854 ,p_structure_type IN VARCHAR2 :='WORKPLAN'
16855 ,p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16856 ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16857 ,p_display_sequence_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16858 ,x_return_status OUT NOCOPY VARCHAR2
16859 ,x_msg_count OUT NOCOPY NUMBER
16860 ,x_msg_data OUT NOCOPY VARCHAR2)
16861 IS
16862
16863 l_api_name CONSTANT VARCHAR(30) := 'OUTDENT_MULTI_TASK_VERSION';
16864 l_api_version CONSTANT NUMBER := 1.0;
16865 l_return_status VARCHAR2(1);
16866 l_msg_count NUMBER;
16867 l_msg_data VARCHAR2(250);
16868 l_data VARCHAR2(250);
16869 l_msg_index_out NUMBER;
16870
16871 h NUMBER := 0;
16872 i NUMBER := 0;
16873 j NUMBER := 0;
16874 k NUMBER := 0;
16875 l NUMBER := 0;
16876 m NUMBER := 0;
16877 l_count NUMBER := 0;
16878 l_error_count NUMBER := 0;
16879 l_msg_code VARCHAR2(30) := null;
16880
16881 TYPE l_task_in_rec_type IS RECORD
16882 (task_version_id NUMBER := null
16883 ,record_version_number NUMBER := null
16884 ,display_sequence NUMBER := null);
16885
16886 l_current l_task_in_rec_type;
16887
16888 TYPE l_task_in_tbl_type IS TABLE OF l_task_in_rec_type INDEX BY BINARY_INTEGER;
16889
16890 l_task_in_tbl l_task_in_tbl_type;
16891
16892 TYPE l_task_error_rec_type IS RECORD
16893 (task_name VARCHAR2(300) := null
16894 ,task_number VARCHAR2(300) := null
16895 ,error_msg VARCHAR2(2000) := null);
16896
16897 TYPE l_task_error_tbl_type IS TABLE OF l_task_error_rec_type INDEX BY BINARY_INTEGER;
16898
16899 l_task_error_tbl l_task_error_tbl_type;
16900
16901 cursor l_cur_task_attr(c_project_id NUMBER, c_element_version_id NUMBER) is
16902 select ppe.name, ppev.wbs_number --Bug 6878138
16903 from pa_proj_elements ppe, pa_proj_element_versions ppev
16904 where ppe.project_id = ppev.project_id
16905 and ppe.proj_element_id = ppev.proj_element_id
16906 and ppev.project_id = c_project_id
16907 and ppev.element_version_id = c_element_version_id;
16908
16909 l_rec_task_attr l_cur_task_attr%rowtype;
16910
16911 BEGIN
16912
16913 pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION');
16914
16915 IF (p_debug_mode = 'Y') THEN
16916 pa_debug.debug('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION BEGIN');
16917 END IF;
16918
16919 IF (p_commit = FND_API.G_TRUE) THEN
16920 savepoint outdent_multi_task_version;
16921 END IF;
16922
16923 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16924 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16925 END IF;
16926
16927 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
16928 FND_MSG_PUB.initialize;
16929 END IF;
16930
16931 x_return_status := FND_API.G_RET_STS_SUCCESS;
16932
16933 -- Copy the input paramters to the local pl/sql table.
16934 for h in p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST
16935 loop
16936 l_task_in_tbl(h).task_version_id := p_task_version_id_tbl(h);
16937 l_task_in_tbl(h).record_version_number := p_record_version_number_tbl(h);
16938 l_task_in_tbl(h).display_sequence := p_display_sequence_tbl(h);
16939 end loop;
16940
16941 -- Sort the tasks for outdent in descending order of display sequence.
16942 -- Assuming that the user will generally choose less than a thousand items
16943 -- we have implemeneted an insertion sort for good sorting efficiency.
16944 l_count := l_task_in_tbl.count;
16945
16946 i := 1;
16947
16948 while (i <= l_count)
16949 loop
16950 l_current := l_task_in_tbl(i);
16951 j := i;
16952 while ((j > 1) AND (l_task_in_tbl(j-1).display_sequence < l_current.display_sequence))
16953 loop
16954 l_task_in_tbl(j) := l_task_in_tbl(j-1);
16955 j := (j-1);
16956 end loop;
16957 l_task_in_tbl(j) := l_current;
16958 i := (i + 1);
16959 end loop;
16960
16961 -- Loop through the sorted list and outdent each task version.
16962 for k in 1..l_count
16963 loop
16964 -- Clear the message stack.
16965 FND_MSG_PUB.initialize;
16966
16967 -- Call the API: PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK().
16968 PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK
16969 (p_api_version => p_api_version
16970 , p_init_msg_list => p_init_msg_list
16971 , p_commit => p_commit
16972 , p_validate_only => p_validate_only
16973 , p_validation_level => p_validation_level
16974 , p_calling_module => p_calling_module
16975 , p_debug_mode => p_debug_mode
16976 , p_max_msg_count => p_max_msg_count
16977 , p_structure_version_id => p_structure_version_id
16978 , p_task_version_id => l_task_in_tbl(k).task_version_id
16979 , p_project_id => p_project_id
16980 , p_record_version_number => l_task_in_tbl(k).record_version_number
16981 , x_return_status => l_return_status
16982 , x_msg_count => l_msg_count
16983 , x_msg_data => l_msg_data);
16984
16985 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
16986
16987 -- Store the task name and task number in the local pl/sql error table.
16988 open l_cur_task_attr(p_project_id, l_task_in_tbl(k).task_version_id);
16989 fetch l_cur_task_attr into l_task_error_tbl(k).task_name, l_task_error_tbl(k).task_number ;
16990 close l_cur_task_attr;
16991
16992 -- Store the message code for the error message reported in the local pl/sql error table.
16993 PA_INTERFACE_UTILS_PUB.get_messages
16994 (p_encoded => FND_API.G_FALSE -- Get the encoded message.
16995 , p_msg_index => 1 -- Get the message at index 1.
16996 , p_data => l_task_error_tbl(k).error_msg
16997 , p_msg_index_out => l_msg_index_out);
16998
16999 end if;
17000
17001 end loop; -- loop k.
17002
17003 -- Populate the tokenized error messages in the error stack:
17004 l_error_count := l_task_error_tbl.count;
17005
17006 if (l_error_count > 0) then
17007
17008 -- Set the return status to error.
17009 x_return_status := FND_API.G_RET_STS_ERROR;
17010
17011 -- Clear all previous messages from the message stack.
17012 FND_MSG_PUB.initialize;
17013
17014 -- Populate the generic error message.
17015 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
17016
17017 -- Loop through the local pl/sql error table to populate the tokenized error messages.
17018 for l in 1..l_error_count
17019 loop
17020 if (l_task_error_tbl.exists(l)) then
17021 PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
17022 ,'TASKNAME',l_task_error_tbl(l).task_name
17023 ,'TASKNUMBER',l_task_error_tbl(l).task_number
17024 ,'ERRORMSG', l_task_error_tbl(l).error_msg);
17025 end if;
17026 end loop;
17027
17028 raise FND_API.G_EXC_ERROR;
17029
17030 end if;
17031
17032 IF (p_commit = FND_API.G_TRUE) THEN
17033 COMMIT;
17034 END IF;
17035
17036 IF (p_debug_mode = 'Y') THEN
17037 pa_debug.debug('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION END');
17038 END IF;
17039
17040 EXCEPTION
17041
17042 when FND_API.G_EXC_ERROR then
17043 if p_commit = FND_API.G_TRUE then
17044 rollback to outdent_multi_task_version;
17045 end if;
17046 x_return_status := FND_API.G_RET_STS_ERROR;
17047
17048 when FND_API.G_EXC_UNEXPECTED_ERROR then
17049 if p_commit = FND_API.G_TRUE then
17050 rollback to outdent_multi_task_version;
17051 end if;
17052 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17053 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
17054 p_procedure_name => 'OUTDENT_MULTI_TASK_VERSION',
17055 p_error_text => SUBSTRB(SQLERRM,1,240));
17056 when OTHERS then
17057 if p_commit = FND_API.G_TRUE then
17058 rollback to outdent_multi_task_version;
17059 end if;
17060 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17061 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
17062 p_procedure_name => 'OUTDENT_MULTI_TASK_VERSION',
17063 p_error_text => SUBSTRB(SQLERRM,1,240));
17064
17065 raise;
17066
17067 END OUTDENT_MULTI_TASK_VERSION;
17068
17069 --anuragag bug 8566495 E&C enhancement changes
17070 PROCEDURE APPROVE_TASKS_IN_BULK
17071 (p_task_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
17072 ,p_parent_task_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
17073 ,p_task_name_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE
17074 ,p_task_number_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE
17075 ,p_project_id IN NUMBER
17076 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17077 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17078 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17079 )
17080
17081 IS
17082 l_task_number pa_tasks.task_number%TYPE ;
17083 l_task_name pa_tasks.task_name%TYPE ;
17084 l_msg_count NUMBER := 0;
17085 l_msg_data VARCHAR2(2000);
17086 l_return_status VARCHAR2(1);
17087 l_msg_count2 NUMBER := 0;
17088 l_msg_data2 VARCHAR2(2000);
17089 l_return_status2 VARCHAR2(1);
17090 l_dummy_app_name VARCHAR2(30);
17091 l_enc_msg_data VARCHAR2(2000);
17092 l_msg_name VARCHAR2(30);
17093 l_msg_index_out NUMBER ;
17094 l_task_id_tbl SYSTEM.PA_NUM_TBL_TYPE;
17095
17096 l_project_id pa_proj_elements.project_id%TYPE;
17097 l_task_start_date DATE;
17098 l_task_finish_date DATE;
17099 l_org_id NUMBER;
17100
17101 TYPE l_error_msg_name_tbl_type IS TABLE OF
17102 fnd_new_messages.message_text%TYPE INDEX BY BINARY_INTEGER ;
17103 TYPE l_element_name_tbl_type IS TABLE OF
17104 pa_proj_elements.name%TYPE INDEX BY BINARY_INTEGER ;
17105 TYPE l_element_number_tbl_type IS TABLE OF
17106 pa_proj_elements.element_number%TYPE INDEX BY BINARY_INTEGER ;
17107
17108 l_error_msg_name_tbl l_error_msg_name_tbl_type ;
17109 l_element_name_tbl l_element_name_tbl_type ;
17110 l_element_number_tbl l_element_number_tbl_type ;
17111 j NUMBER ;
17112 l_ntf_id NUMBER;
17113 l_parent_task_status VARCHAR2(20);
17114 l_parent_id NUMBER;
17115 l_item_key pa_wf_processes.item_key%TYPE;
17116
17117 cursor task_ntf(c_task_id NUMBER,c_project_id NUMBER) IS
17118 SELECT max(notification_id) ntf_id
17119 FROM WF_NOTIFICATIONS WFN
17120 WHERE message_type = 'PATASKWF'
17121 AND status = 'OPEN'
17122 --bug 13395163
17123 --bug 14284485
17124 AND EXISTS (
17125 SELECT /*+ NO_UNNEST */ 1
17126 FROM WF_NOTIFICATION_ATTRIBUTES
17127 WHERE notification_id = wfn.notification_id
17128 AND name = 'TASK_NUMBER'
17129 AND text_value like (select element_number from pa_proj_elements
17130 where proj_element_id = c_task_id)
17131 )
17132 AND EXISTS (
17133 SELECT /*+ NO_UNNEST */ 1
17134 FROM WF_NOTIFICATION_ATTRIBUTES
17135 WHERE notification_id = wfn.notification_id
17136 AND name = 'PROJECT_NUMBER'
17137 AND text_value like (select segment1 from pa_projects_all
17138 where project_id = c_project_id)
17139 );
17140
17141 cursor parent_task_status(c_task_id NUMBER) is
17142 select task_status,ppe.proj_element_id from pa_proj_elements ppe where
17143 ppe.proj_element_id =
17144 (select ppev1.proj_element_id from pa_proj_element_versions ppev1,pa_object_relationships por
17145 where por.object_id_to1 = (select element_version_id from pa_proj_element_versions ppev2
17146 where proj_element_id = c_task_id)
17147 and por.relationship_type = 'S'
17148 and por.relationship_subtype = 'TASK_TO_TASK'
17149 and ppev1.element_version_id = por.object_id_from1);
17150 --Bug 8566495 Changes for E&C enhancement related to CR workflow
17151
17152 CURSOR C3(p_project_id NUMBER, p_task_id NUMBER) IS
17153 SELECT pci.ci_id,
17154 pcia.ci_action_id action_id
17155 FROM pa_control_items pci, pa_ci_actions pcia
17156 WHERE pci.project_id = p_project_id
17157 AND pcia.ci_id = pci.ci_id
17158 AND pcia.ci_action_number = pci.open_action_num
17159 AND EXISTS (SELECT 1 FROM pa_budget_versions pbv, pa_resource_assignments pra
17160 WHERE pbv.project_id = pci.project_Id
17161 AND pbv.ci_id = pci.ci_id
17162 AND pra.budget_version_id = pbv.budget_version_id
17163 AND pra.project_id = p_project_id
17164 AND pra.task_id = p_task_id)
17165 AND pci.status_code in ('CI_SUBMITTED');
17166
17167 BEGIN
17168 l_task_id_tbl := p_task_id_tbl;
17169 l_project_id := p_project_id;
17170 fnd_msg_pub.initialize;
17171
17172 select carrying_out_organization_id
17173 into l_org_id
17174 from pa_projects_all
17175 where project_id = l_project_id;
17176
17177 --hsiu: 3604086
17178 x_return_status := FND_API.G_RET_STS_SUCCESS;
17179 j:=0;
17180 l_msg_count := 0;
17181 l_return_status := FND_API.G_RET_STS_SUCCESS;
17182
17183 for i in p_task_id_tbl.FIRST..p_task_id_tbl.LAST loop
17184
17185 select ppvsch.scheduled_start_date,ppvsch.scheduled_finish_date
17186 into l_task_start_date,l_task_finish_date
17187 from pa_proj_elem_ver_schedule ppvsch,pa_proj_elements ppe,pa_proj_element_versions ppv
17188 where ppe.proj_element_id = ppv.proj_element_id
17189 and ppv.element_version_id = ppvsch.element_version_id
17190 and ppe.proj_element_id = p_task_id_tbl(i);
17191
17192 l_return_status := FND_API.G_RET_STS_SUCCESS ;
17193 l_msg_count := 0 ;
17194 l_msg_data := null ;
17195
17196 open parent_task_status(p_task_id_tbl(i));
17197 fetch parent_task_status into l_parent_task_status,l_parent_id;
17198
17199 close parent_task_status;
17200
17201 if(l_parent_task_status is not null)
17202 then
17203 x_msg_count:=1;
17204 raise FND_API.G_EXC_ERROR;
17205 end if;
17206
17207
17208
17209 PA_TASKS_MAINT_PUB.CREATE_TASK
17210 (
17211 p_calling_module => 'SELF_SERVICE'
17212 ,p_init_msg_list => FND_API.G_FALSE
17213 ,p_debug_mode => 'N'
17214 ,p_project_id => l_project_id
17215 ,p_reference_task_id => l_parent_id
17216 ,p_peer_or_sub => 'SUB'
17217 ,p_task_number => p_task_number_tbl(i)
17218 ,p_task_name => p_task_name_tbl(i)
17219 ,p_task_id => l_task_id_tbl(i)
17220 ,p_task_start_date => l_task_start_date
17221 ,p_task_completion_date => l_task_finish_date
17222 ,p_wbs_record_version_number => 1
17223 ,p_carrying_out_organization_id => l_org_id
17224 ,x_return_status =>l_return_status
17225 ,x_msg_count =>l_msg_count
17226 ,x_msg_data =>l_msg_data
17227 );
17228
17229 if l_return_status = FND_API.G_RET_STS_SUCCESS THEN
17230 open task_ntf(p_task_id_tbl(i),l_project_id);
17231 fetch task_ntf into l_ntf_id;
17232 close task_ntf;
17233 if(l_ntf_id is not null)
17234 then
17235 update WF_NOTIFICATIONS
17236 set status = 'CLOSED'
17237 where notification_id = l_ntf_id ;
17238 end if;
17239
17240 UPDATE PA_PROJ_ELEMENTS SET link_task_flag = 'N', task_status = ''
17241 WHERE proj_element_id = l_task_id_tbl(i);
17242
17243 FOR ci_info IN C3(l_project_id, l_task_id_tbl(i)) LOOP
17244
17245 PA_TASK_APPROVAL_PKG.Check_UsedTask_Status
17246 (ci_info.ci_id
17247 ,l_msg_count2
17248 ,l_msg_data2
17249 ,l_return_status2);
17250
17251 IF x_return_status = 'S' THEN
17252 /*PA_CONTROL_ITEMS_WORKFLOW.START_NOTIFICATION_WF
17253 ( p_item_type => 'PAWFCISC'
17254 ,p_process_name => 'PA_CI_PROCESS_APPROVAL'
17255 ,p_ci_id => ci_info.ci_id
17256 ,p_action_id => ci_info.action_id
17257 ,x_item_key => l_item_key
17258 ,x_return_status => l_return_status2
17259 ,x_msg_count => l_msg_count2
17260 ,x_msg_data => l_msg_data2 );*/
17261 PA_CONTROL_ITEMS_WORKFLOW.start_workflow
17262 (
17263 p_item_type => 'PAWFCISC'
17264 , p_process_name => 'PA_CI_PROCESS_APPROVAL'
17265 , p_ci_id => ci_info.ci_id
17266 , x_item_key => l_item_key
17267 ,x_return_status => l_return_status2
17268 ,x_msg_count => l_msg_count2
17269 ,x_msg_data => l_msg_data2 );
17270 END IF;
17271
17272 END LOOP;
17273
17274 else
17275 j:=j+1;
17276 end if;
17277 END LOOP;
17278
17279 if j>0
17280 then
17281 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17282 x_msg_count := 1;
17283 rollback;
17284 else
17285 x_return_status := FND_API.G_RET_STS_SUCCESS;
17286 x_msg_count := 0;
17287 commit;
17288 end if;
17289 x_msg_data:=l_msg_data;
17290 EXCEPTION
17291
17292 WHEN FND_API.G_EXC_ERROR THEN
17293 rollback;
17294 FND_MSG_PUB.initialize;
17295
17296 -- Populate the generic error message.
17297 PA_UTILS.ADD_MESSAGE('PA','PA_PARENT_TASK_UNAPPROVED');
17298 x_return_status := FND_API.G_RET_STS_ERROR;
17299 x_msg_count :=0;
17300 x_msg_data := 'PA_PARENT_TASK_UNAPPROVED';
17301
17302 WHEN OTHERS THEN
17303 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17304 x_msg_count := 1;
17305 x_msg_data := 'ANURAG';
17306 RAISE ;
17307
17308 END APPROVE_TASKS_IN_BULK;
17309 -- End of Bug Fix 5593736.
17310
17311 END PA_TASK_PUB1;